#include "stdio.h" #include "stdlib.h" #include "astring.h" #include "string.h" #include "flatfile.h" #include "amag.h" void main(int argc, char *argv[]) { char ff_var[100],ff_units[100],ff_source[100],ff_type[100]; char ff_notes[300], filein[100], fileout[100]; char line[80], stat[4], slat[8], slon[8], sdumb[8], fstat[4]; char comp, linein[1500], sdata[7]; float dataout[4], dt, h,d,pi; double uttime,basetime; long i, j, k, l; int itime[6], cfile, nfiles, c, strl; int yr, mo, da, error, unit[30], nvar, nstat, done, ntick; long dumb, orow, pos, lpos; FILE *fpin; pi = 3.14159; ntick = 60; if (argc < 2) { printf("Enter filename to convert : "); gets(filein); nfiles = 1; } else { nfiles = argc - 1; strcpy(filein, argv[1]); } for (cfile=1;cfile<=nfiles;cfile++) { if (cfile > 1) strcpy(filein,argv[cfile]); strcpy(fileout, filein); printf("Working on file %s\n",filein); fpin = fopen(filein,"r"); error = 0; done = 0; fseek(fpin,0,SEEK_END); lpos = ftell(fpin); fseek(fpin,0,SEEK_SET); i = 0; while ((!feof(fpin)) && (!done)) { pos = ftell(fpin); if (lpos-pos <= 0) done = 1; strcpy(linein," "); strl = strlen(linein); while (strl < 1400) { fgets(linein, 1441, fpin); strl = strlen(linein); pos = ftell(fpin); if (lpos-pos <= 0) { done = 1; strl = 1500; } } printf("i= %d %s\n",i,strmid(linein,0,40)); strcpy(stat, strmid(linein,12,3)); change_station_name(stat); if (i == 0) { strcpy(fstat,stat); itime[0] = atoi(strmid(linein,50,2)); itime[1] = atoi(strmid(linein,52,2)); itime[2] = atoi(strmid(linein,54,2)); itime[3] = atoi(strmid(linein,56,2)); itime[4] = atoi(strmid(linein,58,2)); itime[5] = 0; dt = atof(strmid(linein,60,2)); c = atoi(strmid(linein,72,1)); basetime = c_i_to_r(itime); } if ((strloc(stat,fstat) >= 0) && (i > 0)) { done = 1; } else { strcpy(fileout,mklower(stat)); strcat(fileout,c_int_str(itime[0],2)); strcat(fileout,c_int_str(itime[1],2)); strcat(fileout,c_int_str(itime[2],2)); strcpy(slat,strmid(linein,15,3)); strcat(slat,"."); strcat(slat,strmid(linein,18,2)); strcpy(slon,strmid(linein,20,3)); strcat(slon,"."); strcat(slon,strmid(linein,23,2)); strcpy(ff_var,"time,"); strcat(ff_var,stat); if (c == 1 || c == 2) { strcat(ff_var,"X,"); } else { if (c == 3) { strcat(ff_var,"A,"); } else { if (c==4) { strcat(ff_var,"H,"); } } } strcat(ff_var,stat); if (c == 1 || c == 2) { strcat(ff_var,"Y,"); } else { if (c == 3) { strcat(ff_var,"B,"); } else { if (c==4) { strcat(ff_var,"E,"); } } } strcat(ff_var,stat); strcat(ff_var,"Z"); strcpy(ff_units, "s,nT,nT,nT"); strcpy(ff_source,"from file listed below,same,same,same"); strcpy(ff_type,"T,R,R,R"); strcpy(ff_notes,"Converted from file : "); strcat(ff_notes,filein); strcat(ff_notes,",latitude : "); strcat(ff_notes,slat); strcat(ff_notes,",longitude : "); strcat(ff_notes,slon); if (c == 1) { strcat(ff_notes,",Assuming data is in XYZ Coordinates."); } if (c == 2) { strcat(ff_notes,",Assuming data is in HDZ Coordinates."); strcat(ff_notes,", where D is 0.1 min"); } if (c == 3) { strcat(ff_notes,",Assuming data is in ABZ Coordinates???"); } if (c == 4) { strcat(ff_notes,",Assuming data is in HEZ Coordinates"); } if (c > 4) { strcat(ff_notes,",Unknown coordinates (labeled as ABZ)."); } nvar = 4; error = mkhead(fileout,nvar,ff_var,ff_units,ff_source, ff_type,ff_notes); if (!error) unit[i] = ffcreate(fileout); if (error || unit[i] == -1) error = 1; printf("lpos= %d pos= %d error= %d unit= %d\n",lpos,pos,error,unit[i]); i++; } } nstat = i; if (!error) { fseek(fpin,0,SEEK_SET); pos = ftell(fpin); i = 0; while ((pos < lpos) && (!error)) { strcpy(linein," "); strl = strlen(linein); while (strl < 1400) { fgets(linein, 1441, fpin); strl = strlen(linein); pos = ftell(fpin); if (lpos-pos <= 0) { done = 1; strl = 1500; } } j = i/nstat; k = i%nstat; for (l=0; l 60000.0) || (dataout[1] > 60000.0) || (dataout[2] > 60000.0)) { dataout[0] = -1.0e+32; dataout[1] = -1.0e+32; dataout[2] = -1.0e+32; } else { if (c != 2) { dataout[0] = atof(strmid(linein,159+l*21+00,7))/10.0; dataout[1] = atof(strmid(linein,159+l*21+07,7))/10.0; dataout[2] = atof(strmid(linein,159+l*21+14,7))/10.0; } if (c == 2) { h = atof(strmid(linein,160+l*21+00,7))/10.0; d = pi*atof(strmid(linein,160+l*21+07,7))/600.0/180.0; dataout[0] = h*sin(d); dataout[1] = h*cos(d); dataout[2] = atof(strmid(linein,160+l*21+14,7))/10.0; } } if (dataout[0] > 60000.0) dataout[0] = -1.0e+32; if (dataout[1] > 60000.0) dataout[1] = -1.0e+32; if (dataout[2] > 60000.0) dataout[2] = -1.0e+32; error = fdput(unit[k],orow,uttime,dataout); if (error) printf("Error in writing data to file.\n"); } if (((long)j*(long)dt%(long)1440 == 0) && (k == 0)) { printf("Working on %s\n",c_r_to_s(basetime+(double)j*dt*ntick)); } i++; } } for (i=0; i