Index: trunk/ippTools/src/regtool.c
===================================================================
--- trunk/ippTools/src/regtool.c	(revision 10974)
+++ trunk/ippTools/src/regtool.c	(revision 10976)
@@ -31,4 +31,5 @@
 static bool updateexpMode(pxConfig *config);
 static bool updateimfileMode(pxConfig *config);
+static bool faultexpMode(pxConfig *config);
 static bool faultimfileMode(pxConfig *config);
 static bool rawimfileMode(pxConfig *config);
@@ -39,5 +40,6 @@
 static rawDetrendExpRow *newToRawDetrendExp(pxConfig *config, newExpRow *exp);
 static rawImfileRow *newToRawImfile(pxConfig *config, newImfileRow *exp);
-static psU32 mapCodeStrToInt(char *codeStr);
+static psU32 mapCodeStrToInt(const char *codeStr);
+static bool setFaultFlags(psDB *dbh, const char *tableName, psMetadata *where, const char *codeStr);
 
 
@@ -56,10 +58,11 @@
 
     switch (config->mode) {
-        MODECASE(P0TOOL_MODE_PENDINGEXP,      pendingexpMode);
-        MODECASE(P0TOOL_MODE_PENDINGIMFILE,   pendingimfileMode);
-        MODECASE(P0TOOL_MODE_UPDATEEXP,       updateexpMode);
-        MODECASE(P0TOOL_MODE_UPDATEIMFILE,    updateimfileMode);
-        MODECASE(P0TOOL_MODE_FAULTIMFILE,     faultimfileMode);
-        MODECASE(P0TOOL_MODE_RAWIMFILE,       rawimfileMode);
+        MODECASE(P0TOOL_MODE_PENDINGEXP,        pendingexpMode);
+        MODECASE(P0TOOL_MODE_PENDINGIMFILE,     pendingimfileMode);
+        MODECASE(P0TOOL_MODE_UPDATEEXP,         updateexpMode);
+        MODECASE(P0TOOL_MODE_FAULTEXP,          faultexpMode);
+        MODECASE(P0TOOL_MODE_UPDATEIMFILE,      updateimfileMode);
+        MODECASE(P0TOOL_MODE_FAULTIMFILE,       faultimfileMode);
+        MODECASE(P0TOOL_MODE_RAWIMFILE,         rawimfileMode);
         default:
             psAbort(argv[0], "invalid option (this should not happen)");
@@ -89,4 +92,10 @@
     if (!status) {
         psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -limit");
+        return false;
+    }
+
+    bool faulted = psMetadataLookupU64(&status, config->args, "-faulted");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -faulted");
         return false;
     }
@@ -117,4 +126,12 @@
     );
 
+    if (faulted) {
+        // list only faulted rows
+        psStringAppend(&query, " %s", "AND newExp.flags > 0");
+    } else {
+        // don't list faulted rows
+        psStringAppend(&query, " %s", "AND newExp.flags = 0");
+    }
+
     // treat limit == 0 as "no limit"
     if (limit) {
@@ -255,8 +272,6 @@
 }
 
-static bool faultimfileMode(pxConfig *config)
-{
-    PS_ASSERT_PTR_NON_NULL(config, false);
-
+static bool faultexpMode(pxConfig *config)
+{
     bool status = false;
     psString codeStr = psMetadataLookupStr(&status, config->args, "-code");
@@ -269,4 +284,41 @@
         return false;
     }
+
+    if (!setFaultFlags(config->dbh, "newExp", config->where, codeStr)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to set set fault flag");
+        return false;
+    }
+
+    return true;
+}
+
+static bool faultimfileMode(pxConfig *config)
+{
+    PS_ASSERT_PTR_NON_NULL(config, false);
+
+    bool status = false;
+    psString codeStr = psMetadataLookupStr(&status, config->args, "-code");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -code");
+        return false;
+    }
+    if (!codeStr) {
+        psError(PS_ERR_UNKNOWN, true, "-code is required");
+        return false;
+    }
+
+    if (!setFaultFlags(config->dbh, "newImfile", config->where, codeStr)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to set set fault flag");
+        return false;
+    }
+
+    return true;
+}
+
+static bool setFaultFlags(psDB *dbh, const char *tableName, psMetadata *where, const char *codeStr)
+{
+    PS_ASSERT_PTR_NON_NULL(dbh, false);
+    PS_ASSERT_PTR_NON_NULL(tableName, false);
+    PS_ASSERT_PTR_NON_NULL(codeStr, false);
 
     // map code string to numeric fault code
@@ -286,5 +338,5 @@
     psFree(values);
 
-    long rowsAffected = psDBUpdateRows(config->dbh, "newImfile", config->where, values); 
+    long rowsAffected = psDBUpdateRows(dbh, tableName, where, values); 
     if (rowsAffected < 0) {
         // database error
@@ -300,4 +352,5 @@
     return true;
 }
+
 
 static bool updateexpMode(pxConfig *config)
@@ -1088,5 +1141,5 @@
 }
 
-static psU32 mapCodeStrToInt(char *codeStr)
+static psU32 mapCodeStrToInt(const char *codeStr)
 {
     if (strcasestr(codeStr, "none")) {
