Index: trunk/Ohana/src/opihi/pcontrol/stdout.c
===================================================================
--- trunk/Ohana/src/opihi/pcontrol/stdout.c	(revision 12840)
+++ trunk/Ohana/src/opihi/pcontrol/stdout.c	(revision 18116)
@@ -1,12 +1,21 @@
 # include "pcontrol.h"
 
+// XXX unify by testing for value of argv[0]
 int stdout_pc (int argc, char **argv) {
 
-  int JobID, StackID;
+  int N, JobID, StackID;
   Job *job;
   IOBuffer *buffer;
+  char *varName;
+
+  varName = NULL;
+  if ((N = get_argument (argc, argv, "-var"))) {
+    remove_argument (N, &argc, argv);
+    varName = strcreate (argv[N]);
+    remove_argument (N, &argc, argv);
+  }
 
   if (argc != 2) {
-    gprint (GP_ERR, "USAGE: stdout (JobID)\n");
+    gprint (GP_ERR, "USAGE: stdout (JobID) [-var name]\n");
     gprint (GP_LOG, "STATUS %d\n", -1);
     return (FALSE);
@@ -25,11 +34,22 @@
 
   gprint (GP_ERR, "job not found in EXIT or CRASH\n");
-  gprint (GP_LOG, "STATUS %d\n", -2);
+  if (varName == NULL) {
+    gprint (GP_LOG, "STATUS %d\n", -2);
+  } else {
+    set_str_variable (varName, "NULL");
+    free (varName);
+  }
   return (FALSE);
 
 found_stdout:
   buffer = &job[0].stdout_buff;
-  fwrite (buffer[0].buffer, 1, buffer[0].Nbuffer, stdout);
-  gprint (GP_LOG, "STATUS %d\n", 0);
+  if (varName == NULL) {
+    fwrite (buffer[0].buffer, 1, buffer[0].Nbuffer, stdout);
+    gprint (GP_LOG, "STATUS %d\n", 0);
+  } else {
+    // XXX this can drop '0' values
+    set_str_variable (varName, buffer[0].buffer);
+    free (varName);
+  }
   PutJob (job, StackID, STACK_BOTTOM);
   return (TRUE);
@@ -38,10 +58,18 @@
 int stderr_pc (int argc, char **argv) {
 
-  int JobID, StackID;
+  int N, JobID, StackID;
   Job *job;
   IOBuffer *buffer;
+  char *varName;
+
+  varName = NULL;
+  if ((N = get_argument (argc, argv, "-var"))) {
+    remove_argument (N, &argc, argv);
+    varName = strcreate (argv[N]);
+    remove_argument (N, &argc, argv);
+  }
 
   if (argc != 2) {
-    gprint (GP_ERR, "USAGE: stderr (JobID)\n");
+    gprint (GP_ERR, "USAGE: stderr (JobID) [-var name]\n");
     gprint (GP_LOG, "STATUS %d\n", -1);
     return (FALSE);
@@ -60,11 +88,22 @@
 
   gprint (GP_ERR, "job not found in EXIT or CRASH\n");
-  gprint (GP_LOG, "STATUS %d\n", -2);
+  if (varName == NULL) {
+    gprint (GP_LOG, "STATUS %d\n", -2);
+  } else {
+    set_str_variable (varName, "NULL");
+    free (varName);
+  }
   return (FALSE);
 
 found_stderr:
   buffer = &job[0].stderr_buff;
-  fwrite (buffer[0].buffer, 1, buffer[0].Nbuffer, stdout);
-  gprint (GP_LOG, "STATUS %d\n", 0);
+  if (varName == NULL) {
+    fwrite (buffer[0].buffer, 1, buffer[0].Nbuffer, stdout);
+    gprint (GP_LOG, "STATUS %d\n", 0);
+  } else {
+    // XXX this can drop '0' values
+    set_str_variable (varName, buffer[0].buffer);
+    free (varName);
+  }
   PutJob (job, StackID, STACK_BOTTOM);
   return (TRUE);
