Index: trunk/Ohana/src/opihi/cmd.astro/Makefile
===================================================================
--- trunk/Ohana/src/opihi/cmd.astro/Makefile	(revision 12753)
+++ trunk/Ohana/src/opihi/cmd.astro/Makefile	(revision 12840)
@@ -50,9 +50,9 @@
 $(SRC)/imfit-fgauss.$(ARCH).o	   \
 $(SRC)/imfit-pgauss.$(ARCH).o	   \
-$(SRC)/imfit-Pgauss.$(ARCH).o	   \
+$(SRC)/imfit-pgauss-psf.$(ARCH).o	   \
 $(SRC)/imfit-qgauss.$(ARCH).o	   \
-$(SRC)/imfit-Qgauss.$(ARCH).o	   \
+$(SRC)/imfit-qgauss-psf.$(ARCH).o	   \
 $(SRC)/imfit-sgauss.$(ARCH).o	   \
-$(SRC)/imfit-Sgauss.$(ARCH).o	   \
+$(SRC)/imfit-sgauss-psf.$(ARCH).o	   \
 $(SRC)/imfit-qfgauss.$(ARCH).o	   \
 $(SRC)/imfit-qrgauss.$(ARCH).o	   
Index: trunk/Ohana/src/opihi/cmd.astro/imfit-Pgauss.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.astro/imfit-Pgauss.c	(revision 12753)
+++ 	(revision )
@@ -1,66 +1,0 @@
-# include "imfit.h"
-
-float PgaussTD (float, float, float *, int, float *);
-void  PgaussCL ();
-
-void  Pgauss_setup (char *name) {
-
-  if (strcmp(name, "Pgauss")) return;
-
-  fitfunc = PgaussTD;
-  imfit_cleanup = PgaussCL;
-  Npar = 4;
-  Nfpar = 3;
-
-  /* allocate free and fixed parameters */
-  ALLOCATE (par, float, MAX (Npar, 1));
-  bzero (par, Npar*sizeof(float));
-  ALLOCATE (fpar, float, MAX (Nfpar, 1));
-  bzero (fpar, Nfpar*sizeof(float));
-
-  par[0] = get_variable_default ("Xg", 0);
-  par[1] = get_variable_default ("Yg", 0);
-  par[2] = get_variable_default ("Zpk", 10000);
-  par[3] = get_variable_default ("Sg", 0.0);
-  sky = &par[3];
-
-  fpar[0] = 2.35 / get_variable_default ("SXg", 2.0);
-  fpar[1] = 2.35 / get_variable_default ("SYg", 2.0);
-  fpar[2] = get_variable_default ("SXYg", 0);
-}
-
-void PgaussCL () {
-  set_variable ("Xg",   par[0]);
-  set_variable ("Yg",   par[1]);
-  set_variable ("Zpk",  par[2]);
-  set_variable ("Sg",   par[3]);
-}
-
-/* pseudo 2D gaussian -- x, y, (sx), (sy), (sxy), I, sky */
-float PgaussTD (float x, float y, float *par, int Npar, float *dpar) {
-
-  float X, Y, px, py;
-  float z, r, q, f;
-
-  /* par -> fpar: (2,0), (3,1), (4,2) */
-
-  X = x - par[0];
-  Y = y - par[1];
-  
-  px = fpar[0]*X;
-  py = fpar[1]*Y;
-
-  z = 0.5*SQ(px) + 0.5*SQ(py) + fpar[2]*X*Y;
-  r = 1.0 / (1 + z + 0.5*z*z*(1 + z/3)); /* ~ exp (-Z) */
-  f = par[2]*r + par[3];
-  q = par[2]*r*r*(1 + z + 0.5*z*z);
-  /* note difference from gaussian: q = par[5]*r */
-
-  if (dpar != NULL) {
-    dpar[0] = q*(2*px*fpar[0] + fpar[2]*Y);
-    dpar[1] = q*(2*py*fpar[1] + fpar[2]*X);
-    dpar[2] = +r;
-    dpar[3] = +1;
-  }
-  return (f);
-}
Index: trunk/Ohana/src/opihi/cmd.astro/imfit-Qgauss.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.astro/imfit-Qgauss.c	(revision 12753)
+++ 	(revision )
@@ -1,68 +1,0 @@
-# include "imfit.h"
-
-float QgaussTD (float, float, float *, int, float *);
-void  QgaussCL ();
-
-void Qgauss_setup (char *name) {
-
-  if (strcmp(name, "Qgauss")) return;
-
-  fitfunc = QgaussTD;
-  imfit_cleanup = QgaussCL;
-  Npar = 4;
-  Nfpar = 5;
-
-  /* allocate free and fixed parameters */
-  ALLOCATE (par, float, MAX (Npar, 1));
-  bzero (par, Npar*sizeof(float));
-  ALLOCATE (fpar, float, MAX (Nfpar, 1));
-  bzero (fpar, Nfpar*sizeof(float));
-
-  par[0]  = get_variable_default ("Xg", 0);
-  par[1]  = get_variable_default ("Yg", 0);
-  par[2]  = get_variable_default ("Zpk", 10000);
-  par[3]  = get_variable_default ("Sg", 0.0);
-
-  fpar[0] = 2.35 / get_variable_default ("SXg", 15.0);
-  fpar[1] = 2.35 / get_variable_default ("SYg", 15.0);
-  fpar[2] = get_variable_default ("SXYg", 0.0);
-  fpar[3] = get_variable_default ("Sr", 1.0);
-  fpar[4] = get_variable_default ("Npow", 2.25);
-
-  sky = &par[3];
-}
-
-void QgaussCL () {
-  set_variable ("Xg",  par[0]);
-  set_variable ("Yg",  par[1]);
-  set_variable ("Zpk", par[2]);
-  set_variable ("Sg",  par[3]);
-}
-
-/* one component, two slopes: (1 + z^M + z^N)^(-1) -- x, y, sx, sy, sxy, I, sky, sr */
-float QgaussTD (float x, float y, float *par, int Npar, float *dpar) {
-
-  float X, Y, px, py;
-  float z, r, q, f;
-
-  X = x - par[0];
-  Y = y - par[1];
-  
-  px = fpar[0]*X;
-  py = fpar[1]*Y;
-
-  z = 0.5*SQ(px) + 0.5*SQ(py) + fpar[2]*X*Y;
-
-  r = 1.0 / (1 + fpar[3]*z + pow(z,fpar[4]));
-  f = par[2]*r + par[3];
-  q = par[2]*SQ(r)*(fpar[3] + fpar[4]*pow(z,(fpar[4]-1)));
-
-  if (dpar != NULL) {
-    dpar[0] = q*(2*px*fpar[0] + fpar[2]*Y);
-    dpar[1] = q*(2*py*fpar[1] + fpar[2]*X);
-    dpar[2] = +r;
-    dpar[3] = +1;
-  }
-  return (f);
-}
-
Index: trunk/Ohana/src/opihi/cmd.astro/imfit-Sgauss.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.astro/imfit-Sgauss.c	(revision 12753)
+++ 	(revision )
@@ -1,74 +1,0 @@
-# include "imfit.h"
-
-float SgaussTD (float, float, float *, int, float *);
-void  SgaussCL ();
-
-void Sgauss_setup (char *name) {
-
-  if (strcmp(name, "Sgauss")) return;
-
-  fitfunc = SgaussTD;
-  imfit_cleanup = SgaussCL;
-  Npar = 4;
-  Nfpar = 7;
-
-  /* allocate free and fixed parameters */
-  ALLOCATE (par, float, MAX (Npar, 1));
-  bzero (par, Npar*sizeof(float));
-  ALLOCATE (fpar, float, MAX (Nfpar, 1));
-  bzero (fpar, Nfpar*sizeof(float));
-
-  par[0] = get_variable_default ("Xg", 0);
-  par[1] = get_variable_default ("Yg", 0);
-  par[2] = get_variable_default ("Zpk", 10000);
-  par[3] = get_variable_default ("Sg", 0.0);
-
-  fpar[0] = 2.35 / get_variable_default ("SXg", 15.0);
-  fpar[1] = 2.35 / get_variable_default ("SYg", 15.0);
-  fpar[2] = get_variable_default ("SXYg", 0.0);
-  fpar[3] = 2.35 / get_variable_default ("SXf", 15.0);
-  fpar[4] = 2.35 / get_variable_default ("SYf", 15.0);
-  fpar[5] = get_variable_default ("SXYf", 0.0);
-  fpar[6] = get_variable_default ("Npow", 2.25);
-
-  sky = &par[3];
-}
-
-void SgaussCL () {
-  set_variable ("Xg",   par[0]);
-  set_variable ("Yg",   par[1]);
-  set_variable ("Zpk",  par[2]);
-  set_variable ("Sg",   par[3]);
-}
-
-/* two components: (1 + z_1 + z_2^N)^(-1) -- x, y, sx1, sy1, sxy1, I, sky, sx2, sy2, sxy2 */
-float SgaussTD (float x, float y, float *par, int Npar, float *dpar) {
-
-  float X, Y, px1, py1, px2, py2;
-  float z1, z2, r, q1, q2, f;
-
-  X = x - par[0];
-  Y = y - par[1];
-  
-  px1 = fpar[0]*X;
-  py1 = fpar[1]*Y;
-  px2 = fpar[3]*X;
-  py2 = fpar[4]*Y;
-
-  z1 = 0.5*SQ(px1) + 0.5*SQ(py1) + fpar[2]*X*Y;
-  z2 = 0.5*SQ(px2) + 0.5*SQ(py2) + fpar[5]*X*Y;
-
-  r = 1.0 / (1 + z1 + pow(z2,fpar[6]));
-  f = par[2]*r + par[3];
-
-  q1 = par[2]*SQ(r);
-  q2 = par[2]*SQ(r)*fpar[6]*pow(z2,(fpar[6]-1));
-
-  if (dpar != NULL) {
-    dpar[0] = q1*(2*px1*fpar[0] + fpar[2]*Y) + q2*(2*px2*fpar[3] + fpar[5]*Y);
-    dpar[1] = q1*(2*py1*fpar[1] + fpar[2]*X) + q2*(2*py2*fpar[4] + fpar[5]*X);
-    dpar[2] = +r;
-    dpar[3] = +1;
-  }
-  return (f);
-}
Index: trunk/Ohana/src/opihi/cmd.astro/imfit-pgauss-psf.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.astro/imfit-pgauss-psf.c	(revision 12840)
+++ trunk/Ohana/src/opihi/cmd.astro/imfit-pgauss-psf.c	(revision 12840)
@@ -0,0 +1,66 @@
+# include "imfit.h"
+
+float pgauss_psfTD (float, float, float *, int, float *);
+void  pgauss_psfCL ();
+
+void  pgauss_psf_setup (char *name) {
+
+  if (strcmp(name, "pgauss_psf")) return;
+
+  fitfunc = pgauss_psfTD;
+  imfit_cleanup = pgauss_psfCL;
+  Npar = 4;
+  Nfpar = 3;
+
+  /* allocate free and fixed parameters */
+  ALLOCATE (par, float, MAX (Npar, 1));
+  bzero (par, Npar*sizeof(float));
+  ALLOCATE (fpar, float, MAX (Nfpar, 1));
+  bzero (fpar, Nfpar*sizeof(float));
+
+  par[0] = get_variable_default ("Xg", 0);
+  par[1] = get_variable_default ("Yg", 0);
+  par[2] = get_variable_default ("Zpk", 10000);
+  par[3] = get_variable_default ("Sg", 0.0);
+  sky = &par[3];
+
+  fpar[0] = 2.35 / get_variable_default ("SXg", 2.0);
+  fpar[1] = 2.35 / get_variable_default ("SYg", 2.0);
+  fpar[2] = get_variable_default ("SXYg", 0);
+}
+
+void pgauss_psfCL () {
+  set_variable ("Xg",   par[0]);
+  set_variable ("Yg",   par[1]);
+  set_variable ("Zpk",  par[2]);
+  set_variable ("Sg",   par[3]);
+}
+
+/* pseudo 2D gaussian -- x, y, (sx), (sy), (sxy), I, sky */
+float pgauss_psfTD (float x, float y, float *par, int Npar, float *dpar) {
+
+  float X, Y, px, py;
+  float z, r, q, f;
+
+  /* par -> fpar: (2,0), (3,1), (4,2) */
+
+  X = x - par[0];
+  Y = y - par[1];
+  
+  px = fpar[0]*X;
+  py = fpar[1]*Y;
+
+  z = 0.5*SQ(px) + 0.5*SQ(py) + fpar[2]*X*Y;
+  r = 1.0 / (1 + z + 0.5*z*z*(1 + z/3)); /* ~ exp (-Z) */
+  f = par[2]*r + par[3];
+  q = par[2]*r*r*(1 + z + 0.5*z*z);
+  /* note difference from gaussian: q = par[5]*r */
+
+  if (dpar != NULL) {
+    dpar[0] = q*(2*px*fpar[0] + fpar[2]*Y);
+    dpar[1] = q*(2*py*fpar[1] + fpar[2]*X);
+    dpar[2] = +r;
+    dpar[3] = +1;
+  }
+  return (f);
+}
Index: trunk/Ohana/src/opihi/cmd.astro/imfit-qgauss-psf.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.astro/imfit-qgauss-psf.c	(revision 12840)
+++ trunk/Ohana/src/opihi/cmd.astro/imfit-qgauss-psf.c	(revision 12840)
@@ -0,0 +1,68 @@
+# include "imfit.h"
+
+float qgauss_psfTD (float, float, float *, int, float *);
+void  qgauss_psfCL ();
+
+void qgauss_psf_setup (char *name) {
+
+  if (strcmp(name, "qgauss_psf")) return;
+
+  fitfunc = qgauss_psfTD;
+  imfit_cleanup = qgauss_psfCL;
+  Npar = 4;
+  Nfpar = 5;
+
+  /* allocate free and fixed parameters */
+  ALLOCATE (par, float, MAX (Npar, 1));
+  bzero (par, Npar*sizeof(float));
+  ALLOCATE (fpar, float, MAX (Nfpar, 1));
+  bzero (fpar, Nfpar*sizeof(float));
+
+  par[0]  = get_variable_default ("Xg", 0);
+  par[1]  = get_variable_default ("Yg", 0);
+  par[2]  = get_variable_default ("Zpk", 10000);
+  par[3]  = get_variable_default ("Sg", 0.0);
+
+  fpar[0] = 2.35 / get_variable_default ("SXg", 15.0);
+  fpar[1] = 2.35 / get_variable_default ("SYg", 15.0);
+  fpar[2] = get_variable_default ("SXYg", 0.0);
+  fpar[3] = get_variable_default ("Sr", 1.0);
+  fpar[4] = get_variable_default ("Npow", 2.25);
+
+  sky = &par[3];
+}
+
+void qgauss_psfCL () {
+  set_variable ("Xg",  par[0]);
+  set_variable ("Yg",  par[1]);
+  set_variable ("Zpk", par[2]);
+  set_variable ("Sg",  par[3]);
+}
+
+/* one component, two slopes: (1 + z^M + z^N)^(-1) -- x, y, sx, sy, sxy, I, sky, sr */
+float qgauss_psfTD (float x, float y, float *par, int Npar, float *dpar) {
+
+  float X, Y, px, py;
+  float z, r, q, f;
+
+  X = x - par[0];
+  Y = y - par[1];
+  
+  px = fpar[0]*X;
+  py = fpar[1]*Y;
+
+  z = 0.5*SQ(px) + 0.5*SQ(py) + fpar[2]*X*Y;
+
+  r = 1.0 / (1 + fpar[3]*z + pow(z,fpar[4]));
+  f = par[2]*r + par[3];
+  q = par[2]*SQ(r)*(fpar[3] + fpar[4]*pow(z,(fpar[4]-1)));
+
+  if (dpar != NULL) {
+    dpar[0] = q*(2*px*fpar[0] + fpar[2]*Y);
+    dpar[1] = q*(2*py*fpar[1] + fpar[2]*X);
+    dpar[2] = +r;
+    dpar[3] = +1;
+  }
+  return (f);
+}
+
Index: trunk/Ohana/src/opihi/cmd.astro/imfit-sgauss-psf.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.astro/imfit-sgauss-psf.c	(revision 12840)
+++ trunk/Ohana/src/opihi/cmd.astro/imfit-sgauss-psf.c	(revision 12840)
@@ -0,0 +1,74 @@
+# include "imfit.h"
+
+float sgauss_psfTD (float, float, float *, int, float *);
+void  sgauss_psfCL ();
+
+void sgauss_psf_setup (char *name) {
+
+  if (strcmp(name, "sgauss_psf")) return;
+
+  fitfunc = sgauss_psfTD;
+  imfit_cleanup = sgauss_psfCL;
+  Npar = 4;
+  Nfpar = 7;
+
+  /* allocate free and fixed parameters */
+  ALLOCATE (par, float, MAX (Npar, 1));
+  bzero (par, Npar*sizeof(float));
+  ALLOCATE (fpar, float, MAX (Nfpar, 1));
+  bzero (fpar, Nfpar*sizeof(float));
+
+  par[0] = get_variable_default ("Xg", 0);
+  par[1] = get_variable_default ("Yg", 0);
+  par[2] = get_variable_default ("Zpk", 10000);
+  par[3] = get_variable_default ("Sg", 0.0);
+
+  fpar[0] = 2.35 / get_variable_default ("SXg", 15.0);
+  fpar[1] = 2.35 / get_variable_default ("SYg", 15.0);
+  fpar[2] = get_variable_default ("SXYg", 0.0);
+  fpar[3] = 2.35 / get_variable_default ("SXf", 15.0);
+  fpar[4] = 2.35 / get_variable_default ("SYf", 15.0);
+  fpar[5] = get_variable_default ("SXYf", 0.0);
+  fpar[6] = get_variable_default ("Npow", 2.25);
+
+  sky = &par[3];
+}
+
+void sgauss_psfCL () {
+  set_variable ("Xg",   par[0]);
+  set_variable ("Yg",   par[1]);
+  set_variable ("Zpk",  par[2]);
+  set_variable ("Sg",   par[3]);
+}
+
+/* two components: (1 + z_1 + z_2^N)^(-1) -- x, y, sx1, sy1, sxy1, I, sky, sx2, sy2, sxy2 */
+float sgauss_psfTD (float x, float y, float *par, int Npar, float *dpar) {
+
+  float X, Y, px1, py1, px2, py2;
+  float z1, z2, r, q1, q2, f;
+
+  X = x - par[0];
+  Y = y - par[1];
+  
+  px1 = fpar[0]*X;
+  py1 = fpar[1]*Y;
+  px2 = fpar[3]*X;
+  py2 = fpar[4]*Y;
+
+  z1 = 0.5*SQ(px1) + 0.5*SQ(py1) + fpar[2]*X*Y;
+  z2 = 0.5*SQ(px2) + 0.5*SQ(py2) + fpar[5]*X*Y;
+
+  r = 1.0 / (1 + z1 + pow(z2,fpar[6]));
+  f = par[2]*r + par[3];
+
+  q1 = par[2]*SQ(r);
+  q2 = par[2]*SQ(r)*fpar[6]*pow(z2,(fpar[6]-1));
+
+  if (dpar != NULL) {
+    dpar[0] = q1*(2*px1*fpar[0] + fpar[2]*Y) + q2*(2*px2*fpar[3] + fpar[5]*Y);
+    dpar[1] = q1*(2*py1*fpar[1] + fpar[2]*X) + q2*(2*py2*fpar[4] + fpar[5]*X);
+    dpar[2] = +r;
+    dpar[3] = +1;
+  }
+  return (f);
+}
Index: trunk/Ohana/src/opihi/cmd.astro/imfit-test.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.astro/imfit-test.c	(revision 12753)
+++ trunk/Ohana/src/opihi/cmd.astro/imfit-test.c	(revision 12840)
@@ -31,5 +31,5 @@
       par[3] = tp1;
     }
