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