Index: /trunk/Ohana/src/kapa2/src/LoadOverlay.c
===================================================================
--- /trunk/Ohana/src/kapa2/src/LoadOverlay.c	(revision 15619)
+++ /trunk/Ohana/src/kapa2/src/LoadOverlay.c	(revision 15620)
@@ -75,10 +75,11 @@
   j = image[0].overlay[overnum].Nobjects;
   for (i = 0; i < Noverlay; i++, j++) {
-    image[0].overlay[overnum].objects[j].x = overlay[i].x;
-    image[0].overlay[overnum].objects[j].y = overlay[i].y;
-    image[0].overlay[overnum].objects[j].dx = overlay[i].dx;
-    image[0].overlay[overnum].objects[j].dy = overlay[i].dy;
-    image[0].overlay[overnum].objects[j].type = overlay[i].type;
-    image[0].overlay[overnum].objects[j].text = NULL;
+    image[0].overlay[overnum].objects[j].x     = overlay[i].x;
+    image[0].overlay[overnum].objects[j].y     = overlay[i].y;
+    image[0].overlay[overnum].objects[j].dx    = overlay[i].dx;
+    image[0].overlay[overnum].objects[j].dy    = overlay[i].dy;
+    image[0].overlay[overnum].objects[j].angle = overlay[i].angle;
+    image[0].overlay[overnum].objects[j].type  = overlay[i].type;
+    image[0].overlay[overnum].objects[j].text  = NULL;
   }
 
Index: /trunk/Ohana/src/kapa2/src/PSOverlay.c
===================================================================
--- /trunk/Ohana/src/kapa2/src/PSOverlay.c	(revision 15619)
+++ /trunk/Ohana/src/kapa2/src/PSOverlay.c	(revision 15620)
@@ -58,4 +58,5 @@
 	  break;
 	}
+	// XXX add in the rotated ellipse version (rotate in PS space)
 	fprintf (f, " %6.1f %6.1f %6.1f C\n", X, Y, fabs(dX + extra));
 	break;
Index: /trunk/Ohana/src/kapa2/src/PaintOverlay.c
===================================================================
--- /trunk/Ohana/src/kapa2/src/PaintOverlay.c	(revision 15619)
+++ /trunk/Ohana/src/kapa2/src/PaintOverlay.c	(revision 15620)
@@ -5,6 +5,6 @@
   int i;
   int dX, dY, dx, dy;
-  int X, Y, Xmin, Ymin, Xmax, Ymax, Xrange, Yrange;
-  double expand, X0, Y0;
+  int x, y, X, Y, Xmin, Ymin, Xmax, Ymax, Xrange, Yrange;
+  double t, expand, X0, Y0;
  
   XSetForeground (graphic[0].display, graphic[0].gc, image[0].overlay[N].color);
@@ -43,7 +43,9 @@
     switch (image[0].overlay[N].objects[i].type) {
       case KII_OVERLAY_LINE:
+	// the angle makes no sense for a line...
 	XDrawLine (graphic[0].display, graphic[0].window, graphic[0].gc, X, Y, (X+dX), (Y+dY));
 	break;
       case KII_OVERLAY_TEXT:
+	// XXX currently we ignore the rectangle angle
 	XDrawString (graphic[0].display, graphic[0].window, graphic[0].gc, X, Y, image[0].overlay[N].objects[i].text, strlen(image[0].overlay[N].objects[i].text));
 	break;
@@ -51,4 +53,5 @@
 	dx = MAX (abs(dX),2) / 2;
 	dy = MAX (abs(dY),2) / 2;
+	// XXX currently we ignore the rectangle angle
 	XDrawRectangle (graphic[0].display, graphic[0].window, graphic[0].gc, (X - dx), (Y - dy), 2*dx, 2*dy);
 	break;
@@ -56,5 +59,18 @@
 	dx = MAX (abs(dX),2);
 	dy = MAX (abs(dY),2);
-	XDrawArc (graphic[0].display, graphic[0].window, graphic[0].gc, (X - dx), (Y - dy), 2*dx, 2*dy, 0, 23040);
+	if (image[0].overlay[N].objects[i].angle == 0.0) {
+	  XDrawArc (graphic[0].display, graphic[0].window, graphic[0].gc, (X - dx), (Y - dy), 2*dx, 2*dy, 0, 23040);
+	} else {
+	  // very stupid rotate ellipse drawing:
+	  double angle = image[0].overlay[N].objects[i].angle * RAD_DEG;
+	  double cs = cos(angle);
+	  double sn = sin(angle);
+	  // XXX dt should be based on the size of the ellipse...
+	  for (t = 0; t < 2*M_PI; t+=0.05) {
+	    x = X + dx*cos(t)*cs + dy*sin(t)*sn;
+	    y = Y - dx*cos(t)*sn + dy*sin(t)*cs;
+	    XDrawPoint (graphic[0].display, graphic[0].window, graphic[0].gc, x, y);
+	  }
+	}
 	break;
       default:
Index: /trunk/Ohana/src/kapa2/src/bDrawOverlay.c
===================================================================
--- /trunk/Ohana/src/kapa2/src/bDrawOverlay.c	(revision 15619)
+++ /trunk/Ohana/src/kapa2/src/bDrawOverlay.c	(revision 15620)
@@ -72,5 +72,19 @@
 	dx = MAX (abs(dX),2);
 	dy = MAX (abs(dY),2);
-	bDrawArc (X, Y, dx, dy, 0, 360);
+	if (image[0].overlay[N].objects[i].angle == 0.0) {
+	  bDrawArc (X, Y, dx, dy, 0, 360);
+	} else {
+	  // very stupid rotate ellipse drawing:
+	  double x, y, t;
+	  double angle = image[0].overlay[N].objects[i].angle * RAD_DEG;
+	  double cs = cos(angle);
+	  double sn = sin(angle);
+	  // XXX dt should be based on the size of the ellipse...
+	  for (t = 0; t < 2*M_PI; t+=0.05) {
+	    x = X + dx*cos(t)*cs + dy*sin(t)*sn;
+	    y = Y - dx*cos(t)*sn + dy*sin(t)*cs;
+	    bDrawPoint (x, y);
+	  }
+	}
 	break;
       default:
Index: /trunk/Ohana/src/libkapa/include/kapa.h
===================================================================
--- /trunk/Ohana/src/libkapa/include/kapa.h	(revision 15619)
+++ /trunk/Ohana/src/libkapa/include/kapa.h	(revision 15620)
@@ -27,4 +27,5 @@
   float dx;
   float dy;
+  float angle;
   int type;
 } KiiOverlayBase;
