/****************************************************************************/ /* */ /* IAGA_remove.c */ /* */ /****************************************************************************/ /****************************************************************************/ /* This program removes data of given stations from IAGA-format data file. */ /* The data may may be read either from a file or from stdin. Results are */ /* written to standard output. */ /* */ /* Usage: */ /* IAGA_remove -o [<] IAGAFile > NewIAGAFile */ /* -o 'Station list' List of stations delimited by quotes. */ /* Stations are identified by three-letter */ /* code and separated by exactly one space. */ /* e.g. 'SOR MAS KEV KIL'. */ /* IAGAFile Name of IAGA-format file. */ /* NewIAGAFile Name of generated IAGA-format file. */ /* */ /****************************************************************************/ /****************************************************************************/ /* Lasse Hakkinen */ /* Finnish Meteorological Institute */ /* Geophysical Research Division */ /* P.O.Box 503 */ /* FIN-00101, Helsinki, Finland */ /* e-mail: Lasse.Hakkinen@fmi.fi */ /* phone : (+358)-9-19294634 */ /* fax : (+358)-9-19294603 */ /* */ /* version 1.01 9.9.1999 */ /****************************************************************************/ /****************************************************************************/ /* Version history: */ /* */ /* 1.01 09.09.1999 Fixed a Y2K bug in NewTime.h file which resulted in */ /* incorrect year in date strings if year >= 2000. */ /* 1.0 28.05.1998 First official release */ /****************************************************************************/ #include #include #include #include "Usage.h" #include "MagnData.h" #include "IAGA.h" #define BuffSize 1440 /* Size of one block in an IAGA file */ char *version = "1.01"; char *date = "9.9.1999"; #define HeaderLineCount 4 #define UsageLineCount 7 char *HeaderText[HeaderLineCount] = { "**************************************************************************", " This program removes data of given stations from an IAGA format ", " magnetometer data file. ", "**************************************************************************", }; char *UsageText[UsageLineCount] = { " -o [<] IAGAFile > NewIAGAFile ", " -o 'Station list' List of stations enclosed in quotes. ", " Stations are identified by three-letter code ", " and separated by exactly one space. ", " e.g. 'SOR KEV KIL'. ", " IAGAFile Name of IAGA-format file. ", " NewIAGAFile Name of extracted IAGA-format file. ", }; /*--------------------------------------------------------------------------*/ /* The main procedure */ /*--------------------------------------------------------------------------*/ int main(int argc, char *argv[]) { long params; long status = 0; long FileCount = 0; char FileName[100]; /* Name of the original data file */ char Buffer[BuffSize]; /* Buffer for one data block */ char StationList[200] = ""; /* List of stations from command line */ FILE *IAGAFile; /* IAGA format data file to be processed */ /*==========================*/ /* Analyse the command line */ /*==========================*/ if (argc == 1) { /* No arguments, show the usage text */ PrintUsage(argv[0],0,HeaderLineCount,UsageLineCount); return OK; } for (params = 1; params < argc; params++) { if (*argv[params] != '-') { strcpy(FileName,argv[params]); FileCount++; } else { switch (*(argv[params]+1)) { case 'o' : strcpy(StationList,argv[++params]); break; default : fprintf(stderr,"\n### %s: \"%s\" is not an option.\n\n", argv[0], argv[params]); PrintUsage(argv[0],1,HeaderLineCount,UsageLineCount); return FAIL; break; } } } /*====================================*/ /* Check the values of the parameters */ /*====================================*/ if (FileCount > 1) { PrintUsage(argv[0],1,HeaderLineCount,UsageLineCount); return FAIL; } if (StationList[0] == '\0') { PrintUsage(argv[0],1,HeaderLineCount,UsageLineCount); return FAIL; } /*===========================*/ /* Try to open the IAGA file */ /*===========================*/ if (FileCount == 0) IAGAFile = stdin; else { if ((IAGAFile = fopen(FileName, "r")) == NULL) { fprintf(stderr,"\n### %s - Unable to open file: %s\n",argv[0],FileName); return FAIL; } } /*===================================*/ /* Extract proper data from the file */ /*===================================*/ while (ReadIAGABlock(IAGAFile,Buffer)) { if (!StationInList(Buffer+IAGA_StationID,StationList)) { WriteIAGABlock(stdout,Buffer); } } if (FileCount == 1) fclose(IAGAFile); return OK; }