Index: /trunk/Ohana/src/addstar/src/MatchHeaders.c
===================================================================
--- /trunk/Ohana/src/addstar/src/MatchHeaders.c	(revision 26257)
+++ /trunk/Ohana/src/addstar/src/MatchHeaders.c	(revision 26258)
@@ -6,5 +6,5 @@
 
   int i, j, Nimage, NIMAGE;
-  char extname[80], exttype[80], exthead[80];
+  char extname[80], exttype[80], exthead[80], xtension[80];
   HeaderSet *headerSets;
 
@@ -46,4 +46,8 @@
       extsize[0][i] = headers[i][0].size + gfits_data_size (headers[i]);
     }
+
+    // is this a fits table? (otherwise we skip it)
+    if (!gfits_scan (headers[i], "XTENSION", "%s", 1, xtension)) continue;
+    if (strcmp (xtension, "BINTABLE")) continue;
 
     if (!gfits_scan (headers[i], "EXTTYPE", "%s", 1, exttype)) continue;
Index: /trunk/Ohana/src/getstar/src/getstar.c
===================================================================
--- /trunk/Ohana/src/getstar/src/getstar.c	(revision 26257)
+++ /trunk/Ohana/src/getstar/src/getstar.c	(revision 26258)
@@ -74,4 +74,5 @@
 	/* skip empty catalogs */
 	select_by_region (&output, &catalog, &REGION, 0, 0);
+	dvo_catalog_free (&catalog);
       }
       break;
Index: /trunk/Ohana/src/opihi/cmd.astro/cgrid.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.astro/cgrid.c	(revision 26257)
+++ /trunk/Ohana/src/opihi/cmd.astro/cgrid.c	(revision 26258)
@@ -1,19 +1,97 @@
 # include "astro.h"