@@ -35,4 +36,5 @@
   float dx;
   float dy;
+  float angle;
   int type;
   char *text;
Index: /trunk/Ohana/src/libkapa/src/KiiOverlay.c
===================================================================
--- /trunk/Ohana/src/libkapa/src/KiiOverlay.c	(revision 15619)
+++ /trunk/Ohana/src/libkapa/src/KiiOverlay.c	(revision 15620)
@@ -50,47 +50,4 @@
 }
 
-int KiiLoadOverlayOld (int fd, KiiOverlay *overlay, int Noverlay, char *overname) {
-
-  int i, n, Nline;
-  char *buffer, *type;
-
-  KiiSelectOverlay (overname, &n);
-
-  KiiSendCommand (fd, 4, "LOAD");
-  KiiSendCommand (fd, 16, "OVER %9d ", n);
-
-  Nline = 0;
-  ALLOCATE (buffer, char, 65536);  /* space for 512 lines of 128 bytes */
-  bzero (buffer, 65536);
-
-  for (i = 0; i < Noverlay; i++) {
-    type = KiiOverlayTypeByNumber(overlay[i].type);
-    if (overlay[i].type == KII_OVERLAY_TEXT) {
-      snprintf (&buffer[Nline*128], 128, "%15s %20.10f %20.10f %s ", type, overlay[i].x, overlay[i].y, overlay[i].text);
-    } else {
-      snprintf (&buffer[Nline*128], 128, "%15s %20.10f %20.10f %20.10f %20.10f ", type, overlay[i].x, overlay[i].y, overlay[i].dx, overlay[i].dy);
-    }
-    Nline ++;
-    if (Nline == 512) {
-      KiiSendCommand (fd, 16, "NLINES  %7d ", Nline);
-      write (fd, buffer, Nline*128);
-      bzero (buffer, 65536);
-      Nline = 0;
-    }
-  }
-  KiiSendCommand (fd, 16, "NLINES  %7d ", Nline);
-  write (fd, buffer, Nline*128);
-  KiiSendCommand (fd, 16, "DONE 0");
-
-  free (buffer);
-  KiiWaitAnswer (fd, "DONE");
-
-  /* this is very inefficient: 128 bytes per object vs 17 as binary, plus the
-     conversions back and forth
-  */
-
-  return (TRUE);
-}
-
 int KiiLoadOverlay (int fd, KiiOverlay *overlay, int Noverlay, char *overname) {
 
@@ -109,9 +66,10 @@
   ALLOCATE (buffer, KiiOverlayBase, Noverlay);
   for (i = 0; i < Noverlay; i++) {
-    buffer[i].x    = overlay[i].x;
-    buffer[i].y    = overlay[i].y;
-    buffer[i].dx   = overlay[i].dx;
-    buffer[i].dy   = overlay[i].dy;
-    buffer[i].type = overlay[i].type;
+    buffer[i].x     = overlay[i].x;
+    buffer[i].y     = overlay[i].y;
+    buffer[i].dx    = overlay[i].dx;
+    buffer[i].dy    = overlay[i].dy;
+    buffer[i].angle = overlay[i].angle;
+    buffer[i].type  = overlay[i].type;
     if (buffer[i].type == KII_OVERLAY_TEXT) {
       Ntext ++;
@@ -131,5 +89,4 @@
   // we could break this into segments if we want to trap an interrupt, but why bother?
   Nchar = write (fd, buffer, Noverlay*sizeof(KiiOverlayBase));
-  fprintf (stderr, "sent %d of %ld bytes\n", Nchar, Noverlay*sizeof(KiiOverlayBase));
   KiiWaitAnswer (fd, "DONE");
 
Index: /trunk/Ohana/src/opihi/cmd.data/point.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.data/point.c	(revision 15619)
+++ /trunk/Ohana/src/opihi/cmd.data/point.c	(revision 15620)
@@ -5,5 +5,5 @@
   int N, celestial, pixscale;
   int kapa;
-  double ra, dec, dra, ddec;
+  double ra, dec, dra, ddec, angle;
   double x1, y1, ra1, dec1;
   char *name;
@@ -32,4 +32,11 @@
     remove_argument (N, &argc, argv);
     pixscale = TRUE;
+  }
+
+  angle = 0.0;
+  if ((N = get_argument (argc, argv, "-angle"))) {
+    remove_argument (N, &argc, argv);
+    angle = atof(argv[N]);
+    remove_argument (N, &argc, argv);
   }
 
@@ -68,4 +75,5 @@
     overlay.dy = atof(argv[6]);
   }
+  overlay.angle = angle;
   overlay.type = KiiOverlayTypeByName (argv[2]);
   KiiLoadOverlay (kapa, &overlay, 1, argv[1]);
