Index: trunk/ippTools/src/regtoolConfig.c
===================================================================
--- trunk/ippTools/src/regtoolConfig.c	(revision 6368)
+++ trunk/ippTools/src/regtoolConfig.c	(revision 6417)
@@ -7,10 +7,7 @@
 
     if (! pmConfigRead(&config->site, &config->camera, &config->recipe, &argc, argv, RECIPE)) {
-        psErrorStackPrint(stderr, "Can't find site configuration!\n");
+        psError(PS_ERR_UNKNOWN, false, "Can't find site configuration!\n");
         exit(EXIT_FAILURE);
     }
-
-    // Parse other command-line arguments
-    psMetadata *arguments = psMetadataAlloc(); // The arguments, with default values
 
     int N;
@@ -19,5 +16,5 @@
         psArgumentRemove (N, &argc, argv);
         if (config->mode) {
-            psAbort (argv[0], "only one mode selection is allowed");
+            psError(PS_ERR_UNKNOWN, true, "only one mode selection is allowed");
         }
         config->mode = PX_MODE_PENDING;
@@ -26,5 +23,5 @@
         psArgumentRemove (N, &argc, argv);
         if (config->mode) {
-            psAbort (argv[0], "only one mode selection is allowed");
+            psError(PS_ERR_UNKNOWN, true, "only one mode selection is allowed");
         }
         config->mode = PX_MODE_UPDATE;
@@ -32,47 +29,61 @@
     
     // paul's argument parsing convention requires: -key value 
-    psMetadataAddStr(arguments, PS_LIST_TAIL, "-pending", 0, "examine pending image table, write ppImage output", "");
-    psMetadataAddStr(arguments, PS_LIST_TAIL, "-update",  0, "update pending image table", "");
+    // Parse other command-line arguments
+    psMetadata *args = psMetadataAlloc();
+    psMetadataAddStr(args , PS_LIST_TAIL, "-pending", 0,
+        "examine pending image table, write ppImage output", "");
+    psMetadataAddStr(args , PS_LIST_TAIL, "-update",  0,
+        "update pending image table", "");
 
 
     // -pending search
-    psMetadataAddStr(arguments, PS_LIST_TAIL, "-exp_id",  0, "define exposure ID", "");
-    psMetadataAddStr(arguments, PS_LIST_TAIL, "-inst",  0, "define camera of interest", "");
-    psMetadataAddStr(arguments, PS_LIST_TAIL, "-telescope",  0, "define camera of interest", "");
-    psMetadataAddStr(arguments, PS_LIST_TAIL, "-exp_type",  0, "define class", "");
-    psMetadataAddStr(arguments, PS_LIST_TAIL, "-class",  0, "define class", "");
+    psMetadata *pendingArgs = psMetadataAlloc();
+    psMetadataAddStr(pendingArgs, PS_LIST_TAIL, "-exp_id",  0,
+        "define exposure ID", "");
+    psMetadataAddStr(pendingArgs, PS_LIST_TAIL, "-inst",  0,
+        "define camera of interest", "");
+    psMetadataAddStr(pendingArgs, PS_LIST_TAIL, "-telescope",  0,
+        "define camera of interest", "");
+    psMetadataAddStr(pendingArgs, PS_LIST_TAIL, "-exp_type",  0,
+        "define class", "");
+    psMetadataAddStr(pendingArgs, PS_LIST_TAIL, "-class",  0,
+        "define class", "");
+
 
     // -update inputs
-//    psMetadataAddStr(arguments, PS_LIST_TAIL, "-exp_id",  0, "define class", "");
-    psMetadataAddStr(arguments, PS_LIST_TAIL, "-filter",  0, "define filter of interest", "");
-    psMetadataAddStr(arguments, PS_LIST_TAIL, "-stat",  0, "define URL", "");
-    psMetadataAddStr(arguments, PS_LIST_TAIL, "-recipe",  0, "define URL", "");
-    psMetadataAddStr(arguments, PS_LIST_TAIL, "-mosiac",  0, "define URL", "");
+    psMetadata *updateArgs = psMetadataAlloc();
+    psMetadataAddStr(updateArgs, PS_LIST_TAIL, "-exp_id",  0,
+        "define class", "");
+    psMetadataAddStr(updateArgs, PS_LIST_TAIL, "-filter",  0,
+        "define filter of interest", "");
+    psMetadataAddStr(updateArgs, PS_LIST_TAIL, "-stat",  0,
+        "define URL", "");
+    psMetadataAddStr(updateArgs, PS_LIST_TAIL, "-recipe",  0,
+        "define URL", "");
+    psMetadataAddStr(updateArgs, PS_LIST_TAIL, "-mosiac",  0,
+        "define URL", "");
 