-    if (fitfunc == SgaussTD) {
+    if (fitfunc == sgauss_psfTD) {
       tp1 = par[0];
       tp2 = par[3];
@@ -48,5 +48,5 @@
       par[4] = tp2;
     }
-    if (fitfunc == PgaussTD) {
+    if (fitfunc == pgauss_psfTD) {
       tp1 = par[0];
       par[0] = par[0]*1.05;
Index: trunk/Ohana/src/opihi/cmd.astro/imfit.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.astro/imfit.c	(revision 12753)
+++ trunk/Ohana/src/opihi/cmd.astro/imfit.c	(revision 12840)
@@ -57,9 +57,9 @@
     fgauss_setup (argv[N]);
     pgauss_setup (argv[N]);
-    Pgauss_setup (argv[N]);
+    pgauss_psf_setup (argv[N]);
     sgauss_setup (argv[N]);
-    Sgauss_setup (argv[N]);
+    sgauss_psf_setup (argv[N]);
     qgauss_setup (argv[N]);
-    Qgauss_setup (argv[N]);
+    qgauss_psf_setup (argv[N]);
     qfgauss_setup (argv[N]);
     qrgauss_setup (argv[N]);
Index: trunk/Ohana/src/opihi/cmd.astro/imsub.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.astro/imsub.c	(revision 12753)
+++ trunk/Ohana/src/opihi/cmd.astro/imsub.c	(revision 12840)
@@ -22,9 +22,9 @@
     fgauss_setup (argv[N]);
     pgauss_setup (argv[N]);
-    Pgauss_setup (argv[N]);
+    pgauss_psf_setup (argv[N]);
     sgauss_setup (argv[N]);
-    Sgauss_setup (argv[N]);
+    sgauss_psf_setup (argv[N]);
     qgauss_setup (argv[N]);
-    Qgauss_setup (argv[N]);
+    qgauss_psf_setup (argv[N]);
     qfgauss_setup (argv[N]);
     qrgauss_setup (argv[N]);
Index: trunk/Ohana/src/opihi/dvo/Makefile
===================================================================
--- trunk/Ohana/src/opihi/dvo/Makefile	(revision 12753)
+++ trunk/Ohana/src/opihi/dvo/Makefile	(revision 12840)
@@ -23,5 +23,5 @@
 $(SRC)/ImageSelection.$(ARCH).o	\
 $(SRC)/LoadImages.$(ARCH).o		\
-$(SRC)/cmpRead.$(ARCH).o		\
+$(SRC)/cmpReadFile.$(ARCH).o		\
 $(SRC)/compare.$(ARCH).o               \
 $(SRC)/match_image.$(ARCH).o		\
Index: trunk/Ohana/src/opihi/dvo/cmpRead.c
===================================================================
--- trunk/Ohana/src/opihi/dvo/cmpRead.c	(revision 12753)
+++ 	(revision )
@@ -1,125 +1,0 @@
-# include "dvoshell.h"
-# define D_NSTARS 1000
-# define BYTES_STAR 66
-# define BLOCK 1000
-
-CMPstars *cmpReadFits (FILE *f, int *nstars) {
-
-  int i, Nstars;
-  Header theader;
-  FTable table;
-  CMPstars *stars;
-  SMPData *smpdata;
-
-  /* if no stars, no table */
-  if (*nstars == 0) return (NULL);
-
-  /* init & load in table data */
-  table.header   = &theader;
-  if (!gfits_fread_ftable (f, &table, "SMPFILE")) goto escape;
-
-  smpdata = gfits_table_get_SMPData (&table, &Nstars, NULL);
-
-  ALLOCATE (stars, CMPstars, Nstars);
-  for (i = 0; i < Nstars; i++) {
-    stars[i].X      = smpdata[i].X;
-    stars[i].Y      = smpdata[i].Y;
-    stars[i].M      = smpdata[i].M;
-    stars[i].dM     = smpdata[i].dM;
-    stars[i].dophot = smpdata[i].dophot;
-
-    stars[i].Mgal   = smpdata[i].M;
-    stars[i].Map    = smpdata[i].dM;
-    stars[i].fx     = smpdata[i].fx;
-    stars[i].fy     = smpdata[i].fy;
-    stars[i].df     = smpdata[i].df;
-  }    
-  *nstars = Nstars;
-  return (stars);
-
-escape:
-  gprint (GP_ERR, "error reading file\n");
-  *nstars = 0;
-  return (NULL);
-}
-
-CMPstars *cmpReadText (FILE *f, int *nstars) {
-
-  int j, N, Nextra, Ninstar, Nskip, Nbytes, nbytes;
-  int done;
-  char *buffer, *c, *c2;
-  double tmp;
-  CMPstars *stars;
-  
-  /* load in stars by blocks of 1000 */
-  N = 0;
-  ALLOCATE (buffer, char, (BLOCK*BYTES_STAR) + 1);
-  buffer[BLOCK*BYTES_STAR] = 0;
-  Nextra = 0;
-
-  ALLOCATE (stars, CMPstars, *nstars);
-
-  while (N < *nstars) {
-    /* load next data block */
-    Nbytes = BYTES_STAR * BLOCK - Nextra;
-    nbytes = fread (&buffer[Nextra], 1, Nbytes, f);
-    if (nbytes == 0) {
-      *nstars = N;
-      return (stars);
-    }
-    nbytes += Nextra;
-
-    /* check line-by-line integrity */
-    c = buffer;
-    done = FALSE;
-    while ((c < buffer + nbytes) && (!done)) { 
-      for (c2 = c; *c2 == '\n'; c2++);
-      if (c2 > c) { /* extra return chars */
-	memmove (c, c2, (int)(buffer + nbytes - c2));
-	Nskip = c2 - c;
-	nbytes -= Nskip;
-	bzero (buffer + nbytes, Nskip);
-	/* if (VERBOSE) gprint (GP_ERR, "deleted %d extra return chars\n", Nskip); */
-      }
-      c2 = strchr (c, '\n');
-      if (c2 == (char *) NULL) {
-	done = TRUE;	
-	continue;
-      }
-      c2++;
-      if ((c2 - c) != BYTES_STAR) { /* bad line, delete it */
-	memmove (c, c2, (int)(buffer + nbytes - c2));
-	Nskip = c2 - c;
-	nbytes -= Nskip;
-	bzero (buffer + nbytes, Nskip);
-	/* if (VERBOSE) gprint (GP_ERR, "deleted line, %d extra chars\n", Nskip); */
-      } else {
-	c = c2;
-      }
-    }
-
-    /* extract data for stars */
-    Ninstar = nbytes / BYTES_STAR;
-    Nextra = nbytes % BYTES_STAR;
-    for (j = 0; (j < Ninstar) && (N < *nstars); j++, N++) {
-      dparse (&stars[N].X,  1, &buffer[j*BYTES_STAR]);
-      dparse (&stars[N].Y,  2, &buffer[j*BYTES_STAR]);
-      dparse (&stars[N].M,  3, &buffer[j*BYTES_STAR]);
-
-      /* cmp files carry dM in millimags */
-      dparse (&tmp, 4, &buffer[j*BYTES_STAR]);
-      stars[N].dM = 0.001*tmp;
-
-      dparse (&tmp,         5, &buffer[j*BYTES_STAR]);
-      stars[N].dophot = tmp;
-
-      dparse (&stars[N].Mgal, 7, &buffer[j*BYTES_STAR]);
-      dparse (&stars[N].Map,  8, &buffer[j*BYTES_STAR]);
-      dparse (&stars[N].fx,   9, &buffer[j*BYTES_STAR]);
-      dparse (&stars[N].fy,  10, &buffer[j*BYTES_STAR]);
-      dparse (&stars[N].df,  11, &buffer[j*BYTES_STAR]);
-    }
-  }
-  *nstars = N;
-  return (stars);
-}
Index: trunk/Ohana/src/opihi/dvo/cmpReadFile.c
===================================================================
--- trunk/Ohana/src/opihi/dvo/cmpReadFile.c	(revision 12840)
+++ trunk/Ohana/src/opihi/dvo/cmpReadFile.c	(revision 12840)
@@ -0,0 +1,125 @@
+# include "dvoshell.h"
+# define D_NSTARS 1000
+# define BYTES_STAR 66
+# define BLOCK 1000
+
+CMPstars *cmpReadFits (FILE *f, int *nstars) {
+
+  int i, Nstars;
+  Header theader;
+  FTable table;
+  CMPstars *stars;
+  SMPData *smpdata;
+
+  /* if no stars, no table */
+  if (*nstars == 0) return (NULL);
+
+  /* init & load in table data */
+  table.header   = &theader;
+  if (!gfits_fread_ftable (f, &table, "SMPFILE")) goto escape;
+
+  smpdata = gfits_table_get_SMPData (&table, &Nstars, NULL);
+
+  ALLOCATE (stars, CMPstars, Nstars);
+  for (i = 0; i < Nstars; i++) {
+    stars[i].X      = smpdata[i].X;
+    stars[i].Y      = smpdata[i].Y;
+    stars[i].M      = smpdata[i].M;
+    stars[i].dM     = smpdata[i].dM;
+    stars[i].dophot = smpdata[i].dophot;
+
+    stars[i].Mgal   = smpdata[i].M;
+    stars[i].Map    = smpdata[i].dM;
+    stars[i].fx     = smpdata[i].fx;
+    stars[i].fy     = smpdata[i].fy;
+    stars[i].df     = smpdata[i].df;
+  }    
+  *nstars = Nstars;
+  return (stars);
+
+escape:
+  gprint (GP_ERR, "error reading file\n");
+  *nstars = 0;
+  return (NULL);
+}
+
+CMPstars *cmpReadText (FILE *f, int *nstars) {
+
+  int j, N, Nextra, Ninstar, Nskip, Nbytes, nbytes;
+  int done;
+  char *buffer, *c, *c2;
+  double tmp;
+  CMPstars *stars;
+  
+  /* load in stars by blocks of 1000 */
+  N = 0;
+  ALLOCATE (buffer, char, (BLOCK*BYTES_STAR) + 1);
+  buffer[BLOCK*BYTES_STAR] = 0;
+  Nextra = 0;
+
+  ALLOCATE (stars, CMPstars, *nstars);
+
+  while (N < *nstars) {
+    /* load next data block */
+    Nbytes = BYTES_STAR * BLOCK - Nextra;
+    nbytes = fread (&buffer[Nextra], 1, Nbytes, f);
+    if (nbytes == 0) {
+      *nstars = N;
+      return (stars);
+    }
+    nbytes += Nextra;
+
+    /* check line-by-line integrity */
+    c = buffer;
+    done = FALSE;
+    while ((c < buffer + nbytes) && (!done)) { 
+      for (c2 = c; *c2 == '\n'; c2++);
+      if (c2 > c) { /* extra return chars */
+	memmove (c, c2, (int)(buffer + nbytes - c2));
+	Nskip = c2 - c;
+	nbytes -= Nskip;
+	bzero (buffer + nbytes, Nskip);
+	/* if (VERBOSE) gprint (GP_ERR, "deleted %d extra return chars\n", Nskip); */
+      }
+      c2 = strchr (c, '\n');
+      if (c2 == (char *) NULL) {
+	done = TRUE;	
+	continue;
+      }
+      c2++;
+      if ((c2 - c) != BYTES_STAR) { /* bad line, delete it */
+	memmove (c, c2, (int)(buffer + nbytes - c2));
+	Nskip = c2 - c;
+	nbytes -= Nskip;
+	bzero (buffer + nbytes, Nskip);
+	/* if (VERBOSE) gprint (GP_ERR, "deleted line, %d extra chars\n", Nskip); */
+      } else {
+	c = c2;
+      }
+    }
+
+    /* extract data for stars */
+    Ninstar = nbytes / BYTES_STAR;
+    Nextra = nbytes % BYTES_STAR;
+    for (j = 0; (j < Ninstar) && (N < *nstars); j++, N++) {
+      dparse (&stars[N].X,  1, &buffer[j*BYTES_STAR]);
+      dparse (&stars[N].Y,  2, &buffer[j*BYTES_STAR]);
+      dparse (&stars[N].M,  3, &buffer[j*BYTES_STAR]);
+
+      /* cmp files carry dM in millimags */
+      dparse (&tmp, 4, &buffer[j*BYTES_STAR]);
+      stars[N].dM = 0.001*tmp;
+
+      dparse (&tmp,         5, &buffer[j*BYTES_STAR]);
+      stars[N].dophot = tmp;
+
+      dparse (&stars[N].Mgal, 7, &buffer[j*BYTES_STAR]);
+      dparse (&stars[N].Map,  8, &buffer[j*BYTES_STAR]);
+      dparse (&stars[N].fx,   9, &buffer[j*BYTES_STAR]);
+      dparse (&stars[N].fy,  10, &buffer[j*BYTES_STAR]);
+      dparse (&stars[N].df,  11, &buffer[j*BYTES_STAR]);
+    }
+  }
+  *nstars = N;
+  return (stars);
+}
Index: trunk/Ohana/src/opihi/include/pantasks.h
===================================================================
--- trunk/Ohana/src/opihi/include/pantasks.h	(revision 12753)
+++ trunk/Ohana/src/opihi/include/pantasks.h	(revision 12840)
@@ -138,16 +138,17 @@
   Task   *task;
 
-  IOBuffer    stdout;			/* stdout storage buffer */
-  IOBuffer    stderr;			/* stderr storage buffer */
+  /* this cries out for another structure... */
+  IOBuffer    stdout_buff;    /* stdout storage buffer */
+  char       *stdout_dump;    // output target file for stdout
+  int         stdout_size;    /* size of pending stdout buffer (controller) */
+  int         stdout_fd;      /* stdout pipe (local only) */
+
+  IOBuffer    stderr_buff;    /* stderr storage buffer */
+  char       *stderr_dump;    // output target file for stderr
+  int         stderr_size;    /* size of pending stderr buffer (controller) */
+  int         stderr_fd;      /* stderr pipe (local only) */
+
   JobMode     mode;			/* local or controller? */
-
-  char   *stdout_dump;
-  char   *stderr_dump;
   char   *realhost;
-
-  int         stdout_size;		/* size of pending stdout buffer (controller) */
-  int         stderr_size;		/* size of pending stderr buffer (controller) */
-  int         stdout_fd;		/* stdout pipe (local only) */
-  int         stderr_fd;		/* stderr pipe (local only) */
 
   double dtime;
Index: trunk/Ohana/src/opihi/include/pcontrol.h
===================================================================
--- trunk/Ohana/src/opihi/include/pcontrol.h	(revision 12753)
+++ trunk/Ohana/src/opihi/include/pcontrol.h	(revision 12840)
@@ -75,6 +75,6 @@
   JobStat      state;
   JobStat      stack;
-  IOBuffer     stdout;
-  IOBuffer     stderr;
+  IOBuffer     stdout_buff;
+  IOBuffer     stderr_buff;
   Ptime        start;
   Ptime        stop;
@@ -88,7 +88,7 @@
 typedef struct {
   char       *hostname;
-  int         stdin;
-  int         stdout;
-  int         stderr;
+  int         stdin_fd;
+  int         stdout_fd;
+  int         stderr_fd;
   int         markoff;
   int         pid;
Index: trunk/Ohana/src/opihi/pantasks/CheckJobs.c
===================================================================
--- trunk/Ohana/src/opihi/pantasks/CheckJobs.c	(revision 12753)
+++ trunk/Ohana/src/opihi/pantasks/CheckJobs.c	(revision 12840)
@@ -48,6 +48,6 @@
 	/* push output buffer data to the stdout and stderr queues */
 	/* XXX this will break on 0 values in output streams */
-	PushNamedQueue ("stdout", job[0].stdout.buffer);
-	PushNamedQueue ("stderr", job[0].stderr.buffer);
+	PushNamedQueue ("stdout", job[0].stdout_buff.buffer);
+	PushNamedQueue ("stderr", job[0].stderr_buff.buffer);
 
 	/* save the stdout and stderr if desired */
@@ -57,5 +57,5 @@
 	    gprint (GP_ERR, "unable to open stdout dump file %s\n", job[0].stdout_dump);
 	  } else {
-	    fwrite (job[0].stdout.buffer, 1, job[0].stdout.Nbuffer, f);
+	    fwrite (job[0].stdout_buff.buffer, 1, job[0].stdout_buff.Nbuffer, f);
 	    fclose (f);
 	  }
@@ -66,5 +66,5 @@
 	    gprint (GP_ERR, "unable to open stderr dump file %s\n", job[0].stderr_dump);
 	  } else {
-	    fwrite (job[0].stderr.buffer, 1, job[0].stderr.Nbuffer, f);
+	    fwrite (job[0].stderr_buff.buffer, 1, job[0].stderr_buff.Nbuffer, f);
 	    fclose (f);
 	  }
Index: trunk/Ohana/src/opihi/pantasks/ControllerOps.c
===================================================================
--- trunk/Ohana/src/opihi/pantasks/ControllerOps.c	(revision 12753)
+++ trunk/Ohana/src/opihi/pantasks/ControllerOps.c	(revision 12840)
@@ -29,5 +29,5 @@
   if ((job[0].state == JOB_EXIT) || (job[0].state == JOB_CRASH)) {
     gettimeofday (&start, (void *) NULL);
-    GetJobOutput ("stdout", job[0].pid, &job[0].stdout, job[0].stdout_size);
+    GetJobOutput ("stdout", job[0].pid, &job[0].stdout_buff, job[0].stdout_size);
     gettimeofday (&stop, (void *) NULL);
     dtime = DTIME (stop, start);
@@ -35,5 +35,5 @@
 
     gettimeofday (&start, (void *) NULL);
-    GetJobOutput ("stderr", job[0].pid, &job[0].stderr, job[0].stderr_size);
+    GetJobOutput ("stderr", job[0].pid, &job[0].stderr_buff, job[0].stderr_size);
     gettimeofday (&stop, (void *) NULL);
     dtime = DTIME (stop, start);
Index: trunk/Ohana/src/opihi/pantasks/JobOps.c
===================================================================
--- trunk/Ohana/src/opihi/pantasks/JobOps.c	(revision 12753)
+++ trunk/Ohana/src/opihi/pantasks/JobOps.c	(revision 12840)
@@ -143,6 +143,6 @@
      need to have matched entries to these quantites in the job structure */
 
-  InitIOBuffer (&job[0].stdout, 0x100);
-  InitIOBuffer (&job[0].stderr, 0x100);
+  InitIOBuffer (&job[0].stdout_buff, 0x100);
+  InitIOBuffer (&job[0].stderr_buff, 0x100);
 
   job[0].stdout_dump = NULL;
@@ -181,6 +181,6 @@
   if (job[0].stderr_dump != NULL) free (job[0].stderr_dump);
 
-  FreeIOBuffer (&job[0].stdout);
-  FreeIOBuffer (&job[0].stderr);
+  FreeIOBuffer (&job[0].stdout_buff);
+  FreeIOBuffer (&job[0].stderr_buff);
   free (job);
   return;
Index: trunk/Ohana/src/opihi/pantasks/LocalJob.c
===================================================================
--- trunk/Ohana/src/opihi/pantasks/LocalJob.c	(revision 12753)
+++ trunk/Ohana/src/opihi/pantasks/LocalJob.c	(revision 12840)
@@ -15,11 +15,11 @@
 
   if ((job[0].state == JOB_EXIT) || (job[0].state == JOB_CRASH)) {
-    EmptyIOBuffer (&job[0].stdout, 10, job[0].stdout_fd);
-    EmptyIOBuffer (&job[0].stderr, 10, job[0].stderr_fd);
+    EmptyIOBuffer (&job[0].stdout_buff, 10, job[0].stdout_fd);
+    EmptyIOBuffer (&job[0].stderr_buff, 10, job[0].stderr_fd);
     close (job[0].stdout_fd);
     close (job[0].stderr_fd);
   } else {
     /* read stdout buffer */
-    Nread = ReadtoIOBuffer (&job[0].stdout, job[0].stdout_fd);
+    Nread = ReadtoIOBuffer (&job[0].stdout_buff, job[0].stdout_fd);
     switch (Nread) {
       case -2:  /* error in read (programming error?  system level error?) */
@@ -34,5 +34,5 @@
   
     /* read stderr buffer */
-    Nread = ReadtoIOBuffer (&job[0].stderr, job[0].stderr_fd);
+    Nread = ReadtoIOBuffer (&job[0].stderr_buff, job[0].stderr_fd);
     switch (Nread) {
       case -2:  /* error in read (programming error?  system level error?) */
Index: trunk/Ohana/src/opihi/pclient/ChildOps.c
===================================================================
--- trunk/Ohana/src/opihi/pclient/ChildOps.c	(revision 12753)
+++ trunk/Ohana/src/opihi/pclient/ChildOps.c	(revision 12840)
@@ -3,5 +3,5 @@
 #include <sys/types.h>
 #include <unistd.h>
-#include <stropts.h>
+// #include <stropts.h>
 
 static int Nbad = 0;
Index: trunk/Ohana/src/opihi/pcontrol/CheckDoneJob.c
===================================================================
--- trunk/Ohana/src/opihi/pcontrol/CheckDoneJob.c	(revision 12753)
+++ trunk/Ohana/src/opihi/pcontrol/CheckDoneJob.c	(revision 12840)
@@ -12,6 +12,6 @@
 
   success = TRUE;
-  success &= GetJobOutput ("stdout", host, &job[0].stdout, job[0].stdout_size);
-  success &= GetJobOutput ("stderr", host, &job[0].stderr, job[0].stderr_size);
+  success &= GetJobOutput ("stdout", host, &job[0].stdout_buff, job[0].stdout_size);
+  success &= GetJobOutput ("stderr", host, &job[0].stderr_buff, job[0].stderr_size);
 
   if (!success) {
Index: trunk/Ohana/src/opihi/pcontrol/GetJobOutput.c
===================================================================
--- trunk/Ohana/src/opihi/pcontrol/GetJobOutput.c	(revision 12753)
+++ trunk/Ohana/src/opihi/pcontrol/GetJobOutput.c	(revision 12840)
@@ -14,5 +14,5 @@
 
   /* flush any earlier messages */
-  ReadtoIOBuffer (buffer, host[0].stdout);
+  ReadtoIOBuffer (buffer, host[0].stdout_fd);
   FlushIOBuffer (buffer);
   Nstart = buffer[0].Nbuffer;
@@ -23,5 +23,5 @@
 
   /* send cmd (stdout / stderr) */
-  status = write_fmt (host[0].stdin, "%s\n", cmd);
+  status = write_fmt (host[0].stdin_fd, "%s\n", cmd);
 
   /* is pipe still open? */
@@ -32,5 +32,5 @@
   status = -1;
   for (i = 0; (i < PCLIENT_TIMEOUT) && (status != 0) && (line == NULL); i++) {
-    status = ReadtoIOBuffer (buffer, host[0].stdout);
+    status = ReadtoIOBuffer (buffer, host[0].stdout_fd);
     if ((buffer[0].Nbuffer - Nstart) >= Nbytes) {
       line = memstr (buffer[0].buffer, PCLIENT_PROMPT, buffer[0].Nbuffer);
Index: trunk/Ohana/src/opihi/pcontrol/HostOps.c
===================================================================
--- trunk/Ohana/src/opihi/pcontrol/HostOps.c	(revision 12753)
+++ trunk/Ohana/src/opihi/pcontrol/HostOps.c	(revision 12840)
@@ -151,9 +151,9 @@
   ALLOCATE (host, Host, 1);
 
-  host[0].hostname = strcreate (hostname);
-  host[0].stdin    = 0;
-  host[0].stdout   = 0;
-  host[0].stderr   = 0;
-  host[0].HostID   = NextHostID();
+  host[0].hostname  = strcreate (hostname);
+  host[0].stdin_fd  = 0;
+  host[0].stdout_fd = 0;
+  host[0].stderr_fd = 0;
+  host[0].HostID    = NextHostID();
 
   host[0].lasttry.tv_sec = 0;
Index: trunk/Ohana/src/opihi/pcontrol/JobOps.c
===================================================================
--- trunk/Ohana/src/opihi/pcontrol/JobOps.c	(revision 12753)
+++ trunk/Ohana/src/opihi/pcontrol/JobOps.c	(revision 12840)
@@ -148,6 +148,6 @@
 
   /* do this step on start? */
-  InitIOBuffer (&job[0].stdout, 0x1000);
-  InitIOBuffer (&job[0].stderr, 0x1000);
+  InitIOBuffer (&job[0].stdout_buff, 0x1000);
+  InitIOBuffer (&job[0].stderr_buff, 0x1000);
 
   JobID = job[0].JobID;
@@ -167,6 +167,6 @@
   FREE (job[0].argv);
 
-  FreeIOBuffer (&job[0].stdout);
-  FreeIOBuffer (&job[0].stderr);
+  FreeIOBuffer (&job[0].stdout_buff);
+  FreeIOBuffer (&job[0].stderr_buff);
 
   FREE (job);
Index: trunk/Ohana/src/opihi/pcontrol/PclientCommand.c
===================================================================
--- trunk/Ohana/src/opihi/pcontrol/PclientCommand.c	(revision 12753)
+++ trunk/Ohana/src/opihi/pcontrol/PclientCommand.c	(revision 12840)
@@ -19,11 +19,11 @@
 
   // flush the stdout and stderr buffers here
-  ReadtoIOBuffer (buffer, host[0].stdout);
+  ReadtoIOBuffer (buffer, host[0].stdout_fd);
   FlushIOBuffer (buffer);
-  ReadtoIOBuffer (buffer, host[0].stderr);
+  ReadtoIOBuffer (buffer, host[0].stderr_fd);
   FlushIOBuffer (buffer);
 
   /* send command to client (adding on \n) */
-  status = write_fmt (host[0].stdin, "%s\n", command);
+  status = write_fmt (host[0].stdin_fd, "%s\n", command);
 
   /* is pipe still open? */
@@ -37,5 +37,5 @@
   status = -1;
   for (i = 0; (i < PCLIENT_TIMEOUT) && (status != 0) && (line == NULL); i++) {
-    status = ReadtoIOBuffer (buffer, host[0].stdout);
+    status = ReadtoIOBuffer (buffer, host[0].stdout_fd);
     line = memstr (buffer[0].buffer, response, buffer[0].Nbuffer);
     if (status == -1) nanosleep (&request, &remain);
Index: trunk/Ohana/src/opihi/pcontrol/StartHost.c
===================================================================
--- trunk/Ohana/src/opihi/pcontrol/StartHost.c	(revision 12753)
+++ trunk/Ohana/src/opihi/pcontrol/StartHost.c	(revision 12840)
@@ -39,8 +39,8 @@
   host[0].lasttry.tv_usec = 0;
 
-  host[0].stdin  = stdio[0];
-  host[0].stdout = stdio[1];
-  host[0].stderr = stdio[2];
-  host[0].pid    = pid;
+  host[0].stdin_fd  = stdio[0];
+  host[0].stdout_fd = stdio[1];
+  host[0].stderr_fd = stdio[2];
+  host[0].pid       = pid;
   PutHost (host, PCONTROL_HOST_IDLE, STACK_BOTTOM);
   return (TRUE);
Index: trunk/Ohana/src/opihi/pcontrol/StopHosts.c
===================================================================
--- trunk/Ohana/src/opihi/pcontrol/StopHosts.c	(revision 12753)
+++ trunk/Ohana/src/opihi/pcontrol/StopHosts.c	(revision 12840)
@@ -2,7 +2,7 @@
 
 void DownHost (Host *host) {
-  CLOSE (host[0].stdin);
-  CLOSE (host[0].stdout);
-  CLOSE (host[0].stderr);
+  CLOSE (host[0].stdin_fd);
+  CLOSE (host[0].stdout_fd);
+  CLOSE (host[0].stderr_fd);
   host[0].job = NULL;
   PutHost (host, PCONTROL_HOST_DOWN, STACK_BOTTOM);
@@ -10,7 +10,7 @@
 
 void OffHost (Host *host) {
-  CLOSE (host[0].stdin);
-  CLOSE (host[0].stdout);
-  CLOSE (host[0].stderr);
+  CLOSE (host[0].stdin_fd);
+  CLOSE (host[0].stdout_fd);
+  CLOSE (host[0].stderr_fd);
   host[0].job = NULL;
   PutHost (host, PCONTROL_HOST_OFF, STACK_BOTTOM);
Index: trunk/Ohana/src/opihi/pcontrol/stdout.c
===================================================================
--- trunk/Ohana/src/opihi/pcontrol/stdout.c	(revision 12753)
+++ trunk/Ohana/src/opihi/pcontrol/stdout.c	(revision 12840)
@@ -29,5 +29,5 @@
 
 found_stdout:
-  buffer = &job[0].stdout;
+  buffer = &job[0].stdout_buff;
   fwrite (buffer[0].buffer, 1, buffer[0].Nbuffer, stdout);
   gprint (GP_LOG, "STATUS %d\n", 0);
@@ -64,5 +64,5 @@
 
 found_stderr:
-  buffer = &job[0].stderr;
+  buffer = &job[0].stderr_buff;
   fwrite (buffer[0].buffer, 1, buffer[0].Nbuffer, stdout);
   gprint (GP_LOG, "STATUS %d\n", 0);
