Index: trunk/Ohana/src/opihi/cmd.data/ungridify.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.data/ungridify.c	(revision 7917)
+++ trunk/Ohana/src/opihi/cmd.data/ungridify.c	(revision 20936)
@@ -1,4 +1,5 @@
 # include "data.h"
 
+// XXX adapt this to accept an optional region to limit the areas, otherwise use the whole image
 int ungridify (int argc, char **argv) {
 
@@ -6,10 +7,12 @@
   int Nx, Ny, NX, NY;
   int Xmin, Xmax, Ymin, Ymax;
-  float *v, *x, *y, *z;
   Buffer *bf;
+  float *v;
   Vector *vx, *vy, *vz;
+  opihi_flt *x, *y, *z;
 
   if (argc != 9) {
     gprint (GP_ERR, "USAGE: ungridify buffer Xmin Xmax Ymin Ymax x y z\n");
+    gprint (GP_ERR, "  convert a portion of an image to a collection a triplet of vectors\n");
     return (FALSE);
   }
@@ -29,26 +32,28 @@
   if ((vy = SelectVector (argv[7], ANYVECTOR, TRUE)) == NULL) return (FALSE);
   if ((vz = SelectVector (argv[8], ANYVECTOR, TRUE)) == NULL) return (FALSE);
-  REALLOCATE (vx[0].elements, float, Nx*Ny);
-  REALLOCATE (vy[0].elements, float, Nx*Ny);
-  REALLOCATE (vz[0].elements, float, Nx*Ny);
 
-  x = vx[0].elements;
-  y = vy[0].elements;
-  z = vz[0].elements;
+  ResetVector (vx, OPIHI_FLT, Nx*Ny);
+  ResetVector (vy, OPIHI_FLT, Nx*Ny);
+  ResetVector (vz, OPIHI_FLT, Nx*Ny);
+
+  x = vx[0].elements.Flt;
+  y = vy[0].elements.Flt;
+  z = vz[0].elements.Flt;
   n = 0;
   v = (float *)bf[0].matrix.buffer;
   for (j = Ymin; j < Ymax; j++) {
     for (i = Xmin; i < Xmax; i++, x++, y++, z++, n++) {
-      vx[0].elements[n] = i;
-      vy[0].elements[n] = j;
+      vx[0].elements.Flt[n] = i;
+      vy[0].elements.Flt[n] = j;
       if (i < 0) continue;
       if (i >= NX) continue;
       if (j < 0) continue;
       if (j >= NY) continue;
-      vz[0].elements[n] = v[i+j*NX];
+      vz[0].elements.Flt[n] = v[i+j*NX];
     }
   }
   if (n != Nx*Ny) {
     gprint (GP_ERR, "error in ungrid: %d vs %d (%d x %d)\n", n, Nx*Ny, Nx, Ny);
+    gprint (GP_ERR, "(this is probably a programming error in ungridify)\n");
   }
   vx[0].Nelements = vy[0].Nelements = vz[0].Nelements = n;
