Index: trunk/Ohana/src/kapa2/include/prototypes.h
===================================================================
--- trunk/Ohana/src/kapa2/include/prototypes.h	(revision 30605)
+++ trunk/Ohana/src/kapa2/include/prototypes.h	(revision 30606)
@@ -175,5 +175,5 @@
 void          DrawBitmap          PROTO((Graphic *graphic, int x, int y, int dx, int dy, char *bitmap, int mode));
 void          CrossHairs          PROTO((Graphic *graphic, Picture *image));
-void          hh_hms              PROTO((char *line, double ra, double dec, char sep));
+void          hh_hms              PROTO((char *line, double ra, double dec, char sep, int Nchar));
 
 int           SetColormap         PROTO((char *name));
Index: trunk/Ohana/src/kapa2/src/PSObjects.c
===================================================================
--- trunk/Ohana/src/kapa2/src/PSObjects.c	(revision 30605)
+++ trunk/Ohana/src/kapa2/src/PSObjects.c	(revision 30606)
@@ -164,5 +164,5 @@
   float *x, *y;
   double mxi, mxj, myi, myj, bxi, bxj, byi, byj, bx, by;
-  double sx0, sy0, sx1, sy1, sxa;
+  double sx0, sy0, sx1, sy1, sxa, sya, sxo, syo;
   double X0, X1, Y0, Y1;
 
@@ -189,4 +189,58 @@
   for (i = 0; (i < object[0].Npts) && !(finite(x[i]) && finite(y[i])); i++);
   if (i >= object[0].Npts) return;
+
+  /* first valid data point */
+  sx0 = x[i]*mxi + y[i]*mxj + bx;
+  sy0 = x[i]*myi + y[i]*myj + by;
+  sx0 = MIN (MAX (sx0, X0), X1);
+  sy0 = MAX (MIN (sy0, Y0), Y1);
+  
+  /* find the second valid datapoint */
+  for (i++; (i < object[0].Npts) && !(finite(x[i]) && finite(y[i])); i++);
+  if (i >= object[0].Npts) return;
+
+  /* second valid data point */
+  sx1 = x[i]*mxi + y[i]*mxj + bx;
+  sy1 = x[i]*myi + y[i]*myj + by;
+  sx1 = MIN (MAX (sx1, X0), X1);
+  sy1 = MAX (MIN (sy1, Y0), Y1);
+  
+  /* connect first point to second point */
+  sxa = sx0 - 0.5*(sx1 - sx0);
+  sya = MAX (sy0, Y0);
+  DrawLine (sx0, sy0, sxa, sy0);
+  DrawLine (sxa, sy0, sxa, sya);
+  
+  /* draw segment equal distance behind first point and down to x-axis */
+  sxa = 0.5*(sx0 + sx1);
+  DrawLine (sx0, sy0, sxa, sy0);
+  DrawLine (sxa, sy0, sxa, sy1);
+  DrawLine (sxa, sy1, sx1, sy1);
+  sx0 = sx1;
+  sy0 = sy1;
+  
+  /* continue with rest of points */
+  sxo = syo = 0;
+  for (i++; i < object[0].Npts; i++) {
+    if (!(finite(x[i]) && finite(y[i]))) continue;
+    sx1 = x[i]*mxi + y[i]*mxj + bx;
+    sy1 = x[i]*myi + y[i]*myj + by;
+    sx1 = MIN (MAX (sx1, X0), X1);
+    sy1 = MAX (MIN (sy1, Y0), Y1);
+    sxa = 0.5*(sx0 + sx1);
+    DrawLine (sx0, sy0, sxa, sy0);
+    DrawLine (sxa, sy0, sxa, sy1);
+    DrawLine (sxa, sy1, sx1, sy1);
+    sxo = sx0; syo = sy0;
+    sx0 = sx1; sy0 = sy1;
+  }
+  
+  /* draw segment equal distance after last point and down to x-axis */
+  sxa = sx1 + 0.5*(sx1 - sxo);
+  sya = MAX (sy1, Y0);
+  DrawLine (sx1, sy1, sxa, sy1);
+  DrawLine (sxa, sy1, sxa, sya);
+
+# if (0)
   sx0 = x[i]*mxi + y[i]*mxj + bx;
   sy0 = x[i]*myi + y[i]*myj + by;