+    bool argErr = false;
     if (config->mode == PX_MODE_NONE) {
-        fprintf (stderr, "search mode not specified\n");
-        psArgumentHelp(arguments);
-        psFree(arguments);
+        argErr = true;
+        fprintf (stderr, "mode argument is required\n");
+    } else if (! psArgumentParse(args, &argc, argv) || argc != 1) {
+        argErr = true;
+        fprintf (stderr, "error parsing arguments\n");
+    }
+
+    if (argErr) {
+        printf("\nPan-STARRS Phase 0 Search Tool\n");
+        printf("Usage: %s <mode> [<options>]\n\n", argv[0]);
+        printf(" <mode> : -pending | -update\n\n");
+        fprintf (stdout, "-pending ");
+        psArgumentHelp(pendingArgs);
+        fprintf (stdout, "-update ");
+        psArgumentHelp(updateArgs);
+        psFree(args);
+        psFree(pendingArgs);
+        psFree(updateArgs);
         exit(EXIT_FAILURE);
     }
-
-    if (! psArgumentParse(arguments, &argc, argv) || argc != 1) {
-        printf("\nPan-STARRS Phase 2 Search Tool\n\n");
-        printf("Usage: %s [mode] [options]\n\n", argv[0]);
-        printf(" [mode] : -quick | -define | -pending | -donee\n\n");
-        psArgumentHelp(arguments);
-        psFree(arguments);
-        exit(EXIT_FAILURE);
-    }
-
-    bool status;
-    config->camera_name = psMetadataLookupStr(&status, arguments,
-        "-inst");
-    config->filter = psMetadataLookupStr(&status, arguments, "-filter");
-    config->exp_id = psMetadataLookupStr(&status, arguments, "-exp_id");
-    config->class = psMetadataLookupStr(&status, arguments, "-class");
-    config->class_id = psMetadataLookupStr(&status, arguments,
-        "-class_id");
-    config->url = psMetadataLookupStr(&status, arguments, "-url");
 
     // XXX why is "" being returned when -[foo] isn't specified?
@@ -82,10 +93,48 @@
     }
 
-    EMPTY_TO_NULL_STRING(config->camera_name);
-    EMPTY_TO_NULL_STRING(config->filter);
-    EMPTY_TO_NULL_STRING(config->exp_id);
-    EMPTY_TO_NULL_STRING(config->class);
-    EMPTY_TO_NULL_STRING(config->class_id);
-    EMPTY_TO_NULL_STRING(config->url);
+    switch (config->mode) {
+        bool status;
+        case PX_MODE_PENDING:
+            // -exp_id
+            config->exp_id = psMetadataLookupStr(&status, args, "-exp_id");
+            psMemIncrRefCounter(config->exp_id);
+            EMPTY_TO_NULL_STRING(config->exp_id);
+            // -inst
+            config->camera_name = psMetadataLookupStr(&status, args, "-inst");
+            psMemIncrRefCounter(config->camera_name);
+            EMPTY_TO_NULL_STRING(config->camera_name);
+            // -telescope
+            config->camera_name = psMetadataLookupStr(&status, args,
+                "-telescope");
+            psMemIncrRefCounter(config->telescope);
+            EMPTY_TO_NULL_STRING(config->telescope);
+            // -exp_type
+            config->class = psMetadataLookupStr(&status, args, "-exp_type");
+            psMemIncrRefCounter(config->exp_type);
+            EMPTY_TO_NULL_STRING(config->exp_type);
+            // -class
+            config->class = psMetadataLookupStr(&status, args, "-class");
+            psMemIncrRefCounter(config->class);
+            EMPTY_TO_NULL_STRING(config->class);
+            break;
+        case PX_MODE_UPDATE:
+            // -exp_id
+            config->exp_id = psMetadataLookupStr(&status, args, "-exp_id");
+            psMemIncrRefCounter(config->exp_id);
+            EMPTY_TO_NULL_STRING(config->exp_id);
+            // -filter
+            config->filter = psMetadataLookupStr(&status, args, "-filter");
+            psMemIncrRefCounter(config->filter);
+            EMPTY_TO_NULL_STRING(config->filter);
+
+            break;
+        default:
+            psAbort(argv[0], "invalid option (this should not happen)");
+    }
+
+    psFree(args);
+    psFree(pendingArgs);
+    psFree(updateArgs);
+
 
     psMetadata *where = psMetadataAlloc();
@@ -132,6 +181,6 @@
 
 
-    // add the input and output images to the arguments list
-    //psMetadataAddStr (arguments, PS_LIST_TAIL, "-output", 0, "Name of the output image", argv[1]);
+    // add the input and output images to the args list
+    //psMetadataAddStr (args, PS_LIST_TAIL, "-output", 0, "Name of the output image", argv[1]);
 
     // define Database handle, if used
