Index: /trunk/ippTools/share/Makefile.am
===================================================================
--- /trunk/ippTools/share/Makefile.am	(revision 30351)
+++ /trunk/ippTools/share/Makefile.am	(revision 30352)
@@ -333,4 +333,5 @@
 	regtool_updatebyqueryimfile.sql \
 	regtool_pendingburntoolimfile.sql \
+	regtool_checkstatus.sql \
 	stacktool_associationdefine_select.sql \
 	stacktool_definebyquery_insert.sql \
Index: /trunk/ippTools/share/regtool_checkstatus.sql
===================================================================
--- /trunk/ippTools/share/regtool_checkstatus.sql	(revision 30352)
+++ /trunk/ippTools/share/regtool_checkstatus.sql	(revision 30352)
@@ -0,0 +1,29 @@
+SELECT DISTINCT        
+        summitExp.exp_name,
+        rawImfile.uri,
+        summitExp.dateobs AS registered,
+        summitExp.imfiles,
+        summitExp.fault AS summit_fault,
+        pzDownloadExp.state AS download_state,
+        newExp.state AS newExp_state,
+        rawExp.state AS rawExp_state,
+        rawImfile.data_state AS imfile_state,
+        newExp.exp_id,
+        summitExp.exp_type,
+        rawExp.dateobs,
+        rawExp.obs_mode AS obs_mode,
+        rawExp.object AS object,
+        rawImfile.burntool_state AS burntool_state,
+        rawImfile.class_id,
+        summitImfile.class_id AS summit_class_id,
+        (pzDownloadExp.state = 'stop') AS is_downloaded,
+        (rawImfile.burntool_state IS NOT NULL) AS is_registered
+        FROM        summitExp
+        JOIN summitImfile USING(exp_name)
+        LEFT JOIN pzDownloadExp USING(exp_name)
+        LEFT JOIN newExp ON summitExp.exp_name = tmp_exp_name
+        LEFT JOIN newImfile ON (summitImfile.class_id = newImfile.tmp_class_id AND newExp.exp_id = newImfile.exp_id)
+        LEFT JOIN rawExp ON rawExp.exp_id = newExp.exp_id
+        LEFT JOIN rawImfile ON (rawImfile.exp_id = rawExp.exp_id AND rawImfile.tmp_class_id = newImfile.tmp_class_id)
+        WHERE
+	 summitImfile.class_id = '@CLASS_ID@'
Index: /trunk/ippTools/src/regtool.c
===================================================================
--- /trunk/ippTools/src/regtool.c	(revision 30351)
+++ /trunk/ippTools/src/regtool.c	(revision 30352)
@@ -50,4 +50,6 @@
 
 static bool updatebyqueryMode(pxConfig *config);
+
+static bool checkstatusMode(pxConfig *config);
 
 static bool exportrunMode(pxConfig *config);
@@ -90,4 +92,5 @@
         MODECASE(REGTOOL_MODE_FINISHCOMPRESSEXP,     finishcompressexpMode);
         MODECASE(REGTOOL_MODE_CLEARDUPEXP,           cleardupexpMode);
+	MODECASE(REGTOOL_MODE_CHECKSTATUS,           checkstatusMode);
         MODECASE(REGTOOL_MODE_EXPORTRUN,             exportrunMode);
         MODECASE(REGTOOL_MODE_IMPORTRUN,             importrunMode);
@@ -179,4 +182,7 @@
     return true;
 }
+
+  
+  
 
 static bool checkburntoolimfileMode(pxConfig *config)
@@ -1877,4 +1883,81 @@
 }
 
