Index: trunk/ippTools/src/dettool.c
===================================================================
--- trunk/ippTools/src/dettool.c	(revision 8120)
+++ trunk/ippTools/src/dettool.c	(revision 8175)
@@ -9,4 +9,5 @@
 #include "dettool.h"
 
+static bool pendingMode(pxConfig *config);
 static bool defineMode(pxConfig *config);
 static bool runsMode(pxConfig *config);
@@ -52,4 +53,5 @@
 
     switch (config->mode) {
+        MODECASE(DETTOOL_MODE_PENDING, pendingMode);
         MODECASE(DETTOOL_MODE_DEFINE, defineMode);
         MODECASE(DETTOOL_MODE_RUNS, runsMode);
@@ -90,4 +92,33 @@
 
     exit(EXIT_FAILURE);
+}
+
+static bool pendingMode(pxConfig *config)
+{
+    PS_ASSERT_PTR_NON_NULL(config, NULL);
+
+     char *query = "SELECT rawDetrendExp.* FROM rawDetrendExp LEFT JOIN detInputExp ON rawDetrendExp.exp_id = detInputExp.exp_id WHERE detInputExp.exp_id IS NULL";
+
+    if (!p_psDBRunQuery(config->dbh, query)) {
+        psError(PS_ERR_UNKNOWN, false, "database error");
+        return false;
+    } 
+
+    psArray *result = p_psDBFetchResult(config->dbh);
+    if (!result) {
+        // XXX check psError here
+        psError(PS_ERR_UNKNOWN, false, "no pending rawDetrendExp rows found");
+        return false;
+    }
+
+    if (!ippdbPrintMetadatas(stdout, result, "rawDetrendExp", true)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to print array");
+        psFree(result);
+        return false;
+    }
+
+    psFree(result);
+
+    return true;
 }
 
@@ -1556,4 +1587,24 @@
         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;
+    }
+    // optional
+    psString b1_uri = psMetadataLookupStr(&status, config->args, "-b1_uri");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -b1_uri");
+        return false;
+    }
+    psString b2_uri = psMetadataLookupStr(&status, config->args, "-b2_uri");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -b2_uri");
+        return false;
+    }
 
     // iteration has a default value
@@ -1617,5 +1668,8 @@
                 exp_id,
                 class_id,
-                recipe
+                recipe,
+                uri,
+                b1_uri,
+                b2_uri
             );
 