-# define CHECKELEMENTS \
-  if (N == NELEMENTS) { \
-    NELEMENTS +=200; \
-    REALLOCATE (Xvec.elements.Flt, opihi_flt, NELEMENTS); \
-    REALLOCATE (Yvec.elements.Flt, opihi_flt, NELEMENTS); \
+
+# define GRID_SPACING 0.002
+
+# define CHECKELEMENTS						\
+  if (N == NELEMENTS) {						\
+    NELEMENTS +=200;						\
+    REALLOCATE (Xvec.elements.Flt, opihi_flt, NELEMENTS);	\
+    REALLOCATE (Yvec.elements.Flt, opihi_flt, NELEMENTS);	\
+  }
+
+# define ADD_COORDINATE(RA,DEC)						\
+  status = RD_to_XY (&Xvec.elements.Flt[N], &Yvec.elements.Flt[N], (RA), (DEC), &graphmode.coords); \
+  if ((Xvec.elements.Flt[N] >= graphmode.xmin) && (Xvec.elements.Flt[N] <= graphmode.xmax) && \
+      (Yvec.elements.Flt[N] >= graphmode.ymin) && (Yvec.elements.Flt[N] <= graphmode.ymax) && status) { \
+    N++;								\
+    CHECKELEMENTS;							\
+    OnPic = TRUE;							\
+    if (!First) {							\
+      Xvec.elements.Flt[N] = Xvec.elements.Flt[N-1];			\
+      Yvec.elements.Flt[N] = Yvec.elements.Flt[N-1];			\
+      N++;								\
+      CHECKELEMENTS;							\
+    } else {								\
+      if (N > 1) {							\
+	Xvec.elements.Flt[N-2] = Xvec.elements.Flt[N-1];		\
+	Yvec.elements.Flt[N-2] = Yvec.elements.Flt[N-1];		\
+	N--;								\
+      }									\
+      First = FALSE;							\
+    }									\
+  } else {								\
+    LOnPic = FALSE;							\
+    First = TRUE;							\
+  }
+
+# define ADD_DEC_LINE(RA)						\
+  /* first, DEC increasing */						\
+  LOnPic = TRUE;							\
+  OnPic = FALSE;							\
+  First = TRUE;								\
+  for (d = firstDEC; (d < 90 + dD) && (LOnPic || NorthPole || SouthPole); d += dD) { \
+    D = MAX (-90, MIN(90, d));						\
+    ADD_COORDINATE((RA), D);						\
+  }									\
+  /* next, DEC decreasing */						\
+  First = TRUE;								\
+  LOnPic = TRUE;							\
+  for (d = firstDEC; (d > -90 - dD) && (LOnPic || NorthPole || SouthPole); d -= dD) { \
+    D = MAX (-90, MIN(90, d));						\
+    ADD_COORDINATE((RA), D);						\
+  } 
+
+# define ADD_RA_LINE(DEC)						\
+  D = MAX (-90, MIN(90, (DEC)));					\
+  /* first, RA increasing */						\
+  LOnPic = TRUE;							\
+  OnPic = FALSE;							\
+  First = TRUE;								\
+  lastRA = graphmode.coords.crval1 + 180.0;				\
+  for (r = firstRA; (r < lastRA + dR) && (LOnPic || NorthPole || SouthPole); r += dR) { \
+    R = MIN (r, lastRA);					\
+    ADD_COORDINATE(R, D);						\
+  }									\
+  /* next, RA decreasing */						\
+  First = TRUE;								\
+  LOnPic = TRUE;							\
+  lastRA = graphmode.coords.crval1 - 180.0;				\
+  for (r = firstRA; (r > lastRA - dR) && (LOnPic || NorthPole || SouthPole); r -= dR) { \
+    R = MAX (r, lastRA);					\
+    ADD_COORDINATE(R, D);						\
   }
 
 int cgrid (int argc, char **argv) {
   
-  double range, lrange, factor, mantis, power, fmantis;
-  double firstRA, firstDEC, minorRA, minorDEC;
-  double r, d, dR, dD, D;
+  double range, minor, major;
+  double firstRA, lastRA, firstDEC, minorRA, minorDEC;
+  double r, d, dR, dD, R, D;
   double x, y;
   Vector Xvec, Yvec;
-  int kapa, NorthPole, SouthPole, N, OnPic, LOnPic, status, NELEMENTS, First;
+  int kapa, NorthPole, SouthPole, N, OnPic, LOnPic, status, NELEMENTS;
+  int First, RAbyHour, Labels;
   Graphdata graphmode;
+
+  RAbyHour = FALSE;
+  if ((N = get_argument (argc, argv, "-ra-by-hour"))) {
+    remove_argument (N, &argc, argv);
+    RAbyHour = TRUE;
+  }
+
+  Labels = FALSE;
+  if ((N = get_argument (argc, argv, "-labels"))) {
+    remove_argument (N, &argc, argv);
+    Labels = TRUE;
+  }
 
   if (!style_args (&graphmode, &argc, argv, &kapa)) return FALSE;
@@ -39,45 +117,19 @@
   range = MIN (fabs(graphmode.coords.cdelt1*(graphmode.xmax-graphmode.xmin)), fabs(graphmode.coords.cdelt2*(graphmode.ymax-graphmode.ymin)));
   if (NorthPole || SouthPole) range = 360;
-  lrange = log10(MAX(fabs(range), 1e-30));
-  factor = (int) (lrange);
-  if (lrange < 0) { factor -= 1; }
-  mantis = lrange - factor;
-  power = pow(10.0, factor);
-  fmantis = pow(10.0, mantis);
-  if ((fmantis >= 1.0) && (fmantis <=  2.0)) {
-    minorRA = 0.1 * power;
-  }
-  if ((fmantis > 2.0) && (fmantis <=  4.0)) {
-    minorRA = 0.2 * power;
-  }
-  if ((fmantis > 4.0) && (fmantis <=  6.0)) {
-    minorRA = 0.5 * power;
-  }
-  if ((fmantis > 6.0) && (fmantis <=  10.0)) {
-    minorRA = 0.5 * power;
-  }
-  dR = range / 100.0;
+
+  if (RAbyHour) {
+    SetGridScales (&major, &minor, range / 15.0);
+    minorRA = minor * 15.0;
+  } else {
+    SetGridScales (&major, &minor, range);
+    minorRA = minor;
+  }
+  dR = range * GRID_SPACING;
 
   /* set spacings for DEC */
   range = MIN (fabs(graphmode.coords.cdelt1*(graphmode.xmax-graphmode.xmin)), fabs(graphmode.coords.cdelt2*(graphmode.ymax-graphmode.ymin)));
-  lrange = log10(MAX(fabs(range), 1e-30));
-  factor = (int) (lrange);
-  if (lrange < 0) { factor -= 1; }
-  mantis = lrange - factor;
-  power = pow(10.0, factor);
-  fmantis = pow(10.0, mantis);
-  if ((fmantis >= 1.0) && (fmantis <=  2.0)) {
-    minorDEC = 0.1 * power;
-  }
-  if ((fmantis > 2.0) && (fmantis <=  4.0)) {
-    minorDEC = 0.2 * power;
-  }
-  if ((fmantis > 4.0) && (fmantis <=  6.0)) {
-    minorDEC = 0.5 * power;
-  }
-  if ((fmantis > 6.0) && (fmantis <=  10.0)) {
-    minorDEC = 0.5 * power;
-  }
-  dD = range / 100.0;
+  SetGridScales (&major, &minor, range);
+  minorDEC = minor;
+  dD = range * GRID_SPACING;
 
   /* choose a starting point */
@@ -103,288 +155,115 @@
   /***  do consecutive RA lines, first increasing **/
   OnPic = TRUE;
-  for (r = firstRA; (r <= firstRA + 180) && (OnPic); r += minorRA) {
-    /* first, DEC increasing */
-    LOnPic = TRUE;
-    OnPic = FALSE;
-    First = TRUE;
-    for (d = firstDEC; (d < 90 + dD) && (LOnPic || NorthPole || SouthPole); d += dD) {
-      D = MAX (-90, MIN(90, d));
-      status = RD_to_XY (&Xvec.elements.Flt[N], &Yvec.elements.Flt[N], r, D, &graphmode.coords);
-      /*
-      if ((fabs(Xvec.elements.Flt[N] - Xvec.elements.Flt[N-1]) > 10) && (fabs(Yvec.elements.Flt[N] - Yvec.elements.Flt[N-1]) > 10))
-	First = TRUE;
-	*/
-      if ((Xvec.elements.Flt[N] >= graphmode.xmin) && (Xvec.elements.Flt[N] <= graphmode.xmax) && 
-	  (Yvec.elements.Flt[N] >= graphmode.ymin) && (Yvec.elements.Flt[N] <= graphmode.ymax) && status) {
-	N++;
-	CHECKELEMENTS;
-	OnPic = TRUE;
-	if (!First) {
-	  Xvec.elements.Flt[N] = Xvec.elements.Flt[N-1];
-	  Yvec.elements.Flt[N] = Yvec.elements.Flt[N-1];
-	  N++;
-	  CHECKELEMENTS;
-	} else {
-	  if (N > 1) {
-	    Xvec.elements.Flt[N-2] = Xvec.elements.Flt[N-1];
-	    Yvec.elements.Flt[N-2] = Yvec.elements.Flt[N-1];
-	    N--;
-	  }
-	  First = FALSE;
-	}
+  lastRA = graphmode.coords.crval1 + 180.0;
+  for (r = firstRA; (r <= lastRA) && (OnPic); r += minorRA) {
+    ADD_DEC_LINE (r);
+  }
+  if (r != lastRA) {
+    ADD_DEC_LINE (lastRA);
+  }
+
+  /***  do consecutive RA lines, decreasing **/
+  OnPic = TRUE;
+  lastRA = graphmode.coords.crval1 - 180.0;
+  for (r = firstRA; (r >=  lastRA) && (OnPic); r -= minorRA) {
+    ADD_DEC_LINE (r);
+  }
+  if (r != lastRA) {
+    ADD_DEC_LINE (lastRA);
+  }
+
+  /***  do consecutive DEC lines, first increasing **/
+  OnPic = TRUE;
+  for (d = firstDEC; (d < 90 + dD) && (OnPic); d += minorDEC) {
+    ADD_RA_LINE (d);
+  }
+
+  /***  do consecutive DEC lines, decreasing **/
+  OnPic = TRUE;
+  for (d = firstDEC; (d > -90 - dD) && (OnPic); d -= minorDEC) {
+    ADD_RA_LINE (d);
+  }
+  
+  // add labels for center lines:
+  if (Labels) { 
+    char line[16], format[8];
+    double xt, yt, dx, dy, frac;
+    dx = +0.01 * (graphmode.xmax - graphmode.xmin);
+    dy = -0.02 * (graphmode.ymax - graphmode.ymin);
+
+    for (r = firstRA; r <= graphmode.coords.crval1 + 180.0; r += minorRA) {
+      status = RD_to_XY (&xt, &yt, r, graphmode.coords.crval2, &graphmode.coords);
+      if (!status) continue;
+      if (xt < graphmode.xmin) continue;
+      if (xt > graphmode.xmax) continue;
+      if (yt < graphmode.ymin) continue;
+      if (yt > graphmode.ymax) continue;
+      frac = -1.0 * log10(minorRA);
+      if (frac != (int)frac) {
+	frac += 1.0;
+      }
+      if (frac <= 0.0) frac = 0.0;
+      snprintf (format, 8, "%%.%df", (int) frac);
+      if (RAbyHour) {
+	snprintf (line, 16, format, r / 15.0);
       } else {
-	LOnPic = FALSE;
-	First = TRUE;
-      }
-    }
-    /* next, DEC decreasing */
-    First = TRUE;
-    LOnPic = TRUE;
-    for (d = firstDEC; (d > -90 - dD) && (LOnPic || NorthPole || SouthPole); d -= dD) {
-      D = MAX (-90, MIN(90, d));
-      status = RD_to_XY (&Xvec.elements.Flt[N], &Yvec.elements.Flt[N], r, D, &graphmode.coords);
-      /*
-      if ((fabs(Xvec.elements.Flt[N] - Xvec.elements.Flt[N-1]) > 10) && (fabs(Yvec.elements.Flt[N] - Yvec.elements.Flt[N-1]) > 10))
-	First = TRUE;
-	*/
-      if ((Xvec.elements.Flt[N] >= graphmode.xmin) && (Xvec.elements.Flt[N] <= graphmode.xmax) && 
-	  (Yvec.elements.Flt[N] >= graphmode.ymin) && (Yvec.elements.Flt[N] <= graphmode.ymax) && status) {
-	N++;
-	CHECKELEMENTS;
-	OnPic = TRUE;
-	if (!First) {
-	  Xvec.elements.Flt[N] = Xvec.elements.Flt[N-1];
-	  Yvec.elements.Flt[N] = Yvec.elements.Flt[N-1];
-	  N++;
-	  CHECKELEMENTS;
-	} else {
-	  if (N > 1) {
-	    Xvec.elements.Flt[N-2] = Xvec.elements.Flt[N-1];
-	    Yvec.elements.Flt[N-2] = Yvec.elements.Flt[N-1];
-	    N--;
-	  }
-	  First = FALSE;
-	}
+	snprintf (line, 16, format, r);
+      }
+      KapaSendTextline (kapa, line, xt + dx, yt + dy, 0.0);
+    }
+    for (r = firstRA; r >= graphmode.coords.crval1 - 180.0; r -= minorRA) {
+      status = RD_to_XY (&xt, &yt, r, graphmode.coords.crval2, &graphmode.coords);
+      if (!status) continue;
+      if (xt < graphmode.xmin) continue;
+      if (xt > graphmode.xmax) continue;
+      if (yt < graphmode.ymin) continue;
+      if (yt > graphmode.ymax) continue;
+      frac = -1.0 * log10(minorRA);
+      if (frac != (int)frac) {
+	frac += 1.0;
+      }
+      if (frac <= 0.0) frac = 0.0;
+      snprintf (format, 8, "%%.%df", (int) frac);
+      if (RAbyHour) {
+	snprintf (line, 16, format, r / 15.0);
       } else {
-	LOnPic = FALSE;
-	First = TRUE;
-      } 
-    }
-  }
-
-  /***  do consecutive RA lines, decreasing **/
-  OnPic = TRUE;
-  for (r = firstRA; (r >=  firstRA - 180) && (OnPic); r -= minorRA) {
-    /* first, DEC increasing */
-    First = TRUE;
-    LOnPic = TRUE;
-    OnPic = FALSE;
-    for (d = firstDEC; (d < 90 + dD) && (LOnPic || NorthPole || SouthPole); d += dD) {
-      D = MAX (-90, MIN(90, d));
-      status = RD_to_XY (&Xvec.elements.Flt[N], &Yvec.elements.Flt[N], r, D, &graphmode.coords);
-      /*
-      if ((fabs(Xvec.elements.Flt[N] - Xvec.elements.Flt[N-1]) > 10) && (fabs(Yvec.elements.Flt[N] - Yvec.elements.Flt[N-1]) > 10))
-	First = TRUE;
-	*/
-      if ((Xvec.elements.Flt[N] >= graphmode.xmin) && (Xvec.elements.Flt[N] <= graphmode.xmax) && 
-	  (Yvec.elements.Flt[N] >= graphmode.ymin) && (Yvec.elements.Flt[N] <= graphmode.ymax) && status) {
-	N++;
-	CHECKELEMENTS;
-	OnPic = TRUE;
-	if (!First) {
-	  Xvec.elements.Flt[N] = Xvec.elements.Flt[N-1];
-	  Yvec.elements.Flt[N] = Yvec.elements.Flt[N-1];
-	  N++;
-	  CHECKELEMENTS;
-	} else {
-	  if (N > 1) {
-	    Xvec.elements.Flt[N-2] = Xvec.elements.Flt[N-1];
-	    Yvec.elements.Flt[N-2] = Yvec.elements.Flt[N-1];
-	    N--;
-	  }
-	  First = FALSE;
-	}
-      } else {
-	LOnPic = FALSE;
-	First = TRUE;
-      }
-    }
-    /* next, DEC decreasing */
-    First = TRUE;
-    LOnPic = TRUE;
-    for (d = firstDEC; (d > -90 - dD) && (LOnPic || NorthPole || SouthPole); d -= dD) {
-      D = MAX (-90, MIN(90, d));
-      status = RD_to_XY (&Xvec.elements.Flt[N], &Yvec.elements.Flt[N], r, D, &graphmode.coords);
-      /*
-      if ((fabs(Xvec.elements.Flt[N] - Xvec.elements.Flt[N-1]) > 10) && (fabs(Yvec.elements.Flt[N] - Yvec.elements.Flt[N-1]) > 10))
-	First = TRUE;
-	*/
-      if ((Xvec.elements.Flt[N] >= graphmode.xmin) && (Xvec.elements.Flt[N] <= graphmode.xmax) && 
-	  (Yvec.elements.Flt[N] >= graphmode.ymin) && (Yvec.elements.Flt[N] <= graphmode.ymax) && status) {
-	N++;
-	CHECKELEMENTS;
-	OnPic = TRUE;
-	if (!First) {
-	  Xvec.elements.Flt[N] = Xvec.elements.Flt[N-1];
-	  Yvec.elements.Flt[N] = Yvec.elements.Flt[N-1];
-	  N++;
-	  CHECKELEMENTS;
-	} else {
-	  if (N > 1) {
-	    Xvec.elements.Flt[N-2] = Xvec.elements.Flt[N-1];
-	    Yvec.elements.Flt[N-2] = Yvec.elements.Flt[N-1];
-	    N--;
-	  }
-	  First = FALSE;
-	}
-      } else {
-	LOnPic = FALSE;
-	First = TRUE;
-      }
-    }
-  }
-
-  /***  do consecutive DEC lines, first increasing **/
-  OnPic = TRUE;
-  for (d = firstDEC; (d < 90 + dD) && (OnPic); d += minorDEC) {
-    D = MAX (-90, MIN(90, d));
-    /* first, RA increasing */
-    LOnPic = TRUE;
-    OnPic = FALSE;
-    First = TRUE;
-    for (r = firstRA; (r < firstRA + 180) && (LOnPic || NorthPole || SouthPole); r += dR) {
-      status = RD_to_XY (&Xvec.elements.Flt[N], &Yvec.elements.Flt[N], r, D, &graphmode.coords);
-      /*
-      if ((fabs(Xvec.elements.Flt[N] - Xvec.elements.Flt[N-1]) > 10) && (fabs(Yvec.elements.Flt[N] - Yvec.elements.Flt[N-1]) > 10))
-	First = TRUE;
-	*/
-      if ((Xvec.elements.Flt[N] >= graphmode.xmin) && (Xvec.elements.Flt[N] <= graphmode.xmax) && 
-	  (Yvec.elements.Flt[N] >= graphmode.ymin) && (Yvec.elements.Flt[N] <= graphmode.ymax) && status) {
-	N++;
-	CHECKELEMENTS;
-	OnPic = TRUE;
-	if (!First) {
-	  Xvec.elements.Flt[N] = Xvec.elements.Flt[N-1];
-	  Yvec.elements.Flt[N] = Yvec.elements.Flt[N-1];
-	  N++;
-	  CHECKELEMENTS;
-	} else {
-	  if (N > 1) {
-	    Xvec.elements.Flt[N-2] = Xvec.elements.Flt[N-1];
-	    Yvec.elements.Flt[N-2] = Yvec.elements.Flt[N-1];
-	    N--;
-	  }
-	  First = FALSE;
-	}
-      } else {
-	LOnPic = FALSE;
-	First = TRUE;
-      }
-    }
-    /* next, RA decreasing */
-    First = TRUE;
-    LOnPic = TRUE;
-    for (r = firstRA; (r > firstRA - 180) && (LOnPic || NorthPole || SouthPole); r -= dR) {
-      status = RD_to_XY (&Xvec.elements.Flt[N], &Yvec.elements.Flt[N], r, D, &graphmode.coords);
-      /*
-      if ((fabs(Xvec.elements.Flt[N] - Xvec.elements.Flt[N-1]) > 10) && (fabs(Yvec.elements.Flt[N] - Yvec.elements.Flt[N-1]) > 10))
-	First = TRUE;
-	*/
-      if ((Xvec.elements.Flt[N] >= graphmode.xmin) && (Xvec.elements.Flt[N] <= graphmode.xmax) && 
-	  (Yvec.elements.Flt[N] >= graphmode.ymin) && (Yvec.elements.Flt[N] <= graphmode.ymax) && status) {
-	N++;
-	CHECKELEMENTS;
-	OnPic = TRUE;
-	if (!First) {
-	  Xvec.elements.Flt[N] = Xvec.elements.Flt[N-1];
-	  Yvec.elements.Flt[N] = Yvec.elements.Flt[N-1];
-	  N++;
-	  CHECKELEMENTS;
-	} else {
-	  if (N > 1) {
-	    Xvec.elements.Flt[N-2] = Xvec.elements.Flt[N-1];
-	    Yvec.elements.Flt[N-2] = Yvec.elements.Flt[N-1];
-	    N--;
-	  }
-	  First = FALSE;
-	}
-      } else {
-	LOnPic = FALSE;
-	First = TRUE;
-      }
-    }
-  }
-
-  /***  do consecutive DEC lines, decreasing **/
-  OnPic = TRUE;
-  for (d = firstDEC; (d > -90 - dD) && (OnPic); d -= minorDEC) {
-    D = MAX (-90, MIN(90, d));
-    /* first, RA increasing */
-    LOnPic = TRUE;
-    OnPic = FALSE;
-    First = TRUE;
-    for (r = firstRA; (r < firstRA + 180) && (LOnPic || NorthPole || SouthPole); r += dR) {
-      status = RD_to_XY (&Xvec.elements.Flt[N], &Yvec.elements.Flt[N], r, D, &graphmode.coords);
-      /*
-      if ((fabs(Xvec.elements.Flt[N] - Xvec.elements.Flt[N-1]) > 10) && (fabs(Yvec.elements.Flt[N] - Yvec.elements.Flt[N-1]) > 10))
-	First = TRUE;
-	*/
-      if ((Xvec.elements.Flt[N] >= graphmode.xmin) && (Xvec.elements.Flt[N] <= graphmode.xmax) && 
-	  (Yvec.elements.Flt[N] >= graphmode.ymin) && (Yvec.elements.Flt[N] <= graphmode.ymax) && status) {
-	N++;
-	CHECKELEMENTS;
-	OnPic = TRUE;
-	if (!First) {
-	  Xvec.elements.Flt[N] = Xvec.elements.Flt[N-1];
-	  Yvec.elements.Flt[N] = Yvec.elements.Flt[N-1];
-	  N++;
-	  CHECKELEMENTS;
-	} else {
-	  if (N > 1) {
-	    Xvec.elements.Flt[N-2] = Xvec.elements.Flt[N-1];
-	    Yvec.elements.Flt[N-2] = Yvec.elements.Flt[N-1];
-	    N--;
-	  }
-	  First = FALSE;
-	}
-      } else {
-	LOnPic = FALSE;
-	First = TRUE;
-      }
-    }
-    /* next, RA decreasing */
-    First = TRUE;
-    LOnPic = TRUE;
-    for (r = firstRA; (r > firstRA - 180) && (LOnPic || NorthPole || SouthPole); r -= dR) {
-      status = RD_to_XY (&Xvec.elements.Flt[N], &Yvec.elements.Flt[N], r, D, &graphmode.coords);
-      /*
-      if ((fabs(Xvec.elements.Flt[N] - Xvec.elements.Flt[N-1]) > 10) && (fabs(Yvec.elements.Flt[N] - Yvec.elements.Flt[N-1]) > 10))
-	First = TRUE;
-	*/
-      if ((Xvec.elements.Flt[N] >= graphmode.xmin) && (Xvec.elements.Flt[N] <= graphmode.xmax) && 
-	  (Yvec.elements.Flt[N] >= graphmode.ymin) && (Yvec.elements.Flt[N] <= graphmode.ymax) && status) {
-	N++;
-	CHECKELEMENTS;
-	OnPic = TRUE;
-	if (!First) {
-	  Xvec.elements.Flt[N] = Xvec.elements.Flt[N-1];
-	  Yvec.elements.Flt[N] = Yvec.elements.Flt[N-1];
-	  N++;
-	  CHECKELEMENTS;
-	} else {
-	  if (N > 1) {
-	    Xvec.elements.Flt[N-2] = Xvec.elements.Flt[N-1];
-	    Yvec.elements.Flt[N-2] = Yvec.elements.Flt[N-1];
-	    N--;
-	  }
-	  First = FALSE;
-	}
-      } else {
-	LOnPic = FALSE;
-	First = TRUE;
-      }
-    }
-  }
-  
+	snprintf (line, 16, format, r);
+      }
+      KapaSendTextline (kapa, line, xt + dx, yt + dy, 0.0);
+    }
+    for (d = firstDEC; d <= graphmode.coords.crval2 + 90.0; d += minorDEC) {
+      status = RD_to_XY (&xt, &yt, graphmode.coords.crval1, d, &graphmode.coords);
+      if (!status) continue;
+      if (xt < graphmode.xmin) continue;
+      if (xt > graphmode.xmax) continue;
+      if (yt < graphmode.ymin) continue;
+      if (yt > graphmode.ymax) continue;
+      frac = -1.0 * log10(minorDEC);
+      if (frac != (int)frac) {
+	frac += 1.0;
+      }
+      if (frac <= 0.0) frac = 0.0;
+      snprintf (format, 8, "%%.%df", (int) frac);
+      snprintf (line, 16, format, d);
+      KapaSendTextline (kapa, line, xt + dx, yt + dy, 0.0);
+    }
+    for (d = firstDEC; d >= graphmode.coords.crval2 - 90.0; d -= minorDEC) {
+      status = RD_to_XY (&xt, &yt, graphmode.coords.crval1, d, &graphmode.coords);
+      if (!status) continue;
+      if (xt < graphmode.xmin) continue;
+      if (xt > graphmode.xmax) continue;
+      if (yt < graphmode.ymin) continue;
+      if (yt > graphmode.ymax) continue;
+      frac = -1.0 * log10(minorDEC);
+      if (frac != (int)frac) {
+	frac += 1.0;
+      }
+      if (frac <= 0.0) frac = 0.0;
+      snprintf (format, 8, "%%.%df", (int) frac);
+      snprintf (line, 16, format, d);
+      KapaSendTextline (kapa, line, xt + dx, yt + dy, 0.0);
+    }
+  }
+
   /* send the line segments as connect-points */
   Xvec.Nelements = Yvec.Nelements = N;
Index: /trunk/Ohana/src/opihi/cmd.data/grid.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/grid.c	(revision 26257)
+++ /trunk/Ohana/src/opihi/cmd.data/grid.c	(revision 26258)
@@ -1,9 +1,38 @@
 # include "data.h"
+
+int SetGridScales (double *major, double *minor, double range) {
+
+  double lrange, factor, mantis, fmantis, power;
+
+  lrange = log10(MAX(fabs(range), 1e-30));
+  factor = (int) (lrange);
+  if (lrange < 0) { factor -= 1; }
+  mantis = lrange - factor;
+  power = pow(10.0, factor);
+  fmantis = pow(10.0, mantis);
+  if ((fmantis >= 1.0) && (fmantis <=  2.0)) {
+    *major = 0.5 * power;
+    *minor = 0.1 * power;
+  }
+  if ((fmantis > 2.0) && (fmantis <=  4.0)) {
+    *major = 1.0 * power;
+    *minor = 0.2 * power;
+  }
+  if ((fmantis > 4.0) && (fmantis <=  6.0)) {
+    *major = 1.0 * power;
+    *minor = 0.5 * power;
+  }
+  if ((fmantis > 6.0) && (fmantis <=  10.0)) {
+    *major = 2.0 * power;
+    *minor = 0.5 * power;
+  }
+  return TRUE;
+}
 
 int grid (int argc, char **argv) {
   
+  double range, major, minor, first, next;
   int j, kapa, N, MinorTick, MajorTick;
   Vector Xvec, Yvec;
-  double range, lrange, factor, mantis, fmantis, power, major, minor, first, next;
   Graphdata graphmode;
 
@@ -28,26 +57,5 @@
   major = minor = 1;
   range = graphmode.xmax - graphmode.xmin;
-  lrange = log10(MAX(fabs(range), 1e-30));
-  factor = (int) (lrange);
-  if (lrange < 0) { factor -= 1; }
-  mantis = lrange - factor;
-  power = pow(10.0, factor);
-  fmantis = pow(10.0, mantis);
-  if ((fmantis >= 1.0) && (fmantis <=  2.0)) {
-    major = 0.5 * power;
-    minor = 0.1 * power;
-  }
-  if ((fmantis > 2.0) && (fmantis <=  4.0)) {
-    major = 1.0 * power;
-    minor = 0.2 * power;
-  }
-  if ((fmantis > 4.0) && (fmantis <=  6.0)) {
-    major = 1.0 * power;
-    minor = 0.5 * power;
-  }
-  if ((fmantis > 6.0) && (fmantis <=  10.0)) {
-    major = 2.0 * power;
-    minor = 0.5 * power;
-  }
+  SetGridScales (&major, &minor, range);
   if (graphmode.xmin > 0)
     first = minor + minor*((int)(graphmode.xmin/minor));
@@ -108,26 +116,5 @@
 
   range = graphmode.ymax - graphmode.ymin;
-  lrange = log10(MAX(fabs(range), 1e-30));
-  factor = (int) (lrange);
-  if (lrange < 0) { factor -= 1; }
-  mantis = lrange - factor;
-  power = pow(10.0, factor);
-  fmantis = pow(10.0, mantis);
-  if ((fmantis >= 1.0) && (fmantis <=  2.0)) {
-    major = 0.5 * power;
-    minor = 0.1 * power;
-  }
-  if ((fmantis > 2.0) && (fmantis <=  4.0)) {
-    major = 1.0 * power;
-    minor = 0.2 * power;
-  }
-  if ((fmantis > 4.0) && (fmantis <=  6.0)) {
-    major = 1.0 * power;
-    minor = 0.5 * power;
-  }
-  if ((fmantis > 6.0) && (fmantis <=  10.0)) {
-    major = 2.0 * power;
-    minor = 0.5 * power;
-  }
+  SetGridScales (&major, &minor, range);
   if (graphmode.ymin > 0)
     first = minor + minor*((int)(graphmode.ymin/minor));
Index: /trunk/Ohana/src/opihi/dvo/dbExtractMeasures.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/dbExtractMeasures.c	(revision 26257)
+++ /trunk/Ohana/src/opihi/dvo/dbExtractMeasures.c	(revision 26258)
@@ -298,4 +298,7 @@
     case MEAS_PHOTCODE_EQUIV: /* OK */
       value.Int = GetPhotcodeEquivCodebyCode (measure[0].photcode);
+      break;
+    case MEAS_PHOTCODE: /* OK */
+      value.Int = measure[0].photcode;
       break;
     case MEAS_TIME: /* OK */
Index: /trunk/Ohana/src/opihi/include/data.h
===================================================================
--- /trunk/Ohana/src/opihi/include/data.h	(revision 26257)
+++ /trunk/Ohana/src/opihi/include/data.h	(revision 26258)
@@ -143,4 +143,6 @@
 double get_epoch (char *in_epoch, char mode);
 
+int SetGridScales (double *major, double *minor, double range);
+
 /* graphtools.c */
 void          SetLimits             PROTO((Vector *xvec, Vector *yvec, Graphdata *graphmode));
