71 int i, c, n, frameNr, yy, mm, dd, h, m, s, longest=0;
77 if(
SIF_TEST) printf(
"sifRead(%s, *sif)\n", filename);
78 if(filename==NULL || data==NULL)
return(1);
83 fp=fopen(filename,
"r");
84 if(fp==NULL) {strcpy(
siferrmsg,
"cannot open file");
return(2);}
87 i=0;
while((c=fgetc(fp))!=EOF) {
88 if(c==10) {
if(i>longest) longest=i; i=0;}
else i++;
90 if(i>longest) longest=i;
91 rewind(fp); longest+=1;
93 line=(
char*)malloc((longest+1)*
sizeof(char));
94 if(line==NULL) {strcpy(
siferrmsg,
"out of memory"); fclose(fp);
return(3);}
98 if(fgets(line, longest, fp)==NULL) {
99 strcpy(
siferrmsg,
"wrong format"); fclose(fp); free(line);
return(4);
101 cptr=strpbrk(line,
"\n\r");
if(cptr!=NULL) *cptr=
'\0';
102 cptr=line+strspn(line,
" \t");
103 }
while(*cptr==
'#' || strlen(cptr)==0);
104 n=sscanf(line,
"%d/%d/%d %d:%d:%d %d %d %d %10s %7s",
105 &dd, &mm, &yy, &h, &m, &s, &frameNr, &data->
colNr, &data->
version,
107 if(n<9 || frameNr<1 || data->colNr<2 || data->version!=1) {
108 strcpy(
siferrmsg,
"wrong filetype"); fclose(fp); free(line);
return(5);}
109 timet=time(NULL); st=localtime(&timet);
111 st->tm_mday=dd; st->tm_mon=mm-1; st->tm_year=yy-1900;
112 st->tm_hour=h; st->tm_min=m; st->tm_sec=s; st->tm_isdst=-1;
120 fclose(fp); free(line);
return(6);
125 while(i<data->frameNr) {
127 if(fgets(line, longest, fp)==NULL) {
129 fclose(fp); free(line);
return(8);
131 cptr=strpbrk(line,
"\n\r");
if(cptr!=NULL) *cptr=
'\0';
132 cptr=line+strspn(line,
" \t");
134 }
while(*cptr==
'#' || strlen(cptr)==0);
135 n=sscanf(line,
"%lf %lf %lf %lf", &data->
x1[i], &data->
x2[i],
142 if(n<data->colNr || data->
x2[i]<data->
x1[i]) {
144 fclose(fp); free(line);
return(9);
150 fclose(fp); free(line);
156 for(i=0; i<data->frameNr; i++) data->
weights[i]=1.0;
179 if(
SIF_TEST) printf(
"sifWrite(*sif, %s)\n", filename);
184 fp=fopen(filename,
"w");
185 if(fp==NULL) {strcpy(
siferrmsg,
"cannot open file");
return 2;}
189 if(st!=NULL) strftime(buf, 1024,
"%d/%m/%Y %H:%M:%S", st);
190 else strcpy(buf,
"1/1/1900 00:00:00");
194 if(n<7) {strcpy(
siferrmsg,
"cannot write file"); fclose(fp);
return 2;}
197 if(strlen(data->
studynr)==0) fprintf(fp,
" .");
198 else fprintf(fp,
" %s", data->
studynr);
204 for(i=0; i<data->
frameNr; i++) {
206 n=fprintf(fp,
"%.0f %.0f %.0f %.0f\n",
209 n=fprintf(fp,
"%.0f %.0f\n",
210 data->
x1[i], data->
x2[i]);
211 if(n<3) {strcpy(
siferrmsg,
"cannot write file"); fclose(fp);
return 3;}
234 if(st!=NULL) strftime(buf, 512,
"%Y-%m-%d %H:%M:%S", st);
235 else strcpy(buf,
"1900-01-01 00:00:00");
236 printf(
"Scan time: %s\n", buf);
238 printf(
"Frame start end Prompts Randoms Trues Weight\n");
239 for(i=0; i<data->
frameNr; i++) {
240 printf(
" %03d %5.0f %5.0f %10.0f %10.0f %10.0f %8.6f\n", i+1,
int sifSetmem(SIF *data, int frameNr)
int sifWrite(SIF *data, char *filename)
int sifRead(char *filename, SIF *data)