Index: trunk/Ohana/src/opihi/pantasks/TaskOps.c
===================================================================
--- trunk/Ohana/src/opihi/pantasks/TaskOps.c	(revision 11055)
+++ trunk/Ohana/src/opihi/pantasks/TaskOps.c	(revision 11084)
@@ -1,3 +1,4 @@
 # include "pantasks.h"
+# include <regex.h>
 
 static Task **tasks;
@@ -75,8 +76,8 @@
   gprint (GP_LOG, " Task Status\n");
 
-  snprintf (format, 128, "  AV %%-%ds %5s %%-%ds\n", nameLength, "Njobs", cmdLength);
+  snprintf (format, 128, "  AV %%-%ds %5s  %5s %5s %5s %%-%ds\n", nameLength, "Njobs", "Ngood", "Nfail", "Ntime", cmdLength);
   gprint (GP_LOG, format, "Name", "Command");
 
-  snprintf (format, 128, "%%-%ds %%5d %%-%ds\n", nameLength, cmdLength);
+  snprintf (format, 128, "%%-%ds %%5d  %%5d %%5d %%5d %%-%ds\n", nameLength, cmdLength);
   for (i = 0; i < Ntasks; i++) {
     valid = CheckTimeRanges (tasks[i][0].ranges, tasks[i][0].Nranges);
@@ -93,7 +94,7 @@
     }
     if (tasks[i][0].argv == NULL) {
-      gprint (GP_LOG, format, tasks[i][0].name, tasks[i][0].Njobs, "(dynamic)");
-    } else {
-      gprint (GP_LOG, format, tasks[i][0].name, tasks[i][0].Njobs, tasks[i][0].argv[0]);
+      gprint (GP_LOG, format, tasks[i][0].name, tasks[i][0].Njobs, tasks[i][0].Nsuccess, tasks[i][0].Nfailure, tasks[i][0].Ntimeout, "(dynamic)");
+    } else {
+      gprint (GP_LOG, format, tasks[i][0].name, tasks[i][0].Njobs, tasks[i][0].Nsuccess, tasks[i][0].Nfailure, tasks[i][0].Ntimeout, tasks[i][0].argv[0]);
     }
     if (verbose) {
@@ -146,9 +147,10 @@
 
 /* list known tasks */
-void ListTaskStats () {
+void ListTaskStats (char *regex) {
 
   int i, j, valid, nameLength;
   char *start, *stop;
   char format[128];
+  regex_t preg;
 
   gprint (GP_LOG, "\n");
@@ -158,4 +160,8 @@
   }
 
+  if (regex != NULL) {
+    regcomp (&preg, regex, REG_EXTENDED);
+  }
+
   /* find string lengths */
   nameLength = 0;
@@ -173,4 +179,7 @@
   snprintf (format, 128, "%%-%ds", nameLength);
   for (i = 0; i < Ntasks; i++) {
+      
+    if ((regex != NULL) && regexec (&preg, tasks[i][0].name, 0, NULL, 0)) continue;
+
     valid = CheckTimeRanges (tasks[i][0].ranges, tasks[i][0].Nranges);
     if (tasks[i][0].active) {
