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/difftoolConfig.c

    r12131 r13578  
    9191    psMetadata *inputskyfileArgs = psMetadataAlloc();
    9292    psMetadataAddStr(inputskyfileArgs, PS_LIST_TAIL, "-diff_id", 0,
    93             "search by diff ID (required)", NULL);
     93            "search by diff ID", NULL);
    9494    psMetadataAddStr(inputskyfileArgs, PS_LIST_TAIL, "-warp_id", 0,
    95             "search by warp ID (required)", NULL);
     95            "search by warp ID", NULL);
    9696    psMetadataAddStr(inputskyfileArgs, PS_LIST_TAIL, "-skycell_id", 0,
    9797            "search by skycell ID", NULL);
     
    132132            "search by warp ID", NULL);
    133133    psMetadataAddStr(diffskyfileArgs , PS_LIST_TAIL, "-skycell_id",  0,
    134             "define skycell ID (required)", NULL);
     134            "define skycell ID", NULL);
    135135    psMetadataAddStr(diffskyfileArgs, PS_LIST_TAIL, "-tess_id",  0,
    136             "define tessellation ID (required)", NULL);
     136            "define tessellation ID", NULL);
    137137    psMetadataAddU64(diffskyfileArgs, PS_LIST_TAIL, "-limit",  0,
    138138            "limit result set to N items", 0);
     
    142142    psFree(now);
    143143
    144 #define PXTOOL_MODE(option, modeval, argset) \
    145 { \
    146     int N = 0; \
    147     if ((N = psArgumentGet (argc, argv, option))) { \
    148         psArgumentRemove (N, &argc, argv); \
    149         if (config->mode) { \
    150             psError(PS_ERR_UNKNOWN, true, "only one mode selection is allowed"); \
    151             psFree(config); \
    152             return NULL; \
    153         } \
    154         config->mode = modeval; \
    155         config->args = psMemIncrRefCounter(argset); \
    156     } \
    157     if (!psMetadataAddMetadata(argSets, PS_LIST_TAIL, option, 0, NULL, argset)) {;\
    158         psError(PS_ERR_UNKNOWN, false, "failed to add argset for %s", option); \
    159     } \
    160     psFree(argset); \
    161 }
    162 
    163144    psMetadata *argSets = psMetadataAlloc();
    164     // find which mode we're running under
    165     PXTOOL_MODE("-definerun",       DIFFTOOL_MODE_DEFINERUN,      definerunArgs);
    166     PXTOOL_MODE("-updaterun",       DIFFTOOL_MODE_UPDATERUN,      updaterunArgs);
    167     PXTOOL_MODE("-addinputskyfile",  DIFFTOOL_MODE_ADDINPUTSKYFILE, addinputskyfileArgs);
    168     PXTOOL_MODE("-inputskyfile",     DIFFTOOL_MODE_INPUTSKYFILE,    inputskyfileArgs);
    169     PXTOOL_MODE("-todiffskyfile",    DIFFTOOL_MODE_TODIFFSKYFILE,   todiffskyfileArgs);
    170     PXTOOL_MODE("-adddiffskyfile",   DIFFTOOL_MODE_ADDDIFFSKYFILE,  adddiffskyfileArgs);
    171     PXTOOL_MODE("-diffskyfile",      DIFFTOOL_MODE_DIFFSKYFILE,     diffskyfileArgs);
    172 
    173     bool argErr = false;
    174     if (config->mode == DIFFTOOL_MODE_NONE) {
    175         argErr = true;
    176         fprintf (stderr, "mode argument is required\n");
    177     } else if (! psArgumentParse(config->args, &argc, argv) || argc != 1) {
    178         argErr = true;
    179         fprintf (stderr, "error parsing arguments\n");
    180     }
    181 
    182     if (argErr) {
    183         printf("\nPan-STARRS Difference Tool\n");
    184         printf("Usage: %s <mode> [<options>]\n\n", argv[0]);
    185         printf(" <mode> :\n\n");
    186 
    187         psMetadataIterator *iter = psMetadataIteratorAlloc(argSets, 0, NULL);
    188         psMetadataItem *item = NULL;
    189         while ((item = psMetadataGetAndIncrement(iter))) {
    190             if (!item->type == PS_DATA_METADATA) {
    191                 psAbort("all options must be specified as a metadata");
    192             }
    193 
    194             fprintf(stdout, "%s ", item->name);
    195             psArgumentHelp(item->data.md);
    196         }
    197         psFree(iter);
    198 
     145    psMetadata *modes = psMetadataAlloc();
     146
     147    PXTOOL_ADD_MODE("-definerun",       "", DIFFTOOL_MODE_DEFINERUN,      definerunArgs);
     148    PXTOOL_ADD_MODE("-updaterun",       "",       DIFFTOOL_MODE_UPDATERUN,      updaterunArgs);
     149    PXTOOL_ADD_MODE("-addinputskyfile", "",  DIFFTOOL_MODE_ADDINPUTSKYFILE, addinputskyfileArgs);
     150    PXTOOL_ADD_MODE("-inputskyfile",    "",     DIFFTOOL_MODE_INPUTSKYFILE,    inputskyfileArgs);
     151    PXTOOL_ADD_MODE("-todiffskyfile",   "",    DIFFTOOL_MODE_TODIFFSKYFILE,   todiffskyfileArgs);
     152    PXTOOL_ADD_MODE("-adddiffskyfile",  "",   DIFFTOOL_MODE_ADDDIFFSKYFILE,  adddiffskyfileArgs);
     153    PXTOOL_ADD_MODE("-diffskyfile",     "",      DIFFTOOL_MODE_DIFFSKYFILE,     diffskyfileArgs);
     154
     155    if (!pxGetOptions(stderr, argc, argv, config, modes, argSets)) {
     156        psError(PS_ERR_UNKNOWN, true, "option parsing failed");
    199157        psFree(argSets);
     158        psFree(modes);
    200159        psFree(config);
    201160        return NULL;
     
    203162
    204163    psFree(argSets);
     164    psFree(modes);
    205165
    206166    // setup search criterion
     
    275235    }
    276236
    277     // save argv/argc
    278     config->argv = argv;
    279     config->argc = argc;
    280 
    281237    return config;
    282238}
Note: See TracChangeset for help on using the changeset viewer.