Index: trunk/ippTools/src/camtool.c
===================================================================
--- trunk/ippTools/src/camtool.c	(revision 15957)
+++ trunk/ippTools/src/camtool.c	(revision 16170)
@@ -89,59 +89,16 @@
 }
 
-#define ADDRENAMEPARAMSTR(from, to, oldname, newname, comment) \
-{ \
-    bool status = false; \
-    psString str = psMetadataLookupStr(&status, from, "-" oldname); \
-    if (!status) { \
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -" oldname); \
-        return false; \
-    } \
-    if (str) { \
-        if (!psMetadataAddStr(to, PS_LIST_TAIL, newname, PS_META_DUPLICATE_OK, comment, str)) { \
-            psError(PS_ERR_UNKNOWN, false, "failed to add item " newname); \
-            psFree(to); \
-            return false; \
-        } \
-    } \
-}
-
-#define ADDPARAMSTR(from, to, name) \
-  ADDRENAMEPARAMSTR(from, to, name, name, "==")
-
-#define ADDRENAMEPARAMF(from, to, type, oldname, newname, comment) \
-{ \
-    bool status = false; \
-    ps##type var = psMetadataLookup##type(&status, from, "-" oldname); \
-    if (!status) { \
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -" oldname); \
-        return false; \
-    } \
-    if (!isnan(var)) { \
-        if (!psMetadataAdd##type(to, PS_LIST_TAIL, newname, PS_META_DUPLICATE_OK, comment, var)) { \
-            psError(PS_ERR_UNKNOWN, false, "failed to add item " newname); \
-            psFree(to); \
-            return false; \
-        } \
-    } \
-}
-
-#define ADDPARAMF(from, to, type, name) \
-  ADDRENAMEPARAMF(from, to, type, name, name, "==")
 
 static bool queueMode(pxConfig *config)
 {
     PS_ASSERT_PTR_NON_NULL(config, NULL);
+
+    PXOPT_LOOKUP_STR(chip_id, config->args, "-chip_id", false, false);
+    PXOPT_LOOKUP_STR(exp_id, config->args, "-exp_id", false, false);
 
     psMetadata *where = psMetadataAlloc();
     // convert chip_id into a psS64
-{
-    bool status = false;
-    psString var = psMetadataLookupStr(&status, config->args, "-chip_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -chip_id");
-        return false;
-    }
-    if (var) {
-        if (!psMetadataAddS64(where, PS_LIST_TAIL, "chip_id", 0, "==", (psS64)atoll(var))) {
+    if (chip_id) {
+        if (!psMetadataAddS64(where, PS_LIST_TAIL, "chip_id", 0, "==", (psS64)atoll(chip_id))) {
             psError(PS_ERR_UNKNOWN, false, "failed to add item chip_id");
             psFree(where);
@@ -149,15 +106,8 @@
         }
     }
-}
+ 
     // convert exp_id into a psS64
-{
-    bool status = false;
-    psString var = psMetadataLookupStr(&status, config->args, "-exp_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -exp_id");
-        return false;
-    }
-    if (var) {
-        if (!psMetadataAddS64(where, PS_LIST_TAIL, "exp_id", 0, "==", (psS64)atoll(var))) {
+    if (exp_id) {
+        if (!psMetadataAddS64(where, PS_LIST_TAIL, "exp_id", 0, "==", (psS64)atoll(exp_id))) {
             psError(PS_ERR_UNKNOWN, false, "failed to add item exp_id");
             psFree(where);
@@ -165,42 +115,43 @@
         }
     }
-}
-    ADDPARAMSTR(config->args, where, "exp_name");
-    ADDRENAMEPARAMSTR(config->args, where, "inst", "camera", "==");
-    ADDPARAMSTR(config->args, where, "telescope");
-    ADDPARAMSTR(config->args, where, "dateobs_begin");
-    ADDPARAMSTR(config->args, where, "dateobs_end");
-    ADDPARAMSTR(config->args, where, "exp_tag");
-    ADDPARAMSTR(config->args, where, "exp_type");
-    ADDPARAMSTR(config->args, where, "filelevel");
-    ADDPARAMSTR(config->args, where, "reduction");
-    ADDPARAMSTR(config->args, where, "filter");
-    ADDRENAMEPARAMF(config->args, where, F64, "airmass_min", "airmass", ">=");
-    ADDRENAMEPARAMF(config->args, where, F64, "airmass_max", "airmass", "<");
-    ADDRENAMEPARAMF(config->args, where, F64, "ra_min", "ra", ">=");
-    ADDRENAMEPARAMF(config->args, where, F64, "ra_max", "ra", "<");
-    ADDRENAMEPARAMF(config->args, where, F64, "decl_min", "decl", ">=");
-    ADDRENAMEPARAMF(config->args, where, F64, "decl_max", "decl", "<");
-    ADDRENAMEPARAMF(config->args, where, F32, "exp_time_min", "exp_time", ">=");
-    ADDRENAMEPARAMF(config->args, where, F32, "exp_time_max", "exp_time", "<");
-    ADDRENAMEPARAMF(config->args, where, F32, "sat_pixel_frac_min", "sat_pixel_frac", ">=");
-    ADDRENAMEPARAMF(config->args, where, F32, "sat_pixel_frac_max", "sat_pixel_frac", "<");
-    ADDRENAMEPARAMF(config->args, where, F64, "bg_min", "bt", ">=");
-    ADDRENAMEPARAMF(config->args, where, F64, "bg_max", "bt", "<");
-    ADDRENAMEPARAMF(config->args, where, F64, "bg_stdev_min", "bg_stdev", ">=");
-    ADDRENAMEPARAMF(config->args, where, F64, "bg_stdev_max", "bg_stdev", "<");
-    ADDRENAMEPARAMF(config->args, where, F64, "bg_mean_stdev_min", "bg_mean_stdev", ">=");
-    ADDRENAMEPARAMF(config->args, where, F64, "bg_mean_stdev_max", "bg_mean_stdev", "<");
-    ADDRENAMEPARAMF(config->args, where, F64, "alt_min", "alt", ">=");
-    ADDRENAMEPARAMF(config->args, where, F64, "alt_max", "alt", "<");
-    ADDRENAMEPARAMF(config->args, where, F64, "az_min", "az", ">=");
-    ADDRENAMEPARAMF(config->args, where, F64, "az_max", "az", "<");
-    ADDRENAMEPARAMF(config->args, where, F32, "ccd_temp_min", "ccd_temp", ">=");
-    ADDRENAMEPARAMF(config->args, where, F32, "ccd_temp_max", "ccd_temp", "<");
-    ADDRENAMEPARAMF(config->args, where, F64, "posang_min", "posang", ">=");
-    ADDRENAMEPARAMF(config->args, where, F64, "posang_max", "posang", "<");
-    ADDPARAMSTR(config->args, where, "object");
-    ADDRENAMEPARAMF(config->args, where, F32, "solang_min", "solang", ">=");
-    ADDRENAMEPARAMF(config->args, where, F32, "solang_max", "solang", "<");
+
+    PXOPT_COPY_STR(config->args, where, "-exp_name", "exp_name", "==");
+    PXOPT_COPY_STR(config->args, where, "-inst", "camera", "==");
+    PXOPT_COPY_STR(config->args, where, "-telescope", "telescope", "==");
+    PXOPT_COPY_TIME(config->args, where, "-dateobs_begin", "dateobs", ">=");
+    PXOPT_COPY_TIME(config->args, where, "-dateobs_end", "dateobs", "<=");
+    PXOPT_COPY_STR(config->args, where, "-exp_tag", "exp_tag", "==");
+    PXOPT_COPY_STR(config->args, where, "-exp_type", "exp_type", "==");
+    PXOPT_COPY_STR(config->args, where, "-filelevel", "filelevel", "==");
+    PXOPT_COPY_STR(config->args, where, "-reduction", "reduction", "==");
+    PXOPT_COPY_STR(config->args, where, "-filter", "filter", "==");
+
+    PXOPT_COPY_F64(config->args, where, "-airmass_min", "airmass", ">=");
+    PXOPT_COPY_F64(config->args, where, "-airmass_max", "airmass", "<");
+    PXOPT_COPY_F64(config->args, where, "-ra_min", "ra", ">=");
+    PXOPT_COPY_F64(config->args, where, "-ra_max", "ra", "<");
+    PXOPT_COPY_F64(config->args, where, "-decl_min", "decl", ">=");
+    PXOPT_COPY_F64(config->args, where, "-decl_max", "decl", "<");
+    PXOPT_COPY_F32(config->args, where, "-exp_time_min", "exp_time", ">=");
+    PXOPT_COPY_F32(config->args, where, "-exp_time_max", "exp_time", "<");
+    PXOPT_COPY_F32(config->args, where, "-sat_pixel_frac_min", "sat_pixel_frac", ">=");
+    PXOPT_COPY_F32(config->args, where, "-sat_pixel_frac_max", "sat_pixel_frac", "<");
+    PXOPT_COPY_F64(config->args, where, "-bg_min", "bt", ">=");
+    PXOPT_COPY_F64(config->args, where, "-bg_max", "bt", "<");
+    PXOPT_COPY_F64(config->args, where, "-bg_stdev_min", "bg_stdev", ">=");
+    PXOPT_COPY_F64(config->args, where, "-bg_stdev_max", "bg_stdev", "<");
+    PXOPT_COPY_F64(config->args, where, "-bg_mean_stdev_min", "bg_mean_stdev", ">=");
+    PXOPT_COPY_F64(config->args, where, "-bg_mean_stdev_max", "bg_mean_stdev", "<");
+    PXOPT_COPY_F64(config->args, where, "-alt_min", "alt", ">=");
+    PXOPT_COPY_F64(config->args, where, "-alt_max", "alt", "<");
+    PXOPT_COPY_F64(config->args, where, "-az_min", "az", ">=");
+    PXOPT_COPY_F64(config->args, where, "-az_max", "az", "<");
+    PXOPT_COPY_F32(config->args, where, "-ccd_temp_min", "ccd_temp", ">=");
+    PXOPT_COPY_F32(config->args, where, "-ccd_temp_max", "ccd_temp", "<");
+    PXOPT_COPY_F64(config->args, where, "-posang_min", "posang", ">=");
+    PXOPT_COPY_F64(config->args, where, "-posang_max", "posang", "<");
+    PXOPT_COPY_STR(config->args, where, "-object", "object", "==");
+    PXOPT_COPY_F32(config->args, where, "-solang_min", "solang", ">=");
+    PXOPT_COPY_F32(config->args, where, "-solang_max", "solang", "<");
 
     if (where->list->n < 1) {
@@ -209,34 +160,11 @@
     }
 
-    bool status = false;
-    psString workdir = psMetadataLookupStr(&status, config->args, "-set_workdir");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -set_workdir");
-        return false;
-    }
-
-    psString label = psMetadataLookupStr(&status, config->args, "-set_label");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -set_label");
-        return false;
-    }
-
-    psString reduction = psMetadataLookupStr(&status, config->args, "-set_reduction");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -set_reduction");
-        return false;
-    }
-
-    psString expgroup = psMetadataLookupStr(&status, config->args, "-set_expgroup");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -set_expgroup");
-        return false;
-    }
-
-    psString dvodb = psMetadataLookupStr(&status, config->args, "-set_dvodb");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -set_dvodb");
-        return false;
-    }
+    PXOPT_LOOKUP_STR(workdir, config->args, "-set_workdir", true, false);
+    PXOPT_LOOKUP_STR(label, config->args, "-set_label", true, false);
+    PXOPT_LOOKUP_STR(reduction, config->args, "-set_reduction", true, false);
+    PXOPT_LOOKUP_STR(expgroup, config->args, "-set_expgroup", true, false);
+    PXOPT_LOOKUP_STR(dvodb, config->args, "-set_dvodb", true, false);
+    PXOPT_LOOKUP_STR(tess_id, config->args, "-set_tess_id", true, false);
+    PXOPT_LOOKUP_STR(end_stage, config->args, "-set_end_stage", true, false);
 
     // find the exp_id of all the exposures that we want to queue up.
@@ -303,5 +231,7 @@
                     reduction      ? reduction    : row->reduction,
                     expgroup    ? expgroup  : row->expgroup,
-                    dvodb       ? dvodb     : row->dvodb
+                    dvodb       ? dvodb     : row->dvodb,
+                    tess_id     ? tess_id   : row->tess_id,
+                    end_stage   ? end_stage : row->end_stage
         )) {
             if (!psDBRollback(config->dbh)) {
@@ -330,10 +260,6 @@
     PS_ASSERT_PTR_NON_NULL(config, false);
 
-    bool status = false;
-    psU64 limit = psMetadataLookupU64(&status, config->args, "-limit");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -limit");
-        return false;
-    }
+    PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
+    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
 
     psString query = pxDataGet("camtool_find_pendingexp.sql");
@@ -374,14 +300,4 @@
     }
 