@@ -207,4 +261,5 @@
     sx0 = sx1; sy0 = sy1;
   }
+# endif
 }
 
Index: trunk/Ohana/src/kapa2/src/UpdateStatusBox.c
===================================================================
--- trunk/Ohana/src/kapa2/src/UpdateStatusBox.c	(revision 30605)
+++ trunk/Ohana/src/kapa2/src/UpdateStatusBox.c	(revision 30606)
@@ -20,5 +20,5 @@
   
     bzero (line, 100);
-    sprintf (line, "(%d x %d) @ %d                                         ", 
+    snprintf (line, 100, "(%d x %d) @ %d                                         ", 
 	     image[0].picture.dx, image[0].picture.dy, image[0].picture.expand); 
     XDrawString (graphic[0].display, graphic[0].window, graphic[0].gc, 
@@ -26,10 +26,10 @@
     
     bzero (line, 100);
-    sprintf (line, "%-25s", image[0].image[0].file); 
+    snprintf (line, 100, "%-25s", image[0].image[0].file); 
     XDrawString (graphic[0].display, graphic[0].window, graphic[0].gc, 
 		 image[0].text_x + PAD1, image[0].text_y + 5*textpad + 5*PAD1, line, strlen(line));
     
     bzero (line, 100);
-    sprintf (line, "(%s)                                          ", image[0].image[0].name); 
+    snprintf (line, 100, "(%s)                                          ", image[0].image[0].name); 
     XDrawString (graphic[0].display, graphic[0].window, graphic[0].gc, 
 		 image[0].text_x + PAD1, image[0].text_y + 6*textpad + 6*PAD1, line, 25);
@@ -45,7 +45,7 @@
 
   if (image[0].HexValue) {
-    sprintf (line, "%04x", (int) z);
+      snprintf (line, 100, "%04x", (int) z);
   } else {
-    sprintf (line, "%22.3f", z);
+      snprintf (line, 100, "%22.3f", z);
   }
   XDrawString (graphic[0].display, graphic[0].window, graphic[0].gc, 
@@ -53,5 +53,5 @@
   
   bzero (line, 100);
-  sprintf (line, "%10.2f %10.2f", x, y);
+  snprintf (line, 100, "%10.2f %10.2f", x, y);
   XDrawString (graphic[0].display, graphic[0].window, graphic[0].gc, 
 	       image[0].text_x + PAD1, image[0].text_y + 2*textpad + 2*PAD1, line, strlen(line));
@@ -59,8 +59,9 @@
   bzero (line, 100);
   if (image[0].DecimalDegrees) {
-    sprintf (line, "%10.6f %10.6f", ra, dec); 
+    snprintf (line, 100, "%10.6f %10.6f", ra, dec); 
   } else {
-    hh_hms (line, ra, dec, ':');
+    hh_hms (line, ra, dec, ':', 100);
   }
+
   XDrawString (graphic[0].display, graphic[0].window, graphic[0].gc, 
 	       image[0].text_x + PAD1, image[0].text_y + 3*textpad + 3*PAD1, line, strlen(line));
Index: trunk/Ohana/src/kapa2/src/bDrawObjects.c
===================================================================
--- trunk/Ohana/src/kapa2/src/bDrawObjects.c	(revision 30605)
+++ trunk/Ohana/src/kapa2/src/bDrawObjects.c	(revision 30606)
@@ -154,5 +154,5 @@
   float *x, *y;
   double mxi, mxj, myi, myj, bxi, bxj, byi, byj, bx, by;
-  double sx0, sy0, sx1, sy1, sxa;
+  double sx0, sy0, sx1, sy1, sxa, sya, sxo, syo;
   double X0, X1, Y0, Y1;
 
@@ -179,4 +179,58 @@
   for (i = 0; (i < object[0].Npts) && !(finite(x[i]) && finite(y[i])); i++);
   if (i >= object[0].Npts) return;
+
+  /* first valid data point */
+  sx0 = x[i]*mxi + y[i]*mxj + bx;
+  sy0 = x[i]*myi + y[i]*myj + by;
+  sx0 = MIN (MAX (sx0, X0), X1);
+  sy0 = MAX (MIN (sy0, Y0), Y1);
+  
+  /* find the second valid datapoint */
+  for (i++; (i < object[0].Npts) && !(finite(x[i]) && finite(y[i])); i++);
+  if (i >= object[0].Npts) return;
+
+  /* second valid data point */
+  sx1 = x[i]*mxi + y[i]*mxj + bx;
+  sy1 = x[i]*myi + y[i]*myj + by;
+  sx1 = MIN (MAX (sx1, X0), X1);
+  sy1 = MAX (MIN (sy1, Y0), Y1);
+  
+  /* connect first point to second point */
+  sxa = sx0 - 0.5*(sx1 - sx0);
+  sya = MAX (sy0, Y0);
+  DrawLine (buffer, sx0, sy0, sxa, sy0);
+  DrawLine (buffer, sxa, sy0, sxa, sya);
+  
+  /* draw segment equal distance behind first point and down to x-axis */
+  sxa = 0.5*(sx0 + sx1);
+  DrawLine (buffer, sx0, sy0, sxa, sy0);
+  DrawLine (buffer, sxa, sy0, sxa, sy1);
+  DrawLine (buffer, sxa, sy1, sx1, sy1);
+  sx0 = sx1;
+  sy0 = sy1;
+  
+  /* continue with rest of points */
+  sxo = syo = 0;
+  for (i++; i < object[0].Npts; i++) {
+    if (!(finite(x[i]) && finite(y[i]))) continue;
+    sx1 = x[i]*mxi + y[i]*mxj + bx;
+    sy1 = x[i]*myi + y[i]*myj + by;
+    sx1 = MIN (MAX (sx1, X0), X1);
+    sy1 = MAX (MIN (sy1, Y0), Y1);
+    sxa = 0.5*(sx0 + sx1);
+    DrawLine (buffer, sx0, sy0, sxa, sy0);
+    DrawLine (buffer, sxa, sy0, sxa, sy1);
+    DrawLine (buffer, sxa, sy1, sx1, sy1);
+    sxo = sx0; syo = sy0;
+    sx0 = sx1; sy0 = sy1;
+  }
+  
+  /* draw segment equal distance after last point and down to x-axis */
+  sxa = sx1 + 0.5*(sx1 - sxo);
+  sya = MAX (sy1, Y0);
+  DrawLine (buffer, sx1, sy1, sxa, sy1);
+  DrawLine (buffer, sxa, sy1, sxa, sya);
+
+# if (0)
   sx0 = x[i]*mxi + y[i]*mxj + bx;
   sy0 = x[i]*myi + y[i]*myj + by;
@@ -197,4 +251,5 @@
     sx0 = sx1; sy0 = sy1;
   }
+# endif
 }
 
Index: trunk/Ohana/src/kapa2/src/hh_hms.c
===================================================================
--- trunk/Ohana/src/kapa2/src/hh_hms.c	(revision 30605)
+++ trunk/Ohana/src/kapa2/src/hh_hms.c	(revision 30606)
@@ -1,5 +1,5 @@
 # include "Ximage.h"
 
-void hh_hms (char *line, double ra, double dec, char sep) {
+void hh_hms (char *line, double ra, double dec, char sep, int Nchar) {
 
   int h, m, flag;
@@ -13,7 +13,7 @@
   s = 3600*(ra - h - m / 60.0);
   if (flag > 0)
-    sprintf (line, " %02d%c%02d%c%04.1f  ", h, sep, m, sep, s);
+    snprintf (line, Nchar, " %02d%c%02d%c%04.1f  ", h, sep, m, sep, s);
   else
-    sprintf (line, "-%02d%c%02d%c%04.1f  ", h, sep, m, sep, s);
+    snprintf (line, Nchar, "-%02d%c%02d%c%04.1f  ", h, sep, m, sep, s);
   
   flag = SIGN(dec);
@@ -23,6 +23,6 @@
   s = 3600*(dec - h - m / 60.0);
   if (flag > 0)
-    sprintf (&line[13], " %02d%c%02d%c%04.1f", h, sep, m, sep, s);
+    snprintf (&line[13], Nchar, " %02d%c%02d%c%04.1f", h, sep, m, sep, s);
   else
-    sprintf (&line[13], "-%02d%c%02d%c%04.1f", h, sep, m, sep, s);
+    snprintf (&line[13], Nchar, "-%02d%c%02d%c%04.1f", h, sep, m, sep, s);
 }
