/* parseCmdLine.c root: TBtool code input an argc and argv and return a cmdLine struct 991008 dong modify to fit TBtool utility ---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+---*/ #include "TBtool.h" cmdLineData* parseCmdLine (int argc, char** argv, cmdLineData* cmdLine, runConfigData* runConfig) { int count; str255 charString; boolean optn; char data_type[4]; /* initialize the in/output file names to null */ strcpy ((char*)cmdLine->inFileName, ""); strcpy ((char*)cmdLine->outFileName, ""); strcpy ((char*)cmdLine->p2gFileName, "/goa/etc/PRN_GPS"); strcpy ((char*)cmdLine->refSatName, ""); strcpy (data_type,""); runConfig->done = false; runConfig->mtype = 1; if (argc < 2) { printf("Simple reader for SUNSAT and GPSMET turbobinary data\n\n"); printf("Usage: %s -i file.trb -o output.file (other option tags)\n", argv[0]); printf ("option: -i input file name (default is stdin)\n"); printf ("option: -o output file name (default is stdout)\n"); printf ("option: -a print the antenna state\n"); printf ("option: -b print low-rate binary data\n"); printf ("option: -C clean data (fix extra/missing byte errors where possible)\n"); printf ("option: -E end time filter\n"); printf ("option: -G print 1Hz part of CA high-rate observation records\n"); printf ("option: -g print CA high-rate observation records (including 1 Hz)\n"); printf ("option: -h this screen\n"); printf ("option: -I print 10s (or 30s) sampling records in streaming format\n"); printf ("option: -L print Log occultation schedule records\n"); printf ("option: -O print the observation records in RINEX format\n"); printf ("option: -P print 1 Hz part of P-code high-rate observation records\n"); printf ("option: -p [PRN number] PRN filter\n"); printf ("option: -q [rcv name] print records in QM format\n"); printf ("option: -r PRN_GPS file name\n"); printf ("option: -s print P-code high-rate observation records (including 1 Hz)\n"); printf ("option: -S start time filter\n"); printf ("option: -T print data status table\n"); printf ("option: -t [ca pca l1 p1 l2 p2 lc pc] data type option for QM format output\n"); printf ("option: -x add extra head lines from a specified file\n"); exit(0); } for (count = 1; count < argc; count++) { if (argv[count][0] != '-') { printf("Simple reader for SUNSAT and GPSMET turbobinary data\n\n"); printf("Usage: %s -i file.trb -o output.file (other option tags)\n", argv[0]); printf ("option: -i input file name (default is stdin)\n"); printf ("option: -o output file name (default is stdout)\n"); printf ("option: -a print the antenna state\n"); printf ("option: -b print low-rate binary data\n"); printf ("option: -C clean data (fix extra/missing byte errors where possible)\n"); printf ("option: -E end time filter\n"); printf ("option: -G print 1Hz part of CA high-rate observation records\n"); printf ("option: -g print CA high-rate observation records (including 1 Hz)\n"); printf ("option: -h this screen\n"); printf ("option: -I print 10s (or 30s) sampling records in streaming format\n"); printf ("option: -L print Log occultation schedule records\n"); printf ("option: -O print the observation records in RINEX format\n"); printf ("option: -P print 1 Hz part of P-code high-rate observation records\n"); printf ("option: -p [PRN number] PRN filter\n"); printf ("option: -q [rcv name] print records in QM format\n"); printf ("option: -r PRN_GPS file name\n"); printf ("option: -s print P-code high-rate observation records (including 1 Hz)\n"); printf ("option: -S start time filter\n"); printf ("option: -T print data status table\n"); printf ("option: -t [ca pca l1 p1 l2 p2 lc pc] data type option for QM format output\n"); printf ("option: -x add extra head lines from a specified file [%d]\n",count); exit(0); } else /* we have some command arguments */ { /* init some switch stuff */ switch (argv[count][1]) /* format: 1th location has flag */ { case ('i'): { strcpy ((char*)cmdLine->inFileName, argv[++count]); break; } case ('o'): { strcpy ((char*)cmdLine->outFileName, argv[++count]); break; } case ('A'): { /* AS off indicator */ break; } case ('a'): { /* print an antenna state */ configFlag |= prtAnt_state; break; } case ('B'): case ('b'): { /* list binary data */ configFlag |= prtBinaryData; break; } case ('C'): { /* clean the data by removing guilty byte */ configFlag |= cleanByte; break; } case ('c'): { /* filter on channel */ if ((sscanf (argv[++count], "%d", &runConfig->channelFilter)) == EOF) { runConfig->done = true; } else if ((runConfig->channelFilter > 0) && (runConfig->channelFilter <= RECEIVER_CHANNELS)) { runConfig->doFilter = true; configFlag |= filterTBTag; } else { /* zero is the do nothing comparison */ runConfig->channelFilter = 0; } break; } case ('E'): { /* filter on end time */ if ((sscanf (argv[++count], "%ld", &runConfig->endTimeFilter)) == EOF) { runConfig->done = true; runConfig->endTimeFilter = 0; } else if ((runConfig->endTimeFilter > 0) && (runConfig->endTimeFilter < MAX_TIME)) { runConfig->doFilter = true; configFlag |= filterTBTag; } else { /* zero is the do nothing comparison */ runConfig->endTimeFilter = 0; } break; } case ('e'): { /* print the ephemeris data */ configFlag |= prtL_ephem; break; } case ('F'): { configFlag |= prtHighRate; configFlag |= prtTrbObs; break; } case ('f'): { /* print the formatted phase points from a TBfaz0 struct */ configFlag |= prtFaz0; break; } case ('G'): { /* print the high rate (1 Hz) observation records */ configFlag |= prtHighRate; break; } case ('g'): { /* print the high rate (both 1 Hz and 50 Hz) observation records */ configFlag |= prtHighRate; configFlag |= prt50HzRate; break; } case ('H'): { /* print heads and tails fo input file */ configFlag |= prtHeadTail; break; } case ('h'): { printf("Simple reader for SUNSAT and GPSMET turbobinary data\n\n"); printf("Usage: %s -i file.trb -o output.file (other option tags)\n", argv[0]); printf ("option: -i input file name (default is stdin)\n"); printf ("option: -o output file name (default is stdout)\n"); printf ("option: -a print the antenna state\n"); printf ("option: -b print low-rate binary data\n"); printf ("option: -C clean data (fix extra/missing byte errors where possible)\n"); printf ("option: -E end time filter\n"); printf ("option: -G print 1Hz part of CA high-rate observation records\n"); printf ("option: -g print CA high-rate observation records (including 1 Hz)\n"); printf ("option: -h this screen\n"); printf ("option: -I print 10s (or 30s) sampling records in streaming format\n"); printf ("option: -L print Log occultation schedule records\n"); printf ("option: -O print the observation records in RINEX format\n"); printf ("option: -P print 1 Hz part of P-code high-rate observation records\n"); printf ("option: -p [PRN number] PRN filter\n"); printf ("option: -q [rcv name] print records in QM format\n"); printf ("option: -r PRN_GPS file name\n"); printf ("option: -s print P-code high-rate observation records (including 1 Hz)\n"); printf ("option: -S start time filter\n"); printf ("option: -T print data status table\n"); printf ("option: -t [ca pca l1 p1 l2 p2 lc pc] data type option for QM format output\n"); printf ("option: -x add extra head lines from a specified file\n"); exit(0); break; } /* printf ("option: -c channel filter\n"); printf ("option: -e print the ephemeris data in streaming format\n"); printf ("option: -f print the formatted phase from 31 second data\n"); printf ("option: -H print heads and tails of input file\n"); printf ("option: -R print raw structure data rather than formatted\n"); printf ("option: -u print the user data information\n"); */ case ('I'): { /* print observation records in trb streaming format */ configFlag |= prtTrbObs; break; } case ('L'): { /* print the Log occultation schedule records */ configFlag |= occulSchedule; break; } case ('m'): { /* define the output qm file output type. default = 1 */ if ((sscanf (argv[++count], "%d", &runConfig->mtype)) == EOF) { runConfig->mtype = 1; } break; } case ('O'): { /* print the RINEX observation records */ configFlag |= prtL_obs; break; } case ('P'): { /* print the high rate (1 sec) L1-L2 observation records */ configFlag |= prtHighRat2; break; } case ('p'): { /* filter on prn */ if ((sscanf (argv[++count], "%d", &runConfig->PRNfilter)) == EOF) { runConfig->done = true; runConfig->PRNfilter = 0; } else if ((runConfig->PRNfilter > 0) && (runConfig->PRNfilter <= MAX_PRN + 1)) { runConfig->doFilter = true; configFlag |= filterTBTag; } else { /* zero is the do nothing comparison */ runConfig->PRNfilter = 0; } break; } case ('q'): { /* print records in qm format */ configFlag |= prtQmFmt; strcpy ((char*)cmdLine->refSatName, argv[++count]); if (cmdLine->refSatName[0] == '-' || cmdLine->refSatName[0] == '') { sprintf(cmdLine->refSatName,"NONE"); count --; } break; } case ('r'): { strcpy ((char*)cmdLine->p2gFileName, argv[++count]); break; } case ('s'): { /* print P1 and P2 50 Hz records */ configFlag |= prtHighRat2; configFlag |= prtHighRtP12; break; } case ('S'): { /* filter on start time */ if ((sscanf (argv[++count], "%ld", &runConfig->startTimeFilter)) == EOF) { runConfig->done = true; runConfig->startTimeFilter = 0; } else if ((runConfig->startTimeFilter > 0) && (runConfig->startTimeFilter < MAX_TIME)) { runConfig->doFilter = true; configFlag |= filterTBTag; } else { /* zero is the do nothing comparison */ runConfig->startTimeFilter = 0; } break; } case ('t'): { optn = true; while (optn) { strcpy (data_type, argv[++count]); if (data_type[0] == '' || data_type[0] == '-') { count --; optn = false; } else { if (strcmp(data_type,"ca") == 0) runConfig->prtType[0] = 1; if (strcmp(data_type,"pca") == 0) runConfig->prtType[1] = 1; if (strcmp(data_type,"l1") == 0) runConfig->prtType[2] = 1; if (strcmp(data_type,"p1") == 0) runConfig->prtType[3] = 1; if (strcmp(data_type,"l2") == 0) runConfig->prtType[4] = 1; if (strcmp(data_type,"p2") == 0) runConfig->prtType[5] = 1; if (strcmp(data_type,"lc") == 0) runConfig->prtType[6] = 1; if (strcmp(data_type,"pc") == 0) runConfig->prtType[7] = 1; } } break; } case ('T'): { /* print the data status table */ configFlag |= prtDataStatus; break; } case ('u'): case ('U'): { /* print user data structure */ configFlag |= prtUserdataInfo; break; } case ('x'): case ('X'): { /* add head file */ strcpy ((char*)cmdLine->headFileName, argv[++count]); configFlag |= prtHeadFile; break; } default: { /* input from the standard input? */ break; } } } } return; }