Index: /trunk/PS-IPP-PStamp/lib/PS/IPP/PStamp/RequestFile.pm
===================================================================
--- /trunk/PS-IPP-PStamp/lib/PS/IPP/PStamp/RequestFile.pm	(revision 25074)
+++ /trunk/PS-IPP-PStamp/lib/PS/IPP/PStamp/RequestFile.pm	(revision 25075)
@@ -22,4 +22,16 @@
                     $PSTAMP_SELECT_MASK
                     $PSTAMP_SELECT_WEIGHT
+                    $PSTAMP_SUCCESS
+                    $PSTAMP_SYSTEM_ERROR
+                    $PSTAMP_NOT_IMPLEMENTED
+                    $PSTAMP_UNKNOWN_ERROR
+                    $PSTAMP_DUP_REQUEST
+                    $PSTAMP_INVALID_REQUEST
+                    $PSTAMP_UNKNOWN_PRODUCT
+                    $PSTAMP_NO_IMAGE_MATCH
+                    $PSTAMP_NOT_DESTREAKED
+                    $PSTAMP_NOT_AVAILABLE
+                    $PSTAMP_GONE
+                    $PSTAMP_NO_JOBS_QUEUED
                     );
 our %EXPORT_TAGS = (standard => [@EXPORT_OK]);
@@ -33,4 +45,19 @@
 our $PSTAMP_SELECT_MASK      = 2;
 our $PSTAMP_SELECT_WEIGHT    = 4;
+
+# job and request ERROR_CODE(s)
+our $PSTAMP_SUCCESS          = 0;
+our $PSTAMP_SYSTEM_ERROR     = 10;
+our $PSTAMP_NOT_IMPLEMENTED  = 11;
+our $PSTAMP_UNKNOWN_ERROR   = 12;
+
+our $PSTAMP_DUP_REQUEST      = 20;
+our $PSTAMP_INVALID_REQUEST  = 21;
+our $PSTAMP_UNKNOWN_PRODUCT  = 22;
+our $PSTAMP_NO_IMAGE_MATCH   = 23;
+our $PSTAMP_NOT_DESTREAKED   = 24;
+our $PSTAMP_NOT_AVAILABLE    = 25;
+our $PSTAMP_GONE             = 26;
+our $PSTAMP_NO_JOBS_QUEUED   = 27;
 
 use IPC::Cmd 0.36 qw( can_run run );
Index: /trunk/ippTools/src/pstamptool.c
===================================================================
--- /trunk/ippTools/src/pstamptool.c	(revision 25074)
+++ /trunk/ippTools/src/pstamptool.c	(revision 25075)
@@ -315,7 +315,13 @@
     PS_ASSERT_PTR_NON_NULL(config, false);
 
-    PXOPT_LOOKUP_S64(req_id,  config->args, "-req_id", true, false);
+    PXOPT_LOOKUP_S64(req_id,  config->args, "-req_id", false, false);
+    PXOPT_LOOKUP_STR(name,  config->args, "-name", false, false);
     PXOPT_LOOKUP_U64(limit,   config->args, "-limit",  false, false);
     PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
+
+    if (!req_id && !name) {
+        psError(PS_ERR_UNKNOWN, true, "-req_id or -name must be supplied");
+        return false;
+    }
 
     psString query = NULL;
@@ -342,7 +348,10 @@
     }
     if (!psArrayLength(output)) {
-        psTrace("pstamptool", PS_LOG_INFO, "no rows found");
-        psFree(output);
-        return true;
+        psTrace("pstamptool", PS_LOG_INFO, "request not found");
+        // This causes main to exit with PS_EXIT_DATA_ERROR which the script is looking for
+        psError(PXTOOLS_ERR_DATA, true, "request not found");
+        psFree(output);
+        // we return false so that the caller can determine that a request does not exist
+        return false;
     }
 
Index: /trunk/ippTools/src/pstamptoolConfig.c
===================================================================
--- /trunk/ippTools/src/pstamptoolConfig.c	(revision 25074)
+++ /trunk/ippTools/src/pstamptoolConfig.c	(revision 25075)
@@ -75,5 +75,6 @@
     // -listreq
     psMetadata *listreqArgs = psMetadataAlloc();
-    psMetadataAddS64(listreqArgs, PS_LIST_TAIL, "-req_id", 0,            "define req_id (required)", 0); 
+    psMetadataAddS64(listreqArgs, PS_LIST_TAIL, "-req_id", 0,            "list by req_id", 0); 
+    psMetadataAddStr(listreqArgs, PS_LIST_TAIL, "-name", 0,              "list by name", NULL); 
     psMetadataAddU64(listreqArgs, PS_LIST_TAIL, "-limit",  0,            "limit result set to N items", 0);
     psMetadataAddBool(listreqArgs, PS_LIST_TAIL, "-simple", 0,            "use the simple output format", false);
Index: /trunk/pstamp/scripts/pstampparse.pl
===================================================================
--- /trunk/pstamp/scripts/pstampparse.pl	(revision 25074)
+++ /trunk/pstamp/scripts/pstampparse.pl	(revision 25075)
@@ -96,4 +96,21 @@
 my_die("wrong EXTVER $extver found in $request_file_name", $PS_EXIT_PROG_ERROR) if ($extver ne "1");
 
