IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Apr 25, 2006, 5:06:03 PM (20 years ago)
Author:
jhoblitt
Message:

conf CLI params

File:
1 edited

Legend:

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

    r6981 r6990  
    77#include "pxtools.h"
    88
    9 bool p1searchConfig(pxConfig *config, int argc, char **argv) {
     9// this function can not fail -- exits on error
     10
     11pxConfig *p1searchConfig(pxConfig *config, int argc, char **argv) {
    1012    if (!config) {
    1113        config = pxConfigAlloc();
    1214    }
    1315
    14     if (! pmConfigRead(&config->site, &config->camera, &config->recipe, &argc, argv, RECIPE)) {
     16    // setup site config
     17    if (! pmConfigRead(&config->site, &config->camera, &config->recipe,
     18        &argc, argv, RECIPE)) {
    1519        psError(PS_ERR_UNKNOWN, false, "Can't find site configuration!\n");
    1620        exit(EXIT_FAILURE);
    1721    }
    1822
    19     int N;
    20     config->mode = PX_MODE_NONE;
    21     if ((N = psArgumentGet (argc, argv, "-pending"))) {
    22         psArgumentRemove (N, &argc, argv);
    23         if (config->mode) {
    24             psError(PS_ERR_UNKNOWN, true, "only one mode selection is allowed");
    25         }
    26         config->mode = PX_MODE_PENDING;
    27     }
    28     if ((N = psArgumentGet (argc, argv, "-update"))) {
    29         psArgumentRemove (N, &argc, argv);
    30         if (config->mode) {
    31             psError(PS_ERR_UNKNOWN, true, "only one mode selection is allowed");
    32         }
    33         config->mode = PX_MODE_UPDATE;
    34     }
    35    
    36     // paul's argument parsing convention requires: -key value
    37     // Parse other command-line arguments
     23    // CLI options
     24    // modes
    3825    psMetadata *args = psMetadataAlloc();
    3926    psMetadataAddStr(args , PS_LIST_TAIL, "-pending", 0,
    4027        "examine pending image table, write ppImage output", "");
    41     psMetadataAddStr(args , PS_LIST_TAIL, "-update",  0,
     28    psMetadataAddStr(args , PS_LIST_TAIL, "-define",  0,
    4229        "update pending image table", "");
    43 
    4430
    4531    // -pending search
     
    5642        "define class", "");
    5743
     44    // -define inputs
     45    psMetadata *defineArgs = psMetadataAlloc();
     46    psMetadataAddStr(defineArgs, PS_LIST_TAIL, "-exp_id",  0,
     47        "define class", "");
     48    psMetadataAddStr(defineArgs, PS_LIST_TAIL, "-filter",  0,
     49        "define filter of interest", "");
     50    psMetadataAddStr(defineArgs, PS_LIST_TAIL, "-stat",  0,
     51        "define URL", "");
     52    psMetadataAddStr(defineArgs, PS_LIST_TAIL, "-recipe",  0,
     53        "define URL", "");
     54    psMetadataAddStr(defineArgs, PS_LIST_TAIL, "-mosiac",  0,
     55        "define URL", "");
    5856
    59     // -update inputs
    60     psMetadata *updateArgs = psMetadataAlloc();
    61     psMetadataAddStr(updateArgs, PS_LIST_TAIL, "-exp_id",  0,
    62         "define class", "");
    63     psMetadataAddStr(updateArgs, PS_LIST_TAIL, "-filter",  0,
    64         "define filter of interest", "");
    65     psMetadataAddStr(updateArgs, PS_LIST_TAIL, "-stat",  0,
    66         "define URL", "");
    67     psMetadataAddStr(updateArgs, PS_LIST_TAIL, "-recipe",  0,
    68         "define URL", "");
    69     psMetadataAddStr(updateArgs, PS_LIST_TAIL, "-mosiac",  0,
    70         "define URL", "");
     57    // find which mode we're running under
     58    int N = 0;
     59    config->mode = PX_MODE_NONE;
     60    if ((N = psArgumentGet (argc, argv, "-pending"))) {
     61        psArgumentRemove (N, &argc, argv);
     62        if (config->mode) {
     63            psError(PS_ERR_UNKNOWN, true, "only one mode selection is allowed");
     64        }
     65        config->mode = PX_MODE_PENDING;
     66    }
     67    if ((N = psArgumentGet (argc, argv, "-define"))) {
     68        psArgumentRemove (N, &argc, argv);
     69        if (config->mode) {
     70            psError(PS_ERR_UNKNOWN, true, "only one mode selection is allowed");
     71        }
     72        config->mode = PX_MODE_DEFINE;
     73    }
     74   
     75    // parse CLI for these options
     76    psMetadata *argSet = NULL;
     77    switch (config->mode) {
     78        case PX_MODE_PENDING:
     79            argSet = pendingArgs;
     80            break;
     81        case PX_MODE_DEFINE:
     82            argSet = defineArgs;
     83            break;
     84        default:
     85            argSet = args;
     86    }
    7187
    7288    bool argErr = false;
     
    7490        argErr = true;
    7591        fprintf (stderr, "mode argument is required\n");
    76     } else if (! psArgumentParse(args, &argc, argv) || argc != 1) {
     92    } else if (! psArgumentParse(argSet, &argc, argv) || argc != 1) {
    7793        argErr = true;
    7894        fprintf (stderr, "error parsing arguments\n");
     
    8096
    8197    if (argErr) {
    82         printf("\nPan-STARRS Phase 0 Search Tool\n");
     98        printf("\nPan-STARRS Phase 1 Search Tool\n");
    8399        printf("Usage: %s <mode> [<options>]\n\n", argv[0]);
    84         printf(" <mode> : -pending | -update\n\n");
     100        printf(" <mode> : -pending | -define\n\n");
    85101        fprintf (stdout, "-pending ");
    86102        psArgumentHelp(pendingArgs);
    87         fprintf (stdout, "-update ");
    88         psArgumentHelp(updateArgs);
     103        fprintf (stdout, "-define ");
     104        psArgumentHelp(defineArgs);
    89105        psFree(args);
    90106        psFree(pendingArgs);
    91         psFree(updateArgs);
     107        psFree(defineArgs);
    92108        exit(EXIT_FAILURE);
    93109    }
    94 
    95     // XXX why is "" being returned when -[foo] isn't specified?
    96 #define EMPTY_TO_NULL_STRING(var) \
    97     if (var != NULL && strcmp(var, "") == 0) { \
    98         var = NULL; \
    99     }
    100 
    101     switch (config->mode) {
    102         bool status;
    103         case PX_MODE_PENDING:
    104             // -exp_id
    105             config->exp_id = psMetadataLookupStr(&status, args, "-exp_id");
    106             psMemIncrRefCounter(config->exp_id);
    107             EMPTY_TO_NULL_STRING(config->exp_id);
    108             // -inst
    109             config->camera_name = psMetadataLookupStr(&status, args, "-inst");
    110             psMemIncrRefCounter(config->camera_name);
    111             EMPTY_TO_NULL_STRING(config->camera_name);
    112             // -telescope
    113             config->camera_name = psMetadataLookupStr(&status, args,
    114                 "-telescope");
    115             psMemIncrRefCounter(config->telescope);
    116             EMPTY_TO_NULL_STRING(config->telescope);
    117             // -exp_type
    118             config->class = psMetadataLookupStr(&status, args, "-exp_type");
    119             psMemIncrRefCounter(config->exp_type);
    120             EMPTY_TO_NULL_STRING(config->exp_type);
    121             // -class
    122             config->class = psMetadataLookupStr(&status, args, "-class");
    123             psMemIncrRefCounter(config->class);
    124             EMPTY_TO_NULL_STRING(config->class);
    125             break;
    126         case PX_MODE_UPDATE:
    127             // -exp_id
    128             config->exp_id = psMetadataLookupStr(&status, args, "-exp_id");
    129             psMemIncrRefCounter(config->exp_id);
    130             EMPTY_TO_NULL_STRING(config->exp_id);
    131             // -filter
    132             config->filter = psMetadataLookupStr(&status, args, "-filter");
    133             psMemIncrRefCounter(config->filter);
    134             EMPTY_TO_NULL_STRING(config->filter);
    135 
    136             break;
    137         default:
    138             psAbort(argv[0], "invalid option (this should not happen)");
    139     }
    140 
     110   
    141111    psFree(args);
    142112    psFree(pendingArgs);
    143     psFree(updateArgs);
     113    psFree(defineArgs);
    144114
     115    // setup search criterion
     116#define addWhereStr(name) \
     117    if ((str = psMetadataLookupStr(&status, args, "-" #name))) { \
     118        if (!psMetadataAddStr(where, PS_LIST_TAIL, #name, 0, "==", str)) {\
     119            psError(PS_ERR_UNKNOWN, false, "failed to add item " #name); \
     120            psFree(where); \
     121            exit(EXIT_FAILURE); \
     122        } \
     123    }
    145124
    146125    psMetadata *where = psMetadataAlloc();
    147126
    148     if (config->camera_name != NULL) {
    149         if (!psMetadataAddStr(where, PS_LIST_TAIL, "camera", 0, "==",
    150             config->camera_name)) {
     127{
     128    psString str = NULL;
     129    int n = 0;
     130    bool status = false;
     131
     132    addWhereStr(exp_id);
     133    if ((str = psMetadataLookupStr(&status, args, "-inst"))) {
     134        if (!psMetadataAddStr(where, PS_LIST_TAIL, "camera", 0, "==", str)) {
    151135            psError(PS_ERR_UNKNOWN, false, "failed to add item camera");
    152136            psFree(where);
    153             return NULL;
     137            exit(EXIT_FAILURE);
    154138        }
    155139    }
    156     if (config->filter != NULL) {
    157         psMetadataAddStr(where, PS_LIST_TAIL, "filter", 0, "==",
    158             config->filter);
     140    addWhereStr(telescope);
     141    addWhereStr(exp_type);
     142    if ((n = psMetadataLookupStr(&status, args, "-imfiles"))) {
     143        if (!psMetadataAddS32(where, PS_LIST_TAIL, "imfiles", 0, "==", n)) {
     144            psError(PS_ERR_UNKNOWN, false, "failed to add item imfiles");
     145            psFree(where);
     146            exit(EXIT_FAILURE);
     147        }
    159148    }
    160     if (config->exp_id != NULL) {
    161         psMetadataAddStr(where, PS_LIST_TAIL, "exp_id", 0, "==",
    162             config->exp_id);
    163     }
    164     if (config->class != NULL) {
    165         psMetadataAddStr(where, PS_LIST_TAIL, "class", 0, "==",
    166             config->class);
    167     }
    168     if (config->class_id != NULL) {
    169         psMetadataAddStr(where, PS_LIST_TAIL, "class_id", 0, "==",
    170              config->class_id);
    171     }
    172 
    173     /*
    174     // psMetadataConfig does not support times yet
    175     if (!psTimeIsZero(config->start) && !psTimeIsZero(config->stop)) {
    176         psMetadataAddTime (where, PS_LIST_TAIL, "TIME_START", 0, "<", config->stop);
    177         psMetadataAddTime (where, PS_LIST_TAIL, "TIME_STOP", 0, ">", config->start);
    178     }
    179     */
     149    addWhereStr(filter);
     150    addWhereStr(stats);
     151    addWhereStr(recipe);
     152}
    180153
    181154    if (where->list->n < 1) {
     
    186159    config->where = where;
    187160
    188 
    189     // add the input and output images to the args list
    190     //psMetadataAddStr (args, PS_LIST_TAIL, "-output", 0, "Name of the output image", argv[1]);
    191 
    192161    // define Database handle, if used
    193162    config->dbh = pmConfigDB(config->site);
    194163
    195     return true;
     164    return config;
    196165}
Note: See TracChangeset for help on using the changeset viewer.