IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 7848


Ignore:
Timestamp:
Jul 7, 2006, 5:40:03 PM (20 years ago)
Author:
jhoblitt
Message:

partial conversion to the new *Config() setup

Location:
trunk/ippTools/src
Files:
3 edited

Legend:

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

    r6978 r7848  
    1313static bool doneMode(pxConfig *config);
    1414
     15# define MODECASE(caseName, func) \
     16    case caseName: \
     17    if (!func(config)) { \
     18        goto FAIL; \
     19    } \
     20    break;
     21
    1522int main(int argc, char **argv) {
     23    psLibInit(NULL);
     24
    1625    pxConfig *config = p2searchConfig(NULL, argc, argv);
    1726
    1827    switch (config->mode) {
    19         case PX_MODE_QUICK:
    20             if (!quickMode(config)) {
    21                 exit(EXIT_FAILURE);
    22             }
    23             break;
    24         case PX_MODE_DEFINE:
    25             if (!defineMode(config)) {
    26                 exit(EXIT_FAILURE);
    27             }
    28             break;
    29         case PX_MODE_PENDING:
    30             if (!pendingMode(config)) {
    31                 exit(EXIT_FAILURE);
    32             }
    33             break;
    34     /*
    35     if (config.mode == PX_MODE_UPDATE) {
    36         bool status = p2updatePendingFrames(&config, pendingFrames);
    37         if (!status) {
    38             psAbort(argv[0], "p2updatePendingFrames() failed");
    39         }
    40     }
    41     */
    42         case PX_MODE_DONE:
    43             if (!doneMode(config)) {
    44                 exit(EXIT_FAILURE);
    45             }
    46             break;
     28        MODECASE(P2SEARCH_MODE_QUICK, quickMode);
     29        MODECASE(P2SEARCH_MODE_DEFINE, defineMode);
     30        MODECASE(P2SEARCH_MODE_PENDING, pendingMode);
     31        MODECASE(P2SEARCH_MODE_DONE, doneMode);
    4732        default:
    4833            psAbort(argv[0], "invalid option (this should not happen)");
    4934    }
    5035
     36    psFree(config);
     37    pmConfigDone();
     38    psLibFinalize();
     39
    5140    exit(EXIT_SUCCESS);
     41
     42FAIL:
     43    psFree(config);
     44    pmConfigDone();
     45    psLibFinalize();
     46
     47    exit(EXIT_FAILURE);
    5248}
    5349
  • trunk/ippTools/src/chiptool.h

    r6978 r7848  
    44#include "pxtools.h"
    55
     6typedef enum {
     7    P2SEARCH_MODE_NONE      = 0x0,
     8    P2SEARCH_MODE_QUICK,
     9    P2SEARCH_MODE_DEFINE,
     10    P2SEARCH_MODE_PENDING,
     11    P2SEARCH_MODE_DONE
     12} p2searchMode;
     13
    614pxConfig *p2searchConfig(pxConfig *config, int argc, char **argv);
    715
  • trunk/ippTools/src/chiptoolConfig.c

    r7037 r7848  
    66
    77#include "pxtools.h"
     8#include "p2search.h"
    89
    9 bool p2searchConfig(pxConfig *config, int argc, char **argv) {
     10// this function can not fail -- exits on error
     11pxConfig *p2searchConfig(pxConfig *config, int argc, char **argv) {
    1012    if (!config) {
    1113        config = pxConfigAlloc();
     
    1416    config->modules = pmConfigRead(&argc, argv);
    1517    if (! config->modules) {
    16         psErrorStackPrint(stderr, "Can't find site configuration!\n");
    17         exit(EXIT_FAILURE);
     18        psError(PS_ERR_UNKNOWN, false, "Can't find site configuration");
     19        goto FAIL;
    1820    }
    1921
    20     // Parse other command-line arguments
    21     psMetadata *arguments = psMetadataAlloc(); // The arguments, with default values
     22    // -quick
     23    psMetadata *quickArgs = psMetadataAlloc();
     24   
     25    // -define
     26    psMetadata *defineArgs = psMetadataAlloc();
    2227
    23     int N;
    24     config->mode = PX_MODE_NONE;
    25     if ((N = psArgumentGet (argc, argv, "-quick"))) {
    26         psArgumentRemove (N, &argc, argv);
    27         if (config->mode) {
    28             psAbort (argv[0], "only one mode selection is allowed");
    29         }
    30         config->mode = PX_MODE_QUICK;
    31     }
    32     if ((N = psArgumentGet (argc, argv, "-define"))) {
    33         psArgumentRemove (N, &argc, argv);
    34         if (config->mode) {
    35             psAbort (argv[0], "only one mode selection is allowed");
    36         }
    37         config->mode = PX_MODE_DEFINE;
    38     }
    39     if ((N = psArgumentGet (argc, argv, "-pending"))) {
    40         psArgumentRemove (N, &argc, argv);
    41         if (config->mode) {
    42             psAbort (argv[0], "only one mode selection is allowed");
    43         }
    44         config->mode = PX_MODE_PENDING;
    45     }
    46     /*
    47     if ((N = psArgumentGet (argc, argv, "-update"))) {
    48         psArgumentRemove (N, &argc, argv);
    49         if (config->mode) {
    50             psAbort (argv[0], "only one mode selection is allowed");
    51         }
    52         config->mode = PX_MODE_UPDATE;
    53     }
    54     */
    55     if ((N = psArgumentGet (argc, argv, "-done"))) {
    56         psArgumentRemove (N, &argc, argv);
    57         if (config->mode) {
    58             psAbort (argv[0], "only one mode selection is allowed");
    59         }
    60         config->mode = PX_MODE_DONE;
     28    // -pending
     29    psMetadata *pendingArgs = psMetadataAlloc();
     30    psMetadataAddStr(pendingArgs, PS_LIST_TAIL, "-inst",  0, "define camera of interest", "");
     31    psMetadataAddStr(pendingArgs, PS_LIST_TAIL, "-filter",  0, "define filter of interest", "");
     32    psMetadataAddStr(pendingArgs, PS_LIST_TAIL, "-exp_id",  0, "define exposure ID", "");
     33    psMetadataAddStr(pendingArgs, PS_LIST_TAIL, "-class",  0, "define class", "");
     34    psMetadataAddStr(pendingArgs, PS_LIST_TAIL, "-class_id",  0, "define class ID", "");
     35    psMetadataAddStr(pendingArgs, PS_LIST_TAIL, "-uri",  0, "define URL", "");
     36 
     37    // -done
     38    psMetadata *doneArgs = psMetadataAlloc();
     39
     40#define PXTOOL_MODE(option, modeval, argset) \
     41{ \
     42    int N = 0; \
     43    if ((N = psArgumentGet (argc, argv, option))) { \
     44        psArgumentRemove (N, &argc, argv); \
     45        if (config->mode) { \
     46            psError(PS_ERR_UNKNOWN, true, "only one mode selection is allowed"); \
     47        } \
     48        config->mode = modeval; \
     49        config->args = psMemIncrRefCounter(argset); \
     50    } \
     51}
     52
     53    PXTOOL_MODE("-quick",       P2SEARCH_MODE_QUICK,        quickArgs);
     54    PXTOOL_MODE("-define",      P2SEARCH_MODE_DEFINE,       defineArgs);
     55    PXTOOL_MODE("-pending",     P2SEARCH_MODE_PENDING,      pendingArgs);
     56    PXTOOL_MODE("-done",        P2SEARCH_MODE_DONE,         doneArgs);
     57
     58    bool argErr = false;
     59    if (config->mode == P2SEARCH_MODE_NONE) {
     60            argErr = true;
     61        fprintf (stderr, "mode argument is required\n");
     62    } else if (! psArgumentParse(config->args, &argc, argv) || argc != 1) {
     63        argErr = true;
     64        fprintf (stderr, "error parsing arguments\n");
    6165    }
    6266
    63     // paul's argument parsing convention requires: -key value
    64     psMetadataAddBool(arguments, PS_LIST_TAIL, "-quick",   0, "examine raw image table, write ppImage output", false);
    65     psMetadataAddStr(arguments, PS_LIST_TAIL, "-define",  0, "examine raw image table, add to pending image table", "");
    66     psMetadataAddStr(arguments, PS_LIST_TAIL, "-pending", 0, "examine pending image table, write ppImage output", "");
    67 //    psMetadataAddStr(arguments, PS_LIST_TAIL, "-update",  0, "update pending image table", "");
    68     psMetadataAddStr(arguments, PS_LIST_TAIL, "-done",  0, "mov image from pending to done table", "");
    69 //    psMetadataAddStr(arguments, PS_LIST_TAIL, "-time",    0, "define time range of interest", "");
    70     psMetadataAddStr(arguments, PS_LIST_TAIL, "-inst",  0, "define camera of interest", "");
    71     psMetadataAddStr(arguments, PS_LIST_TAIL, "-filter",  0, "define filter of interest", "");
    72     psMetadataAddStr(arguments, PS_LIST_TAIL, "-exp_id",  0, "define exposure ID", "");
    73     psMetadataAddStr(arguments, PS_LIST_TAIL, "-class",  0, "define class", "");
    74     psMetadataAddStr(arguments, PS_LIST_TAIL, "-class_id",  0, "define class ID", "");
    75     psMetadataAddStr(arguments, PS_LIST_TAIL, "-uri",  0, "define URL", "");
     67    if (argErr) {
     68        printf("\nPan-STARRS Phase 2 Search Tool\n\n");
     69        printf("Usage: %s [mode] [options]\n\n", argv[0]);
     70        printf(" [mode] : -quick | -define | -pending | -done\n\n");
     71        fprintf (stdout, "-quick ");
     72        psArgumentHelp(quickArgs);
     73        psFree(quickArgs);
     74        fprintf (stdout, "-define ");
     75        psArgumentHelp(defineArgs);
     76        psFree(defineArgs);
     77        fprintf (stdout, "-pending ");
     78        psArgumentHelp(pendingArgs);
     79        psFree(pendingArgs);
     80        fprintf (stdout, "-done ");
     81        psArgumentHelp(doneArgs);
     82        psFree(doneArgs);
    7683
    77     if (config->mode == PX_MODE_NONE) {
    78         fprintf (stderr, "search mode not specified\n");
    79         psArgumentHelp(arguments);
    80         psFree(arguments);
    81         exit(EXIT_FAILURE);
     84        goto FAIL;
    8285    }
    8386
    84     if (! psArgumentParse(arguments, &argc, argv) || argc != 1) {
    85         printf("\nPan-STARRS Phase 2 Search Tool\n\n");
    86         printf("Usage: %s [mode] [options]\n\n", argv[0]);
    87         printf(" [mode] : -quick | -define | -pending | -donee\n\n");
    88         psArgumentHelp(arguments);
    89         psFree(arguments);
    90         exit(EXIT_FAILURE);
     87    psFree(quickArgs)
     88    psFree(defineArgs)
     89    psFree(pendingArgs)
     90    psFree(doneArgs)
     91
     92    // setup search criterion
     93#define addWhereStr(name) \
     94{ \
     95    psString str = NULL; \
     96    bool status = false; \
     97    if ((str = psMetadataLookupStr(&status, config->args, "-" #name))) { \
     98        if (!psMetadataAddStr(config->where, PS_LIST_TAIL, #name, 0, "==", str)) {\
     99            psError(PS_ERR_UNKNOWN, false, "failed to add item " #name); \
     100            goto FAIL; \
     101        } \
     102    } \
     103}
     104
     105
     106
     107    // generate SQL where claus
     108    config->where = psMetadataAlloc();
     109
     110    addWhereStr(exp_id);
     111    // convert '-inst' to 'camera'
     112    {
     113        psString str = NULL;
     114        bool status = false;
     115        if ((str = psMetadataLookupStr(&status, config->args, "-inst"))) {
     116            if (!psMetadataAddStr(config->where, PS_LIST_TAIL, "camera", 0, "==", str)) {
     117                psError(PS_ERR_UNKNOWN, false, "failed to add item camera");
     118                goto FAIL;
     119            }
     120        }
    91121    }
    92122
    93     bool status;
    94     config->camera_name = psMetadataLookupStr(&status, arguments,
    95         "-inst");
    96     config->exp_id = psMetadataLookupStr(&status, arguments, "-exp_id");
    97     config->class = psMetadataLookupStr(&status, arguments, "-class");
    98     config->class_id = psMetadataLookupStr(&status, arguments,
    99         "-class_id");
    100     config->uri = psMetadataLookupStr(&status, arguments, "-uri");
    101123
    102     // XXX why is "" being returned when -[foo] isn't specified?
    103 #define EMPTY_TO_NULL_STRING(var) \
    104     if (strcmp(var, "") == 0) { \
    105         var = NULL; \
    106     }
    107 
    108     EMPTY_TO_NULL_STRING(config->camera_name);
    109     EMPTY_TO_NULL_STRING(config->exp_id);
    110     EMPTY_TO_NULL_STRING(config->class);
    111     EMPTY_TO_NULL_STRING(config->class_id);
    112     EMPTY_TO_NULL_STRING(config->uri);
    113 
    114     psMetadata *where = psMetadataAlloc();
    115 
    116     if (config->camera_name != NULL) {
    117         if (!psMetadataAddStr(where, PS_LIST_TAIL, "camera", 0, "==",
    118             config->camera_name)) {
    119             psError(PS_ERR_UNKNOWN, false, "failed to add item camera");
    120             psFree(where);
    121             return NULL;
    122         }
    123     }
    124     if (config->filter != NULL) {
    125         psMetadataAddStr(where, PS_LIST_TAIL, "filter", 0, "==",
    126             config->filter);
    127     }
    128     if (config->exp_id != NULL) {
    129         psMetadataAddStr(where, PS_LIST_TAIL, "exp_id", 0, "==",
    130             config->exp_id);
    131     }
    132     if (config->class != NULL) {
    133         psMetadataAddStr(where, PS_LIST_TAIL, "class", 0, "==",
    134             config->class);
    135     }
    136     if (config->class_id != NULL) {
    137         psMetadataAddStr(where, PS_LIST_TAIL, "class_id", 0, "==",
    138              config->class_id);
    139     }
     124    addWhereStr(filter);
     125    addWhereStr(class);
     126    addWhereStr(class_id);
    140127
    141128    /*
     
    147134    */
    148135
    149     if (where->list->n < 1) {
    150         psFree(where);
    151         where = NULL;
     136    if (config->where->list->n < 1) {
     137        psFree(config->where);
     138        config->where = NULL;
    152139    }
    153 
    154     config->where = where;
    155 
    156 
    157     // add the input and output images to the arguments list
    158     //psMetadataAddStr (arguments, PS_LIST_TAIL, "-output", 0, "Name of the output image", argv[1]);
    159140
    160141    // define Database handle, if used
     
    162143    if (!config->dbh) {
    163144        psError(PS_ERR_UNKNOWN, false, "Can't configure database");
    164         exit(EXIT_FAILURE);
     145        goto FAIL;
    165146    }
    166147
    167     return true;
     148    // save argv/argc
     149    config->argv = argv;
     150    config->argc = argc;
     151
     152    return config;
     153
     154FAIL:
     155    psFree(config);
     156    pmConfigDone();
     157    psLibFinalize();
     158    exit(EXIT_FAILURE);
    168159}
Note: See TracChangeset for help on using the changeset viewer.