+{
+    my $command = "$pstamptool -listreq  -name $req_name";
+    $command .= " -dbname $dbname" if $dbname;
+    $command .= " -dbserver $dbserver" if $dbserver;
+    my ( $success, $error_code, $full_buf, $stdout_buf, $stderr_buf ) =
+        run(command => $command, verbose => $verbose);
+    my $exitStatus = $error_code >> 8;
+    if ($success) {
+        # -listreq succeeded duplicate request name
+        insertFakeJobForRow(undef, 0, $PSTAMP_DUP_REQUEST);
+        exit 0;
+    } elsif ($exitStatus ne $PS_EXIT_DATA_ERROR) {
+        # wrong error code something else is wrong
+        my_die("$command failed", $exitStatus);
+    }
+}
+
 if ($req_id and !$no_update) {
     # update the database with the request name. This will be used as the
@@ -152,5 +169,5 @@
     if (!$proj_hash) {
         print STDERR "project $project not found\n"  if $verbose;
-        insertFakeJobForRow($row, 1, 46);
+        insertFakeJobForRow($row, 1, $PSTAMP_UNKNOWN_PRODUCT);
         $num_jobs++;
         next;
@@ -173,5 +190,5 @@
     if (!$skycenter and !$search_component) {
         print STDERR "COMPONENT must be specified for pixel coordinate ROI\n" if $verbose;
-        insertFakeJobForRow($row, 1, 45);
+        insertFakeJobForRow($row, 1, $PSTAMP_INVALID_REQUEST);
         $num_jobs++;
         next;
@@ -182,5 +199,5 @@
     if (($job_type eq "stamp") and ! validROI($row)) {
         print STDERR "invalid ROI for row $rownum\n" if $verbose;
-        insertFakeJobForRow($row, 1, 46);
+        insertFakeJobForRow($row, 1, $PSTAMP_INVALID_REQUEST);
         $num_jobs++;
         next;
@@ -221,10 +238,10 @@
         if (!$skycenter) {
             print STDERR "center must be specified in sky coordintes for bycoord" if $verbose;
-            insertFakeJobForRow($row, 1, 46);
+            insertFakeJobForRow($row, 1, $PSTAMP_INVALID_REQUEST);
             $num_jobs++;
             next;
         }
         print STDERR "lookup bycoord is not yet implemented" if $verbose;
-        insertFakeJobForRow($row, 1, 47);
+        insertFakeJobForRow($row, 1, $PSTAMP_NOT_IMPLEMENTED);
         $num_jobs++;
         next;
@@ -250,5 +267,5 @@
 if (($mode eq "queue_jobs") and ($num_jobs eq 0)) {
     print STDERR "no jobs created for $req_name\n" if $verbose;
-    insertFakeJobForRow(undef, 1, 41);
+    insertFakeJobForRow(undef, 0, $PSTAMP_UNKNOWN_ERROR);
 }
 
@@ -272,5 +289,5 @@
     if ( $numComponents == 0 ) {
         print STDERR "no jobs for row $rownum\n" if $verbose;
-        insertFakeJobForRow($row, 1, 44);
+        insertFakeJobForRow($row, 1, $PSTAMP_NO_JOBS_QUEUED);
         return 1;
     }
@@ -319,5 +336,5 @@
             # for now assume yes.
 
-            insertFakeJobForRow($row, $job_num, 43);
+            insertFakeJobForRow($row, $job_num, $PSTAMP_NOT_DESTREAKED);
 
             next;
@@ -417,5 +434,5 @@
         print STDERR "get_image jobs not implemented yet" if $verbose;
         foreach my $row (@$rowList) {
-            insertFakeJobForRow($row, 1, 47);
+            insertFakeJobForRow($row, 1, $PSTAMP_NOT_IMPLEMENTED);
             $num_jobs++;
         }
@@ -425,5 +442,5 @@
             # the status back to the requestor
             foreach my $row (@$rowList) {
-                insertFakeJobForRow($row, 1, 42);
+                insertFakeJobForRow($row, 1, $PSTAMP_NO_IMAGE_MATCH);
                 $num_jobs++;
             }
@@ -605,5 +622,6 @@
         # if first row has no component all of the images will be retrieved, so
         # the fact that this row has a component is ok. Fall through to return 1
-        # return 0;
+        # XXX Nope that doesn't work (yet)
+        return 0;
     }
 
Index: /trunk/pstamp/src/pstamp.h
===================================================================
--- /trunk/pstamp/src/pstamp.h	(revision 25074)
+++ /trunk/pstamp/src/pstamp.h	(revision 25075)
@@ -8,7 +8,4 @@
 #include "pslib.h"
 #include "psmodules.h"
-// #include "psphot.h"
-// #include "psastro.h"
-// #include "ppStats.h"
 #include "pstampErrorCodes.h"
 
@@ -31,4 +28,21 @@
 } pspMode;
 
+// error codes returned to users in results flie
+typedef enum {
+        PSTAMP_SUCCESS          = 0,
+	PSTAMP_SYSTEM_ERROR     = 10,
+	PSTAMP_NOT_IMPLEMENTED  = 11,
+	PSTAMP_UNKNOWN_ERROR    = 12,
+	PSTAMP_DUP_REQUEST      = 20,
+	PSTAMP_INVALID_REQUEST  = 21,
+	PSTAMP_UNKNOWN_PRODUCT  = 22,
+	PSTAMP_NO_IMAGE_MATCH   = 23,
+	PSTAMP_NOT_DESTREAKED   = 24,
+	PSTAMP_NOT_AVAILABLE    = 25,
+	PSTAMP_GONE             = 26,
+	PSTAMP_NO_JOBS_QUEUED   = 27
+} pstampJobErrors;
+
+
 #define PSTAMP_SELECT_IMAGE  1
 #define PSTAMP_SELECT_MASK   2
@@ -44,3 +58,5 @@
 #define STAMP_RESULTS_VERSION "1"
 
+
+
 #endif
