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

    r12232 r13578  
    2727#include "chiptool.h"
    2828
    29 pxConfig *chiptoolConfig(pxConfig *config, int argc, char **argv) {
     29pxConfig *chiptoolConfig(pxConfig *config, int argc, char **argv)
     30{
    3031    if (!config) {
    3132        config = pxConfigAlloc();
     
    135136            "define banana 1", NULL);
    136137    psMetadataAddS8(addprocessedimfileArgs, PS_LIST_TAIL, "-code",  0,
    137             "set fault code (required)", 0);
     138            "set fault code", 0);
    138139
    139140    // -processedimfile
     
    173174            "set fault code (required)", 0);
    174175
     176    // -retryprocessedimfile
     177    psMetadata *retryprocessedimfileArgs = psMetadataAlloc();
     178    psMetadataAddStr(retryprocessedimfileArgs, PS_LIST_TAIL, "-chip_id",  0,
     179            "define chip ID (required)", NULL);
     180    psMetadataAddStr(retryprocessedimfileArgs, PS_LIST_TAIL, "-exp_tag",  0,
     181            "search by exposure ID", NULL);
     182    psMetadataAddStr(retryprocessedimfileArgs, PS_LIST_TAIL, "-class",  0,
     183            "search by class", NULL);
     184    psMetadataAddStr(retryprocessedimfileArgs, PS_LIST_TAIL, "-class_id",  0,
     185            "search by class ID", NULL);
    175186
    176187    // -block
     
    189200            "name of a label to unmask", NULL);
    190201
    191 #define PXTOOL_MODE(option, modeval, argset) \
    192 { \
    193     int N = 0; \
    194     if ((N = psArgumentGet (argc, argv, option))) { \
    195         psArgumentRemove (N, &argc, argv); \
    196         if (config->mode) { \
    197             psError(PS_ERR_UNKNOWN, true, "only one mode selection is allowed"); \
    198             psFree(config); \
    199             return NULL; \
    200         } \
    201         config->mode = modeval; \
    202         config->args = psMemIncrRefCounter(argset); \
    203     } \
    204     if (!psMetadataAddMetadata(argSets, PS_LIST_TAIL, option, 0, NULL, argset)) {; \
    205         psError(PS_ERR_UNKNOWN, false, "failed to add argset for %s", option); \
    206     } \
    207     psFree(argset); \
    208 }
    209 
    210202    psMetadata *argSets = psMetadataAlloc();
    211     PXTOOL_MODE("-queue",           CHIPTOOL_MODE_QUEUE,          queueArgs);
    212     PXTOOL_MODE("-pendingimfile",   CHIPTOOL_MODE_PENDINGIMFILE,  pendingimfileArgs);
    213     PXTOOL_MODE("-addprocessedimfile",CHIPTOOL_MODE_ADDPROCESSEDIMFILE,addprocessedimfileArgs);
    214     PXTOOL_MODE("-processedimfile",CHIPTOOL_MODE_PROCESSEDIMFILE, processedimfileArgs);
    215     PXTOOL_MODE("-updateprocessedimfile",CHIPTOOL_MODE_UPDATEPROCESSEDIMFILE,    updateprocessedimfileArgs);
    216     PXTOOL_MODE("-block",           CHIPTOOL_MODE_BLOCK,          blockArgs);
    217     PXTOOL_MODE("-masked",          CHIPTOOL_MODE_MASKED,         maskedArgs);
    218     PXTOOL_MODE("-unblock",         CHIPTOOL_MODE_UNBLOCK,        unblockArgs);
    219 
    220     bool argErr = false;
    221     if (config->mode == CHIPTOOL_MODE_NONE) {
    222             argErr = true;
    223         fprintf (stderr, "mode argument is required\n");
    224     } else if (! psArgumentParse(config->args, &argc, argv) || argc != 1) {
    225         argErr = true;
    226         fprintf (stderr, "error parsing arguments\n");
    227     }
    228 
    229     if (argErr) {
    230         printf("\nPan-STARRS Chip Tool\n\n");
    231         printf("Usage: %s <mode> [<options>]\n\n", argv[0]);
    232         printf(" <mode> :\n\n");
    233 
    234         psMetadataIterator *iter = psMetadataIteratorAlloc(argSets, 0, NULL);
    235         psMetadataItem *item = NULL;
    236         while ((item = psMetadataGetAndIncrement(iter))) {
    237             if (!item->type == PS_DATA_METADATA) {
    238                 psAbort("all options must be specified as a metadata");            }
    239 
    240             fprintf(stdout, "%s ", item->name);
    241             psArgumentHelp(item->data.md);
    242         }
    243         psFree(iter);
    244 
     203    psMetadata *modes = psMetadataAlloc();
     204
     205    PXTOOL_ADD_MODE("-queue",               "", CHIPTOOL_MODE_QUEUE,          queueArgs);
     206    PXTOOL_ADD_MODE("-pendingimfile",       "", CHIPTOOL_MODE_PENDINGIMFILE,  pendingimfileArgs);
     207    PXTOOL_ADD_MODE("-addprocessedimfile",  "", CHIPTOOL_MODE_ADDPROCESSEDIMFILE,addprocessedimfileArgs);
     208    PXTOOL_ADD_MODE("-processedimfile",     "", CHIPTOOL_MODE_PROCESSEDIMFILE, processedimfileArgs);
     209    PXTOOL_ADD_MODE("-updateprocessedimfile", "", CHIPTOOL_MODE_UPDATEPROCESSEDIMFILE,    updateprocessedimfileArgs);
     210    PXTOOL_ADD_MODE("-retryprocessedimfile", "", CHIPTOOL_MODE_RETRYPROCESSEDIMFILE,    retryprocessedimfileArgs);
     211    PXTOOL_ADD_MODE("-block",               "",            CHIPTOOL_MODE_BLOCK,          blockArgs);
     212    PXTOOL_ADD_MODE("-masked",              "",      CHIPTOOL_MODE_MASKED,         maskedArgs);
     213    PXTOOL_ADD_MODE("-unblock",             "",  CHIPTOOL_MODE_UNBLOCK,        unblockArgs);
     214
     215    if (!pxGetOptions(stderr, argc, argv, config, modes, argSets)) {
     216        psError(PS_ERR_UNKNOWN, true, "option parsing failed");
    245217        psFree(argSets);
     218        psFree(modes);
    246219        psFree(config);
    247220        return NULL;
     
    249222
    250223    psFree(argSets);
     224    psFree(modes);
    251225
    252226    // setup search criterion
     
    321295    }
    322296
    323     // save argv/argc
    324     config->argv = argv;
    325     config->argc = argc;
    326 
    327297    return config;
    328298}
Note: See TracChangeset for help on using the changeset viewer.