-    bool simple = false;
-    {
-        bool status = false;
-        simple = psMetadataLookupBool(&status, config->args, "-simple");
-        if (!status) {
-            psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -simple");
-            return false;
-        }
-    }
-
     if (!convertIdToStr(output)) {
         psError(PS_ERR_UNKNOWN, false, "failed to convert id fields into a strings");
@@ -405,4 +321,6 @@
 {
     PS_ASSERT_PTR_NON_NULL(config, false);
+
+    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
 
     psString query = pxDataGet("camtool_find_pendingimfile.sql");
@@ -436,14 +354,4 @@
     }
 
-    bool simple = false;
-    {
-        bool status = false;
-        simple = psMetadataLookupBool(&status, config->args, "-simple");
-        if (!status) {
-            psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -simple");
-            return false;
-        }
-    }
-
     if (!convertIdToStr(output)) {
         psError(PS_ERR_UNKNOWN, false, "failed to convert id fields into a strings");
@@ -468,138 +376,30 @@
     PS_ASSERT_PTR_NON_NULL(config, false);
 
-    bool status = false;
-    psString cam_id = psMetadataLookupStr(&status, config->args, "-cam_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -cam_id");
-        return false;
-    }
-    if (!cam_id) {
-        psError(PS_ERR_UNKNOWN, true, "-cam_id is required");
-        return false;
-    }
-
-    psString uri = psMetadataLookupStr(&status, config->args, "-uri");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -uri");
-        return false;
-    }
-    if (!uri) {
-        psError(PS_ERR_UNKNOWN, true, "-uri is required");
-        return false;
-    }
-
-    psF64 bg = psMetadataLookupF64(&status, config->args, "-bg");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -bg");
-        return false;
-    }
-
-    psF64 bg_stdev = psMetadataLookupF64(&status, config->args, "-bg_stdev");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -bg_stdev");
-        return false;
-    }
-
-    psF64 bg_mean_stdev = psMetadataLookupF64(&status, config->args, "-bg_mean_stdev");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -bg_mean_stdev");
-        return false;
-    }
-
-    psF32 sigma_ra = psMetadataLookupF32(&status, config->args, "-sigma_ra");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -sigma_ra");
-        return false;
-    }
-    //if (isnan(sigma_ra)) {
-    //  psError(PS_ERR_UNKNOWN, true, "-sigma_ra is required");
-    //  return false;
-    //}
-
-    psF32 sigma_dec = psMetadataLookupF32(&status, config->args, "-sigma_dec");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -sigma_dec");
-        return false;
-    }
-    //if (isnan(sigma_dec)) {
-    //  psError(PS_ERR_UNKNOWN, true, "-sigma_dec is required");
-    //  return false;
-    //}
-
-    psF32 zp_mean = psMetadataLookupF32(&status, config->args, "-zp_mean");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -zp_mean");
-        return false;
-    }
-    //if (isnan(zp_mean)) {
-    //  psError(PS_ERR_UNKNOWN, true, "-zp_mean is required");
-    //  return false;
-    //}
-
-    psF32 zp_stdev = psMetadataLookupF32(&status, config->args, "-zp_stdev");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -zp_stdev");
-        return false;
-    }
-    //if (isnan(zp_stdev)) {
-    //  psError(PS_ERR_UNKNOWN, true, "-zp_stdev is required");
-    //  return false;
-    //}
-
-    psF32 fwhm = psMetadataLookupF32(&status, config->args, "-fwhm");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -fwhm");
-        return false;
-    }
-    //if (isnan(fwhm)) {
-    //  psError(PS_ERR_UNKNOWN, true, "-fwhm is required");
-    //  return false;
-    //}
-
-    psF32 fwhm_range = psMetadataLookupF32(&status, config->args, "-fwhm_range");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -fwhm_range");
-        return false;
-    }
-    //if (isnan(fwhm_range)) {
-    //  psError(PS_ERR_UNKNOWN, true, "-fwhm_range is required");
-    //  return false;
-    //}
-
-    psS32 n_stars = psMetadataLookupS32(&status, config->args, "-n_stars");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -n_stars");
-        return false;
-    }
-    if (n_stars < 0) {
-        psError(PS_ERR_UNKNOWN, true, "-n_stars is required");
-        return false;
-    }
-
-    psS32 n_extended = psMetadataLookupS32(&status, config->args, "-n_extended");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -n_extended");
-        return false;
-    }
+    // required
+    PXOPT_LOOKUP_STR(cam_id, config->args, "-cam_id", true, false);
+    PXOPT_LOOKUP_STR(uri, config->args, "-uri", true, false);
+
+    // optional
+    PXOPT_LOOKUP_F32(bg, config->args, "-bg", false, false);
+    PXOPT_LOOKUP_F32(bg_stdev, config->args, "-bg_stdev", false, false);
+    PXOPT_LOOKUP_F32(bg_mean_stdev, config->args, "-bg_mean_stdev", false, false);
+    PXOPT_LOOKUP_F32(sigma_ra, config->args, "-sigma_ra", false, false);
+    PXOPT_LOOKUP_F32(sigma_dec, config->args, "-sigma_dec", false, false);
+    PXOPT_LOOKUP_F32(zp_mean, config->args, "-zp_mean", false, false);
+    PXOPT_LOOKUP_F32(zp_stdev, config->args, "-zp_stdev", false, false);
+    PXOPT_LOOKUP_F32(fwhm, config->args, "-fwhm", false, false);
+    PXOPT_LOOKUP_F32(fwhm_range, config->args, "-fwhm_range", false, false);
+    PXOPT_LOOKUP_F32(n_stars, config->args, "-n_stars", false, false);
+    PXOPT_LOOKUP_F32(n_extended, config->args, "-n_extended", false, false);
     if (n_extended < 0) {
         psError(PS_ERR_UNKNOWN, true, "-n_extended is required");
         return false;
     }
