IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
May 31, 2007, 2:58:32 PM (19 years ago)
Author:
jhoblitt
Message:

convert to mulit-level option help

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ippTools/src/stacktoolConfig.c

    r12131 r13578  
    2727#include "stacktool.h"
    2828
    29 pxConfig *stacktoolConfig(pxConfig *config, int argc, char **argv) {
     29pxConfig *stacktoolConfig(pxConfig *config, int argc, char **argv)
     30{
    3031    if (!config) {
    3132        config = pxConfigAlloc();
     
    129130    psFree(now);
    130131
    131 #define PXTOOL_MODE(option, modeval, argset) \
    132 { \
    133     int N = 0; \
    134     if ((N = psArgumentGet (argc, argv, option))) { \
    135         psArgumentRemove (N, &argc, argv); \
    136         if (config->mode) { \
    137             psError(PS_ERR_UNKNOWN, true, "only one mode selection is allowed"); \
    138             psFree(config); \
    139             return NULL; \
    140         } \
    141         config->mode = modeval; \
    142         config->args = psMemIncrRefCounter(argset); \
    143     } \
    144     if (!psMetadataAddMetadata(argSets, PS_LIST_TAIL, option, 0, NULL, argset)) {;\
    145         psError(PS_ERR_UNKNOWN, false, "failed to add argset for %s", option); \
    146     } \
    147     psFree(argset); \
    148 }
    149 
    150132    psMetadata *argSets = psMetadataAlloc();
    151     // find which mode we're running under
    152     PXTOOL_MODE("-definerun",       STACKTOOL_MODE_DEFINERUN,      definerunArgs);
    153     PXTOOL_MODE("-updaterun",       STACKTOOL_MODE_UPDATERUN,      updaterunArgs);
    154     PXTOOL_MODE("-addinputskyfile",  STACKTOOL_MODE_ADDINPUTSKYFILE, addinputskyfileArgs);
    155     PXTOOL_MODE("-inputskyfile",     STACKTOOL_MODE_INPUTSKYFILE,    inputskyfileArgs);
    156     PXTOOL_MODE("-tosum",           STACKTOOL_MODE_TOSUM,          tosumArgs);
    157     PXTOOL_MODE("-addsumskyfile",    STACKTOOL_MODE_ADDSUMSKYFILE,   addsumskyfileArgs);
    158     PXTOOL_MODE("-sumskyfile",       STACKTOOL_MODE_SUMSKYFILE,      sumskyfileArgs);
    159 
    160     bool argErr = false;
    161     if (config->mode == STACKTOOL_MODE_NONE) {
    162         argErr = true;
    163         fprintf (stderr, "mode argument is required\n");
    164     } else if (! psArgumentParse(config->args, &argc, argv) || argc != 1) {
    165         argErr = true;
    166         fprintf (stderr, "error parsing arguments\n");
    167     }
    168 
    169     if (argErr) {
    170         printf("\nPan-STARRS Stack Tool\n");
    171         printf("Usage: %s <mode> [<options>]\n\n", argv[0]);
    172         printf(" <mode> :\n\n");
    173 
    174         psMetadataIterator *iter = psMetadataIteratorAlloc(argSets, 0, NULL);
    175         psMetadataItem *item = NULL;
    176         while ((item = psMetadataGetAndIncrement(iter))) {
    177             if (!item->type == PS_DATA_METADATA) {
    178                 psAbort("all options must be specified as a metadata");
    179             }
    180 
    181             fprintf(stdout, "%s ", item->name);
    182             psArgumentHelp(item->data.md);
    183         }
    184         psFree(iter);
    185 
     133    psMetadata *modes   = psMetadataAlloc();
     134
     135    PXTOOL_ADD_MODE("-definerun",       "", STACKTOOL_MODE_DEFINERUN,      definerunArgs);
     136    PXTOOL_ADD_MODE("-updaterun",       "", STACKTOOL_MODE_UPDATERUN,      updaterunArgs);
     137    PXTOOL_ADD_MODE("-addinputskyfile", "", STACKTOOL_MODE_ADDINPUTSKYFILE, addinputskyfileArgs);
     138    PXTOOL_ADD_MODE("-inputskyfile",    "", STACKTOOL_MODE_INPUTSKYFILE,    inputskyfileArgs);
     139    PXTOOL_ADD_MODE("-tosum",           "", STACKTOOL_MODE_TOSUM,          tosumArgs);
     140    PXTOOL_ADD_MODE("-addsumskyfile",   "", STACKTOOL_MODE_ADDSUMSKYFILE,   addsumskyfileArgs);
     141    PXTOOL_ADD_MODE("-sumskyfile",      "", STACKTOOL_MODE_SUMSKYFILE,      sumskyfileArgs);
     142
     143    if (!pxGetOptions(stderr, argc, argv, config, modes, argSets)) {
     144        psError(PS_ERR_UNKNOWN, true, "option parsing failed");
    186145        psFree(argSets);
     146        psFree(modes);
    187147        psFree(config);
    188148        return NULL;
     
    190150
    191151    psFree(argSets);
     152    psFree(modes);
    192153
    193154    // setup search criterion
     
    252213    }
    253214
    254     // save argv/argc
    255     config->argv = argv;
    256     config->argc = argc;
    257 
    258215    return config;
    259216}
Note: See TracChangeset for help on using the changeset viewer.