Index: trunk/Ohana/src/opihi/pantasks/ControllerOps.c
===================================================================
--- trunk/Ohana/src/opihi/pantasks/ControllerOps.c	(revision 4552)
+++ trunk/Ohana/src/opihi/pantasks/ControllerOps.c	(revision 4573)
@@ -5,4 +5,6 @@
 static int status = FALSE;
 static int stdin_cntl, stdout_cntl, stderr_cntl;
+static IOBuffer stdout_buffer;
+static IOBuffer stderr_buffer;
 
 int CheckControllerStatus () {
@@ -108,5 +110,5 @@
   line = NULL;
   status = -1;
-  for (i = 0; (i < CONTROLLER_TIMEOUT) && (status == -1) && (line == NULL); i++) {
+  for (i = 0; (i < CONTROLLER_TIMEOUT) && (status != 0) && (line == NULL); i++) {
     status = ReadtoIOBuffer (buffer, stdout_cntl);
     if ((buffer[0].Nbuffer - Nstart) >= Nbytes) {
@@ -261,5 +263,5 @@
   p = NULL;
   status = -1;
-  for (i = 0; (i < CONNECT_TIMEOUT) && (status == -1) && (p == NULL); i++) {
+  for (i = 0; (i < CONNECT_TIMEOUT) && (status != 0) && (p == NULL); i++) {
     status = ReadtoIOBuffer (&buffer, stdout_fd[0]);
     p = memstr (buffer.buffer, "CONNECTED", buffer.Nbuffer);
@@ -274,4 +276,7 @@
   stdout_cntl = stdout_fd[0];
   stderr_cntl = stderr_fd[0];
+
+  InitIOBuffer (&stdout_buffer, 0x100);
+  InitIOBuffer (&stderr_buffer, 0x100);
 
   fprintf (stderr, "Connected\n");
@@ -319,5 +324,5 @@
   line = NULL;
   status = -1;
-  for (i = 0; (i < CONTROLLER_TIMEOUT) && (status == -1) && (line == NULL); i++) {
+  for (i = 0; (i < CONTROLLER_TIMEOUT) && (status != 0) && (line == NULL); i++) {
     status = ReadtoIOBuffer (buffer, stdout_cntl);
     line = memstr (buffer[0].buffer, response, buffer[0].Nbuffer);
@@ -330,3 +335,50 @@
 }
 
+int CheckControllerOutput () {
+
+  int Nread;
+
+  /* read stdout buffer */
+  Nread = ReadtoIOBuffer (&stdout_buffer, stdout_cntl);
+  switch (Nread) {
+    case -2:  /* error in read (programming error?  system level error?) */
+      fprintf (stderr, "serious IO error\n");
+      exit (2);
+    case -1:  /* no data in pipe */
+      break;
+    case 0:   /* pipe is closed */
+      /** change child state? **/
+      break;
+    default:  /* data in pipe */
+      break;
+  }
+  
+  /* read stderr buffer */
+  Nread = ReadtoIOBuffer (&stderr_buffer, stderr_cntl);
+  switch (Nread) {
+    case -2:  /* error in read (programming error?  system level error?) */
+      fprintf (stderr, "serious IO error\n");
+      exit (2);
+    case -1:  /* no data in pipe */
+      break;
+    case 0:   /* pipe is closed */
+      /** change child state? **/
+      break;
+    default:  /* data in pipe */
+      break;
+  }
+  return (TRUE);
+}
+
+int PrintControllerOutput () {
+
+  fprintf (stderr, "--- stdout ---\n");
+  fwrite (stdout_buffer.buffer, 1, stdout_buffer.Nbuffer, stderr);
+  fprintf (stderr, "--- stdout ---\n");
+  fwrite (stderr_buffer.buffer, 1, stderr_buffer.Nbuffer, stderr);
+  fprintf (stderr, "---  done  ---\n");
+  return (TRUE);
+}
+
+
 /* memstr returns a view, not an allocated string : don't free */