-
-    psS32 n_cr = psMetadataLookupS32(&status, config->args, "-n_cr");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -n_cr");
-        return false;
-    }
+    PXOPT_LOOKUP_F32(n_cr, config->args, "-n_cr", false, false);
     if (n_cr < 0) {
         psError(PS_ERR_UNKNOWN, true, "-n_cr is required");
         return false;
     }
-
-    psS32 n_astrom = psMetadataLookupS32(&status, config->args, "-n_astrom");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -n_astrom");
-        return false;
-    }
+    PXOPT_LOOKUP_F32(n_astrom, config->args, "-n_astrom", false, false);
     if (n_astrom < 0) {
         psError(PS_ERR_UNKNOWN, true, "-n_astrom is required");
@@ -607,17 +407,8 @@
     }
 
-    // optional
-    psString path_base = psMetadataLookupStr(&status, config->args, "-path_base");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -path_base");
-        return false;
-    }
+    PXOPT_LOOKUP_STR(path_base, config->args, "-path_base", false, false);
 
     // default
-    psS16 code = psMetadataLookupS16(&status, config->args, "-code");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -code");
-        return false;
-    }
+    PXOPT_LOOKUP_S16(code, config->args, "-code", false, false);
 
     psString query = pxDataGet("camtool_find_pendingexp.sql");
