#include "stdio.h" #include "stdlib.h" #include "../include/string.h" #include "../include/astring.h" #include "../include/flatfile.h" #include "../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]; char comp, ch, slat[8], slon[8], sdumb[8]; float data[4][1440]; float dataout[4], hf, ef, zf; double uttime,basetime, testt, testt2; int i,j,k,itime[6], cfile, nfiles, icomp, ihrs, order[4], hdz, loc; int yr, mo, da, error, unit, nvar, icompmax, done, itest[6]; long dumb, orow, pos, lpos; FILE *fpin; 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]); fpin = fopen(filein,"r"); orow = 0; hdz = 0; error = 0; icompmax = 4; fseek(fpin,0,SEEK_END); lpos = ftell(fpin); fseek(fpin,0,SEEK_SET); while ((!feof(fpin)) && (!error)) { pos = ftell(fpin); if (lpos-pos <= 0) { icomp = icompmax; done = 1; } else { icomp = 0; done = 0; } while (icomp= 0) zf = -1.0; if (strpos(stat,"LEM") >= 0) zf = -1.0; if (strpos(stat,"DRW") >= 0) zf = -1.0; if (strpos(stat,"BIK") >= 0) zf = -1.0; if (strpos(stat,"MCQ") >= 0) zf = -1.0; if (strpos(stat,"DLB") >= 0) zf = -1.0; if (strpos(stat,"WEP") >= 0) { itest[0] = 91; itest[1] = 01; itest[2] = 31; itest[3] = 05; itest[4] = 00; itest[5] = 00; testt = c_i_to_r(itest); if (basetime > testt) zf = -1.0; } if (strpos(stat,"CBI") >= 0) ef = -1.0; if (strpos(stat,"WWK") >= 0) { zf = -1.0; ef = -1.0; } /* not confirmerd - but southern hemisphere stations */ if (strpos(stat,"PTN") >= 0) zf = -1.0; if (strpos(stat,"WTK") >= 0) zf = -1.0; if (strpos(stat,"KAT") >= 0) zf = -1.0; if (strpos(stat,"CAN") >= 0) zf = -1.0; if (strpos(stat,"ADL") >= 0) zf = -1.0; if (strpos(stat,"ASA") >= 0) zf = -1.0; if (strpos(stat,"LEM") >= 0) { itest[0] = 91; itest[1] = 10; itest[2] = 30; itest[3] = 0; itest[4] = 0; itest[5] = 0; testt = c_i_to_r(itest); if (basetime > testt) { itest[0] = 91; itest[1] = 11; itest[2] = 19; itest[3] = 23; itest[4] = 59; itest[5] = 59; testt2 = c_i_to_r(itest); if (basetime < testt2) { basetime = basetime + 2.0*3600.0; } } } if (strpos(stat,"BRV") >= 0) { itest[0] = 91; itest[1] = 11; itest[2] = 2; itest[3] = 0; itest[4] = 0; itest[5] = 0; testt = c_i_to_r(itest); if (basetime > testt) { itest[0] = 91; itest[1] = 11; itest[2] = 16; itest[3] = 23; itest[4] = 59; itest[5] = 59; testt2 = c_i_to_r(itest); if (basetime < testt2) { basetime = basetime - 1.0*3600.0; } } } if (strpos(stat,"BRV") >= 0) { itest[0] = 92; itest[1] = 11; itest[2] = 24; itest[3] = 0; itest[4] = 0; itest[5] = 0; testt = c_i_to_r(itest); if (basetime > testt) { itest[0] = 91; itest[1] = 12; itest[2] = 7; itest[3] = 23; itest[4] = 59; itest[5] = 59; testt2 = c_i_to_r(itest); if (basetime < testt2) { basetime = basetime - 10.0*3600.0; } } } if (strpos(stat,"ADL") >= 0) { itest[0] = 93; itest[1] = 11; itest[2] = 25; itest[3] = 0; itest[4] = 0; itest[5] = 0; testt = c_i_to_r(itest); if (basetime > testt) { itest[0] = 93; itest[1] = 12; itest[2] = 6; itest[3] = 23; itest[4] = 59; itest[5] = 59; testt2 = c_i_to_r(itest); if (basetime < testt2) { basetime = basetime + 1.0*3600.0; } } } if (strpos(stat,"KOT") >= 0) { itest[0] = 93; itest[1] = 12; itest[2] = 7; itest[3] = 0; itest[4] = 0; itest[5] = 0; testt = c_i_to_r(itest); if (basetime > testt) { itest[0] = 94; itest[1] = 1; itest[2] = 17; itest[3] = 23; itest[4] = 59; itest[5] = 59; testt2 = c_i_to_r(itest); if (basetime < testt2) { basetime = basetime + 2.0*3600.0; } } } if (strpos(stat,"CBI") >= 0) { itest[0] = 94; itest[1] = 1; itest[2] = 18; itest[3] = 0; itest[4] = 0; itest[5] = 0; testt = c_i_to_r(itest); if (basetime > testt) { itest[0] = 94; itest[1] = 1; itest[2] = 22; itest[3] = 23; itest[4] = 59; itest[5] = 59; testt2 = c_i_to_r(itest); if (basetime < testt2) { basetime = basetime - 9.0*3600.0; } } } if (strpos(stat,"CBI") >= 0) { itest[0] = 94; itest[1] = 3; itest[2] = 18; itest[3] = 0; itest[4] = 0; itest[5] = 0; testt = c_i_to_r(itest); if (basetime > testt) { itest[0] = 94; itest[1] = 4; itest[2] = 27; itest[3] = 23; itest[4] = 59; itest[5] = 59; testt2 = c_i_to_r(itest); if (basetime < testt2) { basetime = basetime + 24.0*3600.0; } } } if (strpos(stat,"WEP") >= 0) { itest[0] = 94; itest[1] = 3; itest[2] = 17; itest[3] = 0; itest[4] = 0; itest[5] = 0; testt = c_i_to_r(itest); if (basetime > testt) { itest[0] = 94; itest[1] = 4; itest[2] = 18; itest[3] = 23; itest[4] = 59; itest[5] = 59; testt2 = c_i_to_r(itest); if (basetime < testt2) { basetime = basetime + 6.0*3600.0; } } } if (strpos(stat,"WEP") >= 0) { itest[0] = 94; itest[1] = 4; itest[2] = 21; itest[3] = 0; itest[4] = 0; itest[5] = 0; testt = c_i_to_r(itest); if (basetime > testt) { itest[0] = 94; itest[1] = 7; itest[2] = 29; itest[3] = 23; itest[4] = 59; itest[5] = 59; testt2 = c_i_to_r(itest); if (basetime < testt2) { basetime = basetime + 6.0*3600.0; } } } if (strpos(stat,"BRV") >= 0) { itest[0] = 95; itest[1] = 3; itest[2] = 24; itest[3] = 0; itest[4] = 0; itest[5] = 0; testt = c_i_to_r(itest); if (basetime > testt) { itest[0] = 95; itest[1] = 5; itest[2] = 6; itest[3] = 23; itest[4] = 59; itest[5] = 59; testt2 = c_i_to_r(itest); if (basetime < testt2) { basetime = basetime + 24.0*3600.0; } } } if (strpos(stat,"ADL") >= 0) { itest[0] = 95; itest[1] = 4; itest[2] = 7; itest[3] = 0; itest[4] = 0; itest[5] = 0; testt = c_i_to_r(itest); if (basetime > testt) { itest[0] = 95; itest[1] = 4; itest[2] = 9; itest[3] = 23; itest[4] = 59; itest[5] = 59; testt2 = c_i_to_r(itest); if (basetime < testt2) { basetime = basetime + 1.0*3600.0; } } } if (strpos(stat,"ADL") >= 0) { itest[0] = 95; itest[1] = 4; itest[2] = 27; itest[3] = 0; itest[4] = 0; itest[5] = 0; testt = c_i_to_r(itest); if (basetime > testt) { itest[0] = 95; itest[1] = 4; itest[2] = 29; itest[3] = 23; itest[4] = 59; itest[5] = 59; testt2 = c_i_to_r(itest); if (basetime < testt2) { basetime = basetime + 1.0*3600.0; } } } if (strpos(stat,"ADL") >= 0) { itest[0] = 95; itest[1] = 5; itest[2] = 23; itest[3] = 0; itest[4] = 0; itest[5] = 0; testt = c_i_to_r(itest); if (basetime > testt) { itest[0] = 95; itest[1] = 5; itest[2] = 25; itest[3] = 23; itest[4] = 59; itest[5] = 59; testt2 = c_i_to_r(itest); if (basetime < testt2) { basetime = basetime + 1.0*3600.0; } } } if (strpos(stat,"CBI") >= 0) { itest[0] = 95; itest[1] = 11; itest[2] = 1; itest[3] = 0; itest[4] = 0; itest[5] = 0; testt = c_i_to_r(itest); if (basetime > testt) { itest[0] = 95; itest[1] = 12; itest[2] = 9; itest[3] = 23; itest[4] = 59; itest[5] = 59; testt2 = c_i_to_r(itest); if (basetime < testt2) { basetime = basetime + 12.0*3600.0; } } } strcpy(ff_var,"time,"); strcat(ff_var,stat); strcat(ff_var,"H,"); strcat(ff_var,stat); 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); nvar = 4; error = mkhead(fileout,nvar,ff_var,ff_units,ff_source, ff_type,ff_notes); if (!error) unit = ffcreate(fileout); if (error || unit == -1) error = 1; } if (error) { printf("error in creating flat file. Can not continue.\n"); } else { printf("Writing file %s\n",fileout); for (i=0; i<1440; i++) { if ((data[order[0]][i] != 0) || (data[order[1]][i] != 0) || (data[order[2]][i] != 0)) { dataout[0] = data[order[0]][i]*hf; dataout[1] = data[order[1]][i]*ef; dataout[2] = data[order[2]][i]*zf; } else { for (k=0;k<3;k++) { dataout[k] = -1.0e32; } } uttime=basetime+ ((double) 3600.0*24.0)*((double) i)/((double) 1440); error = fdput(unit,orow,uttime,dataout); if (error) printf("Error in writing data to file.\n"); orow++; } } } else { error = 1; } pos = ftell(fpin); if (pos-lpos <= 0) { done = 1; error = 1; } } ffclose(unit); close(fpin); } }