Index: trunk/Ohana/src/opihi/pcontrol/HostOps.c
===================================================================
--- trunk/Ohana/src/opihi/pcontrol/HostOps.c	(revision 3212)
+++ trunk/Ohana/src/opihi/pcontrol/HostOps.c	(revision 4450)
@@ -33,4 +33,26 @@
   fprintf (stderr, "error: unknown host stack : programming error\n");
   exit (1);
+}
+
+Host *FindHostStack (IDtype HostID) {
+
+  Host *host;
+
+  host = FindHostPtr (HostID, PCONTROL_HOST_IDLE);
+  if (host != NULL) return (host);
+
+  host = FindHostPtr (HostID, PCONTROL_HOST_DOWN);
+  if (host != NULL) return (host);
+
+  host = FindHostPtr (HostID, PCONTROL_HOST_DONE);
+  if (host != NULL) return (host);
+
+  host = FindHostPtr (HostID, PCONTROL_HOST_BUSY);
+  if (host != NULL) return (host);
+
+  host = FindHostPtr (HostID, PCONTROL_HOST_OFF);
+  if (host != NULL) return (host);
+
+  return (NULL);
 }
 
@@ -79,4 +101,38 @@
 }
 
+Host *FindHostPtr (IDtype HostID, int StackID) {
+
+  int i;
+  Host *host;
+  Stack *stack;
+
+  stack = GetHostStack (StackID);
+  if (stack == NULL) return (NULL);
+
+  for (i = 0; i < stack[0].Nobject; i++) {
+    host = (Host *) stack[0].object[i];
+    if (host[0].HostID == HostID) {
+      return (host);
+    }
+  }
+  return (NULL);
+}
+
+Host *PullHost (IDtype HostID, int StackID) {
+  
+  int N;
+  Host *host;
+
+  N = FindHost (HostID, StackID);
+  if (N < 0) return (NULL);
+
+  host = GetHost (StackID, N);
+  if (host == NULL) {
+    fprintf (stderr, "programming error! host missing from stack\n");
+    exit (1);
+  }
+  return (host);
+}
+
 int FindNamedHost (char *name, int StackID) {
 
@@ -119,3 +175,2 @@
   FREE (host);
 }
-
