Index: /trunk/Ohana/src/libohana/include/ohana.h
===================================================================
--- /trunk/Ohana/src/libohana/include/ohana.h	(revision 7916)
+++ /trunk/Ohana/src/libohana/include/ohana.h	(revision 7917)
@@ -166,4 +166,6 @@
 int EmptyIOBuffer (IOBuffer *buffer, int Nmax, int fd);
 void FreeIOBuffer (IOBuffer *buffer);
+int PrintIOBuffer (IOBuffer *buffer, char *format, ...);
+int vPrintIOBuffer (IOBuffer *buffer, char *format, va_list argp);
 
 /* communication functions */
@@ -173,4 +175,6 @@
 int SendCommand (int device, int length, char *format, ...);
 int SendCommandV (int device, int length, char *format, va_list argp);
+
+char *CheckForMessage (IOBuffer *buffer);
 
 /*
Index: /trunk/Ohana/src/libohana/src/CommOps.c
===================================================================
--- /trunk/Ohana/src/libohana/src/CommOps.c	(revision 7916)
+++ /trunk/Ohana/src/libohana/src/CommOps.c	(revision 7917)
@@ -113,2 +113,50 @@
   return (TRUE);
 }
+
+/* 
+
+ I need an alternative ExpectCommand function which appends to an existing buffer
+ until the complete message is ready.  
+
+ A command looks like this (pre-determined length):
+ NN bytes: XXXXX\0 
+
+ A message looks like this (preceded by NBYTES command) :
+ 16 bytes: WORD NNN\0
+ NNN bytes: message.... \0
+
+ the expect function needs to monitor the number of bytes already received
+ we need to be able to call it repeatedly until the buffer is full.
+
+*/
+
+/* check if the first entry in the buffer corresponds to a message:
+   A message looks like this (preceded by NBYTES command) :
+    16 bytes: WORD NNN
+    NNN bytes: message....
+    note that the NULL bytes are not sent
+  If a message is found, it is popped off the buffer and sent back as a
+  complete line (the length portion is dropped) 
+*/
+
+char *CheckForMessage (IOBuffer *buffer) {
+
+  int Nbytes;
+  char command[20], *line;
+
+  if (buffer[0].Nbuffer < 16) return NULL;
+  memcpy (command, buffer[0].buffer, 16);
+  command[16] = 0;
+
+  sscanf (command, "NBYTES: %d", &Nbytes);
+
+  if (buffer[0].Nbuffer < Nbytes + 16) return NULL;
+
+  ALLOCATE (line, char, Nbytes + 1);
+  memcpy (line, &buffer[0].buffer[16], Nbytes);
+  line[Nbytes] = 0;
+
+  buffer[0].Nbuffer -= Nbytes + 16;
+  memmove (buffer[0].buffer, &buffer[0].buffer[Nbytes+16], buffer[0].Nbuffer);
+  return (line);
+}
Index: /trunk/Ohana/src/libohana/src/IOBufferOps.c
===================================================================
--- /trunk/Ohana/src/libohana/src/IOBufferOps.c	(revision 7916)
+++ /trunk/Ohana/src/libohana/src/IOBufferOps.c	(revision 7917)
@@ -84,2 +84,35 @@
   }
 }
+
+/* print to an IOBuffer (varargs form) */
+int PrintIOBuffer (IOBuffer *buffer, char *format, ...) {
+
+  int status;
+  va_list argp;  
+
+  va_start (argp, format);
+  status = vPrintIOBuffer (buffer, format, argp);
+  va_end (argp);
+  return (status);
+}
+
+/* print to an IOBuffer (va_list form) */
+int vPrintIOBuffer (IOBuffer *buffer, char *format, va_list argp) {
+
+  /* add the output line to the given IOBuffer */
+  
+  int Nbyte, status;
+  char tmp, *line;
+
+  Nbyte = vsnprintf (&tmp, 0, format, argp);
+
+  if (buffer[0].Nbuffer + Nbyte + 1 >= buffer[0].Nalloc) {
+    buffer[0].Nalloc = buffer[0].Nbuffer + Nbyte + 64;
+    REALLOCATE (buffer[0].buffer, char, buffer[0].Nalloc);
+  }
+
+  vsnprintf (&buffer[0].buffer[buffer[0].Nbuffer], Nbyte + 1, format, argp);
+  buffer[0].Nbuffer += Nbyte + 1;
+  return (TRUE);
+}
+  
Index: /trunk/Ohana/src/opihi/cmd.astro/biassub.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/biassub.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.astro/biassub.c	(revision 7917)
@@ -21,6 +21,6 @@
 
   if (argc != 7) {
-    fprintf (stderr, "USAGE: biassub <buffer> sx sy nx ny dir [-v N V]\n");
-    fprintf (stderr, "  optional storage of vector and sequence in N and V\n");
+    gprint (GP_ERR, "USAGE: biassub <buffer> sx sy nx ny dir [-v N V]\n");
+    gprint (GP_ERR, "  optional storage of vector and sequence in N and V\n");
     return (FALSE);
   }
@@ -33,5 +33,5 @@
   dir = atof (argv[6]);
   if ((dir != 0) && (dir != 1)) {
-    fprintf (stderr, " dir must be either 0 (x) or 1 (y)\n");
+    gprint (GP_ERR, " dir must be either 0 (x) or 1 (y)\n");
     return (FALSE);
   }
@@ -45,10 +45,10 @@
     nlong = nx;
   }    
-  fprintf (GetOutfile(), "start: %d %d  size: %d %d\n", sx, sy, nx, ny);
+  gprint (GP_LOG, "start: %d %d  size: %d %d\n", sx, sy, nx, ny);
 
     if ((sx < 0) || (sy < 0) || 
       (sx+nx > buf[0].matrix.Naxis[0]) || 
       (sy+ny > buf[0].matrix.Naxis[1])) {
-    fprintf (stderr, "region out of range\n");
+    gprint (GP_ERR, "region out of range\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.astro/cgrid.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/cgrid.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.astro/cgrid.c	(revision 7917)
@@ -20,5 +20,5 @@
 
   if (argc != 1) {
-    fprintf (stderr, "USAGE: cgrid [style]\n");
+    gprint (GP_ERR, "USAGE: cgrid [style]\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.astro/coords.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/coords.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.astro/coords.c	(revision 7917)
@@ -43,5 +43,5 @@
   if (!strcmp(&coords.ctype[4], "-WRP")) {
     if (MOSAIC == NULL) {
-      fprintf (stderr, "must supply mosaic for WRP coords\n");
+      gprint (GP_ERR, "must supply mosaic for WRP coords\n");
       return (FALSE);
     }
@@ -53,5 +53,5 @@
   if (mode == SKY) {
     XY_to_RD (&R, &D, X, Y, &coords);
-    fprintf (GetOutfile(), "%10.6f %10.6f\n", R, D);
+    gprint (GP_LOG, "%10.6f %10.6f\n", R, D);
     set_variable ("RA", R);
     set_variable ("DEC", D);
@@ -61,5 +61,5 @@
   if (mode == PIXEL) {
     RD_to_XY (&X, &Y, R, D, &coords);
-    fprintf (GetOutfile(), "%7.2f %7.2f\n", X, Y);
+    gprint (GP_LOG, "%7.2f %7.2f\n", X, Y);
     set_variable ("Xc", X);
     set_variable ("Yc", Y);
@@ -69,6 +69,6 @@
 
  syntax:
-  fprintf (stderr, "USAGE: coords [buffer] (-c R D) / (-p X Y)\n");
-  fprintf (stderr, "only one of -p or -c can be used\n");
+  gprint (GP_ERR, "USAGE: coords [buffer] (-c R D) / (-p X Y)\n");
+  gprint (GP_ERR, "only one of -p or -c can be used\n");
  escape:
   if (MOSAIC != NULL) free (MOSAIC);
Index: /trunk/Ohana/src/opihi/cmd.astro/cplot.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/cplot.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.astro/cplot.c	(revision 7917)
@@ -11,5 +11,5 @@
 
   if (argc != 3) {
-    fprintf (stderr, "USAGE: cplot <ra> <dec> [style]\n");
+    gprint (GP_ERR, "USAGE: cplot <ra> <dec> [style]\n");
     return (FALSE);
   }
@@ -24,5 +24,5 @@
 
   if (xvec[0].Nelements != yvec[0].Nelements) {
-    fprintf (stderr, "vectors are not the same length\n");
+    gprint (GP_ERR, "vectors are not the same length\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.astro/csystem.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/csystem.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.astro/csystem.c	(revision 7917)
@@ -13,5 +13,5 @@
    
   if (argc != 5) {
-    fprintf (stderr, "USAGE: csystems [C/G/E/H] [C/G/E/H] X Y\n");
+    gprint (GP_ERR, "USAGE: csystems [C/G/E/H] [C/G/E/H] X Y\n");
     return (FALSE);
   }
@@ -22,5 +22,5 @@
     switch (argv[2][0]) {
     case 'C': 
-      fprintf (stderr, "same coordinate system\n");
+      gprint (GP_ERR, "same coordinate system\n");
       return (TRUE);
       break;
@@ -51,5 +51,5 @@
       break;
     case 'G':
-      fprintf (stderr, "error: conversions between galactic and ecliptic not implemented\n");
+      gprint (GP_ERR, "error: conversions between galactic and ecliptic not implemented\n");
       return (FALSE);
       phi = -62.6*RAD_DEG;
@@ -73,5 +73,5 @@
       break;
     case 'E':
-      fprintf (stderr, "error: conversions between galactic and ecliptic not implemented\n");
+      gprint (GP_ERR, "error: conversions between galactic and ecliptic not implemented\n");
       return (FALSE);
       gettimeofday (&now, (struct timezone *) NULL);
@@ -91,5 +91,5 @@
 
   if (xvec[0].Nelements != yvec[0].Nelements) {
-    fprintf (stderr, "vectors %s and %s not the same length\n", argv[3], argv[4]);
+    gprint (GP_ERR, "vectors %s and %s not the same length\n", argv[3], argv[4]);
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.astro/ctimes.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/ctimes.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.astro/ctimes.c	(revision 7917)
@@ -16,5 +16,5 @@
 
   if (argc != 3) {
-    fprintf (stderr, "USAGE: ctimes [-ref (value) / -abs (date)] [-var name]\n");
+    gprint (GP_ERR, "USAGE: ctimes [-ref (value) / -abs (date)] [-var name]\n");
     return (FALSE);
   }
@@ -35,5 +35,5 @@
       free (Variable);
     } else {
-      fprintf (stderr, "time: %s\n", date);
+      gprint (GP_ERR, "time: %s\n", date);
     }
 
@@ -44,10 +44,10 @@
 
     if (strcmp (argv[1], "-abs")) {
-      fprintf (stderr, "syntax error\n");
+      gprint (GP_ERR, "syntax error\n");
       return (FALSE);
     }
 
     if (!str_to_time (argv[2], &time)) { 
-      fprintf (stderr, "syntax error\n");
+      gprint (GP_ERR, "syntax error\n");
       return (FALSE);
     }
@@ -60,5 +60,5 @@
       return (TRUE);
     }
-    fprintf (stderr, "time: %f\n", value);
+    gprint (GP_ERR, "time: %f\n", value);
     return (TRUE);
   }
Index: /trunk/Ohana/src/opihi/cmd.astro/cval.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/cval.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.astro/cval.c	(revision 7917)
@@ -9,5 +9,5 @@
 
   if (argc != 7) {
-    fprintf (stderr, "USAGE: cval <buffer> x y dx dy sky\n");
+    gprint (GP_ERR, "USAGE: cval <buffer> x y dx dy sky\n");
     return (FALSE);
   }
@@ -28,5 +28,5 @@
       (sx+nx > buf[0].matrix.Naxis[0]) || 
       (sy+ny > buf[0].matrix.Naxis[1])) {
-    fprintf (stderr, "region out of range\n");
+    gprint (GP_ERR, "region out of range\n");
     return (FALSE);
   }
@@ -45,5 +45,5 @@
   }
 
-  fprintf (stderr, "cval: %f  sn: %f\n", cval, sqrt(sn));
+  gprint (GP_ERR, "cval: %f  sn: %f\n", cval, sqrt(sn));
 
   return (TRUE);
Index: /trunk/Ohana/src/opihi/cmd.astro/czplot.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/czplot.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.astro/czplot.c	(revision 7917)
@@ -12,5 +12,5 @@
 
   if (argc != 6) {
-    fprintf (stderr, "USAGE: czplot <x> <y> <z> min max\n");
+    gprint (GP_ERR, "USAGE: czplot <x> <y> <z> min max\n");
     return (FALSE);
   }
@@ -28,9 +28,9 @@
 
   if (xvec[0].Nelements != yvec[0].Nelements) {
-    fprintf (stderr, "vectors %s and %s not the same length\n", argv[1], argv[2]);
+    gprint (GP_ERR, "vectors %s and %s not the same length\n", argv[1], argv[2]);
     return (FALSE);
   }
   if (xvec[0].Nelements != zvec[0].Nelements) {
-    fprintf (stderr, "vectors %s and %s not the same length\n", argv[1], argv[3]);
+    gprint (GP_ERR, "vectors %s and %s not the same length\n", argv[1], argv[3]);
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.astro/drizzle.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/drizzle.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.astro/drizzle.c	(revision 7917)
@@ -27,7 +27,7 @@
 
   if (argc != 5) {
-    fprintf (stderr, "USAGE: transform <from> <to> <weight> (Nlinear)\n");
-    fprintf (stderr, "  output buffer must exist with target astrometry header\n");
-    fprintf (stderr, "  Nlinear is the pixel scale for linear astrometric transformation\n");
+    gprint (GP_ERR, "USAGE: transform <from> <to> <weight> (Nlinear)\n");
+    gprint (GP_ERR, "  output buffer must exist with target astrometry header\n");
+    gprint (GP_ERR, "  Nlinear is the pixel scale for linear astrometric transformation\n");
     return (FALSE);
   }
@@ -43,5 +43,5 @@
   /* for the moment, disable WRP / DIS */
   if (!strcmp(&coords_in.ctype[4], "-WRP") || !strcmp(&coords_out.ctype[4], "-WRP")) {
-    fprintf (stderr, "WRP mode not implemented for astrom\n");
+    gprint (GP_ERR, "WRP mode not implemented for astrom\n");
     return (FALSE);
   }
@@ -50,5 +50,5 @@
   scale_out = sqrt(fabs(coords_out.cdelt1*coords_out.cdelt2*(coords_out.pc1_1*coords_out.pc2_2 - coords_out.pc1_2*coords_out.pc2_1)));
   
-  fprintf (stderr, "%f - %f\n", scale_in, scale_out);
+  gprint (GP_ERR, "%f - %f\n", scale_in, scale_out);
 
   if (scale_in > scale_out) {
Index: /trunk/Ohana/src/opihi/cmd.astro/fixwrap.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/fixwrap.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.astro/fixwrap.c	(revision 7917)
@@ -8,5 +8,5 @@
 
   if (argc != 3) {
-    fprintf (stderr, "USAGE: fixwrap <in> (rowfix)\n");
+    gprint (GP_ERR, "USAGE: fixwrap <in> (rowfix)\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.astro/flux.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/flux.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.astro/flux.c	(revision 7917)
@@ -12,5 +12,5 @@
 
   if (argc != 3) {
-    fprintf (stderr, "USAGE: flux <buffer> (region)\n");
+    gprint (GP_ERR, "USAGE: flux <buffer> (region)\n");
     return (FALSE);
   }
@@ -20,5 +20,5 @@
   f = fopen (argv[2], "r");
   if (f == (FILE *) NULL) {
-    fprintf (stderr, "file %s not found\n", argv[2]);
+    gprint (GP_ERR, "file %s not found\n", argv[2]);
     return (FALSE);
   }
@@ -46,5 +46,5 @@
     bb[i] = hypot (bx[i], by[i]) * SIGN (bx[i]*by[i+1] - bx[i+1]*by[i]);
   }
-  fprintf (stderr, "%f %f %f %f\n", bb[0], bb[1], bb[2], bb[3]);
+  gprint (GP_ERR, "%f %f %f %f\n", bb[0], bb[1], bb[2], bb[3]);
 
   /* this only works for convex contours --
@@ -70,5 +70,5 @@
   signal (SIGINT, oldsignal);
 
-  fprintf (GetOutfile(), "flux: %f\n", flux);
+  gprint (GP_LOG, "flux: %f\n", flux);
   set_variable ("FLUX", flux);
   return (TRUE);
Index: /trunk/Ohana/src/opihi/cmd.astro/gauss.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/gauss.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.astro/gauss.c	(revision 7917)
@@ -33,10 +33,10 @@
   
   if ((argc != 2) && (argc != 3)) {
-    fprintf (stderr, "USAGE: gauss Npix [Nspots] [-border N] [-sat cnts]\n");
+    gprint (GP_ERR, "USAGE: gauss Npix [Nspots] [-border N] [-sat cnts]\n");
     return (FALSE);
   }
   
   if (Ximage < 1) {
-    fprintf (stderr, "no active TV\n");
+    gprint (GP_ERR, "no active TV\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.astro/getvel.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/getvel.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.astro/getvel.c	(revision 7917)
@@ -13,5 +13,5 @@
 
   if (argc != 5) {
-    fprintf (stderr, "USAGE: rotcurve buf X Y curve.txt\n");
+    gprint (GP_ERR, "USAGE: rotcurve buf X Y curve.txt\n");
     return (FALSE);
   }
@@ -19,5 +19,5 @@
   f = fopen (argv[4], "r");
   if (f == (FILE *) NULL) {
-    fprintf (stderr, "can't find rotation curve data file %s\n", argv[4]);
+    gprint (GP_ERR, "can't find rotation curve data file %s\n", argv[4]);
     return (FALSE);
   }
@@ -45,5 +45,5 @@
   while (L >= 360) {L -= 360.0;}
   while (L < 0.0)  {L += 360.0;}
-  fprintf (stderr, "L: %f\n", L);
+  gprint (GP_ERR, "L: %f\n", L);
 
   cl = cos (L*RAD_DEG);
@@ -59,6 +59,6 @@
   for (n = 0; (n < Ncurve) && (wr < W[n]); n++);
   if ((n == 0) || (n == Ncurve)) {
-    fprintf (stderr, "velocity out of reasonable range\n");
-    fprintf (stderr, "%f %f %f %f\n", V, wr, W[0], W[Ncurve-1]);
+    gprint (GP_ERR, "velocity out of reasonable range\n");
+    gprint (GP_ERR, "%f %f %f %f\n", V, wr, W[0], W[Ncurve-1]);
     return (TRUE);
   }
@@ -66,6 +66,6 @@
   fr = (Ro/r);
   if (r < fabs(Rs)) { /* can't be on rotation curve */
-    fprintf (stderr, "velocity out of reasonable range\n");
-    fprintf (stderr, "%f %f %f %f %f %f %f\n", V, wr, W[0], W[Ncurve-1], r, fr, Rs);
+    gprint (GP_ERR, "velocity out of reasonable range\n");
+    gprint (GP_ERR, "%f %f %f %f %f %f %f\n", V, wr, W[0], W[Ncurve-1], r, fr, Rs);
     return (TRUE);
   }
@@ -75,5 +75,5 @@
     d = Ro*cl + sqrt(r*r - Rs*Rs);
   
-  fprintf (stderr, "dist: %f, vel: %f\n", d, V);
+  gprint (GP_ERR, "dist: %f, vel: %f\n", d, V);
 
   return (TRUE);
Index: /trunk/Ohana/src/opihi/cmd.astro/imfit.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/imfit.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.astro/imfit.c	(revision 7917)
@@ -65,5 +65,5 @@
     qrgauss_setup (argv[N]);
     if (fitfunc == NULL) {
-      fprintf (stderr, "unknown function %s\n", argv[N]);
+      gprint (GP_ERR, "unknown function %s\n", argv[N]);
       return (FALSE);
     }
@@ -72,5 +72,5 @@
 
   if (argc != 6) {
-    fprintf (stderr, "USAGE: imfit <buffer> sx sy nx ny\n");
+    gprint (GP_ERR, "USAGE: imfit <buffer> sx sy nx ny\n");
     return (FALSE);
   }
@@ -170,7 +170,7 @@
   if (VERBOSE) {
     for (i = 0; i < Npar; i++) {
-      fprintf (stderr, "%g ", par[i]);
+      gprint (GP_ERR, "%g ", par[i]);
     }
-    fprintf (stderr, "\n");
+    gprint (GP_ERR, "\n");
   }
 
@@ -186,5 +186,5 @@
 
 range:
-  fprintf (stderr, "region out of range\n");
+  gprint (GP_ERR, "region out of range\n");
   return (FALSE);
 }
Index: /trunk/Ohana/src/opihi/cmd.astro/imsub.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/imsub.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.astro/imsub.c	(revision 7917)
@@ -30,5 +30,5 @@
     qrgauss_setup (argv[N]);
     if (fitfunc == NULL) {
-      fprintf (stderr, "unknown function %s\n", argv[N]);
+      gprint (GP_ERR, "unknown function %s\n", argv[N]);
       return (FALSE);
     }
@@ -37,5 +37,5 @@
 
   if (argc != 6) {
-    fprintf (stderr, "USAGE: imfit <buffer> sx sy nx ny\n");
+    gprint (GP_ERR, "USAGE: imfit <buffer> sx sy nx ny\n");
     return (FALSE);
   }
@@ -74,5 +74,5 @@
 
 range:
-  fprintf (stderr, "region out of range\n");
+  gprint (GP_ERR, "region out of range\n");
   return (FALSE);
 }
Index: /trunk/Ohana/src/opihi/cmd.astro/medianmap.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/medianmap.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.astro/medianmap.c	(revision 7917)
@@ -31,7 +31,7 @@
 
   if (argc != 5) {
-    fprintf (stderr, "USAGE: medianmap (in) (out) Nx Ny [-range min max]\n");
-    fprintf (stderr, "       Nx, Ny specify dimensions of output image\n");
-    fprintf (stderr, "       min, max specify fractional range for sorted average\n");
+    gprint (GP_ERR, "USAGE: medianmap (in) (out) Nx Ny [-range min max]\n");
+    gprint (GP_ERR, "       Nx, Ny specify dimensions of output image\n");
+    gprint (GP_ERR, "       min, max specify fractional range for sorted average\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.astro/mkgauss.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/mkgauss.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.astro/mkgauss.c	(revision 7917)
@@ -21,5 +21,5 @@
 
   if ((argc < 3) || (argc > 5)) {
-    fprintf (stderr, "USAGE: mkgauss (buffer) (sigma) [[sy/sx] angle]\n");
+    gprint (GP_ERR, "USAGE: mkgauss (buffer) (sigma) [[sy/sx] angle]\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.astro/multifit.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/multifit.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.astro/multifit.c	(revision 7917)
@@ -11,5 +11,5 @@
 
   if (argc != 2) {
-    fprintf (stderr, "USAGE: multifit (Norder)\n");
+    gprint (GP_ERR, "USAGE: multifit (Norder)\n");
     return (FALSE);
   }
@@ -170,5 +170,5 @@
   
  escape: 
-  fprintf (stderr, "syntax error\n");
+  gprint (GP_ERR, "syntax error\n");
   return (FALSE);
   
Index: /trunk/Ohana/src/opihi/cmd.astro/objload.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/objload.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.astro/objload.c	(revision 7917)
@@ -27,5 +27,5 @@
 
   if (argc != 3) {
-    fprintf (stderr, "USAGE: objload (overlay) <filename>\n");
+    gprint (GP_ERR, "USAGE: objload (overlay) <filename>\n");
     return (FALSE);
   }
@@ -33,5 +33,5 @@
   f = fopen (argv[2], "r");
   if (f == (FILE *) NULL) {
-    fprintf (stderr, "ERROR: can't find object file %s\n", argv[2]);
+    gprint (GP_ERR, "ERROR: can't find object file %s\n", argv[2]);
     return (FALSE);
   }
@@ -69,5 +69,5 @@
   free (line);
 
-  fprintf (stderr, "loaded %d objects\n", Noverlay);
+  gprint (GP_ERR, "loaded %d objects\n", Noverlay);
   return (TRUE);
 }
Index: /trunk/Ohana/src/opihi/cmd.astro/outline.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/outline.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.astro/outline.c	(revision 7917)
@@ -14,5 +14,5 @@
 
   if (argc != 9) {
-    fprintf (stderr, "USAGE: outline x y dx dy dxy Io (buffer) Npar\n");
+    gprint (GP_ERR, "USAGE: outline x y dx dy dxy Io (buffer) Npar\n");
     return (FALSE);
   }
@@ -43,5 +43,5 @@
 
   chisq = outline_chi (Io, in, buf[0].matrix.Naxis[0], buf[0].matrix.Naxis[1], &frac);
-  fprintf (stderr, "chisq (1): %f\n", chisq);
+  gprint (GP_ERR, "chisq (1): %f\n", chisq);
   
   for (j = 0; j < 15; j++) {
@@ -63,5 +63,5 @@
 	  chisq = nchisq;
 	}
-	fprintf (stderr, "frac: %f  %f %f   %f\n", frac, par[2], par[3], chisq);
+	gprint (GP_ERR, "frac: %f  %f %f   %f\n", frac, par[2], par[3], chisq);
       }
     }
@@ -112,9 +112,9 @@
 	}	
 	/*
-	fprintf (stderr, "try: %d  %f   ", i, chisq);
+	gprint (GP_ERR, "try: %d  %f   ", i, chisq);
 	for (k = 0; k < 5; k++) {
-	  fprintf (stderr, "%f ", par[k]);
+	  gprint (GP_ERR, "%f ", par[k]);
 	}
-	fprintf (stderr, "\n");
+	gprint (GP_ERR, "\n");
 	*/
 	ochisq = chisq;
@@ -130,13 +130,13 @@
     }
 
-    fprintf (stderr, "try: %d  %f   ", j, chisq);
+    gprint (GP_ERR, "try: %d  %f   ", j, chisq);
     for (i = 0; i < 5; i++) {
-      fprintf (stderr, "%f ", par[i]);
-    }
-    fprintf (stderr, "\n          ");
+      gprint (GP_ERR, "%f ", par[i]);
+    }
+    gprint (GP_ERR, "\n          ");
     for (i = 0; i < 5; i++) {
-      fprintf (stderr, "%f ", dpar[i]);
-    }
-    fprintf (stderr, "\n");
+      gprint (GP_ERR, "%f ", dpar[i]);
+    }
+    gprint (GP_ERR, "\n");
     dchi -= chisq;
 
Index: /trunk/Ohana/src/opihi/cmd.astro/outline2.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/outline2.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.astro/outline2.c	(revision 7917)
@@ -18,5 +18,5 @@
 
   if (argc != 9) {
-    fprintf (stderr, "USAGE: outline x y dx dy dxy Io dIo (buffer)\n");
+    gprint (GP_ERR, "USAGE: outline x y dx dy dxy Io dIo (buffer)\n");
     return (FALSE);
   }
@@ -78,5 +78,5 @@
 
   if (Npts == 0) {
-    fprintf (stderr, "no valid points in box, try again\n");
+    gprint (GP_ERR, "no valid points in box, try again\n");
     free (xs);
     free (ys);
@@ -87,5 +87,5 @@
   plot_outline ();
   chisq = outline_chi (Io, in);
-  fprintf (stderr, "starting chisq: %f for %d pts\n", chisq, Npts);
+  gprint (GP_ERR, "starting chisq: %f for %d pts\n", chisq, Npts);
 
 # if (1)
@@ -139,13 +139,13 @@
     }
 
-    fprintf (stderr, "try: %d  %f   ", j, chisq);
+    gprint (GP_ERR, "try: %d  %f   ", j, chisq);
     for (i = 0; i < 5; i++) {
-      fprintf (stderr, "%f ", par[i]);
-    }
-    fprintf (stderr, "\n          ");
+      gprint (GP_ERR, "%f ", par[i]);
+    }
+    gprint (GP_ERR, "\n          ");
     for (i = 0; i < 5; i++) {
-      fprintf (stderr, "%f ", dpar[i]);
-    }
-    fprintf (stderr, "\n");
+      gprint (GP_ERR, "%f ", dpar[i]);
+    }
+    gprint (GP_ERR, "\n");
     dchi -= chisq;
 
Index: /trunk/Ohana/src/opihi/cmd.astro/polar.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/polar.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.astro/polar.c	(revision 7917)
@@ -12,5 +12,5 @@
 
   if (argc != 4) {
-    fprintf (stderr, "USAGE: polar in out\n");
+    gprint (GP_ERR, "USAGE: polar in out\n");
     return (FALSE);
   }
@@ -25,5 +25,5 @@
   ny = mask[0].matrix.Naxis[1];
   if ((Nx != nx) && (Ny != ny)) {
-    fprintf (stderr, "output and mask must have same dimensions\n");
+    gprint (GP_ERR, "output and mask must have same dimensions\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.astro/precess.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/precess.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.astro/precess.c	(revision 7917)
@@ -15,6 +15,6 @@
   in_epoch = out_epoch = 2000.0;
   if (argc != 5) {
-    fprintf (stderr, "USAGE:  precess (from) (to) RA DEC \n");
-    fprintf (stderr, "   you may use B for B1950.0 or J for J2000.0\n");
+    gprint (GP_ERR, "USAGE:  precess (from) (to) RA DEC \n");
+    gprint (GP_ERR, "   you may use B for B1950.0 or J for J2000.0\n");
     return (FALSE);
   }
@@ -56,5 +56,5 @@
   }
 
-  fprintf (stderr, "converting from J%f to J%f\n", in_epoch, out_epoch);
+  gprint (GP_ERR, "converting from J%f to J%f\n", in_epoch, out_epoch);
 
   T = (out_epoch - in_epoch) / 100.0;
@@ -77,5 +77,5 @@
     if (RA < 0)
       RA += 360;
-    fprintf (GetOutfile(), "%f %f -> %f %f\n", A, D, RA, DEC);
+    gprint (GP_LOG, "%f %f -> %f %f\n", A, D, RA, DEC);
     return (TRUE);
   }    
@@ -86,5 +86,5 @@
 
   if (xvec[0].Nelements != yvec[0].Nelements) {
-    fprintf (stderr, "vectors %s and %s not the same length\n", argv[3], argv[4]);
+    gprint (GP_ERR, "vectors %s and %s not the same length\n", argv[3], argv[4]);
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.astro/profile.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/profile.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.astro/profile.c	(revision 7917)
@@ -10,5 +10,5 @@
 
   if (argc != 7) {
-    fprintf (stderr, "USAGE: profile <buffer> <X vector> <Y vector> x y N\n");
+    gprint (GP_ERR, "USAGE: profile <buffer> <X vector> <Y vector> x y N\n");
     return (FALSE);
   }
@@ -47,5 +47,5 @@
 
 range_error:
-  fprintf (stderr, "region out of range\n");
+  gprint (GP_ERR, "region out of range\n");
   return (FALSE);
 }
Index: /trunk/Ohana/src/opihi/cmd.astro/region.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/region.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.astro/region.c	(revision 7917)
@@ -33,6 +33,6 @@
 
   if ((argc != 4) && (argc != 5)) {
-    fprintf (stderr, "USAGE: region Ra Dec Radius [projection] [orientation]\n");
-    fprintf (stderr, " current: %f %f (%f x %f) (%s)\n", 
+    gprint (GP_ERR, "USAGE: region Ra Dec Radius [projection] [orientation]\n");
+    gprint (GP_ERR, " current: %f %f (%f x %f) (%s)\n", 
 	     graphmode.coords.crval1, graphmode.coords.crval2, 
 	     fabs(graphmode.xmax - graphmode.xmin), 
Index: /trunk/Ohana/src/opihi/cmd.astro/rotcurve.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/rotcurve.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.astro/rotcurve.c	(revision 7917)
@@ -21,5 +21,5 @@
 
   if (argc != 5) {
-    fprintf (stderr, "USAGE: rotcurve in out mask curve.txt\n");
+    gprint (GP_ERR, "USAGE: rotcurve in out mask curve.txt\n");
     return (FALSE);
   }
@@ -27,5 +27,5 @@
   f = fopen (argv[4], "r");
   if (f == (FILE *) NULL) {
-    fprintf (stderr, "can't find rotation curve data file %s\n", argv[4]);
+    gprint (GP_ERR, "can't find rotation curve data file %s\n", argv[4]);
     return (FALSE);
   }
@@ -45,5 +45,5 @@
   ny = mask[0].matrix.Naxis[1];
   if ((Nx != nx) && (Ny != ny)) {
-    fprintf (stderr, "output and mask must have same dimensions\n");
+    gprint (GP_ERR, "output and mask must have same dimensions\n");
     return (FALSE);
   }
@@ -74,8 +74,8 @@
   X = (L - Lo) / dL + Xo;
   if ((X >= Nx) || (X < 0)) {
-    fprintf (stderr, "X out of range\n");
+    gprint (GP_ERR, "X out of range\n");
     return (FALSE);
   }
-  fprintf (stderr, "L: %f (%d)\n", L, X);
+  gprint (GP_ERR, "L: %f (%d)\n", L, X);
 
   cl = cos (L*RAD_DEG);
Index: /trunk/Ohana/src/opihi/cmd.astro/scale.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/scale.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.astro/scale.c	(revision 7917)
@@ -6,5 +6,5 @@
 
   if (argc != 5) {
-    fprintf (stderr, "USAGE: scale (buffer) (key) [-r/-w] (value)\n");
+    gprint (GP_ERR, "USAGE: scale (buffer) (key) [-r/-w] (value)\n");
     return (FALSE);
   }  
@@ -13,10 +13,10 @@
 
   if (strcasecmp (argv[2], "bzero") && strcasecmp (argv[2], "bscale")) {
-    fprintf (stderr, "use bzero or bscale only\n");
+    gprint (GP_ERR, "use bzero or bscale only\n");
     return (FALSE);
   }
     
   if (strcmp (argv[3], "-r") && strcmp (argv[3], "-w")) {
-    fprintf (stderr, "use -r or -w only\n");
+    gprint (GP_ERR, "use -r or -w only\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.astro/sexigesimal.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/sexigesimal.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.astro/sexigesimal.c	(revision 7917)
@@ -18,5 +18,5 @@
 
   if ((argc != 3) && (argc != 2)) {
-    fprintf (stderr, "USAGE: sexigesimal (from) [to]\n");
+    gprint (GP_ERR, "USAGE: sexigesimal (from) [to]\n");
     return (FALSE);
   }
@@ -24,5 +24,5 @@
   if (HMS) {
     if (!dms_to_ddd (&value, argv[1])) {
-      fprintf (stderr, "syntax error in input\n");
+      gprint (GP_ERR, "syntax error in input\n");
       return (FALSE);
     }
@@ -30,5 +30,5 @@
       set_variable (argv[2], value);
     } else {
-      fprintf (GetOutfile(), "%10.6f\n", value);
+      gprint (GP_LOG, "%10.6f\n", value);
     }
     return (TRUE);
@@ -39,5 +39,5 @@
       set_str_variable (argv[2], string);
     } else {
-      fprintf (GetOutfile(), "%s\n", string);
+      gprint (GP_LOG, "%s\n", string);
     }
     return (TRUE);
Index: /trunk/Ohana/src/opihi/cmd.astro/spec.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/spec.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.astro/spec.c	(revision 7917)
@@ -34,10 +34,10 @@
   
   if (argc != 7) {
-    fprintf (stderr, "USAGE: spec buffer x y1 y2 X Y [-Nlong N] [-Ngap N] [-Nrow N]\n");
+    gprint (GP_ERR, "USAGE: spec buffer x y1 y2 X Y [-Nlong N] [-Ngap N] [-Nrow N]\n");
     return (FALSE);
   }
   
   if ((Nrow < 1) || (Nlong < 2) || (Ngap < 1) || (Nlong - Ngap < 2)) {
-    fprintf (stderr, "bad values for options\n");
+    gprint (GP_ERR, "bad values for options\n");
     return (FALSE);
   }
@@ -79,5 +79,5 @@
     }
     X1 = SX / S;
-    fprintf (stderr, "%4d %4d %5.1f ", j+y1, X1, sky);
+    gprint (GP_ERR, "%4d %4d %5.1f ", j+y1, X1, sky);
     /*    X1 = MAX (MIN (X1, Xo + 0.5+Ngap), Xo - 0.5+Ngap); */
     V = (float *) (buf[0].matrix.buffer) + Nx*(y1 + j) + X1 - (int)(0.5*Nlong);
@@ -105,5 +105,5 @@
     xvec[0].elements[j] = j + y1; 
     yvec[0].elements[j] = F / R; 
-    fprintf (stderr, " %5.1f %7.1f  %6.2f\n", sky, sky2, (F/R));
+    gprint (GP_ERR, " %5.1f %7.1f  %6.2f\n", sky, sky2, (F/R));
   }    
 
Index: /trunk/Ohana/src/opihi/cmd.astro/star.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/star.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.astro/star.c	(revision 7917)
@@ -23,5 +23,5 @@
   
   if ((argc != 4) && (argc != 5)) {
-    fprintf (stderr, "USAGE: star (buffer) x y [dx] [-border N] [-sat cnts]\n");
+    gprint (GP_ERR, "USAGE: star (buffer) x y [dx] [-border N] [-sat cnts]\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.astro/testfit.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/testfit.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.astro/testfit.c	(revision 7917)
@@ -11,5 +11,5 @@
 
   if (argc != 4) {
-    fprintf (stderr, "USAGE: imfit <x> <y> <dy>\n");
+    gprint (GP_ERR, "USAGE: imfit <x> <y> <dy>\n");
     return (FALSE);
   }
@@ -37,5 +37,5 @@
 
     chisq = mrqmin (xvec[0].elements, yvec[0].elements, dy, Npts, par, Npar, fgaussOD);
-    fprintf (stderr, "chisq: %f, %f %f %f %f\n", chisq, par[0], par[1], par[2], par[3]);
+    gprint (GP_ERR, "chisq: %f, %f %f %f %f\n", chisq, par[0], par[1], par[2], par[3]);
 
   }  
@@ -44,5 +44,5 @@
 
   for (i = 0; i < Npar; i++) {
-    fprintf (stderr, "%d  %f  %f\n", i, par[i], covar[i][i]);
+    gprint (GP_ERR, "%d  %f  %f\n", i, par[i], covar[i][i]);
   }
 
@@ -128,5 +128,5 @@
 
   if (argc != 6) {
-    fprintf (stderr, "USAGE: imfit <buffer> sx sy nx ny\n");
+    gprint (GP_ERR, "USAGE: imfit <buffer> sx sy nx ny\n");
     return (FALSE);
   }
@@ -143,5 +143,5 @@
       (sx+nx > buffers[Nbuf].matrix.Naxis[0]) || 
       (sy+ny > buffers[Nbuf].matrix.Naxis[1])) {
-    fprintf (stderr, "region out of range\n");
+    gprint (GP_ERR, "region out of range\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.astro/transform.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/transform.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.astro/transform.c	(revision 7917)
@@ -14,5 +14,5 @@
 
   if (argc != 3) {
-    fprintf (stderr, "USAGE: transform <from> <to>\n");
+    gprint (GP_ERR, "USAGE: transform <from> <to>\n");
     return (FALSE);
   }
@@ -26,5 +26,5 @@
   /* for the moment, disable WRP / DIS */
   if (!strcmp(&coords_in.ctype[4], "-WRP") || !strcmp(&coords_out.ctype[4], "-WRP")) {
-    fprintf (stderr, "WRP mode not implemented for astrom\n");
+    gprint (GP_ERR, "WRP mode not implemented for astrom\n");
     return (FALSE);
   }
@@ -46,5 +46,5 @@
 
   for (j = 0; j < in[0].header.Naxis[1]; j++) {
-    fprintf (stderr, ".");
+    gprint (GP_ERR, ".");
     for (i = 0; i < in[0].header.Naxis[0]; i++, Vin++) {
       for (dx = 0.0 + 0.5*frac; dx < 1.0 - 0.5*frac; dx += frac) {
Index: /trunk/Ohana/src/opihi/cmd.astro/warp.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/warp.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.astro/warp.c	(revision 7917)
@@ -27,7 +27,7 @@
 
   if (argc != 5) {
-    fprintf (stderr, "USAGE: transform <from> <to> <weight> (Nlinear)\n");
-    fprintf (stderr, "  output buffer must exist with target astrometry header\n");
-    fprintf (stderr, "  Nlinear is the pixel scale for linear astrometric transformation\n");
+    gprint (GP_ERR, "USAGE: transform <from> <to> <weight> (Nlinear)\n");
+    gprint (GP_ERR, "  output buffer must exist with target astrometry header\n");
+    gprint (GP_ERR, "  Nlinear is the pixel scale for linear astrometric transformation\n");
     return (FALSE);
   }
@@ -43,5 +43,5 @@
   /* for the moment, disable WRP / DIS */
   if (!strcmp(&coords_in.ctype[4], "-WRP") || !strcmp(&coords_out.ctype[4], "-WRP")) {
-    fprintf (stderr, "WRP mode not implemented for astrom\n");
+    gprint (GP_ERR, "WRP mode not implemented for astrom\n");
     return (FALSE);
   }
@@ -50,5 +50,5 @@
   scale_out = sqrt(fabs(coords_out.cdelt1*coords_out.cdelt2*(coords_out.pc1_1*coords_out.pc2_2 - coords_out.pc1_2*coords_out.pc2_1)));
   
-  fprintf (stderr, "%f - %f\n", scale_in, scale_out);
+  gprint (GP_ERR, "%f - %f\n", scale_in, scale_out);
 
   if (scale_in > scale_out) {
Index: /trunk/Ohana/src/opihi/cmd.basic/break.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.basic/break.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.basic/break.c	(revision 7917)
@@ -11,9 +11,9 @@
     if (!strcasecmp (argv[N], "off")) value = FALSE;
     if (value == -1) {
-      fprintf (stderr, "USAGE: break -auto [on / off]\n");
+      gprint (GP_ERR, "USAGE: break -auto [on / off]\n");
       if (auto_break) 
-	fprintf (stderr, "auto break on\n");
+	gprint (GP_ERR, "auto break on\n");
       else 
-	fprintf (stderr, "auto break off\n");
+	gprint (GP_ERR, "auto break off\n");
       return (FALSE);
     }
Index: /trunk/Ohana/src/opihi/cmd.basic/cd.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.basic/cd.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.basic/cd.c	(revision 7917)
@@ -7,5 +7,5 @@
 
   if (argc != 2) {
-    fprintf (stderr, "USAGE: cd <path>\n");
+    gprint (GP_ERR, "USAGE: cd <path>\n");
     return (FALSE);
   }
@@ -14,8 +14,8 @@
   if (!status) {
     if ((cwd = getcwd (NULL, 64)) == NULL) {
-      fprintf (stderr, "error getting cwd\n");
+      gprint (GP_ERR, "error getting cwd\n");
       return (FALSE);
     }
-    fprintf(GetOutfile(), "cwd: %s\n", cwd);
+    gprint (GP_LOG, "cwd: %s\n", cwd);
     ohana_memregister (cwd);
     free (cwd);
@@ -23,5 +23,5 @@
   }
 
-  fprintf (stderr, "error changing to %s\n", argv[1]);
+  gprint (GP_ERR, "error changing to %s\n", argv[1]);
   return (FALSE);
 
@@ -33,13 +33,13 @@
 
   if (argc != 1) {
-    fprintf (stderr, "USAGE: pwd\n");
+    gprint (GP_ERR, "USAGE: pwd\n");
     return (FALSE);
   }
   
   if ((cwd = getcwd(NULL, 64)) == NULL) {
-    fprintf (stderr, "error getting cwd\n");
+    gprint (GP_ERR, "error getting cwd\n");
     return (FALSE);
   }
-  fprintf(GetOutfile(), "cwd: %s\n", cwd);
+  gprint (GP_LOG, "cwd: %s\n", cwd);
   ohana_memregister (cwd);
   free (cwd);
Index: /trunk/Ohana/src/opihi/cmd.basic/date.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.basic/date.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.basic/date.c	(revision 7917)
@@ -8,5 +8,5 @@
 
   if ((argc != 1) && (argc != 2)) {
-    fprintf (stderr, "USAGE: date [variable]\n");
+    gprint (GP_ERR, "USAGE: date [variable]\n");
     return (FALSE);
   }
@@ -18,5 +18,5 @@
 
   if (argc == 1) {
-    fprintf (stderr, "%s\n", tstring);
+    gprint (GP_ERR, "%s\n", tstring);
   } else {
     set_str_variable (argv[1], tstring);
Index: /trunk/Ohana/src/opihi/cmd.basic/echo.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.basic/echo.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.basic/echo.c	(revision 7917)
@@ -6,7 +6,7 @@
 
   for (i = 1; i < argc; i++) {
-    fprintf (GetOutfile(), "%s ", argv[i]);
+    gprint (GP_LOG, "%s ", argv[i]);
   }
-  fprintf (GetOutfile(), "\n");
+  gprint (GP_LOG, "\n");
   return (TRUE);
 }
Index: /trunk/Ohana/src/opihi/cmd.basic/file.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.basic/file.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.basic/file.c	(revision 7917)
@@ -9,5 +9,5 @@
 
   if (argc < 2) {
-    fprintf (stderr, "USAGE: file (filename) [var]\n");
+    gprint (GP_ERR, "USAGE: file (filename) [var]\n");
     return (FALSE);
   }
@@ -23,7 +23,7 @@
   } else {
 
-    fprintf (stderr, "file %s is ", argv[1]);
-    if (!vstat) fprintf (stderr, "not ");
-    fprintf (stderr, "found\n");
+    gprint (GP_ERR, "file %s is ", argv[1]);
+    if (!vstat) gprint (GP_ERR, "not ");
+    gprint (GP_ERR, "found\n");
     
   }
Index: /trunk/Ohana/src/opihi/cmd.basic/fprintf.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.basic/fprintf.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.basic/fprintf.c	(revision 7917)
@@ -9,5 +9,5 @@
 
   if (argc < 2) {
-    fprintf (stderr, "USAGE: fprintf format value value ...\n");
+    gprint (GP_ERR, "USAGE: fprintf format value value ...\n");
     return (FALSE);
   }
@@ -24,9 +24,9 @@
     p2 = strchr (p1, '%');
     if (p2 == (char *) NULL) {
-      fprintf (stderr, "mismatch between format and values\n");
+      gprint (GP_ERR, "mismatch between format and values\n");
       return (FALSE);
     }
     if (strlen(q) + p2 - p1 > NCHAR) {
-      fprintf (stderr, "line too long");
+      gprint (GP_ERR, "line too long");
       return (FALSE);
     }
@@ -51,9 +51,9 @@
 	break;
       default:
-	fprintf (stderr, "syntax error in format (only e,f,s,d,c,x allowed)\n");
+	gprint (GP_ERR, "syntax error in format (only e,f,s,d,c,x allowed)\n");
 	return (FALSE);
     }
     if (strlen(q) + strlen(tmp) > NCHAR) {
-      fprintf (stderr, "line too long");
+      gprint (GP_ERR, "line too long");
       return (FALSE);
     }
@@ -64,5 +64,5 @@
   p2 = strchr (p1, '%');
   if (p2 != (char *) NULL) {
-    fprintf (stderr, "mismatch between format and values\n");
+    gprint (GP_ERR, "mismatch between format and values\n");
     return (FALSE);
   }
@@ -70,9 +70,9 @@
   p2 = p1 + strlen (p1);
   if (strlen(q) + p2 - p1 > NCHAR) {
-    fprintf (stderr, "line too long");
+    gprint (GP_ERR, "line too long");
     return (FALSE);
   }
   memcpy (q, p1, p2-p1);
-  fprintf (GetOutfile(), "%s\n", line);
+  gprint (GP_LOG, "%s\n", line);
 
   return (TRUE);
Index: /trunk/Ohana/src/opihi/cmd.basic/getchr.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.basic/getchr.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.basic/getchr.c	(revision 7917)
@@ -8,5 +8,5 @@
 
   if ((argc != 3) && (argc != 4)) {
-    fprintf (stderr, "USAGE: strchr (string) (char) [var]\n");
+    gprint (GP_ERR, "USAGE: strchr (string) (char) [var]\n");
     return (FALSE);
   }
@@ -23,5 +23,5 @@
     set_int_variable (argv[3], pos);
   } else {
-    fprintf (stderr, "%d\n", pos);
+    gprint (GP_ERR, "%d\n", pos);
   }
   return (TRUE);
Index: /trunk/Ohana/src/opihi/cmd.basic/help.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.basic/help.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.basic/help.c	(revision 7917)
@@ -8,5 +8,5 @@
   helpdir = get_variable ("HELPDIR");
   if (helpdir == (char *) NULL) {
-    fprintf (stderr, "variable HELPDIR not found\n");
+    gprint (GP_ERR, "variable HELPDIR not found\n");
     return (FALSE);
   }
@@ -22,10 +22,10 @@
   f = fopen (file, "r");
   if (f == NULL) {
-    fprintf (stderr, "No help for: %s\n", argv[1]);
+    gprint (GP_ERR, "No help for: %s\n", argv[1]);
     return (FALSE);
   }
 
   while (scan_line (f, buff) != EOF)
-    fprintf (stdout, "%s\n", buff);
+    gprint (GP_LOG, "%s\n", buff);
 
   fclose (f);
Index: /trunk/Ohana/src/opihi/cmd.basic/input.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.basic/input.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.basic/input.c	(revision 7917)
@@ -9,5 +9,5 @@
 
   if (argc != 2) {
-    fprintf (stderr, "USAGE: input <filename>\n");
+    gprint (GP_ERR, "USAGE: input <filename>\n");
     return (FALSE);
   }
@@ -15,5 +15,5 @@
   infile = fopen (argv[1], "r");
   if (infile == NULL) {
-    fprintf (stderr, "no file %s\n", argv[1]); 
+    gprint (GP_ERR, "no file %s\n", argv[1]); 
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.basic/list.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.basic/list.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.basic/list.c	(revision 7917)
@@ -23,5 +23,5 @@
   if ((argc > 2) && (!strcmp (argv[2], "-split"))) {
     if (argc == 3) {
-      fprintf (stderr, "USAGE: list (root) -split (word) (word) ...\n");
+      gprint (GP_ERR, "USAGE: list (root) -split (word) (word) ...\n");
       return (FALSE);
     }
@@ -38,5 +38,5 @@
 
   if (argc != 2) {
-    fprintf (stderr, "USAGE: list (root) -- terminate with 'END'\n");
+    gprint (GP_ERR, "USAGE: list (root) -- terminate with 'END'\n");
     return (FALSE);
   }
@@ -56,5 +56,5 @@
       Nread = fread (&val[Nbytes], 1, 1023, f);
       if (Nread < 0) { 
-	fprintf (stderr, "error reading from command\n");
+	gprint (GP_ERR, "error reading from command\n");
 	done = TRUE;
       }
@@ -74,5 +74,5 @@
     
     if (status) {
-      fprintf (stderr, "warning: exit status of command %d\n", status);
+      gprint (GP_ERR, "warning: exit status of command %d\n", status);
     }
       
@@ -109,5 +109,5 @@
     if (input == (char *) NULL) {
       if (ThisList == 0)  {
-	fprintf (stderr, "end list with 'END'\n");
+	gprint (GP_ERR, "end list with 'END'\n");
 	continue;
       } else {
Index: /trunk/Ohana/src/opihi/cmd.basic/list_help.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.basic/list_help.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.basic/list_help.c	(revision 7917)
@@ -9,5 +9,5 @@
   sprintf (filename, "/tmp/status.XXXXXX");
   if ((fd = mkstemp (filename)) == -1) {
-    fprintf (stderr, "error opening output\n");
+    gprint (GP_ERR, "error opening output\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.basic/local.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.basic/local.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.basic/local.c	(revision 7917)
@@ -15,5 +15,5 @@
 
   if (argc < 2) {
-    fprintf (stderr, "USAGE: local (variable)\n");
+    gprint (GP_ERR, "USAGE: local (variable)\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.basic/macro.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.basic/macro.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.basic/macro.c	(revision 7917)
@@ -7,13 +7,13 @@
 
   if ((argc != 2) && (argc != 3) && (argc != 4)) {
-    fprintf (stderr, "USAGE: macro (cmd)\n");
-    fprintf (stderr, "  (cmd) can be one of:\n");
-    fprintf (stderr, "    (name)         -- create macro (name)\n");
-    fprintf (stderr, "    create (name)  -- create macro (name)\n");
-    fprintf (stderr, "    delete (name)  -- delete macro (name)\n");
-    fprintf (stderr, "    list   (name)  -- list macro (name)\n");
-    fprintf (stderr, "    edit   (name)  -- edit macro (name) <not working yet!> *\n");
-    fprintf (stderr, "    read   (name)  -- read macro(s) from file (name) <not working yet!> *\n");
-    fprintf (stderr, "    write  (name)  -- write macro (name) to a file <not working yet!> *\n");
+    gprint (GP_ERR, "USAGE: macro (cmd)\n");
+    gprint (GP_ERR, "  (cmd) can be one of:\n");
+    gprint (GP_ERR, "    (name)         -- create macro (name)\n");
+    gprint (GP_ERR, "    create (name)  -- create macro (name)\n");
+    gprint (GP_ERR, "    delete (name)  -- delete macro (name)\n");
+    gprint (GP_ERR, "    list   (name)  -- list macro (name)\n");
+    gprint (GP_ERR, "    edit   (name)  -- edit macro (name) <not working yet!> *\n");
+    gprint (GP_ERR, "    read   (name)  -- read macro(s) from file (name) <not working yet!> *\n");
+    gprint (GP_ERR, "    write  (name)  -- write macro (name) to a file <not working yet!> *\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.basic/memory.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.basic/memory.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.basic/memory.c	(revision 7917)
@@ -43,5 +43,5 @@
 
 usage:
-  fprintf (stderr, "USAGE: memory (all/leaks)\n");
+  gprint (GP_ERR, "USAGE: memory (all/leaks)\n");
   return (FALSE);
 }
Index: /trunk/Ohana/src/opihi/cmd.basic/output.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.basic/output.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.basic/output.c	(revision 7917)
@@ -5,22 +5,35 @@
 int output (int argc, char **argv) {
   
+  int N;
+  gpDest dest;
+  IOBuffer *buffer;
+
+  dest = GP_LOG;
+  if ((N = get_argument (argc, argv, "-err"))) {
+    dest = GP_ERR;
+    remove_argument (N, &argc, argv);
+  }
+
+  if ((N = get_argument (argc, argv, "-buffer"))) {
+    remove_argument (N, &argc, argv);
+    gprintSetBuffer (dest);
+    return (TRUE);
+  }
+    
+  if ((N = get_argument (argc, argv, "-dump"))) {
+    remove_argument (N, &argc, argv);
+    buffer = gprintGetBuffer (dest);
+    fprintf (STDERR, "buffer contents: \n");
+    fwrite (buffer[0].buffer, 1, buffer[0].Nbuffer, stderr);
+    fprintf (STDERR, "\n");
+    return (TRUE);
+  }
+    
   if (argc != 2) {
-    fprintf (stderr, "USAGE: output <filename>\n");
+    gprint (GP_ERR, "USAGE: output <filename>\n");
     return (FALSE);
   }
 
-  fflush (outfile);
-  if (outfile != stdout) fclose (outfile);
-  
-  /* we only use stdout, but let stderr be a synonym */
-  outfile = stdout;
-  if (strcmp (argv[1], "stdout") && strcmp (argv[1], "stderr")) {
-    outfile = fopen (argv[1], "a");
-  }
-
-  if (outfile == NULL) {
-    fprintf (stderr, "cannot open file %s\n", argv[1]);
-    outfile = stdout;
-  }
+  gprintSetFile (dest, argv[1]);
   return (TRUE);
 }
@@ -33,2 +46,6 @@
   outfile = stdout;
 }
+
+/* we could add the concept of saving the output to a buffer
+   then dumping to the target of the output stream.  not sure
+   what the command should look like... */
Index: /trunk/Ohana/src/opihi/cmd.basic/run_for.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.basic/run_for.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.basic/run_for.c	(revision 7917)
@@ -12,5 +12,5 @@
 
   if ((argc != 4) && (argc != 5)) {
-    fprintf (stderr, "USAGE: for (var) (start) (stop) [delta] -- terminate with 'END'\n");
+    gprint (GP_ERR, "USAGE: for (var) (start) (stop) [delta] -- terminate with 'END'\n");
     return (FALSE);
   }
@@ -40,8 +40,8 @@
     if (input == (char *) NULL) {
       if (ThisList == 0)  {
-	fprintf (stderr, "end loop with 'END'\n");
+	gprint (GP_ERR, "end loop with 'END'\n");
 	continue;
       } else {
-	fprintf (stderr, "misbalanced loop\n");
+	gprint (GP_ERR, "misbalanced loop\n");
 	for (j = 0; j < loop.Nlines; j++) {
 	  free (loop.line[j]);
Index: /trunk/Ohana/src/opihi/cmd.basic/run_if.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.basic/run_if.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.basic/run_if.c	(revision 7917)
@@ -12,9 +12,9 @@
 
   if ((argc != 2) && (argc != 3)) {
-    fprintf (stderr, "USAGE: if (conditional) [break], end with the word 'END'\n");
+    gprint (GP_ERR, "USAGE: if (conditional) [break], end with the word 'END'\n");
     return (FALSE);
   }
   if ((argc == 3) && strcmp (argv[2], "break")) {
-    fprintf (stderr, "USAGE: if (conditional) [break], end with the word 'END'\n");
+    gprint (GP_ERR, "USAGE: if (conditional) [break], end with the word 'END'\n");
     return (FALSE);
   }
@@ -55,9 +55,9 @@
 
     if ((ThisList == 0) && (input == (char *) NULL)) {
-      fprintf (stderr, "end if-block with 'END'\n");
+      gprint (GP_ERR, "end if-block with 'END'\n");
       continue;
     }
     if ((ThisList >  0) && (input == (char *) NULL)) {
-      fprintf (stderr, "missing 'END' in if-block\n");
+      gprint (GP_ERR, "missing 'END' in if-block\n");
       input = strcreate ("end");
     }
Index: /trunk/Ohana/src/opihi/cmd.basic/run_while.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.basic/run_while.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.basic/run_while.c	(revision 7917)
@@ -11,5 +11,5 @@
 
   if (argc != 2) {
-    fprintf (stderr, "USAGE: while (condition)\n");
+    gprint (GP_ERR, "USAGE: while (condition)\n");
     return (FALSE);
   }
@@ -38,8 +38,8 @@
     if (input == (char *) NULL) {
       if (ThisList == 0)  {
-	fprintf (stderr, "end 'while' loop with 'END'\n");
+	gprint (GP_ERR, "end 'while' loop with 'END'\n");
 	continue;
       } else {
-	fprintf (stderr, "misbalanced 'while' loop\n");
+	gprint (GP_ERR, "misbalanced 'while' loop\n");
 	for (j = 0; j < loop.Nlines; j++) {
 	  free (loop.line[j]);
Index: /trunk/Ohana/src/opihi/cmd.basic/scan.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.basic/scan.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.basic/scan.c	(revision 7917)
@@ -8,5 +8,5 @@
 
   if ((argc != 3) && (argc != 4)) {
-    fprintf (stderr, "USAGE: scan <filename> <var> [N]\n");
+    gprint (GP_ERR, "USAGE: scan <filename> <var> [N]\n");
     return (FALSE);
   }
@@ -16,5 +16,5 @@
     f = fopen (argv[1], "r");
     if (f == (FILE *) NULL) {
-      fprintf (stderr, "file %s not found\n", argv[1]);
+      gprint (GP_ERR, "file %s not found\n", argv[1]);
       return (FALSE);
     }
Index: /trunk/Ohana/src/opihi/cmd.basic/sleep.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.basic/sleep.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.basic/sleep.c	(revision 7917)
@@ -6,5 +6,5 @@
 
   if (argc < 2) {
-    fprintf (stderr, "usage: sleep N\n");
+    gprint (GP_ERR, "usage: sleep N\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.basic/sprintf.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.basic/sprintf.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.basic/sprintf.c	(revision 7917)
@@ -11,5 +11,5 @@
 
   if (argc < 3) {
-    fprintf (stderr, "USAGE: sprintf var format value value ...\n");
+    gprint (GP_ERR, "USAGE: sprintf var format value value ...\n");
     return (FALSE);
   }
@@ -26,9 +26,9 @@
     p2 = strchr (p1, '%');
     if (p2 == (char *) NULL) {
-      fprintf (stderr, "mismatch between format and values\n");
+      gprint (GP_ERR, "mismatch between format and values\n");
       return (FALSE);
     }
     if (strlen(q) + p2 - p1 > NCHAR) {
-      fprintf (stderr, "line too long");
+      gprint (GP_ERR, "line too long");
       return (FALSE);
     }
@@ -53,9 +53,9 @@
 	break;
       default:
-	fprintf (stderr, "syntax error in format (only e,f,s,d,c,x allowed)\n");
+	gprint (GP_ERR, "syntax error in format (only e,f,s,d,c,x allowed)\n");
 	return (FALSE);
     }
     if (strlen(q) + strlen(tmp) > NCHAR) {
-      fprintf (stderr, "line too long");
+      gprint (GP_ERR, "line too long");
       return (FALSE);
     }
@@ -66,5 +66,5 @@
   p2 = strchr (p1, '%');
   if (p2 != (char *) NULL) {
-    fprintf (stderr, "mismatch between format and values\n");
+    gprint (GP_ERR, "mismatch between format and values\n");
     return (FALSE);
   }
@@ -72,5 +72,5 @@
   p2 = p1 + strlen (p1);
   if (strlen(q) + p2 - p1 > NCHAR) {
-    fprintf (stderr, "line too long");
+    gprint (GP_ERR, "line too long");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.basic/strchr.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.basic/strchr.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.basic/strchr.c	(revision 7917)
@@ -8,5 +8,5 @@
 
   if ((argc != 3) && (argc != 4)) {
-    fprintf (stderr, "USAGE: strchr (string) (char) [var]\n");
+    gprint (GP_ERR, "USAGE: strchr (string) (char) [var]\n");
     return (FALSE);
   }
@@ -23,5 +23,5 @@
     set_variable (argv[3], pos);
   } else {
-    fprintf (stderr, "%d\n", pos);
+    gprint (GP_ERR, "%d\n", pos);
   }
   return (TRUE);
Index: /trunk/Ohana/src/opihi/cmd.basic/strlen.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.basic/strlen.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.basic/strlen.c	(revision 7917)
@@ -7,5 +7,5 @@
 
   if ((argc != 2) && (argc != 3)) {
-    fprintf (stderr, "USAGE: strchr (string) [var]\n");
+    gprint (GP_ERR, "USAGE: strchr (string) [var]\n");
     return (FALSE);
   }
@@ -16,5 +16,5 @@
     set_int_variable (argv[2], len);
   } else {
-    fprintf (stderr, "%d\n", len);
+    gprint (GP_ERR, "%d\n", len);
   }
   return (TRUE);
Index: /trunk/Ohana/src/opihi/cmd.basic/substr.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.basic/substr.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.basic/substr.c	(revision 7917)
@@ -7,5 +7,5 @@
 
   if ((argc != 4) && (argc != 5)) {
-    fprintf (stderr, "USAGE: substr (string) N1 N2 [var]\n");
+    gprint (GP_ERR, "USAGE: substr (string) N1 N2 [var]\n");
     return (FALSE);
   }
@@ -30,5 +30,5 @@
     set_str_variable (argv[4], string);
   } else {
-    fprintf (stderr, "%s\n", string);
+    gprint (GP_ERR, "%s\n", string);
   }
   free (string);
Index: /trunk/Ohana/src/opihi/cmd.basic/usleep.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.basic/usleep.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.basic/usleep.c	(revision 7917)
@@ -6,5 +6,5 @@
 
   if (argc < 2) {
-    fprintf (stderr, "usage: usleep N\n");
+    gprint (GP_ERR, "usage: usleep N\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.basic/wait.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.basic/wait.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.basic/wait.c	(revision 7917)
@@ -7,7 +7,7 @@
 
   for (i = 1; i < argc; i++) {
-    fprintf (stderr, "%s ", argv[i]);
+    gprint (GP_ERR, "%s ", argv[i]);
   }
-  fprintf (stderr, "\n");
+  gprint (GP_ERR, "\n");
   scan_line (stdin, buff);
   return (TRUE);
Index: /trunk/Ohana/src/opihi/cmd.basic/which.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.basic/which.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.basic/which.c	(revision 7917)
@@ -6,5 +6,5 @@
  
   if (argc != 2) {
-    fprintf (stderr, "USAGE: which <filename>\n");
+    gprint (GP_ERR, "USAGE: which <filename>\n");
     return (FALSE);
   }
@@ -13,5 +13,5 @@
   if (cmd == NULL) return (FALSE);
 
-  fprintf (stderr, "%-25s -- %s\n", cmd[0].name, cmd[0].help);
+  gprint (GP_ERR, "%-25s -- %s\n", cmd[0].name, cmd[0].help);
   return (TRUE);
 
Index: /trunk/Ohana/src/opihi/cmd.data/accum.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/accum.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/accum.c	(revision 7917)
@@ -16,6 +16,6 @@
 
   if ((argc != 6) && (argc != 7)) {
-    fprintf (stderr, "USAGE: accum <value> <vector> <key> start end [delta]\n");
-    fprintf (stderr, "  sum <value> in bins corresponding to the value of <key>\n");
+    gprint (GP_ERR, "USAGE: accum <value> <vector> <key> start end [delta]\n");
+    gprint (GP_ERR, "  sum <value> in bins corresponding to the value of <key>\n");
     return (FALSE);
   }
@@ -24,5 +24,5 @@
   if ((key = SelectVector (argv[3], OLDVECTOR, TRUE)) == NULL) return (FALSE);
   if (val[0].Nelements != key[0].Nelements) {
-    fprintf (stderr, "key and value don't match\n");
+    gprint (GP_ERR, "key and value don't match\n");
     return (FALSE);
   }
@@ -36,5 +36,5 @@
     delta = 1;
   if ((start == end) || (delta == 0)) {
-    fprintf (stderr, "error in value: %f to %f, %f\n", start, end, delta);
+    gprint (GP_ERR, "error in value: %f to %f, %f\n", start, end, delta);
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/applyfit.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/applyfit.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/applyfit.c	(revision 7917)
@@ -12,5 +12,5 @@
 
   if (argc != 3) {
-    fprintf (stderr, "USAGE: applyfit x y\n");
+    gprint (GP_ERR, "USAGE: applyfit x y\n");
     return (FALSE);
   }
@@ -18,5 +18,5 @@
   c = get_variable ("Cn");
   if (c == (char *) NULL) {
-    fprintf (stderr, "no fit available\n");
+    gprint (GP_ERR, "no fit available\n");
     return (FALSE);
   }
@@ -31,5 +31,5 @@
     c = get_variable (name);
     if (c == (char *) NULL) {
-      fprintf (stderr, "missing fit term %d\n", i);
+      gprint (GP_ERR, "missing fit term %d\n", i);
       return (FALSE);
     }
Index: /trunk/Ohana/src/opihi/cmd.data/applyfit2d.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/applyfit2d.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/applyfit2d.c	(revision 7917)
@@ -12,5 +12,5 @@
 
   if (argc != 4) {
-    fprintf (stderr, "USAGE: applyfit x y z\n");
+    gprint (GP_ERR, "USAGE: applyfit x y z\n");
     return (FALSE);
   }
@@ -18,5 +18,5 @@
   c = get_variable ("Cnn");
   if (c == (char *) NULL) {
-    fprintf (stderr, "no fit available\n");
+    gprint (GP_ERR, "no fit available\n");
     return (FALSE);
   }
@@ -34,5 +34,5 @@
       c = get_variable (name);
       if (c == (char *) NULL) {
-	fprintf (stderr, "missing fit term %d,%d\n", i, j);
+	gprint (GP_ERR, "missing fit term %d,%d\n", i, j);
 	return (FALSE);
       }
Index: /trunk/Ohana/src/opihi/cmd.data/box.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/box.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/box.c	(revision 7917)
@@ -53,5 +53,5 @@
       
  usage:
-  fprintf (stderr, "USAGE: box [-ticks NNNN] [-axis NNNN] [-labels NNNN]\n");
+  gprint (GP_ERR, "USAGE: box [-ticks NNNN] [-axis NNNN] [-labels NNNN]\n");
   return (FALSE);
 }
Index: /trunk/Ohana/src/opihi/cmd.data/center.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/center.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/center.c	(revision 7917)
@@ -16,5 +16,5 @@
 
   if ((argc != 3) && (argc != 4)) {
-    fprintf (stderr, "USAGE: center x y [zoom]\n");
+    gprint (GP_ERR, "USAGE: center x y [zoom]\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/clear.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/clear.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/clear.c	(revision 7917)
@@ -21,5 +21,5 @@
 
   if (argc != 1) {
-    fprintf (stderr, "USAGE: clear [-n Xgraph]\n");
+    gprint (GP_ERR, "USAGE: clear [-n Xgraph]\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/clip.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/clip.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/clip.c	(revision 7917)
@@ -27,5 +27,5 @@
 
   if ((argc != 6) && (!(DO_INF || DO_NAN))) {
-    fprintf (stderr, "USAGE: clip (buffer) [min Vmin max Vmax] [-inf val] [-nan val]\n");
+    gprint (GP_ERR, "USAGE: clip (buffer) [min Vmin max Vmax] [-inf val] [-nan val]\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/concat.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/concat.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/concat.c	(revision 7917)
@@ -10,6 +10,6 @@
   /** check basic syntax **/
   if (argc != 3) {
-    fprintf (stderr, "SYNTAX: concat (vector/value) vector\n");
-    fprintf (stderr, "  concatanate (vector/value) to vector\n");
+    gprint (GP_ERR, "SYNTAX: concat (vector/value) vector\n");
+    gprint (GP_ERR, "  concatanate (vector/value) to vector\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/contour.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/contour.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/contour.c	(revision 7917)
@@ -71,5 +71,5 @@
   
   if (argc != 5) {
-    fprintf (stderr, "USAGE: contour <buffer> X Y level\n");
+    gprint (GP_ERR, "USAGE: contour <buffer> X Y level\n");
     return (FALSE);
   }
@@ -97,5 +97,5 @@
 
   for (j = 1; j < Ny; j++) {
-    if (!(j%10)) fprintf (stderr, ".");
+    if (!(j%10)) gprint (GP_ERR, ".");
     for (i = 1; i < Nx; i++, v00++, v01++, v10++, v11++) {
 
Index: /trunk/Ohana/src/opihi/cmd.data/create.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/create.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/create.c	(revision 7917)
@@ -15,5 +15,5 @@
   
   if ((argc != 5) && (argc != 4)) {
-    fprintf (stderr, "USAGE: create vector start end [delta]\n");
+    gprint (GP_ERR, "USAGE: create vector start end [delta]\n");
     return (FALSE);
   }
@@ -26,5 +26,5 @@
   if (argc == 5) delta = atof (argv[4]);
   if ((start == end) || (delta == 0)) {
-    fprintf (stderr, "error in value: %f to %f, %f\n", start, end, delta);
+    gprint (GP_ERR, "error in value: %f to %f, %f\n", start, end, delta);
     return (FALSE);
   }
@@ -50,5 +50,5 @@
 
   if (argc != 4) {
-    fprintf (stderr, "USAGE: create -image buffer Nx Ny\n");
+    gprint (GP_ERR, "USAGE: create -image buffer Nx Ny\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/cursor.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/cursor.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/cursor.c	(revision 7917)
@@ -35,5 +35,5 @@
 
   if ((argc != 1) && (argc != 2)) {
-    fprintf (stderr, "USAGE: cursor [Npts] [-n window] [-g | -i]\n");
+    gprint (GP_ERR, "USAGE: cursor [Npts] [-n window] [-g | -i]\n");
     return (FALSE);
   }
@@ -60,5 +60,5 @@
 	Z = gfits_get_matrix_value (&buf[0].matrix, (int) X, (int) Y);
       }
-      fprintf (GetOutfile(), "%s %f %f  %f\n", key, X, Y, Z);
+      gprint (GP_LOG, "%s %f %f  %f\n", key, X, Y, Z);
     } else {
       XY_to_RD (&R, &D, X, Y, &graphmode.coords);
@@ -67,5 +67,5 @@
       sprintf (string, "D%s", key);
       set_variable (string, D);
-      fprintf (GetOutfile(), "%s %f %f\n", key, X, Y);
+      gprint (GP_LOG, "%s %f %f\n", key, X, Y);
     }
     if (!strcasecmp (key, "Q")) break;
Index: /trunk/Ohana/src/opihi/cmd.data/cut.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/cut.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/cut.c	(revision 7917)
@@ -22,5 +22,5 @@
 
   if (argc != 9) {
-    fprintf (stderr, "USAGE: cut <buffer> <X vector> <Y vector> <X|Y> sx sy nx ny\n");
+    gprint (GP_ERR, "USAGE: cut <buffer> <X vector> <Y vector> <X|Y> sx sy nx ny\n");
     return (FALSE);
   }
@@ -37,5 +37,5 @@
 
   if ((sx < 0) || (sy < 0) || (sx+nx > Nx) || (sy+ny > Ny)) {
-    fprintf (stderr, "region out of range\n");
+    gprint (GP_ERR, "region out of range\n");
     return (FALSE);
   }
@@ -111,5 +111,5 @@
 
   default:
-    fprintf (stderr, "<dir> can be X or Y\n");
+    gprint (GP_ERR, "<dir> can be X or Y\n");
     return (FALSE);
     break;
Index: /trunk/Ohana/src/opihi/cmd.data/delete.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/delete.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/delete.c	(revision 7917)
@@ -16,5 +16,5 @@
 
   if (argc < 2) {
-    fprintf (stderr, "USAGE: delete <obiect> [<object> ..]\n");
+    gprint (GP_ERR, "USAGE: delete <obiect> [<object> ..]\n");
     return (FALSE);
   }
@@ -24,5 +24,5 @@
     if (DeleteNamedVector (argv[i])) continue;
     if (DeleteNamedScalar (argv[i])) continue; 
-    if (!Quiet) fprintf (stderr, "can't find object %s\n", argv[i]);
+    if (!Quiet) gprint (GP_ERR, "can't find object %s\n", argv[i]);
   }
 
Index: /trunk/Ohana/src/opihi/cmd.data/device.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/device.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/device.c	(revision 7917)
@@ -24,8 +24,8 @@
   if (IsImage) {
     if (!GetImage (&Source, &Nsource)) return (FALSE);
-    fprintf (stderr, "kii %d\n", Nsource); 
+    gprint (GP_ERR, "kii %d\n", Nsource); 
   } else {
     if (!GetGraph (NULL, &Source, &Nsource)) return (FALSE);
-    fprintf (stderr, "kapa %d\n", Nsource); 
+    gprint (GP_ERR, "kapa %d\n", Nsource); 
   }
 
Index: /trunk/Ohana/src/opihi/cmd.data/dimendown.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/dimendown.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/dimendown.c	(revision 7917)
@@ -58,7 +58,7 @@
 
  usage:
-    fprintf (stderr, "USAGE: dimendown <buffer> <vector>\n");
-    fprintf (stderr, "  -x : fill vector with buffer x-coords\n");
-    fprintf (stderr, "  -y : fill vector with buffer y-coords\n");
+    gprint (GP_ERR, "USAGE: dimendown <buffer> <vector>\n");
+    gprint (GP_ERR, "  -x : fill vector with buffer x-coords\n");
+    gprint (GP_ERR, "  -y : fill vector with buffer y-coords\n");
     return (FALSE);
 }
Index: /trunk/Ohana/src/opihi/cmd.data/dimenup.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/dimenup.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/dimenup.c	(revision 7917)
@@ -9,5 +9,5 @@
 
   if (argc != 5) {
-    fprintf (stderr, "USAGE: dimenup <vector> <buffer> Nx Ny\n");
+    gprint (GP_ERR, "USAGE: dimenup <vector> <buffer> Nx Ny\n");
     return (FALSE);
   }
@@ -20,5 +20,5 @@
   Ny = atof (argv[4]);
   if (Npix != Nx * Ny) {
-    fprintf (stderr, "dimensions don't match\n");
+    gprint (GP_ERR, "dimensions don't match\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/dot.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/dot.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/dot.c	(revision 7917)
@@ -9,5 +9,5 @@
 
   if (argc != 3) {
-    fprintf (stderr, "USAGE: plot <x> <y>\n");
+    gprint (GP_ERR, "USAGE: plot <x> <y>\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/erase.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/erase.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/erase.c	(revision 7917)
@@ -15,6 +15,6 @@
 
   if (argc < 2) {
-    fprintf (stderr, "USAGE: erase (overlay) [overlay, overlay, ..] \n");
-    fprintf (stderr, " (overlay) may be: red (0), green (1), blue (2), yellow (3) or all\n");
+    gprint (GP_ERR, "USAGE: erase (overlay) [overlay, overlay, ..] \n");
+    gprint (GP_ERR, " (overlay) may be: red (0), green (1), blue (2), yellow (3) or all\n");
     return (FALSE);
   }
@@ -29,5 +29,5 @@
     }
     if (!KiiSelectOverlay (argv[i], &N)) {
-      fprintf (stderr, "%s is not a valid overlay\n", argv[i]);
+      gprint (GP_ERR, "%s is not a valid overlay\n", argv[i]);
       return (FALSE);
     }
Index: /trunk/Ohana/src/opihi/cmd.data/extract.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/extract.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/extract.c	(revision 7917)
@@ -10,5 +10,5 @@
 
   if (argc != 11) {
-    fprintf (stderr, "USAGE: extract <from> <to> sx sy nx ny Sx Sy Nx Ny\n");
+    gprint (GP_ERR, "USAGE: extract <from> <to> sx sy nx ny Sx Sy Nx Ny\n");
     return (FALSE);
   }
@@ -29,6 +29,6 @@
 
   if ((Sy + ny > Ny) || (Sx + nx > Nx)) {
-    fprintf (stderr, "mismatch between source and dest regions\n");
-    fprintf (stderr, "%d + %d > %d or %d + %d > %d\n", Sy, ny, Ny, Sx, nx, Nx);
+    gprint (GP_ERR, "mismatch between source and dest regions\n");
+    gprint (GP_ERR, "%d + %d > %d or %d + %d > %d\n", Sy, ny, Ny, Sx, nx, Nx);
     return (FALSE);
   }
@@ -38,14 +38,14 @@
       (sx > in[0].matrix.Naxis[0]) || 
       (sy > in[0].matrix.Naxis[1])) {
-    fprintf (stderr, "region outside of source image\n");
+    gprint (GP_ERR, "region outside of source image\n");
     return (FALSE);
   }
 
   if ((Sx + nx > Nx) || (Sy + ny > Ny)) {
-    fprintf (stderr, "source region larger than dest region\n");
+    gprint (GP_ERR, "source region larger than dest region\n");
     return (FALSE);
   }
   if ((Sx < 0) || (Sy < 0)) {
-    fprintf (stderr, "dest region out of range\n");
+    gprint (GP_ERR, "dest region out of range\n");
     return (FALSE);
   }
@@ -68,6 +68,6 @@
   } else {
     if ((out[0].header.Naxis[1] != Ny) || (out[0].header.Naxis[0] != Nx)) {
-      fprintf (stderr, "matrix sizes mis-matched\n");
-      fprintf (stderr, "%d x %d  vs  %d x %d\n", Nx, Ny, 
+      gprint (GP_ERR, "matrix sizes mis-matched\n");
+      gprint (GP_ERR, "%d x %d  vs  %d x %d\n", Nx, Ny, 
 	       out[0].header.Naxis[0], out[0].header.Naxis[1]);
       return (FALSE);
Index: /trunk/Ohana/src/opihi/cmd.data/fft1d.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/fft1d.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/fft1d.c	(revision 7917)
@@ -8,5 +8,5 @@
 
   if ((argc != 6) || (strcmp (argv[3], "to"))) {
-    fprintf (stderr, "USAGE: fft1d (real) (imag) to (real) (imag)\n");
+    gprint (GP_ERR, "USAGE: fft1d (real) (imag) to (real) (imag)\n");
     return (FALSE);
   }
@@ -24,10 +24,10 @@
   Npix = Ire[0].Nelements;
   if (!ZeroImaginary && (Npix != Iim[0].Nelements)) {
-    fprintf (stderr, "vector mismatch in size\n");
+    gprint (GP_ERR, "vector mismatch in size\n");
     return (FALSE);
   }
 
   if (!IsBinary (Npix)) {
-    fprintf (stderr, "Npix is not a binary number!\n");
+    gprint (GP_ERR, "Npix is not a binary number!\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/fft2d.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/fft2d.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/fft2d.c	(revision 7917)
@@ -15,5 +15,5 @@
 
   if ((argc != 6) || (strcmp (argv[3], "to"))) {
-    fprintf (stderr, "USAGE: fft2d (real) (imag) to (real) (imag)\n");
+    gprint (GP_ERR, "USAGE: fft2d (real) (imag) to (real) (imag)\n");
     return (FALSE);
   }
@@ -43,5 +43,5 @@
   Naxis[0] = Ny; Naxis[1] = Nx;
   if (!IsBinary (Npix)) {
-    fprintf (stderr, "dimensions are not binary!\n");
+    gprint (GP_ERR, "dimensions are not binary!\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/fit.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/fit.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/fit.c	(revision 7917)
@@ -42,5 +42,5 @@
 
   if (argc != 4) {
-    fprintf (stderr, "USAGE: fit x y order [-dy wt] [-quiet/-q] [-clip Nsigma Niter]\n");
+    gprint (GP_ERR, "USAGE: fit x y order [-dy wt] [-quiet/-q] [-clip Nsigma Niter]\n");
     return (FALSE);
   }
@@ -50,9 +50,9 @@
 
   if (xvec[0].Nelements != yvec[0].Nelements) {
-    fprintf (stderr, "vectors must have same length\n");
+    gprint (GP_ERR, "vectors must have same length\n");
     return (FALSE);
   }
   if (Weight && xvec[0].Nelements != dyvec[0].Nelements) {
-    fprintf (stderr, "vectors must have same length\n");
+    gprint (GP_ERR, "vectors must have same length\n");
     return (FALSE);
   }
@@ -166,9 +166,9 @@
       
   /* print & save basic fit parameters */
-  if (!Quiet) fprintf (stderr, "y = ");
+  if (!Quiet) gprint (GP_ERR, "y = ");
   for (i = 0; i < nterm; i++) {
     sprintf (name, "C%d", i);
     set_variable (name, b[i][0]);
-    if (!Quiet) fprintf (stderr, "%f x^%d ", b[i][0], i);
+    if (!Quiet) gprint (GP_ERR, "%f x^%d ", b[i][0], i);
   }
   sprintf (name, "Cn");
@@ -176,12 +176,12 @@
   
   /* print & save basic fit parameters */
-  if (!Quiet) fprintf (stderr, "\n");
-  if (!Quiet) fprintf (stderr, "    ");
+  if (!Quiet) gprint (GP_ERR, "\n");
+  if (!Quiet) gprint (GP_ERR, "    ");
   for (i = 0; i < nterm; i++) {
     sprintf (name, "dC%d", i);
     set_variable (name, sqrt(c[i][i]));
-    if (!Quiet) fprintf (stderr, "%f     ", sqrt(c[i][i]));
-  }
-  if (!Quiet) fprintf (stderr, "\n");
+    if (!Quiet) gprint (GP_ERR, "%f     ", sqrt(c[i][i]));
+  }
+  if (!Quiet) gprint (GP_ERR, "\n");
 
   set_variable ("dC", sigma);
Index: /trunk/Ohana/src/opihi/cmd.data/fit2d.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/fit2d.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/fit2d.c	(revision 7917)
@@ -48,5 +48,5 @@
 
   if (argc != 5) {
-    fprintf (stderr, "USAGE: fit x y z order [-dz wt]\n");
+    gprint (GP_ERR, "USAGE: fit x y z order [-dz wt]\n");
     return (FALSE);
   }
@@ -57,13 +57,13 @@
 
   if (xvec[0].Nelements != yvec[0].Nelements) {
-    fprintf (stderr, "vectors must have same length\n");
+    gprint (GP_ERR, "vectors must have same length\n");
     return (FALSE);
   }
   if (xvec[0].Nelements != zvec[0].Nelements) {
-    fprintf (stderr, "vectors must have same length\n");
+    gprint (GP_ERR, "vectors must have same length\n");
     return (FALSE);
   }
   if (Weight && xvec[0].Nelements != dzvec[0].Nelements) {
-    fprintf (stderr, "vectors must have same length\n");
+    gprint (GP_ERR, "vectors must have same length\n");
     return (FALSE);
   }
@@ -160,20 +160,20 @@
     }
 
-    fprintf (stderr, "matrix:\n");
+    gprint (GP_ERR, "matrix:\n");
     for (k = 0; k < wterm; k++) {
 	for (K = 0; K < wterm; K++) {
-	    fprintf (stderr, "%f ", c[k][K]);
-	}
-	fprintf (stderr, "\n");
+	    gprint (GP_ERR, "%f ", c[k][K]);
+	}
+	gprint (GP_ERR, "\n");
     }
 
     gaussj (c, wterm, b, 1);
 
-    fprintf (stderr, "inverse:\n");
+    gprint (GP_ERR, "inverse:\n");
     for (k = 0; k < wterm; k++) {
 	for (K = 0; K < wterm; K++) {
-	    fprintf (stderr, "%f ", c[k][K]);
-	}
-	fprintf (stderr, "\n");
+	    gprint (GP_ERR, "%f ", c[k][K]);
+	}
+	gprint (GP_ERR, "\n");
     }
 
@@ -182,5 +182,5 @@
       for (i = ny = 0; ny < nterm; ny++) {
 	for (nx = 0; nx < nterm - ny; nx++, i++) {
-	  fprintf (stderr, "x^%d y^%d: %g\n", nx, ny, b[i][0]);
+	  gprint (GP_ERR, "x^%d y^%d: %g\n", nx, ny, b[i][0]);
 	}
       }
@@ -228,5 +228,5 @@
     maxsigma = ClipNSigma * sigma;
 
-    if (VERBOSE) fprintf (stderr, "mean: %g, sigma: %g, maxsigma: %g\n", mean, sigma, maxsigma);
+    if (VERBOSE) gprint (GP_ERR, "mean: %g, sigma: %g, maxsigma: %g\n", mean, sigma, maxsigma);
 
     /* mask outlier points */
@@ -245,13 +245,13 @@
       }	
     }
-    if (VERBOSE) fprintf (stderr, "pass: %d, Nmask: %d\n", N, Nmask);
-  }
-
-  if (!Quiet) fprintf (stderr, "z = ");
+    if (VERBOSE) gprint (GP_ERR, "pass: %d, Nmask: %d\n", N, Nmask);
+  }
+
+  if (!Quiet) gprint (GP_ERR, "z = ");
   for (N = ny = 0; ny < nterm; ny++) {
     for (nx = 0; nx < nterm - ny; nx++, N++) {
       sprintf (name, "CX%dY%d", nx, ny);
       set_variable (name, b[N][0]);
-      if (!Quiet) fprintf (stderr, "%f x^%d y^%d  ", b[N][0], nx, ny);
+      if (!Quiet) gprint (GP_ERR, "%f x^%d y^%d  ", b[N][0], nx, ny);
     }
   }
@@ -259,5 +259,5 @@
   set_variable (name, (double) order);
   
-  if (!Quiet) fprintf (stderr, "\n");
+  if (!Quiet) gprint (GP_ERR, "\n");
 
   /* free internal data */
Index: /trunk/Ohana/src/opihi/cmd.data/gaussdeviate.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/gaussdeviate.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/gaussdeviate.c	(revision 7917)
@@ -25,5 +25,5 @@
 
  usage:
-  fprintf (stderr, "USAGE: gaussdeviate (vector) Npts mean sigma\n");
+  gprint (GP_ERR, "USAGE: gaussdeviate (vector) Npts mean sigma\n");
   return (FALSE);
     
@@ -56,5 +56,5 @@
 
  usage:
-  fprintf (stderr, "USAGE: gaussintegral Npts mean sigma\n");
+  gprint (GP_ERR, "USAGE: gaussintegral Npts mean sigma\n");
   return (FALSE);
     
Index: /trunk/Ohana/src/opihi/cmd.data/gaussj.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/gaussj.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/gaussj.c	(revision 7917)
@@ -51,7 +51,7 @@
 
  usage:
-  fprintf (stderr, "USAGE: gaussj A B\n");
-  fprintf (stderr, "  solves Ax = B, returns 1/A in A and x in B\n");
-  fprintf (stderr, "  A must be square, B same dimensions\n");
+  gprint (GP_ERR, "USAGE: gaussj A B\n");
+  gprint (GP_ERR, "  solves Ax = B, returns 1/A in A and x in B\n");
+  gprint (GP_ERR, "  A must be square, B same dimensions\n");
   return (FALSE);
     
Index: /trunk/Ohana/src/opihi/cmd.data/grid.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/grid.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/grid.c	(revision 7917)
@@ -25,5 +25,5 @@
 
   if (argc > 1) {
-    fprintf (stderr, "USAGE: grid [-n graph]\n");
+    gprint (GP_ERR, "USAGE: grid [-n graph]\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/gridify.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/gridify.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/gridify.c	(revision 7917)
@@ -17,5 +17,5 @@
 
   if (argc != 11) {
-    fprintf (stderr, "USAGE: gridify x y z buffer Xmin Xmax dX Ymin Ymax dY\n");
+    gprint (GP_ERR, "USAGE: gridify x y z buffer Xmin Xmax dX Ymin Ymax dY\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/histogram.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/histogram.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/histogram.c	(revision 7917)
@@ -8,5 +8,5 @@
 
   if ((argc != 6) && (argc != 5)) {
-    fprintf (stderr, "USAGE: hist invec outvec start end [delta]\n");
+    gprint (GP_ERR, "USAGE: hist invec outvec start end [delta]\n");
     return (FALSE);
   }
@@ -18,5 +18,5 @@
  
   if ((start == end) || (delta == 0)) {
-    fprintf (stderr, "error in value: %f to %f, %f\n", start, end, delta);
+    gprint (GP_ERR, "error in value: %f to %f, %f\n", start, end, delta);
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/imcut.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/imcut.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/imcut.c	(revision 7917)
@@ -10,5 +10,5 @@
 
   if (argc != 8) {
-    fprintf (stderr, "USAGE: cut <buffer> <X vector> <Y vector> xs ys xe ye\n");
+    gprint (GP_ERR, "USAGE: cut <buffer> <X vector> <Y vector> xs ys xe ye\n");
     return (FALSE);
   }
@@ -53,13 +53,13 @@
 
  usage: 
-  fprintf (stderr, "USAGE: circstats <buffer> x y radius\n");
+  gprint (GP_ERR, "USAGE: circstats <buffer> x y radius\n");
   return (FALSE);
 
  range:
-  fprintf (stderr, "ERROR: coordinates out of range\n");
+  gprint (GP_ERR, "ERROR: coordinates out of range\n");
   return (FALSE);
 
  missed:
-  fprintf (stderr, "ERROR: buffer not found\n");
+  gprint (GP_ERR, "ERROR: buffer not found\n");
   return (FALSE);
 }
Index: /trunk/Ohana/src/opihi/cmd.data/imhist.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/imhist.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/imhist.c	(revision 7917)
@@ -34,5 +34,5 @@
 
   if (argc != 4) {
-    fprintf (stderr, "USAGE: histogram <buffer> <x> <y> [-region sx sy nx ny] [-range min max]\n");
+    gprint (GP_ERR, "USAGE: histogram <buffer> <x> <y> [-region sx sy nx ny] [-range min max]\n");
     return (FALSE);
   }
@@ -49,5 +49,5 @@
       (sx+nx > buf[0].matrix.Naxis[0]) || 
       (sy+ny > buf[0].matrix.Naxis[1])) {
-    fprintf (stderr, "region out of range\n");
+    gprint (GP_ERR, "region out of range\n");
     return (FALSE);
   }
@@ -63,5 +63,5 @@
   if ((max == 0) && (min == 0)) {
     max = min = *((float *)(buf[0].matrix.buffer) + sy*buf[0].matrix.Naxis[0] + sx);
-    fprintf (stderr, "sx: %d, sy: %d, first: %f\n", sx, sy, max);
+    gprint (GP_ERR, "sx: %d, sy: %d, first: %f\n", sx, sy, max);
     for (j = sy; j < sy + ny; j++) {
       V = (float *)(buf[0].matrix.buffer) + j*buf[0].matrix.Naxis[0] + sx; 
@@ -73,5 +73,5 @@
   }
   dx = (max - min) / 1024.0;
-  fprintf (stderr, "max %f, min %f, dx %f\n", max, min, dx);
+  gprint (GP_ERR, "max %f, min %f, dx %f\n", max, min, dx);
   
   vec1[0].Nelements = 1025;
Index: /trunk/Ohana/src/opihi/cmd.data/imsmooth.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/imsmooth.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/imsmooth.c	(revision 7917)
@@ -17,5 +17,5 @@
 
   if (argc != 3) {
-    fprintf (stderr, "USAGE: imsmooth (input) sigma\n");
+    gprint (GP_ERR, "USAGE: imsmooth (input) sigma\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/integrate.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/integrate.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/integrate.c	(revision 7917)
@@ -15,5 +15,5 @@
 
   if (argc != 5) {
-    fprintf (stderr, "USAGE: integrate <x> <y> start end\n");
+    gprint (GP_ERR, "USAGE: integrate <x> <y> start end\n");
     return (FALSE);
   }
@@ -39,5 +39,5 @@
   set_variable ("sum", value); 
   set_variable ("range", range);
-  if (VERBOSE) fprintf (GetOutfile(), "sum: %f\n", value);
+  if (VERBOSE) gprint (GP_LOG, "sum: %f\n", value);
   return (TRUE);
 }
Index: /trunk/Ohana/src/opihi/cmd.data/interpolate.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/interpolate.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/interpolate.c	(revision 7917)
@@ -9,8 +9,8 @@
   /** check basic syntax **/
   if (argc != 5) {
-    fprintf (stderr, "USAGE: interpolate Xi Yi Xo Yo\n");
-    fprintf (stderr, "  Xi Yi - sorted reference vectors\n");
-    fprintf (stderr, "  Xo    - output positions\n");
-    fprintf (stderr, "  Yo    - output values\n");
+    gprint (GP_ERR, "USAGE: interpolate Xi Yi Xo Yo\n");
+    gprint (GP_ERR, "  Xi Yi - sorted reference vectors\n");
+    gprint (GP_ERR, "  Xo    - output positions\n");
+    gprint (GP_ERR, "  Yo    - output values\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/jpeg.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/jpeg.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/jpeg.c	(revision 7917)
@@ -7,5 +7,5 @@
   
   if ((N = get_argument (argc, argv, "--help"))) {
-    fprintf (stderr, "USAGE: jpeg [-name file] [-g | -i] [-n device] [-ppm]\n");
+    gprint (GP_ERR, "USAGE: jpeg [-name file] [-g | -i] [-n device] [-ppm]\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/kern.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/kern.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/kern.c	(revision 7917)
@@ -13,8 +13,8 @@
 
   if (argc != 3) {
-    fprintf (stderr, "USAGE: kern buffer (file)\n");
-    fprintf (stderr, "USAGE: kern buffer (list)\n");
-    fprintf (stderr, "USAGE: kern buffer -\n");
-    fprintf (stderr, "kernel file contains a 3x3 matrix for convolution\n");
+    gprint (GP_ERR, "USAGE: kern buffer (file)\n");
+    gprint (GP_ERR, "USAGE: kern buffer (list)\n");
+    gprint (GP_ERR, "USAGE: kern buffer -\n");
+    gprint (GP_ERR, "kernel file contains a 3x3 matrix for convolution\n");
     return (FALSE);
   }
@@ -27,5 +27,5 @@
       status = scan_line (stdin, line);
       if (status == EOF) {
-	fprintf (stderr, "kernel should be a 3x3 matrix...\n");
+	gprint (GP_ERR, "kernel should be a 3x3 matrix...\n");
 	return (FALSE);
       }
@@ -42,5 +42,5 @@
     f = fopen (argv[2], "r");
     if (f == NULL) {
-      fprintf (stderr, "file not found: %s\n", argv[2]);
+      gprint (GP_ERR, "file not found: %s\n", argv[2]);
       return (FALSE);
     }
@@ -48,5 +48,5 @@
       status = scan_line (f, line);
       if (status == EOF) {
-	fprintf (stderr, "kernel should be a 3x3 matrix...\n");
+	gprint (GP_ERR, "kernel should be a 3x3 matrix...\n");
 	fclose (f);
       }
@@ -60,5 +60,5 @@
   }
   if (atoi (list) != 9) {
-    fprintf (stderr, "kernel should be a 3x3 matrix...\n");
+    gprint (GP_ERR, "kernel should be a 3x3 matrix...\n");
     return (FALSE);
   }
@@ -68,5 +68,5 @@
     list = get_variable (line);
     if (list == (char *) NULL) {
-      fprintf (stderr, "kernel should be a 3x3 matrix...\n");
+      gprint (GP_ERR, "kernel should be a 3x3 matrix...\n");
       return (FALSE);
     }
@@ -77,5 +77,5 @@
 
  have_kernel:
-  fprintf (stderr, "working...");
+  gprint (GP_ERR, "working...");
   
   /* create output buffer */
@@ -90,5 +90,5 @@
   for (n = 0; n < 3; n++) {
     for (m = 0; m < 3; m++) {
-      fprintf (stderr, "%d", n*3 + m + 1);
+      gprint (GP_ERR, "%d", n*3 + m + 1);
       val = kernel[n][m];
       ob = out_buff + NX + 1;
@@ -99,5 +99,5 @@
     }
   }
-  fprintf (stderr, "(done)\n");
+  gprint (GP_ERR, "(done)\n");
 
   free (in_buff);
Index: /trunk/Ohana/src/opihi/cmd.data/keyword.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/keyword.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/keyword.c	(revision 7917)
@@ -76,12 +76,12 @@
 
   if (!((argc == 3) || (!N && argc == 4))) {
-    fprintf (stderr, "USAGE: keyword <buffer> (KEYWORD) [variable] [-d] [-w(mode) value]\n");
-    fprintf (stderr, " -w modes: \n");
-    fprintf (stderr, "  -w  - string\n");
-    fprintf (stderr, "  -wf - float\n");
-    fprintf (stderr, "  -wd - int\n");
-    fprintf (stderr, "  -wb - boolean\n");
-    fprintf (stderr, "  -wc - comment\n");
-    fprintf (stderr, "  -ws - full string comment\n");
+    gprint (GP_ERR, "USAGE: keyword <buffer> (KEYWORD) [variable] [-d] [-w(mode) value]\n");
+    gprint (GP_ERR, " -w modes: \n");
+    gprint (GP_ERR, "  -w  - string\n");
+    gprint (GP_ERR, "  -wf - float\n");
+    gprint (GP_ERR, "  -wd - int\n");
+    gprint (GP_ERR, "  -wb - boolean\n");
+    gprint (GP_ERR, "  -wc - comment\n");
+    gprint (GP_ERR, "  -ws - full string comment\n");
     return (FALSE);
   }
@@ -103,5 +103,5 @@
     case BOOLEAN:
       if (strcasecmp (line, "T") && strcasecmp (line, "TRUE") && strcasecmp (line, "F") && strcasecmp (line, "FALSE")) {
-	fprintf (stderr, "syntax error in boolean value\n");
+	gprint (GP_ERR, "syntax error in boolean value\n");
 	return (FALSE);
       }
@@ -130,5 +130,5 @@
       set_variable (argv[3], value);
     else 
-      fprintf (GetOutfile(), "%s: %f\n", argv[2], value);
+      gprint (GP_LOG, "%s: %f\n", argv[2], value);
     return (TRUE);
   } 
@@ -140,5 +140,5 @@
       set_str_variable (argv[3], line);
     else 
-      fprintf (GetOutfile(), "%s: %s\n", argv[2], line);
+      gprint (GP_LOG, "%s: %s\n", argv[2], line);
     return (TRUE);
   }    
@@ -150,9 +150,9 @@
     set_str_variable (argv[3], line);
   else 
-    fprintf (GetOutfile(), "%s: %s\n", argv[2], line);
+    gprint (GP_LOG, "%s: %s\n", argv[2], line);
   return (TRUE);
 
  failure: 
-  if (!soft) fprintf (stderr, "keyword %s not found\n", argv[2]);
+  if (!soft) gprint (GP_ERR, "keyword %s not found\n", argv[2]);
   return (soft);
 }
Index: /trunk/Ohana/src/opihi/cmd.data/labels.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/labels.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/labels.c	(revision 7917)
@@ -9,22 +9,22 @@
 
   if (get_argument (argc, argv, "-h")) {
-    fprintf (stderr, "label options: \n");
-    fprintf (stderr, " -x : bottom-center\n");
-    fprintf (stderr, " +x : top-center\n");
-    fprintf (stderr, " -y : right-side\n");
-    fprintf (stderr, " +y : left-side\n\n");
+    gprint (GP_ERR, "label options: \n");
+    gprint (GP_ERR, " -x : bottom-center\n");
+    gprint (GP_ERR, " +x : top-center\n");
+    gprint (GP_ERR, " -y : right-side\n");
+    gprint (GP_ERR, " +y : left-side\n\n");
 
-    fprintf (stderr, " -ul : upper-left corner\n");
-    fprintf (stderr, " -ll : lower-left corner\n");
-    fprintf (stderr, " -ur : upper-right corner\n");
-    fprintf (stderr, " -lr : lower-right corner\n\n");
+    gprint (GP_ERR, " -ul : upper-left corner\n");
+    gprint (GP_ERR, " -ll : lower-left corner\n");
+    gprint (GP_ERR, " -ur : upper-right corner\n");
+    gprint (GP_ERR, " -lr : lower-right corner\n\n");
 
-    fprintf (stderr, " -fn (font) (size) : set font and size\n");
-    fprintf (stderr, "   (font) : courier, helvetica, times, symbol\n\n");
-    fprintf (stderr, " label special characters:\n");
-    fprintf (stderr, " ^ : superscript\n");
-    fprintf (stderr, " _ : subscript\n");
-    fprintf (stderr, " | : default script \n");
-    fprintf (stderr, " &c, &h, &t, &s : set font\n\n");
+    gprint (GP_ERR, " -fn (font) (size) : set font and size\n");
+    gprint (GP_ERR, "   (font) : courier, helvetica, times, symbol\n\n");
+    gprint (GP_ERR, " label special characters:\n");
+    gprint (GP_ERR, " ^ : superscript\n");
+    gprint (GP_ERR, " _ : subscript\n");
+    gprint (GP_ERR, " | : default script \n");
+    gprint (GP_ERR, " &c, &h, &t, &s : set font\n\n");
     return (FALSE);
   }
@@ -88,5 +88,5 @@
 
   if (argc != 1) {
-    fprintf (stderr, "USAGE: labels [-x] [-y] [+x] [+y] [-ul] [-ur] [-ll] [-lr]\n");
+    gprint (GP_ERR, "USAGE: labels [-x] [-y] [+x] [+y] [-ul] [-ur] [-ll] [-lr]\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/limits.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/limits.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/limits.c	(revision 7917)
@@ -25,5 +25,5 @@
 
   if (argc == 1) {
-    fprintf (stderr, "limits: %f %f %f %f [-a] [-n Xgraph]\n",
+    gprint (GP_ERR, "limits: %f %f %f %f [-a] [-n Xgraph]\n",
 	     graphmode.xmin, graphmode.xmax,
 	     graphmode.ymin, graphmode.ymax);
@@ -61,10 +61,10 @@
   }
 
-  fprintf (stderr, "USAGE: limits [xrange] [yrange]\n");
-  fprintf (stderr, " [range] may be either [min max] or a vector\n");
+  gprint (GP_ERR, "USAGE: limits [xrange] [yrange]\n");
+  gprint (GP_ERR, " [range] may be either [min max] or a vector\n");
   return (FALSE);
 
  error:
-  fprintf (stderr, "error in vectors\n");
+  gprint (GP_ERR, "error in vectors\n");
   return (FALSE);
 
Index: /trunk/Ohana/src/opihi/cmd.data/line.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/line.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/line.c	(revision 7917)
@@ -33,5 +33,5 @@
 
   if (argc != 3) {
-    fprintf (stderr, "USAGE: plot <x> <y>\n");
+    gprint (GP_ERR, "USAGE: plot <x> <y>\n");
     return (FALSE);
   }
@@ -51,5 +51,5 @@
   if ((vecy = SelectVector (argv[2], OLDVECTOR, TRUE)) == NULL) return (FALSE);
   if (vecy[0].Nelements != vecy[0].Nelements) {
-    fprintf (stderr, "vectors %s and %s not the same length\n", argv[1], argv[2]);
+    gprint (GP_ERR, "vectors %s and %s not the same length\n", argv[1], argv[2]);
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/list_header.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/list_header.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/list_header.c	(revision 7917)
@@ -18,5 +18,5 @@
 
   if (argc != 2) {
-    fprintf (stderr, "USAGE: header <buffer> [-w filename]\n");
+    gprint (GP_ERR, "USAGE: header <buffer> [-w filename]\n");
     return (FALSE);
   }
@@ -27,5 +27,5 @@
     f = fopen (filename, "r");
     if (f == (FILE *) NULL) {
-      fprintf (stderr, "file %s not found\n", filename);
+      gprint (GP_ERR, "file %s not found\n", filename);
       return (FALSE);
     }
@@ -67,5 +67,5 @@
     Nbytes = fwrite (p, sizeof(char), nbytes, f);
     if (Nbytes != nbytes) {
-      fprintf (stderr, "warning: not all printed...\n");
+      gprint (GP_ERR, "warning: not all printed...\n");
     }
     free (p);
@@ -78,2 +78,4 @@
 
 }
+
+/* XXX this function is not written in the context of the output file/buffer */
Index: /trunk/Ohana/src/opihi/cmd.data/load.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/load.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/load.c	(revision 7917)
@@ -29,6 +29,6 @@
 
   if (argc != 3) {
-    fprintf (stderr, "USAGE: load (overlay) <filename>\n [-c] [-n]");
-    fprintf (stderr, "  -c: read overlay in celestial coords\n");
+    gprint (GP_ERR, "USAGE: load (overlay) <filename>\n [-c] [-n]");
+    gprint (GP_ERR, "  -c: read overlay in celestial coords\n");
     return (FALSE);
   }
@@ -40,5 +40,5 @@
   }
   if (f == NULL) {
-    fprintf (stderr, "can't find file %s\n", argv[2]);
+    gprint (GP_ERR, "can't find file %s\n", argv[2]);
     return (FALSE);
   }
@@ -79,5 +79,5 @@
     case 3:
       if (strcmp (type, "TEXT")) {
-	fprintf (stderr, "syntax error in line:\n   %s\n", line);
+	gprint (GP_ERR, "syntax error in line:\n   %s\n", line);
 	continue;
       }
@@ -133,5 +133,5 @@
   free (overlay);
 
-  fprintf (stderr, "loaded %d objects\n", Noverlay);
+  gprint (GP_ERR, "loaded %d objects\n", Noverlay);
 
   if (f != stdin) {
Index: /trunk/Ohana/src/opihi/cmd.data/mcreate.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/mcreate.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/mcreate.c	(revision 7917)
@@ -7,5 +7,5 @@
 
   if (argc != 4) {
-    fprintf (stderr, "USAGE: mcreate <buffer> Nx Ny\n");
+    gprint (GP_ERR, "USAGE: mcreate <buffer> Nx Ny\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/medacc.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/medacc.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/medacc.c	(revision 7917)
@@ -9,5 +9,5 @@
 
   if ((argc != 6) && (argc != 7)) {
-    fprintf (stderr, "USAGE: medacc <value> <vector> <key> start end [delta]\n");
+    gprint (GP_ERR, "USAGE: medacc <value> <vector> <key> start end [delta]\n");
     return (FALSE);
   }
@@ -16,5 +16,5 @@
   if ((key = SelectVector (argv[3], OLDVECTOR, TRUE)) == NULL) return (FALSE);
   if (val[0].Nelements != key[0].Nelements) {
-    fprintf (stderr, "key and value don't match\n");
+    gprint (GP_ERR, "key and value don't match\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/mget.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/mget.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/mget.c	(revision 7917)
@@ -9,5 +9,5 @@
 
   if (argc != 5) {
-    fprintf (stderr, "USAGE: mget <buffer> <vector> <-x/-y> <N>\n");
+    gprint (GP_ERR, "USAGE: mget <buffer> <vector> <-x/-y> <N>\n");
     return (FALSE);
   }
@@ -17,5 +17,5 @@
 
   if (strcasecmp (argv[3], "-x") && strcasecmp (argv[3], "-y")) {
-    fprintf (stderr, "USAGE: mget <buffer> <vector> <-x/-y> <N>\n");
+    gprint (GP_ERR, "USAGE: mget <buffer> <vector> <-x/-y> <N>\n");
     return (FALSE);
   }
@@ -27,5 +27,5 @@
   Nset = atof (argv[4]);
   if (Nset < 0) {
-    fprintf (stderr, "selection out of range\n");
+    gprint (GP_ERR, "selection out of range\n");
     return (FALSE);
   }
@@ -35,5 +35,5 @@
     REALLOCATE (vec[0].elements, float, Npix);
     if (Nset >= Ny) {
-      fprintf (stderr, "row out of range\n");
+      gprint (GP_ERR, "row out of range\n");
       return (FALSE);
     }
@@ -48,5 +48,5 @@
     REALLOCATE (vec[0].elements, float, Npix);
     if (Nset >= Nx) {
-      fprintf (stderr, "column out of range\n");
+      gprint (GP_ERR, "column out of range\n");
       return (FALSE);
     }
Index: /trunk/Ohana/src/opihi/cmd.data/minterpolate.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/minterpolate.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/minterpolate.c	(revision 7917)
@@ -19,5 +19,5 @@
 
   if (argc != 4) {
-    fprintf (stderr, "USAGE: minterpolate <from> <to> scale [-extrapolate]\n");
+    gprint (GP_ERR, "USAGE: minterpolate <from> <to> scale [-extrapolate]\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/mset.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/mset.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/mset.c	(revision 7917)
@@ -9,5 +9,5 @@
 
   if (argc != 5) {
-    fprintf (stderr, "USAGE: mset <buffer> <vector> <-x/-y> <N>\n");
+    gprint (GP_ERR, "USAGE: mset <buffer> <vector> <-x/-y> <N>\n");
     return (FALSE);
   }
@@ -17,5 +17,5 @@
 
   if (strcasecmp (argv[3], "-x") && strcasecmp (argv[3], "-y")) {
-    fprintf (stderr, "USAGE: mset <buffer> <vector> <-x/-y> <N>\n");
+    gprint (GP_ERR, "USAGE: mset <buffer> <vector> <-x/-y> <N>\n");
     return (FALSE);
   }
@@ -28,5 +28,5 @@
   Nset = atof (argv[4]);
   if (Nset < 0) {
-    fprintf (stderr, "selection out of range\n");
+    gprint (GP_ERR, "selection out of range\n");
     return (FALSE);
   }
@@ -34,9 +34,9 @@
   if (xdir) {
     if (Nx != Npix) {
-      fprintf (stderr, "dimensions don't match\n");
+      gprint (GP_ERR, "dimensions don't match\n");
       return (FALSE);
     }
     if (Nset >= Ny) {
-      fprintf (stderr, "row out of range\n");
+      gprint (GP_ERR, "row out of range\n");
       return (FALSE);
     }
@@ -49,9 +49,9 @@
   } else {
     if (Ny != Npix) {
-      fprintf (stderr, "dimensions don't match\n");
+      gprint (GP_ERR, "dimensions don't match\n");
       return (FALSE);
     }
     if (Nset >= Nx) {
-      fprintf (stderr, "column out of range\n");
+      gprint (GP_ERR, "column out of range\n");
       return (FALSE);
     }
Index: /trunk/Ohana/src/opihi/cmd.data/peak.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/peak.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/peak.c	(revision 7917)
@@ -15,5 +15,5 @@
 
   if ((argc != 5) && (argc != 3)) {
-    fprintf (stderr, "USAGE: peak <x> <y> [start end]\n");
+    gprint (GP_ERR, "USAGE: peak <x> <y> [start end]\n");
     return (FALSE);
   }
@@ -50,5 +50,5 @@
   set_variable ("peaknum", imax);
 
-  if (!QUIET) fprintf (GetOutfile(), "peak %f @ %f (%d)\n", ymax, xmax, imax);
+  if (!QUIET) gprint (GP_LOG, "peak %f @ %f (%d)\n", ymax, xmax, imax);
 
   return (TRUE);
Index: /trunk/Ohana/src/opihi/cmd.data/periodogram.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/periodogram.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/periodogram.c	(revision 7917)
@@ -17,5 +17,5 @@
 
   if (argc != 7) {
-    fprintf (stderr, "USAGE: periodogram (time) (flux) (minP) (maxP) (period) (power)\n");
+    gprint (GP_ERR, "USAGE: periodogram (time) (flux) (minP) (maxP) (period) (power)\n");
     return (FALSE);
   }
@@ -46,9 +46,9 @@
   var = var / (Npt - 1);
 
-  if (VERBOSE) fprintf (stderr, "mean: %f, var: %f, minT: %f, maxT: %f\n", mean, var, minT, maxT);
+  if (VERBOSE) gprint (GP_ERR, "mean: %f, var: %f, minT: %f, maxT: %f\n", mean, var, minT, maxT);
 
   dTime = maxT - minT;
   if (dTime == 0) {
-    fprintf (stderr, "ERROR: time range is zero\n");
+    gprint (GP_ERR, "ERROR: time range is zero\n");
     return (FALSE);
   }
@@ -101,5 +101,5 @@
     ratio = 1 + 0.1*P/dTime;
 
-    if (VERBOSE) fprintf (stderr, "tau: %f, P: %f, ratio: %f, dTime: %f, nextP: %f\n", tau, P, ratio, dTime, P*ratio);
+    if (VERBOSE) gprint (GP_ERR, "tau: %f, P: %f, ratio: %f, dTime: %f, nextP: %f\n", tau, P, ratio, dTime, P*ratio);
 
     P *= ratio;
Index: /trunk/Ohana/src/opihi/cmd.data/plot.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/plot.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/plot.c	(revision 7917)
@@ -33,5 +33,5 @@
 
   if (argc != 3) {
-    fprintf (stderr, "USAGE: plot <x> <y> [style]\n");
+    gprint (GP_ERR, "USAGE: plot <x> <y> [style]\n");
     return (FALSE);
   }
@@ -51,5 +51,5 @@
   if ((yvec = SelectVector (argv[2], OLDVECTOR, TRUE)) == NULL) return (FALSE);
   if (xvec[0].Nelements != yvec[0].Nelements) {
-    fprintf (stderr, "vectors %s and %s not the same length\n", argv[1], argv[2]);
+    gprint (GP_ERR, "vectors %s and %s not the same length\n", argv[1], argv[2]);
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/point.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/point.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/point.c	(revision 7917)
@@ -32,5 +32,5 @@
 
   if (argc != 7) {
-    fprintf (stderr, "USAGE: point (overlay) TYPE x y dx dy [-c]\n");
+    gprint (GP_ERR, "USAGE: point (overlay) TYPE x y dx dy [-c]\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/ps.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/ps.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/ps.c	(revision 7917)
@@ -58,5 +58,5 @@
 
 help:
-  fprintf (stderr, "USAGE: ps [-name file.ps] [-g | -i] [-n device] [-raw] [-scale]\n");
+  gprint (GP_ERR, "USAGE: ps [-name file.ps] [-g | -i] [-n device] [-raw] [-scale]\n");
   return (FALSE);
 }
Index: /trunk/Ohana/src/opihi/cmd.data/queuedelete.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/queuedelete.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/queuedelete.c	(revision 7917)
@@ -6,5 +6,5 @@
 
   if (argc != 2) {
-    fprintf (stderr, "USAGE: queuedelete (name)\n");
+    gprint (GP_ERR, "USAGE: queuedelete (name)\n");
     return (FALSE);
   }
@@ -12,5 +12,5 @@
   queue = FindQueue (argv[1]);
   if (queue == NULL) {
-    fprintf (stderr, "ERROR: queue %s not found\n", argv[1]);
+    gprint (GP_ERR, "ERROR: queue %s not found\n", argv[1]);
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/queueinit.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/queueinit.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/queueinit.c	(revision 7917)
@@ -6,5 +6,5 @@
 
   if (argc != 2) {
-    fprintf (stderr, "USAGE: queueinit (name)\n");
+    gprint (GP_ERR, "USAGE: queueinit (name)\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/queuelist.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/queuelist.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/queuelist.c	(revision 7917)
@@ -4,5 +4,5 @@
   
   if (argc != 1) {
-    fprintf (stderr, "USAGE: queuelist\n");
+    gprint (GP_ERR, "USAGE: queuelist\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/queuepop.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/queuepop.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/queuepop.c	(revision 7917)
@@ -27,5 +27,5 @@
 
   if (argc != 2) {
-    fprintf (stderr, "USAGE: queuepop (queue) [-var variable] [-key N value]\n");
+    gprint (GP_ERR, "USAGE: queuepop (queue) [-var variable] [-key N value]\n");
     return (FALSE);
   }
@@ -34,5 +34,5 @@
   queue = FindQueue (argv[1]);
   if (queue == NULL) {
-    fprintf (stderr, "ERROR: queue %s not found\n", argv[1]);
+    gprint (GP_ERR, "ERROR: queue %s not found\n", argv[1]);
     return (FALSE);
   }
@@ -46,8 +46,8 @@
   if (var == NULL) {
       if (line == NULL) {
-	  fprintf (stderr, "queue %s is empty or match not found\n", argv[1]);
+	  gprint (GP_ERR, "queue %s is empty or match not found\n", argv[1]);
 	  return (FALSE);
       } else {
-	  fprintf (stderr, "%s\n", line);
+	  gprint (GP_ERR, "%s\n", line);
 	  return (TRUE);
       }
Index: /trunk/Ohana/src/opihi/cmd.data/queueprint.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/queueprint.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/queueprint.c	(revision 7917)
@@ -6,5 +6,5 @@
 
   if (argc != 2) {
-    fprintf (stderr, "USAGE: queueprint (name)\n");
+    gprint (GP_ERR, "USAGE: queueprint (name)\n");
     return (FALSE);
   }
@@ -12,9 +12,9 @@
   queue = FindQueue (argv[1]);
   if (queue == NULL) {
-    fprintf (stderr, "ERROR: queue %s not found\n", argv[1]);
+    gprint (GP_ERR, "ERROR: queue %s not found\n", argv[1]);
     return (FALSE);
   }
 
-  PrintQueue (GetOutfile(), queue);
+  PrintQueue (queue);
   return (TRUE);
 }
Index: /trunk/Ohana/src/opihi/cmd.data/queuepush.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/queuepush.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/queuepush.c	(revision 7917)
@@ -26,5 +26,5 @@
 
   if (argc != 3) {
-    fprintf (stderr, "USAGE: queuepush (queue) (value) [-key N] [-uniq] [-replace]\n");
+    gprint (GP_ERR, "USAGE: queuepush (queue) (value) [-key N] [-uniq] [-replace]\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/queuesize.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/queuesize.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/queuesize.c	(revision 7917)
@@ -15,5 +15,5 @@
 
   if (argc != 2) {
-    fprintf (stderr, "USAGE: queuesize (name) [-var variable]\n");
+    gprint (GP_ERR, "USAGE: queuesize (name) [-var variable]\n");
     return (FALSE);
   }
@@ -21,10 +21,10 @@
   queue = FindQueue (argv[1]);
   if (queue == NULL) {
-    fprintf (stderr, "ERROR: queue %s not found\n", argv[1]);
+    gprint (GP_ERR, "ERROR: queue %s not found\n", argv[1]);
     return (FALSE);
   }
 
   if (var == (char *) NULL) {
-    fprintf (stderr, "Nlines: %d\n", queue[0].Nlines);
+    gprint (GP_ERR, "Nlines: %d\n", queue[0].Nlines);
     return (TRUE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/radial.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/radial.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/radial.c	(revision 7917)
@@ -70,6 +70,6 @@
 
   if (!Quiet) {
-    fprintf (GetOutfile(), "     mean     stdev       min       max    Npix     Total\n");
-    fprintf (GetOutfile(), "%9.4g %9.4g %9.4g %9.4g %7.0f %9.4g\n", Mean, Stdev, min, max, Npix, Sum);
+    gprint (GP_LOG, "     mean     stdev       min       max    Npix     Total\n");
+    gprint (GP_LOG, "%9.4g %9.4g %9.4g %9.4g %7.0f %9.4g\n", Mean, Stdev, min, max, Npix, Sum);
   }
 
@@ -84,13 +84,13 @@
 
  usage: 
-  fprintf (stderr, "USAGE: circstats <buffer> x y radius\n");
+  gprint (GP_ERR, "USAGE: circstats <buffer> x y radius\n");
   return (FALSE);
 
  range:
-  fprintf (stderr, "ERROR: coordinates out of range\n");
+  gprint (GP_ERR, "ERROR: coordinates out of range\n");
   return (FALSE);
 
  missed:
-  fprintf (stderr, "ERROR: buffer not found\n");
+  gprint (GP_ERR, "ERROR: buffer not found\n");
   return (FALSE);
 }
Index: /trunk/Ohana/src/opihi/cmd.data/rd.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/rd.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/rd.c	(revision 7917)
@@ -42,10 +42,10 @@
 
   if (extend && ccdsel) {
-    fprintf (stderr, "only specify one of -n and -x\n");
+    gprint (GP_ERR, "only specify one of -n and -x\n");
     return (FALSE);
   }
 
   if (argc != 3) {
-    fprintf (stderr, "USAGE: rd <buffer> <filename> [-head] [-plane N] [-n ccdid] [-x extnum]\n");
+    gprint (GP_ERR, "USAGE: rd <buffer> <filename> [-head] [-plane N] [-n ccdid] [-x extnum]\n");
     return (FALSE);
   }
@@ -54,5 +54,5 @@
   f = fopen (argv[2], "r");
   if (f == (FILE *) NULL) {
-    fprintf (stderr, "file %s not found\n", argv[2]);
+    gprint (GP_ERR, "file %s not found\n", argv[2]);
     return (FALSE);
   }
@@ -75,5 +75,5 @@
     Nskip = gfits_read_Xheader (argv[2], &buf[0].header, Nextend);
     if (!Nskip) {
-      fprintf (stderr, "entry in %s not found\n", argv[2]);
+      gprint (GP_ERR, "entry in %s not found\n", argv[2]);
       DeleteBuffer (buf);
       return (FALSE);
@@ -108,5 +108,5 @@
     f = fopen (argv[2], "r");
     if (f == (FILE *) NULL) {
-      fprintf (stderr, "file %s not found\n", argv[2]);
+      gprint (GP_ERR, "file %s not found\n", argv[2]);
       DeleteBuffer (buf);
       return (FALSE);
@@ -122,6 +122,6 @@
     CCDKeyword = get_variable ("CCDKEYWORD");
     if (CCDKeyword == (char *) NULL) {
-      fprintf (stderr, "CCDKEYWORD variable is not set; ");
-      fprintf (stderr, "using EXTNAME as default\n");
+      gprint (GP_ERR, "CCDKEYWORD variable is not set; ");
+      gprint (GP_ERR, "using EXTNAME as default\n");
       CCDKeyword = strcreate ("EXTNAME");
     }
@@ -130,5 +130,5 @@
       Nskip = gfits_read_Xheader (argv[2], &buf[0].header, i);
       if (!Nskip) {
-	fprintf (stderr, "extension %s in %s not found\n", ccdid, argv[2]);
+	gprint (GP_ERR, "extension %s in %s not found\n", ccdid, argv[2]);
 	DeleteBuffer (buf);
 	free (CCDKeyword);
@@ -136,5 +136,5 @@
       }
       if (!gfits_scan (&buf[0].header, CCDKeyword, "%s", 1, ID)) {
-	fprintf (stderr, "%s not in header\n", CCDKeyword);
+	gprint (GP_ERR, "%s not in header\n", CCDKeyword);
 	DeleteBuffer (buf);
 	free (CCDKeyword);
@@ -177,5 +177,5 @@
     f = fopen (argv[2], "r");
     if (f == (FILE *) NULL) {
-      fprintf (stderr, "file %s not found\n", argv[2]);
+      gprint (GP_ERR, "file %s not found\n", argv[2]);
       DeleteBuffer (buf);
       return (FALSE);
@@ -203,5 +203,5 @@
     if (Nplane > 0) {
       if (plane > Nplane) {
-	fprintf (stderr, "-plane is too large: %d total planes\n", Nplane);
+	gprint (GP_ERR, "-plane is too large: %d total planes\n", Nplane);
 	DeleteBuffer (buf);
 	return (FALSE);
@@ -217,5 +217,5 @@
 
   if (!status) {
-    fprintf (stderr, "problem reading file, buffer not opened\n");
+    gprint (GP_ERR, "problem reading file, buffer not opened\n");
     DeleteBuffer (buf);
     return (FALSE);
@@ -232,5 +232,5 @@
   buf[0].bzero  = buf[0].header.bzero;     /* store the original values */
   buf[0].unsign = buf[0].header.unsign;
-  fprintf (GetOutfile(), "read %d bytes from %s into buffer %s\n", 
+  gprint (GP_LOG, "read %d bytes from %s into buffer %s\n", 
 	   buf[0].header.size + buf[0].matrix.size, argv[2], argv[1]);
 
Index: /trunk/Ohana/src/opihi/cmd.data/rdseg.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/rdseg.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/rdseg.c	(revision 7917)
@@ -10,5 +10,5 @@
 
   if (argc != 7) {
-    fprintf (stderr, "USAGE: rdseg <buffer> <filename> x y nx ny\n");
+    gprint (GP_ERR, "USAGE: rdseg <buffer> <filename> x y nx ny\n");
     return (FALSE);
   }
@@ -21,5 +21,5 @@
   f = fopen (argv[2], "r");
   if (f == (FILE *) NULL) {
-    fprintf (stderr, "file %s not found\n", argv[2]);
+    gprint (GP_ERR, "file %s not found\n", argv[2]);
     return (FALSE);
   }
@@ -47,5 +47,5 @@
 
   if (!status) {
-    fprintf (stderr, "problem reading file, buffer not opened\n");
+    gprint (GP_ERR, "problem reading file, buffer not opened\n");
     DeleteBuffer (buf);
     return (FALSE);
@@ -62,5 +62,5 @@
   buf[0].bzero  = buf[0].header.bzero;     /* store the original values */
   buf[0].unsign = buf[0].header.unsign;
-  fprintf (GetOutfile(), "read %d bytes from %s into buffer %s\n", 
+  gprint (GP_LOG, "read %d bytes from %s into buffer %s\n", 
 	   buf[0].header.size + buf[0].matrix.size, argv[2], argv[1]);
 
Index: /trunk/Ohana/src/opihi/cmd.data/read_vectors.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/read_vectors.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/read_vectors.c	(revision 7917)
@@ -7,5 +7,5 @@
 
   if (argc < 2) {
-    fprintf (stderr, "USAGE: datafile (filename)\n");
+    gprint (GP_ERR, "USAGE: datafile (filename)\n");
     return (FALSE);
   }
@@ -15,5 +15,5 @@
   f = fopen (filename, "r");
   if (f == (FILE *) NULL) {
-    fprintf (stderr, "failed to open file %s\n", argv[1]);
+    gprint (GP_ERR, "failed to open file %s\n", argv[1]);
     return (FALSE);
   }
@@ -48,5 +48,5 @@
 
   if ((argc < 3) || !(argc % 2)) {
-    fprintf (stderr, "USAGE: read name N name N ...\n");
+    gprint (GP_ERR, "USAGE: read name N name N ...\n");
     return (FALSE);
   }
@@ -54,5 +54,5 @@
 
   if (f == (FILE *) NULL) {
-    fprintf (stderr, "no open file for read\n");
+    gprint (GP_ERR, "no open file for read\n");
     return (FALSE);
   }
@@ -65,5 +65,5 @@
   for (i = 0; i < Nvec; i++) {
     if ((vec[i] = SelectVector (argv[2*i + 1], ANYVECTOR, TRUE)) == NULL) {
-      fprintf (stderr, "USAGE: read name N name N ...\n");
+      gprint (GP_ERR, "USAGE: read name N name N ...\n");
       free (vec);
       free (col);
@@ -73,5 +73,5 @@
     for (j = 0; j < strlen (colstr); j++) {
       if (!isdigit(colstr[j])) {
-	fprintf (stderr, "USAGE: read name N name N ...\n");
+	gprint (GP_ERR, "USAGE: read name N name N ...\n");
 	free (vec);
 	free (col);
@@ -157,6 +157,6 @@
 
   if (argc < 2) {
-    fprintf (stderr, "USAGE: read -fits extension name name ...\n");
-    fprintf (stderr, "  ('extension' may be a name or number)\n");
+    gprint (GP_ERR, "USAGE: read -fits extension name name ...\n");
+    gprint (GP_ERR, "  ('extension' may be a name or number)\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/rebin.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/rebin.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/rebin.c	(revision 7917)
@@ -33,6 +33,6 @@
 
   if (argc != 4) {
-    fprintf (stderr, "USAGE: rebin <from> <to> scale \n");
-    fprintf (stderr, "  negative integer scale expands image\n");
+    gprint (GP_ERR, "USAGE: rebin <from> <to> scale \n");
+    gprint (GP_ERR, "  negative integer scale expands image\n");
     return (FALSE);
   }
@@ -63,5 +63,5 @@
     }      
   }
-  if (VERBOSE) fprintf (GetOutfile(), "rebin %s to %s (%d,%d to %d,%d)\n", argv[1], argv[2], in[0].header.Naxis[0], in[0].header.Naxis[1], nx, ny);
+  if (VERBOSE) gprint (GP_LOG, "rebin %s to %s (%d,%d to %d,%d)\n", argv[1], argv[2], in[0].header.Naxis[0], in[0].header.Naxis[1], nx, ny);
 
   Nx = in[0].header.Naxis[0];
@@ -171,5 +171,5 @@
     
     /* normalization is broken.  repair please */
-    if (Normalize) { fprintf (stderr, "normalize not enabled for fractional scaling\n"); }
+    if (Normalize) { gprint (GP_ERR, "normalize not enabled for fractional scaling\n"); }
 
     if (scale < 0) scale = 1.0 / fabs(scale);
Index: /trunk/Ohana/src/opihi/cmd.data/resize.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/resize.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/resize.c	(revision 7917)
@@ -30,5 +30,5 @@
 
   if (argc != 3) {
-    fprintf (stderr, "USAGE: resize NX NY [-n] [-g | -i]\n");
+    gprint (GP_ERR, "USAGE: resize NX NY [-n] [-g | -i]\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/roll.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/roll.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/roll.c	(revision 7917)
@@ -8,5 +8,5 @@
 
   if (argc != 4) {
-    fprintf (stderr, "USAGE: roll <buffer> dx dy\n");
+    gprint (GP_ERR, "USAGE: roll <buffer> dx dy\n");
     return (FALSE);
   }
@@ -17,5 +17,5 @@
   dy = atof (argv[3]);
   if (dy != 0) {
-    fprintf (stderr, "only x rolls implemented for now\n");
+    gprint (GP_ERR, "only x rolls implemented for now\n");
   }
 
Index: /trunk/Ohana/src/opihi/cmd.data/rotate.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/rotate.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/rotate.c	(revision 7917)
@@ -23,5 +23,5 @@
 
   if (argc != 3) {
-    fprintf (stderr, "USAGE: rotate <buffer> <angle>\n");
+    gprint (GP_ERR, "USAGE: rotate <buffer> <angle>\n");
     return (FALSE);
   }
@@ -29,5 +29,5 @@
 
   if ((atof (argv[1]) < -180) || (atof (argv[1]) > 180)) {
-    fprintf (stderr, "valid rotate angle between -180 and +180 degrees\n");
+    gprint (GP_ERR, "valid rotate angle between -180 and +180 degrees\n");
     return (FALSE);
   }
@@ -95,5 +95,5 @@
     X1 = NY - Yo;
     Y1 = Xo;
-    fprintf (stderr, "%f %f -> %f %f\n", Xo, Yo, X1, Y1);
+    gprint (GP_ERR, "%f %f -> %f %f\n", Xo, Yo, X1, Y1);
     gfits_modify (&buf[0].header, "CRPIX1", "%lf", 1, X1);
     gfits_modify (&buf[0].header, "CRPIX2", "%lf", 1, Y1);
@@ -108,6 +108,6 @@
     PC21 = pc11;
     PC22 = pc12;
-    fprintf (stderr, "%f %f  ->  %f %f\n", pc11, pc12, PC11, PC12);
-    fprintf (stderr, "%f %f  ->  %f %f\n", pc21, pc22, PC21, PC22);
+    gprint (GP_ERR, "%f %f  ->  %f %f\n", pc11, pc12, PC11, PC12);
+    gprint (GP_ERR, "%f %f  ->  %f %f\n", pc21, pc22, PC21, PC22);
     gfits_modify (&buf[0].header, "PC001001", "%le", 1, PC11);
     gfits_modify (&buf[0].header, "PC001002", "%le", 1, PC12);
@@ -228,5 +228,5 @@
   SinAngle = sin (angle*RAD_DEG);
   
-  fprintf (stderr, "rotating: %f %f %f\n", angle, CosAngle, SinAngle);
+  gprint (GP_ERR, "rotating: %f %f %f\n", angle, CosAngle, SinAngle);
 
   Lx = NX*fabs(CosAngle) + NY*fabs(SinAngle);
@@ -235,8 +235,8 @@
   dY = MAX(0,-NX*SinAngle);
   /*
-  fprintf (stderr, "%f %f  -->  ", Xo, Yo);
+  gprint (GP_ERR, "%f %f  -->  ", Xo, Yo);
   X1 = Xo*CosAngle - Yo*SinAngle + dX;
   Y1 =  Xo*SinAngle + Yo*CosAngle + dY;
-  fprintf (stderr, "%f %f\n", X1, Y1);
+  gprint (GP_ERR, "%f %f\n", X1, Y1);
   */
 
Index: /trunk/Ohana/src/opihi/cmd.data/save.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/save.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/save.c	(revision 7917)
@@ -21,6 +21,6 @@
 
   if (argc != 3) {
-    fprintf (stderr, "USAGE: save (overlay) <filename> [-c]\n");
-    fprintf (stderr, "  -c: write contour in celestial coords\n");
+    gprint (GP_ERR, "USAGE: save (overlay) <filename> [-c]\n");
+    gprint (GP_ERR, "  -c: write contour in celestial coords\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/section.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/section.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/section.c	(revision 7917)
@@ -25,5 +25,5 @@
   if (argc == 1) {
     KapaGetSection (Xgraph, "*");
-    fprintf (stderr, "USAGE: section name [x y dx dy]\n");
+    gprint (GP_ERR, "USAGE: section name [x y dx dy]\n");
     return (TRUE);
   } 
@@ -49,5 +49,5 @@
     return (TRUE);
   }
-  fprintf (stderr, "USAGE: section name [x y dx dy]\n");
+  gprint (GP_ERR, "USAGE: section name [x y dx dy]\n");
   return (FALSE);
 }
Index: /trunk/Ohana/src/opihi/cmd.data/select.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/select.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/select.c	(revision 7917)
@@ -12,5 +12,5 @@
   /** check basic syntax **/
   if ((argc != 8) || strcmp(argv[2], "=") || strcmp (argv[4], "if") || strcmp (argv[6], "else")) {
-    fprintf (stderr, "SYNTAX: select vec = vec if (logic expression) else vec\n");
+    gprint (GP_ERR, "SYNTAX: select vec = vec if (logic expression) else vec\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/set.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/set.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/set.c	(revision 7917)
@@ -8,5 +8,5 @@
   /** check basic form for line **/
   if ((argc < 3) || strcmp(argv[2], "=")) {
-    fprintf (stderr, "%s = (matrix expression)\n", argv[0]);
+    gprint (GP_ERR, "%s = (matrix expression)\n", argv[0]);
     return (FALSE);
   }
@@ -28,5 +28,5 @@
 	DeleteNamedVector (out);
 	free (out);
-	fprintf (stderr, "invalid output vector name\n");
+	gprint (GP_ERR, "invalid output vector name\n");
 	return (FALSE);
       }
@@ -38,5 +38,5 @@
 	DeleteNamedBuffer (out);
 	free (out);
-	fprintf (stderr, "invalid output matrix name\n");
+	gprint (GP_ERR, "invalid output matrix name\n");
 	return (FALSE);
       }
Index: /trunk/Ohana/src/opihi/cmd.data/shift.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/shift.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/shift.c	(revision 7917)
@@ -16,5 +16,5 @@
 
   if (argc != 4) {
-    fprintf (stderr, "USAGE: shift <buffer> dx dy\n");
+    gprint (GP_ERR, "USAGE: shift <buffer> dx dy\n");
     return (FALSE);
   }
@@ -36,5 +36,5 @@
 
   if ((dx > buf[0].matrix.Naxis[0]) || (dy > buf[0].matrix.Naxis[1])) {
-    fprintf (stderr, "shifting data out of image\n");
+    gprint (GP_ERR, "shifting data out of image\n");
     return (FALSE);
   }
@@ -91,5 +91,5 @@
   } 
 
-  fprintf (stderr, "%f %f\n", fdx, fdy);
+  gprint (GP_ERR, "%f %f\n", fdx, fdy);
   if ((fdx > 0) || (fdy > 0)) {
     double f00, f01, f10, f11;
Index: /trunk/Ohana/src/opihi/cmd.data/sort.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/sort.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/sort.c	(revision 7917)
@@ -8,6 +8,6 @@
 
   if (argc < 2) {
-    fprintf (stderr, "USAGE: sort (vector) [vectors ...] \n");
-    fprintf (stderr, "  first vector is sort key for others\n");
+    gprint (GP_ERR, "USAGE: sort (vector) [vectors ...] \n");
+    gprint (GP_ERR, "  first vector is sort key for others\n");
     return (FALSE);
   }
@@ -20,5 +20,5 @@
   for (i = 0; i < Nvec; i++) {
     if ((vec[i] = SelectVector (argv[i + 1], OLDVECTOR, FALSE)) == NULL) {
-      fprintf (stderr, "USAGE: sort vector vector ...\n");
+      gprint (GP_ERR, "USAGE: sort vector vector ...\n");
       free (vec);
       return (FALSE);    
@@ -29,5 +29,5 @@
       if (Nval != vec[i][0].Nelements) {
 	free (vec);
-	fprintf (stderr, "vectors must all be same length\n");
+	gprint (GP_ERR, "vectors must all be same length\n");
 	return (FALSE);
       }
Index: /trunk/Ohana/src/opihi/cmd.data/spline_apply.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/spline_apply.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/spline_apply.c	(revision 7917)
@@ -13,5 +13,5 @@
 
   if (argc != 7) {
-    fprintf (stderr, "USAGE: spline_apply <Y> <Y2> <out> (x/y) Nx Ny\n");
+    gprint (GP_ERR, "USAGE: spline_apply <Y> <Y2> <out> (x/y) Nx Ny\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/spline_construct.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/spline_construct.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/spline_construct.c	(revision 7917)
@@ -8,5 +8,5 @@
 
   if (argc != 4) {
-    fprintf (stderr, "USAGE: spline_construct <in> <out> (x/y)\n");
+    gprint (GP_ERR, "USAGE: spline_construct <in> <out> (x/y)\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/stats.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/stats.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/stats.c	(revision 7917)
@@ -30,5 +30,5 @@
 
   if (argc != 6) {
-    fprintf (stderr, "USAGE: stats <buffer> sx sy nx ny\n");
+    gprint (GP_ERR, "USAGE: stats <buffer> sx sy nx ny\n");
     return (FALSE);
   }
@@ -45,5 +45,5 @@
       (sx+nx > buf[0].matrix.Naxis[0]) || 
       (sy+ny > buf[0].matrix.Naxis[1])) {
-    fprintf (stderr, "region out of range\n");
+    gprint (GP_ERR, "region out of range\n");
     return (FALSE);
   }
@@ -94,6 +94,6 @@
   
   if (!Quiet) {
-    fprintf (GetOutfile(), "  mean    stdev    min     max   median   Npix   Total\n");
-    fprintf (GetOutfile(), "%7.4g %7.4g %7.4g %7.4g %7.4g %7.0f %7.4g\n", N1, sqrt (N2/Npix - N1*N1), 
+    gprint (GP_LOG, "  mean    stdev    min     max   median   Npix   Total\n");
+    gprint (GP_LOG, "%7.4g %7.4g %7.4g %7.4g %7.4g %7.0f %7.4g\n", N1, sqrt (N2/Npix - N1*N1), 
 	     min, max, median, Npix, Npix*N1);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/style.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/style.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/style.c	(revision 7917)
@@ -8,5 +8,5 @@
 
   if (argc > 1) {
-    fprintf (stderr, "USAGE: style [-n Ngraph] [-x plot style] [-c color] [-pt point type] [-lt line type] [-lw line width] [-sz size]\n");
+    gprint (GP_ERR, "USAGE: style [-n Ngraph] [-x plot style] [-c color] [-pt point type] [-lt line type] [-lw line width] [-sz size]\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/subraster.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/subraster.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/subraster.c	(revision 7917)
@@ -11,5 +11,5 @@
 
   if (argc != 11) {
-    fprintf (stderr, "USAGE: extract <from> <to> sx sy nx ny Sx Sy Nx Ny\n");
+    gprint (GP_ERR, "USAGE: extract <from> <to> sx sy nx ny Sx Sy Nx Ny\n");
     return (FALSE);
   }
@@ -30,6 +30,6 @@
 
   if ((Sy + ny > Ny) || (Sx + nx > Nx)) {
-    fprintf (stderr, "mismatch between source and dest regions\n");
-    fprintf (stderr, "%d + %d > %d or %d + %d > %d\n", Sy, ny, Ny, Sx, nx, Nx);
+    gprint (GP_ERR, "mismatch between source and dest regions\n");
+    gprint (GP_ERR, "%d + %d > %d or %d + %d > %d\n", Sy, ny, Ny, Sx, nx, Nx);
     return (FALSE);
   }
@@ -39,14 +39,14 @@
       (sx > ibuf[0].matrix.Naxis[0]) || 
       (sy > ibuf[0].matrix.Naxis[1])) {
-    fprintf (stderr, "region outside of source image\n");
+    gprint (GP_ERR, "region outside of source image\n");
     return (FALSE);
   }
 
   if ((Sx + nx > Nx) || (Sy + ny > Ny)) {
-    fprintf (stderr, "source region larger than dest region\n");
+    gprint (GP_ERR, "source region larger than dest region\n");
     return (FALSE);
   }
   if ((Sx < 0) || (Sy < 0)) {
-    fprintf (stderr, "dest region out of range\n");
+    gprint (GP_ERR, "dest region out of range\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/subset.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/subset.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/subset.c	(revision 7917)
@@ -13,5 +13,5 @@
 
   if ((argc < 6) || strcmp(argv[2], "=") || strcmp (argv[4], "if")) {
-    fprintf (stderr, "SYNTAX: subset vec = vec if (logic expression)\n");
+    gprint (GP_ERR, "SYNTAX: subset vec = vec if (logic expression)\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/svd.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/svd.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/svd.c	(revision 7917)
@@ -59,5 +59,5 @@
   status = svdcmp (U, W, V, Nx, Ny);
   if (!status) {
-    fprintf (stderr, "error running svdcmp\n");
+    gprint (GP_ERR, "error running svdcmp\n");
     return (FALSE);
   }
@@ -65,5 +65,5 @@
 
  usage:
-  fprintf (stderr, "USAGE: svd A = U w Vt\n");
+  gprint (GP_ERR, "USAGE: svd A = U w Vt\n");
   return (FALSE);
   
Index: /trunk/Ohana/src/opihi/cmd.data/swapbytes.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/swapbytes.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/swapbytes.c	(revision 7917)
@@ -8,5 +8,5 @@
 
   if (argc != 2) {
-    fprintf (stderr, "USAGE: swapbytes <buffer>\n");
+    gprint (GP_ERR, "USAGE: swapbytes <buffer>\n");
     return (FALSE);
   }
@@ -17,5 +17,5 @@
   ny = buf[0].matrix.Naxis[1];
 
-  fprintf (stderr, "npix: %d\n", nx*ny);
+  gprint (GP_ERR, "npix: %d\n", nx*ny);
 
   V = buf[0].matrix.buffer;
Index: /trunk/Ohana/src/opihi/cmd.data/teststats.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/teststats.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/teststats.c	(revision 7917)
@@ -31,5 +31,5 @@
 
   if (argc != 2) {
-    fprintf (stderr, "USAGE: teststats (vector)\n");
+    gprint (GP_ERR, "USAGE: teststats (vector)\n");
     return (FALSE);
   }
@@ -98,5 +98,5 @@
 
   if (!Quiet) {
-    fprintf (stderr, "mean: %f, stdev: %f, min: %f, max: %f, median: %f, mode: %f, Npts: %d\n", 
+    gprint (GP_ERR, "mean: %f, stdev: %f, min: %f, max: %f, median: %f, mode: %f, Npts: %d\n", 
 	     mean, stdev, min, max, median, mode, N);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/textline.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/textline.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/textline.c	(revision 7917)
@@ -41,10 +41,10 @@
 
   if (argc != 4) {
-    fprintf (stderr, "USAGE: text x y (line) [-fn (font) size] [-rot angle]\n");
+    gprint (GP_ERR, "USAGE: text x y (line) [-fn (font) size] [-rot angle]\n");
     return (FALSE);
   }
 
   if (strlen (argv[3]) > 127) {
-    fprintf (stderr, "labels currently limited to 127 chars\n");
+    gprint (GP_ERR, "labels currently limited to 127 chars\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/tv.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/tv.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/tv.c	(revision 7917)
@@ -31,5 +31,5 @@
 
   if ((argc != 2) && (argc != 4)) {
-    fprintf (stderr, "USAGE: tv <buffer> [zero range] [-n Nimage] [-log] [-kill]\n");
+    gprint (GP_ERR, "USAGE: tv <buffer> [zero range] [-n Nimage] [-log] [-kill]\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/tvcontour.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/tvcontour.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/tvcontour.c	(revision 7917)
@@ -71,5 +71,5 @@
 
   if ((argc != 4) && (argc != 5)) {
-    fprintf (stderr, "USAGE: contour <buffer> (overlay) level [Npix]\n");
+    gprint (GP_ERR, "USAGE: contour <buffer> (overlay) level [Npix]\n");
     return (FALSE);
   }
@@ -88,5 +88,5 @@
   Ny = buf[0].header.Naxis[1]/Npix;
   if (Npix != 1) {
-    fprintf (GetOutfile(), "rebin by a factor of %d (%d,%d)\n", Npix, Nx, Ny);
+    gprint (GP_LOG, "rebin by a factor of %d (%d,%d)\n", Npix, Nx, Ny);
     ALLOCATE (matrix, float, Nx*Ny);
     bzero (matrix, Nx*Ny*sizeof(float));
@@ -104,5 +104,5 @@
     }
   } else {
-    fprintf (stderr, "using scale of 1\n");
+    gprint (GP_ERR, "using scale of 1\n");
     matrix = (float *)(buf[0].matrix.buffer);
   }
@@ -119,5 +119,5 @@
   d11 = (level - *v10);
   for (j = 1; j < Ny; j++) {
-    if (!(j%10)) fprintf (stderr, ".");
+    if (!(j%10)) gprint (GP_ERR, ".");
     for (i = 1; i < Nx; i++, v00++, v01++, v10++, v11++) {
 
@@ -281,5 +281,5 @@
 
   if (Npix != 1) free (matrix);
-  fprintf (stderr, "\n");
+  gprint (GP_ERR, "\n");
   return (TRUE);
 }
Index: /trunk/Ohana/src/opihi/cmd.data/tvgrid.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/tvgrid.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/tvgrid.c	(revision 7917)
@@ -24,6 +24,6 @@
   
   if (argc != 3) {
-    fprintf (stderr, "USAGE: tvgrid (overlay) (buffer)\n");
-    fprintf (stderr, " (overlay) may be: red, green, blue, yellow\n");
+    gprint (GP_ERR, "USAGE: tvgrid (overlay) (buffer)\n");
+    gprint (GP_ERR, " (overlay) may be: red, green, blue, yellow\n");
     return (FALSE);
   }
@@ -34,5 +34,5 @@
   XY_to_RD (&ra0, &dec0, 0.0, 0.0, &coords);
   XY_to_RD (&ra1, &dec1, (double)buf[0].header.Naxis[0], (double)buf[0].header.Naxis[1], &coords);
-  fprintf (stderr, "%f %f  %f %f\n", ra0, dec0, ra1, dec1);
+  gprint (GP_ERR, "%f %f  %f %f\n", ra0, dec0, ra1, dec1);
   
   Noverlay = 0;
@@ -64,5 +64,5 @@
   ndig1 = 3 + log10(MAX(dec0, dec1)) + ndig2;
   sprintf (format, "%%%d.%df", ndig1, ndig2);
-  fprintf (stderr, "format: %s..\n", format);
+  gprint (GP_ERR, "format: %s..\n", format);
 
   NX = buf[0].header.Naxis[0];
@@ -118,5 +118,5 @@
   ndig1 = 3 + log10(MAX(ra0, ra1)) + ndig2;
   sprintf (format, "%%%d.%df", ndig1, ndig2);
-  fprintf (stderr, "format: %s..\n", format);
+  gprint (GP_ERR, "format: %s..\n", format);
 
   dDEC = MAX (fabs(dec1 - dec0) / 100.0, 0.1);
Index: /trunk/Ohana/src/opihi/cmd.data/ungridify.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/ungridify.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/ungridify.c	(revision 7917)
@@ -11,5 +11,5 @@
 
   if (argc != 9) {
-    fprintf (stderr, "USAGE: ungridify buffer Xmin Xmax Ymin Ymax x y z\n");
+    gprint (GP_ERR, "USAGE: ungridify buffer Xmin Xmax Ymin Ymax x y z\n");
     return (FALSE);
   }
@@ -50,5 +50,5 @@
   }
   if (n != Nx*Ny) {
-    fprintf (stderr, "error in ungrid: %d vs %d (%d x %d)\n", n, Nx*Ny, Nx, Ny);
+    gprint (GP_ERR, "error in ungrid: %d vs %d (%d x %d)\n", n, Nx*Ny, Nx, Ny);
   }
   vx[0].Nelements = vy[0].Nelements = vz[0].Nelements = n;
Index: /trunk/Ohana/src/opihi/cmd.data/uniq.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/uniq.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/uniq.c	(revision 7917)
@@ -8,5 +8,5 @@
 
   if (argc != 3) {
-    fprintf (stderr, "USAGE: uniq (in) (out)\n");
+    gprint (GP_ERR, "USAGE: uniq (in) (out)\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/unsign.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/unsign.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/unsign.c	(revision 7917)
@@ -5,7 +5,7 @@
   if (argc == 1) {
     if (FT_UNSIGN_MODE) 
-      fprintf (stderr, "mode is now UNSIGNED int \n");
+      gprint (GP_ERR, "mode is now UNSIGNED int \n");
     else
-      fprintf (stderr, "mode is now SIGNED int \n");
+      gprint (GP_ERR, "mode is now SIGNED int \n");
     return (TRUE);
   }
@@ -24,5 +24,5 @@
   }
 
-  fprintf (stderr, "USAGE: unsign [0/1]\n");
+  gprint (GP_ERR, "USAGE: unsign [0/1]\n");
   return (FALSE);
 }
Index: /trunk/Ohana/src/opihi/cmd.data/vbin.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/vbin.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/vbin.c	(revision 7917)
@@ -25,6 +25,6 @@
 
   if (argc != 4) {
-    fprintf (stderr, "USAGE: vbin <input> <output> scale \n");
-    fprintf (stderr, "  (use interpolate to expand)\n");
+    gprint (GP_ERR, "USAGE: vbin <input> <output> scale \n");
+    gprint (GP_ERR, "  (use interpolate to expand)\n");
     return (FALSE);
   }
@@ -35,5 +35,5 @@
   scale  = atof (argv[3]);
   if ((int)(scale) != scale) {
-    fprintf (stderr, "integer binning only, please\n");
+    gprint (GP_ERR, "integer binning only, please\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/vclip.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/vclip.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/vclip.c	(revision 7917)
@@ -27,5 +27,5 @@
 
   if ((argc != 6) && (!(DO_INF || DO_NAN))) {
-    fprintf (stderr, "USAGE: vclip (vector) [min Vmin max Vmax] [-inf val] [-nan val]\n");
+    gprint (GP_ERR, "USAGE: vclip (vector) [min Vmin max Vmax] [-inf val] [-nan val]\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/vcontour.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/vcontour.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/vcontour.c	(revision 7917)
@@ -62,9 +62,9 @@
   Vector *xvec, *yvec, *zvec;
 
-  fprintf (stderr, "vcontour not working yet\n");
+  gprint (GP_ERR, "vcontour not working yet\n");
   return (FALSE);
 
   if (argc != 7) {
-    fprintf (stderr, "USAGE: vcontour x y z Xc Yc (level)\n");
+    gprint (GP_ERR, "USAGE: vcontour x y z Xc Yc (level)\n");
     return (FALSE);
   }
@@ -109,5 +109,5 @@
   d11 = (level - *v10);
   for (j = 1; j < Ny; j++) {
-    if (!(j%10)) fprintf (stderr, ".");
+    if (!(j%10)) gprint (GP_ERR, ".");
     for (i = 1; i < Nx; i++, v00++, v01++, v10++, v11++) {
 
@@ -275,4 +275,4 @@
 
   if (Npix != 1) free (matrix);
-  fprintf (stderr, "\n");
+  gprint (GP_ERR, "\n");
 }
Index: /trunk/Ohana/src/opihi/cmd.data/vgauss.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/vgauss.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/vgauss.c	(revision 7917)
@@ -7,5 +7,5 @@
   c = get_variable (A); \
   if (c == NULL) { \
-    fprintf (stderr, "missing fit parameter A\n"); \
+    gprint (GP_ERR, "missing fit parameter A\n"); \
     return (FALSE); \
   } \
@@ -31,6 +31,6 @@
 
   if (argc != 5) {
-    fprintf (stderr, "USAGE: vgauss <x> <y> <dy> (out)\n");
-    fprintf (stderr, " uses guesses: C0 (mean), C1 (sigma), C2 (norm), C3 (sky)\n");
+    gprint (GP_ERR, "USAGE: vgauss <x> <y> <dy> (out)\n");
+    gprint (GP_ERR, " uses guesses: C0 (mean), C1 (sigma), C2 (norm), C3 (sky)\n");
     return (FALSE);
   }
@@ -64,7 +64,7 @@
     dchisq = ochisq - chisq;
     ochisq = chisq;
-    if (!Quiet) fprintf (stderr, "dchisq: %f, Ndof: %d\n", dchisq, Npts - Npar);
+    if (!Quiet) gprint (GP_ERR, "dchisq: %f, Ndof: %d\n", dchisq, Npts - Npar);
   }  
-  if (!Quiet) fprintf (stderr, "%d iterations\n", i); 
+  if (!Quiet) gprint (GP_ERR, "%d iterations\n", i); 
 
   for (i = 0; i < Npts; i++) {
@@ -79,5 +79,5 @@
     sprintf (name, "C%d", i);
     set_variable (name, par[i]);
-    if (!Quiet) fprintf (stderr, "%d  %f  %f\n", i, par[i], sqrt(covar[i][i]));
+    if (!Quiet) gprint (GP_ERR, "%d  %f  %f\n", i, par[i], sqrt(covar[i][i]));
     sprintf (name, "dC%d", i);
     set_variable (name, sqrt(covar[i][i]));
Index: /trunk/Ohana/src/opihi/cmd.data/vgrid.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/vgrid.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/vgrid.c	(revision 7917)
@@ -11,5 +11,5 @@
 
   if (argc != 11) {
-    fprintf (stderr, "USAGE: vgrid x y z buffer Xmin Xmax dX Ymin Ymax dY\n");
+    gprint (GP_ERR, "USAGE: vgrid x y z buffer Xmin Xmax dX Ymin Ymax dY\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/vload.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/vload.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/vload.c	(revision 7917)
@@ -23,5 +23,5 @@
     remove_argument (N, &argc, argv);
     if (!type) {
-      fprintf (stderr, "unknown Kii point type %s\n", argv[N]);
+      gprint (GP_ERR, "unknown Kii point type %s\n", argv[N]);
       return (FALSE);
     }
@@ -36,5 +36,5 @@
 
   if (argc != 4) {
-    fprintf (stderr, "USAGE: vload (overlay) (xvec) (yvec) [-n]\n");
+    gprint (GP_ERR, "USAGE: vload (overlay) (xvec) (yvec) [-n]\n");
     return (FALSE);
   }
@@ -49,5 +49,5 @@
   if ((vecy = SelectVector (argv[3], OLDVECTOR, TRUE)) == NULL) return (FALSE);
   if (vecx[0].Nelements != vecy[0].Nelements) {
-    fprintf (stderr, "mismatched vector lengths\n");
+    gprint (GP_ERR, "mismatched vector lengths\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/vpop.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/vpop.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/vpop.c	(revision 7917)
@@ -7,6 +7,6 @@
 
   if (argc != 2) {
-    fprintf (stderr, "USAGE: vpop (vector)\n");
-    fprintf (stderr, "  remove first element of vector\n");
+    gprint (GP_ERR, "USAGE: vpop (vector)\n");
+    gprint (GP_ERR, "  remove first element of vector\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/vroll.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/vroll.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/vroll.c	(revision 7917)
@@ -8,6 +8,6 @@
 
   if (argc != 2) {
-    fprintf (stderr, "USAGE: vroll (vector)\n");
-    fprintf (stderr, "  roll vector elements (first goes to end)\n");
+    gprint (GP_ERR, "USAGE: vroll (vector)\n");
+    gprint (GP_ERR, "  roll vector elements (first goes to end)\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/vsmooth.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/vsmooth.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/vsmooth.c	(revision 7917)
@@ -16,5 +16,5 @@
 
   if (argc != 3) {
-    fprintf (stderr, "USAGE: vsmooth (input) sigma\n");
+    gprint (GP_ERR, "USAGE: vsmooth (input) sigma\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/vstat.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/vstat.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/vstat.c	(revision 7917)
@@ -32,5 +32,5 @@
 
   if (argc != 2) {
-    fprintf (stderr, "USAGE: vstat (vector)\n");
+    gprint (GP_ERR, "USAGE: vstat (vector)\n");
     return (FALSE);
   }
@@ -99,5 +99,5 @@
 skip:
   if (!Quiet) {
-    fprintf (stderr, "mean: %g, stdev: %g, min: %g, max: %g, median: %g, mode: %g, Npts: %d\n", 
+    gprint (GP_ERR, "mean: %g, stdev: %g, min: %g, max: %g, median: %g, mode: %g, Npts: %d\n", 
 	     mean, stdev, min, max, median, mode, N);
   }
Index: /trunk/Ohana/src/opihi/cmd.data/wd.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/wd.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/wd.c	(revision 7917)
@@ -52,5 +52,5 @@
     if (!strcasecmp (argv[N], "f") || !strcasecmp (argv[N], "false")) outUnsign = FALSE;
     if (outUnsign == -1) {
-      fprintf (stderr, "-unsign options: t, f, true, false\n");
+      gprint (GP_ERR, "-unsign options: t, f, true, false\n");
       return (FALSE);
     }
@@ -60,5 +60,5 @@
 
   if (argc != 3) {
-    fprintf (stderr, "USAGE: wd <buffer> <filename> [-bitpix N] [-bscale X] [-bzero X] [-newplane]\n");
+    gprint (GP_ERR, "USAGE: wd <buffer> <filename> [-bitpix N] [-bscale X] [-bzero X] [-newplane]\n");
     return (FALSE);
   }
@@ -115,5 +115,5 @@
     f = fopen (argv[2], "r+");
     if (f == NULL) {
-      fprintf (stderr, "failed to write file\n");
+      gprint (GP_ERR, "failed to write file\n");
       status = FALSE;
       goto done1;
@@ -124,5 +124,5 @@
     status = fwrite (Xhead.buffer, 1, Xhead.size, f);
     if (status != Xhead.size) {
-      fprintf (stderr, "ERROR: failed writing data to image header\n");
+      gprint (GP_ERR, "ERROR: failed writing data to image header\n");
       status = FALSE;
       goto done1;
@@ -144,5 +144,5 @@
     fclose (f);
     if (status != temp_header.size) {
-      fprintf (stderr, "failed to write file\n");
+      gprint (GP_ERR, "failed to write file\n");
       status = FALSE;
       goto done1;
@@ -150,5 +150,5 @@
     /* write the matrix buffer (automatically goes to end of file */
     if (!gfits_write_matrix (argv[2], &temp_matrix)) {
-      fprintf (stderr, "failed to write file\n");
+      gprint (GP_ERR, "failed to write file\n");
       status = FALSE;
       goto done1;
@@ -164,5 +164,5 @@
   /* the actual write-to-disk goes here */
   if (!gfits_write_header (argv[2], &temp_header)) {
-    fprintf (stderr, "failed to write header\n");
+    gprint (GP_ERR, "failed to write header\n");
     gfits_free_header (&temp_header);
     gfits_free_matrix (&temp_matrix);
@@ -171,5 +171,5 @@
   
   if (!gfits_write_matrix (argv[2], &temp_matrix)) {
-    fprintf (stderr, "failed to write matrix\n");
+    gprint (GP_ERR, "failed to write matrix\n");
     gfits_free_header (&temp_header);
     gfits_free_matrix (&temp_matrix);
Index: /trunk/Ohana/src/opihi/cmd.data/write_vectors.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/write_vectors.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/write_vectors.c	(revision 7917)
@@ -18,5 +18,5 @@
 
   if (argc < 3) {
-    fprintf (stderr, "USAGE: write [-f \"format\"] file vector vector ...\n");
+    gprint (GP_ERR, "USAGE: write [-f \"format\"] file vector vector ...\n");
     return (FALSE);
   }
@@ -25,5 +25,5 @@
   f = fopen (argv[1], "w");
   if (f == (FILE *) NULL) {
-    fprintf (stderr, "can't open file for write\n");
+    gprint (GP_ERR, "can't open file for write\n");
     return (FALSE);
   }
@@ -32,5 +32,5 @@
   Nvec = (argc - 2);
   if (Nvec < 1) {
-      fprintf (stderr, "USAGE: write (file) vector vector ...\n");
+      gprint (GP_ERR, "USAGE: write (file) vector vector ...\n");
       fclose (f);
       return (FALSE);
@@ -41,6 +41,6 @@
   for (i = 0; i < Nvec; i++) {
     if ((vec[i] = SelectVector (argv[i + 2], OLDVECTOR, FALSE)) == NULL) {
-      fprintf (stderr, "unknown vector %s\n", argv[i+2]);
-      fprintf (stderr, "USAGE: write (file) vector vector ...\n");
+      gprint (GP_ERR, "unknown vector %s\n", argv[i+2]);
+      gprint (GP_ERR, "USAGE: write (file) vector vector ...\n");
       free (vec);
       fclose (f);
@@ -53,5 +53,5 @@
   for (i = 0; i < Nvec; i++) {
     if (vec[0][0].Nelements != Ne) {
-      fprintf (stderr, "error: vectors must all be the same size\n");
+      gprint (GP_ERR, "error: vectors must all be the same size\n");
       free (vec);
       fclose (f);
@@ -86,5 +86,5 @@
     p1 = strchr (p0, '%');
     if (p1 == (char *) NULL) {
-      fprintf (stderr, "mismatch between format and values\n");
+      gprint (GP_ERR, "mismatch between format and values\n");
       free (fmttype);
       for (i = 0; i < Nvec; i++) free (fmtlist[i]);
@@ -109,5 +109,5 @@
 	break;
       default:
-	fprintf (stderr, "syntax error in format (only e,f,d,c,x allowed)\n");
+	gprint (GP_ERR, "syntax error in format (only e,f,d,c,x allowed)\n");
 	return (FALSE);
     }
Index: /trunk/Ohana/src/opihi/cmd.data/zap.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/zap.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/zap.c	(revision 7917)
@@ -16,5 +16,5 @@
 
   if (argc != 6) {
-    fprintf (stderr, "USAGE: zap <buffer> sx sy nx ny [-v value]\n");
+    gprint (GP_ERR, "USAGE: zap <buffer> sx sy nx ny [-v value]\n");
     return (FALSE);
   }
@@ -38,5 +38,5 @@
 
  error:
-  fprintf (stderr, "region out of range\n");
+  gprint (GP_ERR, "region out of range\n");
   return (FALSE);
 }
Index: /trunk/Ohana/src/opihi/cmd.data/zplot.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/zplot.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/cmd.data/zplot.c	(revision 7917)
@@ -18,5 +18,5 @@
 
   if (argc != 6) {
-    fprintf (stderr, "USAGE: zplot <x> <y> <z> min max\n");
+    gprint (GP_ERR, "USAGE: zplot <x> <y> <z> min max\n");
     return (FALSE);
   }
@@ -30,9 +30,9 @@
   if ((zvec = SelectVector (argv[3], OLDVECTOR, TRUE)) == NULL) return (FALSE);
   if (xvec[0].Nelements != yvec[0].Nelements) {
-    fprintf (stderr, "vectors %s and %s not the same length\n", argv[1], argv[2]);
+    gprint (GP_ERR, "vectors %s and %s not the same length\n", argv[1], argv[2]);
     return (FALSE);
   }
   if (xvec[0].Nelements != zvec[0].Nelements) {
-    fprintf (stderr, "vectors %s and %s not the same length\n", argv[1], argv[3]);
+    gprint (GP_ERR, "vectors %s and %s not the same length\n", argv[1], argv[3]);
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/dimm/Camera.c
===================================================================
--- /trunk/Ohana/src/opihi/dimm/Camera.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dimm/Camera.c	(revision 7917)
@@ -14,9 +14,9 @@
       return (TRUE);
     }
-    fprintf (stderr, "retry...\n");
+    gprint (GP_ERR, "retry...\n");
   }
   
-  fprintf (stderr, "failed to init sbig camera on %d\n", port);
-  fprintf (stderr, "%s\n", sbig_show_error (state));
+  gprint (GP_ERR, "failed to init sbig camera on %d\n", port);
+  gprint (GP_ERR, "%s\n", sbig_show_error (state));
   return (FALSE);
 }
@@ -24,21 +24,21 @@
 void DumpCameraInfo () {
 
-      fprintf (stderr, "opened sbig camera:\n");
-      fprintf (stderr, "linux_version: %f\n",      info.linux_version);
-      fprintf (stderr, "nmbr_bad_columns: %d\n",   info.nmbr_bad_columns);
-      fprintf (stderr, "imaging_abg_type: %d\n",   info.imaging_abg_type);
-      fprintf (stderr, "serial_number: %s\n",      info.serial_number);
-      fprintf (stderr, "firmware_version: %d\n",   info.firmware_version);
-      fprintf (stderr, "camera_name: %s\n",        info.camera_name);
-      fprintf (stderr, "nmbr_readout_modes: %d\n", info.camera_info[0].nmbr_readout_modes);
-      fprintf (stderr, "mode: %d\n",               info.camera_info[0].readout_mode[0].mode);
-      fprintf (stderr, "width: %d\n",              info.camera_info[0].readout_mode[0].width);
-      fprintf (stderr, "height: %d\n",             info.camera_info[0].readout_mode[0].height);
-      fprintf (stderr, "gain: %d\n",               info.camera_info[0].readout_mode[0].gain);
-      fprintf (stderr, "pixel_width: %d\n",        info.camera_info[0].readout_mode[0].pixel_width);
-      fprintf (stderr, "pixel_height: %d\n",       info.camera_info[0].readout_mode[0].pixel_height);
-
-      fprintf (stderr, "ST5_AD_size: %d\n", info.ST5_AD_size);
-      fprintf (stderr, "ST5_filter_type: %d\n", info.ST5_filter_type);
+      gprint (GP_ERR, "opened sbig camera:\n");
+      gprint (GP_ERR, "linux_version: %f\n",      info.linux_version);
+      gprint (GP_ERR, "nmbr_bad_columns: %d\n",   info.nmbr_bad_columns);
+      gprint (GP_ERR, "imaging_abg_type: %d\n",   info.imaging_abg_type);
+      gprint (GP_ERR, "serial_number: %s\n",      info.serial_number);
+      gprint (GP_ERR, "firmware_version: %d\n",   info.firmware_version);
+      gprint (GP_ERR, "camera_name: %s\n",        info.camera_name);
+      gprint (GP_ERR, "nmbr_readout_modes: %d\n", info.camera_info[0].nmbr_readout_modes);
+      gprint (GP_ERR, "mode: %d\n",               info.camera_info[0].readout_mode[0].mode);
+      gprint (GP_ERR, "width: %d\n",              info.camera_info[0].readout_mode[0].width);
+      gprint (GP_ERR, "height: %d\n",             info.camera_info[0].readout_mode[0].height);
+      gprint (GP_ERR, "gain: %d\n",               info.camera_info[0].readout_mode[0].gain);
+      gprint (GP_ERR, "pixel_width: %d\n",        info.camera_info[0].readout_mode[0].pixel_width);
+      gprint (GP_ERR, "pixel_height: %d\n",       info.camera_info[0].readout_mode[0].pixel_height);
+
+      gprint (GP_ERR, "ST5_AD_size: %d\n", info.ST5_AD_size);
+      gprint (GP_ERR, "ST5_filter_type: %d\n", info.ST5_filter_type);
 }      
 
@@ -62,5 +62,5 @@
   state = sbig_set_cooling (&cool);
   if (state < 0) {
-    fprintf (stderr, "sbig error: %s\n", sbig_show_error (state));
+    gprint (GP_ERR, "sbig error: %s\n", sbig_show_error (state));
     return (FALSE);
   }
@@ -76,5 +76,5 @@
   state = sbig_get_status (&status);
   if (state < 0) {
-    fprintf (stderr, "sbig error: %s\n", sbig_show_error (state));
+    gprint (GP_ERR, "sbig error: %s\n", sbig_show_error (state));
     return (-200.0);
   }
@@ -91,24 +91,24 @@
   state = sbig_get_status (&status);
   if (state < 0) {
-    fprintf (stderr, "sbig error: %s\n", sbig_show_error (state));
-    return (FALSE);
-  }
-
-  fprintf (stderr, "imaging_ccd_status: %d\n", status.imaging_ccd_status);
-  fprintf (stderr, "tracking_ccd_status: %d\n", status.tracking_ccd_status);
-  fprintf (stderr, "fan_on: %d\n", status.fan_on);
-  fprintf (stderr, "shutter_state: %d\n", status.shutter_state);
-  fprintf (stderr, "led_state: %d\n", status.led_state);
-  fprintf (stderr, "shutter_edge: %d\n", status.shutter_edge);
-  fprintf (stderr, "plus_x_relay: %d\n", status.plus_x_relay);
-  fprintf (stderr, "minus_x_relay: %d\n", status.minus_x_relay);
-  fprintf (stderr, "plus_y_relay: %d\n", status.plus_y_relay);
-  fprintf (stderr, "minus_y_relay: %d\n", status.minus_y_relay);
-  fprintf (stderr, "pulse_active: %d\n", status.pulse_active);
-  fprintf (stderr, "temperature_regulation: %d\n", status.temperature_regulation);
-  fprintf (stderr, "temperature_setpoint: %d\n", status.temperature_setpoint);
-  fprintf (stderr, "cooling_power: %d\n", status.cooling_power);
-  fprintf (stderr, "air_temperature: %d\n", status.air_temperature);
-  fprintf (stderr, "ccd_temperature: %d\n", status.ccd_temperature);
+    gprint (GP_ERR, "sbig error: %s\n", sbig_show_error (state));
+    return (FALSE);
+  }
+
+  gprint (GP_ERR, "imaging_ccd_status: %d\n", status.imaging_ccd_status);
+  gprint (GP_ERR, "tracking_ccd_status: %d\n", status.tracking_ccd_status);
+  gprint (GP_ERR, "fan_on: %d\n", status.fan_on);
+  gprint (GP_ERR, "shutter_state: %d\n", status.shutter_state);
+  gprint (GP_ERR, "led_state: %d\n", status.led_state);
+  gprint (GP_ERR, "shutter_edge: %d\n", status.shutter_edge);
+  gprint (GP_ERR, "plus_x_relay: %d\n", status.plus_x_relay);
+  gprint (GP_ERR, "minus_x_relay: %d\n", status.minus_x_relay);
+  gprint (GP_ERR, "plus_y_relay: %d\n", status.plus_y_relay);
+  gprint (GP_ERR, "minus_y_relay: %d\n", status.minus_y_relay);
+  gprint (GP_ERR, "pulse_active: %d\n", status.pulse_active);
+  gprint (GP_ERR, "temperature_regulation: %d\n", status.temperature_regulation);
+  gprint (GP_ERR, "temperature_setpoint: %d\n", status.temperature_setpoint);
+  gprint (GP_ERR, "cooling_power: %d\n", status.cooling_power);
+  gprint (GP_ERR, "air_temperature: %d\n", status.air_temperature);
+  gprint (GP_ERR, "ccd_temperature: %d\n", status.ccd_temperature);
 
   return (TRUE);
@@ -131,6 +131,6 @@
   state = sbig_expose (&expose);
   if (state < 0) {
-    fprintf (stderr, "exposure error\n");
-    fprintf (stderr, "%s\n", sbig_show_error (state));
+    gprint (GP_ERR, "exposure error\n");
+    gprint (GP_ERR, "%s\n", sbig_show_error (state));
     return (FALSE);
   }
@@ -138,6 +138,6 @@
   for (i = 0; i < expose.exposure_time + 10; ++i) {
     state = sbig_get_status (&status);
-    /* fprintf (stderr, "%d\n", state); */
-    /* fprintf (stderr, "%d  %d\n", status.imaging_ccd_status, status.shutter_state); */
+    /* gprint (GP_ERR, "%d\n", state); */
+    /* gprint (GP_ERR, "%d  %d\n", status.imaging_ccd_status, status.shutter_state); */
     /*    if (state == 0) return (TRUE); */
     if (status.imaging_ccd_status == -SBIG_NO_EXPOSURE_IN_PROGRESS) return (TRUE);
@@ -146,9 +146,9 @@
       continue;
     }
-    fprintf (stderr, "exposure error\n");
-    fprintf (stderr, "%s\n", sbig_show_error (state));
-    return (FALSE);
-  }
-  fprintf (stderr, "exposure timeout\n");
+    gprint (GP_ERR, "exposure error\n");
+    gprint (GP_ERR, "%s\n", sbig_show_error (state));
+    return (FALSE);
+  }
+  gprint (GP_ERR, "exposure timeout\n");
   return (FALSE);
 }
@@ -158,5 +158,5 @@
 static int readout_callback (float percent) {
   /* return 1 to continue, 0 to abort */
-  if (((int)(percent) % 10) == 0) { fprintf (stderr, "."); }
+  if (((int)(percent) % 10) == 0) { gprint (GP_ERR, "."); }
   readout_percent = percent;
   if (readout_abort) return 0;
@@ -183,11 +183,11 @@
   readout.callback = readout_callback;
     
-  fprintf (stderr, "%d, %d : %d x %d\n", readout.x, readout.y, readout.width, readout.height);
+  gprint (GP_ERR, "%d, %d : %d x %d\n", readout.x, readout.y, readout.width, readout.height);
   sync (); 
   readout_abort = FALSE;
   state = sbig_readout (&readout);
-  fprintf (stderr, "\n");
-  if (state < 0) {
-    fprintf (stderr, "sbig error: %s\n", sbig_show_error (state));
+  gprint (GP_ERR, "\n");
+  if (state < 0) {
+    gprint (GP_ERR, "sbig error: %s\n", sbig_show_error (state));
     return (FALSE);
   }
@@ -203,5 +203,5 @@
   state = sbig_control (&control);
   if (state < 0) {
-    fprintf(stderr, "sbig error: %s\n", sbig_show_error (state));
+    gprint (GP_ERR, "sbig error: %s\n", sbig_show_error (state));
     return (FALSE);
   }
@@ -217,7 +217,7 @@
   state = sbig_control (&control);
   if (state < 0) {
-    fprintf(stderr, "sbig error: %s\n", sbig_show_error (state));
-    return (FALSE);
-  }
-  return (TRUE);
-}
+    gprint (GP_ERR, "sbig error: %s\n", sbig_show_error (state));
+    return (FALSE);
+  }
+  return (TRUE);
+}
Index: /trunk/Ohana/src/opihi/dimm/Serial.c
===================================================================
--- /trunk/Ohana/src/opihi/dimm/Serial.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dimm/Serial.c	(revision 7917)
@@ -53,5 +53,5 @@
   serial.f = SerialOpen (serial.port);
   if (serial.f <= 0) {
-    fprintf (stderr, "Error opening serial port %s - error %d.\n", serial.port, serial.f);
+    gprint (GP_ERR, "Error opening serial port %s - error %d.\n", serial.port, serial.f);
     return (FALSE);
   }
@@ -77,5 +77,5 @@
    fdesc = open (port, O_RDWR);
    if (fdesc == -1) {
-     if (SER_VERBOSE) fprintf(stderr, "Cannot open %s for read/write.\n", port);
+     if (SER_VERBOSE) gprint (GP_ERR, "Cannot open %s for read/write.\n", port);
      return OPENERR;
    }
@@ -87,5 +87,5 @@
    locked = fcntl (fdesc, F_SETLK, &lock);
    if (locked == -1) {
-     fprintf (stderr, "can't lock serial line\n");
+     gprint (GP_ERR, "can't lock serial line\n");
      close (fdesc);
      return OPENERR;
@@ -94,5 +94,5 @@
    /* Get the serial port's attributes... */
    if (tcgetattr (fdesc, &term) == -1) {
-      if (SER_VERBOSE) fprintf(stderr, "Port is not a tty\n");
+      if (SER_VERBOSE) gprint (GP_ERR, "Port is not a tty\n");
       return PORTERR;
    }
@@ -133,5 +133,5 @@
    if (SER_VERBOSE) printf("Setting the serial port's baud rate.\n");
    if (tcgetattr (fdesc, &term) == -1) {
-      if (SER_VERBOSE) fprintf (stderr, "Port is not a tty\n");
+      if (SER_VERBOSE) gprint (GP_ERR, "Port is not a tty\n");
       return PORTERR;
    }
@@ -174,5 +174,5 @@
    if (SER_VERBOSE) printf("Setting the serial port's parity.\n");
    if (tcgetattr(fdesc, &term) == -1) {
-      if (SER_VERBOSE) fprintf(stderr, "Port is not a tty\n");
+      if (SER_VERBOSE) gprint (GP_ERR, "Port is not a tty\n");
       return PORTERR;
    }
@@ -202,5 +202,5 @@
    if (SER_VERBOSE) printf("Setting the serial port's data bit size.\n");
    if (tcgetattr(fdesc, &term) == -1) {
-      if (SER_VERBOSE) fprintf(stderr, "Port is not a tty\n");
+      if (SER_VERBOSE) gprint (GP_ERR, "Port is not a tty\n");
       return PORTERR;
    }
@@ -241,5 +241,5 @@
    if (SER_VERBOSE) printf("Setting the serial port's stop bit.\n");
    if (tcgetattr(fdesc, &term) == -1) {
-      if (SER_VERBOSE) fprintf(stderr, "Port is not a tty\n");
+      if (SER_VERBOSE) gprint (GP_ERR, "Port is not a tty\n");
       return PORTERR;
    }
@@ -274,8 +274,8 @@
   int done, Nread, Nin, NREAD;
   
-  if (SER_ECHO) fprintf (stderr, "command: %s\n", in); 
+  if (SER_ECHO) gprint (GP_ERR, "command: %s\n", in); 
 
   if (serial.f <= 0) {
-    fprintf (stderr, "serial line closed\n"); 
+    gprint (GP_ERR, "serial line closed\n"); 
     if (out != (char **) NULL) {
       *out = strcreate ("SERIAL OFF");
@@ -290,5 +290,5 @@
 # if (0)
   for (i = 0; i < strlen(in); i++) {
-    fprintf (stderr, "%d %x\n", i, in[i]);
+    gprint (GP_ERR, "%d %x\n", i, in[i]);
   }
 # endif
@@ -297,5 +297,5 @@
   Nin = write (serial.f, in, strlen(in));
   if (Nin != strlen(in)) {
-    fprintf (stderr, "Serial Command not sent\n");
+    gprint (GP_ERR, "Serial Command not sent\n");
     return (FALSE);
    }
@@ -316,8 +316,8 @@
     Nin = read (serial.f, &line[Nread], 256);
 # if (SER_DEBUG)
-    fprintf (stderr, "%d ", Nin);
+    gprint (GP_ERR, "%d ", Nin);
 # endif
     if (Nin < 0) { /* error, check value */
-      fprintf (stderr, "error?");
+      gprint (GP_ERR, "error?");
       continue;
     }
@@ -335,5 +335,5 @@
   }
 
-  if (SER_ECHO) fprintf (stderr, "answer: %s\n", line);
+  if (SER_ECHO) gprint (GP_ERR, "answer: %s\n", line);
 
   if (out == (char **) NULL) {
Index: /trunk/Ohana/src/opihi/dimm/Telescope.c
===================================================================
--- /trunk/Ohana/src/opihi/dimm/Telescope.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dimm/Telescope.c	(revision 7917)
@@ -76,5 +76,5 @@
   if (answer == (char *) NULL) return (FALSE); 
   if (strcmp (answer, "0")) {
-    fprintf (stderr, "error: %s\n", answer);
+    gprint (GP_ERR, "error: %s\n", answer);
     return (FALSE); 
   }
@@ -135,12 +135,12 @@
   }
   if (tsel < 0) {
-    fprintf (stderr, "offset %f arcmin below minimum\n", distance);
+    gprint (GP_ERR, "offset %f arcmin below minimum\n", distance);
     return (FALSE);
   }
   if (tsel > SLEW_TIMEOUT) {
-    fprintf (stderr, "offset %f arcmin above maximum\n", distance);
+    gprint (GP_ERR, "offset %f arcmin above maximum\n", distance);
     return (FALSE);
   }
-  fprintf (stderr, "offsetting %c for %f seconds\n", dir, tsel);
+  gprint (GP_ERR, "offsetting %c for %f seconds\n", dir, tsel);
   
   sprintf (cmd, ":%s#", rcmd[rsel]);
@@ -181,5 +181,5 @@
   for (i = 0; i < NRATE; i++) if (!strcmp (rcmd[i], rate)) status = TRUE;
   if (!status) {
-    fprintf (stderr, "bad rate: %s\n", rate);
+    gprint (GP_ERR, "bad rate: %s\n", rate);
     return (FALSE);
   }
@@ -234,5 +234,5 @@
 
   SerialCommand (":CM#", &answer, SER_TIMEOUT);
-  fprintf (stderr, "result: %s\n", answer);
+  gprint (GP_ERR, "result: %s\n", answer);
   free (answer);
   return (TRUE);
@@ -245,5 +245,5 @@
   char *str, line[32];
 
-  fprintf (stderr, "careful, this causes problems\n");
+  gprint (GP_ERR, "careful, this causes problems\n");
   return (FALSE);
 
Index: /trunk/Ohana/src/opihi/dimm/altaz.c
===================================================================
--- /trunk/Ohana/src/opihi/dimm/altaz.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dimm/altaz.c	(revision 7917)
@@ -25,5 +25,5 @@
   latstr = get_variable ("LATITUDE");
   if (latstr == (char *) NULL) {
-    fprintf (stderr, "please define $LATITUDE\n");
+    gprint (GP_ERR, "please define $LATITUDE\n");
     return (FALSE);
   }
@@ -55,5 +55,5 @@
   latstr = get_variable ("LATITUDE");
   if (latstr == (char *) NULL) {
-    fprintf (stderr, "please define $LATITUDE\n");
+    gprint (GP_ERR, "please define $LATITUDE\n");
     return (FALSE);
   }
@@ -79,8 +79,8 @@
   
  usage:
-  fprintf (stderr, "USAGE: altaz -h (ha) (dec) (alt) (az)\n");
-  fprintf (stderr, "USAGE: altaz -c (ha) (dec) (alt) (az)\n");
-  fprintf (stderr, "       -h alt/az to ha/dec, -c ha/dec to alt/az\n");
-  fprintf (stderr, "       returned values in variables provided\n");
+  gprint (GP_ERR, "USAGE: altaz -h (ha) (dec) (alt) (az)\n");
+  gprint (GP_ERR, "USAGE: altaz -c (ha) (dec) (alt) (az)\n");
+  gprint (GP_ERR, "       -h alt/az to ha/dec, -c ha/dec to alt/az\n");
+  gprint (GP_ERR, "       returned values in variables provided\n");
   return (FALSE);
 
Index: /trunk/Ohana/src/opihi/dimm/camera.c
===================================================================
--- /trunk/Ohana/src/opihi/dimm/camera.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dimm/camera.c	(revision 7917)
@@ -30,5 +30,5 @@
 
     if (argc != 3) {
-      fprintf (stderr, "USAGE: camera init (port)\n");
+      gprint (GP_ERR, "USAGE: camera init (port)\n");
       EXIT_STATUS (FALSE);
     }
@@ -44,5 +44,5 @@
 
     if (argc != 3) {
-      fprintf (stderr, "USAGE: camera expose (exptime)\n");
+      gprint (GP_ERR, "USAGE: camera expose (exptime)\n");
       EXIT_STATUS (FALSE);
     }
@@ -58,5 +58,5 @@
 
     if (argc != 3) {
-      fprintf (stderr, "USAGE: camera temp (temperature)\n");
+      gprint (GP_ERR, "USAGE: camera temp (temperature)\n");
       EXIT_STATUS (FALSE);
     }
@@ -72,5 +72,5 @@
 
     if (argc != 2) {
-      fprintf (stderr, "USAGE: camera status\n");
+      gprint (GP_ERR, "USAGE: camera status\n");
       EXIT_STATUS (FALSE);
     }
@@ -87,5 +87,5 @@
 
     if ((argc != 7) && (argc != 3)) {
-      fprintf (stderr, "USAGE: camera readout (buffer) x y dx dy\n");
+      gprint (GP_ERR, "USAGE: camera readout (buffer) x y dx dy\n");
       EXIT_STATUS (FALSE);
     }
@@ -125,9 +125,9 @@
 
 usage:
-  fprintf (stderr, "camera init port\n");
-  fprintf (stderr, "camera expose exptime\n");
-  fprintf (stderr, "camera readout x y dx dy\n");
-  fprintf (stderr, "camera temp set value\n");
-  fprintf (stderr, "camera temp get var\n");
+  gprint (GP_ERR, "camera init port\n");
+  gprint (GP_ERR, "camera expose exptime\n");
+  gprint (GP_ERR, "camera readout x y dx dy\n");
+  gprint (GP_ERR, "camera temp set value\n");
+  gprint (GP_ERR, "camera temp get var\n");
   seteuid (UID);
   return (FALSE);
Index: /trunk/Ohana/src/opihi/dimm/dimm.c
===================================================================
--- /trunk/Ohana/src/opihi/dimm/dimm.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dimm/dimm.c	(revision 7917)
@@ -34,6 +34,6 @@
 /* standard welcome message */
 void welcome () {
-  fprintf (stderr, "\n");
-  fprintf (stderr, "Welcome to %s - %s\n\n", opihi_name, opihi_description);
+  gprint (GP_ERR, "\n");
+  gprint (GP_ERR, "Welcome to %s - %s\n\n", opihi_name, opihi_description);
 }
 
Index: /trunk/Ohana/src/opihi/dimm/findstars.c
===================================================================
--- /trunk/Ohana/src/opihi/dimm/findstars.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dimm/findstars.c	(revision 7917)
@@ -19,5 +19,5 @@
 
   if (argc != 3) {
-    fprintf (stderr, "USAGE: findstars (buffer) (threshold)\n");
+    gprint (GP_ERR, "USAGE: findstars (buffer) (threshold)\n");
     return (FALSE);
   }
@@ -133,5 +133,5 @@
   *x = Sx / So;
   *y = Sy / So;
-  fprintf (stderr, "%f %f  %f %d\n", *x, *y, So, Npixlist);
+  gprint (GP_ERR, "%f %f  %f %d\n", *x, *y, So, Npixlist);
 
   No = vecx[0].Nelements;
Index: /trunk/Ohana/src/opihi/dimm/sbig/sp_ccdcontrol.c
===================================================================
--- /trunk/Ohana/src/opihi/dimm/sbig/sp_ccdcontrol.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dimm/sbig/sp_ccdcontrol.c	(revision 7917)
@@ -36,5 +36,5 @@
 static int readout_callback(float percent)
 {
-  fprintf(stderr, "progress: Reading %d x %d pixels (%d%%)\r",
+  gprint (GP_ERR, "progress: Reading %d x %d pixels (%d%%)\r",
 	  readout.width, readout.height, (int)percent);
   /* return 1 to continue, 0 to abort */
@@ -60,5 +60,5 @@
 
   if(binmode<0 || binmode>3){
-    fprintf(stderr, "Imaging binmode options: [0=1x1, *1=2x2, 2=3x3]\n");
+    gprint (GP_ERR, "Imaging binmode options: [0=1x1, *1=2x2, 2=3x3]\n");
     exit(EXIT_FAILURE);
   }
@@ -75,5 +75,5 @@
     if (readout.width + x >
 	info.camera_info[expose.ccd].readout_mode[readout.binning].width) {
-    fprintf(stderr, "Raster X or Width parameter out of range.\n");
+    gprint (GP_ERR, "Raster X or Width parameter out of range.\n");
     exit(EXIT_FAILURE);
   }
@@ -85,5 +85,5 @@
     if (readout.height + y >
 	info.camera_info[expose.ccd].readout_mode[readout.binning].height) {
-    fprintf(stderr, "Raster Y or Height parameter out of range.\n");
+    gprint (GP_ERR, "Raster Y or Height parameter out of range.\n");
     exit(EXIT_FAILURE);
   }
@@ -98,12 +98,12 @@
   ret = sbig_expose(&expose);
   if (ret < 0)
-    fprintf(stderr, "sbig error: %s\n", sbig_show_error(ret));
+    gprint (GP_ERR, "sbig error: %s\n", sbig_show_error(ret));
   
-  fprintf(stderr, "progress: Sleeping for %g seconds\r", 0.01*expose.exposure_time);
+  gprint (GP_ERR, "progress: Sleeping for %g seconds\r", 0.01*expose.exposure_time);
 
   if (expose.exposure_time > 100) {
     for (i = 0; i < expose.exposure_time; i += 100) {
       sbig_get_status(&status);
-      fprintf(stderr, "progress: Exposure in progress; ccd_status=%d, shutter=%d (%d%%)\r",
+      gprint (GP_ERR, "progress: Exposure in progress; ccd_status=%d, shutter=%d (%d%%)\r",
 	      status.imaging_ccd_status, status.shutter_state,
 	      i * 100 / expose.exposure_time);
@@ -114,14 +114,14 @@
   
   /* wait for exposure to complete */
-  fprintf(stderr, "progress: Waiting for controller                             (100%%)\r");
+  gprint (GP_ERR, "progress: Waiting for controller                             (100%%)\r");
 
   for (i = 0; i < 1000; ++i) {
     ret = sbig_get_status(&status);
     if (ret < 0) {
-      fprintf(stderr, "sbig error: %s\n", sbig_show_error(ret));
+      gprint (GP_ERR, "sbig error: %s\n", sbig_show_error(ret));
       break;
     }
     if (status.imaging_ccd_status != 3)
-      fprintf(stderr, "logonly: ccd_status=%d\n", status.imaging_ccd_status);
+      gprint (GP_ERR, "logonly: ccd_status=%d\n", status.imaging_ccd_status);
 
     if (readout.ccd == 0) {
@@ -135,10 +135,10 @@
   }
   if (i)
-    fprintf(stderr, "warning: Exposure took an extra %g seconds\n", 0.050*i);
+    gprint (GP_ERR, "warning: Exposure took an extra %g seconds\n", 0.050*i);
 
   if (i == 1000)
-    fprintf(stderr, "error: EXPOSURE DIDN'T FINISH!\n");
+    gprint (GP_ERR, "error: EXPOSURE DIDN'T FINISH!\n");
   else
-    fprintf(stderr, "progress: Exposure complete                                  (100%%)\n");
+    gprint (GP_ERR, "progress: Exposure complete                                  (100%%)\n");
 
   readout.ccd = expose.ccd;
@@ -156,13 +156,13 @@
   sync();
   if ((ret = sbig_readout(&readout)) < 0) {
-    fprintf(stderr, "sbig error: %s\n", sbig_show_error(ret));
+    gprint (GP_ERR, "sbig error: %s\n", sbig_show_error(ret));
     return;
   }
 
-  fprintf(stderr, "progress: Writing FITS data to stdout\n");
+  gprint (GP_ERR, "progress: Writing FITS data to stdout\n");
 
   if(write_fits(readout.width, readout.height, etime, binmode, buffer)==-1)
-    fprintf(stderr, "error: Could not write FITS file to stdout.\n");
-  fprintf(stderr, "progress: sp_ccdcontrol done.\n");
+    gprint (GP_ERR, "error: Could not write FITS file to stdout.\n");
+  gprint (GP_ERR, "progress: sp_ccdcontrol done.\n");
 }
 
@@ -184,5 +184,5 @@
 
   if (ret < 0) {
-    fprintf(stderr, "error: sbig_get_status failed: %s\n", sbig_show_error(ret));
+    gprint (GP_ERR, "error: sbig_get_status failed: %s\n", sbig_show_error(ret));
     exit(EXIT_FAILURE);
   }
@@ -262,5 +262,5 @@
     exit(EXIT_FAILURE);
 
-  fprintf(stderr, "logonly: Wrote %d pixels, min=%g, max=%g\n", w*h, datamin, datamax);
+  gprint (GP_ERR, "logonly: Wrote %d pixels, min=%g, max=%g\n", w*h, datamin, datamax);
   sync();
   return 0;
@@ -268,5 +268,5 @@
 
 static void show_format(void){
-  fprintf(stderr, "Format for sp_ccdcontrol, SkyProbe CCD controller:\n"
+  gprint (GP_ERR, "Format for sp_ccdcontrol, SkyProbe CCD controller:\n"
 	  "Writes FITS file to stdout, status messages to stderr.\n"
 	  "NOTE: -port {hex} is an option for all forms of sp_ccdcontrol,\n"
@@ -310,5 +310,5 @@
     if (!strcmp(argv[i], "-port")) {
       sscanf(argv[++i], "%x", &port);
-      fprintf(stderr, "port override to 0x%x\n", port);
+      gprint (GP_ERR, "port override to 0x%x\n", port);
     }
   }
@@ -322,9 +322,9 @@
 			     */
     if (ret == 0) break;
-    fprintf(stderr,"logonly: sbig_init() failed: %s\n", sbig_show_error(ret));
+    gprint (GP_ERR,"logonly: sbig_init() failed: %s\n", sbig_show_error(ret));
     usleep(100000);
   }
   if (ret < 0) {
-    fprintf(stderr, "error: cannot open camera, giving up\n");
+    gprint (GP_ERR, "error: cannot open camera, giving up\n");
     exit(EXIT_FAILURE);
   }
@@ -336,5 +336,5 @@
     rmp = &info.camera_info[0].readout_mode[i];
 #ifdef DEBUG
-    fprintf(stderr, "debug: ImagingCCD mode %d: w=%d h=%d "
+    gprint (GP_ERR, "debug: ImagingCCD mode %d: w=%d h=%d "
 	    "gain=%f "
 	    "pw=%g ph=%g\n", rmp->mode, rmp->width,
@@ -349,5 +349,5 @@
     rmp = &info.camera_info[1].readout_mode[i];
 #ifdef DEBUG
-    fprintf(stderr, "debug: TrackingCCD mode %d: w=%d h=%d "
+    gprint (GP_ERR, "debug: TrackingCCD mode %d: w=%d h=%d "
 	    "gain=%f "
 	    "pw=%g ph=%g\n"
@@ -363,9 +363,9 @@
 	if(argc>(i+1)) etime = atof(argv[++i]);
 	else
-	  fprintf(stderr, "No argument given to -etime\n");
+	  gprint (GP_ERR, "No argument given to -etime\n");
       }
     }
     if(etime==-999.){
-	fprintf(stderr, "Must specify exposure time.\n");
+	gprint (GP_ERR, "Must specify exposure time.\n");
 	exit(EXIT_FAILURE);
       }
@@ -376,5 +376,5 @@
 	  if(argc>(i+1)) binmode = atoi(argv[++i]);
 	  else{
-	    fprintf(stderr, "No argument given for -binmode\n");
+	    gprint (GP_ERR, "No argument given for -binmode\n");
 	    exit(EXIT_FAILURE);
 	  }
@@ -388,5 +388,5 @@
 	  if (argc>(i+1)) shuttermode = atoi(argv[++i]);
 	  else{
-	    fprintf(stderr, "No argument given for -shuttermode\n");
+	    gprint (GP_ERR, "No argument given for -shuttermode\n");
 	    exit(EXIT_FAILURE);
 	  }
@@ -407,5 +407,5 @@
 	  }
 	  else{
-	    fprintf(stderr, "-raster requires 4 arguments: x y w h\n");
+	    gprint (GP_ERR, "-raster requires 4 arguments: x y w h\n");
 	    exit(EXIT_FAILURE);
 	  }
@@ -420,5 +420,5 @@
     
     if(argc<3){
-      fprintf(stderr, "Too few arguments for cool mode\n");
+      gprint (GP_ERR, "Too few arguments for cool mode\n");
       exit(EXIT_FAILURE);
     } 
@@ -426,5 +426,5 @@
     
     if(coolmode<0 || coolmode>2){
-      fprintf(stderr, "Cooling mode values allowed: [0 Off, 1 *On, 2 DirectDrive]\n");
+      gprint (GP_ERR, "Cooling mode values allowed: [0 Off, 1 *On, 2 DirectDrive]\n");
       exit(EXIT_FAILURE);
     }
@@ -433,10 +433,10 @@
     if (cool.regulation == 2){
       if(argc<4){
-	fprintf(stderr, "Must specify cooling power (0-255)\n");
+	gprint (GP_ERR, "Must specify cooling power (0-255)\n");
 	exit(EXIT_FAILURE);
       }
       coolpwr=atof(argv[3]);
       if(coolpwr<0 || coolpwr>255){
-	fprintf(stderr, "Cooling power must be 0-255.\n");
+	gprint (GP_ERR, "Cooling power must be 0-255.\n");
 	exit(EXIT_FAILURE);
       }
@@ -445,10 +445,10 @@
     else if (cool.regulation == 1) {
       if(argc<4){
-	fprintf(stderr, "Must specify temperature in deg C\n");
+	gprint (GP_ERR, "Must specify temperature in deg C\n");
 	exit(EXIT_FAILURE);
       }
       cooltemp=atof(argv[3]);
       if(cooltemp<-50 || cooltemp>20){
-	fprintf(stderr, "Cooling temperature must be -50 to 20 deg C.\n");
+	gprint (GP_ERR, "Cooling temperature must be -50 to 20 deg C.\n");
 	exit(EXIT_FAILURE);
       }
@@ -460,8 +460,8 @@
     ret = sbig_set_cooling(&cool);
     if (ret < 0){
-      fprintf(stderr, "sbig error: %s\n", sbig_show_error(ret));
+      gprint (GP_ERR, "sbig error: %s\n", sbig_show_error(ret));
     }
   }else{
-    fprintf(stderr, "Illegal command: '%s'\n", cmd);
+    gprint (GP_ERR, "Illegal command: '%s'\n", cmd);
     show_format();
   }
Index: /trunk/Ohana/src/opihi/dimm/telescope.c
===================================================================
--- /trunk/Ohana/src/opihi/dimm/telescope.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dimm/telescope.c	(revision 7917)
@@ -9,9 +9,9 @@
   if (!strcasecmp (argv[1], "init")) {
     if (argc != 3) {
-      fprintf (stderr, "USAGE: telescope init (port)\n");
+      gprint (GP_ERR, "USAGE: telescope init (port)\n");
       return (FALSE);
     }
     if (!SerialInit (argv[2])) return (FALSE);
-    fprintf (stderr, "telescope on port %s\n", argv[2]);
+    gprint (GP_ERR, "telescope on port %s\n", argv[2]);
     return (TRUE);
   }
@@ -23,11 +23,11 @@
 
     if (argc != 3) {
-      fprintf (stderr, "USAGE: telescope cmd (string)\n");
+      gprint (GP_ERR, "USAGE: telescope cmd (string)\n");
       return (FALSE);
     }
     status = SerialCommand (argv[2], &answer, 10);
-    fprintf (stderr, "status: %d\n", status);
+    gprint (GP_ERR, "status: %d\n", status);
     if (answer != (char *) NULL) {
-      fprintf (stderr, "answer: ..%s..\n", answer);
+      gprint (GP_ERR, "answer: ..%s..\n", answer);
     }
     return (TRUE);
@@ -40,5 +40,5 @@
 
     if (argc != 3) {
-      fprintf (stderr, "USAGE: telescope cmd (string)\n");
+      gprint (GP_ERR, "USAGE: telescope cmd (string)\n");
       return (FALSE);
     }
@@ -46,7 +46,7 @@
     line[1] = 0;
     status = SerialCommand (line, &answer, 10);
-    fprintf (stderr, "status: %d\n", status);
+    gprint (GP_ERR, "status: %d\n", status);
     if (answer != (char *) NULL) {
-      fprintf (stderr, "answer: ..%s..\n", answer);
+      gprint (GP_ERR, "answer: ..%s..\n", answer);
     }
     return (TRUE);
@@ -59,5 +59,5 @@
 
     if (argc != 4) {
-      fprintf (stderr, "USAGE: telescope slew (ra) (dec)\n");
+      gprint (GP_ERR, "USAGE: telescope slew (ra) (dec)\n");
       return (FALSE);
     }
@@ -81,10 +81,10 @@
 
     if (argc != 2) {
-      fprintf (stderr, "USAGE: telescope coords\n");
+      gprint (GP_ERR, "USAGE: telescope coords\n");
       return (FALSE);
     }
 
     if (!getRD (&ra, &dec)) return (FALSE);
-    fprintf (stderr, "%f %f\n", ra, dec);
+    gprint (GP_ERR, "%f %f\n", ra, dec);
     set_variable ("RA", ra);
     set_variable ("DEC", dec);
@@ -103,10 +103,10 @@
 
     if (argc != 2) {
-      fprintf (stderr, "USAGE: telescope altaz\n");
+      gprint (GP_ERR, "USAGE: telescope altaz\n");
       return (FALSE);
     }
 
     if (!getXY (&x, &y)) return (FALSE);
-    fprintf (stderr, "%f %f\n", x, y);
+    gprint (GP_ERR, "%f %f\n", x, y);
     set_variable ("ALT", x);
     set_variable ("AZ", y);
@@ -120,10 +120,10 @@
 
     if (argc != 2) {
-      fprintf (stderr, "USAGE: telescope site\n");
+      gprint (GP_ERR, "USAGE: telescope site\n");
       return (FALSE);
     }
 
     if (!getSite (&lon, &lat, &LST)) return (FALSE);
-    fprintf (stderr, "%f %f  %f\n", lon, lat, LST);
+    gprint (GP_ERR, "%f %f  %f\n", lon, lat, LST);
     set_variable ("LON", lon);
     set_variable ("LAT", lat);
@@ -137,5 +137,5 @@
 
     if (argc != 5) {
-      fprintf (stderr, "USAGE: telescope setsite (name) (longitude) (latitude)\n");
+      gprint (GP_ERR, "USAGE: telescope setsite (name) (longitude) (latitude)\n");
       return (FALSE);
     }
@@ -152,5 +152,5 @@
 
     if (argc != 3) {
-      fprintf (stderr, "USAGE: telescope settime (lst)\n");
+      gprint (GP_ERR, "USAGE: telescope settime (lst)\n");
       return (FALSE);
     }
@@ -165,5 +165,5 @@
 
     if (argc != 3) {
-      fprintf (stderr, "USAGE: telescope verbose (mode)\n");
+      gprint (GP_ERR, "USAGE: telescope verbose (mode)\n");
       return (FALSE);
     }
@@ -180,5 +180,5 @@
 
     if (argc != 4) {
-      fprintf (stderr, "USAGE: telescope setcoords (ra) (dec)\n");
+      gprint (GP_ERR, "USAGE: telescope setcoords (ra) (dec)\n");
       return (FALSE);
     }
@@ -196,7 +196,7 @@
 
     if (argc != 4) {
-      fprintf (stderr, "USAGE: telescope offset (direction) (distance)\n");
-      fprintf (stderr, "  direction : x or y\n");
-      fprintf (stderr, "  distance  : +arcmin or -arcmin\n");
+      gprint (GP_ERR, "USAGE: telescope offset (direction) (distance)\n");
+      gprint (GP_ERR, "  direction : x or y\n");
+      gprint (GP_ERR, "  distance  : +arcmin or -arcmin\n");
       return (FALSE);
     }
@@ -212,6 +212,6 @@
 
     if (argc != 5) {
-      fprintf (stderr, "USAGE: telescope toffset (direction) (rate) (duration)\n");
-      fprintf (stderr, "example: telescope toffset x RC 1.5\n");
+      gprint (GP_ERR, "USAGE: telescope toffset (direction) (rate) (duration)\n");
+      gprint (GP_ERR, "example: telescope toffset x RC 1.5\n");
       return (FALSE);
     }
@@ -223,13 +223,13 @@
 
  usage:
-  fprintf (stderr, "telescope init port - set serial port (eg, /dev/ttyS0)\n");
-  fprintf (stderr, "telescope site - get site information\n");
-  fprintf (stderr, "telescope altaz - g\n");
-  fprintf (stderr, "telescope setcoords (ra) (dec)\n");
-  fprintf (stderr, "telescope setsite (name) (longitute) (latitude)\n");
-  fprintf (stderr, "telescope coords\n");
-  fprintf (stderr, "telescope slew (ra) (dec)\n");
-  fprintf (stderr, "telescope offset (direction) (duration)\n");
-  fprintf (stderr, "telescope toffset (direction) (rate) (duration)\n");
+  gprint (GP_ERR, "telescope init port - set serial port (eg, /dev/ttyS0)\n");
+  gprint (GP_ERR, "telescope site - get site information\n");
+  gprint (GP_ERR, "telescope altaz - g\n");
+  gprint (GP_ERR, "telescope setcoords (ra) (dec)\n");
+  gprint (GP_ERR, "telescope setsite (name) (longitute) (latitude)\n");
+  gprint (GP_ERR, "telescope coords\n");
+  gprint (GP_ERR, "telescope slew (ra) (dec)\n");
+  gprint (GP_ERR, "telescope offset (direction) (duration)\n");
+  gprint (GP_ERR, "telescope toffset (direction) (rate) (duration)\n");
   return (FALSE);
 }
Index: /trunk/Ohana/src/opihi/dimm/version.c
===================================================================
--- /trunk/Ohana/src/opihi/dimm/version.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dimm/version.c	(revision 7917)
@@ -4,11 +4,11 @@
 int version (int argc, char **argv) {
 
-  fprintf (stderr, "%s\n", name);
+  gprint (GP_ERR, "%s\n", name);
 
-  fprintf (stderr, "%s\n", opihi_version());
-  fprintf (stderr, "%s\n", ohana_version());
-  fprintf (stderr, "%s\n", gfits_version());
+  gprint (GP_ERR, "%s\n", opihi_version());
+  gprint (GP_ERR, "%s\n", ohana_version());
+  gprint (GP_ERR, "%s\n", gfits_version());
 
-  fprintf (stderr, "compiled on %s %s\n", __DATE__, __TIME__);
+  gprint (GP_ERR, "compiled on %s %s\n", __DATE__, __TIME__);
   return (TRUE);
 }
Index: /trunk/Ohana/src/opihi/doc/ippc_commandserver.c
===================================================================
--- /trunk/Ohana/src/opihi/doc/ippc_commandserver.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/doc/ippc_commandserver.c	(revision 7917)
@@ -40,5 +40,5 @@
 
   if (IPPC_DEFAULT_VERBOSITY > 1) {
-    fprintf(stderr, "%s : THIS PROGRAM _IS_ A REMOTE EXPLOIT!!!\n", argv[0]);
+    gprint (GP_ERR, "%s : THIS PROGRAM _IS_ A REMOTE EXPLOIT!!!\n", argv[0]);
   }
 
@@ -78,5 +78,5 @@
   while(1) {
     if (IPPC_DEFAULT_VERBOSITY > 1) {
-      fprintf(stderr, "%s : pid: %d - waiting for connection...\n", argv[0], getpid());
+      gprint (GP_ERR, "%s : pid: %d - waiting for connection...\n", argv[0], getpid());
     }
 
@@ -86,5 +86,5 @@
     } else {
       if (IPPC_DEFAULT_VERBOSITY > 1) {
-        fprintf(stderr, "%s : pid: %d - kids: %d - child limit already reached, sleeping %ds...\n",
+        gprint (GP_ERR, "%s : pid: %d - kids: %d - child limit already reached, sleeping %ds...\n",
           argv[0], getpid(), kids, WAIT_FOR_KIDS);
       }
@@ -98,5 +98,5 @@
     if (fork() == 0) {
       if (IPPC_DEFAULT_VERBOSITY > 1) {
-        fprintf(stderr, "%s : pid: %d - new kid number: %d\n", argv[0], getpid(), kids);
+        gprint (GP_ERR, "%s : pid: %d - new kid number: %d\n", argv[0], getpid(), kids);
       }
 
@@ -110,5 +110,5 @@
       if (ntohl(auth_token) != COMMAND_KEY) {
         if (IPPC_DEFAULT_VERBOSITY > 1) {
-          fprintf(stderr, "%s : pid: %d - invalid authentication key\n", argv[0], getpid());
+          gprint (GP_ERR, "%s : pid: %d - invalid authentication key\n", argv[0], getpid());
         }
 
@@ -124,5 +124,5 @@
   
       if (IPPC_DEFAULT_VERBOSITY > 1) {
-        fprintf(stderr, "%s : pid: %d - recieved: %s\n", argv[0], getpid(), buffer);
+        gprint (GP_ERR, "%s : pid: %d - recieved: %s\n", argv[0], getpid(), buffer);
       }
   
@@ -131,5 +131,5 @@
       if (status != 0) {
         if (IPPC_DEFAULT_VERBOSITY > 1) {
-          fprintf(stderr, "%s : pid: %d - command failed - code: %d\n", argv[0], getpid(), status);
+          gprint (GP_ERR, "%s : pid: %d - command failed - code: %d\n", argv[0], getpid(), status);
         }
         netSafe = htons(status);
@@ -137,5 +137,5 @@
       } else {
         if (IPPC_DEFAULT_VERBOSITY > 1) {
-          fprintf(stderr, "%s : pid: %d - command successful\n", argv[0], getpid());
+          gprint (GP_ERR, "%s : pid: %d - command successful\n", argv[0], getpid());
         }
         netSafe = htons(status);
Index: /trunk/Ohana/src/opihi/doc/sample.c
===================================================================
--- /trunk/Ohana/src/opihi/doc/sample.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/doc/sample.c	(revision 7917)
@@ -7,12 +7,12 @@
 
   for (i = 0; i <= argc; i++) {
-    fprintf (stderr, "arg %2d: %s\n", i, argv[i]);
+    gprint (GP_ERR, "arg %2d: %s\n", i, argv[i]);
   }
   while (argv[i] != NULL) {
-    fprintf (stderr, "env %2d: %s\n", i, argv[i]);
+    gprint (GP_ERR, "env %2d: %s\n", i, argv[i]);
     i++;
   } 
   while (fscanf (stdin, "%s", line) != EOF) {
-    fprintf (stderr, "line: ...%s...\n", line);
+    gprint (GP_ERR, "line: ...%s...\n", line);
   }
 }
Index: /trunk/Ohana/src/opihi/dvo/ImageSelection.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/ImageSelection.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/ImageSelection.c	(revision 7917)
@@ -22,5 +22,5 @@
     Ngraph = 0;
     if (!GetGraphData (&graphsky, NULL, &Ngraph)) {
-      fprintf (stderr, "region display not available\n");
+      gprint (GP_ERR, "region display not available\n");
       return (FALSE);
     }
Index: /trunk/Ohana/src/opihi/dvo/LoadImages.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/LoadImages.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/LoadImages.c	(revision 7917)
@@ -17,10 +17,10 @@
 
   if (!gfits_db_lock (&db, filename)) {
-    fprintf (stderr, "error opening image catalog %s (1)\n", filename);
+    gprint (GP_ERR, "error opening image catalog %s (1)\n", filename);
     return (NULL);
   }
 
   if (db.dbstate == LCK_EMPTY) {
-    fprintf (stderr, "note: image catalog is empty\n");
+    gprint (GP_ERR, "note: image catalog is empty\n");
     ALLOCATE (image, Image, 1);
     *nimage = 1;
Index: /trunk/Ohana/src/opihi/dvo/addxtra.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/addxtra.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/addxtra.c	(revision 7917)
@@ -40,5 +40,5 @@
 
   if (argc != 6) {
-    fprintf (stderr, "USAGE: addxtra R D radius (type) (value)\n");
+    gprint (GP_ERR, "USAGE: addxtra R D radius (type) (value)\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/dvo/aregion.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/aregion.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/aregion.c	(revision 7917)
@@ -38,5 +38,5 @@
   }
   if (NBigDec < 0) {
-    fprintf (stderr, "dec out of range: %f\n", dec);
+    gprint (GP_ERR, "dec out of range: %f\n", dec);
   }
     
@@ -63,5 +63,5 @@
 
   if (!done) {
-    fprintf (stderr, "error in search: %f %f\n", ra, dec);
+    gprint (GP_ERR, "error in search: %f %f\n", ra, dec);
     exit (0);
   }
Index: /trunk/Ohana/src/opihi/dvo/avextract.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/avextract.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/avextract.c	(revision 7917)
@@ -90,6 +90,6 @@
 
 usage:
-  fprintf (stderr, "USAGE: avextract (value) [options]\n");
-  fprintf (stderr, "  value: average.parameter or photcode\n");
+  gprint (GP_ERR, "USAGE: avextract (value) [options]\n");
+  gprint (GP_ERR, "  value: average.parameter or photcode\n");
 
 escape:
Index: /trunk/Ohana/src/opihi/dvo/badimages.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/badimages.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/badimages.c	(revision 7917)
@@ -14,6 +14,6 @@
 
   if (argc != 3) {
-    fprintf (stderr, "USAGE: badimages entry value\n");
-    fprintf (stderr, "   OR: badimages -image N\n");
+    gprint (GP_ERR, "USAGE: badimages entry value\n");
+    gprint (GP_ERR, "   OR: badimages -image N\n");
     return (FALSE);
   }
@@ -38,8 +38,8 @@
     ptr = &image[entry].coords.crpix1;
     for (i = 0; i < 22; i++) {
-      fprintf (GetOutfile(), "%2d: %g\n", i, ptr[i]);
+      gprint (GP_LOG, "%2d: %g\n", i, ptr[i]);
     }
     value = image[entry].coords.pc1_1*image[entry].coords.pc2_2 + image[entry].coords.pc1_2*image[entry].coords.pc2_1;
-    fprintf (GetOutfile(), " x: %g\n", value);
+    gprint (GP_LOG, " x: %g\n", value);
     return (TRUE);
   }
@@ -57,5 +57,5 @@
       value = image[i].coords.pc1_1*image[i].coords.pc2_2 + image[i].coords.pc1_2*image[i].coords.pc2_1;
       if ((value > big) || (value < small)) {
-	fprintf (GetOutfile(), "%5d %s: %d %g\n", i, image[i].name, image[i].tzero, value);
+	gprint (GP_LOG, "%5d %s: %d %g\n", i, image[i].name, image[i].tzero, value);
       }
     }
@@ -64,5 +64,5 @@
       ptr = &image[i].coords.crpix1;
       if ((ptr[entry] > big) || (ptr[entry] < small)) {
-	fprintf (GetOutfile(), "%5d %s: %d %g\n", i, image[i].name, image[i].tzero, ptr[entry]);
+	gprint (GP_LOG, "%5d %s: %d %g\n", i, image[i].name, image[i].tzero, ptr[entry]);
       }
     }
Index: /trunk/Ohana/src/opihi/dvo/calextract.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/calextract.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/calextract.c	(revision 7917)
@@ -58,5 +58,5 @@
 
   for (Nr = 0; Nr < skylist[0].Nregions; Nr++) {
-    if (Nr && !(Nr % 500)) { fprintf (stderr, "."); }
+    if (Nr && !(Nr % 500)) { gprint (GP_ERR, "."); }
 
     /* lock, load, unlock catalog */
@@ -77,5 +77,5 @@
     /* extract values, assign to vectors */
     for (i = 0; i < catalog.Naverage; i++) {
-      if (i && !(i % 10000)) { fprintf (stderr, ","); }
+      if (i && !(i % 10000)) { gprint (GP_ERR, ","); }
       m = catalog.average[i].offset;
 
@@ -130,5 +130,5 @@
   
 usage:
-  fprintf (stderr, "USAGE: calextract F - F\n");
+  gprint (GP_ERR, "USAGE: calextract F - F\n");
   return (FALSE);
 
Index: /trunk/Ohana/src/opihi/dvo/calmextract.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/calmextract.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/calmextract.c	(revision 7917)
@@ -71,5 +71,5 @@
 
   for (Nr = 0; Nr < skylist[0].Nregions; Nr++) {
-    if (Nr && !(Nr % 500)) { fprintf (stderr, "."); }
+    if (Nr && !(Nr % 500)) { gprint (GP_ERR, "."); }
 
     /* lock, load, unlock catalog */
@@ -157,5 +157,5 @@
   
 usage:
-  fprintf (stderr, "USAGE: dmags F - F : measure.param\n");
+  gprint (GP_ERR, "USAGE: dmags F - F : measure.param\n");
   return (FALSE);
 
@@ -178,5 +178,5 @@
   value = ExtractMeasures (code, mode, average, secfilt, measure, &N, param); 
   if (N != Nin) {
-    fprintf (stderr, "error!\n");
+    gprint (GP_ERR, "error!\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/dvo/catalog.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/catalog.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/catalog.c	(revision 7917)
@@ -49,5 +49,5 @@
   NN = get_argument (argc, argv, "-n");
   if (NN && Nn) {
-    fprintf (stderr, "can't mix meas and miss scaling\n");
+    gprint (GP_ERR, "can't mix meas and miss scaling\n");
     return (FALSE);
   }
@@ -163,5 +163,5 @@
   
   if ((InRegion || (argc != 2)) && (!InRegion || (argc != 1))) {
-    fprintf (stderr, "USAGE: catalog (filename / -all) [-m M M] [-n N N] [-g] [-a RA DEC MAG] \n");
+    gprint (GP_ERR, "USAGE: catalog (filename / -all) [-m M M] [-n N N] [-g] [-a RA DEC MAG] \n");
     return (FALSE);
   }
@@ -185,5 +185,5 @@
       f = fopen (argv[1], "r");
       if (f == (FILE *) NULL) {
-	fprintf (stderr, "ERROR: can't open catalog file: %s\n", argv[1]);
+	gprint (GP_ERR, "ERROR: can't open catalog file: %s\n", argv[1]);
 	return (FALSE);
       }
@@ -225,5 +225,5 @@
       f = fopen (argv[1], "r");
       if (f == (FILE *) NULL) {
-	fprintf (stderr, "ERROR: can't open catalog file: %s\n", argv[1]);
+	gprint (GP_ERR, "ERROR: can't open catalog file: %s\n", argv[1]);
 	return (FALSE);
       }
@@ -274,5 +274,5 @@
       f = fopen (filename, "r");
       if (f == (FILE *) NULL) {
-	fprintf (stderr, "no stars in %s, skipping\n", filename);
+	gprint (GP_ERR, "no stars in %s, skipping\n", filename);
 	continue;
 	/* return (FALSE); */
Index: /trunk/Ohana/src/opihi/dvo/catdir.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/catdir.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/catdir.c	(revision 7917)
@@ -13,11 +13,11 @@
 
   if (argc != 2) {
-    fprintf (stderr, "USAGE: catdir (name)\n");
-    fprintf (stderr, "       (name) may be a path or 'default'\n");
+    gprint (GP_ERR, "USAGE: catdir (name)\n");
+    gprint (GP_ERR, "       (name) may be a path or 'default'\n");
     current = GetCATDIR ();
     if (current == NULL) {
-      fprintf (stderr, "catdir not defined\n");
+      gprint (GP_ERR, "catdir not defined\n");
     } else {
-      fprintf (stderr, "current: %s\n", current);
+      gprint (GP_ERR, "current: %s\n", current);
     }
     return (FALSE);
@@ -31,5 +31,5 @@
 
   if (!status) {
-    fprintf (stderr, "invalid / undefined CATDIR\n");
+    gprint (GP_ERR, "invalid / undefined CATDIR\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/dvo/ccd.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/ccd.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/ccd.c	(revision 7917)
@@ -121,5 +121,5 @@
 
 usage:
-  fprintf (stderr, "USAGE: ccd F - F : F - F\n");
+  gprint (GP_ERR, "USAGE: ccd F - F : F - F\n");
   return (FALSE);
 
Index: /trunk/Ohana/src/opihi/dvo/cmatch.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/cmatch.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/cmatch.c	(revision 7917)
@@ -9,11 +9,11 @@
 
   if (argc != 9) {
-    fprintf (stderr, "USAGE: cmatch file radius (RA) (DEC) (Mag) (dRA) (dDEC) (dMag)\n");
-    fprintf (stderr, "       match a set of object coordinates with a DVO db table\n");
+    gprint (GP_ERR, "USAGE: cmatch file radius (RA) (DEC) (Mag) (dRA) (dDEC) (dMag)\n");
+    gprint (GP_ERR, "       match a set of object coordinates with a DVO db table\n");
     return (FALSE);
   }
 
   /*** this function is not well-defined.  re-assess it and re-code it ***/
-  fprintf (stderr, "disabled for now\n");
+  gprint (GP_ERR, "disabled for now\n");
   return (FALSE);
 
@@ -41,5 +41,5 @@
   }
   unlock_catalog (&catalog1);
-  fprintf (stderr, "read %d stars from phot catalog file %s\n", catalog1.Naverage, filename);
+  gprint (GP_ERR, "read %d stars from phot catalog file %s\n", catalog1.Naverage, filename);
 
   /* this is for loading from a text file, presumably hstgsc or usno
Index: /trunk/Ohana/src/opihi/dvo/cmd.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/cmd.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/cmd.c	(revision 7917)
@@ -119,5 +119,5 @@
 
 usage:
-  fprintf (stderr, "USAGE: cmd F - F : F\n");
+  gprint (GP_ERR, "USAGE: cmd F - F : F\n");
   return (FALSE);
 
Index: /trunk/Ohana/src/opihi/dvo/cmpRead.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/cmpRead.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/cmpRead.c	(revision 7917)
@@ -39,5 +39,5 @@
 
 escape:
-  fprintf (stderr, "error reading file\n");
+  gprint (GP_ERR, "error reading file\n");
   *nstars = 0;
   return (NULL);
@@ -80,5 +80,5 @@
 	nbytes -= Nskip;
 	bzero (buffer + nbytes, Nskip);
-	/* if (VERBOSE) fprintf (stderr, "deleted %d extra return chars\n", Nskip); */
+	/* if (VERBOSE) gprint (GP_ERR, "deleted %d extra return chars\n", Nskip); */
       }
       c2 = strchr (c, '\n');
@@ -93,5 +93,5 @@
 	nbytes -= Nskip;
 	bzero (buffer + nbytes, Nskip);
-	/* if (VERBOSE) fprintf (stderr, "deleted line, %d extra chars\n", Nskip); */
+	/* if (VERBOSE) gprint (GP_ERR, "deleted line, %d extra chars\n", Nskip); */
       } else {
 	c = c2;
Index: /trunk/Ohana/src/opihi/dvo/cmpload.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/cmpload.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/cmpload.c	(revision 7917)
@@ -32,10 +32,10 @@
 
   if (argc != 3) {
-    fprintf (stderr, "USAGE: cmpload (overlay) <filename>\n");
+    gprint (GP_ERR, "USAGE: cmpload (overlay) <filename>\n");
     return (FALSE);
   }
 
   if (!gfits_read_header (argv[2], &header)) {
-    fprintf (stderr, "ERROR: can't read header for %s\n", argv[2]);
+    gprint (GP_ERR, "ERROR: can't read header for %s\n", argv[2]);
     return (FALSE);
   }
@@ -44,5 +44,5 @@
   gfits_scan (&header, "NSTARS", "%d", 1, &Nstar);
   if (Nstar == 0) {
-    fprintf (stderr, "ERROR: can't get NSTARS from header\n");
+    gprint (GP_ERR, "ERROR: can't get NSTARS from header\n");
     gfits_free_header (&header);
     return (FALSE);
@@ -51,5 +51,5 @@
   f = fopen (argv[2], "r");
   if (f == NULL) {
-    fprintf (stderr, "ERROR: can't read data from %s\n", argv[2]);
+    gprint (GP_ERR, "ERROR: can't read data from %s\n", argv[2]);
     gfits_free_header (&header);
     return (FALSE);
@@ -137,5 +137,5 @@
   free (buffer);
 
-  fprintf (stderr, "loaded %d objects\n", Noverlay);
+  gprint (GP_ERR, "loaded %d objects\n", Noverlay);
   return (TRUE);
 }
Index: /trunk/Ohana/src/opihi/dvo/cmpread.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/cmpread.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/cmpread.c	(revision 7917)
@@ -16,5 +16,5 @@
 
   if (argc != 3) {
-    fprintf (stderr, "USAGE: cmpread field <filename>\n");
+    gprint (GP_ERR, "USAGE: cmpread field <filename>\n");
     return (FALSE);
   }
@@ -34,5 +34,5 @@
   if (!strcasecmp (argv[1], "galmag"))  field = F_GALMAG;
   if (field == F_NONE) {
-    fprintf (stderr, "invalid cmp field: %s\n", argv[1]);
+    gprint (GP_ERR, "invalid cmp field: %s\n", argv[1]);
     return (FALSE);
   }
@@ -42,5 +42,5 @@
   /* load FITS header */
   if (!gfits_read_header (argv[2], &header)) {
-    fprintf (stderr, "ERROR: can't read header for %s\n", argv[2]);
+    gprint (GP_ERR, "ERROR: can't read header for %s\n", argv[2]);
     return (FALSE);
   }
@@ -48,5 +48,5 @@
   if ((field == F_RA) || (field == F_DEC)) {
     if (!GetCoords (&coords, &header)) {
-      fprintf (stderr, "can't get WCS info from header\n");
+      gprint (GP_ERR, "can't get WCS info from header\n");
       gfits_free_header (&header);
       return (FALSE);
@@ -57,5 +57,5 @@
   f = fopen (argv[2], "r");
   if (f == NULL) {
-    fprintf (stderr, "ERROR: can't read data from %s\n", argv[2]);
+    gprint (GP_ERR, "ERROR: can't read data from %s\n", argv[2]);
     gfits_free_header (&header);
     return (FALSE);
@@ -65,5 +65,5 @@
   /* find expected number of stars */
   if (!gfits_scan (&header, "NSTARS", "%d", 1, &Nstars)) {
-    fprintf (stderr, "ERROR: can't get NSTARS from header\n");
+    gprint (GP_ERR, "ERROR: can't get NSTARS from header\n");
     gfits_free_header (&header);
     return (FALSE);
@@ -74,5 +74,5 @@
   gfits_scan (&header, "EXTEND",  "%t", 1, &extend);
   if (extend) {
-    fprintf (stderr, "reading from FITS cmp file %s\n", argv[2]);
+    gprint (GP_ERR, "reading from FITS cmp file %s\n", argv[2]);
     Nbytes = gfits_matrix_size (&header);
     fseek (f, Nbytes, SEEK_CUR); 
@@ -80,7 +80,7 @@
   } else {
     /* allocate space for stars */
-    fprintf (stderr, "reading from TEXT cmp file %s\n", argv[2]);
+    gprint (GP_ERR, "reading from TEXT cmp file %s\n", argv[2]);
     if (!gfits_scan (&header, "NSTARS", "%d", 1, &Nstars)) {
-      fprintf (stderr, "ERROR: failed to find NSTARS\n");
+      gprint (GP_ERR, "ERROR: failed to find NSTARS\n");
       exit (1);
     }
@@ -139,5 +139,5 @@
   free (stars);
   gfits_free_header (&header);
-  fprintf (stderr, "loaded %d objects\n", Nstars);
+  gprint (GP_ERR, "loaded %d objects\n", Nstars);
   return (TRUE);
 }
Index: /trunk/Ohana/src/opihi/dvo/compare.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/compare.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/compare.c	(revision 7917)
@@ -22,5 +22,5 @@
 
     if (!(i % 100))
-      fprintf (stderr, ".");
+      gprint (GP_ERR, ".");
     
     if (dX <= -radius)
Index: /trunk/Ohana/src/opihi/dvo/ddmags.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/ddmags.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/ddmags.c	(revision 7917)
@@ -72,5 +72,5 @@
     }
     unlock_catalog (&catalog);
-    // fprintf (stderr, "seaching %s with %d stars\n", catalog.filename, catalog.Naverage);
+    // gprint (GP_ERR, "seaching %s with %d stars\n", catalog.filename, catalog.Naverage);
     // ListPhotSelections ();
 
@@ -112,5 +112,5 @@
       if (M2 != NULL) free (M2);
     }
-    // fprintf (stderr, "selected %d stars\n", Npts);
+    // gprint (GP_ERR, "selected %d stars\n", Npts);
 
     if (catalog.average != NULL) free (catalog.average);
@@ -126,5 +126,5 @@
 
 usage:
-  fprintf (stderr, "USAGE: ddmags F - F : measure.param\n");
+  gprint (GP_ERR, "USAGE: ddmags F - F : measure.param\n");
 
 escape:
Index: /trunk/Ohana/src/opihi/dvo/detrend.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/detrend.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/detrend.c	(revision 7917)
@@ -28,10 +28,10 @@
     remove_argument (N, &argc, argv);
     if (!str_to_time (argv[N], &tzero)) { 
-      fprintf (stderr, "syntax error\n");
+      gprint (GP_ERR, "syntax error\n");
       return (FALSE);
     }
     remove_argument (N, &argc, argv);
     if (!str_to_dtime (argv[N], &trange)) { 
-      fprintf (stderr, "syntax error\n");
+      gprint (GP_ERR, "syntax error\n");
       return (FALSE);
     }
@@ -46,10 +46,10 @@
     remove_argument (N, &argc, argv);
     if (!str_to_time (argv[N], &tzero)) { 
-      fprintf (stderr, "syntax error\n");
+      gprint (GP_ERR, "syntax error\n");
       return (FALSE);
     }
     remove_argument (N, &argc, argv);
     if (!str_to_time (argv[N], &tend)) { 
-      fprintf (stderr, "syntax error\n");
+      gprint (GP_ERR, "syntax error\n");
       return (FALSE);
     }
@@ -69,5 +69,5 @@
     Type = get_image_type (argv[N]);
     if (Type == T_UNDEF) {
-      fprintf (stderr, "ERROR: invalid image type %s\n", argv[N]);
+      gprint (GP_ERR, "ERROR: invalid image type %s\n", argv[N]);
       return (FALSE);
     }
@@ -98,8 +98,8 @@
 
   if (argc != 2) {
-    fprintf (stderr, "USAGE: imrough (value)\n");
-    return (FALSE);
-  }
-  fprintf (stderr, "  this function is not well-defined.  re-work and re-code\n");
+    gprint (GP_ERR, "USAGE: imrough (value)\n");
+    return (FALSE);
+  }
+  gprint (GP_ERR, "  this function is not well-defined.  re-work and re-code\n");
   return (FALSE);
   
@@ -114,6 +114,6 @@
   if (!strcasecmp (argv[1], "temp")) mode = TEMP;
   if (mode == ZERO) {
-    fprintf (stderr, "value may be one of the following:\n");
-    fprintf (stderr, " exptime, sky, bias, fwhm, airmass, time\n");
+    gprint (GP_ERR, "value may be one of the following:\n");
+    gprint (GP_ERR, " exptime, sky, bias, fwhm, airmass, time\n");
     return (FALSE);
   }
@@ -123,5 +123,5 @@
   /* load in database header */
   if (!gfits_read_header (DataBase, &header)) {
-    fprintf (stderr, "ERROR: trouble reading database header\n");
+    gprint (GP_ERR, "ERROR: trouble reading database header\n");
     return (FALSE);
   }
@@ -130,5 +130,5 @@
   f = fopen (DataBase, "r");
   if (f == (FILE *) NULL) {
-    fprintf (stderr, "ERROR: can't open Registration Database\n");
+    gprint (GP_ERR, "ERROR: can't open Registration Database\n");
     return (FALSE);
   }
@@ -142,5 +142,5 @@
 
   if (status != Nimage) {
-    fprintf (stderr, "ERROR: header and data in dB don't match (%d vs %d)\n", Nimage, status);
+    gprint (GP_ERR, "ERROR: header and data in dB don't match (%d vs %d)\n", Nimage, status);
     gfits_free_header (&header);
     free (pimage);
@@ -155,5 +155,5 @@
 
   GetTimeFormat (&TimeReference, &TimeFormat);
-  fprintf (stderr, "%ld %d\n", TimeReference, TimeFormat);
+  gprint (GP_ERR, "%ld %d\n", TimeReference, TimeFormat);
 
   /* get data */
Index: /trunk/Ohana/src/opihi/dvo/dmagaves.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/dmagaves.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/dmagaves.c	(revision 7917)
@@ -101,5 +101,5 @@
 
 usage:
-  fprintf (stderr, "USAGE: dmagaves F - F : average.param\n");
+  gprint (GP_ERR, "USAGE: dmagaves F - F : average.param\n");
   return (FALSE);
 
Index: /trunk/Ohana/src/opihi/dvo/dmagmeas.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/dmagmeas.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/dmagmeas.c	(revision 7917)
@@ -122,5 +122,5 @@
 
 usage:
-  fprintf (stderr, "USAGE: dmagmeas F - F : measure.param\n");
+  gprint (GP_ERR, "USAGE: dmagmeas F - F : measure.param\n");
   return (FALSE);
 
Index: /trunk/Ohana/src/opihi/dvo/dmags.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/dmags.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/dmags.c	(revision 7917)
@@ -122,10 +122,10 @@
 
 usage:
-  fprintf (stderr, "USAGE: dmags F - F : F\n");
-  fprintf (stderr, "    F : any photcodes with matched qualifiers:\n");
-  fprintf (stderr, "    pri: F:inst, F:cat, F:sys, F:rel, F:cal, F:ave, F:ref\n");
-  fprintf (stderr, "    sec: F:inst, F:cat, F:sys, F:rel, F:cal, F:ave, F:ref\n");
-  fprintf (stderr, "    dep: F:inst, F:cat, F:sys, F:rel, F:cal\n");
-  fprintf (stderr, "    ref: F:cat\n");
+  gprint (GP_ERR, "USAGE: dmags F - F : F\n");
+  gprint (GP_ERR, "    F : any photcodes with matched qualifiers:\n");
+  gprint (GP_ERR, "    pri: F:inst, F:cat, F:sys, F:rel, F:cal, F:ave, F:ref\n");
+  gprint (GP_ERR, "    sec: F:inst, F:cat, F:sys, F:rel, F:cal, F:ave, F:ref\n");
+  gprint (GP_ERR, "    dep: F:inst, F:cat, F:sys, F:rel, F:cal\n");
+  gprint (GP_ERR, "    ref: F:cat\n");
 
 escape:
Index: /trunk/Ohana/src/opihi/dvo/dmt.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/dmt.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/dmt.c	(revision 7917)
@@ -32,5 +32,5 @@
 
   if (argc != 3) {
-    fprintf (stderr, "USAGE: dmags filter\n");
+    gprint (GP_ERR, "USAGE: dmags filter\n");
     return (FALSE);
   }
@@ -41,9 +41,9 @@
 
   if ((code = GetPhotcodebyName (argv[1])) == NULL) {
-    fprintf (stderr, "ERROR: photcode not found in photcode table\n");
+    gprint (GP_ERR, "ERROR: photcode not found in photcode table\n");
     return (FALSE);
   }
   if ((code[0].type != PHOT_SEC) && (code[0].type != PHOT_PRI)) {
-    fprintf (stderr, "first filter must be a PRIMARY or SECONDARY photometry type\n");
+    gprint (GP_ERR, "first filter must be a PRIMARY or SECONDARY photometry type\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/dvo/dvo.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/dvo.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/dvo.c	(revision 7917)
@@ -19,5 +19,5 @@
 
   if (!SetCATDIR (NULL, FALSE)) {
-    fprintf (stderr, "CATDIR is not defined\n");
+    gprint (GP_ERR, "CATDIR is not defined\n");
   }
 
@@ -38,6 +38,6 @@
 /* standard welcome message */
 void welcome () {
-  fprintf (stderr, "\n");
-  fprintf (stderr, "Welcome to %s - %s\n\n", opihi_name, opihi_description);
+  gprint (GP_ERR, "\n");
+  gprint (GP_ERR, "Welcome to %s - %s\n\n", opihi_name, opihi_description);
 }
 
Index: /trunk/Ohana/src/opihi/dvo/elixir.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/elixir.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/elixir.c	(revision 7917)
@@ -30,15 +30,15 @@
  
   if (argc != 2) {
-    fprintf (stderr, "USAGE: elixir (elixir) [-time] [-live]\n");
+    gprint (GP_ERR, "USAGE: elixir (elixir) [-time] [-live]\n");
     return (FALSE);
   }
 
   if (!VarConfig (argv[1], "%s", ElixirBase)) {
-    fprintf (stderr, "elixir %s not in config file\n", argv[1]);
+    gprint (GP_ERR, "elixir %s not in config file\n", argv[1]);
     return (FALSE);
   }
   sprintf (fifo, "%s.msg", ElixirBase);
   if (!VarConfig ("FIFOS", "%s", fifodir)) {
-    fprintf (stderr, "FIFOS not in config, using local /tmp\n");
+    gprint (GP_ERR, "FIFOS not in config, using local /tmp\n");
     strcpy (fifodir, "/tmp");
   }
@@ -51,10 +51,10 @@
 
   if (!WriteMsg (fifo, message)) {
-    fprintf (stderr, "can't access fifo %s\n", fifo);
+    gprint (GP_ERR, "can't access fifo %s\n", fifo);
     return (FALSE);
   }
 
   if (ReadMsg (msgfile, &answer)) {
-    fprintf (stderr, "%s\n", answer);
+    gprint (GP_ERR, "%s\n", answer);
   } 
   unlink (msgfile);
@@ -96,5 +96,5 @@
   }
   if (i >= 20) {
-    fprintf (stderr, "no response\n");
+    gprint (GP_ERR, "no response\n");
     return (0);
   }
@@ -103,5 +103,5 @@
   f = fsetlockfile (fifo, 2.0, LCK_XCLD, &state);
   if (f == NULL) {
-    fprintf (stderr, "message locked (%d)\n", state);
+    gprint (GP_ERR, "message locked (%d)\n", state);
     return (0);
   }
@@ -121,5 +121,5 @@
     nbytes = fread (&buffer[Nbytes], 1, 0x1000, f);
     if (nbytes < 0) { 
-      fprintf (stderr, "error in ReadMsg -- got -1 bytes\n");
+      gprint (GP_ERR, "error in ReadMsg -- got -1 bytes\n");
       return (0);
     }
Index: /trunk/Ohana/src/opihi/dvo/extract.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/extract.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/extract.c	(revision 7917)
@@ -66,5 +66,5 @@
     remove_argument (N, &argc, argv);
     if ((code = GetPhotcodebyName (argv[N])) == NULL) {
-      fprintf (stderr, "ERROR: photcode %s not found in photcode table\n", argv[N]);
+      gprint (GP_ERR, "ERROR: photcode %s not found in photcode table\n", argv[N]);
       return (FALSE);
     }
@@ -73,5 +73,5 @@
 
   if (argc != 3) {
-    fprintf (stderr, "USAGE: extract (filename) (value) [-g / -a Ncol] \n");
+    gprint (GP_ERR, "USAGE: extract (filename) (value) [-g / -a Ncol] \n");
     return (FALSE);
   }
@@ -99,6 +99,6 @@
     if (!strcasecmp (argv[2], "Ncode")) mode = NCODE;
     if (mode == ZERO) {
-      fprintf (stderr, "value may be one of the following:\n");
-      fprintf (stderr, " ra dec mag Nmeas Nmiss Xp Xm ID\n");
+      gprint (GP_ERR, "value may be one of the following:\n");
+      gprint (GP_ERR, " ra dec mag Nmeas Nmiss Xp Xm ID\n");
       return (FALSE);
     }
@@ -106,9 +106,9 @@
 
   if ((mode == REF) && !PhotcodeSelect) {
-    fprintf (stderr, "must specify photcode for Reference\n");
+    gprint (GP_ERR, "must specify photcode for Reference\n");
     return (FALSE);
   }
   if ((mode == TYPE) && !PhotcodeSelect) {
-    fprintf (stderr, "must specify photcode for Type\n");
+    gprint (GP_ERR, "must specify photcode for Type\n");
     return (FALSE);
   }
@@ -120,9 +120,9 @@
     Ns = GetPhotcodeNsec (code[0].code);
     if ((mode != REF) && (code[0].type != PHOT_SEC) && (code[0].type != PHOT_PRI)) {
-      fprintf (stderr, "filter must be a PRIMARY or SECONDARY photometry type\n");
+      gprint (GP_ERR, "filter must be a PRIMARY or SECONDARY photometry type\n");
       return (FALSE);
     }
     if ((mode == REF) && (code[0].type != PHOT_REF)) {
-      fprintf (stderr, "filter must be a REFERENCE photometry type\n");
+      gprint (GP_ERR, "filter must be a REFERENCE photometry type\n");
       return (FALSE);
     }
@@ -138,6 +138,6 @@
       mode = MAG;
     if (mode == ZERO) {
-      fprintf (stderr, "for GSC, value may be one of the following:\n");
-      fprintf (stderr, " ra dec mag\n");
+      gprint (GP_ERR, "for GSC, value may be one of the following:\n");
+      gprint (GP_ERR, " ra dec mag\n");
       return (FALSE);
     }
@@ -169,5 +169,5 @@
       f = fopen (argv[1], "r");
       if (f == (FILE *) NULL) {
-	fprintf (stderr, "ERROR: can't open data file: %s\n", argv[1]);
+	gprint (GP_ERR, "ERROR: can't open data file: %s\n", argv[1]);
 	/* delete new vector! */
 	return (FALSE);
@@ -208,5 +208,5 @@
       f = fopen (filename, "r");
       if (f == (FILE *) NULL) {
-	fprintf (stderr, "no stars in %s, skipping\n", filename);
+	gprint (GP_ERR, "no stars in %s, skipping\n", filename);
 	continue;
       }
Index: /trunk/Ohana/src/opihi/dvo/find_regions.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/find_regions.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/find_regions.c	(revision 7917)
@@ -18,5 +18,5 @@
   f = fopen (filename, "r");
   if (f == NULL) {
-    fprintf (stderr, "ERROR: can't find regions file %s\n", filename);
+    gprint (GP_ERR, "ERROR: can't find regions file %s\n", filename);
     *Nregions = 0;
     return ((RegionFile *) NULL);
@@ -82,5 +82,5 @@
   }
   if (NBigDec < 0) {
-    fprintf (stderr, "ERROR: Dec out of range: %f\n", minDec);
+    gprint (GP_ERR, "ERROR: Dec out of range: %f\n", minDec);
     *Nregions = 0;
     return ((RegionFile *) NULL);
Index: /trunk/Ohana/src/opihi/dvo/fitcolors.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/fitcolors.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/fitcolors.c	(revision 7917)
@@ -108,5 +108,5 @@
   /* determine relevant photcodes, colors */
   if (!(Np = GetPhotcodeCodebyName (argv[2]))) {
-    fprintf (stderr, "ERROR: photcode not found in photcode table\n");
+    gprint (GP_ERR, "ERROR: photcode not found in photcode table\n");
     goto usage;
   }
@@ -135,5 +135,5 @@
     if (codelist[i][0].c2 != codelist[0][0].c2) goto color_mismatch;
   }
-  fprintf (stderr, "using %d photcodes\n", NP);
+  gprint (GP_ERR, "using %d photcodes\n", NP);
 
   /* output is a named buffer */
@@ -185,5 +185,5 @@
     // the selection criteria
   }
-  fprintf (stderr, "using %d possible regions\n", skylist[0].Nregions);
+  gprint (GP_ERR, "using %d possible regions\n", skylist[0].Nregions);
 
   /* vectors to save data */
@@ -221,5 +221,5 @@
 	if (catalog[k].Naverage == 0) continue;
 
-	// fprintf (stderr, "seaching %s with %d stars\n", catalog[k].filename, catalog[k].Naverage);
+	// gprint (GP_ERR, "seaching %s with %d stars\n", catalog[k].filename, catalog[k].Naverage);
 	// ListPhotSelections ();
 
@@ -259,5 +259,5 @@
 	  if (M2 != NULL) free (M2);
 	}
-	// fprintf (stderr, "selected %d stars\n", Npts);
+	// gprint (GP_ERR, "selected %d stars\n", Npts);
       }
 
@@ -275,8 +275,8 @@
       
       /* do something useful with the results (stored in Cn, C0, C1, etc) */
-      fprintf (GetOutfile(), "%s - %s : ", code[0][0].name, code[1][0].name);
-      fprintf (GetOutfile(), "%7.4f %7.4f   %7.4f   ", 
+      gprint (GP_LOG, "%s - %s : ", code[0][0].name, code[1][0].name);
+      gprint (GP_LOG, "%7.4f %7.4f   %7.4f   ", 
 	       C0, C1, get_double_variable ("dC"));
-      fprintf (GetOutfile(), "%5s of %5d\n", get_variable ("Cnv"), Npts);
+      gprint (GP_LOG, "%5s of %5d\n", get_variable ("Cnv"), Npts);
       out[NP1 + NP2*NP] = C1;
 
@@ -369,13 +369,13 @@
 
 usage:
-  fprintf (stderr, "USAGE: chipcolors (output) (photcode) (camera)\n");
+  gprint (GP_ERR, "USAGE: chipcolors (output) (photcode) (camera)\n");
   goto escape;
 
 color_missing:
-  fprintf (stderr, "error: chips are missing a color reference\n");
+  gprint (GP_ERR, "error: chips are missing a color reference\n");
   goto escape;
 
 color_mismatch:
-  fprintf (stderr, "error: all chips must have the same colors\n");
+  gprint (GP_ERR, "error: all chips must have the same colors\n");
   goto escape;
 
Index: /trunk/Ohana/src/opihi/dvo/fitsed.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/fitsed.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/fitsed.c	(revision 7917)
@@ -187,5 +187,5 @@
   /* loop over regions, extract data for each region */
   // XXX add interrupt checks
-  fprintf (stderr, "using %d possible regions\n", skylist[0].Nregions);
+  gprint (GP_ERR, "using %d possible regions\n", skylist[0].Nregions);
   for (k = 0; k < skylist[0].Nregions; k++) {
     /* lock, load, unlock catalog */
@@ -326,5 +326,5 @@
 	KiiCursorOn (fd);
 	while (KiiCursorRead (fd, &X, &Y, key)) {
-	  fprintf (stderr, "window: %f %f (%s)\n", X, Y, key);
+	  gprint (GP_ERR, "window: %f %f (%s)\n", X, Y, key);
 	  if (!strcasecmp (key, "Q")) {
 	    KiiCursorOff (fd);
@@ -343,26 +343,26 @@
     unlock_catalog (&catalog);
   }
-  fprintf (stderr, "fitted %d stars\n", Nfit);
+  gprint (GP_ERR, "fitted %d stars\n", Nfit);
   status = TRUE;
   goto finish;
   
 usage:
-  fprintf (stderr, "USAGE: fitset (sedtable) : (F) - (F)\n");
+  gprint (GP_ERR, "USAGE: fitset (sedtable) : (F) - (F)\n");
   goto escape;
 
 table_missing:
-  fprintf (stderr, "ERROR: can't open the SED table\n");
+  gprint (GP_ERR, "ERROR: can't open the SED table\n");
   goto escape;
 
 color_missing:
-  fprintf (stderr, "ERROR: reference color not in SED table\n");
+  gprint (GP_ERR, "ERROR: reference color not in SED table\n");
   goto escape;
 
 color_undefined:
-  fprintf (stderr, "ERROR: undefined photcode in reference color\n");
+  gprint (GP_ERR, "ERROR: undefined photcode in reference color\n");
   goto escape;
 
 code_missing:
-  fprintf (stderr, "ERROR: undefined photcode in SED table\n");
+  gprint (GP_ERR, "ERROR: undefined photcode in SED table\n");
   goto escape;
 
Index: /trunk/Ohana/src/opihi/dvo/gcat.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/gcat.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/gcat.c	(revision 7917)
@@ -10,5 +10,5 @@
 
   if ((argc != 3) && (argc != 4)) {
-    fprintf (stderr, "USAGE: gcat RA DEC [Radius]\n");
+    gprint (GP_ERR, "USAGE: gcat RA DEC [Radius]\n");
     return (FALSE);
   }
@@ -27,7 +27,7 @@
   for (i = 0; i < skylist[0].Nregions; i++) {
     if (stat (skylist[0].filename[i], &filestat) != -1) {
-      fprintf (stderr, "%3d %s *\n", i, skylist[0].regions[i][0].name);
+      gprint (GP_ERR, "%3d %s *\n", i, skylist[0].regions[i][0].name);
     } else {
-      fprintf (stderr, "%3d %s\n", i, skylist[0].regions[i][0].name);
+      gprint (GP_ERR, "%3d %s\n", i, skylist[0].regions[i][0].name);
     } 
     set_str_variable ("CATNAME", skylist[0].filename[i]);
Index: /trunk/Ohana/src/opihi/dvo/get_regions.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/get_regions.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/get_regions.c	(revision 7917)
@@ -15,5 +15,5 @@
   f = fopen (filename, "r");
   if (f == NULL) {
-    fprintf (stderr, "ERROR: can't find GSC region file %s\n", filename);
+    gprint (GP_ERR, "ERROR: can't find GSC region file %s\n", filename);
     exit (0);
   }
Index: /trunk/Ohana/src/opihi/dvo/getxtra.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/getxtra.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/getxtra.c	(revision 7917)
@@ -37,5 +37,5 @@
 
   if (argc != 6) {
-    fprintf (stderr, "USAGE: addxtra R D radius (type) (value)\n");
+    gprint (GP_ERR, "USAGE: addxtra R D radius (type) (value)\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/dvo/gimages.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/gimages.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/gimages.c	(revision 7917)
@@ -21,10 +21,10 @@
     remove_argument (N, &argc, argv);
     if (!str_to_time (argv[N], &tzero)) { 
-      fprintf (stderr, "syntax error\n");
+      gprint (GP_ERR, "syntax error\n");
       return (FALSE);
     }
     remove_argument (N, &argc, argv);
     if (!str_to_dtime (argv[N], &trange)) { 
-      fprintf (stderr, "syntax error\n");
+      gprint (GP_ERR, "syntax error\n");
       return (FALSE);
     }
@@ -41,5 +41,5 @@
 
     if (!str_to_dtime (argv[N], &trange)) { 
-      fprintf (stderr, "syntax error\n");
+      gprint (GP_ERR, "syntax error\n");
       return (FALSE);
     }
@@ -52,5 +52,5 @@
     remove_argument (N, &argc, argv);
     if ((code = GetPhotcodebyName (argv[N])) == NULL) {
-      fprintf (stderr, "ERROR: photcode not found in photcode table\n");
+      gprint (GP_ERR, "ERROR: photcode not found in photcode table\n");
       return (FALSE);
     }
@@ -66,5 +66,5 @@
 
   if (argc != 3) {
-    fprintf (stderr, "USAGE: gimages RA DEC [-time t dt] [-pix]\n");
+    gprint (GP_ERR, "USAGE: gimages RA DEC [-time t dt] [-pix]\n");
     return (FALSE);
   }
@@ -103,9 +103,9 @@
 
     if (PixelCoords) {
-      fprintf (GetOutfile(), "%3d %s %6.1f %6.1f %20s %5d %2d %4.2f %6.3f %5.3f %5.3f %4x\n", 
+      gprint (GP_LOG, "%3d %s %6.1f %6.1f %20s %5d %2d %4.2f %6.3f %5.3f %5.3f %4x\n", 
 	       Nfound, image[i].name, X, Y, date, image[i].nstar, image[i].source, image[i].secz_PS, image[i].Mcal_PS, image[i].dMcal_PS, image[i].exptime, image[i].code);
     } else {
       XY_to_RD (&ra, &dec, 0.5*image[i].NX, 0.5*image[i].NY, &image[i].coords);
-      fprintf (GetOutfile(), "%3d %s %8.4f %8.4f %20s %5d %2d %4.2f %6.3f %5.3f %5.3f %4x\n", 
+      gprint (GP_LOG, "%3d %s %8.4f %8.4f %20s %5d %2d %4.2f %6.3f %5.3f %5.3f %4x\n", 
 	       Nfound, image[i].name, ra, dec, date, image[i].nstar, image[i].source, image[i].secz_PS, image[i].Mcal_PS, image[i].dMcal_PS, image[i].exptime, image[i].code);
     }
Index: /trunk/Ohana/src/opihi/dvo/gstar.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/gstar.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/gstar.c	(revision 7917)
@@ -1,5 +1,5 @@
 # include "dvoshell.h"
 
-void print_value (FILE *f, double value, short int ival);
+void print_value (double value, short int ival);
 void initPhotcodeSequence (int Nsec);
 void freePhotcodeSequence ();
@@ -50,5 +50,5 @@
 
   if (argc != 4) {
-    fprintf (stderr, "USAGE: gstar RA DEC Radius [-m]\n");
+    gprint (GP_ERR, "USAGE: gstar RA DEC Radius [-m]\n");
     return (FALSE);
   }
@@ -68,5 +68,5 @@
 
   if (skylist[0].Nregions > 1) {
-    fprintf (stderr, "warning, radius overlaps region boundary, not yet implemented\n");
+    gprint (GP_ERR, "warning, radius overlaps region boundary, not yet implemented\n");
   }
 
@@ -142,6 +142,6 @@
       k = N1[i];
       if (!QUIET) {
-	fprintf (GetOutfile(), "star: %d\n", k);
-	fprintf (GetOutfile(), "%9.5f %9.5f %3d of %3d  %4.1f %5d\n", catalog.average[k].R, catalog.average[k].D, 
+	gprint (GP_LOG, "star: %d\n", k);
+	gprint (GP_LOG, "%9.5f %9.5f %3d of %3d  %4.1f %5d\n", catalog.average[k].R, catalog.average[k].D, 
 		 catalog.average[k].Nm, catalog.average[k].Nn + catalog.average[k].Nm,
 		 0.01*catalog.average[k].Xp, catalog.average[k].code);
@@ -149,17 +149,17 @@
 	/* filter names */
 	for (j = 0; j < Nsec + 1; j++) printPhotcodeSequence (&catalog.average[k], &catalog.secfilt[Nsec*k], j, 3);
-	fprintf (GetOutfile (), "\n");
+	gprint (GP_LOG, "\n");
 
 	/* average mags */
 	for (j = 0; j < Nsec + 1; j++) printPhotcodeSequence (&catalog.average[k], &catalog.secfilt[Nsec*k], j, 0);
-	fprintf (GetOutfile(), "\n");
+	gprint (GP_LOG, "\n");
 
 	/* average mag errors */
 	for (j = 0; j < Nsec + 1; j++) printPhotcodeSequence (&catalog.average[k], &catalog.secfilt[Nsec*k], j, 1);
-	fprintf (GetOutfile(), "\n");
+	gprint (GP_LOG, "\n");
 
 	/* average mag chisq */
 	for (j = 0; j < Nsec + 1; j++) printPhotcodeSequence (&catalog.average[k], &catalog.secfilt[Nsec*k], j, 2);
-	fprintf (GetOutfile(), "\n");
+	gprint (GP_LOG, "\n");
       }
 
@@ -173,5 +173,5 @@
 	  if (GetMeasures && !QUIET) {
 	    date = sec_to_date (catalog.measure[m].t);
-	    fprintf (GetOutfile(), "%6.3f %6.3f %5.3f  %20s  %5.2f %5.2f %2d %3x %3d %-20s\n", 
+	    gprint (GP_LOG, "%6.3f %6.3f %5.3f  %20s  %5.2f %5.2f %2d %3x %3d %-20s\n", 
 		     Mcat, Mrel, catalog.measure[m].dM_PS,
 		     date, catalog.measure[m].dR_PS, catalog.measure[m].dD_PS,
@@ -219,9 +219,9 @@
 }
 
-void print_value (FILE *f, double value, short int ival) {
+void print_value (double value, short int ival) {
   if (ival == NO_MAG) 
-    fprintf (f, "NaN    ");
+    gprint (GP_LOG, "NaN    ");
   else 
-    fprintf (f, "%6.3f ", value);
+    gprint (GP_LOG, "%6.3f ", value);
 }
 
@@ -265,7 +265,7 @@
     case 0: /* average mags */
       if (seq == -1) {
-	print_value (GetOutfile(), average[0].M, average[0].M);
+	print_value (average[0].M, average[0].M);
       } else {
-	print_value (GetOutfile(), secfilt[seq].M_PS, secfilt[seq].M_PS);
+	print_value (secfilt[seq].M_PS, secfilt[seq].M_PS);
       }
       break;
@@ -273,7 +273,7 @@
     case 1: /* average mags errors */
       if (seq == -1) {
-	print_value (GetOutfile(), average[0].dM, average[0].dM);
+	print_value (average[0].dM, average[0].dM);
       } else {
-	print_value (GetOutfile(), secfilt[seq].dM_PS, secfilt[seq].dM_PS);
+	print_value (secfilt[seq].dM_PS, secfilt[seq].dM_PS);
       }
       break;
@@ -281,7 +281,7 @@
     case 2: /* average mag chisq */
       if (seq == -1) {
-	print_value (GetOutfile(), pow (10.0, 0.01*average[0].Xm), average[0].Xm);
+	print_value (pow (10.0, 0.01*average[0].Xm), average[0].Xm);
       } else {
-	print_value (GetOutfile(), pow (10.0, 0.01*secfilt[seq].Xm), secfilt[seq].Xm);
+	print_value (pow (10.0, 0.01*secfilt[seq].Xm), secfilt[seq].Xm);
       }
       break;
@@ -289,6 +289,6 @@
     case 3: /* filter names */
       code = GetPhotcodebyNsec (seq + 1);
-      fprintf (GetOutfile (), "%6s ", code[0].name);
-      break;
-  }
-}
+      gprint (GP_LOG, "%6s ", code[0].name);
+      break;
+  }
+}
Index: /trunk/Ohana/src/opihi/dvo/images.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/images.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/images.c	(revision 7917)
@@ -26,10 +26,10 @@
     remove_argument (N, &argc, argv);
     if (!str_to_time (argv[N], &tzero)) { 
-      fprintf (stderr, "syntax error\n");
+      gprint (GP_ERR, "syntax error\n");
       return (FALSE);
     }
     remove_argument (N, &argc, argv);
     if (!str_to_dtime (argv[N], &trange)) { 
-      fprintf (stderr, "syntax error\n");
+      gprint (GP_ERR, "syntax error\n");
       return (FALSE);
     }
@@ -44,10 +44,10 @@
     remove_argument (N, &argc, argv);
     if (!str_to_time (argv[N], &tzero)) { 
-      fprintf (stderr, "syntax error\n");
+      gprint (GP_ERR, "syntax error\n");
       return (FALSE);
     }
     remove_argument (N, &argc, argv);
     if (!str_to_time (argv[N], &tend)) { 
-      fprintf (stderr, "syntax error\n");
+      gprint (GP_ERR, "syntax error\n");
       return (FALSE);
     }
@@ -62,5 +62,5 @@
  
   if (argc != 1) {
-    fprintf (stderr, "USAGE: image [-time start range]\n");
+    gprint (GP_ERR, "USAGE: image [-time start range]\n");
     return (FALSE);
   }
@@ -143,5 +143,5 @@
   }
 
-  fprintf (stderr, "plotting %d images\n", N/8);
+  gprint (GP_ERR, "plotting %d images\n", N/8);
   Xvec.Nelements = Xvec.Nelements = N;
   if (N > 0) {
Index: /trunk/Ohana/src/opihi/dvo/imbox.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/imbox.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/imbox.c	(revision 7917)
@@ -13,5 +13,5 @@
 
   if (argc != 2) {
-    fprintf (stderr, "USAGE: imbox (filename)\n");
+    gprint (GP_ERR, "USAGE: imbox (filename)\n");
     return (FALSE);
   }
@@ -19,5 +19,5 @@
 
   if (!gfits_read_header (argv[1], &header)) {
-    fprintf (stderr, "file not found\n");
+    gprint (GP_ERR, "file not found\n");
     return (FALSE);
   }
@@ -41,5 +41,5 @@
     }
     if (!GetCoords (&coords, &header)) {
-      fprintf (stderr, "can't get WCS info from header\n");
+      gprint (GP_ERR, "can't get WCS info from header\n");
       return (TRUE);
     }
Index: /trunk/Ohana/src/opihi/dvo/imdata.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/imdata.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/imdata.c	(revision 7917)
@@ -20,15 +20,15 @@
     remove_argument (N, &argc, argv);
     if (!str_to_time (argv[N], &tzero)) { 
-      fprintf (stderr, "syntax error\n");
+      gprint (GP_ERR, "syntax error\n");
       return (FALSE);
     }
     remove_argument (N, &argc, argv);
     if (!str_to_dtime (argv[N], &trange)) { 
-      fprintf (stderr, "syntax error\n");
+      gprint (GP_ERR, "syntax error\n");
       return (FALSE);
     }
     remove_argument (N, &argc, argv);
     TimeSelect = TRUE;
-    fprintf (stderr, "searching in range %ds - %ds (%f seconds)\n", (int)tzero, (int)(tzero + trange), trange);
+    gprint (GP_ERR, "searching in range %ds - %ds (%f seconds)\n", (int)tzero, (int)(tzero + trange), trange);
     if (trange > 0) {
       start = tzero;
@@ -41,5 +41,5 @@
 
   if (argc != 4) {
-    fprintf (stderr, "USAGE: imdata (value) [-time t dt]\n");
+    gprint (GP_ERR, "USAGE: imdata (value) [-time t dt]\n");
     return (FALSE);
   }
@@ -68,6 +68,6 @@
     mode = 10;
   if (mode == 0) {
-    fprintf (stderr, "value may be one of the following:\n");
-    fprintf (stderr, " ra dR dec dD mag dmag Mrel Mcal source time\n");
+    gprint (GP_ERR, "value may be one of the following:\n");
+    gprint (GP_ERR, " ra dR dec dD mag dmag Mrel Mcal source time\n");
     return (FALSE);
   }
@@ -108,5 +108,5 @@
   free (subset);
   for (i = 0; i < skylist[0].Nregions; i++) {
-    fprintf (stderr, "try %s\n", skylist[0].regions[i][0].name);
+    gprint (GP_ERR, "try %s\n", skylist[0].regions[i][0].name);
   } 
   
Index: /trunk/Ohana/src/opihi/dvo/imdense.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/imdense.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/imdense.c	(revision 7917)
@@ -14,5 +14,5 @@
   /* also, option to list and not plot or plot and not list images */
   if (argc != 1) {
-    fprintf (stderr, "USAGE: image\n");
+    gprint (GP_ERR, "USAGE: image\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/dvo/imextract.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/imextract.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/imextract.c	(revision 7917)
@@ -24,10 +24,10 @@
     remove_argument (N, &argc, argv);
     if (!str_to_time (argv[N], &tzero)) { 
-      fprintf (stderr, "syntax error\n");
+      gprint (GP_ERR, "syntax error\n");
       return (FALSE);
     }
     remove_argument (N, &argc, argv);
     if (!str_to_dtime (argv[N], &trange)) { 
-      fprintf (stderr, "syntax error\n");
+      gprint (GP_ERR, "syntax error\n");
       return (FALSE);
     }
@@ -60,9 +60,9 @@
     remove_argument (N, &argc, argv);
     if ((code = GetPhotcodebyName (argv[N])) == NULL) {
-      fprintf (stderr, "ERROR: photcode %s not found in photcode table\n", argv[N]);
+      gprint (GP_ERR, "ERROR: photcode %s not found in photcode table\n", argv[N]);
       return (FALSE);
     }
     if ((code[0].type != PHOT_PRI) && (code[0].type != PHOT_SEC) && (code[0].type != PHOT_DEP)) {
-      fprintf (stderr, "photcode must be primary, secondary, or dependent code\n");
+      gprint (GP_ERR, "photcode must be primary, secondary, or dependent code\n");
       return (FALSE);
     }
@@ -71,5 +71,5 @@
 
   if (argc != 2) {
-    fprintf (stderr, "USAGE: imextract (value) [-region] [-time start range] [-photcode photcode]\n");
+    gprint (GP_ERR, "USAGE: imextract (value) [-region] [-time start range] [-photcode photcode]\n");
     return (FALSE);
   }
@@ -92,6 +92,6 @@
   if (!strcasecmp (argv[1], "flag")) mode = FLAG;
   if (mode == ZERO) {
-    fprintf (stderr, "value may be one of the following:\n");
-    fprintf (stderr, " ra dec airmass Mcal dMcal Xm photcode time fwhm exptime nstar ncal sky flag\n");
+    gprint (GP_ERR, "value may be one of the following:\n");
+    gprint (GP_ERR, " ra dec airmass Mcal dMcal Xm photcode time fwhm exptime nstar ncal sky flag\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/dvo/imlist.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/imlist.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/imlist.c	(revision 7917)
@@ -20,15 +20,15 @@
     remove_argument (N, &argc, argv);
     if (!str_to_time (argv[N], &tzero)) { 
-      fprintf (stderr, "syntax error\n");
+      gprint (GP_ERR, "syntax error\n");
       return (FALSE);
     }
     remove_argument (N, &argc, argv);
     if (!str_to_dtime (argv[N], &trange)) { 
-      fprintf (stderr, "syntax error\n");
+      gprint (GP_ERR, "syntax error\n");
       return (FALSE);
     }
     remove_argument (N, &argc, argv);
     TimeSelect = TRUE;
-    fprintf (stderr, "plotting in range %ds - %ds (%f seconds)\n", (int)tzero, (int)(tzero + trange), trange);
+    gprint (GP_ERR, "plotting in range %ds - %ds (%f seconds)\n", (int)tzero, (int)(tzero + trange), trange);
   }
 
@@ -46,5 +46,5 @@
     PhotcodeValue = GetPhotcodebyName (argv[N]);
     if (PhotcodeValue == NULL) {
-      fprintf (stderr, "photcode not found in photcode table\n");
+      gprint (GP_ERR, "photcode not found in photcode table\n");
       return (FALSE);
     }
@@ -62,5 +62,5 @@
 
   if (argc != 1) {
-    fprintf (stderr, "USAGE: image [-time start range] [-region] [-name string]\n");
+    gprint (GP_ERR, "USAGE: image [-time start range] [-region] [-name string]\n");
     return (FALSE);
   }
@@ -85,5 +85,5 @@
     t = TimeValue (image[i].tzero, TimeReference, TimeFormat);
     XY_to_RD (&r, &d, 0.5*image[i].NX, 0.5*image[i].NY, &image[i].coords);
-    fprintf (GetOutfile(), "%3d %s %8.4f %8.4f %f %5d %2d %4.2f %5.3f %5.3f\n", 
+    gprint (GP_LOG, "%3d %s %8.4f %8.4f %f %5d %2d %4.2f %5.3f %5.3f\n", 
 	     i, image[i].name, r, d, t, image[i].nstar, image[i].source, image[i].secz_PS, image[i].Mcal_PS, image[i].dMcal_PS);
   }
Index: /trunk/Ohana/src/opihi/dvo/imphot.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/imphot.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/imphot.c	(revision 7917)
@@ -22,5 +22,5 @@
 
   if (argc != 3) {
-    fprintf (stderr, "USAGE: imphot tzero trange [-g buffer]\n");
+    gprint (GP_ERR, "USAGE: imphot tzero trange [-g buffer]\n");
     return (FALSE);
   }
@@ -43,12 +43,12 @@
   /* load image(s) in time range given */
   if (!str_to_time (argv[1], &tzero)) { 
-    fprintf (stderr, "syntax error\n");
+    gprint (GP_ERR, "syntax error\n");
     return (FALSE);
   }
   if (!str_to_dtime (argv[2], &trange)) { 
-    fprintf (stderr, "syntax error\n");
+    gprint (GP_ERR, "syntax error\n");
     return (FALSE);
   }    
-  fprintf (stderr, "searching in range %ds - %ds (%f seconds)\n", (int)tzero, (int)(tzero + trange), trange);
+  gprint (GP_ERR, "searching in range %ds - %ds (%f seconds)\n", (int)tzero, (int)(tzero + trange), trange);
   
   if ((image = LoadImages (&Nimage)) == NULL) return (FALSE);
@@ -56,5 +56,5 @@
 
   if ((Nsubset > 1) && GreyScale) {
-    fprintf (stderr, "more than one image selected, making GreyScale of first only\n");
+    gprint (GP_ERR, "more than one image selected, making GreyScale of first only\n");
   }
 
@@ -74,18 +74,18 @@
     switch (image[i].order) {
     case 0:
-      fprintf (stderr, "%s: %d - %f\n", image[i].name, image[i].order, image[i].Mcal_PS);
+      gprint (GP_ERR, "%s: %d - %f\n", image[i].name, image[i].order, image[i].Mcal_PS);
       break;
     case 1:
-      fprintf (stderr, "%s: %d - %f, %d %d\n", image[i].name, image[i].order, image[i].Mcal_PS, image[i].Mx, image[i].My);
+      gprint (GP_ERR, "%s: %d - %f, %d %d\n", image[i].name, image[i].order, image[i].Mcal_PS, image[i].Mx, image[i].My);
       break;
     case 2:
-      fprintf (stderr, "%s: %d - %f, %d %d, %d %d %d\n", image[i].name, image[i].order, image[i].Mcal_PS, image[i].Mx, image[i].My, image[i].Mxx, image[i].Mxy, image[i].Myy);
+      gprint (GP_ERR, "%s: %d - %f, %d %d, %d %d %d\n", image[i].name, image[i].order, image[i].Mcal_PS, image[i].Mx, image[i].My, image[i].Mxx, image[i].Mxy, image[i].Myy);
       break;
     case 3:
-      fprintf (stderr, "%s: %d - %f, %d %d, %d %d %d, %d %d %d %d\n", image[i].name, image[i].order, image[i].Mcal_PS, image[i].Mx, image[i].My, 
+      gprint (GP_ERR, "%s: %d - %f, %d %d, %d %d %d, %d %d %d %d\n", image[i].name, image[i].order, image[i].Mcal_PS, image[i].Mx, image[i].My, 
 	       image[i].Mxx, image[i].Mxy, image[i].Myy, image[i].Mxxx, image[i].Mxxy, image[i].Mxyy, image[i].Myyy);
       break;
     case 4:
-      fprintf (stderr, "%s: %d - %f, %d %d, %d %d %d, %d %d %d %d, %d %d %d %d %d\n", image[i].name, image[i].order, image[i].Mcal_PS, image[i].Mx, image[i].My, 
+      gprint (GP_ERR, "%s: %d - %f, %d %d, %d %d %d, %d %d %d %d, %d %d %d %d %d\n", image[i].name, image[i].order, image[i].Mcal_PS, image[i].Mx, image[i].My, 
 	       image[i].Mxx, image[i].Mxy, image[i].Myy, image[i].Mxxx, image[i].Mxxy, image[i].Mxyy, image[i].Myyy,
 	       image[i].Mxxxx, image[i].Mxxxy, image[i].Mxxyy, image[i].Mxyyy, image[i].Myyyy);
Index: /trunk/Ohana/src/opihi/dvo/imrough.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/imrough.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/imrough.c	(revision 7917)
@@ -24,10 +24,10 @@
     remove_argument (N, &argc, argv);
     if (!str_to_time (argv[N], &tzero)) { 
-      fprintf (stderr, "syntax error\n");
+      gprint (GP_ERR, "syntax error\n");
       return (FALSE);
     }
     remove_argument (N, &argc, argv);
     if (!str_to_dtime (argv[N], &trange)) { 
-      fprintf (stderr, "syntax error\n");
+      gprint (GP_ERR, "syntax error\n");
       return (FALSE);
     }
@@ -42,10 +42,10 @@
     remove_argument (N, &argc, argv);
     if (!str_to_time (argv[N], &tzero)) { 
-      fprintf (stderr, "syntax error\n");
+      gprint (GP_ERR, "syntax error\n");
       return (FALSE);
     }
     remove_argument (N, &argc, argv);
     if (!str_to_time (argv[N], &tend)) { 
-      fprintf (stderr, "syntax error\n");
+      gprint (GP_ERR, "syntax error\n");
       return (FALSE);
     }
@@ -66,5 +66,5 @@
     type = get_image_type (argv[N]);
     if (type == T_UNDEF) {
-      fprintf (stderr, "ERROR: invalid image type %s\n", argv[N]);
+      gprint (GP_ERR, "ERROR: invalid image type %s\n", argv[N]);
       return (FALSE);
     }
@@ -79,5 +79,5 @@
     mode = get_image_mode (argv[N]);
     if (mode == M_UNDEF) {
-      fprintf (stderr, "ERROR: invalid image mode %s\n", argv[N]);
+      gprint (GP_ERR, "ERROR: invalid image mode %s\n", argv[N]);
       return (FALSE);
     }
@@ -107,8 +107,8 @@
 
   if (argc != 2) {
-    fprintf (stderr, "USAGE: imrough (value)\n");
-    fprintf (stderr, "       value options:\n");
+    gprint (GP_ERR, "USAGE: imrough (value)\n");
+    gprint (GP_ERR, "       value options:\n");
     for (i = 1; i < NVALUE; i++) {
-      fprintf (stderr, "%s\n", valuename[i]);
+      gprint (GP_ERR, "%s\n", valuename[i]);
     }
     return (FALSE);
@@ -121,5 +121,5 @@
   }
   if (value == V_NONE) {
-    fprintf (stderr, "ERROR: invalid image value %s\n", argv[1]);
+    gprint (GP_ERR, "ERROR: invalid image value %s\n", argv[1]);
     return (FALSE);
   }
@@ -244,5 +244,5 @@
   f = fopen (DataBase, "r");
   if (f == (FILE *) NULL) {
-    fprintf (stderr, "ERROR: can't open Registration Database\n");
+    gprint (GP_ERR, "ERROR: can't open Registration Database\n");
     return ((RegImage *) NULL);
   }
@@ -252,5 +252,5 @@
     fclose (f);
     gfits_free_header (&header);
-    fprintf (stderr, "ERROR: trouble reading database header\n");
+    gprint (GP_ERR, "ERROR: trouble reading database header\n");
     return ((RegImage *) NULL);
   }
@@ -269,5 +269,5 @@
     
     if (status != Nimage) {
-      fprintf (stderr, "ERROR: header and data in dB don't match (%d vs %d)\n", Nimage, status);
+      gprint (GP_ERR, "ERROR: header and data in dB don't match (%d vs %d)\n", Nimage, status);
       gfits_free_header (&header);
       free (image);
@@ -285,5 +285,5 @@
     gfits_free_header (&header);
     gfits_free_matrix (&matrix);
-    fprintf (stderr, "ERROR: trouble reading database matrix\n");
+    gprint (GP_ERR, "ERROR: trouble reading database matrix\n");
     return ((RegImage *) NULL);
   }
@@ -294,5 +294,5 @@
     gfits_free_header (&header);
     gfits_free_matrix (&matrix);
-    fprintf (stderr, "ERROR: trouble reading database table\n");
+    gprint (GP_ERR, "ERROR: trouble reading database table\n");
     return ((RegImage *) NULL);
   }
Index: /trunk/Ohana/src/opihi/dvo/imsearch.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/imsearch.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/imsearch.c	(revision 7917)
@@ -26,10 +26,10 @@
     remove_argument (N, &argc, argv);
     if (!str_to_time (argv[N], &tzero)) { 
-      fprintf (stderr, "syntax error\n");
+      gprint (GP_ERR, "syntax error\n");
       return (FALSE);
     }
     remove_argument (N, &argc, argv);
     if (!str_to_dtime (argv[N], &trange)) { 
-      fprintf (stderr, "syntax error\n");
+      gprint (GP_ERR, "syntax error\n");
       return (FALSE);
     }
@@ -44,5 +44,5 @@
     Type = get_image_type (argv[N]);
     if (Type == T_UNDEF) {
-      fprintf (stderr, "ERROR: invalid image type %s\n", argv[N]);
+      gprint (GP_ERR, "ERROR: invalid image type %s\n", argv[N]);
       return (FALSE);
     }
@@ -57,5 +57,5 @@
     Mode = get_image_mode (argv[N]);
     if (Mode == M_UNDEF) {
-      fprintf (stderr, "ERROR: invalid image mode %s\n", argv[N]);
+      gprint (GP_ERR, "ERROR: invalid image mode %s\n", argv[N]);
       exit (1);
     }
@@ -86,5 +86,5 @@
 
   if (argc != 1) {
-    fprintf (stderr, "USAGE: imsearch [-time start range] [-type type] [-mode mode] [-ccd N] [-filter name]\n");
+    gprint (GP_ERR, "USAGE: imsearch [-time start range] [-type type] [-mode mode] [-ccd N] [-filter name]\n");
     exit (1);
   }
@@ -92,5 +92,5 @@
   /* load in database header */
   if (!gfits_read_header (DataBase, &header)) {
-    fprintf (stderr, "ERROR: trouble reading database header\n");
+    gprint (GP_ERR, "ERROR: trouble reading database header\n");
     return (FALSE);
   }
@@ -99,5 +99,5 @@
   f = fopen (DataBase, "r");
   if (f == (FILE *) NULL) {
-    fprintf (stderr, "ERROR: can't open Registration Database\n");
+    gprint (GP_ERR, "ERROR: can't open Registration Database\n");
     return (FALSE);
   }
@@ -110,5 +110,5 @@
   fclose (f);
   if (status != Nimage) {
-    fprintf (stderr, "ERROR: header and data in dB don't match (%d vs %d)\n", Nimage, status);
+    gprint (GP_ERR, "ERROR: header and data in dB don't match (%d vs %d)\n", Nimage, status);
     gfits_free_header (&header);
     free (pimage);
@@ -129,7 +129,7 @@
     obstime[strlen(obstime)-1] = 0;
 
-    fprintf (stdout, "%5d %6s %6s %2d %2d   ", i, get_type_name(pimage[i].type), get_mode_name(pimage[i].mode), pimage[i].ccd, pimage[i].type);
-    fprintf (stdout, "%s %s  ", pimage[i].pathname, pimage[i].filename);
-    fprintf (stdout, "%s %s %f %s\n", pimage[i].filter, pimage[i].instrument, pimage[i].exptime, obstime);
+    gprint (GP_LOG, "%5d %6s %6s %2d %2d   ", i, get_type_name(pimage[i].type), get_mode_name(pimage[i].mode), pimage[i].ccd, pimage[i].type);
+    gprint (GP_LOG, "%s %s  ", pimage[i].pathname, pimage[i].filename);
+    gprint (GP_LOG, "%s %s %f %s\n", pimage[i].filter, pimage[i].instrument, pimage[i].exptime, obstime);
 
     if (SaveNames) {
Index: /trunk/Ohana/src/opihi/dvo/imstats.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/imstats.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/imstats.c	(revision 7917)
@@ -31,5 +31,5 @@
 
   if (argc != 1) {
-    fprintf (stderr, "USAGE: imstats [-dM] [-l]\n");
+    gprint (GP_ERR, "USAGE: imstats [-dM] [-l]\n");
     return (FALSE);
   }
@@ -43,5 +43,5 @@
   ALLOCATE (Xvec.elements, float, Xvec.Nelements);
   ALLOCATE (Yvec.elements, float, Yvec.Nelements);
-  fprintf (stdout, "seq  ra (J2000) dec    time (s)   Nstars\n");
+  gprint (GP_LOG, "seq  ra (J2000) dec    time (s)   Nstars\n");
   for (i = 0; i < Nimage; i++) {
     Xvec.elements[i] = image[i].secz_PS;
@@ -52,5 +52,5 @@
     if (!FindMosaicForImage (image, Nimage, i)) continue;
     XY_to_RD (&r, &d, 0.5*image[i].NX, 0.5*image[i].NY, &image[i].coords);
-    fprintf (stderr, "%d %8.4f %8.4f %10d %6d  %5.3f %6.3f %6.3f\n", 
+    gprint (GP_ERR, "%d %8.4f %8.4f %10d %6d  %5.3f %6.3f %6.3f\n", 
 	     i, r, d, image[i].tzero, image[i].nstar, Xvec.elements[i], 
 	     image[i].Mcal_PS, image[i].dMcal_PS);
Index: /trunk/Ohana/src/opihi/dvo/lcat.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/lcat.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/lcat.c	(revision 7917)
@@ -21,5 +21,5 @@
   }
   if (argc != 1) {
-    fprintf (stderr, "USAGE: lcat [-all]\n");
+    gprint (GP_ERR, "USAGE: lcat [-all]\n");
     return (FALSE);
   }
@@ -35,8 +35,8 @@
     if (stat (skylist[0].filename[i], &filestat) == -1) exists = 'N';
     if (ShowAll) {
-      fprintf (stderr, "%3d %s  %c\n", i, skylist[0].regions[i][0].name, exists);
+      gprint (GP_ERR, "%3d %s  %c\n", i, skylist[0].regions[i][0].name, exists);
     } else {
       if (exists == 'Y') {
-	fprintf (stderr, "%3d %s\n", i, skylist[0].regions[i][0].name);
+	gprint (GP_ERR, "%3d %s\n", i, skylist[0].regions[i][0].name);
       }
     }
Index: /trunk/Ohana/src/opihi/dvo/lcurve.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/lcurve.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/lcurve.c	(revision 7917)
@@ -53,5 +53,5 @@
   GalMag = FALSE;
   if ((N = get_argument (argc, argv, "-gal"))) {
-    fprintf (stderr, "galaxy magnitudes currently disabled\n");
+    gprint (GP_ERR, "galaxy magnitudes currently disabled\n");
     return (FALSE);
   }
@@ -64,5 +64,5 @@
 
   if (argc < 4) {
-    fprintf (stderr, "USAGE: lcurve RA DEC Radius\n");
+    gprint (GP_ERR, "USAGE: lcurve RA DEC Radius\n");
     return (FALSE);
   }
@@ -77,5 +77,5 @@
 
   if (skylist[0].Nregions > 1) {
-    fprintf (stderr, "warning, radius overlaps region boundary, not yet implemented\n");
+    gprint (GP_ERR, "warning, radius overlaps region boundary, not yet implemented\n");
   }
 
Index: /trunk/Ohana/src/opihi/dvo/lightcurve.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/lightcurve.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/lightcurve.c	(revision 7917)
@@ -33,5 +33,5 @@
     remove_argument (N, &argc, argv);
     if ((code = GetPhotcodebyName (argv[N])) == NULL) {
-      fprintf (stderr, "ERROR: photcode not found in photcode table\n");
+      gprint (GP_ERR, "ERROR: photcode not found in photcode table\n");
       return (FALSE);
     }
@@ -41,5 +41,5 @@
 
   if (argc < 4) {
-    fprintf (stderr, "USAGE: lightcurve RA DEC Radius\n");
+    gprint (GP_ERR, "USAGE: lightcurve RA DEC Radius\n");
     return (FALSE);
   }
@@ -53,5 +53,5 @@
 
   if (skylist[0].Nregions > 1) {
-    fprintf (stderr, "warning, radius overlaps region boundary, not yet implemented\n");
+    gprint (GP_ERR, "warning, radius overlaps region boundary, not yet implemented\n");
   }
 
Index: /trunk/Ohana/src/opihi/dvo/mextract.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/mextract.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/mextract.c	(revision 7917)
@@ -98,6 +98,6 @@
 
 usage:
-  fprintf (stderr, "USAGE: mextract (value) [options]\n");
-  fprintf (stderr, "  value: measure.parameter or photcode\n");
+  gprint (GP_ERR, "USAGE: mextract (value) [options]\n");
+  gprint (GP_ERR, "  value: measure.parameter or photcode\n");
   return (FALSE);
 
Index: /trunk/Ohana/src/opihi/dvo/pcat.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/pcat.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/pcat.c	(revision 7917)
@@ -30,5 +30,5 @@
   }
   if (argc != 1) {
-    fprintf (stderr, "USAGE: pcat [-all]\n");
+    gprint (GP_ERR, "USAGE: pcat [-all]\n");
     return (FALSE);
   }
@@ -51,5 +51,5 @@
     sprintf (filename, "%s/%s", catdir, regions[i].name);
     if (ShowAll || (stat (filename, &filestat) != -1)) {
-      if (VERBOSE) fprintf (stderr, "%3d %s\n", i, regions[i].name);
+      if (VERBOSE) gprint (GP_ERR, "%3d %s\n", i, regions[i].name);
 
       leftside = -1;
@@ -78,5 +78,5 @@
   }
 
-  fprintf (stderr, "plotting %d catalogs\n", Npts/8);
+  gprint (GP_ERR, "plotting %d catalogs\n", Npts/8);
   Xvec.Nelements = Xvec.Nelements = Npts;
   if (Npts > 0) {
Index: /trunk/Ohana/src/opihi/dvo/photcodes.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/photcodes.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/photcodes.c	(revision 7917)
@@ -10,5 +10,5 @@
 
   if (argc != 2) {
-    fprintf (stderr, "USAGE: photcodes (photcode)\n");
+    gprint (GP_ERR, "USAGE: photcodes (photcode)\n");
     return (FALSE);
   }
@@ -18,5 +18,5 @@
 
   if (!(Np = GetPhotcodeCodebyName (argv[1]))) {
-    fprintf (stderr, "ERROR: photcode not found in photcode table\n");
+    gprint (GP_ERR, "ERROR: photcode not found in photcode table\n");
     return (FALSE);
   }
@@ -54,5 +54,5 @@
     set_str_variable (name, GetPhotcodeNamebyCode (code[0].c2));
 
-    fprintf (stderr, "%5d %s %7.4f %7.4f %7.4f\n", 
+    gprint (GP_ERR, "%5d %s %7.4f %7.4f %7.4f\n", 
 	     code[0].code, code[0].name, 0.001*code[0].C, code[0].K, code[0].X[0]);
   }
Index: /trunk/Ohana/src/opihi/dvo/photometry.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/photometry.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/photometry.c	(revision 7917)
@@ -101,5 +101,5 @@
     mode = GetMagMode (p + 1);
     if (mode == MAG_NONE) {
-      fprintf (stderr, "syntax error in magnitude mode\n");
+      gprint (GP_ERR, "syntax error in magnitude mode\n");
       free (tmpstring);
       return (FALSE);
@@ -119,5 +119,5 @@
   code = GetPhotcodebyName (tmpstring);
   if (code == NULL) {
-    fprintf (stderr, "photcode not found in photcode table\n");
+    gprint (GP_ERR, "photcode not found in photcode table\n");
     free (tmpstring);
     return (FALSE);
@@ -156,5 +156,5 @@
 
   if (!status) {
-    fprintf (stderr, "mismatch in photcode and magmode\n");
+    gprint (GP_ERR, "mismatch in photcode and magmode\n");
     free (tmpstring);
     return (FALSE);
@@ -213,8 +213,8 @@
   if (!strcasecmp (parname, "YMOSAIC"))  param = MEAS_YMOSAIC;
   if (!strcasecmp (parname, "help")) {
-    fprintf (stderr, "value may be one of the following:\n");
-    fprintf (stderr, " ra dR dec dD mag dmag Mrel Mcal photcode time fwhm dophot xccd yccd xmosaic ymosaic flags\n");
-    fprintf (stderr, "value may also be a valid photcode\n");
-    fprintf (stderr, "photcodes or 'mag' may have optional magnitude type: mag,[Minst, Mcat, Msys, Mrel, Mcal]\n");
+    gprint (GP_ERR, "value may be one of the following:\n");
+    gprint (GP_ERR, " ra dR dec dD mag dmag Mrel Mcal photcode time fwhm dophot xccd yccd xmosaic ymosaic flags\n");
+    gprint (GP_ERR, "value may also be a valid photcode\n");
+    gprint (GP_ERR, "photcodes or 'mag' may have optional magnitude type: mag,[Minst, Mcat, Msys, Mrel, Mcal]\n");
   }
   return (param);
@@ -250,5 +250,5 @@
   if (!strcasecmp (parname, "typefrac")) {
     if (!TypefracType) {
-      fprintf (stderr, "typefrac needs to specify type to use\n");
+      gprint (GP_ERR, "typefrac needs to specify type to use\n");
       return (param);
     }
@@ -269,5 +269,5 @@
   if (code[0] != NULL) {
     if (PhotcodeSelect) {
-      fprintf (stderr, "photcode selection rules violated: cannot restrict photcode with a photcode\n");
+      gprint (GP_ERR, "photcode selection rules violated: cannot restrict photcode with a photcode\n");
       return (FALSE);
     } else {
@@ -295,5 +295,5 @@
   if (NeedPhotcode || Needcode || NcodeSelect || PhotcodeSelect) {
     if (!PhotcodeSelect) {
-      fprintf (stderr, "photcode selection problem: value requires photcode\n");
+      gprint (GP_ERR, "photcode selection problem: value requires photcode\n");
       return (FALSE);
     }
@@ -304,5 +304,5 @@
     if (code[0][0].type == PHOT_PRI) return (TRUE);
     if (code[0][0].type == PHOT_SEC) return (TRUE);
-    fprintf (stderr, "photcode selection problem: average value requires PRI/SEC photcode\n");
+    gprint (GP_ERR, "photcode selection problem: average value requires PRI/SEC photcode\n");
     return (FALSE);
   }
@@ -311,8 +311,8 @@
 
 void GetAverageParamHelp () {
-  fprintf (stderr, "value may be one of the following:\n");
-  fprintf (stderr, " ra dec dmag Nmeas Nmiss Xm Xp Nphot Ncode flag type typefrac\n\n");
-  fprintf (stderr, "value may also be a valid photcode\n");
-  fprintf (stderr, "photcodes or 'mag' may have optional magnitude mode: mag,[Mave, Mref]\n");
+  gprint (GP_ERR, "value may be one of the following:\n");
+  gprint (GP_ERR, " ra dec dmag Nmeas Nmiss Xm Xp Nphot Ncode flag type typefrac\n\n");
+  gprint (GP_ERR, "value may also be a valid photcode\n");
+  gprint (GP_ERR, "photcodes or 'mag' may have optional magnitude mode: mag,[Mave, Mref]\n");
   return;
 }
@@ -329,5 +329,5 @@
   if (VarConfig ("PHOTCODE_FILE", "%s", PhotCodeFile) == (char *) NULL) return (FALSE);
   if (!LoadPhotcodes (PhotCodeFile)) {
-    fprintf (stderr, "error loading photcodes\n");
+    gprint (GP_ERR, "error loading photcodes\n");
     return (FALSE);
   }
@@ -337,21 +337,21 @@
 int ListPhotSelections () {
 
-  fprintf (stderr, "TimeSelect: %d, %d - %d\n",      TimeSelect, tzero, tend);
-  fprintf (stderr, "MagSelect: %d, %f - %f\n",       MagSelect, MagMax, MagMin);
-  fprintf (stderr, "TypeSelect: %d, %d\n",           TypeSelect, TypeValue);
-  fprintf (stderr, "ErrSelect: %d, %f\n",            ErrSelect, ErrValue);
-  fprintf (stderr, "iMagSelect: %d, %f\n",           iMagSelect, iMagMin);
-  fprintf (stderr, "FlagSelect: %d, %x\n",           FlagSelect, FlagValue);
-  fprintf (stderr, "TypefracSelect: %d, %d %d %f\n", TypefracSelect, TypefracType, TypefracSign, TypefracValue);
-  fprintf (stderr, "ApplySelections: %d,%d,%d,%d : %d\n", ApplySelections[0], ApplySelections[1], ApplySelections[2], ApplySelections[3], SelectionParam);
+  gprint (GP_ERR, "TimeSelect: %d, %d - %d\n",      TimeSelect, tzero, tend);
+  gprint (GP_ERR, "MagSelect: %d, %f - %f\n",       MagSelect, MagMax, MagMin);
+  gprint (GP_ERR, "TypeSelect: %d, %d\n",           TypeSelect, TypeValue);
+  gprint (GP_ERR, "ErrSelect: %d, %f\n",            ErrSelect, ErrValue);
+  gprint (GP_ERR, "iMagSelect: %d, %f\n",           iMagSelect, iMagMin);
+  gprint (GP_ERR, "FlagSelect: %d, %x\n",           FlagSelect, FlagValue);
+  gprint (GP_ERR, "TypefracSelect: %d, %d %d %f\n", TypefracSelect, TypefracType, TypefracSign, TypefracValue);
+  gprint (GP_ERR, "ApplySelections: %d,%d,%d,%d : %d\n", ApplySelections[0], ApplySelections[1], ApplySelections[2], ApplySelections[3], SelectionParam);
   if (PhotcodeSelect) {
-    fprintf (stderr, "PhotcodeSelect: %d, %s\n",       PhotcodeSelect, PhotcodeValue[0].name);
+    gprint (GP_ERR, "PhotcodeSelect: %d, %s\n",       PhotcodeSelect, PhotcodeValue[0].name);
   } else {
-    fprintf (stderr, "PhotcodeSelect: %d, none\n",       PhotcodeSelect);
-  }
-  fprintf (stderr, "ChiSelect: %d, %f\n",            ChiSelect, ChiLimit);
-  fprintf (stderr, "NphotSelect: %d, %d - %d\n",     NphotSelect, NphotSign, NphotValue);
-  fprintf (stderr, "NcodeSelect: %d, %d - %d\n",     NcodeSelect, NcodeSign, NcodeValue);
-  fprintf (stderr, "FWHMSelect: %d, %d %f %f\n",     FWHMSelect, FWHMsign, FWHMvalue, FWHMfrac);
+    gprint (GP_ERR, "PhotcodeSelect: %d, none\n",       PhotcodeSelect);
+  }
+  gprint (GP_ERR, "ChiSelect: %d, %f\n",            ChiSelect, ChiLimit);
+  gprint (GP_ERR, "NphotSelect: %d, %d - %d\n",     NphotSelect, NphotSign, NphotValue);
+  gprint (GP_ERR, "NcodeSelect: %d, %d - %d\n",     NcodeSelect, NcodeSign, NcodeValue);
+  gprint (GP_ERR, "FWHMSelect: %d, %d %f %f\n",     FWHMSelect, FWHMsign, FWHMvalue, FWHMfrac);
 }
 
@@ -364,15 +364,15 @@
 
   if ((N = get_argument (*argc, argv, "-phothelp"))) {
-    fprintf (stderr, "optional photometry selection criteria:\n");
-    fprintf (stderr, " -magrange min max\n");
-    fprintf (stderr, " -imaglim min\n");
-    fprintf (stderr, " -flag value\n");
-    fprintf (stderr, " -chisq value\n");
-    fprintf (stderr, " -photcode code\n");
-    fprintf (stderr, " -time start range\n");
-    fprintf (stderr, " -errorlim value\n");
-    fprintf (stderr, " -type type\n");
-    fprintf (stderr, " -nmeas [+/-]N\n");
-    fprintf (stderr, " -fwhm [+/-]fraction\n");
+    gprint (GP_ERR, "optional photometry selection criteria:\n");
+    gprint (GP_ERR, " -magrange min max\n");
+    gprint (GP_ERR, " -imaglim min\n");
+    gprint (GP_ERR, " -flag value\n");
+    gprint (GP_ERR, " -chisq value\n");
+    gprint (GP_ERR, " -photcode code\n");
+    gprint (GP_ERR, " -time start range\n");
+    gprint (GP_ERR, " -errorlim value\n");
+    gprint (GP_ERR, " -type type\n");
+    gprint (GP_ERR, " -nmeas [+/-]N\n");
+    gprint (GP_ERR, " -fwhm [+/-]fraction\n");
     return (FALSE);
   }
@@ -413,5 +413,5 @@
     remove_argument (N, argc, argv);
     if (strlen(argv[N]) != Nparams) {
-      fprintf (stderr, "-apply selection must define all parameter choices\n");
+      gprint (GP_ERR, "-apply selection must define all parameter choices\n");
       return (FALSE);
     }
@@ -433,5 +433,5 @@
     GetPhotcodeInfo (argv[N], &PhotcodeValue, &PhotcodeMode);
     if (PhotcodeValue == NULL) {
-      fprintf (stderr, "photcode not found in photcode table\n");
+      gprint (GP_ERR, "photcode not found in photcode table\n");
       return (FALSE);;
     }
@@ -444,10 +444,10 @@
     remove_argument (N, argc, argv);
     if (!str_to_time (argv[N], &tzero)) { 
-      fprintf (stderr, "syntax error\n");
+      gprint (GP_ERR, "syntax error\n");
       return (FALSE);
     }
     remove_argument (N, argc, argv);
     if (!str_to_dtime (argv[N], &trange)) { 
-      fprintf (stderr, "syntax error\n");
+      gprint (GP_ERR, "syntax error\n");
       return (FALSE);
     }
Index: /trunk/Ohana/src/opihi/dvo/pmeasure.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/pmeasure.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/pmeasure.c	(revision 7917)
@@ -65,5 +65,5 @@
 
   if (argc != 2) {
-    fprintf (stderr, "USAGE: pmeasure (-all) [-m M M] [-p photcode] [-ID ID] [-flag value] [-x]\n");
+    gprint (GP_ERR, "USAGE: pmeasure (-all) [-m M M] [-p photcode] [-ID ID] [-flag value] [-x]\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/dvo/procks.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/procks.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/procks.c	(revision 7917)
@@ -62,5 +62,5 @@
 
   if (argc != 1) {
-    fprintf (stderr, "USAGE: procks [-m M M] [-speed s s] \n");
+    gprint (GP_ERR, "USAGE: procks [-m M M] [-speed s s] \n");
     return (FALSE);
   }
@@ -68,5 +68,5 @@
   f = fopen (rockcat, "r");
   if (f == (FILE *) NULL) {
-    fprintf (stderr, "can't open rock catalog\n");
+    gprint (GP_ERR, "can't open rock catalog\n");
     return (TRUE);
   }
@@ -92,5 +92,5 @@
   if (Nrocks == 0) {
     free (rocks);
-    fprintf (stderr, "no rocks in datafile\n");
+    gprint (GP_ERR, "no rocks in datafile\n");
     return (TRUE);
   }
Index: /trunk/Ohana/src/opihi/dvo/region_list.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/region_list.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/region_list.c	(revision 7917)
@@ -32,8 +32,8 @@
 
   if (verbose) {
-      fprintf (stderr, "CATDIR %s\n", CATDIR);
-      fprintf (stderr, "GSCFILE %s\n", gscfile);
-      fprintf (stderr, "SKYFILE %s\n", skyfile);
-      fprintf (stderr, "SKYDEPTH %d\n", skydepth);
+      gprint (GP_ERR, "CATDIR %s\n", CATDIR);
+      gprint (GP_ERR, "GSCFILE %s\n", gscfile);
+      gprint (GP_ERR, "SKYFILE %s\n", skyfile);
+      gprint (GP_ERR, "SKYDEPTH %d\n", skydepth);
   }
 
@@ -83,5 +83,5 @@
   if ((*RegionName == NULL) && (*RegionList == NULL)) return (TRUE);
 
-  fprintf (stderr, "-cpt and -cptlist are incompatible\n");
+  gprint (GP_ERR, "-cpt and -cptlist are incompatible\n");
   free (*RegionName);
   free (*RegionList);
@@ -123,5 +123,5 @@
   Ngraph = 0;
   if (!GetGraphData (&graphsky, NULL, &Ngraph)) {
-    fprintf (stderr, "region display not available\n");
+    gprint (GP_ERR, "region display not available\n");
     return (NULL);
   }
@@ -144,5 +144,5 @@
   f = fopen (filename, "r");
   if (f == NULL) {
-    fprintf (stderr, "ERROR: can't find region list file %s\n", filename);
+    gprint (GP_ERR, "ERROR: can't find region list file %s\n", filename);
     skylist[0].Nregions = 0;
     skylist[0].regions = NULL;
Index: /trunk/Ohana/src/opihi/dvo/showtile.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/showtile.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/showtile.c	(revision 7917)
@@ -18,5 +18,5 @@
 
   if (argc != 1) {
-    fprintf (stderr, "USAGE: showtile [option]\n");
+    gprint (GP_ERR, "USAGE: showtile [option]\n");
     return (FALSE);
   }
@@ -40,5 +40,5 @@
   /* fill in top-left region */
   for (r = 0; r < 3; r += 1.0) {
-    fprintf (stderr, "r: %f\n", r);
+    gprint (GP_ERR, "r: %f\n", r);
     for (Nd = d = 0; d < 90; Nd ++, d += 1.0) {
       if (r == 0) {
Index: /trunk/Ohana/src/opihi/dvo/simage.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/simage.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/simage.c	(revision 7917)
@@ -31,14 +31,14 @@
 
   if (argc != 2) {
-    fprintf (stderr, "USAGE: image (filename)\n");
+    gprint (GP_ERR, "USAGE: image (filename)\n");
     return (FALSE);
   }
 
-  fprintf (stderr, "not working at the moment (cmp format)\n");
+  gprint (GP_ERR, "not working at the moment (cmp format)\n");
   return (FALSE);
   
   /* read header */
   if (!gfits_read_header (argv[1], &header)) {
-    fprintf (stderr, "ERROR: can't find image file %s\n", argv[1]);
+    gprint (GP_ERR, "ERROR: can't find image file %s\n", argv[1]);
     return (FALSE);
   }
@@ -47,5 +47,5 @@
   gfits_scan (&header, "CTYPE1",   "%s",  1, coords.ctype);
   if (strcmp (coords.ctype, "RA---PLY")) {
-    fprintf (stderr, "ERROR: wrong astrometric info in header\n");
+    gprint (GP_ERR, "ERROR: wrong astrometric info in header\n");
     return (FALSE);
   }
@@ -81,5 +81,5 @@
   gfits_scan (&header, "NSTARS", "%d", 1, &Nstars);
   if (Nstars == 0) {
-    fprintf (stderr, "no stars in file\n");
+    gprint (GP_ERR, "no stars in file\n");
     return (FALSE);
   }
@@ -88,5 +88,5 @@
   f = fopen (argv[1], "r");
   if (f == NULL) {
-    fprintf (stderr, "can't find data in file %s\n", argv[1]);
+    gprint (GP_ERR, "can't find data in file %s\n", argv[1]);
     return (FALSE);
   }
@@ -108,5 +108,5 @@
     nbytes = fread (buffer, 1, (BLOCK*BYTES_STAR), f);
     if (nbytes != BLOCK*BYTES_STAR) {
-      fprintf (stderr, "failed to read in stars (1)\n");
+      gprint (GP_ERR, "failed to read in stars (1)\n");
       free (Xvec.elements);
       free (Yvec.elements);
@@ -127,5 +127,5 @@
   nbytes = fread (buffer, 1, (Nbytes % (BLOCK*BYTES_STAR)), f);
   if (nbytes != (Nbytes % (BLOCK*BYTES_STAR))) {
-    fprintf (stderr, "ERROR: failed to read in stars (2)\n");
+    gprint (GP_ERR, "ERROR: failed to read in stars (2)\n");
     free (Xvec.elements);
     free (Yvec.elements);
@@ -144,5 +144,5 @@
   
   if (nstars != Nstars) {
-    fprintf (stderr, "ERROR: failed to read in all stars (%d of %d)\n", nstars, Nstars);
+    gprint (GP_ERR, "ERROR: failed to read in all stars (%d of %d)\n", nstars, Nstars);
     free (Xvec.elements);
     free (Yvec.elements);
Index: /trunk/Ohana/src/opihi/dvo/skycat.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/skycat.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/skycat.c	(revision 7917)
@@ -35,5 +35,5 @@
 
   if (argc != 1) {
-    fprintf (stderr, "USAGE: skycat [-all]\n");
+    gprint (GP_ERR, "USAGE: skycat [-all]\n");
     return (FALSE);
   }
@@ -47,5 +47,5 @@
   skylist = SkyListByRadius (sky, Depth, graphmode.coords.crval1, graphmode.coords.crval2, Radius);
   
-  if (VERBOSE) fprintf (stderr, "region: %6.2f - %6.2f, %6.2f - %6.2f\n", 
+  if (VERBOSE) gprint (GP_ERR, "region: %6.2f - %6.2f, %6.2f - %6.2f\n", 
 			graphmode.coords.crval1 - Radius, graphmode.coords.crval1 + Radius, 
 			graphmode.coords.crval2 - Radius, graphmode.coords.crval2 + Radius);
@@ -65,5 +65,5 @@
   for (i = 0; i < Nregions; i++) {
     if (ShowAll || (stat (skylist[0].filename[i], &filestat) != -1)) {
-      if (VERBOSE) fprintf (stderr, "%3d %s %6.2f - %6.2f, %6.2f - %6.2f\n", i, regions[i][0].name, 
+      if (VERBOSE) gprint (GP_ERR, "%3d %s %6.2f - %6.2f, %6.2f - %6.2f\n", i, regions[i][0].name, 
 			    regions[i][0].Rmin, regions[i][0].Rmax, regions[i][0].Dmin, regions[i][0].Dmax);
 
@@ -93,5 +93,5 @@
   }
 
-  fprintf (stderr, "plotting %d catalogs\n", Npts/8);
+  gprint (GP_ERR, "plotting %d catalogs\n", Npts/8);
   Xvec.Nelements = Xvec.Nelements = Npts;
   if (Npts > 0) {
Index: /trunk/Ohana/src/opihi/dvo/skycoverage.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/skycoverage.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/skycoverage.c	(revision 7917)
@@ -25,10 +25,10 @@
     remove_argument (N, &argc, argv);
     if (!str_to_time (argv[N], &tzero)) { 
-      fprintf (stderr, "syntax error\n");
+      gprint (GP_ERR, "syntax error\n");
       return (FALSE);
     }
     remove_argument (N, &argc, argv);
     if (!str_to_dtime (argv[N], &trange)) { 
-      fprintf (stderr, "syntax error\n");
+      gprint (GP_ERR, "syntax error\n");
       return (FALSE);
     }
@@ -43,10 +43,10 @@
     remove_argument (N, &argc, argv);
     if (!str_to_time (argv[N], &tzero)) { 
-      fprintf (stderr, "syntax error\n");
+      gprint (GP_ERR, "syntax error\n");
       return (FALSE);
     }
     remove_argument (N, &argc, argv);
     if (!str_to_time (argv[N], &tend)) { 
-      fprintf (stderr, "syntax error\n");
+      gprint (GP_ERR, "syntax error\n");
       return (FALSE);
     }
@@ -61,8 +61,8 @@
  
   if (argc != 4) {
-    fprintf (stderr, "USAGE: skycoverage (buffer) (pixscale) (dPix) [-time start range] [-name name]\n");
-    fprintf (stderr, "       (buffer) saves bitmapped AIT plot\n");
-    fprintf (stderr, "       (pixscale) specifies the pixel size in degrees\n");
-    fprintf (stderr, "       note: we need 64800 / (pixscale)^2 pixels to represent the sky\n");
+    gprint (GP_ERR, "USAGE: skycoverage (buffer) (pixscale) (dPix) [-time start range] [-name name]\n");
+    gprint (GP_ERR, "       (buffer) saves bitmapped AIT plot\n");
+    gprint (GP_ERR, "       (pixscale) specifies the pixel size in degrees\n");
+    gprint (GP_ERR, "       note: we need 64800 / (pixscale)^2 pixels to represent the sky\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/dvo/skydbtile.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/skydbtile.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/skydbtile.c	(revision 7917)
@@ -234,5 +234,5 @@
   DEC = 0.5*(in[0].Dmin + in[0].Dmax);
   if ((DEC >= 90) || (DEC <= -90)) {
-    fprintf (stderr, "error in Dmin");
+    gprint (GP_ERR, "error in Dmin");
     return (NULL);
   }
Index: /trunk/Ohana/src/opihi/dvo/subpix.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/subpix.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/subpix.c	(revision 7917)
@@ -25,5 +25,5 @@
 
   if (argc != 4) {
-    fprintf (stderr, "USAGE: subpix ra dec radius\n");
+    gprint (GP_ERR, "USAGE: subpix ra dec radius\n");
     return (FALSE);
   }
@@ -37,5 +37,5 @@
   skylist = SkyListByRadius (sky, -1, Ra, Dec, Radius);
   if (skylist[0].Nregions > 1) {
-    fprintf (stderr, "warning, radius overlaps region boundary, not yet implemented\n");
+    gprint (GP_ERR, "warning, radius overlaps region boundary, not yet implemented\n");
   }
 
@@ -83,5 +83,5 @@
   }
   if (!Nentry) {
-    fprintf (stderr, "no stars found\n");
+    gprint (GP_ERR, "no stars found\n");
     free (RA);
     free (DEC);
@@ -107,5 +107,5 @@
   Ra = RA[entry[Nmin]];
   Dec = DEC[entry[Nmin]];
-  fprintf (stderr, "finding subpix values for star @ %f %f\n", Ra, Dec);
+  gprint (GP_ERR, "finding subpix values for star @ %f %f\n", Ra, Dec);
 
   free (RA);
@@ -147,5 +147,5 @@
 	RD_to_XY (&X, &Y, Ra, Dec, &image[I].coords);
 	t = TimeValue (measure[j].t, TimeReference, TimeFormat);
-	fprintf (GetOutfile(), "%f %6.3f %7.2f %7.2f %5.3f\n", t, Mabs, X, Y, image[I].secz_PS);
+	gprint (GP_LOG, "%f %6.3f %7.2f %7.2f %5.3f\n", t, Mabs, X, Y, image[I].secz_PS);
       } 
     }
Index: /trunk/Ohana/src/opihi/dvo/version.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/version.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/dvo/version.c	(revision 7917)
@@ -4,11 +4,11 @@
 int version (int argc, char **argv) {
 
-  fprintf (stderr, "%s\n", name);
+  gprint (GP_ERR, "%s\n", name);
 
-  fprintf (stderr, "%s\n", opihi_version());
-  fprintf (stderr, "%s\n", ohana_version());
-  fprintf (stderr, "%s\n", gfits_version());
+  gprint (GP_ERR, "%s\n", opihi_version());
+  gprint (GP_ERR, "%s\n", ohana_version());
+  gprint (GP_ERR, "%s\n", gfits_version());
 
-  fprintf (stderr, "compiled on %s %s\n", __DATE__, __TIME__);
+  gprint (GP_ERR, "compiled on %s %s\n", __DATE__, __TIME__);
   return (TRUE);
 }
Index: /trunk/Ohana/src/opihi/include/data.h
===================================================================
--- /trunk/Ohana/src/opihi/include/data.h	(revision 7916)
+++ /trunk/Ohana/src/opihi/include/data.h	(revision 7917)
@@ -31,5 +31,5 @@
 int InitQueue (Queue *queue);
 int DeleteQueue (Queue *queue);
-int PrintQueue (FILE *f, Queue *queue);
+int PrintQueue (Queue *queue);
 
 /* in sort.c */
Index: /trunk/Ohana/src/opihi/include/external.h
===================================================================
--- /trunk/Ohana/src/opihi/include/external.h	(revision 7916)
+++ /trunk/Ohana/src/opihi/include/external.h	(revision 7917)
@@ -10,4 +10,5 @@
 # include <time.h>
 # include <errno.h>
+# include <pthread.h>
 
 # include <ohana.h>
Index: /trunk/Ohana/src/opihi/include/pantasks.h
===================================================================
--- /trunk/Ohana/src/opihi/include/pantasks.h	(revision 7916)
+++ /trunk/Ohana/src/opihi/include/pantasks.h	(revision 7917)
@@ -8,5 +8,4 @@
 # include <netdb.h>
 # include <arpa/inet.h>
-# include <pthread.h>
 
 typedef struct sockaddr_in SockAddress;
@@ -202,2 +201,12 @@
 int GetClientSocket (char *hostname);
 int InitServerSocket_Named (char *hostname, SockAddress *Address);
+
+/*
+void InitPrint ();
+void SetOutBuffer ();
+IOBuffer *GetOutBuffer ();
+void SetOutfile (char *outname);
+FILE *GetOutFile ();
+int ioprint (IOBuffer *buffer, char *format, ...);
+int gprintf (char *format, ...);
+*/
Index: /trunk/Ohana/src/opihi/include/pcontrol.h
===================================================================
--- /trunk/Ohana/src/opihi/include/pcontrol.h	(revision 7916)
+++ /trunk/Ohana/src/opihi/include/pcontrol.h	(revision 7917)
@@ -134,5 +134,5 @@
 IDtype NextJobID ();
 IDtype NextHostID ();
-void PrintID (FILE *f, IDtype ID);
+void PrintID (gpDest dest, IDtype ID);
 int CheckBusyJob (Job *job);
 int StartHost (Host *host);
Index: /trunk/Ohana/src/opihi/include/shell.h
===================================================================
--- /trunk/Ohana/src/opihi/include/shell.h	(revision 7916)
+++ /trunk/Ohana/src/opihi/include/shell.h	(revision 7917)
@@ -124,3 +124,26 @@
 char *opihi_version ();
 
+/*** gprint defines ***/
+
+/* enums used by gprint functions */
+typedef enum {GP_FILE, GP_BUFF} gpMode;
+typedef enum {GP_LOG, GP_ERR} gpDest;
+
+/* structure used to represent the gprint i/o stream */
+typedef struct {
+  FILE *file;
+  IOBuffer *buffer;
+  gpMode mode;
+  gpDest dest;
+  pthread_t thread;
+} gpStream;
+
+void gprintInit ();
+gpStream *gprintGetStream (gpDest dest);
+void gprintSetBuffer (gpDest dest);
+IOBuffer *gprintGetBuffer (gpDest dest);
+void gprintSetFile (gpDest dest, char *filename);
+FILE *gprintGetFile (gpDest dest);
+int gprint (gpDest dest, char *format, ...);
+
 # endif
Index: /trunk/Ohana/src/opihi/lib.data/gaussj.c
===================================================================
--- /trunk/Ohana/src/opihi/lib.data/gaussj.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/lib.data/gaussj.c	(revision 7917)
@@ -20,5 +20,5 @@
     for (j = 0; j < n; j++) {
       if (!finite(a[i][j])) {
-	fprintf (stderr, "GAUSSJ: NaN\n");
+	gprint (GP_ERR, "GAUSSJ: NaN\n");
 	goto escape;
       }
@@ -34,5 +34,5 @@
 	  else 
 	    if (ipiv[k] > 1) {
-	      fprintf (stderr, "GAUSSJ: Singular Matrix! (1)\n");
+	      gprint (GP_ERR, "GAUSSJ: Singular Matrix! (1)\n");
 	      goto escape;
 	    }
@@ -50,5 +50,5 @@
     indxc[i] = icol;
     if (a[icol][icol] == 0.0) {
-      fprintf (stderr, "GAUSSJ: Singular Matrix! (2)\n");
+      gprint (GP_ERR, "GAUSSJ: Singular Matrix! (2)\n");
       goto escape;
     }
@@ -108,5 +108,5 @@
     for (j = 0; j < n; j++) {
       if (!finite(a[i][j])) {
-	fprintf (stderr, "GAUSSJ: NaN\n");
+	gprint (GP_ERR, "GAUSSJ: NaN\n");
 	goto fescape;
       }
@@ -122,5 +122,5 @@
 	  else 
 	    if (ipiv[k] > 1) {
-	      fprintf (stderr, "GAUSSJ: Singular Matrix! (1)\n");
+	      gprint (GP_ERR, "GAUSSJ: Singular Matrix! (1)\n");
 	      goto fescape;
 	    }
@@ -138,5 +138,5 @@
     indxc[i] = icol;
     if (a[icol][icol] == 0.0) {
-      fprintf (stderr, "GAUSSJ: Singular Matrix! (2)\n");
+      gprint (GP_ERR, "GAUSSJ: Singular Matrix! (2)\n");
       goto fescape;
     }
Index: /trunk/Ohana/src/opihi/lib.data/mrq2dmin.c
===================================================================
--- /trunk/Ohana/src/opihi/lib.data/mrq2dmin.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/lib.data/mrq2dmin.c	(revision 7917)
@@ -49,8 +49,8 @@
   for (j = 0; j < Npar; j++) {
     for (k = 0; k < Npar; k++) {
-      fprintf (stderr, "%9.3e  ", ta[j][k]);
-    }
-    fprintf (stderr, "    :   %9.3e  ", tb[j][0]);
-    fprintf (stderr, "\n");
+      gprint (GP_ERR, "%9.3e  ", ta[j][k]);
+    }
+    gprint (GP_ERR, "    :   %9.3e  ", tb[j][0]);
+    gprint (GP_ERR, "\n");
   }
 # endif
@@ -105,10 +105,10 @@
   chisq = mrq2dcof (x, t, y, dy, Npts, partry, Npar, talpha, tbeta, funcs);
   if (VERBOSE) { 
-    fprintf (stderr, "chisq: %f  ", chisq);
-    fprintf (stderr, "lambda: %f  ", lambda);
+    gprint (GP_ERR, "chisq: %f  ", chisq);
+    gprint (GP_ERR, "lambda: %f  ", lambda);
     for (j = 0; j < Npar; j++) {
-      fprintf (stderr, "%f ", partry[j]);
-    }
-    fprintf (stderr, "\n");
+      gprint (GP_ERR, "%f ", partry[j]);
+    }
+    gprint (GP_ERR, "\n");
   }
 
@@ -168,10 +168,10 @@
   ochisq = mrq2dcof (x, t, y, dy, Npts, par, Npar, alpha, beta, funcs);
   if (VERBOSE) {
-    fprintf (stderr, "chisq: %f  ", ochisq);
-    fprintf (stderr, "lambda: %f  ", lambda);
+    gprint (GP_ERR, "chisq: %f  ", ochisq);
+    gprint (GP_ERR, "lambda: %f  ", lambda);
     for (i = 0; i < Npar; i++) {
-      fprintf (stderr, "%f ", par[i]);
-    }
-    fprintf (stderr, "\n");
+      gprint (GP_ERR, "%f ", par[i]);
+    }
+    gprint (GP_ERR, "\n");
   }
 
Index: /trunk/Ohana/src/opihi/lib.data/mrqmin.c
===================================================================
--- /trunk/Ohana/src/opihi/lib.data/mrqmin.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/lib.data/mrqmin.c	(revision 7917)
@@ -72,10 +72,10 @@
   chisq = mrqcof (x, y, dy, Npts, partry, Npar, talpha, tbeta, funcs);
   if (VERBOSE) { 
-    fprintf (stderr, "chisq: %f  ", chisq);
-    fprintf (stderr, "lambda: %f  ", lambda);
+    gprint (GP_ERR, "chisq: %f  ", chisq);
+    gprint (GP_ERR, "lambda: %f  ", lambda);
     for (j = 0; j < Npar; j++) {
-      fprintf (stderr, "%f ", partry[j]);
+      gprint (GP_ERR, "%f ", partry[j]);
     }
-    fprintf (stderr, "\n");
+    gprint (GP_ERR, "\n");
   }
 
@@ -125,10 +125,10 @@
   ochisq = mrqcof (x, y, dy, Npts, par, Npar, alpha, beta, funcs);
   if (VERBOSE) {
-    fprintf (stderr, "chisq: %f  ", ochisq);
-    fprintf (stderr, "lambda: %f  ", lambda);
+    gprint (GP_ERR, "chisq: %f  ", ochisq);
+    gprint (GP_ERR, "lambda: %f  ", lambda);
     for (i = 0; i < Npar; i++) {
-      fprintf (stderr, "%f ", par[i]);
+      gprint (GP_ERR, "%f ", par[i]);
     }
-    fprintf (stderr, "\n");
+    gprint (GP_ERR, "\n");
   }
   return (ochisq);
Index: /trunk/Ohana/src/opihi/lib.data/open_graph.c
===================================================================
--- /trunk/Ohana/src/opihi/lib.data/open_graph.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/lib.data/open_graph.c	(revision 7917)
@@ -52,5 +52,5 @@
 void XGraphDead (int input) {
   signal (SIGPIPE, XGraphDead);
-  fprintf (stderr, "kapa is dead, must restart\n");
+  gprint (GP_ERR, "kapa is dead, must restart\n");
   Xgraph[Active] = -1;
 }
@@ -64,5 +64,5 @@
   kapa_exec = get_variable ("KAPA");
   if (kapa_exec == (char *) NULL) {
-    fprintf (stderr, "variable KAPA not found\n");
+    gprint (GP_ERR, "variable KAPA not found\n");
     return (FALSE);
   }
@@ -73,5 +73,5 @@
 
   if (fd < 0) {
-    fprintf (stderr, "error starting kapa\n");
+    gprint (GP_ERR, "error starting kapa\n");
     return (FALSE);
   } 
@@ -102,5 +102,5 @@
   } else {
     if (*N >= NXGRAPH) {
-      fprintf (stderr, "invalid Xgraph window %d\n", *N); 
+      gprint (GP_ERR, "invalid Xgraph window %d\n", *N); 
       return (FALSE);
     }
@@ -140,5 +140,5 @@
   } else {
     if (*N >= NXGRAPH) {
-      fprintf (stderr, "invalid Xgraph window %d\n", *N); 
+      gprint (GP_ERR, "invalid Xgraph window %d\n", *N); 
       return (FALSE);
     }
Index: /trunk/Ohana/src/opihi/lib.data/open_image.c
===================================================================
--- /trunk/Ohana/src/opihi/lib.data/open_image.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/lib.data/open_image.c	(revision 7917)
@@ -36,5 +36,5 @@
 void XImageDead (int input) {
   signal (SIGPIPE, XImageDead);
-  fprintf (stderr, "kii is dead, must restart\n");
+  gprint (GP_ERR, "kii is dead, must restart\n");
   Ximage[Active] = -1;
 }
@@ -48,5 +48,5 @@
   kii_exec = get_variable ("KII");
   if (kii_exec == (char *) NULL) {
-    fprintf (stderr, "variable KII not found\n");
+    gprint (GP_ERR, "variable KII not found\n");
     return (FALSE);
   }
@@ -57,5 +57,5 @@
 
   if (fd < 0) {
-    fprintf (stderr, "error starting kii\n");
+    gprint (GP_ERR, "error starting kii\n");
     return (FALSE);
   } 
@@ -86,5 +86,5 @@
   } else {
     if (*N >= NXIMAGE) {
-      fprintf (stderr, "invalid Ximage window %d\n", *N); 
+      gprint (GP_ERR, "invalid Ximage window %d\n", *N); 
       return (FALSE);
     }
Index: /trunk/Ohana/src/opihi/lib.data/powell.c
===================================================================
--- /trunk/Ohana/src/opihi/lib.data/powell.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/lib.data/powell.c	(revision 7917)
@@ -74,5 +74,5 @@
 
   if (Niter == ITMAX) {
-    fprintf (stderr, "Too many iterations in routine POWELL\n");
+    gprint (GP_ERR, "Too many iterations in routine POWELL\n");
     return;
   }
Index: /trunk/Ohana/src/opihi/lib.data/precess.c
===================================================================
--- /trunk/Ohana/src/opihi/lib.data/precess.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/lib.data/precess.c	(revision 7917)
@@ -29,5 +29,5 @@
 
   if (!done) {
-    fprintf (stderr, "error finding epoch %s\n", in_epoch);
+    gprint (GP_ERR, "error finding epoch %s\n", in_epoch);
     exit (0);
   }
Index: /trunk/Ohana/src/opihi/lib.data/queues.c
===================================================================
--- /trunk/Ohana/src/opihi/lib.data/queues.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/lib.data/queues.c	(revision 7917)
@@ -17,5 +17,5 @@
 
   for (i = 0; i < Nqueues; i++) {
-    fprintf (stderr, "%-15s %3d\n", queues[i][0].name, queues[i][0].Nlines);
+    gprint (GP_ERR, "%-15s %3d\n", queues[i][0].name, queues[i][0].Nlines);
   }
   return;
@@ -324,5 +324,5 @@
 }
 
-int PrintQueue (FILE *f, Queue *queue) {
+int PrintQueue (Queue *queue) {
 
   int i;
@@ -331,5 +331,5 @@
 
   for (i = 0; i < queue[0].Nlines; i++) {
-    fprintf (f, "%s\n", queue[0].lines[i]);
+    gprint (GP_LOG, "%s\n", queue[0].lines[i]);
   }
   return (TRUE);
Index: /trunk/Ohana/src/opihi/lib.data/starfuncs.c
===================================================================
--- /trunk/Ohana/src/opihi/lib.data/starfuncs.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/lib.data/starfuncs.c	(revision 7917)
@@ -11,5 +11,5 @@
   string = get_variable ("GAIN");
   if (string == (char *) NULL) {
-    fprintf (stderr, "assuming a value of 1.0\n");
+    gprint (GP_ERR, "assuming a value of 1.0\n");
     gain = 1.0;
   } else {
@@ -89,5 +89,5 @@
   set_int_variable ("Nsat", Nmax);
   
-  fprintf (GetOutfile(), "%f %f %f %f %f %f %f %f\n", x, y, FWHMx, FWHMy, sky, I, mag, dmag);
+  gprint (GP_LOG, "%f %f %f %f %f %f %f %f\n", x, y, FWHMx, FWHMy, sky, I, mag, dmag);
 
   return (mag);
Index: /trunk/Ohana/src/opihi/lib.data/style_args.c
===================================================================
--- /trunk/Ohana/src/opihi/lib.data/style_args.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/lib.data/style_args.c	(revision 7917)
@@ -18,5 +18,5 @@
   if (*argc == 1) {
     name = KapaColorName (graphmode[0].color);
-    fprintf (stderr, "current style (%d): -x %d -c %s -pt %d -lt %d -lw %f -sz %f\n", Ngraph,
+    gprint (GP_ERR, "current style (%d): -x %d -c %s -pt %d -lt %d -lw %f -sz %f\n", Ngraph,
 	     graphmode[0].style, name, graphmode[0].ptype, 
 	     graphmode[0].ltype, graphmode[0].lweight,
Index: /trunk/Ohana/src/opihi/lib.shell/BufferOps.c
===================================================================
--- /trunk/Ohana/src/opihi/lib.shell/BufferOps.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/lib.shell/BufferOps.c	(revision 7917)
@@ -65,5 +65,5 @@
 
  error:
-  if (verbose) fprintf (stderr, "invalid matrix %s\n", name);
+  if (verbose) gprint (GP_ERR, "invalid matrix %s\n", name);
   return (NULL);
 }
@@ -202,5 +202,5 @@
 
   if (*number < 0) {
-    fprintf (stderr, "valid overlays may be: red (0), green (1), blue (2), yellow (3)\n");
+    gprint (GP_ERR, "valid overlays may be: red (0), green (1), blue (2), yellow (3)\n");
     return (FALSE);
   }
@@ -214,12 +214,12 @@
   int i;
 
-  fprintf (stderr, "try %d\n", n);
+  gprint (GP_ERR, "try %d\n", n);
   for (i = 0; i < Nbuffers; i++) {
-    fprintf (stderr, "%d  %lx\n", i, (long) buffers[i]);
-    fprintf (stderr, "%d  %lx  %s\n", i, (long) buffers[i][0].name, buffers[i][0].name);
-    fprintf (stderr, "%d  %lx  %s\n", i, (long) buffers[i][0].file, buffers[i][0].file);
-    fprintf (stderr, "%d  %lx  %lx\n", i, (long) &buffers[i][0].header, (long) buffers[i][0].header.buffer);
-    fprintf (stderr, "%d  %lx  %lx\n", i, (long) &buffers[i][0].matrix, (long) buffers[i][0].matrix.buffer);
-    fprintf (stderr, "%d  %d  %d  %f %f\n", i, buffers[i][0].bitpix, buffers[i][0].unsign, buffers[i][0].bscale, buffers[i][0].bzero);
+    gprint (GP_ERR, "%d  %lx\n", i, (long) buffers[i]);
+    gprint (GP_ERR, "%d  %lx  %s\n", i, (long) buffers[i][0].name, buffers[i][0].name);
+    gprint (GP_ERR, "%d  %lx  %s\n", i, (long) buffers[i][0].file, buffers[i][0].file);
+    gprint (GP_ERR, "%d  %lx  %lx\n", i, (long) &buffers[i][0].header, (long) buffers[i][0].header.buffer);
+    gprint (GP_ERR, "%d  %lx  %lx\n", i, (long) &buffers[i][0].matrix, (long) buffers[i][0].matrix.buffer);
+    gprint (GP_ERR, "%d  %d  %d  %f %f\n", i, buffers[i][0].bitpix, buffers[i][0].unsign, buffers[i][0].bscale, buffers[i][0].bzero);
   }
 }
@@ -230,12 +230,12 @@
 
   if (Nbuffers == 0) {
-    fprintf (stderr, "No allocated buffers\n");
+    gprint (GP_ERR, "No allocated buffers\n");
     return (TRUE);
   }
   
   if (Long) {
-    fprintf (GetOutfile(), "    N       name                      file     X     Y    bytes BP  U   bzero     bscale  \n");
+    gprint (GP_LOG, "    N       name                      file     X     Y    bytes BP  U   bzero     bscale  \n");
     for (i = 0; i < Nbuffers; i++) {
-      fprintf (GetOutfile(), "%5d %10s %25s %5d %5d %10d %3d %1d %10.4e %10.4e\n",
+      gprint (GP_LOG, "%5d %10s %25s %5d %5d %10d %3d %1d %10.4e %10.4e\n",
 	       i, buffers[i][0].name, buffers[i][0].file, 
 	       buffers[i][0].header.Naxis[0], buffers[i][0].header.Naxis[1],
@@ -246,7 +246,7 @@
   }
 
-  fprintf (GetOutfile(), "    N       name                      file     X     Y    bytes\n");
+  gprint (GP_LOG, "    N       name                      file     X     Y    bytes\n");
   for (i = 0; i < Nbuffers; i++) {
-    fprintf (GetOutfile(), "%5d %10s %25s %5d %5d %10d\n",
+    gprint (GP_LOG, "%5d %10s %25s %5d %5d %10d\n",
 	     i, buffers[i][0].name, buffers[i][0].file, 
 	     buffers[i][0].header.Naxis[0], buffers[i][0].header.Naxis[1],
Index: /trunk/Ohana/src/opihi/lib.shell/CommandOps.c
===================================================================
--- /trunk/Ohana/src/opihi/lib.shell/CommandOps.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/lib.shell/CommandOps.c	(revision 7917)
@@ -33,5 +33,5 @@
   }
   if (Nc == -1) {
-    fprintf (stderr, "programming error: command not found\n");
+    gprint (GP_ERR, "programming error: command not found\n");
     return (FALSE);
   }
@@ -57,5 +57,5 @@
   }
   if (EXACT) {
-    if (VERBOSE) fprintf (stderr, "no exact match to %s\n", name);
+    if (VERBOSE) gprint (GP_ERR, "no exact match to %s\n", name);
     return (NULL);
   }
@@ -73,13 +73,13 @@
   if (Nmatch > 1) {
     if (VERBOSE) {
-      fprintf (stderr, "ambiguous command: %s ( ", name);
+      gprint (GP_ERR, "ambiguous command: %s ( ", name);
       for (i = 0; i < Nmatch; i++) {
-	fprintf (stderr, "%s ", commands[match[i]].name);
+	gprint (GP_ERR, "%s ", commands[match[i]].name);
       }
-      fprintf (stderr, ")\n");
+      gprint (GP_ERR, ")\n");
     }
     return (NULL);
   }
-  if (VERBOSE) fprintf (stderr, "%s: Command not found.\n", name);
+  if (VERBOSE) gprint (GP_ERR, "%s: Command not found.\n", name);
   return (NULL);
 }  
Index: /trunk/Ohana/src/opihi/lib.shell/MacroOps.c
===================================================================
--- /trunk/Ohana/src/opihi/lib.shell/MacroOps.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/lib.shell/MacroOps.c	(revision 7917)
@@ -49,9 +49,9 @@
 
   if ((macro == NULL) || (macro[0].Nlines == 0)) {
-    fprintf (stderr, "  macro not defined\n");
+    gprint (GP_ERR, "  macro not defined\n");
     return;
   }
   for (i = 0; i < macro[0].Nlines; i++) {
-    fprintf (stderr, "  %s\n", macro[0].line[i]);
+    gprint (GP_ERR, "  %s\n", macro[0].line[i]);
   }
   return;
@@ -61,5 +61,5 @@
   int i;
   for (i = 0; i < Nmacros; i++) {
-    fprintf (stderr, "%s\n", macros[i].name);
+    gprint (GP_ERR, "%s\n", macros[i].name);
   }
 }
@@ -91,5 +91,5 @@
   }
   if (Nm == -1) {
-    fprintf (stderr, "programming error: macro not found\n");
+    gprint (GP_ERR, "programming error: macro not found\n");
     return (FALSE);
   }
@@ -114,5 +114,5 @@
   }
   if (EXACT) {
-    if (VERBOSE) fprintf (stderr, "no exact match to %s\n", name);
+    if (VERBOSE) gprint (GP_ERR, "no exact match to %s\n", name);
     return (NULL);
   }
@@ -130,13 +130,13 @@
   if (Nmatch > 1) {
     if (VERBOSE) {
-      fprintf (stderr, "ambiguous macro: %s ( ", name);
+      gprint (GP_ERR, "ambiguous macro: %s ( ", name);
       for (i = 0; i < Nmatch; i++) {
-	fprintf (stderr, "%s ", macros[match[i]].name);
+	gprint (GP_ERR, "%s ", macros[match[i]].name);
       }
-      fprintf (stderr, ")\n");
+      gprint (GP_ERR, ")\n");
     }
     return (NULL);
   }
-  if (VERBOSE) fprintf (stderr, "%s: Macro not found.\n", name);
+  if (VERBOSE) gprint (GP_ERR, "%s: Macro not found.\n", name);
   return (NULL);
 }  
Index: /trunk/Ohana/src/opihi/lib.shell/Makefile
===================================================================
--- /trunk/Ohana/src/opihi/lib.shell/Makefile	(revision 7916)
+++ /trunk/Ohana/src/opihi/lib.shell/Makefile	(revision 7917)
@@ -52,4 +52,5 @@
 $(SDIR)/variable.$(ARCH).o	   	\
 $(SDIR)/version.$(ARCH).o	   	\
+$(SDIR)/gprint.$(ARCH).o		\
 $(SDIR)/opihi.$(ARCH).o
 
Index: /trunk/Ohana/src/opihi/lib.shell/VectorOps.c
===================================================================
--- /trunk/Ohana/src/opihi/lib.shell/VectorOps.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/lib.shell/VectorOps.c	(revision 7917)
@@ -64,5 +64,5 @@
 
  error:
-  if (verbose) fprintf (stderr, "invalid vector %s\n", name);
+  if (verbose) gprint (GP_ERR, "invalid vector %s\n", name);
   return (NULL);
 }
@@ -155,11 +155,11 @@
 
   if (Nvectors == 0) {
-    fprintf (stderr, "No defined vectors\n");
+    gprint (GP_ERR, "No defined vectors\n");
     return (FALSE);
   }
 
-  fprintf (GetOutfile(), "    N       name      size\n");
+  gprint (GP_LOG, "    N       name      size\n");
   for (i = 0; i < Nvectors; i++) {
-    fprintf (GetOutfile(), "%5d %10s %10d\n",
+    gprint (GP_LOG, "%5d %10s %10d\n",
 	     i, vectors[i][0].name, vectors[i][0].Nelements);
   }
Index: /trunk/Ohana/src/opihi/lib.shell/command.c
===================================================================
--- /trunk/Ohana/src/opihi/lib.shell/command.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/lib.shell/command.c	(revision 7917)
@@ -49,9 +49,9 @@
     char *msg;
     msg = get_variable_ptr ("ERRORMSG");
-    if (msg != (char *) NULL) fprintf (stderr, "%s\n", msg);
+    if (msg != (char *) NULL) gprint (GP_ERR, "%s\n", msg);
   }
 
   set_int_variable ("STATUS", status);
-  if (VERBOSE) fprintf (stderr, "command: %s, status: %d\n", line, status);
+  if (VERBOSE) gprint (GP_ERR, "command: %s, status: %d\n", line, status);
   return (status);
 }
Index: /trunk/Ohana/src/opihi/lib.shell/convert_to_RPN.c
===================================================================
--- /trunk/Ohana/src/opihi/lib.shell/convert_to_RPN.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/lib.shell/convert_to_RPN.c	(revision 7917)
@@ -183,11 +183,11 @@
 # if (DUMPSTACK)
   for (i = 0; i < Nstack; i++) {
-    fprintf (stderr, "%s ", stack[i].name);
-  }
-  if (Nstack > 0) fprintf (stderr, "\n");
+    gprint (GP_ERR, "%s ", stack[i].name);
+  }
+  if (Nstack > 0) gprint (GP_ERR, "\n");
   for (i = 0; i < Nstack; i++) {
-    fprintf (stderr, "%d ", stack[i].type);
-  }
-  if (Nstack > 0) fprintf (stderr, "\n");
+    gprint (GP_ERR, "%d ", stack[i].type);
+  }
+  if (Nstack > 0) gprint (GP_ERR, "\n");
 # endif
 
Index: /trunk/Ohana/src/opihi/lib.shell/errors.c
===================================================================
--- /trunk/Ohana/src/opihi/lib.shell/errors.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/lib.shell/errors.c	(revision 7917)
@@ -12,5 +12,5 @@
 int print_error () {
 
-  fprintf (stderr, "%s\n", errorline);
+  gprint (GP_ERR, "%s\n", errorline);
   return (TRUE);
 }
Index: /trunk/Ohana/src/opihi/lib.shell/evaluate_stack.c
===================================================================
--- /trunk/Ohana/src/opihi/lib.shell/evaluate_stack.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/lib.shell/evaluate_stack.c	(revision 7917)
@@ -44,14 +44,14 @@
 
     if (VERBOSE) {
-      fprintf (stderr, "%d: ", i);
+      gprint (GP_ERR, "%d: ", i);
       for (j = 0; j < *Nstack; j++) {
-	fprintf (stderr, "%s ", stack[j].name);
+	gprint (GP_ERR, "%s ", stack[j].name);
       }
-      if (*Nstack > 0) fprintf (stderr, "\n");
-      fprintf (stderr, "%d: ", i);
+      if (*Nstack > 0) gprint (GP_ERR, "\n");
+      gprint (GP_ERR, "%d: ", i);
       for (j = 0; j < *Nstack; j++) {
-	fprintf (stderr, "%d ", stack[j].type);
+	gprint (GP_ERR, "%d ", stack[j].type);
       }
-      if (*Nstack > 0) fprintf (stderr, "\n");
+      if (*Nstack > 0) gprint (GP_ERR, "\n");
     }
 
@@ -161,5 +161,5 @@
   for (i = 0; i < Nstack; i++) {
     if (IsBufferPtr (stack[i].buffer) && (stack[i].type == 'm')) {
-      if (VERBOSE) fprintf (stderr, "free %s (buff) (%lx)\n", stack[i].name, (long) stack[i].buffer);
+      if (VERBOSE) gprint (GP_ERR, "free %s (buff) (%lx)\n", stack[i].name, (long) stack[i].buffer);
       free (stack[i].buffer[0].header.buffer);
       free (stack[i].buffer[0].matrix.buffer);
@@ -168,10 +168,10 @@
     }	
     if (IsVectorPtr (stack[i].vector) && (stack[i].type == 'v')) {
-      if (VERBOSE) fprintf (stderr, "free %s (vect) (%lx)\n", stack[i].name, (long) stack[i].vector);
+      if (VERBOSE) gprint (GP_ERR, "free %s (vect) (%lx)\n", stack[i].name, (long) stack[i].vector);
       free (stack[i].vector[0].elements);
       free (stack[i].vector);
       stack[i].vector = NULL;
     }	
-    if (VERBOSE) fprintf (stderr, "free %s (name) (%d) (%lx)\n", stack[i].name, i, (long) stack[i].name);
+    if (VERBOSE) gprint (GP_ERR, "free %s (name) (%d) (%lx)\n", stack[i].name, i, (long) stack[i].name);
     free (stack[i].name);
     stack[i].name = NULL;
Index: /trunk/Ohana/src/opihi/lib.shell/expand_vars.c
===================================================================
--- /trunk/Ohana/src/opihi/lib.shell/expand_vars.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/lib.shell/expand_vars.c	(revision 7917)
@@ -53,5 +53,5 @@
     if (*c == 0) {  /* all digit var == macro parameter */
       if (!MacroDepth) {
-	fprintf (stderr, "not in a macro\n");
+	gprint (GP_ERR, "not in a macro\n");
 	goto error;
       } else { /* if we are executing a macro, attach the list depth to the front, pass on down the line */
@@ -65,5 +65,5 @@
     Val = get_variable_ptr (V0);
     if (Val == NULL) {   /* var was not found! */
-      fprintf (stderr, "variable %s not found\n", V0);
+      gprint (GP_ERR, "variable %s not found\n", V0);
       goto error;
     }
Index: /trunk/Ohana/src/opihi/lib.shell/expand_vectors.c
===================================================================
--- /trunk/Ohana/src/opihi/lib.shell/expand_vectors.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/lib.shell/expand_vectors.c	(revision 7917)
@@ -59,5 +59,5 @@
     /* find vector element */
     if (I >= vec[0].Nelements) {
-      fprintf (stderr, "vector subscript out of range\n"); 
+      gprint (GP_ERR, "vector subscript out of range\n"); 
       goto escape;
     }
Index: /trunk/Ohana/src/opihi/lib.shell/gprint.c
===================================================================
--- /trunk/Ohana/src/opihi/lib.shell/gprint.c	(revision 7917)
+++ /trunk/Ohana/src/opihi/lib.shell/gprint.c	(revision 7917)
@@ -0,0 +1,218 @@
+# include "shell.h"
+
+/* we need to control the output destinations a bit carefully
+   in the pantasks_server mode.  The server needs to be able to 
+   send the output to a specific output device (eg, logging file)
+   of to save it within an internal buffer */
+
+/* further notes:
+   gprintf (int destination, char *format, ...);
+
+   the destination may be GP_LOG or GP_ERR.  by default, these go to stdout and
+   stderr.  either one may be redirected to another file or to a buffer.  as a
+   stand-along program, the outfile command redirects the GP_LOG output to an
+   alternate output file.  in the server mode, we redirect LOG to a standard log
+   file and ERR to a standard error file for server messages.  Commands executed
+   by the client have both streams returned to the client in turn, and are in
+   turn sent to stderr or the current stdout destination.
+
+   each thread has an independently set output destination.
+
+   option 1: NULL for invalid element:
+
+     a stream is either set to a FILE or an IOBuffer.  when it is set to a FILE,
+     the IOBuffer is freed and set to NULL.  when it is an IOBuffer, the file
+     pointer is closed and set to NULL.  setting a new FILE results in the 
+     IObuffer being freed and an already opened FILE to be flushed and closed.
+*/
+
+static gpStream *streams = NULL;
+static int Nstreams = 0;
+
+void gprintInit () {
+
+  int N;
+  pthread_t id;
+
+  /* need to use a mutex to prevent two threads from initing simultaneously */
+  if (streams == NULL) {
+    Nstreams = 2;
+    ALLOCATE (streams, gpStream, Nstreams);
+  } else {
+    Nstreams += 2;
+    REALLOCATE (streams, gpStream, Nstreams);
+  }
+
+  /* create two output streams for this thread: LOG and ERR */
+  id = pthread_self();
+
+  N = Nstreams - 2;
+  streams[N].dest = GP_LOG;
+  streams[N].file = stdout;
+  ALLOCATE (streams[N].buffer, IOBuffer, 1);
+  InitIOBuffer (streams[N].buffer, 64);
+  streams[N].mode = GP_FILE;
+  streams[N].thread = id;
+
+  N = Nstreams - 1;
+  streams[N].dest = GP_ERR;
+  streams[N].file = stderr;
+  ALLOCATE (streams[N].buffer, IOBuffer, 1);
+  InitIOBuffer (streams[N].buffer, 64);
+  streams[N].mode = GP_FILE;
+  streams[N].thread = id;
+}
+
+gpStream *gprintGetStream (gpDest dest) {
+
+  int i;
+  pthread_t id;
+
+  id = pthread_self();
+
+  /* find the existing output stream which matches */
+  for (i = 0; i < Nstreams; i++) {
+    if (streams[i].dest != dest) continue;
+    if (!pthread_equal (streams[i].thread, id)) continue;
+    return (&streams[i]);
+  }
+  fprintf (STDERR, "programming error: gprintInit not called for thread\n");
+  abort ();
+}
+
+void gprintSetBuffer (gpDest dest) {
+
+  gpStream *stream;
+
+  stream = gprintGetStream (dest);
+
+  /* if we have an open file: flush it, close it, null it */
+  if (stream[0].file != NULL) {
+    fflush (stream[0].file);
+    if (stream[0].file != stdout) fclose (stream[0].file);
+    stream[0].file = NULL;
+  }
+  
+  if (stream[0].buffer == NULL) {
+    ALLOCATE (stream[0].buffer, IOBuffer, 1);
+    InitIOBuffer (stream[0].buffer, 64);
+  } else {
+    FlushIOBuffer (stream[0].buffer);
+  }
+  
+  /* this element may be redundant with the NULL state of file and buffer */
+  stream[0].mode = GP_BUFF;
+}
+
+IOBuffer *gprintGetBuffer (gpDest dest) {
+
+  gpStream *stream;
+  stream = gprintGetStream (dest);
+  return (stream[0].buffer);
+}
+
+void gprintSetFile (gpDest dest, char *filename) {
+
+  gpStream *stream;
+  stream = gprintGetStream (dest);
+
+  /* if we have an open buffer, free it and null it */
+  if (stream[0].buffer != NULL) {
+    FreeIOBuffer (stream[0].buffer);
+    free (stream[0].buffer);
+    stream[0].buffer = NULL;
+  }
+
+  /* if we have an open file, flush it and close it */
+  if (stream[0].file != NULL) {
+    fflush (stream[0].file);
+    if (stream[0].file == stdout) goto skip_close;
+    if (stream[0].file == stderr) goto skip_close;
+    fclose (stream[0].file);
+  }
+skip_close:
+  
+  /* we allow the user to set stdout to ERR and stderr to LOG if they want */
+  if (!strcmp (filename, "stdout")) {
+    stream[0].file = stdout;
+    goto skip_open;
+  }
+  if (!strcmp (filename, "stderr")) {
+    stream[0].file = stderr;
+    goto skip_open;
+  }
+  
+  /* open the file */
+  stream[0].file = fopen (filename, "a");
+  if (stream[0].file == NULL) {
+    fprintf (STDERR, "cannot open file %s\n", filename);
+    stream[0].file = (dest == GP_LOG) ? stdout : stderr;
+  }
+
+skip_open:
+  stream[0].mode = GP_FILE;
+}
+
+FILE *gprintGetFile (gpDest dest) {
+
+  gpStream *stream;
+  stream = gprintGetStream (dest);
+  return (stream[0].file);
+}
+
+int gprint (gpDest dest, char *format, ...) {
+
+  gpStream *stream;
+  va_list argp;  
+
+  stream = gprintGetStream (dest);
+
+  va_start (argp, format);
+  
+  // gprint (GP_ERR, "GP_FILE: %d\n", GP_FILE);
+  // gprint (GP_ERR, "GP_BUFF: %d\n", GP_BUFF);
+  // gprint (GP_ERR, "mode: %d\n", stream[0].mode);
+
+  if (stream[0].mode == GP_FILE) {
+    // gprint (GP_ERR, "printing to FILE\n");
+    vfprintf (stream[0].file, format, argp);
+  } else {
+    // gprint (GP_ERR, "printing to BUFFER\n");
+    vPrintIOBuffer (stream[0].buffer, format, argp);
+  }
+  va_end (argp);
+  return (TRUE);
+}
+
+int gwrite (char *buffer, int size, int N, gpDest dest) {
+
+  int Nbyte;
+  IOBuffer *outbuff;
+  gpStream *stream;
+
+  stream = gprintGetStream (dest);
+
+  if (stream[0].mode == GP_FILE) {
+    fwrite (buffer, size, N, stream[0].file);
+  } else {
+    outbuff = stream[0].buffer;
+    Nbyte = size * N;
+    if (outbuff[0].Nbuffer + Nbyte >= outbuff[0].Nalloc) {
+      outbuff[0].Nalloc = outbuff[0].Nbuffer + Nbyte + 64;
+      REALLOCATE (outbuff[0].buffer, char, outbuff[0].Nalloc);
+    }
+    memcpy (&outbuff[0].buffer[outbuff[0].Nbuffer], buffer, Nbyte);
+    outbuff[0].Nbuffer += Nbyte;
+  }
+  return (TRUE);
+}
+
+/* I'm going to need to have different output targets for different threads
+   we can do this with these functions:
+
+   pthread_t pthread_self(void);
+   int pthread_equal(pthread_t thread1, pthread_t thread2);
+   // returns TRUE if equal, FALSE if not
+   
+*/
+
Index: /trunk/Ohana/src/opihi/lib.shell/interrupt.c
===================================================================
--- /trunk/Ohana/src/opihi/lib.shell/interrupt.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/lib.shell/interrupt.c	(revision 7917)
@@ -24,5 +24,5 @@
   
   while (1) {
-    fprintf (stderr, "operation halted, continue? (y/n) ");
+    gprint (GP_ERR, "operation halted, continue? (y/n) ");
     fscanf (stdin, "%s", string);
     
Index: /trunk/Ohana/src/opihi/lib.shell/isolate_elements.c
===================================================================
--- /trunk/Ohana/src/opihi/lib.shell/isolate_elements.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/lib.shell/isolate_elements.c	(revision 7917)
@@ -112,5 +112,5 @@
 	if (in[i][j] != '"') continue;
 	/* 
-	  fprintf (stderr, "mismatched quotes\n");
+	  gprint (GP_ERR, "mismatched quotes\n");
 	  return (FALSE);
 	}
Index: /trunk/Ohana/src/opihi/lib.shell/macro_create.c
===================================================================
--- /trunk/Ohana/src/opihi/lib.shell/macro_create.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/lib.shell/macro_create.c	(revision 7917)
@@ -21,6 +21,6 @@
 
   if (argc != 2) {
-    fprintf (stderr, "USAGE: macro <name> [-c \"comment line\"]\n");
-    fprintf (stderr, "  (enter commands, end with the word 'END')\n");
+    gprint (GP_ERR, "USAGE: macro <name> [-c \"comment line\"]\n");
+    gprint (GP_ERR, "  (enter commands, end with the word 'END')\n");
     return (FALSE);
   }
@@ -31,9 +31,9 @@
   
   if ((macro == NULL) && (cmd != NULL)) {
-    fprintf (stderr, "cannot redefine inherent command %s\n", argv[1]);
+    gprint (GP_ERR, "cannot redefine inherent command %s\n", argv[1]);
     return (FALSE);
   }
   if ((macro != NULL) && (cmd == NULL)) {
-    fprintf (stderr, "programming error: macro not in command list (%s)\n", argv[1]);
+    gprint (GP_ERR, "programming error: macro not in command list (%s)\n", argv[1]);
     return (FALSE);
   }
@@ -75,5 +75,5 @@
 
     if ((ThisList == 0) && (input == (char *) NULL)) {
-      fprintf (stderr, "end macro with 'END'\n");
+      gprint (GP_ERR, "end macro with 'END'\n");
       continue;
     }
@@ -81,5 +81,5 @@
 
     if ((ThisList > 0) && (input == (char *) NULL)) {
-      fprintf (stderr, "missing 'END' in macro definition\n");
+      gprint (GP_ERR, "missing 'END' in macro definition\n");
       input = strcreate ("end");
     }
Index: /trunk/Ohana/src/opihi/lib.shell/macro_delete.c
===================================================================
--- /trunk/Ohana/src/opihi/lib.shell/macro_delete.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/lib.shell/macro_delete.c	(revision 7917)
@@ -7,5 +7,5 @@
 
   if (argc != 2) {
-    fprintf (stderr, "USAGE: macro delete <macro>\n");
+    gprint (GP_ERR, "USAGE: macro delete <macro>\n");
     return (FALSE);
   }
@@ -13,10 +13,10 @@
   macro = MatchMacro (argv[1], FALSE, TRUE);
   if (macro == NULL) {
-    fprintf (stderr, "Macro %s not found\n", argv[1]);
+    gprint (GP_ERR, "Macro %s not found\n", argv[1]);
     return (FALSE);
   }
   cmd = MatchCommand (argv[1], FALSE, TRUE);
   if (cmd == NULL) {
-    fprintf (stderr, "programming error: macro exists but not command\n");
+    gprint (GP_ERR, "programming error: macro exists but not command\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/lib.shell/macro_edit.c
===================================================================
--- /trunk/Ohana/src/opihi/lib.shell/macro_edit.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/lib.shell/macro_edit.c	(revision 7917)
@@ -3,5 +3,5 @@
 int macro_edit (int argc, char **argv) {
 
-  fprintf (stderr, "this function is not implemented yet\n");
+  gprint (GP_ERR, "this function is not implemented yet\n");
   return (FALSE);
 
Index: /trunk/Ohana/src/opihi/lib.shell/macro_exec.c
===================================================================
--- /trunk/Ohana/src/opihi/lib.shell/macro_exec.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/lib.shell/macro_exec.c	(revision 7917)
@@ -9,5 +9,5 @@
   macro = MatchMacro (argv[0], FALSE, TRUE);
   if (macro == NULL) {
-    fprintf (stderr, "%s: Command not found.\n", argv[0]);
+    gprint (GP_ERR, "%s: Command not found.\n", argv[0]);
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/lib.shell/macro_list.c
===================================================================
--- /trunk/Ohana/src/opihi/lib.shell/macro_list.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/lib.shell/macro_list.c	(revision 7917)
@@ -7,5 +7,5 @@
 
   if (argc != 2) {
-    fprintf (stderr, "USAGE: macro list <macro>\n");
+    gprint (GP_ERR, "USAGE: macro list <macro>\n");
     return (FALSE);
   }
@@ -13,10 +13,10 @@
   macro = MatchMacro (argv[0], FALSE, TRUE);
   if (macro == NULL) {
-    fprintf (stderr, "%s: Macro not found\n", argv[1]);
+    gprint (GP_ERR, "%s: Macro not found\n", argv[1]);
     return (FALSE);
   }
 
   for (i = 0; i < macro[0].Nlines; i++) {
-    fprintf (stderr, "%s\n", macro[0].line[i]);
+    gprint (GP_ERR, "%s\n", macro[0].line[i]);
   }
   return (TRUE);
Index: /trunk/Ohana/src/opihi/lib.shell/macro_read.c
===================================================================
--- /trunk/Ohana/src/opihi/lib.shell/macro_read.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/lib.shell/macro_read.c	(revision 7917)
@@ -3,5 +3,5 @@
 int macro_read (int argc, char **argv) {
 
-  fprintf (stderr, "this function is not implemented yet\n");
+  gprint (GP_ERR, "this function is not implemented yet\n");
   return (FALSE);
 
Index: /trunk/Ohana/src/opihi/lib.shell/macro_write.c
===================================================================
--- /trunk/Ohana/src/opihi/lib.shell/macro_write.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/lib.shell/macro_write.c	(revision 7917)
@@ -3,5 +3,5 @@
 int macro_write (int argc, char **argv) {
 
-  fprintf (stderr, "this function is not implemented yet\n");
+  gprint (GP_ERR, "this function is not implemented yet\n");
   return (FALSE);
 
Index: /trunk/Ohana/src/opihi/lib.shell/opihi.c
===================================================================
--- /trunk/Ohana/src/opihi/lib.shell/opihi.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/lib.shell/opihi.c	(revision 7917)
@@ -25,9 +25,9 @@
       ppid = getppid();
       if (ppid == 1) {
-	fprintf (stderr, "caught parent shutdown\n");
+	gprint (GP_ERR, "caught parent shutdown\n");
 	exit (2);
       }
       if (!isatty (STDIN_FILENO)) exit (2);
-      fprintf (stdout, "Use \"quit\" to exit\n");
+      gprint (GP_LOG, "Use \"quit\" to exit\n");
       Nbad ++;
       continue;
Index: /trunk/Ohana/src/opihi/lib.shell/parse.c
===================================================================
--- /trunk/Ohana/src/opihi/lib.shell/parse.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/lib.shell/parse.c	(revision 7917)
@@ -74,5 +74,5 @@
       free (B);
 
-      if (status) fprintf (stderr, "warning: exit status of command %d\n", status);
+      if (status) gprint (GP_ERR, "warning: exit status of command %d\n", status);
 
       /* convert all but last return to ' '.  drop last return */
@@ -131,5 +131,5 @@
     free (V0); V0 = (char *) NULL;
     if (Nval >= vec[0].Nelements) {
-      fprintf (stderr, "no element %d\n", Nval);
+      gprint (GP_ERR, "no element %d\n", Nval);
       goto escape;
     }
@@ -170,10 +170,10 @@
     c1 = strchr (L, '}');
     if (c1 == NULL) {
-      fprintf (stderr, "no close brackets!\n");
+      gprint (GP_ERR, "no close brackets!\n");
       goto escape;
     }
     c2 = strchr (L, '{');
     if ((c2 != NULL) && (c2 < c1)) {
-      fprintf (stderr, "can't nest brackets!\n");
+      gprint (GP_ERR, "can't nest brackets!\n");
       goto escape;
     }
@@ -205,5 +205,5 @@
 
   error:
-  fprintf (stderr, "syntax error\n");
+  gprint (GP_ERR, "syntax error\n");
 
   escape:
Index: /trunk/Ohana/src/opihi/lib.shell/startup.c
===================================================================
--- /trunk/Ohana/src/opihi/lib.shell/startup.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/lib.shell/startup.c	(revision 7917)
@@ -19,5 +19,5 @@
   /* load config data (.ptolemyrc) */
   if (!ConfigInit (argc, argv)) {
-    fprintf (stderr, "can't find config file. some functions will be unavailable\n");
+    gprint (GP_ERR, "can't find config file. some functions will be unavailable\n");
   }
 
@@ -58,5 +58,5 @@
     f = fopen (opihi_history, "a");
     if (f == NULL) /* no current history file here */
-      fprintf (stderr, "can't save history.\n");
+      gprint (GP_ERR, "can't save history.\n");
     else
       fclose (f);
Index: /trunk/Ohana/src/opihi/lib.shell/string.c
===================================================================
--- /trunk/Ohana/src/opihi/lib.shell/string.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/lib.shell/string.c	(revision 7917)
@@ -32,5 +32,5 @@
     for (j = i; (string[j] != 0) && (string[j] != '"'); j++);
     if (string[j] == 0) {
-      fprintf (stderr, "misbalanced quotes\n");
+      gprint (GP_ERR, "misbalanced quotes\n");
       return ((char *)NULL);
     }
@@ -55,5 +55,5 @@
     }
     if ((string[j] == 0) && (N != 0)) {
-      fprintf (stderr, "misbalanced parenthesis\n");
+      gprint (GP_ERR, "misbalanced parenthesis\n");
       return ((char *)NULL);
     }
@@ -130,5 +130,5 @@
     for (; (string[i] != 0) && (string[i] != '"'); i++);
     if (string[i] == 0) {
-      fprintf (stderr, "misbalanced quotes\n");
+      gprint (GP_ERR, "misbalanced quotes\n");
       return ((char *)NULL);
     }
@@ -152,5 +152,5 @@
     }
     if ((string[i] == 0) && (j != 0)) {
-      fprintf (stderr, "misbalanced parenthesis\n");
+      gprint (GP_ERR, "misbalanced parenthesis\n");
       return ((char *)NULL);
     }
Index: /trunk/Ohana/src/opihi/lib.shell/timeformat.c
===================================================================
--- /trunk/Ohana/src/opihi/lib.shell/timeformat.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/lib.shell/timeformat.c	(revision 7917)
@@ -8,5 +8,5 @@
   if ((p = get_variable ("TIMEREF")) != (char *) NULL) {
     if (!str_to_time (p, TimeReference)) {
-      fprintf (stderr, "error in TIME_REF format\n");
+      gprint (GP_ERR, "error in TIME_REF format\n");
       return (FALSE);
     }
@@ -22,5 +22,5 @@
     if (!strcasecmp (p, "min")) *TimeFormat    = TIME_MINUTES;
     if (!strcasecmp (p, "sec")) *TimeFormat    = TIME_SECONDS;
-    if (!*TimeFormat) fprintf (stderr, "unknown TIME_FORMAT\n");
+    if (!*TimeFormat) gprint (GP_ERR, "unknown TIME_FORMAT\n");
     free (p);
     return (FALSE);
Index: /trunk/Ohana/src/opihi/lib.shell/variable.c
===================================================================
--- /trunk/Ohana/src/opihi/lib.shell/variable.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/lib.shell/variable.c	(revision 7917)
@@ -20,5 +20,5 @@
   for (i = 0; i < Nvariables; i++) {
     if (!strcmp (name, variables[i].name)) {
-      fprintf (stderr, "warning: local variable overrides global name\n");
+      gprint (GP_ERR, "warning: local variable overrides global name\n");
     }
   } */
@@ -305,10 +305,10 @@
 
   if (Nvariables == 0) {
-    fprintf (stderr, "No defined variables\n");
+    gprint (GP_ERR, "No defined variables\n");
     return;
   }
 
   for (i = 0; i < Nvariables; i++) {
-    fprintf (stderr, "%s = %s\n", variables[i].name, variables[i].value);
+    gprint (GP_ERR, "%s = %s\n", variables[i].name, variables[i].value);
   }
   return;
Index: /trunk/Ohana/src/opihi/mana/Makefile
===================================================================
--- /trunk/Ohana/src/opihi/mana/Makefile	(revision 7916)
+++ /trunk/Ohana/src/opihi/mana/Makefile	(revision 7917)
@@ -19,5 +19,5 @@
 # link flags 
 LIBS    = 	-L$(LIB) -L$(LLIB) -L$(XLIB)
-LIBS1   =       -lsocket -lnsl -lreadline $(TLIB) -ldvo -lkapa -lFITS -lohana -lX11 -lm
+LIBS1   =       -lsocket -lnsl -lreadline $(TLIB) -ldvo -lkapa -lFITS -lohana -lX11 -lpthread -lm
 # LIBS1   =       -lreadline $(TLIB) -ldvo -lkapa -lFITS -lohana -lX11 -lm
 LIBS2   =       -lbasiccmd -ldatacmd -lastrocmd -lshell -ldata 
Index: /trunk/Ohana/src/opihi/mana/adc.c
===================================================================
--- /trunk/Ohana/src/opihi/mana/adc.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/mana/adc.c	(revision 7917)
@@ -28,7 +28,7 @@
 
   if (argc != 4) {
-    fprintf (stderr, "USAGE: adc ai N (variable)\n");
-    fprintf (stderr, "USAGE: adc di N (variable)\n");
-    fprintf (stderr, "USAGE: adc do N mode\n");
+    gprint (GP_ERR, "USAGE: adc ai N (variable)\n");
+    gprint (GP_ERR, "USAGE: adc di N (variable)\n");
+    gprint (GP_ERR, "USAGE: adc do N mode\n");
     return (FALSE);
   }
@@ -36,5 +36,5 @@
   if (!SerialConnected) {
     if (!SerialInit ('b')) {
-      fprintf (stderr, "error opening serial line\n");
+      gprint (GP_ERR, "error opening serial line\n");
       return (FALSE);
     }
@@ -55,5 +55,5 @@
     N = atof (argv[2]);
     if ((N < 1) || (N > 6)) {
-      fprintf (stderr, "digital output is between 1 and 6\n");
+      gprint (GP_ERR, "digital output is between 1 and 6\n");
       return (FALSE);
     }
@@ -72,5 +72,5 @@
     output[1] = 0;
     SerialCommand (output, &input, 50);
-    fprintf (stderr, "%x (%x, %x) -> %x (%d, %d)\n", 
+    gprint (GP_ERR, "%x (%x, %x) -> %x (%d, %d)\n", 
 	     output[0], setbit, DigitalOutState, input[0], 
 	     strlen(input), strlen(output));
@@ -82,6 +82,6 @@
     N = atof (argv[2]);
     if ((N < 2) || (N > 16)) {
-      fprintf (stderr, "analog input is between 2 and 16\n");
-      fprintf (stderr, " (problem with 1 for the moment...)\n");
+      gprint (GP_ERR, "analog input is between 2 and 16\n");
+      gprint (GP_ERR, " (problem with 1 for the moment...)\n");
       return (FALSE);
     }
@@ -105,5 +105,5 @@
     output[1] = 0;
     SerialCommand (output, &input, 50);
-    /* fprintf (stderr, "%x -> %x\n", output[0], input[0]); */
+    /* gprint (GP_ERR, "%x -> %x\n", output[0], input[0]); */
     lo = input[0];
     free (input);
Index: /trunk/Ohana/src/opihi/mana/demux.c
===================================================================
--- /trunk/Ohana/src/opihi/mana/demux.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/mana/demux.c	(revision 7917)
@@ -8,5 +8,5 @@
 
   if (argc != 4) {
-    fprintf (stderr, "USAGE: demux <buffer> nx ny\n");
+    gprint (GP_ERR, "USAGE: demux <buffer> nx ny\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/mana/findpeaks.c
===================================================================
--- /trunk/Ohana/src/opihi/mana/findpeaks.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/mana/findpeaks.c	(revision 7917)
@@ -100,5 +100,5 @@
 
  usage:
-  fprintf (stderr, "findpeaks (buffer) (threshold)\n");
+  gprint (GP_ERR, "findpeaks (buffer) (threshold)\n");
   return (FALSE);
 }
Index: /trunk/Ohana/src/opihi/mana/fitcontour.c
===================================================================
--- /trunk/Ohana/src/opihi/mana/fitcontour.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/mana/fitcontour.c	(revision 7917)
@@ -94,5 +94,5 @@
 
  usage:
-  fprintf (stderr, "fitcontour x y (xo) (yo)\n");
+  gprint (GP_ERR, "fitcontour x y (xo) (yo)\n");
   return (FALSE);
 }
Index: /trunk/Ohana/src/opihi/mana/focus.c
===================================================================
--- /trunk/Ohana/src/opihi/mana/focus.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/mana/focus.c	(revision 7917)
@@ -7,9 +7,9 @@
   if (!strcasecmp (argv[1], "init")) {
     if (argc != 3) {
-      fprintf (stderr, "USAGE: focus init (port)\n");
+      gprint (GP_ERR, "USAGE: focus init (port)\n");
       return (FALSE);
     }
     if (!SerialInit (argv[2])) return (FALSE);
-    fprintf (stderr, "focus on port %s\n", argv[2]);
+    gprint (GP_ERR, "focus on port %s\n", argv[2]);
     return (TRUE);
   }
@@ -22,5 +22,5 @@
 
     if (argc != 4) {
-      fprintf (stderr, "USAGE: focus pos Nservo (angle)\n");
+      gprint (GP_ERR, "USAGE: focus pos Nservo (angle)\n");
       return (FALSE);
     }
@@ -31,7 +31,7 @@
     sprintf (line, "%c%c%c\n", 0xff, servo, angle);
     status = SerialCommand (line, &answer, 10);
-    fprintf (stderr, "status: %d\n", status);
+    gprint (GP_ERR, "status: %d\n", status);
     if (answer != (char *) NULL) {
-      fprintf (stderr, "answer: ..%s..\n", answer);
+      gprint (GP_ERR, "answer: ..%s..\n", answer);
     }
     return (TRUE);
@@ -45,5 +45,5 @@
 
     if (argc != 3) {
-      fprintf (stderr, "USAGE: focus raw value\n");
+      gprint (GP_ERR, "USAGE: focus raw value\n");
       return (FALSE);
     }
@@ -53,7 +53,7 @@
     sprintf (line, "%c", value);
     status = SerialCommand (line, &answer, 10);
-    fprintf (stderr, "status: %d\n", status);
+    gprint (GP_ERR, "status: %d\n", status);
     if (answer != (char *) NULL) {
-      fprintf (stderr, "answer: ..%s..\n", answer);
+      gprint (GP_ERR, "answer: ..%s..\n", answer);
     }
     return (TRUE);
@@ -61,7 +61,7 @@
 
  usage:
-  fprintf (stderr, "focus init port\n");
-  fprintf (stderr, "focus pos (string)\n");
-  fprintf (stderr, "focus raw (value)\n");
+  gprint (GP_ERR, "focus init port\n");
+  gprint (GP_ERR, "focus pos (string)\n");
+  gprint (GP_ERR, "focus raw (value)\n");
   return (FALSE);
 }
Index: /trunk/Ohana/src/opihi/mana/mana.c
===================================================================
--- /trunk/Ohana/src/opihi/mana/mana.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/mana/mana.c	(revision 7917)
@@ -18,4 +18,6 @@
   InitMana ();
 
+  gprintInit ();
+
   rl_readline_name = opihi_name;
   rl_attempted_completion_function = command_completer;
@@ -34,6 +36,6 @@
 /* standard welcome message */
 void welcome () {
-  fprintf (stderr, "\n");
-  fprintf (stderr, "Welcome to %s - %s\n\n", opihi_name, opihi_description);
+  gprint (GP_ERR, "\n");
+  gprint (GP_ERR, "Welcome to %s - %s\n\n", opihi_name, opihi_description);
 }
 
Index: /trunk/Ohana/src/opihi/mana/opihi.c
===================================================================
--- /trunk/Ohana/src/opihi/mana/opihi.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/mana/opihi.c	(revision 7917)
@@ -10,6 +10,6 @@
 
 void welcome () {
-  fprintf (stderr, "\n");
-  fprintf (stderr, "Welcome to %s - %s\n\n", opihi_name, opihi_description);
+  gprint (GP_ERR, "\n");
+  gprint (GP_ERR, "Welcome to %s - %s\n\n", opihi_name, opihi_description);
 }
 
@@ -55,5 +55,5 @@
   f = fopen (opihi_history, "a");
   if (f == NULL) /* no current history file here */
-    fprintf (stderr, "can't save history.\n");
+    gprint (GP_ERR, "can't save history.\n");
   else
     fclose (f);
Index: /trunk/Ohana/src/opihi/mana/rawstars.c
===================================================================
--- /trunk/Ohana/src/opihi/mana/rawstars.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/mana/rawstars.c	(revision 7917)
@@ -35,5 +35,5 @@
   if ((yp = SelectVector (argv[3], OLDVECTOR, TRUE)) == NULL) return (FALSE);
   if (xp[0].Nelements != yp[0].Nelements) {
-    fprintf (stderr, "vectors are not the same length\n");
+    gprint (GP_ERR, "vectors are not the same length\n");
     return (FALSE);
   }
@@ -90,5 +90,5 @@
 
  usage:
-  fprintf (stderr, "rawstars (buffer) (xp) (yp)\n");
+  gprint (GP_ERR, "rawstars (buffer) (xp) (yp)\n");
   return (FALSE);
 }
Index: /trunk/Ohana/src/opihi/mana/simsignal.c
===================================================================
--- /trunk/Ohana/src/opihi/mana/simsignal.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/mana/simsignal.c	(revision 7917)
@@ -9,5 +9,5 @@
 
   if (argc != 5) {
-    fprintf (stderr, "USAGE: simsignal (vector) Nbin Nbits period\n");
+    gprint (GP_ERR, "USAGE: simsignal (vector) Nbin Nbits period\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/mana/starcontour.c
===================================================================
--- /trunk/Ohana/src/opihi/mana/starcontour.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/mana/starcontour.c	(revision 7917)
@@ -125,5 +125,5 @@
 
  usage:
-  fprintf (stderr, "starcontour (buffer) (xpeak) (ypeak) (level)\n");
+  gprint (GP_ERR, "starcontour (buffer) (xpeak) (ypeak) (level)\n");
   return (FALSE);
 }
Index: /trunk/Ohana/src/opihi/mana/tests.c
===================================================================
--- /trunk/Ohana/src/opihi/mana/tests.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/mana/tests.c	(revision 7917)
@@ -16,5 +16,5 @@
   char *test, *line;
 
-  fprintf (stderr, "starting test 1...  ");
+  gprint (GP_ERR, "starting test 1...  ");
   ALLOCATE (test, char, 256);
   sprintf (test, "100");
@@ -23,5 +23,5 @@
     if (line != NULL) free (line);
   }
-  fprintf (stderr, "done with test 1\n");
+  gprint (GP_ERR, "done with test 1\n");
   sleep (1);
 }
@@ -32,5 +32,5 @@
   char *test, *line;
 
-  fprintf (stderr, "starting test 1b...  ");
+  gprint (GP_ERR, "starting test 1b...  ");
   ALLOCATE (test, char, 256);
   sprintf (test, "dsin(45)");
@@ -39,5 +39,5 @@
     if (line != NULL) free (line);
   }
-  fprintf (stderr, "done with test 1b\n");
+  gprint (GP_ERR, "done with test 1b\n");
   sleep (1);
 }
@@ -48,5 +48,5 @@
   char *test, *line;
 
-  fprintf (stderr, "starting test 2...  ");
+  gprint (GP_ERR, "starting test 2...  ");
   ALLOCATE (test, char, 256);
   sprintf (test, "5 * 100");
@@ -55,5 +55,5 @@
     if (line != NULL) free (line);
   }
-  fprintf (stderr, "done with test 2\n");
+  gprint (GP_ERR, "done with test 2\n");
   sleep (1);
 }
@@ -64,5 +64,5 @@
   char *test, *line;
 
-  fprintf (stderr, "starting test 3...  ");
+  gprint (GP_ERR, "starting test 3...  ");
   ALLOCATE (test, char, 256);
   sprintf (test, "5 * dsin(45)");
@@ -71,5 +71,5 @@
     if (line != NULL) free (line);
   }
-  fprintf (stderr, "done with test 3\n");
+  gprint (GP_ERR, "done with test 3\n");
   sleep (1);
 }
@@ -80,5 +80,5 @@
   char *test, *line;
 
-  fprintf (stderr, "starting test 4...  ");
+  gprint (GP_ERR, "starting test 4...  ");
   for (i = 0; i < 1000000; i++) {
     ALLOCATE (test, char, 256);
@@ -87,5 +87,5 @@
     if (line != NULL) free (line);
   }
-  fprintf (stderr, "done with test 4\n");
+  gprint (GP_ERR, "done with test 4\n");
   sleep (1);
 }
@@ -96,5 +96,5 @@
   char *test, *line;
 
-  fprintf (stderr, "starting test 5...  ");
+  gprint (GP_ERR, "starting test 5...  ");
   for (i = 0; i < 1000000; i++) {
     ALLOCATE (test, char, 256);
@@ -103,5 +103,5 @@
     if (line != NULL) free (line);
   }
-  fprintf (stderr, "done with test 5\n");
+  gprint (GP_ERR, "done with test 5\n");
   sleep (1);
 }
Index: /trunk/Ohana/src/opihi/mana/version.c
===================================================================
--- /trunk/Ohana/src/opihi/mana/version.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/mana/version.c	(revision 7917)
@@ -4,11 +4,11 @@
 int version (int argc, char **argv) {
 
-  fprintf (stderr, "%s\n", name);
+  gprint (GP_ERR, "%s\n", name);
 
-  fprintf (stderr, "%s\n", opihi_version());
-  fprintf (stderr, "%s\n", ohana_version());
-  fprintf (stderr, "%s\n", gfits_version());
+  gprint (GP_ERR, "%s\n", opihi_version());
+  gprint (GP_ERR, "%s\n", ohana_version());
+  gprint (GP_ERR, "%s\n", gfits_version());
 
-  fprintf (stderr, "compiled on %s %s\n", __DATE__, __TIME__);
+  gprint (GP_ERR, "compiled on %s %s\n", __DATE__, __TIME__);
   return (TRUE);
 }
Index: /trunk/Ohana/src/opihi/pantasks/CheckController.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/CheckController.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pantasks/CheckController.c	(revision 7917)
@@ -19,10 +19,10 @@
   // TimerMark ();
   // status = ControllerCommand ("stop", CONTROLLER_PROMPT, &buffer); 
-  // if (VerboseMode()) fprintf (stderr, "stop controller %f\n", TimerElapsed(TRUE));
+  // if (VerboseMode()) gprint (GP_ERR, "stop controller %f\n", TimerElapsed(TRUE));
 
   TimerMark ();
   FlushIOBuffer (&buffer);
   status = ControllerCommand ("jobstack exit", CONTROLLER_PROMPT, &buffer);
-  if (VerboseMode()) fprintf (stderr, "check exit stack %f\n", TimerElapsed(TRUE));
+  if (VerboseMode()) gprint (GP_ERR, "check exit stack %f\n", TimerElapsed(TRUE));
   if (!status) goto escape;
 
@@ -34,5 +34,5 @@
   status = sscanf (buffer.buffer, "%*s %d", &Njobs);
   if (status != 1) goto escape;
-  if (VerboseMode()) fprintf (stderr, "parse %d jobs on stack %f\n", Njobs, TimerElapsed(TRUE));
+  if (VerboseMode()) gprint (GP_ERR, "parse %d jobs on stack %f\n", Njobs, TimerElapsed(TRUE));
 
   p = buffer.buffer;
@@ -40,5 +40,5 @@
     q = strchr (p, '\n');
     if (q == NULL) {
-      fprintf (stderr, "controller message error: incomplete job list\n");
+      gprint (GP_ERR, "controller message error: incomplete job list\n");
       break;
     }
@@ -48,5 +48,5 @@
     job = FindControllerJob (JobID);
     if (job == NULL) {
-      fprintf (stderr, "misplaced job? %d not in EXIT job list\n", JobID);
+      gprint (GP_ERR, "misplaced job? %d not in EXIT job list\n", JobID);
       continue;
     }
@@ -54,5 +54,5 @@
     CheckControllerJob (job);
   }
-  if (VerboseMode()) fprintf (stderr, "clear %d exit jobs %f\n", i, TimerElapsed(TRUE));
+  if (VerboseMode()) gprint (GP_ERR, "clear %d exit jobs %f\n", i, TimerElapsed(TRUE));
 
   if (TestElapsedCheck()) goto finish;
@@ -70,5 +70,5 @@
   status = sscanf (buffer.buffer, "%*s %d", &Njobs);
   if (status != 1) goto escape;
-  if (VerboseMode()) fprintf (stderr, "check crash stack %f\n", TimerElapsed(TRUE)); 
+  if (VerboseMode()) gprint (GP_ERR, "check crash stack %f\n", TimerElapsed(TRUE)); 
 
   p = buffer.buffer;
@@ -76,5 +76,5 @@
     q = strchr (p, '\n');
     if (q == NULL) {
-      fprintf (stderr, "controller message error: incomplete job list\n");
+      gprint (GP_ERR, "controller message error: incomplete job list\n");
       break;
     }
@@ -84,5 +84,5 @@
     job = FindControllerJob (JobID);
     if (job == NULL) {
-      fprintf (stderr, "misplaced job? %d not in CRASH job list\n", JobID);
+      gprint (GP_ERR, "misplaced job? %d not in CRASH job list\n", JobID);
       continue;
     }
@@ -90,5 +90,5 @@
     CheckControllerJob (job);
   }
-  if (VerboseMode()) fprintf (stderr, "clear %d crash jobs %f\n", i, TimerElapsed(TRUE)); 
+  if (VerboseMode()) gprint (GP_ERR, "clear %d crash jobs %f\n", i, TimerElapsed(TRUE)); 
 
  finish:
Index: /trunk/Ohana/src/opihi/pantasks/CheckJobs.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/CheckJobs.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pantasks/CheckJobs.c	(revision 7917)
@@ -18,9 +18,9 @@
     switch (status) {
       case JOB_PENDING:
-	/* if (VerboseMode()) fprintf (stderr, "job %s (%d) pending\n", job[0].task[0].name, job[0].JobID); */
+	/* if (VerboseMode()) gprint (GP_LOG, "job %s (%d) pending\n", job[0].task[0].name, job[0].JobID); */
 	break;
 
       case JOB_BUSY:
-	/* if (VerboseMode()) fprintf (stderr, "job %s (%d) busy\n", job[0].task[0].name, job[0].JobID); */
+	/* if (VerboseMode()) gprint (GP_LOG, "job %s (%d) busy\n", job[0].task[0].name, job[0].JobID); */
 	break;
 
@@ -28,5 +28,5 @@
 	/* run task[0].crash macro, if it exists */
 	/* push output buffer data to the stdout and stderr queues */
-	if (VerboseMode()) fprintf (stderr, "job %s (%d) crash\n", job[0].task[0].name, job[0].JobID);
+	if (VerboseMode()) gprint (GP_LOG, "job %s (%d) crash\n", job[0].task[0].name, job[0].JobID);
 	PushNamedQueue ("stdout", job[0].stdout.buffer);
 	PushNamedQueue ("stderr", job[0].stderr.buffer);
@@ -48,5 +48,5 @@
 
       case JOB_EXIT:
-	if (VerboseMode()) fprintf (stderr, "job %s (%d) exit\n", job[0].task[0].name, job[0].JobID);
+	if (VerboseMode()) gprint (GP_LOG, "job %s (%d) exit\n", job[0].task[0].name, job[0].JobID);
 	PushNamedQueue ("stdout", job[0].stdout.buffer);
 	PushNamedQueue ("stderr", job[0].stderr.buffer);
@@ -79,5 +79,5 @@
 
       default:
-	if (VerboseMode()) fprintf (stderr, "unknown exit status: %d\n", status);
+	if (VerboseMode()) gprint (GP_LOG, "unknown exit status: %d\n", status);
 	/** do something more useful here ?? **/
 	break;
@@ -89,5 +89,5 @@
     if (job[0].mode == JOB_LOCAL) {
       if (GetTaskTimer(job[0].start) < job[0].task[0].timeout_period) continue;
-      if (VerboseMode()) fprintf (stderr, "timeout on %s\n", job[0].task[0].name);
+      if (VerboseMode()) gprint (GP_LOG, "timeout on %s\n", job[0].task[0].name);
 
       /* update the timeout counter */
@@ -96,5 +96,5 @@
       if (!KillLocalJob (job)) {
 	job[0].state = JOB_HUNG;
-	if (VerboseMode()) fprintf (stderr, "child process %d is hung, cannot kill\n", job[0].pid);
+	if (VerboseMode()) gprint (GP_LOG, "child process %d is hung, cannot kill\n", job[0].pid);
 	continue;
       }
Index: /trunk/Ohana/src/opihi/pantasks/CheckPassword.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/CheckPassword.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pantasks/CheckPassword.c	(revision 7917)
@@ -15,9 +15,9 @@
   int status;
 
-  if (DEBUG) fprintf (stderr, "waiting for password %s\n", PASSWORD);
+  if (DEBUG) gprint (GP_ERR, "waiting for password %s\n", PASSWORD);
 
   status = ExpectCommand (BindSocket, strlen(PASSWORD), 0.1, &message);
   if (status != 0) {
-    if (DEBUG) fprintf (stderr, "failed connection\n");
+    if (DEBUG) gprint (GP_ERR, "failed connection\n");
     FreeIOBuffer (&message);
     close (BindSocket);
@@ -25,9 +25,9 @@
   }
   if (strncmp (message.buffer, PASSWORD, strlen(PASSWORD))) {
-    if (DEBUG) fprintf (stderr, "invalid password\n");
+    if (DEBUG) gprint (GP_ERR, "invalid password\n");
     close (BindSocket);
     return (FALSE);
   }
-  if (DEBUG) fprintf (stderr, "accepted password (%s)\n", message.buffer);
+  if (DEBUG) gprint (GP_ERR, "accepted password (%s)\n", message.buffer);
   
   return (TRUE);
Index: /trunk/Ohana/src/opihi/pantasks/ControllerOps.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/ControllerOps.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pantasks/ControllerOps.c	(revision 7917)
@@ -25,5 +25,5 @@
   gettimeofday (&stop, (void *) NULL);
   dtime = DTIME (stop, start);
-  /* if (VerboseMode()) fprintf (stderr, "check job status %f\n", dtime); */
+  /* if (VerboseMode()) gprint (GP_ERR, "check job status %f\n", dtime); */
 
   if ((job[0].state == JOB_EXIT) || (job[0].state == JOB_CRASH)) {
@@ -32,5 +32,5 @@
     gettimeofday (&stop, (void *) NULL);
     dtime = DTIME (stop, start);
-    /* if (VerboseMode()) fprintf (stderr, "get stdout %f\n", dtime); */
+    /* if (VerboseMode()) gprint (GP_ERR, "get stdout %f\n", dtime); */
 
     gettimeofday (&start, (void *) NULL);
@@ -38,5 +38,5 @@
     gettimeofday (&stop, (void *) NULL);
     dtime = DTIME (stop, start);
-    /* if (VerboseMode()) fprintf (stderr, "get stderr %f\n", dtime); */
+    /* if (VerboseMode()) gprint (GP_ERR, "get stderr %f\n", dtime); */
 
     gettimeofday (&start, (void *) NULL);
@@ -44,5 +44,5 @@
     gettimeofday (&stop, (void *) NULL);
     dtime = DTIME (stop, start);
-    /* if (VerboseMode()) fprintf (stderr, "delete job %f\n", dtime); */
+    /* if (VerboseMode()) gprint (GP_ERR, "delete job %f\n", dtime); */
   }  
   return (TRUE);
@@ -81,5 +81,5 @@
   p = memstr (buffer.buffer, "job not found", buffer.Nbuffer);
   if (p != NULL) {
-    fprintf (stderr, "unknown job %d\n", job[0].pid);
+    gprint (GP_ERR, "unknown job %d\n", job[0].pid);
     FreeIOBuffer (&buffer);
     return (FALSE);
@@ -105,5 +105,5 @@
   if (!strcmp(status_string, "CRASH"))   outstate = JOB_CRASH;
   if (outstate == -1) {
-    fprintf (stderr, "programming error?\n");
+    gprint (GP_ERR, "programming error?\n");
     exit (1);
   }
@@ -147,5 +147,5 @@
   if (status == -1) return (CONTROLLER_HUNG);
 
-  /* if (VerboseMode()) fprintf (stderr, "message received (GetJobOutput : %s)\n", cmd);   */
+  /* if (VerboseMode()) gprint (GP_ERR, "message received (GetJobOutput : %s)\n", cmd);   */
   /* drop extra bytes from pcontrol (not pclient:job) */
   buffer[0].Nbuffer = Nstart + Nbytes;
@@ -205,5 +205,5 @@
   p = memstr (buffer.buffer, "JobID", buffer.Nbuffer);
   if (p == NULL) {
-    fprintf (stderr, "missing PID in pcontrol message : programming error\n");
+    gprint (GP_ERR, "missing PID in pcontrol message : programming error\n");
     exit (1);
   }
@@ -240,5 +240,5 @@
   pid = fork ();
   if (!pid) { /* must be child process */
-    fprintf (stderr, "starting controller connection\n");
+    gprint (GP_LOG, "starting controller connection\n");
 
     /* close the other ends of the pipes */
@@ -303,5 +303,5 @@
   ControllerPID = pid;
   ControllerStatus = TRUE;
-  fprintf (stderr, "Connected\n");
+  gprint (GP_LOG, "Connected\n");
   return (TRUE);
 
@@ -311,5 +311,5 @@
 
 io_error:
-  fprintf (stderr, "timeout while connecting\n");
+  gprint (GP_ERR, "timeout while connecting\n");
   goto close_pipes;
 
@@ -341,5 +341,5 @@
   if ((status == -1) && (errno == EPIPE)) {
     StopController ();
-    if (VerboseMode()) fprintf (stderr, "controller is down\n");
+    if (VerboseMode()) gprint (GP_ERR, "controller is down\n");
     return (FALSE);
   }
@@ -355,9 +355,9 @@
   if (status ==  0) {
     StopController ();
-    if (VerboseMode()) fprintf (stderr, "controller is down\n");
+    if (VerboseMode()) gprint (GP_ERR, "controller is down\n");
     return (FALSE);
   }
   if (status == -1) {
-    if (VerboseMode()) fprintf (stderr, "controller is not responding\n");
+    if (VerboseMode()) gprint (GP_ERR, "controller is not responding\n");
     return (FALSE);
   }
@@ -369,5 +369,5 @@
     bzero (buffer[0].buffer + buffer[0].Nbuffer, buffer[0].Nalloc - buffer[0].Nbuffer);
   }
-  /* if (VerboseMode()) fprintf (stderr, "message received, %d cycles\n", i); */
+  /* if (VerboseMode()) gprint (GP_ERR, "message received, %d cycles\n", i); */
   return (TRUE);
 }
@@ -383,5 +383,5 @@
   switch (Nread) {
     case -2:  /* error in read (programming error?  system level error?) */
-      fprintf (stderr, "serious IO error\n");
+      gprint (GP_ERR, "serious IO error\n");
       exit (2);
     case -1:  /* no data in pipe */
@@ -395,5 +395,5 @@
   switch (Nread) {
     case -2:  /* error in read (programming error?  system level error?) */
-      fprintf (stderr, "serious IO error\n");
+      gprint (GP_ERR, "serious IO error\n");
       exit (2);
     case -1:  /* no data in pipe */
@@ -407,9 +407,9 @@
 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");
+  gprint (GP_LOG, "--- stdout ---\n");
+  gwrite (stdout_buffer.buffer, 1, stdout_buffer.Nbuffer, GP_LOG);
+  gprint (GP_LOG, "--- stderr ---\n");
+  gwrite (stderr_buffer.buffer, 1, stderr_buffer.Nbuffer, GP_LOG);
+  gprint (GP_LOG, "---  done  ---\n");
   return (TRUE);
 }
Index: /trunk/Ohana/src/opihi/pantasks/JobOps.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/JobOps.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pantasks/JobOps.c	(revision 7917)
@@ -65,13 +65,13 @@
   int i;
 
-  fprintf (stderr, "\n");
+  gprint (GP_LOG, "\n");
   if (Njobs == 0) {
-    fprintf (stderr, " no defined jobs\n");
+    gprint (GP_LOG, " no defined jobs\n");
     return;
   }
 
-  fprintf (stderr, " Jobs\n");
-  for (i = 0; i < Njobs; i++) {
-    fprintf (stderr, " %d: %-15s %5d %20s (%lx)\n", Njobs, jobs[i][0].task[0].name, jobs[i][0].JobID, jobs[i][0].argv[0], (long) jobs[i][0].argv);
+  gprint (GP_LOG, " Jobs\n");
+  for (i = 0; i < Njobs; i++) {
+    gprint (GP_LOG, " %d: %-15s %5d %20s (%lx)\n", Njobs, jobs[i][0].task[0].name, jobs[i][0].JobID, jobs[i][0].argv[0], (long) jobs[i][0].argv);
   }
   return;
@@ -155,5 +155,5 @@
   }
   if (Nm == -1) {
-    fprintf (stderr, "programming error: job not found\n");
+    gprint (GP_ERR, "programming error: job not found\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/pantasks/ListenClients.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/ListenClients.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pantasks/ListenClients.c	(revision 7917)
@@ -25,5 +25,5 @@
   */
 
-  if (DEBUG) fprintf (stderr, "adding a new client (%d)\n", client);
+  if (DEBUG) gprint (GP_LOG, "adding a new client (%d)\n", client);
   clients[Nclients] = client;
   InitIOBuffer(&buffers[Nclients], 256);
@@ -42,4 +42,5 @@
   fd_set fdSet;
   struct timeval timeout;
+  IOBuffer *outbuffer;
 
   InitClients ();
@@ -50,7 +51,7 @@
     for (i = 0; i < Ncurrent; i++) {
       ExpectMessage (clients[i], 0.25, &buffers[i]);
-      if (DEBUG) fprintf (stderr, "read %d from client %d\n", buffers[i].Nbuffer, i);
+      if (DEBUG) gprint (GP_ERR, "read %d from client %d\n", buffers[i].Nbuffer, i);
       if (buffers[i].Nbuffer) {
-	if (DEBUG) fprintf (stderr, "%s\n", buffers[i].buffer);
+	if (DEBUG) gprint (GP_ERR, "%s\n", buffers[i].buffer);
       }
     }
@@ -73,7 +74,7 @@
       FD_SET (clients[i], &fdSet);
       if (FD_ISSET(clients[i], &fdSet)) {
-	if (DEBUG) fprintf (stderr, "fd %d is set\n", clients[i]);
+	if (DEBUG) gprint (GP_ERR, "fd %d is set\n", clients[i]);
       } else {
-	if (DEBUG) fprintf (stderr, "fd %d is not set\n", clients[i]);
+	if (DEBUG) gprint (GP_ERR, "fd %d is not set\n", clients[i]);
       }
     }    
@@ -81,8 +82,8 @@
 
     /* block until we have some data on the pipes (or timeout) */
-    if (DEBUG) fprintf (stderr, "listening to %d clients\n", Ncurrent);
+    if (DEBUG) gprint (GP_ERR, "listening to %d clients\n", Ncurrent);
     status = select (Nmax, &fdSet, NULL, NULL, &timeout);
 
-    if (DEBUG) fprintf (stderr, "messages from %d clients\n", status);
+    if (DEBUG) gprint (GP_ERR, "messages from %d clients\n", status);
 
     if (status == -1) {
@@ -99,9 +100,10 @@
 
       /* this client has data, handle it */
-      if (DEBUG) fprintf (stderr, "data from client %d\n", clients[i]);
-
-      if (DEBUG) fprintf (stderr, "start: ", buffers[i].buffer);
-      fwrite (buffers[i].buffer, 1, buffers[i].Nbuffer, stderr);
-      if (DEBUG) fprintf (stderr, "...\n");
+      if (DEBUG) { 
+	gprint (GP_ERR, "data from client %d\n", clients[i]);
+	gprint (GP_ERR, "start: ", buffers[i].buffer);
+	gwrite (buffers[i].buffer, 1, buffers[i].Nbuffer, GP_ERR);
+	gprint (GP_ERR, "...\n");
+      }
 	
       /* read until the pipe is empty: -1 is empty, -2 is error */
@@ -109,17 +111,17 @@
       while (Nread >= 0) {
 	Nread = ReadtoIOBuffer (&buffers[i], clients[i]);	
-	if (DEBUG) fprintf (stderr, "read %d bytes from socket\n", Nread);
+	if (DEBUG) gprint (GP_ERR, "read %d bytes from socket\n", Nread);
 
 	if (Nread == -2) {
 	  /* error: do something */
-	  if (1) fprintf (stderr, "error reading from socket\n");
+	  if (1) gprint (GP_ERR, "error reading from socket\n");
 	}
       }
-      if (DEBUG) fprintf (stderr, "read %d total bytes\n", buffers[i].Nbuffer);
+      if (DEBUG) gprint (GP_ERR, "read %d total bytes\n", buffers[i].Nbuffer);
 
       if (DEBUG) { 
-	fprintf (stderr, "end: ", buffers[i].buffer);
-	fwrite (buffers[i].buffer, 1, buffers[i].Nbuffer, stderr);
-	fprintf (stderr, "...\n");
+	gprint (GP_ERR, "end: ", buffers[i].buffer);
+	gwrite (buffers[i].buffer, 1, buffers[i].Nbuffer, GP_ERR);
+	gprint (GP_ERR, "...\n");
       }
 	
@@ -129,11 +131,22 @@
 
       /* we now have a possible command from the client: run it */
+      /* XXX : we need to handle ; in the client-parsing of commands */
       stripwhite (line);
       if (*line) {
-	if (1) fprintf (stderr, "got command: %s\n", line);
+	if (1) gprint (GP_ERR, "got command: %s\n", line);
+	SetOutBuffer ();
 	status = multicommand (line);
+	outbuffer = GetOutBuffer ();
+
+	gprint (GP_ERR, "send message: %d bytes\n", outbuffer[0].Nbuffer);
+	gwrite (outbuffer[0].buffer, 1, outbuffer[0].Nbuffer, GP_ERR);
+	gprint (GP_ERR, "end message\n");
+	
+	SendMessage (clients[i], outbuffer[0].buffer);
+	SetOutfile ("stdout");
       }
       free (line);
 
+      
       /* this function should return the output buffer 
 	 to the currently selected client */
Index: /trunk/Ohana/src/opihi/pantasks/LocalJob.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/LocalJob.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pantasks/LocalJob.c	(revision 7917)
@@ -24,5 +24,5 @@
     switch (Nread) {
       case -2:  /* error in read (programming error?  system level error?) */
-	fprintf (stderr, "serious IO error\n");
+	gprint (GP_ERR, "serious IO error\n");
 	exit (2);
       case -1:  /* no data in pipe */
@@ -36,5 +36,5 @@
     switch (Nread) {
       case -2:  /* error in read (programming error?  system level error?) */
-	fprintf (stderr, "serious IO error\n");
+	gprint (GP_ERR, "serious IO error\n");
 	exit (2);
       case -1:  /* no data in pipe */
@@ -57,17 +57,17 @@
       switch (errno) {
 	case ECHILD:
-	  fprintf (stderr, "unknown PID, not a child proc\n");
-	  fprintf (stderr, "did process already exit?  programming error?\n");
+	  gprint (GP_ERR, "unknown PID, not a child proc\n");
+	  gprint (GP_ERR, "did process already exit?  programming error?\n");
 	  job[0].state = JOB_NONE;
 	  job[0].exit_status = 0;
 	  return (FALSE);
 	case EINVAL:
-	  fprintf (stderr, "error EINVAL (waitpid): programming error\n");
+	  gprint (GP_ERR, "error EINVAL (waitpid): programming error\n");
 	  exit (1);
 	case EINTR:
-	  fprintf (stderr, "error EINTR (waitpid): programming error\n");
+	  gprint (GP_ERR, "error EINTR (waitpid): programming error\n");
 	  exit (1);
 	default:
-	  fprintf (stderr, "unknown error for waitpid (%d): programming error\n", errno);
+	  gprint (GP_ERR, "unknown error for waitpid (%d): programming error\n", errno);
 	  exit (1);
       }
@@ -81,5 +81,5 @@
     default:
       if (result != job[0].pid) {
-	fprintf (stderr, "waitpid error: mis-matched PID (%d vs %d).  programming error\n", result, job[0].pid);
+	gprint (GP_ERR, "waitpid error: mis-matched PID (%d vs %d).  programming error\n", result, job[0].pid);
 	exit (1);
       }
@@ -93,5 +93,5 @@
       }
       if (WIFSTOPPED(waitstatus)) {
-	fprintf (stderr, "waitpid returns 'stopped': programming error\n");
+	gprint (GP_ERR, "waitpid returns 'stopped': programming error\n");
 	exit (1);
       }
@@ -114,5 +114,5 @@
   pid = fork ();
   if (!pid) { /* must be child process */
-    if (VerboseMode()) fprintf (stderr, "starting local job\n");
+    if (VerboseMode()) gprint (GP_ERR, "starting local job\n");
 
     /* close the other ends of the pipes */
Index: /trunk/Ohana/src/opihi/pantasks/Makefile
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/Makefile	(revision 7916)
+++ /trunk/Ohana/src/opihi/pantasks/Makefile	(revision 7917)
@@ -19,5 +19,5 @@
 # link flags 
 LIBS    = 	-L$(LIB) -L$(LLIB) -L$(XLIB)
-LIBS1   =       -lsocket -lnsl -lreadline $(TLIB) -ldvo -lkapa -lFITS -lohana -lX11 -lm
+LIBS1   =       -lsocket -lnsl -lreadline $(TLIB) -ldvo -lkapa -lFITS -lohana -lX11 -lpthread -lm
 LIBS2   =       -lbasiccmd -ldatacmd -lastrocmd -lshell -ldata 
 LFLAGS  =       $(LIBS) $(LIBS2) $(LIBS1) 
@@ -94,5 +94,5 @@
 $(BIN)/pantasks_server.$(ARCH) : $(server) $(funcs) $(cmds) $(libs)
 	@if [ ! -d $(BIN) ]; then mkdir -p $(BIN); fi
-	$(CC) -o $@ $^ $(LFLAGS) -lpthread
+	$(CC) -o $@ $^ $(LFLAGS)
 
 pantasks_client.install: $(DESTBIN)/pantasks_client
Index: /trunk/Ohana/src/opihi/pantasks/SocketOps.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/SocketOps.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pantasks/SocketOps.c	(revision 7917)
@@ -33,5 +33,5 @@
   status = inet_aton (hostip, &Address[0].sin_addr);
   if (!status) {
-    fprintf (stderr, "invalid address\n");
+    gprint (GP_ERR, "invalid address\n");
     exit (2);
   }
@@ -46,5 +46,5 @@
   }
 
-  if (DEBUG) fprintf (stderr, "init sock: %d, len: %d\n", InitSocket, length);
+  if (DEBUG) gprint (GP_ERR, "init sock: %d, len: %d\n", InitSocket, length);
   status = bind (InitSocket, (struct sockaddr *) Address, length);
   if (status == -1) {
@@ -74,7 +74,7 @@
   fcntl (InitSocket, F_SETFL, !O_NONBLOCK); 
 
-  if (DEBUG) fprintf (stderr, "init sock: %d, len: %d\n", InitSocket, length);
+  if (DEBUG) gprint (GP_ERR, "init sock: %d, len: %d\n", InitSocket, length);
   BindSocket = accept (InitSocket, (struct sockaddr *) &Address_in, &length);
-  if (DEBUG) fprintf (stderr, "bind sock: %d\n", BindSocket);
+  if (DEBUG) gprint (GP_ERR, "bind sock: %d\n", BindSocket);
   if (BindSocket == -1) {
     perror ("accept: ");
@@ -84,10 +84,10 @@
   addr = Address_in.sin_addr.s_addr;
   if (DEBUG) {
-    fprintf (stderr, "incoming connection from: ");
-    fprintf (stderr, " %u", (0xff & (addr >>  0)));
-    fprintf (stderr, ".%u", (0xff & (addr >>  8)));
-    fprintf (stderr, ".%u", (0xff & (addr >> 16)));
-    fprintf (stderr, ".%u", (0xff & (addr >> 24)));
-    fprintf (stderr, "\n");
+    gprint (GP_ERR, "incoming connection from: ");
+    gprint (GP_ERR, " %u", (0xff & (addr >>  0)));
+    gprint (GP_ERR, ".%u", (0xff & (addr >>  8)));
+    gprint (GP_ERR, ".%u", (0xff & (addr >> 16)));
+    gprint (GP_ERR, ".%u", (0xff & (addr >> 24)));
+    gprint (GP_ERR, "\n");
   }
 
@@ -109,10 +109,10 @@
   }
 
-  if (DEBUG) fprintf (stderr, "connection rejected\n");
+  if (DEBUG) gprint (GP_ERR, "connection rejected\n");
   close (BindSocket);
   return (-1);
 
 accepted:
-  if (DEBUG) fprintf (stderr, "connection accepted\n");
+  if (DEBUG) gprint (GP_ERR, "connection accepted\n");
   fcntl (BindSocket, F_SETFL, O_NONBLOCK); 
   return (BindSocket);
@@ -135,5 +135,5 @@
 
   if (DEBUG) {
-    fprintf (stderr, "trying %s (%s:%d)...", host[0].h_name, hostip, MY_PORT);
+    gprint (GP_ERR, "trying %s (%s:%d)...", host[0].h_name, hostip, MY_PORT);
   }
 
@@ -142,5 +142,5 @@
   status = inet_aton (hostip, &Address.sin_addr);
   if (!status) {
-    fprintf (stderr, "invalid address\n");
+    gprint (GP_ERR, "invalid address\n");
     exit (2);
   }
@@ -160,5 +160,5 @@
   }
 
-  if (DEBUG) fprintf (stderr, "connected\n");
+  if (DEBUG) gprint (GP_ERR, "connected\n");
   fcntl (InitSocket, F_SETFL, O_NONBLOCK); 
   return (InitSocket);
@@ -183,5 +183,5 @@
   status = inet_aton (hostip, &Address[0].sin_addr);
   if (!status) {
-    fprintf (stderr, "invalid address\n");
+    gprint (GP_ERR, "invalid address\n");
     exit (2);
   }
@@ -195,5 +195,5 @@
   }
 
-  if (DEBUG) fprintf (stderr, "init sock: %d, len: %d\n", InitSocket, length);
+  if (DEBUG) gprint (GP_ERR, "init sock: %d, len: %d\n", InitSocket, length);
   status = bind (InitSocket, (struct sockaddr *) Address, length);
   if (status == -1) {
@@ -208,5 +208,5 @@
   }
 
-  if (DEBUG) fprintf (stderr, "socket listening on %s (%s:%d)\n", host[0].h_name, hostip, MY_PORT);
+  if (DEBUG) gprint (GP_ERR, "socket listening on %s (%s:%d)\n", host[0].h_name, hostip, MY_PORT);
   return (InitSocket);
 }
@@ -230,5 +230,5 @@
     test &= ((ip4 >=0) && (ip4 < 256)); 
     if (!test) {
-      fprintf (stderr, "invalid IP address %s\n", string);
+      gprint (GP_ERR, "invalid IP address %s\n", string);
       exit (2);
     }
Index: /trunk/Ohana/src/opihi/pantasks/TaskOps.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/TaskOps.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pantasks/TaskOps.c	(revision 7917)
@@ -54,40 +54,40 @@
   int i, valid;
 
-  fprintf (stderr, "\n");
+  gprint (GP_LOG, "\n");
   if (Ntasks == 0) {
-    fprintf (stderr, " no defined tasks\n");
+    gprint (GP_LOG, " no defined tasks\n");
     return;
   }
 
-  fprintf (stderr, " Task Status\n");
-  fprintf (stderr, "  * Name            Njobs  Command\n");
+  gprint (GP_LOG, " Task Status\n");
+  gprint (GP_LOG, "  * 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 (verbose) gprint (GP_LOG, "\n");
     if (valid) {
-      fprintf (stderr, "  + ");
+      gprint (GP_LOG, "  + ");
     } else {
-      fprintf (stderr, "  - ");
+      gprint (GP_LOG, "  - ");
     }
     if (tasks[i][0].argv == NULL) {
-      fprintf (stderr, "%-15s %5d  %-20s\n", tasks[i][0].name, tasks[i][0].Njobs, "(dynamic)");
+      gprint (GP_LOG, "%-15s %5d  %-20s\n", tasks[i][0].name, tasks[i][0].Njobs, "(dynamic)");
     } else {
-      fprintf (stderr, "%-15s %5d  %-20s\n", tasks[i][0].name, tasks[i][0].Njobs, tasks[i][0].argv[0]);
+      gprint (GP_LOG, "%-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", 
+      gprint (GP_LOG, "    spawn period: %f, polling period: %f, timeout period: %f\n", 
 	       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");
+	gprint (GP_LOG, "    task runs locally\n");
 	continue;
       }
       if (!strcasecmp(tasks[i][0].host, "ANYHOST")) {
-	fprintf (stderr, "    task host selected by controller\n");
+	gprint (GP_LOG, "    task host selected by controller\n");
 	continue;
       }
       if (tasks[i][0].host_required) {
-	fprintf (stderr, "    host %s (required)\n", tasks[i][0].host);
+	gprint (GP_LOG, "    host %s (required)\n", tasks[i][0].host);
       } else {
-	fprintf (stderr, "    host %s (desired)\n", tasks[i][0].host);
+	gprint (GP_LOG, "    host %s (desired)\n", tasks[i][0].host);
       }
     }
@@ -104,48 +104,48 @@
   task = FindTask (name);
   if (task == NULL) {
-    fprintf (stderr, "task %s not found\n", name);
+    gprint (GP_LOG, "task %s not found\n", name);
     return (FALSE);
   }
 
-  fprintf (stderr, "\n macro %s\n", task[0].name);
-
-  fprintf (stderr, "\n command: ");
+  gprint (GP_LOG, "\n macro %s\n", task[0].name);
+
+  gprint (GP_LOG, "\n command: ");
   for (i = 0; i < task[0].argc; i++) {
-    fprintf (stderr, "%s ", task[0].argv[i]);
-  }
-  fprintf (stderr, "\n\n");
+    gprint (GP_LOG, "%s ", task[0].argv[i]);
+  }
+  gprint (GP_LOG, "\n\n");
 
   if (task[0].host == NULL) {
-    fprintf (stderr, " task runs locally\n");
+    gprint (GP_LOG, " task runs locally\n");
     goto periods;
   }
   if (!strcasecmp(task[0].host, "ANYHOST")) {
-    fprintf (stderr, " task host selected by controller\n");
+    gprint (GP_LOG, " task host selected by controller\n");
     goto periods;
   }
   if (task[0].host_required) {
-    fprintf (stderr, " host %s (required)\n", task[0].host);
+    gprint (GP_LOG, " host %s (required)\n", task[0].host);
   } else {
-    fprintf (stderr, " host %s (desired)\n", task[0].host);
+    gprint (GP_LOG, " host %s (desired)\n", task[0].host);
   }
 
 periods:
-  fprintf (stderr, " time periods: exec: %f  poll: %f  timeout: %f\n", 
+  gprint (GP_LOG, " time periods: exec: %f  poll: %f  timeout: %f\n", 
 	   task[0].exec_period, task[0].poll_period, task[0].timeout_period);
 
-  fprintf (stderr, "\n pre-execute macro\n");
+  gprint (GP_LOG, "\n pre-execute macro\n");
   ListMacro (task[0].exec);
 
-  fprintf (stderr, "\n timeout macro\n");
+  gprint (GP_LOG, "\n timeout macro\n");
   ListMacro (task[0].timeout);
 
-  fprintf (stderr, "\n crash macro\n");
+  gprint (GP_LOG, "\n crash macro\n");
   ListMacro (task[0].crash);
 
-  fprintf (stderr, "\n default exit macro\n");
+  gprint (GP_LOG, "\n default exit macro\n");
   ListMacro (task[0].defexit);
 
   for (i = 0; i < task[0].Nexit; i++) {
-    fprintf (stderr, "\n exit macro (status == %d)\n", atoi(task[0].exit[i][0].name));
+    gprint (GP_LOG, "\n exit macro (status == %d)\n", atoi(task[0].exit[i][0].name));
     ListMacro (task[0].exit[i]);
   }
@@ -252,5 +252,5 @@
   }
   if (Nt == -1) {
-    fprintf (stderr, "programming error: task not found\n");
+    gprint (GP_ERR, "programming error: task not found\n");
     return (FALSE);
   }
@@ -269,5 +269,5 @@
   if (task[0].argc != 0) {
     if (task[0].argv == NULL) {
-      fprintf (stderr, "task command arguments not defined (programming error)\n");
+      gprint (GP_ERR, "task command arguments not defined (programming error)\n");
       return (FALSE);
     }
@@ -275,5 +275,5 @@
   }
   if (RequireStatic) {
-    fprintf (stderr, "task command not defined\n");
+    gprint (GP_ERR, "task command not defined\n");
     return (FALSE);
   }
@@ -286,5 +286,5 @@
     }
   }
-  fprintf (stderr, "task command not defined\n");
+  gprint (GP_ERR, "task command not defined\n");
   return (FALSE);
 }
Index: /trunk/Ohana/src/opihi/pantasks/client_shell.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/client_shell.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pantasks/client_shell.c	(revision 7917)
@@ -19,5 +19,5 @@
   /* connect to the server */
   if (VarConfig ("PANTASKS_SERVER", "%s", hostname) == NULL) {
-    fprintf (stderr, "pantasks server host undefined\n");
+    gprint (GP_ERR, "pantasks server host undefined\n");
     exit (2);
   }
@@ -38,9 +38,9 @@
       ppid = getppid();
       if (ppid == 1) {
-	fprintf (stderr, "caught parent shutdown\n");
+	gprint (GP_ERR, "caught parent shutdown\n");
 	exit (2);
       }
       if (!isatty (STDIN_FILENO)) exit (2);
-      fprintf (stdout, "Use \"quit\" to exit\n");
+      gprint (GP_ERR, "Use \"quit\" to exit\n");
       Nbad ++;
       continue;
@@ -57,5 +57,5 @@
     status = command (line, &outline);
     if (outline == NULL) {
-      fprintf (stderr, "programming error: command_client returned NULL\n");
+      gprint (GP_ERR, "programming error: command_client returned NULL\n");
       exit (2);
     }
@@ -63,5 +63,5 @@
     /* command was not caught by client, send to server */
     if (*outline && !status ) {
-      fprintf (stderr, "sending message to %d: %s\n", server, outline);
+      gprint (GP_ERR, "sending message to %d: %s\n", server, outline);
       SendMessage (server, outline);
       add_history (outline);
@@ -69,5 +69,8 @@
 
       // XXX add this in and print to stdout
-      // status = ExpectMessage (server, 2.0, &message);
+      status = ExpectMessage (server, 2.0, &message);
+      gprint (GP_ERR, "got message: %d bytes\n", message.Nbuffer);
+      gwrite (message.buffer, 1, message.Nbuffer, GP_ERR);
+      gprint (GP_ERR, "end message\n");
     }
     free (outline);
Index: /trunk/Ohana/src/opihi/pantasks/controller.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/controller.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pantasks/controller.c	(revision 7917)
@@ -23,5 +23,5 @@
 
   if (argc < 2) {
-    fprintf (stderr, "USAGE: controller (command) ... \n");
+    gprint (GP_ERR, "USAGE: controller (command) ... \n");
     return (FALSE);
   }
@@ -29,5 +29,5 @@
   func = FindControllerCommand (argv[1]);
   if (func == NULL) {
-    fprintf (stderr, "invalid controller command\n");
+    gprint (GP_ERR, "invalid controller command\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/pantasks/controller_check.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/controller_check.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pantasks/controller_check.c	(revision 7917)
@@ -14,5 +14,5 @@
   status = CheckControllerStatus ();
   if (!status) {
-    fprintf (stderr, "controller is not running\n");
+    gprint (GP_LOG, "controller is not running\n");
     return (TRUE);
   }
@@ -22,7 +22,7 @@
   status = ControllerCommand (command, CONTROLLER_PROMPT, &buffer);
   if (VerboseMode()) {
-    fprintf (stderr, "controller command sent\n");  
-    fwrite (buffer.buffer, 1, buffer.Nbuffer, stderr);
-    fprintf (stderr, "\n Nbytes received: %d\n", buffer.Nbuffer);  
+    gprint (GP_LOG, "controller command sent\n");  
+    gwrite (buffer.buffer, 1, buffer.Nbuffer, GP_LOG);
+    gprint (GP_LOG, "\n Nbytes received: %d\n", buffer.Nbuffer);  
   }
   FreeIOBuffer (&buffer);
@@ -30,6 +30,6 @@
 
 usage:
-  fprintf (stderr, "USAGE: controller check job (jobID)\n");
-  fprintf (stderr, "USAGE: controller check host (hostID)\n");
+  gprint (GP_ERR, "USAGE: controller check job (jobID)\n");
+  gprint (GP_ERR, "USAGE: controller check host (hostID)\n");
   return (FALSE);
 }
Index: /trunk/Ohana/src/opihi/pantasks/controller_exit.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/controller_exit.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pantasks/controller_exit.c	(revision 7917)
@@ -4,5 +4,5 @@
 
   if (argc != 2) {
-    fprintf (stderr, "USAGE: controller exit TRUE\n");
+    gprint (GP_ERR, "USAGE: controller exit TRUE\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/pantasks/controller_host.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/controller_host.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pantasks/controller_host.c	(revision 7917)
@@ -8,5 +8,5 @@
 
   if (argc != 3) {
-    fprintf (stderr, "USAGE: controller host (command) (hostname)\n");
+    gprint (GP_ERR, "USAGE: controller host (command) (hostname)\n");
     return (FALSE);
   }
@@ -18,5 +18,5 @@
   InitIOBuffer (&buffer, 0x100);
   status = ControllerCommand (command, CONTROLLER_PROMPT, &buffer);
-  if (status) fwrite (buffer.buffer, 1, buffer.Nbuffer, stderr);
+  if (status) gwrite (buffer.buffer, 1, buffer.Nbuffer, GP_LOG);
   FreeIOBuffer (&buffer);
   return (TRUE);
Index: /trunk/Ohana/src/opihi/pantasks/controller_output.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/controller_output.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pantasks/controller_output.c	(revision 7917)
@@ -4,5 +4,5 @@
 
   if (argc != 1) {
-    fprintf (stderr, "USAGE: controller status\n");
+    gprint (GP_ERR, "USAGE: controller status\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/pantasks/controller_pulse.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/controller_pulse.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pantasks/controller_pulse.c	(revision 7917)
@@ -8,5 +8,5 @@
 
   if (argc != 2) {
-    fprintf (stderr, "USAGE: controller pulse (usec)\n");
+    gprint (GP_ERR, "USAGE: controller pulse (usec)\n");
     return (FALSE);
   }
@@ -18,5 +18,5 @@
   InitIOBuffer (&buffer, 0x100);
   status = ControllerCommand (command, CONTROLLER_PROMPT, &buffer);
-  if (status) fwrite (buffer.buffer, 1, buffer.Nbuffer, stderr);
+  if (status) gwrite (buffer.buffer, 1, buffer.Nbuffer, GP_LOG);
   FreeIOBuffer (&buffer);
   return (TRUE);
Index: /trunk/Ohana/src/opihi/pantasks/controller_status.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/controller_status.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pantasks/controller_status.c	(revision 7917)
@@ -8,5 +8,5 @@
 
   if (argc != 1) {
-    fprintf (stderr, "USAGE: controller status\n");
+    gprint (GP_ERR, "USAGE: controller status\n");
     return (FALSE);
   }
@@ -15,5 +15,5 @@
   status = CheckControllerStatus ();
   if (!status) {
-    fprintf (stderr, "controller is not running\n");
+    gprint (GP_LOG, "controller is not running\n");
     return (TRUE);
   }
@@ -23,7 +23,7 @@
   status = ControllerCommand (command, CONTROLLER_PROMPT, &buffer);
   if (status) {
-    fwrite (buffer.buffer, 1, buffer.Nbuffer, stderr);
+    gwrite (buffer.buffer, 1, buffer.Nbuffer, GP_LOG);
   } else {
-    fprintf (stderr, "controller is down\n");
+    gprint (GP_LOG, "controller is down\n");
   }
   FreeIOBuffer (&buffer);
Index: /trunk/Ohana/src/opihi/pantasks/delete.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/delete.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pantasks/delete.c	(revision 7917)
@@ -6,5 +6,5 @@
 
   if (argc < 2) {
-    fprintf (stderr, "USAGE: delete (JobID)\n");
+    gprint (GP_ERR, "USAGE: delete (JobID)\n");
     return (FALSE);
   }
@@ -12,5 +12,5 @@
   /* use a string interp to convert JobIDs to ints ? */
 
-  fprintf (stderr, "this function is not yet implemented\n");
+  gprint (GP_ERR, "this function is not yet implemented\n");
   return (TRUE);
 }
Index: /trunk/Ohana/src/opihi/pantasks/invalid.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/invalid.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pantasks/invalid.c	(revision 7917)
@@ -3,5 +3,5 @@
 int invalid (int argc, char **argv) {
 
-  fprintf (stderr, "%s is not valid for the pantasks client\n", argv[0]);
+  gprint (GP_ERR, "%s is not valid for the pantasks client\n", argv[0]);
   return (TRUE);
 
Index: /trunk/Ohana/src/opihi/pantasks/job.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/job.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pantasks/job.c	(revision 7917)
@@ -33,5 +33,5 @@
   if ((N = get_argument (argc, argv, "+host"))) {
     if (Mode == PCONTROL_JOB_WANTHOST) {
-      fprintf (stderr, "ERROR: -host and +host are incompatible\n");
+      gprint (GP_ERR, "ERROR: -host and +host are incompatible\n");
       FREE (Host);
       return (FALSE);
@@ -52,5 +52,5 @@
 
   if (argc < 2) {
-    fprintf (stderr, "USAGE: job [options] (arg0) (arg1) ... (argN)\n");
+    gprint (GP_ERR, "USAGE: job [options] (arg0) (arg1) ... (argN)\n");
     FREE (Host);
     return (FALSE);
@@ -64,5 +64,5 @@
 
   JobID = AddJob (Host, Mode, Timeout, targc, targv);
-  fprintf (stdout, "JobID: %d\n", JobID);
+  gprint (GP_LOG, "JobID: %d\n", JobID);
   return (TRUE);
 }
Index: /trunk/Ohana/src/opihi/pantasks/kill.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/kill.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pantasks/kill.c	(revision 7917)
@@ -7,5 +7,5 @@
 
   if (argc < 2) {
-    fprintf (stderr, "USAGE: kill (JobID)\n");
+    gprint (GP_ERR, "USAGE: kill (JobID)\n");
     return (FALSE);
   }
@@ -17,5 +17,5 @@
     if (!KillLocalJob (job)) {
       job[0].state = JOB_HUNG;
-      if (VerboseMode()) fprintf (stderr, "child process %d is hung, cannot kill\n", job[0].pid);
+      if (VerboseMode()) gprint (GP_LOG, "child process %d is hung, cannot kill\n", job[0].pid);
       return (FALSE);
     }
@@ -23,10 +23,10 @@
     if (!KillControllerJob (job)) {
       job[0].state = JOB_HUNG;
-      if (VerboseMode()) fprintf (stderr, "child process %d is hung, cannot kill\n", job[0].pid);
+      if (VerboseMode()) gprint (GP_LOG, "child process %d is hung, cannot kill\n", job[0].pid);
       return (FALSE);
     }
   }    
     
-  fprintf (stderr, "this function is not yet implemented\n");
+  gprint (GP_ERR, "this function is not yet implemented\n");
   return (TRUE);
 }
Index: /trunk/Ohana/src/opihi/pantasks/pantasks.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/pantasks.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pantasks/pantasks.c	(revision 7917)
@@ -38,6 +38,6 @@
 /* standard welcome message */
 void welcome () {
-  fprintf (stderr, "\n");
-  fprintf (stderr, "Welcome to %s - %s\n\n", opihi_name, opihi_description);
+  gprint (GP_LOG, "\n");
+  gprint (GP_LOG, "Welcome to %s - %s\n\n", opihi_name, opihi_description);
 }
 
@@ -51,5 +51,5 @@
 
 void gotsignal (int signum) {
-  fprintf (stderr, "got signal : %d\n", signum);
+  gprint (GP_ERR, "got signal : %d\n", signum);
   return;
 }
Index: /trunk/Ohana/src/opihi/pantasks/pantasks_client.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/pantasks_client.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pantasks/pantasks_client.c	(revision 7917)
@@ -38,6 +38,6 @@
 /* standard welcome message */
 void welcome () {
-  fprintf (stderr, "\n");
-  fprintf (stderr, "Welcome to %s - %s\n\n", opihi_name, opihi_description);
+  gprint (GP_LOG, "\n");
+  gprint (GP_LOG, "Welcome to %s - %s\n\n", opihi_name, opihi_description);
 }
 
@@ -54,5 +54,5 @@
 /* default signal handling */
 void gotsignal (int signum) {
-  fprintf (stderr, "got signal : %d\n", signum);
+  gprint (GP_ERR, "got signal : %d\n", signum);
   return;
 }
Index: /trunk/Ohana/src/opihi/pantasks/pantasks_server.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/pantasks_server.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pantasks/pantasks_server.c	(revision 7917)
@@ -30,4 +30,6 @@
   InitData ();
   InitPantasks ();
+  
+  InitPrint ();
 
   // signal (SIGPIPE, gotsignal);
@@ -77,5 +79,5 @@
 
 void gotsignal (int signum) {
-  fprintf (stderr, "got signal : %d\n", signum);
+  gprint (GP_ERR, "got signal : %d\n", signum);
   return;
 }
Index: /trunk/Ohana/src/opihi/pantasks/pulse.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/pulse.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pantasks/pulse.c	(revision 7917)
@@ -6,5 +6,5 @@
 
   if (argc != 2) {
-    fprintf (stderr, "USAGE: pulse (microseconds)\n");
+    gprint (GP_ERR, "USAGE: pulse (microseconds)\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/pantasks/run.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/run.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pantasks/run.c	(revision 7917)
@@ -4,5 +4,5 @@
 
   if (argc != 1) {
-    fprintf (stderr, "USAGE: run\n");
+    gprint (GP_ERR, "USAGE: run\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/pantasks/scheduler.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/scheduler.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pantasks/scheduler.c	(revision 7917)
@@ -52,5 +52,5 @@
     f = fopen (opihi_history, "a");
     if (f == NULL) /* no current history file here */
-      fprintf (stderr, "can't save history.\n");
+      gprint (GP_ERR, "can't save history.\n");
     else
       fclose (f);
@@ -65,6 +65,6 @@
 /* standard welcome message */
 void welcome () {
-  fprintf (stderr, "\n");
-  fprintf (stderr, "Welcome to %s - %s\n\n", opihi_name, opihi_description);
+  gprint (GP_LOG, "\n");
+  gprint (GP_LOG, "Welcome to %s - %s\n\n", opihi_name, opihi_description);
 }
 
Index: /trunk/Ohana/src/opihi/pantasks/status.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/status.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pantasks/status.c	(revision 7917)
@@ -3,14 +3,14 @@
 int status_sys (int argc, char **argv) {
 
-  fprintf (stderr, "\n");
+  gprint (GP_LOG, "\n");
   if (rl_event_hook == NULL) {
-    fprintf (stderr, " Scheduler is stopped\n");
+    gprint (GP_LOG, " Scheduler is stopped\n");
   } else {
-    fprintf (stderr, " Scheduler is running\n");
+    gprint (GP_LOG, " Scheduler is running\n");
   }
   if (CheckControllerStatus ()) {
-    fprintf (stderr, " Controller is running\n");
+    gprint (GP_LOG, " Controller is running\n");
   } else {
-    fprintf (stderr, " Controller is stopped\n");
+    gprint (GP_LOG, " Controller is stopped\n");
   }
   ListTasks (FALSE);
Index: /trunk/Ohana/src/opihi/pantasks/stop.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/stop.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pantasks/stop.c	(revision 7917)
@@ -4,5 +4,5 @@
 
   if (argc != 1) {
-    fprintf (stderr, "USAGE: stop\n");
+    gprint (GP_ERR, "USAGE: stop\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/pantasks/task.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/task.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pantasks/task.c	(revision 7917)
@@ -28,6 +28,6 @@
 
   if (argc != 2) {
-    fprintf (stderr, "USAGE: task <name>\n");
-    fprintf (stderr, "  (enter commands & task functions; end with the word 'END')\n");
+    gprint (GP_ERR, "USAGE: task <name>\n");
+    gprint (GP_ERR, "  (enter commands & task functions; end with the word 'END')\n");
     return (FALSE);
   }
@@ -58,9 +58,9 @@
 
     if ((ThisList == 0) && (input == (char *) NULL)) {
-      fprintf (stderr, "end task with 'END'\n");
+      gprint (GP_ERR, "end task with 'END'\n");
       continue;
     }
     if ((ThisList > 0) && (input == (char *) NULL)) {
-      fprintf (stderr, "missing 'END' in task definition\n");
+      gprint (GP_ERR, "missing 'END' in task definition\n");
       input = strcreate ("end");
     }
@@ -103,5 +103,5 @@
 
       case TASK_NONE:
-	fprintf (stderr, "unknown task command %s\n", input);
+	gprint (GP_ERR, "unknown task command %s\n", input);
 	break;
     }
Index: /trunk/Ohana/src/opihi/pantasks/task_command.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/task_command.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pantasks/task_command.c	(revision 7917)
@@ -7,6 +7,6 @@
 
   if (argc < 2) {
-    fprintf (stderr, "USAGE: command <command> <arg>. ..\n");
-    fprintf (stderr, "  (define command for this task)\n");
+    gprint (GP_ERR, "USAGE: command <command> <arg>. ..\n");
+    gprint (GP_ERR, "  (define command for this task)\n");
     return (FALSE);
   }
@@ -16,5 +16,5 @@
     task = GetActiveTask ();
     if (task == NULL) {
-      fprintf (stderr, "ERROR: not defining or running a task\n");
+      gprint (GP_ERR, "ERROR: not defining or running a task\n");
       return (FALSE);
     }
Index: /trunk/Ohana/src/opihi/pantasks/task_host.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/task_host.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pantasks/task_host.c	(revision 7917)
@@ -13,9 +13,9 @@
 
   if (argc != 2) {
-    fprintf (stderr, "USAGE: host <name> [-required]\n");
-    fprintf (stderr, "  define host machine for this task\n");
-    fprintf (stderr, "  -required flags indicates controller must use this host\n");
-    fprintf (stderr, "  value of 'local' for host indicates process not using controller\n");
-    fprintf (stderr, "  value of 'anyhost' for host indicates controller may assign at will\n");
+    gprint (GP_ERR, "USAGE: host <name> [-required]\n");
+    gprint (GP_ERR, "  define host machine for this task\n");
+    gprint (GP_ERR, "  -required flags indicates controller must use this host\n");
+    gprint (GP_ERR, "  value of 'local' for host indicates process not using controller\n");
+    gprint (GP_ERR, "  value of 'anyhost' for host indicates controller may assign at will\n");
     return (FALSE);
   }
@@ -25,5 +25,5 @@
     task = GetActiveTask ();
     if (task == NULL) {
-      fprintf (stderr, "ERROR: not defining or running a task\n");
+      gprint (GP_ERR, "ERROR: not defining or running a task\n");
       return (FALSE);
     }
Index: /trunk/Ohana/src/opihi/pantasks/task_macros.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/task_macros.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pantasks/task_macros.c	(revision 7917)
@@ -11,12 +11,12 @@
 
   if (!strcmp (argv[0], "task.exec") && (argc != 1)) {
-    fprintf (stderr, "USAGE: task.exec\n");
-    fprintf (stderr, "  (define pre-exec macro for this task)\n");
+    gprint (GP_ERR, "USAGE: task.exec\n");
+    gprint (GP_ERR, "  (define pre-exec macro for this task)\n");
     return (FALSE);
   }
 
   if (!strcmp (argv[0], "task.exit") && (argc != 2)) {
-    fprintf (stderr, "USAGE: task.exit (state)\n");
-    fprintf (stderr, "  (define exit state macro for this task)\n");
+    gprint (GP_ERR, "USAGE: task.exit (state)\n");
+    gprint (GP_ERR, "  (define exit state macro for this task)\n");
     return (FALSE);
   }
@@ -24,5 +24,5 @@
   task = GetNewTask ();
   if (task == NULL) {
-    fprintf (stderr, "ERROR: not defining or running a task\n");
+    gprint (GP_ERR, "ERROR: not defining or running a task\n");
     return (FALSE);
   }
@@ -115,9 +115,9 @@
 
     if ((ThisList == 0) && (input == (char *) NULL)) {
-      fprintf (stderr, "end macro with 'END'\n");
+      gprint (GP_ERR, "end macro with 'END'\n");
       continue;
     }
     if ((ThisList > 0) && (input == (char *) NULL)) {
-      fprintf (stderr, "missing 'END' in macro definition\n");
+      gprint (GP_ERR, "missing 'END' in macro definition\n");
       input = strcreate ("end");
     }
Index: /trunk/Ohana/src/opihi/pantasks/task_nmax.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/task_nmax.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pantasks/task_nmax.c	(revision 7917)
@@ -9,5 +9,5 @@
   task = GetNewTask ();
   if (task == NULL) {
-    fprintf (stderr, "ERROR: not defining or running a task\n");
+    gprint (GP_ERR, "ERROR: not defining or running a task\n");
     return (FALSE);
   }
@@ -17,5 +17,5 @@
 
 usage:
-  fprintf (stderr, "USAGE: nmax N\n");
+  gprint (GP_ERR, "USAGE: nmax N\n");
   return (FALSE);
 }
Index: /trunk/Ohana/src/opihi/pantasks/task_periods.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/task_periods.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pantasks/task_periods.c	(revision 7917)
@@ -35,6 +35,6 @@
 
   if (argc != 1) {
-    fprintf (stderr, "USAGE: periods [-poll value] [-exec value] [-timeout value]\n");
-    fprintf (stderr, "  define time periods for this task\n");
+    gprint (GP_ERR, "USAGE: periods [-poll value] [-exec value] [-timeout value]\n");
+    gprint (GP_ERR, "  define time periods for this task\n");
     return (FALSE);
   }
@@ -44,5 +44,5 @@
     task = GetActiveTask ();
     if (task == NULL) {
-      fprintf (stderr, "ERROR: not defining or running a task\n");
+      gprint (GP_ERR, "ERROR: not defining or running a task\n");
       return (FALSE);
     }
Index: /trunk/Ohana/src/opihi/pantasks/task_trange.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/task_trange.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pantasks/task_trange.c	(revision 7917)
@@ -25,5 +25,5 @@
   task = GetNewTask ();
   if (task == NULL) {
-    fprintf (stderr, "ERROR: not defining or running a task\n");
+    gprint (GP_ERR, "ERROR: not defining or running a task\n");
     return (FALSE);
   }
@@ -61,5 +61,5 @@
 
 usage:
-  fprintf (stderr, "USAGE: trange start end\n");
+  gprint (GP_ERR, "USAGE: trange start end\n");
   return (FALSE);
 }
Index: /trunk/Ohana/src/opihi/pantasks/verbose.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/verbose.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pantasks/verbose.c	(revision 7917)
@@ -7,7 +7,7 @@
   if (argc == 1) {
     if (VERBOSE) {
-      fprintf (stderr, "verbose mode ON\n");
+      gprint (GP_LOG, "verbose mode ON\n");
     } else {
-      fprintf (stderr, "verbose mode OFF\n");
+      gprint (GP_LOG, "verbose mode OFF\n");
     }
     return (TRUE);
@@ -29,5 +29,5 @@
   }
 
-  fprintf (stderr, "USAGE: verbose (on/off/toggle)\n");
+  gprint (GP_ERR, "USAGE: verbose (on/off/toggle)\n");
   return (FALSE);
 }
Index: /trunk/Ohana/src/opihi/pantasks/version.c
===================================================================
--- /trunk/Ohana/src/opihi/pantasks/version.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pantasks/version.c	(revision 7917)
@@ -4,11 +4,11 @@
 int version (int argc, char **argv) {
 
-  fprintf (stderr, "%s\n", name);
+  gprint (GP_LOG, "%s\n", name);
 
-  fprintf (stderr, "%s\n", opihi_version());
-  fprintf (stderr, "%s\n", ohana_version());
-  fprintf (stderr, "%s\n", gfits_version());
+  gprint (GP_LOG, "%s\n", opihi_version());
+  gprint (GP_LOG, "%s\n", ohana_version());
+  gprint (GP_LOG, "%s\n", gfits_version());
 
-  fprintf (stderr, "compiled on %s %s\n", __DATE__, __TIME__);
+  gprint (GP_LOG, "compiled on %s %s\n", __DATE__, __TIME__);
   return (TRUE);
 }
Index: /trunk/Ohana/src/opihi/pclient/ChildOps.c
===================================================================
--- /trunk/Ohana/src/opihi/pclient/ChildOps.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pclient/ChildOps.c	(revision 7917)
@@ -43,5 +43,5 @@
     Nbad ++;
     if (Nbad > 10) {
-      fprintf (stderr, "runaway!\n");
+      gprint (GP_ERR, "runaway!\n");
       exit (2);
     }
@@ -56,5 +56,5 @@
   switch (Nread) {
     case -2:  /* error in read (programming error?  system level error?) */
-      fprintf (stderr, "serious IO error\n");
+      gprint (GP_ERR, "serious IO error\n");
       exit (2);
     case -1:  /* no data in pipe */
@@ -71,5 +71,5 @@
   switch (Nread) {
     case -2:  /* error in read (programming error?  system level error?) */
-      fprintf (stderr, "serious IO error\n");
+      gprint (GP_ERR, "serious IO error\n");
       exit (2);
     case -1:  /* no data in pipe */
@@ -96,16 +96,16 @@
       switch (errno) {
 	case ECHILD:
-	  fprintf (stderr, "unknown PID, not a child proc\n");
-	  fprintf (stderr, "did process already exit?  programming error?\n");
+	  gprint (GP_ERR, "unknown PID, not a child proc\n");
+	  gprint (GP_ERR, "did process already exit?  programming error?\n");
 	  ChildStatus = PCLIENT_NONE;
 	  break;
 	case EINVAL:
-	  fprintf (stderr, "error EINVAL (waitpid): programming error\n");
+	  gprint (GP_ERR, "error EINVAL (waitpid): programming error\n");
 	  exit (1);
 	case EINTR:
-	  fprintf (stderr, "error EINTR (waitpid): programming error\n");
+	  gprint (GP_ERR, "error EINTR (waitpid): programming error\n");
 	  exit (1);
 	default:
-	  fprintf (stderr, "unknown error for waitpid (%d): programming error\n", errno);
+	  gprint (GP_ERR, "unknown error for waitpid (%d): programming error\n", errno);
 	  exit (1);
       }
@@ -118,5 +118,5 @@
     default:
       if (result != ChildPID) {
-	fprintf (stderr, "waitpid error: mis-matched PID (%d vs %d).  programming error\n", result, ChildPID);
+	gprint (GP_ERR, "waitpid error: mis-matched PID (%d vs %d).  programming error\n", result, ChildPID);
 	exit (1);
       }
@@ -131,5 +131,5 @@
       }
       if (WIFSTOPPED(waitstatus)) {
-	fprintf (stderr, "waitpid returns 'stopped': programming error\n");
+	gprint (GP_ERR, "waitpid returns 'stopped': programming error\n");
 	exit (1);
       }
Index: /trunk/Ohana/src/opihi/pclient/job.c
===================================================================
--- /trunk/Ohana/src/opihi/pclient/job.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pclient/job.c	(revision 7917)
@@ -7,12 +7,12 @@
 
   if (argc < 2) {
-    fprintf (stderr, "USAGE: job (arg0) (arg1) ... (argN)\n");
-    fprintf (GetOutfile(), "STATUS %d\n", -2);
+    gprint (GP_ERR, "USAGE: job (arg0) (arg1) ... (argN)\n");
+    gprint (GP_LOG, "STATUS %d\n", -2);
     return (FALSE);
   }
   
   if (ChildStatus != PCLIENT_NONE) {
-    fprintf (stderr, "need to clear existing child\n");
-    fprintf (GetOutfile(), "STATUS %d\n", -3);
+    gprint (GP_ERR, "need to clear existing child\n");
+    gprint (GP_LOG, "STATUS %d\n", -3);
     return (FALSE);
   }
@@ -31,5 +31,5 @@
   pid = fork ();
   if (!pid) { /* must be child process */
-    /* fprintf (stderr, "starting child process %s...\n", targv[0]); */
+    /* gprint (GP_ERR, "starting child process %s...\n", targv[0]); */
 
     /* close the other ends of the pipes */
@@ -50,5 +50,5 @@
     /* exec job */ 
     status = execvp (targv[0], targv); 
-    fprintf (stderr, "error starting child process: %d\n", status);
+    gprint (GP_ERR, "error starting child process: %d\n", status);
     exit (1);
   }
@@ -73,5 +73,5 @@
   ChildPID = pid;
 
-  fprintf (GetOutfile(), "STATUS %d\n", ChildPID);
+  gprint (GP_LOG, "STATUS %d\n", ChildPID);
   return (TRUE);
 
@@ -85,5 +85,5 @@
   if (child_stderr_fd[1] != 0) close (child_stderr_fd[1]);
 
-  fprintf (GetOutfile(), "STATUS %d\n", -1);
+  gprint (GP_LOG, "STATUS %d\n", -1);
   return (FALSE);
 }
Index: /trunk/Ohana/src/opihi/pclient/pclient.c
===================================================================
--- /trunk/Ohana/src/opihi/pclient/pclient.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pclient/pclient.c	(revision 7917)
@@ -39,6 +39,6 @@
 /* standard welcome message */
 void welcome () {
-  fprintf (stderr, "\n");
-  fprintf (stderr, "Welcome to %s - %s\n\n", opihi_name, opihi_description);
+  gprint (GP_ERR, "\n");
+  gprint (GP_ERR, "Welcome to %s - %s\n\n", opihi_name, opihi_description);
 }
 
@@ -49,5 +49,5 @@
 
 void gotsignal (int signum) {
-  fprintf (stderr, "got signal : %d\n", signum);
+  gprint (GP_ERR, "got signal : %d\n", signum);
   return;
 }
Index: /trunk/Ohana/src/opihi/pclient/reset.c
===================================================================
--- /trunk/Ohana/src/opihi/pclient/reset.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pclient/reset.c	(revision 7917)
@@ -7,12 +7,12 @@
 
   if (argc != 1) {
-    fprintf (stderr, "USAGE: reset\n");
-    fprintf (GetOutfile(), "STATUS -1\n");
+    gprint (GP_ERR, "USAGE: reset\n");
+    gprint (GP_LOG, "STATUS -1\n");
     return (FALSE);
   }
   
   if (ChildStatus == PCLIENT_NONE) {
-    fprintf (stderr, "no child process, cannot reset\n");
-    fprintf (GetOutfile(), "STATUS 2\n");
+    gprint (GP_ERR, "no child process, cannot reset\n");
+    gprint (GP_LOG, "STATUS 2\n");
     return (TRUE);
   }
@@ -42,6 +42,6 @@
 
     /* total failure, don't reset */
-    fprintf (stderr, "child process %d is hung, cannot reset\n", ChildPID);
-    fprintf (GetOutfile(), "STATUS 0\n");
+    gprint (GP_ERR, "child process %d is hung, cannot reset\n", ChildPID);
+    gprint (GP_LOG, "STATUS 0\n");
     return (FALSE);
   }
@@ -62,5 +62,5 @@
   ChildExitStatus = 0;
 
-  fprintf (GetOutfile(), "STATUS 1\n");
+  gprint (GP_LOG, "STATUS 1\n");
   return (TRUE);
 }
Index: /trunk/Ohana/src/opihi/pclient/status.c
===================================================================
--- /trunk/Ohana/src/opihi/pclient/status.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pclient/status.c	(revision 7917)
@@ -6,5 +6,5 @@
 
   if (argc != 1) {
-    fprintf (stderr, "USAGE: status\n");
+    gprint (GP_ERR, "USAGE: status\n");
     return (FALSE);
   }
@@ -15,8 +15,8 @@
   if (ChildStatus == PCLIENT_CRASH) strcpy (status_string, "CRASH");
 
-  fprintf (GetOutfile(), "STATUS %s\n", status_string);
-  fprintf (GetOutfile(), "EXITST %d\n", ChildExitStatus);
-  fprintf (GetOutfile(), "STDOUT %d\n", child_stdout.Nbuffer);
-  fprintf (GetOutfile(), "STDERR %d\n", child_stderr.Nbuffer);
+  gprint (GP_LOG, "STATUS %s\n", status_string);
+  gprint (GP_LOG, "EXITST %d\n", ChildExitStatus);
+  gprint (GP_LOG, "STDOUT %d\n", child_stdout.Nbuffer);
+  gprint (GP_LOG, "STDERR %d\n", child_stderr.Nbuffer);
 
   set_str_variable ("JOBSTATUS", status_string);
Index: /trunk/Ohana/src/opihi/pclient/stdout.c
===================================================================
--- /trunk/Ohana/src/opihi/pclient/stdout.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pclient/stdout.c	(revision 7917)
@@ -4,11 +4,11 @@
 
   if (argc != 1) {
-    fprintf (stderr, "USAGE: stdout\n");
-    fprintf (stdout, "STATUS %d\n", -1);
+    gprint (GP_ERR, "USAGE: stdout\n");
+    gprint (GP_LOG, "STATUS %d\n", -1);
     return (FALSE);
   }
   
   fwrite (child_stdout.buffer, 1, child_stdout.Nbuffer, stdout);
-  fprintf (stdout, "STATUS %d\n", 0);
+  gprint (GP_LOG, "STATUS %d\n", 0);
   return (TRUE);
 
@@ -18,11 +18,11 @@
 
   if (argc != 1) {
-    fprintf (stderr, "USAGE: stderr\n");
-    fprintf (stdout, "STATUS %d\n", -1);
+    gprint (GP_ERR, "USAGE: stderr\n");
+    gprint (GP_LOG, "STATUS %d\n", -1);
     return (FALSE);
   }
   
   fwrite (child_stderr.buffer, 1, child_stderr.Nbuffer, stdout);
-  fprintf (stdout, "STATUS %d\n", 0);
+  gprint (GP_LOG, "STATUS %d\n", 0);
   return (TRUE);
 
Index: /trunk/Ohana/src/opihi/pclient/version.c
===================================================================
--- /trunk/Ohana/src/opihi/pclient/version.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pclient/version.c	(revision 7917)
@@ -4,11 +4,11 @@
 int version (int argc, char **argv) {
 
-  fprintf (stderr, "%s\n", name);
+  gprint (GP_ERR, "%s\n", name);
 
-  fprintf (stderr, "%s\n", opihi_version());
-  fprintf (stderr, "%s\n", ohana_version());
-  fprintf (stderr, "%s\n", gfits_version());
+  gprint (GP_ERR, "%s\n", opihi_version());
+  gprint (GP_ERR, "%s\n", ohana_version());
+  gprint (GP_ERR, "%s\n", gfits_version());
 
-  fprintf (stderr, "compiled on %s %s\n", __DATE__, __TIME__);
+  gprint (GP_ERR, "compiled on %s %s\n", __DATE__, __TIME__);
   return (TRUE);
 }
Index: /trunk/Ohana/src/opihi/pcontrol/CheckBusyJob.c
===================================================================
--- /trunk/Ohana/src/opihi/pcontrol/CheckBusyJob.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pcontrol/CheckBusyJob.c	(revision 7917)
@@ -34,9 +34,9 @@
 
     case PCLIENT_GOOD:
-      if (VerboseMode()) fprintf (stderr, "message received (CheckBusyJob)\n");
+      if (VerboseMode()) gprint (GP_ERR, "message received (CheckBusyJob)\n");
       break;
 
     default:
-      fprintf (stderr, "programming error: unknown status for pclient command\n");  
+      gprint (GP_ERR, "programming error: unknown status for pclient command\n");  
       exit (1);
   }
@@ -45,10 +45,10 @@
   p = memstr (buffer.buffer, "STATUS", buffer.Nbuffer);
   if (p == NULL) {
-    fprintf (stderr, "programming error: missing STATUS in pclient message\n");
+    gprint (GP_ERR, "programming error: missing STATUS in pclient message\n");
     exit (1);
   }
   sscanf (p, "%*s %s", string);
   if (!strcmp(string, "NONE")) {
-    fprintf (stderr, "programming error: no current job\n");
+    gprint (GP_ERR, "programming error: no current job\n");
     exit (1);
   }
@@ -65,5 +65,5 @@
   if (!strcmp(string, "CRASH")) outstate = PCONTROL_JOB_CRASH;
   if (outstate == PCONTROL_JOB_BUSY) {
-    fprintf (stderr, "programming error : should not reach here (CheckJob)\n");
+    gprint (GP_ERR, "programming error : should not reach here (CheckJob)\n");
     exit (1);
   }
Index: /trunk/Ohana/src/opihi/pcontrol/CheckDoneHost.c
===================================================================
--- /trunk/Ohana/src/opihi/pcontrol/CheckDoneHost.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pcontrol/CheckDoneHost.c	(revision 7917)
@@ -14,5 +14,5 @@
   switch (status) {
     case PCLIENT_DOWN:
-      if (VerboseMode()) fprintf (stderr, "host %s is down\n", host[0].hostname);
+      if (VerboseMode()) gprint (GP_ERR, "host %s is down\n", host[0].hostname);
       /* DONE host does not have an incomplete job */
       HarvestHost (host[0].pid);
@@ -24,14 +24,14 @@
     case PCLIENT_HUNG:
       PutHost (host, PCONTROL_HOST_DONE, STACK_BOTTOM);
-      if (VerboseMode()) fprintf (stderr, "host %s is not responding\n", host[0].hostname);
+      if (VerboseMode()) gprint (GP_ERR, "host %s is not responding\n", host[0].hostname);
       FreeIOBuffer (&buffer);
       return (FALSE);
 
     case PCLIENT_GOOD:
-      if (VerboseMode()) fprintf (stderr, "message received (CheckDoneHost)\n");  
+      if (VerboseMode()) gprint (GP_ERR, "message received (CheckDoneHost)\n");  
       break;
 
     default:
-      if (VerboseMode()) fprintf (stderr, "unknown status for pclient command: programming error\n");  
+      if (VerboseMode()) gprint (GP_ERR, "unknown status for pclient command: programming error\n");  
       exit (1);
   }
@@ -40,5 +40,5 @@
   p = memstr (buffer.buffer, "STATUS", buffer.Nbuffer);
   if (p == NULL) {
-    fprintf (stderr, "programming error: missing STATUS in pclient message (CheckDoneHost)\n");
+    gprint (GP_ERR, "programming error: missing STATUS in pclient message (CheckDoneHost)\n");
     exit (1);
   }
@@ -46,9 +46,9 @@
   switch (status) {
     case -1:
-      fprintf (stderr, "programming error: reset syntax error\n");
+      gprint (GP_ERR, "programming error: reset syntax error\n");
       exit (1);
       
     case 0:
-      if (VerboseMode()) fprintf (stderr, "reset failed\n");
+      if (VerboseMode()) gprint (GP_ERR, "reset failed\n");
       PutHost (host, PCONTROL_HOST_DONE, STACK_BOTTOM);
       FreeIOBuffer (&buffer);
@@ -57,5 +57,5 @@
     case 1:
     case 2:
-      if (VerboseMode()) fprintf (stderr, "successful reset\n");
+      if (VerboseMode()) gprint (GP_ERR, "successful reset\n");
       PutHost (host, PCONTROL_HOST_IDLE, STACK_BOTTOM);
       FreeIOBuffer (&buffer);
@@ -63,8 +63,8 @@
 
     default:
-      fprintf (stderr, "programming error: should not reach here (CheckDoneHost)\n");
+      gprint (GP_ERR, "programming error: should not reach here (CheckDoneHost)\n");
       exit (1);
   }
-  fprintf (stderr, "programming error: should not reach here either (CheckDoneHost)\n");
+  gprint (GP_ERR, "programming error: should not reach here either (CheckDoneHost)\n");
   exit (1);
 }
Index: /trunk/Ohana/src/opihi/pcontrol/CheckHost.c
===================================================================
--- /trunk/Ohana/src/opihi/pcontrol/CheckHost.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pcontrol/CheckHost.c	(revision 7917)
@@ -12,5 +12,5 @@
   switch (status) {
     case 0:
-      if (VerboseMode()) fprintf (stderr, "host %s is down\n", host[0].hostname);
+      if (VerboseMode()) gprint (GP_ERR, "host %s is down\n", host[0].hostname);
       /* if host has a job, job is dead, return to Pending */
       job = (Job *) host[0].job;
@@ -25,5 +25,5 @@
       
     case -1:
-      if (VerboseMode()) fprintf (stderr, "host %s is not responding\n", host[0].hostname);
+      if (VerboseMode()) gprint (GP_ERR, "host %s is not responding\n", host[0].hostname);
       /*** do we mark this in some way (HUNG) ? ***/
       PutHost (host, host[0].stack, STACK_BOTTOM);
@@ -36,5 +36,5 @@
       return (TRUE);
   }
-  fprintf (stderr, "programming error: should not reach here (Check Host)\n"); 
+  gprint (GP_ERR, "programming error: should not reach here (Check Host)\n"); 
   return (FALSE);
 }
Index: /trunk/Ohana/src/opihi/pcontrol/CheckIdleHost.c
===================================================================
--- /trunk/Ohana/src/opihi/pcontrol/CheckIdleHost.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pcontrol/CheckIdleHost.c	(revision 7917)
@@ -14,5 +14,5 @@
     if (job[0].mode != PCONTROL_JOB_NEEDHOST) continue;
     if (job[0].hostname == NULL) {
-      fprintf (stderr, "programming error: NEEDHOST hostname missing\n");
+      gprint (GP_ERR, "programming error: NEEDHOST hostname missing\n");
       exit (2);
     }
@@ -29,5 +29,5 @@
     if (job[0].mode != PCONTROL_JOB_WANTHOST) continue;
     if (job[0].hostname == NULL) {
-      fprintf (stderr, "programming error: WANTHOST hostname missing\n");
+      gprint (GP_ERR, "programming error: WANTHOST hostname missing\n");
       exit (2);
     }
Index: /trunk/Ohana/src/opihi/pcontrol/CheckSystem.c
===================================================================
--- /trunk/Ohana/src/opihi/pcontrol/CheckSystem.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pcontrol/CheckSystem.c	(revision 7917)
@@ -37,5 +37,5 @@
     stack = GetHostStack (PCONTROL_HOST_BUSY);
     Nbusy = stack[0].Nobject;
-    fprintf (stderr, "busy, idle, down: %2d %2d %2d\n", Nbusy, Nidle, Ndown);
+    gprint (GP_ERR, "busy, idle, down: %2d %2d %2d\n", Nbusy, Nidle, Ndown);
   }
 
@@ -63,5 +63,5 @@
     dtime = DTIME (stop, start);
   }
-  if (0 && (Nobject > 0)) fprintf (stderr, "checked %d of %d jobs\n", i, Nobject);
+  if (0 && (Nobject > 0)) gprint (GP_ERR, "checked %d of %d jobs\n", i, Nobject);
   return (TRUE);
 }
@@ -87,5 +87,5 @@
     dtime = DTIME (stop, start);
   }
-  if (0 && (Nobject > 0)) fprintf (stderr, "checked %d of %d jobs\n", i, Nobject);
+  if (0 && (Nobject > 0)) gprint (GP_ERR, "checked %d of %d jobs\n", i, Nobject);
   return (TRUE);
 }
@@ -111,5 +111,5 @@
     dtime = DTIME (stop, start);
   }
-  if (0) fprintf (stderr, "checked %d hosts\n", i);
+  if (0) gprint (GP_ERR, "checked %d hosts\n", i);
   return (TRUE);
 }
@@ -140,5 +140,5 @@
     dtime = DTIME (stop, start);
   }
-  if (0) fprintf (stderr, "checked %d hosts\n", i);
+  if (0) gprint (GP_ERR, "checked %d hosts\n", i);
   return (TRUE);
 }
@@ -168,5 +168,5 @@
     dtime = DTIME (stop, start);
   }
-  if (0) fprintf (stderr, "checked %d hosts\n", i);
+  if (0) gprint (GP_ERR, "checked %d hosts\n", i);
   return (TRUE);
 }
@@ -193,5 +193,5 @@
     dtime = DTIME (stop, start);
   }
-  if (0) fprintf (stderr, "checked %d idle hosts\n", i);
+  if (0) gprint (GP_ERR, "checked %d idle hosts\n", i);
 
   stack = GetHostStack (PCONTROL_HOST_BUSY);
@@ -205,5 +205,5 @@
     dtime = DTIME (stop, start);
   }
-  if (0) fprintf (stderr, "checked %d busy hosts\n", i);
+  if (0) gprint (GP_ERR, "checked %d busy hosts\n", i);
   return (TRUE);
 }
@@ -213,5 +213,5 @@
   gettimeofday (&stop, (void *) NULL);
   dtime = DTIME (stop, start);
-  if (VerboseMode()) fprintf (stderr, "check 4: %f seconds\n", dtime);
+  if (VerboseMode()) gprint (GP_ERR, "check 4: %f seconds\n", dtime);
 
   gettimeofday (&start, (void *) NULL);
Index: /trunk/Ohana/src/opihi/pcontrol/GetJobOutput.c
===================================================================
--- /trunk/Ohana/src/opihi/pcontrol/GetJobOutput.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pcontrol/GetJobOutput.c	(revision 7917)
@@ -40,13 +40,13 @@
   switch (status) {
     case -1:
-      if (VerboseMode()) fprintf (stderr, "host %s is not responding\n", host[0].hostname);
+      if (VerboseMode()) gprint (GP_ERR, "host %s is not responding\n", host[0].hostname);
       return (FALSE);
 
     case 0:
-      if (VerboseMode()) fprintf (stderr, "host %s is down\n", host[0].hostname);
+      if (VerboseMode()) gprint (GP_ERR, "host %s is down\n", host[0].hostname);
       return (FALSE);
 
     default:
-      if (VerboseMode()) fprintf (stderr, "message received (GetJobOutput : %s)\n", cmd);  
+      if (VerboseMode()) gprint (GP_ERR, "message received (GetJobOutput : %s)\n", cmd);  
       /* drop extra bytes from pclient (not pclient:job) */
       buffer[0].Nbuffer = Nstart + Nbytes;
@@ -57,5 +57,5 @@
   }
 
-  fprintf (stderr, "programming error: should not reach here (GetJobOutput)\n");
+  gprint (GP_ERR, "programming error: should not reach here (GetJobOutput)\n");
   exit (1);
 }
Index: /trunk/Ohana/src/opihi/pcontrol/HostOps.c
===================================================================
--- /trunk/Ohana/src/opihi/pcontrol/HostOps.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pcontrol/HostOps.c	(revision 7917)
@@ -28,8 +28,8 @@
       return (HostPool_Off);
     default:
-      fprintf (stderr, "error: unknown host stack : programming error\n");
+      gprint (GP_ERR, "error: unknown host stack : programming error\n");
       exit (1);
   }
-  fprintf (stderr, "error: unknown host stack : programming error\n");
+  gprint (GP_ERR, "error: unknown host stack : programming error\n");
   exit (1);
 }
@@ -151,5 +151,5 @@
   host = GetHost (StackID, N);
   if (host == NULL) {
-    fprintf (stderr, "programming error! host missing from stack\n");
+    gprint (GP_ERR, "programming error! host missing from stack\n");
     exit (1);
   }
Index: /trunk/Ohana/src/opihi/pcontrol/JobID.c
===================================================================
--- /trunk/Ohana/src/opihi/pcontrol/JobID.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pcontrol/JobID.c	(revision 7917)
@@ -28,5 +28,5 @@
 }
 
-void PrintID (FILE *f, IDtype ID) {
+void PrintID (gpDest dest, IDtype ID) {
 
   unsigned short int word0, word1, word2, word3;
@@ -37,5 +37,5 @@
   word3 = 0xffff & (ID >> 48);
 
-  fprintf (f, "%x.%x.%x.%x", word3, word2, word1, word0);
+  gprint (dest, "%x.%x.%x.%x", word3, word2, word1, word0);
 }
 
Index: /trunk/Ohana/src/opihi/pcontrol/JobOps.c
===================================================================
--- /trunk/Ohana/src/opihi/pcontrol/JobOps.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pcontrol/JobOps.c	(revision 7917)
@@ -28,8 +28,8 @@
       return (JobPool_Crash);
     default:
-      fprintf (stderr, "error: unknown job stack : programming error\n");
+      gprint (GP_ERR, "error: unknown job stack : programming error\n");
       exit (1);
   }
-  fprintf (stderr, "error: unknown job stack : programming error\n");
+  gprint (GP_ERR, "error: unknown job stack : programming error\n");
   exit (1);
 }
@@ -151,5 +151,5 @@
   job = GetJob (StackID, N);
   if (job == NULL) {
-    fprintf (stderr, "programming error! job missing from stack\n");
+    gprint (GP_ERR, "programming error! job missing from stack\n");
     exit (1);
   }
@@ -176,5 +176,5 @@
 
   PutJob (job, PCONTROL_JOB_PENDING, STACK_BOTTOM);
-  fprintf (stderr, "added new job\n");
+  gprint (GP_ERR, "added new job\n");
   return (job[0].JobID);
 }
@@ -203,5 +203,5 @@
   host = (Host *) job[0].host;
   if (host == NULL) {
-    fprintf (stderr, "programming error: job has no host\n");
+    gprint (GP_ERR, "programming error: job has no host\n");
     exit (2);
   }
@@ -213,5 +213,5 @@
   /* remove host from correct stack */
   if (PullHost (host[0].HostID, host[0].stack) == NULL) {
-    fprintf (stderr, "programming error: host is not found in current stack\n");
+    gprint (GP_ERR, "programming error: host is not found in current stack\n");
     exit (2);
   }
@@ -226,5 +226,5 @@
   /* remove job from correct stack */
   if (PullJob (job[0].JobID, job[0].stack) == NULL) {
-    fprintf (stderr, "programming error: job is not found in current stack\n");
+    gprint (GP_ERR, "programming error: job is not found in current stack\n");
     exit (2);
   }
Index: /trunk/Ohana/src/opihi/pcontrol/KillJob.c
===================================================================
--- /trunk/Ohana/src/opihi/pcontrol/KillJob.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pcontrol/KillJob.c	(revision 7917)
@@ -32,9 +32,9 @@
 
     case PCLIENT_GOOD:
-      fprintf (stderr, "message received (KillJob)\n");  
+      gprint (GP_ERR, "message received (KillJob)\n");  
       break;
 
     default:
-      fprintf (stderr, "unknown status for pclient command: programming error\n");  
+      gprint (GP_ERR, "unknown status for pclient command: programming error\n");  
       exit (1);
   }
@@ -43,19 +43,19 @@
   p = memstr (buffer.buffer, "STATUS", buffer.Nbuffer);
   if (p == NULL) {
-    fprintf (stderr, "missing STATUS in pclient message : programming error\n");
+    gprint (GP_ERR, "missing STATUS in pclient message : programming error\n");
     exit (1);
   }
-  fprintf (stderr, "client message: %s\n", buffer.buffer);
+  gprint (GP_ERR, "client message: %s\n", buffer.buffer);
   sscanf (p, "%*s %d", &status);
   FreeIOBuffer (&buffer);
-  fprintf (stderr, "client status: %d\n", status);
+  gprint (GP_ERR, "client status: %d\n", status);
 
   switch (status) {
     case -1:
-      fprintf (stderr, "programming error (syntax error to pclient)\n");
+      gprint (GP_ERR, "programming error (syntax error to pclient)\n");
       return (FALSE);
       break;
     case 0:
-      fprintf (stderr, "failure to kill child process\n");
+      gprint (GP_ERR, "failure to kill child process\n");
       PutJob (job, PCONTROL_JOB_BUSY, STACK_BOTTOM);
       return (FALSE);
@@ -66,9 +66,9 @@
       return (TRUE);
     case 2:
-      fprintf (stderr, "programming error (client has no job)\n");
+      gprint (GP_ERR, "programming error (client has no job)\n");
       return (FALSE);
   }
 
-  fprintf (stderr, "programming error : should not reach here (CheckJob)\n");
+  gprint (GP_ERR, "programming error : should not reach here (CheckJob)\n");
   exit (1);
 }
Index: /trunk/Ohana/src/opihi/pcontrol/ResetJob.c
===================================================================
--- /trunk/Ohana/src/opihi/pcontrol/ResetJob.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pcontrol/ResetJob.c	(revision 7917)
@@ -21,5 +21,5 @@
     case PCLIENT_DOWN:
       /*** different behavior for ANYHOST, WANTHOST, NEEDHOST? ***/
-      fprintf (stderr, "host %s is down\n", host[0].hostname);
+      gprint (GP_ERR, "host %s is down\n", host[0].hostname);
       HarvestHost (host[0].pid);
       PutHost (host, PCONTROL_HOST_DOWN, STACK_BOTTOM);
@@ -29,19 +29,19 @@
     case PCLIENT_HUNG:
       /*** should we consider a HUNG host DOWN? ***/
-      fprintf (stderr, "host %s is not responding\n", host[0].hostname);
+      gprint (GP_ERR, "host %s is not responding\n", host[0].hostname);
       FreeIOBuffer (&buffer);
       return (FALSE);
 
     case PCLIENT_GOOD:
-      fprintf (stderr, "message received (ResetJob)\n");  
+      gprint (GP_ERR, "message received (ResetJob)\n");  
       FreeIOBuffer (&buffer);
       return (TRUE);
 
     default:
-      fprintf (stderr, "unknown status for pclient command: programming error\n");  
+      gprint (GP_ERR, "unknown status for pclient command: programming error\n");  
       exit (1);
   }
 
-  fprintf (stderr, "programming error in GetJobOutput (should not reach here)\n");
+  gprint (GP_ERR, "programming error in GetJobOutput (should not reach here)\n");
   exit (1);
 }
Index: /trunk/Ohana/src/opihi/pcontrol/StartHost.c
===================================================================
--- /trunk/Ohana/src/opihi/pcontrol/StartHost.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pcontrol/StartHost.c	(revision 7917)
@@ -17,5 +17,5 @@
   if (!pid) {     
     /** failure to start: extend retry period **/
-    if (VerboseMode()) fprintf (stderr, "failure to start %s\n", host[0].hostname);
+    if (VerboseMode()) gprint (GP_ERR, "failure to start %s\n", host[0].hostname);
     gettimeofday (&now, (void *) NULL);
     if (ZTIME(host[0].nexttry) || ZTIME(host[0].lasttry)) {
Index: /trunk/Ohana/src/opihi/pcontrol/StartJob.c
===================================================================
--- /trunk/Ohana/src/opihi/pcontrol/StartJob.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pcontrol/StartJob.c	(revision 7917)
@@ -13,5 +13,5 @@
   host = (Host *) job[0].host;
   if (host == NULL) {
-    fprintf (stderr, "programming error: no assigned host\n");
+    gprint (GP_ERR, "programming error: no assigned host\n");
     exit (1);
   }
@@ -36,17 +36,17 @@
   switch (status) {
     case PCLIENT_DOWN:
-      if (VerboseMode()) fprintf (stderr, "host %s is down\n", host[0].hostname);
+      if (VerboseMode()) gprint (GP_ERR, "host %s is down\n", host[0].hostname);
       goto failure;
 
     case PCLIENT_HUNG:
-      if (VerboseMode()) fprintf (stderr, "host %s is not responding\n", host[0].hostname);
+      if (VerboseMode()) gprint (GP_ERR, "host %s is not responding\n", host[0].hostname);
       goto failure;
 
     case PCLIENT_GOOD:
-      if (VerboseMode()) fprintf (stderr, "message received (StartJob)\n");  
+      if (VerboseMode()) gprint (GP_ERR, "message received (StartJob)\n");  
       break;
 
     default:
-      if (VerboseMode()) fprintf (stderr, "unknown status for pclient command: programming error\n");  
+      if (VerboseMode()) gprint (GP_ERR, "unknown status for pclient command: programming error\n");  
       exit (1);
   }
@@ -55,5 +55,5 @@
   p = memstr (buffer.buffer, "STATUS", buffer.Nbuffer);
   if (p == NULL) {
-    fprintf (stderr, "programming error: missing STATUS in pclient message\n");
+    gprint (GP_ERR, "programming error: missing STATUS in pclient message\n");
     exit (1);
   }
@@ -61,13 +61,13 @@
   switch (status) {
     case -1:
-      if (VerboseMode()) fprintf (stderr, "error in pclient child\n");
+      if (VerboseMode()) gprint (GP_ERR, "error in pclient child\n");
       goto failure;
 
     case -2:
-      fprintf (stderr, "programming error: syntax error in pclient command\n");
+      gprint (GP_ERR, "programming error: syntax error in pclient command\n");
       exit (1);
 
     case -3:
-      fprintf (stderr, "programming error: existing child on pclient\n");
+      gprint (GP_ERR, "programming error: existing child on pclient\n");
       exit (1);
 
@@ -81,5 +81,5 @@
   }
   /* we should never reach here */
-  fprintf (stderr, "programming error: should not reach here (StartJob)\n");
+  gprint (GP_ERR, "programming error: should not reach here (StartJob)\n");
   exit (1);
 
Index: /trunk/Ohana/src/opihi/pcontrol/StopHosts.c
===================================================================
--- /trunk/Ohana/src/opihi/pcontrol/StopHosts.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pcontrol/StopHosts.c	(revision 7917)
@@ -41,5 +41,5 @@
 
     case PCLIENT_HUNG:
-      fprintf (stderr, "host %s is not responding\n", host[0].hostname);
+      gprint (GP_ERR, "host %s is not responding\n", host[0].hostname);
       break;
 
@@ -48,5 +48,5 @@
 
     default:
-      fprintf (stderr, "unknown status for pclient command: programming error\n");  
+      gprint (GP_ERR, "unknown status for pclient command: programming error\n");  
       exit (1);
   }
@@ -83,15 +83,15 @@
       switch (errno) {
 	case ECHILD:
-	  fprintf (stderr, "unknown PID, not a child proc\n");
-	  fprintf (stderr, "did process already exit?  programming error?\n");
+	  gprint (GP_ERR, "unknown PID, not a child proc\n");
+	  gprint (GP_ERR, "did process already exit?  programming error?\n");
 	  break;
 	case EINVAL:
-	  fprintf (stderr, "error EINVAL (waitpid): programming error\n");
+	  gprint (GP_ERR, "error EINVAL (waitpid): programming error\n");
 	  exit (1);
 	case EINTR:
-	  fprintf (stderr, "error EINTR (waitpid): programming error\n");
+	  gprint (GP_ERR, "error EINTR (waitpid): programming error\n");
 	  exit (1);
 	default:
-	  fprintf (stderr, "unknown error for waitpid (%d): programming error\n", errno);
+	  gprint (GP_ERR, "unknown error for waitpid (%d): programming error\n", errno);
 	  exit (1);
       }
@@ -99,5 +99,5 @@
       
     case 0:
-      fprintf (stderr, "child did not exit??");
+      gprint (GP_ERR, "child did not exit??");
       /** put back in IDLE state? **/
       break;
@@ -105,16 +105,16 @@
     default:
       if (result != pid) {
-	fprintf (stderr, "waitpid error: mis-matched PID (%d vs %d).  programming error\n", result, pid);
+	gprint (GP_ERR, "waitpid error: mis-matched PID (%d vs %d).  programming error\n", result, pid);
 	exit (1);
       }
       
       if (WIFEXITED(waitstatus)) {
-	fprintf (stderr, "child exited with status %d\n", WEXITSTATUS(waitstatus));
+	gprint (GP_ERR, "child exited with status %d\n", WEXITSTATUS(waitstatus));
       }
       if (WIFSIGNALED(waitstatus)) {
-	fprintf (stderr, "child crashed with status %d\n", WTERMSIG(waitstatus));
+	gprint (GP_ERR, "child crashed with status %d\n", WTERMSIG(waitstatus));
       }
       if (WIFSTOPPED(waitstatus)) {
-	fprintf (stderr, "waitpid returns 'stopped': programming error\n");
+	gprint (GP_ERR, "waitpid returns 'stopped': programming error\n");
 	exit (1);
       }
Index: /trunk/Ohana/src/opihi/pcontrol/check.c
===================================================================
--- /trunk/Ohana/src/opihi/pcontrol/check.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pcontrol/check.c	(revision 7917)
@@ -11,6 +11,6 @@
 
   if (argc != 3) {
-    fprintf (stdout, "USAGE: check job (JobID)\n");
-    fprintf (stdout, "USAGE: check host (HostID)\n");
+    gprint (GP_LOG, "USAGE: check job (JobID)\n");
+    gprint (GP_LOG, "USAGE: check host (HostID)\n");
     return (FALSE);
   }
@@ -20,11 +20,11 @@
     job = FindJobStack (JobID);
     if (job == NULL) {
-      fprintf (stdout, "job not found\n");
+      gprint (GP_LOG, "job not found\n");
       return (FALSE);
     }
-    fprintf (stdout, "STATUS %s\n", jobstate[job[0].stack]);
-    fprintf (stdout, "EXITST %d\n", job[0].exit_status);
-    fprintf (stdout, "STDOUT %d\n", job[0].stdout_size);
-    fprintf (stdout, "STDERR %d\n", job[0].stderr_size);
+    gprint (GP_LOG, "STATUS %s\n", jobstate[job[0].stack]);
+    gprint (GP_LOG, "EXITST %d\n", job[0].exit_status);
+    gprint (GP_LOG, "STDOUT %d\n", job[0].stdout_size);
+    gprint (GP_LOG, "STDERR %d\n", job[0].stderr_size);
     return (TRUE);
   }
@@ -34,12 +34,12 @@
     host = FindHostStack (HostID);
     if (host == NULL) {
-      fprintf (stdout, "host not found\n");
+      gprint (GP_LOG, "host not found\n");
       return (FALSE);
     }
-    fprintf (stdout, "host %s\n", hoststate[host[0].stack]);
+    gprint (GP_LOG, "host %s\n", hoststate[host[0].stack]);
     return (TRUE);
   }
 
-  fprintf (stdout, "unknown item to check\n");
+  gprint (GP_LOG, "unknown item to check\n");
   return (FALSE);
 }
Index: /trunk/Ohana/src/opihi/pcontrol/delete.c
===================================================================
--- /trunk/Ohana/src/opihi/pcontrol/delete.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pcontrol/delete.c	(revision 7917)
@@ -7,5 +7,5 @@
 
   if (argc < 2) {
-    fprintf (stderr, "USAGE: delete (JobID)\n");
+    gprint (GP_ERR, "USAGE: delete (JobID)\n");
     return (FALSE);
   }
@@ -22,5 +22,5 @@
   if (job != NULL) goto found;
 
-  fprintf (stderr, "job %s not PENDING, CRASH, EXIT\n", argv[1]);
+  gprint (GP_ERR, "job %s not PENDING, CRASH, EXIT\n", argv[1]);
   return (FALSE);
   
@@ -28,10 +28,10 @@
   {
     int j;
-    fprintf (stderr, "deleting job  %s  %d  ", job[0].hostname, job[0].argc);
+    gprint (GP_LOG, "deleting job  %s  %d  ", job[0].hostname, job[0].argc);
     for (j = 0; j < job[0].argc; j++) {
-      fprintf (stderr, "%s ", job[0].argv[j]);
+      gprint (GP_LOG, "%s ", job[0].argv[j]);
     }
-    PrintID (stderr, job[0].JobID);
-    fprintf (stderr, "\n");
+    PrintID (GP_LOG, job[0].JobID);
+    gprint (GP_LOG, "\n");
   }  
   DelJob (job);
Index: /trunk/Ohana/src/opihi/pcontrol/host.c
===================================================================
--- /trunk/Ohana/src/opihi/pcontrol/host.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pcontrol/host.c	(revision 7917)
@@ -8,5 +8,5 @@
 
   if (argc != 3) {
-    fprintf (stdout, "USAGE: host (command) (hostname)\n");
+    gprint (GP_LOG, "USAGE: host (command) (hostname)\n");
     return (FALSE);
   }
@@ -14,5 +14,5 @@
   if (!strcasecmp (argv[1], "ADD")) {
     HostID = AddHost (argv[2]);
-    fprintf (stdout, "HostID: %d\n", (int) HostID);
+    gprint (GP_LOG, "HostID: %d\n", (int) HostID);
     return (TRUE);
   }
@@ -20,5 +20,5 @@
     N = FindNamedHost (argv[2], PCONTROL_HOST_OFF);
     if (N < 0) {
-      fprintf (stdout, "host %s is not OFF\n", argv[2]);
+      gprint (GP_LOG, "host %s is not OFF\n", argv[2]);
       return (FALSE);
     }
@@ -30,5 +30,5 @@
     N = FindNamedHost (argv[2], PCONTROL_HOST_DOWN);
     if (N < 0) {
-      fprintf (stdout, "host %s is not DOWN\n", argv[2]);
+      gprint (GP_LOG, "host %s is not DOWN\n", argv[2]);
       return (FALSE);
     }
@@ -52,11 +52,11 @@
 	return (TRUE);
       case PCONTROL_HOST_DOWN:
-	fprintf (stdout, "host %s is DOWN\n", argv[2]);
+	gprint (GP_LOG, "host %s is DOWN\n", argv[2]);
 	return (TRUE);
       case PCONTROL_HOST_OFF:
-	fprintf (stdout, "host %s is OFF\n", argv[2]);
+	gprint (GP_LOG, "host %s is OFF\n", argv[2]);
 	return (TRUE);
       default:
-	fprintf (stdout, "host %s not found\n", argv[2]);
+	gprint (GP_LOG, "host %s not found\n", argv[2]);
 	return (FALSE);
     }
@@ -84,5 +84,5 @@
       return (TRUE);
     }
-    fprintf (stdout, "host %s is not BUSY, IDLE, or DOWN\n", argv[2]);
+    gprint (GP_LOG, "host %s is not BUSY, IDLE, or DOWN\n", argv[2]);
     return (FALSE);
   }
@@ -90,5 +90,5 @@
     N = FindNamedHost (argv[2], PCONTROL_HOST_OFF);
     if (N < 0) {
-      fprintf (stdout, "host %s is not OFF\n", argv[2]);
+      gprint (GP_LOG, "host %s is not OFF\n", argv[2]);
       return (FALSE);
     }
@@ -98,6 +98,6 @@
   }
   
-  fprintf (stderr, "unknown host command %s\n", argv[1]);
-  fprintf (stderr, "valid options: xxx\n");
+  gprint (GP_ERR, "unknown host command %s\n", argv[1]);
+  gprint (GP_ERR, "valid options: xxx\n");
   return (FALSE);
 }
Index: /trunk/Ohana/src/opihi/pcontrol/job.c
===================================================================
--- /trunk/Ohana/src/opihi/pcontrol/job.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pcontrol/job.c	(revision 7917)
@@ -17,5 +17,5 @@
   if ((N = get_argument (argc, argv, "+host"))) {
     if (Mode == PCONTROL_JOB_WANTHOST) {
-      fprintf (stderr, "ERROR: -host and +host are incompatible\n");
+      gprint (GP_ERR, "ERROR: -host and +host are incompatible\n");
       FREE (Host);
       return (FALSE);
@@ -36,5 +36,5 @@
 
   if (argc < 2) {
-    fprintf (stderr, "USAGE: job [options] (arg0) (arg1) ... (argN)\n");
+    gprint (GP_ERR, "USAGE: job [options] (arg0) (arg1) ... (argN)\n");
     FREE (Host);
     return (FALSE);
@@ -48,5 +48,5 @@
 
   JobID = AddJob (Host, Mode, Timeout, targc, targv);
-  fprintf (stdout, "JobID: %d\n", (int) JobID);
+  gprint (GP_LOG, "JobID: %d\n", (int) JobID);
   return (TRUE);
 }
Index: /trunk/Ohana/src/opihi/pcontrol/jobstack.c
===================================================================
--- /trunk/Ohana/src/opihi/pcontrol/jobstack.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pcontrol/jobstack.c	(revision 7917)
@@ -8,6 +8,6 @@
 
   if (argc != 2) {
-    fprintf (stdout, "USAGE: jobstack (jobstack)\n");
-    fprintf (stdout, "       (jobstack) : pending, busy, exit, crash, hung, done\n");
+    gprint (GP_ERR, "USAGE: jobstack (jobstack)\n");
+    gprint (GP_ERR, "       (jobstack) : pending, busy, exit, crash, hung, done\n");
     return (FALSE);
   }
@@ -16,15 +16,15 @@
   stack = GetJobStackByName (argv[1]);
   if (stack == NULL) {
-    fprintf (stderr, "jobstack not found\n");
+    gprint (GP_ERR, "jobstack not found\n");
     return (FALSE);
   }
 
   /* print list */
-  fprintf (stdout, "Njobs: %d\n", stack[0].Nobject);
+  gprint (GP_LOG, "Njobs: %d\n", stack[0].Nobject);
   for (i = 0; i < stack[0].Nobject; i++) {
     job = stack[0].object[i];
-    /* PrintID (stdout, job[0].JobID); */
-    fprintf (stdout, "%lld ", job[0].JobID);
-    fprintf (stdout, "%s  %s\n", job[0].argv[0], job[0].hostname);
+    /* PrintID (GP_LOG, job[0].JobID); */
+    gprint (GP_LOG, "%lld ", job[0].JobID);
+    gprint (GP_LOG, "%s  %s\n", job[0].argv[0], job[0].hostname);
   }
   return (TRUE);
Index: /trunk/Ohana/src/opihi/pcontrol/kill.c
===================================================================
--- /trunk/Ohana/src/opihi/pcontrol/kill.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pcontrol/kill.c	(revision 7917)
@@ -7,5 +7,5 @@
 
   if (argc < 2) {
-    fprintf (stderr, "USAGE: kill (JobID)\n");
+    gprint (GP_ERR, "USAGE: kill (JobID)\n");
     return (FALSE);
   }
@@ -15,5 +15,5 @@
   job = PullJob (JobID, PCONTROL_JOB_BUSY);
   if (job == NULL) {
-    fprintf (stderr, "job %s not BUSY\n", argv[1]);
+    gprint (GP_ERR, "job %s not BUSY\n", argv[1]);
     /* make output message more readable by scheduler */
     return (FALSE);
Index: /trunk/Ohana/src/opihi/pcontrol/pclient.c
===================================================================
--- /trunk/Ohana/src/opihi/pcontrol/pclient.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pcontrol/pclient.c	(revision 7917)
@@ -32,5 +32,5 @@
   if (status ==  0) return (PCLIENT_DOWN);
   if (status == -1) return (PCLIENT_HUNG);
-  /* fprintf (stderr, "buffer.buffer: %s\n", buffer[0].buffer); */
+  /* gprint (GP_ERR, "buffer.buffer: %s\n", buffer[0].buffer); */
   return (PCLIENT_GOOD);
 }
Index: /trunk/Ohana/src/opihi/pcontrol/pcontrol.c
===================================================================
--- /trunk/Ohana/src/opihi/pcontrol/pcontrol.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pcontrol/pcontrol.c	(revision 7917)
@@ -38,6 +38,6 @@
 /* standard welcome message */
 void welcome () {
-  fprintf (stderr, "\n");
-  fprintf (stderr, "Welcome to %s - %s\n\n", opihi_name, opihi_description);
+  gprint (GP_ERR, "\n");
+  gprint (GP_ERR, "Welcome to %s - %s\n\n", opihi_name, opihi_description);
 }
 
@@ -49,5 +49,5 @@
 
 void gotsignal (int signum) {
-  fprintf (stderr, "got signal : %d\n", signum);
+  gprint (GP_ERR, "got signal : %d\n", signum);
   return;
 }
Index: /trunk/Ohana/src/opihi/pcontrol/pulse.c
===================================================================
--- /trunk/Ohana/src/opihi/pcontrol/pulse.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pcontrol/pulse.c	(revision 7917)
@@ -6,5 +6,5 @@
 
   if (argc != 2) {
-    fprintf (stderr, "USAGE: pulse (microseconds)\n");
+    gprint (GP_ERR, "USAGE: pulse (microseconds)\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/pcontrol/rconnect.c
===================================================================
--- /trunk/Ohana/src/opihi/pcontrol/rconnect.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pcontrol/rconnect.c	(revision 7917)
@@ -34,5 +34,5 @@
   pid = fork ();
   if (!pid) { /* must be child process */
-    if (VerboseMode()) fprintf (stderr, "starting remote connection to %s...", hostname);
+    if (VerboseMode()) gprint (GP_ERR, "starting remote connection to %s...", hostname);
 
     /* close the other ends of the pipes */
@@ -52,5 +52,5 @@
 
     status = execvp (argv[0], argv); 
-    fprintf (stderr, "error starting remote shell process\n");
+    gprint (GP_ERR, "error starting remote shell process\n");
     exit (1);
   }
@@ -85,8 +85,8 @@
   if (status == 0) goto connect_error;
   if (status == -1) goto connect_error;
-  if (VerboseMode()) fprintf (stderr, "%d cycles to connect\n", i);
+  if (VerboseMode()) gprint (GP_ERR, "%d cycles to connect\n", i);
   FreeIOBuffer (&buffer);
 
-  if (VerboseMode()) fprintf (stderr, "Connected\n");
+  if (VerboseMode()) gprint (GP_ERR, "Connected\n");
 
   stdio[0] = stdin_fd[1];
@@ -101,5 +101,5 @@
 
 connect_error:
-  if (VerboseMode()) fprintf (stderr, "error while connecting\n");
+  if (VerboseMode()) gprint (GP_ERR, "error while connecting\n");
 
   /* avoid blocking on waitpid, test every 100 usec, up to 50 msec */
@@ -116,17 +116,17 @@
 
   if ((result == -1) && (errno != ECHILD)) {
-    fprintf (stderr, "unexpected error from waitpid (%d): programming error\n", errno);
+    gprint (GP_ERR, "unexpected error from waitpid (%d): programming error\n", errno);
     exit (1);
   }
   if (result == 0) {
-    if (VerboseMode()) fprintf (stderr, "child did not exit??");
+    if (VerboseMode()) gprint (GP_ERR, "child did not exit??");
   }
   if (result > 0) {
     if (result != pid) {
-      fprintf (stderr, "waitpid error: mis-matched PID (%d vs %d).  programming error\n", result, pid);
+      gprint (GP_ERR, "waitpid error: mis-matched PID (%d vs %d).  programming error\n", result, pid);
       exit (1);
     }
     if (WIFSTOPPED(waitstatus)) {
-      fprintf (stderr, "waitpid returns 'stopped': programming error\n");
+      gprint (GP_ERR, "waitpid returns 'stopped': programming error\n");
       exit (1);
     }
Index: /trunk/Ohana/src/opihi/pcontrol/run.c
===================================================================
--- /trunk/Ohana/src/opihi/pcontrol/run.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pcontrol/run.c	(revision 7917)
@@ -4,5 +4,5 @@
 
   if (argc != 1) {
-    fprintf (stderr, "USAGE: run\n");
+    gprint (GP_ERR, "USAGE: run\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/pcontrol/status.c
===================================================================
--- /trunk/Ohana/src/opihi/pcontrol/status.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pcontrol/status.c	(revision 7917)
@@ -28,14 +28,14 @@
   stack = GetJobStack (Nstack);
   Nobject = stack[0].Nobject;
-  fprintf (stdout, "job stack %s:  %d objects\n", jobname[Nstack], Nobject);
+  gprint (GP_LOG, "job stack %s:  %d objects\n", jobname[Nstack], Nobject);
 
   for (i = 0; i < Nobject; i++) {
     job = stack[0].object[i];
-    fprintf (stdout, "%d  %s  %d  ", i, job[0].hostname, job[0].argc);
+    gprint (GP_LOG, "%d  %s  %d  ", i, job[0].hostname, job[0].argc);
     for (j = 0; j < job[0].argc; j++) {
-      fprintf (stdout, "%s ", job[0].argv[j]);
+      gprint (GP_LOG, "%s ", job[0].argv[j]);
     }
-    PrintID (stdout, job[0].JobID);
-    fprintf (stdout, "\n");
+    PrintID (GP_LOG, job[0].JobID);
+    gprint (GP_LOG, "\n");
   }
   return (TRUE);
@@ -50,11 +50,11 @@
   stack = GetHostStack (Nstack);
   Nobject = stack[0].Nobject;
-  fprintf (stdout, "host stack %s:  %d objects\n", hostname[Nstack], Nobject);
+  gprint (GP_LOG, "host stack %s:  %d objects\n", hostname[Nstack], Nobject);
 
   for (i = 0; i < Nobject; i++) {
     host = stack[0].object[i];
-    fprintf (stdout, "%d  %s  ", i, host[0].hostname);
-    PrintID (stdout, host[0].HostID);
-    fprintf (stdout, "\n");
+    gprint (GP_LOG, "%d  %s  ", i, host[0].hostname);
+    PrintID (GP_LOG, host[0].HostID);
+    gprint (GP_LOG, "\n");
   }
   return (TRUE);
Index: /trunk/Ohana/src/opihi/pcontrol/stdout.c
===================================================================
--- /trunk/Ohana/src/opihi/pcontrol/stdout.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pcontrol/stdout.c	(revision 7917)
@@ -8,6 +8,6 @@
 
   if (argc != 2) {
-    fprintf (stderr, "USAGE: stdout (JobID)\n");
-    fprintf (stdout, "STATUS %d\n", -1);
+    gprint (GP_ERR, "USAGE: stdout (JobID)\n");
+    gprint (GP_LOG, "STATUS %d\n", -1);
     return (FALSE);
   }
@@ -23,10 +23,10 @@
   buffer = &job[0].stdout;
   fwrite (buffer[0].buffer, 1, buffer[0].Nbuffer, stdout);
-  fprintf (stdout, "STATUS %d\n", 0);
+  gprint (GP_LOG, "STATUS %d\n", 0);
   return (TRUE);
 
 missing_stdout:
-  fprintf (stderr, "job not found in EXIT or CRASH\n");
-  fprintf (stdout, "STATUS %d\n", -2);
+  gprint (GP_ERR, "job not found in EXIT or CRASH\n");
+  gprint (GP_LOG, "STATUS %d\n", -2);
   return (FALSE);
 }
@@ -39,6 +39,6 @@
 
   if (argc != 2) {
-    fprintf (stderr, "USAGE: stderr (JobID)\n");
-    fprintf (stdout, "STATUS %d\n", -1);
+    gprint (GP_ERR, "USAGE: stderr (JobID)\n");
+    gprint (GP_LOG, "STATUS %d\n", -1);
     return (FALSE);
   }
@@ -54,10 +54,10 @@
   buffer = &job[0].stderr;
   fwrite (buffer[0].buffer, 1, buffer[0].Nbuffer, stdout);
-  fprintf (stdout, "STATUS %d\n", 0);
+  gprint (GP_LOG, "STATUS %d\n", 0);
   return (TRUE);
 
 missing_stderr:
-  fprintf (stderr, "job not found in EXIT or CRASH\n");
-  fprintf (stdout, "STATUS %d\n", -2);
+  gprint (GP_ERR, "job not found in EXIT or CRASH\n");
+  gprint (GP_LOG, "STATUS %d\n", -2);
   return (FALSE);
 }
Index: /trunk/Ohana/src/opihi/pcontrol/stop.c
===================================================================
--- /trunk/Ohana/src/opihi/pcontrol/stop.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pcontrol/stop.c	(revision 7917)
@@ -4,5 +4,5 @@
 
   if (argc != 1) {
-    fprintf (stderr, "USAGE: stop\n");
+    gprint (GP_ERR, "USAGE: stop\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/pcontrol/verbose.c
===================================================================
--- /trunk/Ohana/src/opihi/pcontrol/verbose.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pcontrol/verbose.c	(revision 7917)
@@ -7,7 +7,7 @@
   if (argc == 1) {
     if (VERBOSE) {
-      fprintf (stderr, "verbose mode ON\n");
+      gprint (GP_ERR, "verbose mode ON\n");
     } else {
-      fprintf (stderr, "verbose mode OFF\n");
+      gprint (GP_ERR, "verbose mode OFF\n");
     }
     return (TRUE);
@@ -29,5 +29,5 @@
   }
 
-  fprintf (stderr, "USAGE: verbose (on/off/toggle)\n");
+  gprint (GP_ERR, "USAGE: verbose (on/off/toggle)\n");
   return (FALSE);
 }
Index: /trunk/Ohana/src/opihi/pcontrol/version.c
===================================================================
--- /trunk/Ohana/src/opihi/pcontrol/version.c	(revision 7916)
+++ /trunk/Ohana/src/opihi/pcontrol/version.c	(revision 7917)
@@ -4,11 +4,11 @@
 int version (int argc, char **argv) {
 
-  fprintf (stderr, "%s\n", name);
+  gprint (GP_ERR, "%s\n", name);
 
-  fprintf (stderr, "%s\n", opihi_version());
-  fprintf (stderr, "%s\n", ohana_version());
-  fprintf (stderr, "%s\n", gfits_version());
+  gprint (GP_ERR, "%s\n", opihi_version());
+  gprint (GP_ERR, "%s\n", ohana_version());
+  gprint (GP_ERR, "%s\n", gfits_version());
 
-  fprintf (stderr, "compiled on %s %s\n", __DATE__, __TIME__);
+  gprint (GP_ERR, "compiled on %s %s\n", __DATE__, __TIME__);
   return (TRUE);
 }
