Index: trunk/Ohana/src/opihi/pcontrol/host.c
===================================================================
--- trunk/Ohana/src/opihi/pcontrol/host.c	(revision 3204)
+++ trunk/Ohana/src/opihi/pcontrol/host.c	(revision 3212)
@@ -3,5 +3,5 @@
 int host (int argc, char **argv) {
 
-  int N, Delete, Off, On;
+  int N, Delete, Off, On, Start, Stop, Check;
   Host *host;
 
@@ -26,5 +26,5 @@
   /* this section needs some help: find the specified host in the stacks */
   On = FALSE;
-  if ((N = get_argument (argc, argv, "-off"))) {
+  if ((N = get_argument (argc, argv, "-on"))) {
     if (Delete || Off) {
       fprintf (stderr, "only one of -delete, -off, -on\n");
@@ -35,5 +35,26 @@
   }
  
-  if (argc < 2) {
+  /* this section needs some help: find the specified host in the stacks */
+  Start = FALSE;
+  if ((N = get_argument (argc, argv, "-start"))) {
+    remove_argument (N, &argc, argv);
+    Start = TRUE;
+  }
+ 
+  /* this section needs some help: find the specified host in the stacks */
+  Check = FALSE;
+  if ((N = get_argument (argc, argv, "-check"))) {
+    remove_argument (N, &argc, argv);
+    Check = TRUE;
+  }
+ 
+  /* this section needs some help: find the specified host in the stacks */
+  Stop = FALSE;
+  if ((N = get_argument (argc, argv, "-stop"))) {
+    remove_argument (N, &argc, argv);
+    Stop = TRUE;
+  }
+ 
+  if (argc != 2) {
     fprintf (stderr, "USAGE: host (hostname) [-delete]\n");
     return (FALSE);
@@ -62,12 +83,49 @@
   }
 
+  if (Check) {
+    N = FindNamedHost (argv[1], PCONTROL_HOST_IDLE);
+    if (N >= 0) {
+      host = GetHost (PCONTROL_HOST_IDLE, N);
+      CheckHost (host);
+      return (TRUE);
+    }
+    N = FindNamedHost (argv[1], PCONTROL_HOST_BUSY);
+    if (N >= 0) {
+      host = GetHost (PCONTROL_HOST_BUSY, N);
+      CheckHost (host);
+      return (TRUE);
+    }
+    fprintf (stderr, "host %s is not BUSY or IDLE\n", argv[1]);
+    return (FALSE);
+  }
+
+  if (Start) {
+    N = FindNamedHost (argv[1], PCONTROL_HOST_DOWN);
+    if (N < 0) {
+      fprintf (stderr, "host %s is not DOWN\n", argv[1]);
+      return (FALSE);
+    }
+    host = GetHost (PCONTROL_HOST_DOWN, N);
+    StartHost (host);
+    return (TRUE);
+  }
+  if (Stop) {
+    N = FindNamedHost (argv[1], PCONTROL_HOST_IDLE);
+    if (N < 0) {
+      fprintf (stderr, "host %s is not IDLE\n", argv[1]);
+      return (FALSE);
+    }
+    host = GetHost (PCONTROL_HOST_IDLE, N);
+    StopHost (host);
+    DownHost (host);
+    return (TRUE);
+  }
+
   if (Off) {
     N = FindNamedHost (argv[1], PCONTROL_HOST_IDLE);
     if (N >= 0) {
       host = GetHost (PCONTROL_HOST_IDLE, N);
-      CLOSE (host[0].stdin);
-      CLOSE (host[0].stdout);
-      CLOSE (host[0].stderr);
-      PutHost (host, PCONTROL_HOST_OFF, STACK_BOTTOM);
+      StopHost (host);
+      OffHost (host);
       return (TRUE);
     }
@@ -75,5 +133,5 @@
     if (N >= 0) {
       host = GetHost (PCONTROL_HOST_DOWN, N);
-      PutHost (host, PCONTROL_HOST_OFF, STACK_BOTTOM);
+      OffHost (host);
       return (TRUE);
     }
