Index: trunk/ippTools/src/regtool.c
===================================================================
--- trunk/ippTools/src/regtool.c	(revision 30314)
+++ 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 30314)
+++ 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 30314)
+++ 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);
