Index: trunk/ippTools/src/dettool.c
===================================================================
--- trunk/ippTools/src/dettool.c	(revision 16828)
+++ trunk/ippTools/src/dettool.c	(revision 16868)
@@ -1038,5 +1038,5 @@
         return false;
     }
-    
+
     if (config->where && active) {
         psString whereClause = psDBGenerateWhereSQL(config->where, "detRun");
@@ -1401,6 +1401,11 @@
     PXOPT_LOOKUP_STR(exp_id, config->args, "-exp_id", true, false);
     PXOPT_LOOKUP_STR(class_id, config->args, "-class_id", true, false);
-    PXOPT_LOOKUP_STR(uri, config->args, "-uri", true, false);
-    PXOPT_LOOKUP_STR(recipe, config->args, "-recip", true, false);
+
+    // default values
+    PXOPT_LOOKUP_S16(code, config->args, "-code", false, false);
+
+    // Required if code == 0
+    PXOPT_LOOKUP_STR(uri, config->args, "-uri", (code == 0), false);
+    PXOPT_LOOKUP_STR(recipe, config->args, "-recip", (code == 0), false);
 
     // optional
@@ -1418,6 +1423,4 @@
     PXOPT_LOOKUP_STR(path_base, config->args, "-path_base", false, false);
 
-    // default values
-    PXOPT_LOOKUP_S16(code, config->args, "-code", false, false);
 
     // find the matching rawImfile by exp_id/class_id
@@ -1544,5 +1547,10 @@
     PXOPT_LOOKUP_STR(det_id, config->args, "-det_id", true, false);
     PXOPT_LOOKUP_STR(exp_id, config->args, "-exp_id", true, false);
-    PXOPT_LOOKUP_STR(recipe, config->args, "-recip", true, false);
+
+    // default values
+    PXOPT_LOOKUP_S16(code, config->args, "-code", false, false);
+
+    // Required if code == 0
+    PXOPT_LOOKUP_STR(recipe, config->args, "-recip", (code == 0), false);
 
     // optional
@@ -1560,6 +1568,4 @@
     PXOPT_LOOKUP_STR(path_base, config->args, "-path_base", true, false);
 
-    // default values
-    PXOPT_LOOKUP_S16(code, config->args, "-code", false, false);
 
     psString query = psStringCopy(
@@ -1951,6 +1957,10 @@
     PXOPT_LOOKUP_STR(det_id, config->args, "-det_id", true, false);
     PXOPT_LOOKUP_STR(class_id, config->args, "-class_id", true, false);
-    PXOPT_LOOKUP_STR(uri, config->args, "-uri", true, false);
-    PXOPT_LOOKUP_STR(recipe, config->args, "-recip", true, false);
+
+    PXOPT_LOOKUP_S16(code, config->args, "-code", false, false);
+
+    // Required if code == 0
+    PXOPT_LOOKUP_STR(uri, config->args, "-uri", (code == 0), false);
+    PXOPT_LOOKUP_STR(recipe, config->args, "-recip", (code == 0), false);
 
     // optional
@@ -1966,5 +1976,4 @@
     // default values
     PXOPT_LOOKUP_S32(iteration, config->args, "-iteration", false, false);
-    PXOPT_LOOKUP_S16(code, config->args, "-code", false, false);
 
     // correlate the class_id against the input exposure(s)
@@ -2515,5 +2524,9 @@
     PXOPT_LOOKUP_STR(det_id, config->args, "-det_id", true, false);
     PXOPT_LOOKUP_STR(class_id, config->args, "-class_id", true, false);
-    PXOPT_LOOKUP_STR(uri, config->args, "-uri", true, false);
+
+    PXOPT_LOOKUP_S16(code, config->args, "-code", false, false);
+
+    // Required if code == 0
+    PXOPT_LOOKUP_STR(uri, config->args, "-uri", (code == 0), false);
 
     // optional
@@ -2530,5 +2543,4 @@
     // default values
     PXOPT_LOOKUP_S32(iteration, config->args, "-iteration", false, false);
-    PXOPT_LOOKUP_S16(code, config->args, "-code", false, false);
 
     if (!detNormalizedImfileInsert(config->dbh,
@@ -2730,5 +2742,9 @@
     // required
     PXOPT_LOOKUP_STR(det_id, config->args, "-det_id", true, false);
-    PXOPT_LOOKUP_STR(recipe, config->args, "-recip", true, false);
+
+    PXOPT_LOOKUP_S16(code, config->args, "-code", false, false);
+
+    // Required if code == 0
+    PXOPT_LOOKUP_STR(recipe, config->args, "-recip", (code == 0), false);
 
     // optional
@@ -2745,5 +2761,4 @@
     // default values
     PXOPT_LOOKUP_S32(iteration, config->args, "-iteration", false, false);
-    PXOPT_LOOKUP_S16(code, config->args, "-code", false, false);
 
     psString query = pxDataGet("dettool_tonormalizedexp.sql");
@@ -2973,6 +2988,10 @@
     PXOPT_LOOKUP_STR(class_id, config->args, "-class_id", true, false);
     PXOPT_LOOKUP_STR(exp_id, config->args, "-exp_id", true, false);
-    PXOPT_LOOKUP_STR(uri, config->args, "-uri", true, false);
-    PXOPT_LOOKUP_STR(recipe, config->args, "-recip", true, false);
+
+    PXOPT_LOOKUP_S16(code, config->args, "-code", false, false);
+
+    // Required if code == 0
+    PXOPT_LOOKUP_STR(uri, config->args, "-uri", (code == 0), false);
+    PXOPT_LOOKUP_STR(recipe, config->args, "-recip", (code == 0), false);
 
     // optional
@@ -3000,5 +3019,4 @@
     // default values
     PXOPT_LOOKUP_S32(iteration, config->args, "-iteration", false, false);
-    PXOPT_LOOKUP_S16(code, config->args, "-code", false, false);
 
     if (!detResidImfileInsert(config->dbh,
@@ -3231,5 +3249,9 @@
     PXOPT_LOOKUP_STR(det_id, config->args, "-det_id", true, false);
     PXOPT_LOOKUP_STR(exp_id, config->args, "-exp_id", true, false);
-    PXOPT_LOOKUP_STR(recipe, config->args, "-recip", true, false);
+
+    PXOPT_LOOKUP_S16(code, config->args, "-code", false, false);
+
+    // Required if code == 0
+    PXOPT_LOOKUP_STR(recipe, config->args, "-recip", (code == 0), false);
 
     // optional
@@ -3257,5 +3279,4 @@
     // default values
     PXOPT_LOOKUP_S32(iteration, config->args, "-iteration", false, false);
-    PXOPT_LOOKUP_S16(code, config->args, "-code", false, false);
     PXOPT_LOOKUP_BOOL(reject, config->args, "-reject", false);
 
