/****************************************************************************/
/*                                                                          */
/*                              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 <stdio.h>
#include <string.h>
#include <stdlib.h>
#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;
}

