Index: trunk/Ohana/src/opihi/pantasks/TaskOps.c
===================================================================
--- trunk/Ohana/src/opihi/pantasks/TaskOps.c	(revision 4697)
+++ trunk/Ohana/src/opihi/pantasks/TaskOps.c	(revision 4705)
@@ -54,35 +54,41 @@
   int i, valid;
 
+  fprintf (stderr, "\n");
   if (Ntasks == 0) {
-    fprintf (stderr, "no defined tasks\n");
+    fprintf (stderr, " no defined tasks\n");
     return;
   }
 
-  fprintf (stderr, "Task Status\n");
-  fprintf (stderr, "  name            Njobs  command\n");
+  fprintf (stderr, " Task Status\n");
+  fprintf (stderr, "  * Name            Njobs  Command\n");
   for (i = 0; i < Ntasks; i++) {
     valid = CheckTimeRanges (tasks[i][0].ranges, tasks[i][0].Nranges);
+    if (verbose) fprintf (stderr, "\n");
     if (valid) {
-      fprintf (stderr, "+ ");
+      fprintf (stderr, "  + ");
     } else {
-      fprintf (stderr, "- ");
+      fprintf (stderr, "  - ");
     }
     if (tasks[i][0].argv == NULL) {
-      fprintf (stderr, "%-15s %4d   %-20s\n", tasks[i][0].name, tasks[i][0].Njobs, "dynamic");
+      fprintf (stderr, "%-15s %5d  %-20s\n", tasks[i][0].name, tasks[i][0].Njobs, "(dynamic)");
     } else {
-      fprintf (stderr, "%-15s %4d   %-20s\n", tasks[i][0].name, tasks[i][0].Njobs, tasks[i][0].argv[0]);
+      fprintf (stderr, "%-15s %5d  %-20s\n", tasks[i][0].name, tasks[i][0].Njobs, tasks[i][0].argv[0]);
     }
     if (verbose) {
       fprintf (stderr, "    spawn period: %f, polling period: %f, timeout period: %f\n", 
-	       tasks[i][0].poll_period, tasks[i][0].poll_period, tasks[i][0].poll_period);
-      if (tasks[i][0].host != NULL) {
-	if (tasks[i][0].host_required) {
-	  fprintf (stderr, "    host %s (required)\n", tasks[i][0].host);
-	} else {
-	  fprintf (stderr, "    host %s (desired)\n", tasks[i][0].host);
-	}
+	       tasks[i][0].exec_period, tasks[i][0].poll_period, tasks[i][0].timeout_period);
+      if (tasks[i][0].host == NULL) {
+	fprintf (stderr, "    task runs locally\n");
+	continue;
+      }
+      if (!strcasecmp(tasks[i][0].host, "ANYHOST")) {
+	fprintf (stderr, "    task host selected by controller\n");
+	continue;
+      }
+      if (tasks[i][0].host_required) {
+	fprintf (stderr, "    host %s (required)\n", tasks[i][0].host);
       } else {
-	fprintf (stderr, "    task runs locally\n");
-      }      
+	fprintf (stderr, "    host %s (desired)\n", tasks[i][0].host);
+      }
     }
   }
@@ -102,29 +108,44 @@
   }
 
-  fprintf (stderr, "macro %s\n", task[0].name);
-
-  fprintf (stderr, "command: ");
+  fprintf (stderr, "\n macro %s\n", task[0].name);
+
+  fprintf (stderr, "\n command: ");
   for (i = 0; i < task[0].argc; i++) {
     fprintf (stderr, "%s ", task[0].argv[i]);
   }
-
-  fprintf (stderr, "host: %s\n", task[0].host);
-  fprintf (stderr, "time periods: exec: %f  poll: %f  timeout: %f\n", 
+  fprintf (stderr, "\n\n");
+
+  if (task[0].host == NULL) {
+    fprintf (stderr, " task runs locally\n");
+    goto periods;
+  }
+  if (!strcasecmp(task[0].host, "ANYHOST")) {
+    fprintf (stderr, " task host selected by controller\n");
+    goto periods;
+  }
+  if (task[0].host_required) {
+    fprintf (stderr, " host %s (required)\n", task[0].host);
+  } else {
+    fprintf (stderr, " host %s (desired)\n", task[0].host);
+  }
+
+periods:
+  fprintf (stderr, " time periods: exec: %f  poll: %f  timeout: %f\n", 
 	   task[0].exec_period, task[0].poll_period, task[0].timeout_period);
 
-  fprintf (stderr, "pre-execute macro\n");
+  fprintf (stderr, "\n pre-execute macro\n");
   ListMacro (task[0].exec);
 
-  fprintf (stderr, "timeout macro\n");
+  fprintf (stderr, "\n timeout macro\n");
   ListMacro (task[0].timeout);
 
-  fprintf (stderr, "crash macro\n");
+  fprintf (stderr, "\n crash macro\n");
   ListMacro (task[0].crash);
 
-  fprintf (stderr, "default exit macro\n");
-  ListMacro (task[0].def);
+  fprintf (stderr, "\n default exit macro\n");
+  ListMacro (task[0].defexit);
 
   for (i = 0; i < task[0].Nexit; i++) {
-    fprintf (stderr, "exit macro (status == %d)\n", atoi(task[0].exit[i][0].name));
+    fprintf (stderr, "\n exit macro (status == %d)\n", atoi(task[0].exit[i][0].name));
     ListMacro (task[0].exit[i]);
   }
@@ -192,4 +213,5 @@
   NewTask[0].crash = NULL;
   NewTask[0].timeout = NULL;
+  NewTask[0].defexit = NULL;
 
   NewTask[0].Nexit = 0;
@@ -211,4 +233,28 @@
 
   return (NewTask);
+}
+
+/* remove the task from the task list */
+int RemoveTask (Task *task) {
+  
+  int i, Nt;
+
+  /* find task in task list */
+  Nt = -1;
+  for (i = 0; i < Ntasks; i++) {
+    if (task == tasks[i]) {
+      Nt = i;
+      break;
+    }
+  }
+  if (Nt == -1) {
+    fprintf (stderr, "programming error: task not found\n");
+    return (FALSE);
+  }
+  for (i = Nt; i < Ntasks - 1; i++) {
+    tasks[i] = tasks[i+1];
+  }
+  Ntasks --;
+  return (TRUE);
 }
 
@@ -263,4 +309,9 @@
   }
   return (TRUE);
+}
+
+Task *SetNewTask (Task *task) {
+  NewTask = task;
+  return (task);
 }
 
