Index: trunk/Ohana/src/opihi/pantasks/TaskOps.c
===================================================================
--- trunk/Ohana/src/opihi/pantasks/TaskOps.c	(revision 16452)
+++ trunk/Ohana/src/opihi/pantasks/TaskOps.c	(revision 26946)
@@ -58,8 +58,10 @@
 }  
 
+# define getnchars(LEN, MINLEN) { float loglength; loglength = log10(LEN); LEN = ((int)loglength < loglength) ? loglength + 1 : loglength; LEN = (LEN < MINLEN) ? MINLEN : LEN; }
+
 /* list known tasks */
 void ListTasks (int verbose) {
 
-  int i, j, valid, nameLength, cmdLength;
+  int i, j, valid, nameLength, cmdLength, maxJobs, maxRun, maxDone, maxFail, maxTime, Nrun;
   char *start, *stop;
   char format[128];
@@ -73,4 +75,5 @@
   /* find string lengths */
   nameLength = cmdLength = 0;
+  maxJobs = maxRun = maxDone = maxFail = maxTime = 0;
   for (i = 0; i < Ntasks; i++) {
     nameLength = MAX (nameLength, strlen(tasks[i][0].name));
@@ -80,12 +83,23 @@
       cmdLength = MAX (nameLength, strlen(tasks[i][0].argv[0]));
     }
+    maxJobs = MAX(maxJobs, tasks[i][0].Njobs);
+    maxDone = MAX(maxDone, tasks[i][0].Nsuccess);
+    maxFail = MAX(maxFail, tasks[i][0].Nfailure);
+    maxTime = MAX(maxTime, tasks[i][0].Ntimeout);
+    maxRun  = MAX(maxRun,  tasks[i][0].Njobs - tasks[i][0].Nsuccess - tasks[i][0].Nfailure - tasks[i][0].Ntimeout);
   }
 
   gprint (GP_LOG, " Task Status\n");
 
-  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  %%5d %%5d %%5d %%-%ds\n", nameLength, cmdLength);
+  getnchars(maxJobs, 5);
+  getnchars(maxRun,  5);
+  getnchars(maxDone, 5);
+  getnchars(maxFail, 5);
+  getnchars(maxTime, 5);
+
+  snprintf (format, 128, "  AV %%-%ds  %%%ds  %%%ds  %%%ds %%%ds %%%ds %%-%ds\n", nameLength, maxRun, maxJobs, maxDone, maxFail, maxTime, cmdLength);
+  gprint (GP_LOG, format, "Name", "Nrun", "Njobs", "Ngood", "Nfail", "Ntime", "Command");
+
+  snprintf (format, 128, "%%-%ds  %%%dd  %%%dd  %%%dd %%%dd %%%dd %%-%ds\n", nameLength, maxRun, maxJobs, maxDone, maxFail, maxTime, cmdLength);
   for (i = 0; i < Ntasks; i++) {
     valid = CheckTimeRanges (tasks[i][0].ranges, tasks[i][0].Nranges);
@@ -101,8 +115,9 @@
       gprint (GP_LOG, "- ");
     }
+    Nrun = tasks[i][0].Njobs - tasks[i][0].Nsuccess - tasks[i][0].Nfailure - tasks[i][0].Ntimeout;
     if (tasks[i][0].argv == NULL) {
-      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]);
+      gprint (GP_LOG, format, tasks[i][0].name, Nrun, 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, Nrun, tasks[i][0].Njobs, tasks[i][0].Nsuccess, tasks[i][0].Nfailure, tasks[i][0].Ntimeout, tasks[i][0].argv[0]);
     }
     if (verbose) {