+static bool checkstatusMode(pxConfig *config)
+{
+  PS_ASSERT_PTR_NON_NULL(config,false);
+
+  // required
+  PXOPT_LOOKUP_STR(class_id, config->args, "-class_id", true, false);
+  // Conditionally required
+  PXOPT_LOOKUP_STR(dateobs_begin, config->args, "-dateobs_begin", false, false);
+  PXOPT_LOOKUP_STR(dateobs_end,   config->args, "-dateobs_end",   false, false);
+  PXOPT_LOOKUP_STR(date,          config->args, "-date",          false, false);
+  PXOPT_LOOKUP_BOOL(simple,       config->args, "-simple",        false);
+
+  psString query = pxDataGet("regtool_checkstatus.sql");
+  if (!query) {
+    psError(PXTOOLS_ERR_SYS, false, "failed to retrieve SQL statement");
+    return false;
+  }
+  psString rep = psStringCopy(query);
+  psFree(query);
+  query = rep;
+  psStringSubstitute(&class_id,"ota","XY");
+  psStringSubstitute(&query,class_id,"@CLASS_ID@");
+    
+  if (!date) {
+    if (!dateobs_begin || !dateobs_end) {
+      psError(PXTOOLS_ERR_CONFIG, false, "Either -date or -dateobs_begin -dateobs_end is required");
+      psFree(query);
+      return false;
+    }
+    psStringAppend(&query," AND summitExp.dateobs >= '%s' AND summitExp.dateobs <= '%s' ",
+		   dateobs_begin,dateobs_end);
+  }
+  else {
+    psStringAppend(&query," AND summitExp.dateobs >= '%sT00:00:00' AND summitExp.dateobs <= '%sT23:59:59' ",
+		   date,date);
+  }
+
+  psStringAppend(&query," ORDER BY summitExp.dateobs ");
+  
+  if (!p_psDBRunQuery(config->dbh, query)) {
+    // XXX PS_EXIT_PROG_ERROR (incorrect SQL) or SYS_ERROR (database comms)
+    psError(PXTOOLS_ERR_PROG, false, "database error");
+    psFree(query);
+    return false;
+  }
+  psFree(query);
+
+  psArray *output = p_psDBFetchResult(config->dbh);
+  if (!output) {
+    psErrorCode err = psErrorCodeLast();
+    switch (err) {
+    case PS_ERR_DB_CLIENT:
+      psError(PXTOOLS_ERR_SYS, false, "database error");
+    case PS_ERR_DB_SERVER:
+      psError(PXTOOLS_ERR_PROG, false, "database error");
+    default:
+      psError(PXTOOLS_ERR_PROG, false, "unknown error");
+    }
+
+    return false;
+  }
+  if (!psArrayLength(output)) {
+    psTrace("regtool", PS_LOG_INFO, "no rows found");
+    return true;
+  }
+
+  if (!ippdbPrintMetadatas(stdout, output, "regCheckStatus", !simple)) {
+    psError(PXTOOLS_ERR_PROG, false, "failed to print array");
+    psFree(output);
+    return false;
+  }
+
+  psFree(output);
+
+  return(true);
+}
+
 bool exportrunMode(pxConfig *config)
 {
Index: /trunk/ippTools/src/regtool.h
===================================================================
--- /trunk/ippTools/src/regtool.h	(revision 30351)
+++ /trunk/ippTools/src/regtool.h	(revision 30352)
@@ -41,4 +41,5 @@
     REGTOOL_MODE_PENDINGCOMPRESSIMFILE,
     REGTOOL_MODE_FINISHCOMPRESSEXP,
+    REGTOOL_MODE_CHECKSTATUS,
     REGTOOL_MODE_EXPORTRUN,
     REGTOOL_MODE_IMPORTRUN
Index: /trunk/ippTools/src/regtoolConfig.c
===================================================================
--- /trunk/ippTools/src/regtoolConfig.c	(revision 30351)
+++ /trunk/ippTools/src/regtoolConfig.c	(revision 30352)
@@ -72,5 +72,5 @@
     ADD_OPT(Bool, pendingburntoolimfileArgs, "-ignore_state",   "ignore the data_state when deciding what to work on",  false);
     ADD_OPT(U64,  pendingburntoolimfileArgs, "-limit",     "limit result set to N items",  0);
-    
+
     // -addprocessedimfile
     psMetadata *addprocessedimfileArgs = psMetadataAlloc();
@@ -419,4 +419,12 @@
     psMetadataAddBool(finishcompressexpArgs, PS_LIST_TAIL, "-simple", 0,   "use the simple output format", false);
     psMetadataAddU64(finishcompressexpArgs, PS_LIST_TAIL, "-limit",   0,   "limit result set to N items", 0);
+
+    // -checkstatus
+    psMetadata *checkstatusArgs = psMetadataAlloc();
+    ADD_OPT(Str, checkstatusArgs, "-dateobs_begin", "set the earlist summit dateobs to consider", NULL);
+    ADD_OPT(Str, checkstatusArgs, "-dateobs_end", "set the latest summit dateobs to consider", NULL);
+    ADD_OPT(Str, checkstatusArgs, "-date", "use default observing extent and look over entire night", NULL);
+    ADD_OPT(Str, checkstatusArgs, "-class_id",    "define class ID (required)", NULL);
+    ADD_OPT(Bool, checkstatusArgs, "-simple",    "use the simple output format", false);
     
     psMetadata *argSets = psMetadataAlloc();
@@ -439,4 +447,5 @@
     PXOPT_ADD_MODE("-pendingcompressimfile",   "", REGTOOL_MODE_PENDINGCOMPRESSIMFILE, pendingcompressimfileArgs);
     PXOPT_ADD_MODE("-finishcompressexp",       "", REGTOOL_MODE_FINISHCOMPRESSEXP, finishcompressexpArgs);
+    PXOPT_ADD_MODE("-checkstatus",             "", REGTOOL_MODE_CHECKSTATUS, checkstatusArgs);
     PXOPT_ADD_MODE("-exportrun",            "export run for import on other database", REGTOOL_MODE_EXPORTRUN, exportrunArgs);
     PXOPT_ADD_MODE("-importrun",            "import run from metadata file",           REGTOOL_MODE_IMPORTRUN, importrunArgs);