@@ -674,5 +465,4 @@
     camRunRow *pendingRow = camRunObjectFromMetadata(output->data[0]);
     psFree(output);
-    // create a new camProcessedImfile object
     camProcessedExpRow *row = camProcessedExpRowAlloc(
         pendingRow->cam_id,
@@ -697,5 +487,4 @@
     psFree(pendingRow);
 
-    // insert the new row into the camProcessedImfile table
     if (!camProcessedExpInsertObject(config->dbh, row)) {
         // rollback
@@ -730,16 +519,7 @@
     PS_ASSERT_PTR_NON_NULL(config, false);
 
-    bool status = false;
-    psU64 limit = psMetadataLookupU64(&status, config->args, "-limit");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -limit");
-        return false;
-    }
-
-    bool faulted = psMetadataLookupU64(&status, config->args, "-faulted");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -faulted");
-        return false;
-    }
+    PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
+    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
+    PXOPT_LOOKUP_BOOL(faulted, config->args, "-faulted", false);
 
     psString query = pxDataGet("camtool_find_processedexp.sql");
@@ -788,14 +568,4 @@
     }
 
-    bool simple = false;
-    {
-        bool status = false;
-        simple = psMetadataLookupBool(&status, config->args, "-simple");
-        if (!status) {
-            psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -simple");
-            return false;
-        }
-    }
-
     if (!convertIdToStr(output)) {
         psError(PS_ERR_UNKNOWN, false, "failed to convert id fields into a strings");
@@ -853,14 +623,5 @@
     PS_ASSERT_PTR_NON_NULL(config, false);
 
-    bool status = false;
-    psS16 code = psMetadataLookupS16(&status, config->args, "-code");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -code");
-        return false;
-    }
-    if (code == INT16_MAX) {
-        psError(PS_ERR_UNKNOWN, true, "-code is required");
-        return false;
-    }
+    PXOPT_LOOKUP_S16(code, config->args, "-code", true, false);
 
     if (!pxSetFaultCode(config->dbh, "camProcessedExp", config->where, code)) {
@@ -877,14 +638,5 @@
     PS_ASSERT_PTR_NON_NULL(config, false);
 
-    bool status = false;
-    psString label = psMetadataLookupStr(&status, config->args, "-label");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -label");
-        return false;
-    }
-    if (!label) {
-        psError(PS_ERR_UNKNOWN, true, "-label is required");
-        return false;
-    }
+    PXOPT_LOOKUP_STR(label, config->args, "-label", true, false);
 
     if (!camMaskInsert(config->dbh, label)) {
@@ -900,4 +652,6 @@
 {
     PS_ASSERT_PTR_NON_NULL(config, false);
+
+    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
 
     psString query = psStringCopy("SELECT * FROM camMask");
@@ -919,14 +673,4 @@
         psFree(output);
         return true;
-    }
-
-    bool simple = false;
-    {
-        bool status = false;
-        simple = psMetadataLookupBool(&status, config->args, "-simple");
-        if (!status) {
-            psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -simple");
-            return false;
-        }
     }
 
@@ -954,14 +698,5 @@
     PS_ASSERT_PTR_NON_NULL(config, false);
 
-    bool status = false;
-    psString label = psMetadataLookupStr(&status, config->args, "-label");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -label");
-        return false;
-    }
-    if (!label) {
-        psError(PS_ERR_UNKNOWN, true, "-label is required");
-        return false;
-    }
+    PXOPT_LOOKUP_STR(label, config->args, "-label", true, false);
 
     char *query = "DELETE FROM camMask WHERE label = '%s'";
@@ -969,8 +704,7 @@
     if (!p_psDBRunQuery(config->dbh, query, label)) {
         psError(PS_ERR_UNKNOWN, false, "database error");
-        psFree(query);
-        return false;
-    }
-
-    return true;
-}
+        return false;
+    }
+
+    return true;
+}
