00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #include <stdio.h>
00037 #include <string.h>
00038
00039 #include "include/interfile.h"
00040
00070 int interfile_read(char headerName[256], char searchWord[256], char returnValue[256], char errorMessage[300]) {
00071 short int i, pos;
00072 short int count=0;
00073 int n;
00074 char *c[1];
00075 char keyword[256], value[256];
00076 char line[512];
00077 FILE *interfileHeader;
00078
00079
00080 for (i=0;i<256;i++) returnValue[i] = '\0';
00081 for (i=0;i<300;i++) errorMessage[i] = '\0';
00082
00083
00084 if ((interfileHeader = fopen(headerName,"r"))==NULL) {
00085 strcpy(errorMessage,headerName);
00086 strcat(errorMessage," could not be opened for reading");
00087 return 3;
00088 }
00089
00090
00091 n=fread(&c,1,1,interfileHeader); if(n<1) {
00092 strcpy(errorMessage,"wrong file header format?! No '!INTERFILE' at start of ");
00093 strcat(errorMessage,headerName);
00094 fclose(interfileHeader);
00095 return 4;
00096 }
00097 i=0;
00098 memcpy(&line[i],c,1);
00099 while (memcmp(c,"\n",1) && memcmp(c,"\r",1)) {
00100 i++;
00101 n=fread(&c,1,1,interfileHeader); if(n<1) {
00102 strcpy(errorMessage,"wrong file header format?! No '!INTERFILE' at start of ");
00103 strcat(errorMessage,headerName);
00104 fclose(interfileHeader);
00105 return 4;
00106 }
00107 memcpy(&line[i],c,1);
00108 }
00109 if (memcmp(line,"!INTERFILE",10)) {
00110 strcpy(errorMessage,"wrong file header format?! No '!INTERFILE' at start of ");
00111 strcat(errorMessage,headerName);
00112 fclose(interfileHeader);
00113 return 4;
00114 }
00115
00116
00117 while (fread(&c,1,1,interfileHeader) == 1) {
00118 for (i=0;i<516;i++) line[i] = '\0';
00119 for (i=0;i<256;i++) keyword[i] = '\0';
00120 for (i=0;i<256;i++) value[i] = '\0';
00121 i=0;
00122
00123
00124 while (memcmp(c,"\r",1) && memcmp(c,"\n",1) && i<516) {
00125 memcpy(&line[i],c,1);
00126 n=fread(&c,1,1,interfileHeader); if(n<1) {
00127 strcpy(errorMessage,"wrong file header format: ");
00128 strcat(errorMessage,headerName);
00129 fclose(interfileHeader);
00130 return 4;
00131 }
00132 i++;
00133 }
00134
00135 if (strncmp(&line[0],";",1)) {
00136
00137
00138 for (pos=1; pos<516; pos++)
00139 if (line[pos] == '=' && line[pos-1] == ':') break;
00140
00141 for (i=0;i<pos-2 && i<256;i++) keyword[i] = line[i];
00142 for (i=pos+2;i<256+pos+2 && i<512;i++) {
00143 if (!memcmp(&line[i],"\0",1) || !memcmp(&line[i],"\r",1) || !memcmp(&line[i],"\n",1))
00144 break;
00145 value[i-pos-2] = line[i];
00146 }
00147 if (!memcmp(keyword,"!END OF INTERFILE",17)) break;
00148
00149 else if (!strcmp(keyword,searchWord)) {
00150 strcpy(returnValue,value);
00151 count++;
00152 }
00153 }
00154 }
00155 fclose(interfileHeader);
00156 if (count == 0) {
00157 strcpy(errorMessage,"keyword '");
00158 strcat(errorMessage,searchWord);
00159 strcat(errorMessage,"' not found in header");
00160 return 2;
00161 }
00162 if (count > 1) {
00163 strcpy(errorMessage,"keyword '");
00164 strcat(errorMessage,searchWord);
00165 strcat(errorMessage,"' appears more than once in header");
00166 return 1;
00167 }
00168 return 0;
00169 }