Index: trunk/ippTools/src/pxinjectConfig.c
===================================================================
--- trunk/ippTools/src/pxinjectConfig.c	(revision 12025)
+++ trunk/ippTools/src/pxinjectConfig.c	(revision 13578)
@@ -69,47 +69,20 @@
         "define the URI (required)", NULL);
 
-#define PXTOOL_MODE(option, modeval, argset) \
-{ \
-    int N = 0; \
-    if ((N = psArgumentGet (argc, argv, option))) { \
-        psArgumentRemove (N, &argc, argv); \
-        if (config->mode) { \
-            psError(PS_ERR_UNKNOWN, true, "only one mode selection is allowed"); \
-        } \
-        config->mode = modeval; \
-        config->args = psMemIncrRefCounter(argset); \
-    } \
-}
+    psMetadata *argSets = psMetadataAlloc();
+    psMetadata *modes = psMetadataAlloc();
 
-    // find which mode we're running under
-    PXTOOL_MODE("-newExp",          PXINJECT_MODE_NEWEXP,       newExpArgs);
-    PXTOOL_MODE("-newImfile",       PXINJECT_MODE_NEWIMFILE,    newImfileArgs);
+    PXTOOL_ADD_MODE("-newExp",      "", PXINJECT_MODE_NEWEXP,       newExpArgs);
+    PXTOOL_ADD_MODE("-newImfile",   "", PXINJECT_MODE_NEWIMFILE,    newImfileArgs);
 
-    bool argErr = false;
-    if (config->mode == PXINJECT_MODE_NONE) {
-        argErr = true;
-        fprintf (stderr, "mode argument is required\n");
-    } else if (! psArgumentParse(config->args, &argc, argv) || argc != 1) {
-        argErr = true;
-        fprintf (stderr, "error parsing arguments\n");
-    }
-
-    if (argErr) {
-        printf("\nPan-STARRS Detrend Tool\n");
-        printf("Usage: %s <mode> [<options>]\n\n", argv[0]);
-        printf(" <mode> : [-newExp|-newImfile]\n\n");
-        fprintf (stdout, "-newExp ");
-        psArgumentHelp(newExpArgs);
-        psFree(newExpArgs);
-        fprintf (stdout, "-newImfile ");
-        psArgumentHelp(newImfileArgs);
-        psFree(newImfileArgs);
-
+    if (!pxGetOptions(stderr, argc, argv, config, modes, argSets)) {
+        psError(PS_ERR_UNKNOWN, true, "option parsing failed");
+        psFree(argSets);
+        psFree(modes);
         psFree(config);
         return NULL;
     }
 
-    psFree(newExpArgs);
-    psFree(newImfileArgs);
+    psFree(argSets);
+    psFree(modes);
 
     // setup search criterion
@@ -211,8 +184,4 @@
     }
 
-    // save argv/argc
-    config->argv = argv;
-    config->argc = argc;
-
     return config;
 }
