Index: /branches/kapa-mods-2007-05/Ohana/src/kapa2/Makefile
===================================================================
--- /branches/kapa-mods-2007-05/Ohana/src/kapa2/Makefile	(revision 13433)
+++ /branches/kapa-mods-2007-05/Ohana/src/kapa2/Makefile	(revision 13434)
@@ -65,7 +65,7 @@
 $(SRC)/CreatePicture.$(ARCH).o            $(SRC)/CreateColorbar.$(ARCH).o     \
 $(SRC)/MakeColormap.$(ARCH).o		  $(SRC)/SetColormap.$(ARCH).o        \
-$(SRC)/PaintOverlay.$(ARCH).o		  $(SRC)/SetGraphStyle.$(ARCH).o      \
+$(SRC)/PaintOverlay.$(ARCH).o		  $(SRC)/SetGraphData.$(ARCH).o       \
 $(SRC)/LoadOverlay.$(ARCH).o		  $(SRC)/EraseOverlay.$(ARCH).o       \
-$(SRC)/SaveOverlay.$(ARCH).o        \
+$(SRC)/SaveOverlay.$(ARCH).o              $(SRC)/SetImageData.$(ARCH).o       \
 $(SRC)/CSaveOverlay.$(ARCH).o		  $(SRC)/EraseOverlay.$(ARCH).o       \
 $(SRC)/CheckVisual.$(ARCH).o              $(SRC)/CursorOps.$(ARCH).o          \
Index: /branches/kapa-mods-2007-05/Ohana/src/kapa2/include/prototypes.h
===================================================================
--- /branches/kapa-mods-2007-05/Ohana/src/kapa2/include/prototypes.h	(revision 13433)
+++ /branches/kapa-mods-2007-05/Ohana/src/kapa2/include/prototypes.h	(revision 13434)
@@ -63,6 +63,8 @@
 int           EraseSections       PROTO((void));
 int           EraseImage          PROTO((void));
-int           SetGraphStyle       PROTO((int sock));
-int           GetGraphStyle       PROTO((int sock));
+int           SetGraphData        PROTO((int sock));
+int           GetGraphData        PROTO((int sock));
+int           SetImageData        PROTO((int sock));
+int           GetImageData        PROTO((int sock));
 
 int           LoadVectorData      PROTO((int sock, KapaGraphWidget *graph, int N, char *type));
Index: /branches/kapa-mods-2007-05/Ohana/src/kapa2/include/structures.h
===================================================================
--- /branches/kapa-mods-2007-05/Ohana/src/kapa2/include/structures.h	(revision 13433)
+++ /branches/kapa-mods-2007-05/Ohana/src/kapa2/include/structures.h	(revision 13434)
@@ -116,5 +116,5 @@
   Axis      axis[4];    /* coordinate axes */
   Label     label[8];   /* fixed axis labels */
-  Graphdata style;      /* current graph style */
+  Graphdata data;       /* current graph data */
 
   Gobjects *objects;    /* graphic objects */    
@@ -161,5 +161,5 @@
   Coords   coords;
   char     file[1024];     /* name of file */
-  char     buffer_name[1024];  /* name of buffer */
+  char     name[1024];  /* name of buffer */
 } KapaImageWidget;
 
Index: /branches/kapa-mods-2007-05/Ohana/src/kapa2/src/CheckPipe.c
===================================================================
--- /branches/kapa-mods-2007-05/Ohana/src/kapa2/src/CheckPipe.c	(revision 13433)
+++ /branches/kapa-mods-2007-05/Ohana/src/kapa2/src/CheckPipe.c	(revision 13434)
@@ -132,5 +132,5 @@
   
   if (!strcmp (word, "GSTY")) {
-    GetGraphStyle (sock);
+    GetGraphData (sock);
     KiiSendCommand (sock, 4, "DONE");
     FINISHED (TRUE);
@@ -138,5 +138,17 @@
   
   if (!strcmp (word, "SSTY")) {
-    status = SetGraphStyle (sock);
+    status = SetGraphData (sock);
+    KiiSendCommand (sock, 4, "DONE");
+    FINISHED (TRUE);
+  }
+  
+  if (!strcmp (word, "GIMD")) {
+    GetImageData (sock);
+    KiiSendCommand (sock, 4, "DONE");
+    FINISHED (TRUE);
+  }
+  
+  if (!strcmp (word, "SIMD")) {
+    status = SetImageData (sock);
     KiiSendCommand (sock, 4, "DONE");
     FINISHED (TRUE);
Index: /branches/kapa-mods-2007-05/Ohana/src/kapa2/src/Graphs.c
===================================================================
--- /branches/kapa-mods-2007-05/Ohana/src/kapa2/src/Graphs.c	(revision 13433)
+++ /branches/kapa-mods-2007-05/Ohana/src/kapa2/src/Graphs.c	(revision 13434)
@@ -21,8 +21,8 @@
   }
 
-  graph[0].style.xmin = 0.0;
-  graph[0].style.xmax = 1.0;
-  graph[0].style.ymin = 0.0;
-  graph[0].style.ymax = 1.0;
+  graph[0].data.xmin = 0.0;
+  graph[0].data.xmax = 1.0;
+  graph[0].data.ymin = 0.0;
+  graph[0].data.ymax = 1.0;
 
   graph[0].Nobjects = 0;
Index: /branches/kapa-mods-2007-05/Ohana/src/kapa2/src/LoadPicture.c
===================================================================
--- /branches/kapa-mods-2007-05/Ohana/src/kapa2/src/LoadPicture.c	(revision 13433)
+++ /branches/kapa-mods-2007-05/Ohana/src/kapa2/src/LoadPicture.c	(revision 13434)
@@ -23,10 +23,9 @@
   KiiScanMessage (sock, "%d %d %d %d %lf %lf", &header.Naxis[0], &header.Naxis[1]);
   KiiScanMessage (sock, "%d %d %d %d %lf %lf", &header.bitpix, &header.unsign, &header.bzero, &header.bscale);
-  KiiScanMessage (sock, "%lf %lf",  &image[0].zero, &image[0].range);
+  KiiScanMessage (sock, "%lf %lf %s",  &image[0].zero, &image[0].range, image[0].name, image[0].file);
   KiiScanMessage (sock, "%lf %lf %d", &image[0].min,  &image[0].max, &header.size);
   KiiScanMessage (sock, "%lf %f %f %f %f", &image[0].coords.crval1, &image[0].coords.crpix1, &image[0].coords.cdelt1, &image[0].coords.pc1_1, &image[0].coords.pc1_2);
   KiiScanMessage (sock, "%lf %f %f %f %f", &image[0].coords.crval2, &image[0].coords.crpix2, &image[0].coords.cdelt2, &image[0].coords.pc2_1, &image[0].coords.pc2_2);
-	  
-  KiiScanMessage (sock, "%s %s %s", image[0].coords.ctype, image[0].file, image[0].buffer_name);
+  KiiScanMessage (sock, "%s", image[0].coords.ctype);
 
   gfits_free_matrix (&image[0].matrix);
Index: /branches/kapa-mods-2007-05/Ohana/src/kapa2/src/SetGraphData.c
===================================================================
--- /branches/kapa-mods-2007-05/Ohana/src/kapa2/src/SetGraphData.c	(revision 13434)
+++ /branches/kapa-mods-2007-05/Ohana/src/kapa2/src/SetGraphData.c	(revision 13434)
@@ -0,0 +1,84 @@
+# include "Ximage.h"
+
+int SetGraphData (int sock) {
+  
+  int i;
+  double xmin, xmax, ymin, ymax;
+  Graphic *graphic;
+  Section *section;
+  KapaGraphWidget *graph;
+
+  graphic = GetGraphic();
+
+  section = GetActiveSection();
+  if (section->graph == NULL) {
+    section->graph = InitGraph ();
+    SetSectionSizes (section);
+  }
+  graph = section->graph;
+  
+  // get graph data from client 
+  KiiScanMessage (sock, "%d %d %d %d %d %d %lf %lf", 
+		  &graph[0].data.style, 
+		  &graph[0].data.ptype, 
+		  &graph[0].data.ltype, 
+		  &graph[0].data.etype, 
+		  &graph[0].data.ebar, 
+		  &graph[0].data.color, 
+		  &graph[0].data.lweight, 
+		  &graph[0].data.size);
+
+  KiiScanMessage (sock, "%lf %lf %lf %lf", 
+		  &graph[0].data.xmin, 
+		  &graph[0].data.xmax, 
+		  &graph[0].data.ymin, 
+		  &graph[0].data.ymax);
+
+  xmin = graph[0].data.xmin;
+  xmax = graph[0].data.xmax;
+  ymin = graph[0].data.ymin;
+  ymax = graph[0].data.ymax;
+
+  // XXX there are now two things which track the graph limits
+  // make sure these are kept in sync (or drop one!)
+  graph[0].axis[2].min = graph[0].axis[0].min = xmin;
+  graph[0].axis[2].max = graph[0].axis[0].max = xmax;
+  graph[0].axis[3].min = graph[0].axis[1].min = ymin; 
+  graph[0].axis[3].max = graph[0].axis[1].max = ymax;
+  
+  for (i = 0; i < graph[0].Nobjects; i++) {
+    graph[0].objects[i].x0 = xmin;
+    graph[0].objects[i].x1 = xmax;
+    graph[0].objects[i].y0 = ymin;
+    graph[0].objects[i].y1 = ymax;
+  }
+
+  if (USE_XWINDOW) XClearWindow (graphic->display, graphic->window);
+  Refresh (1);
+
+  return (TRUE);  
+}
+
+int GetGraphData (int sock) {
+  
+  Section *section;
+  KapaGraphWidget *graph;
+
+  section = GetActiveSection();
+  if (section->graph == NULL) {
+    section->graph = InitGraph ();
+    SetSectionSizes (section);
+  }
+  graph = section->graph;
+
+  KiiSendMessage (sock, "%8d %d %d %d %d %d %f %f", 
+		  graph[0].data.style, 
+		  graph[0].data.ptype, graph[0].data.ltype, 
+		  graph[0].data.etype, graph[0].data.ebar, graph[0].data.color, 
+		  graph[0].data.lweight, graph[0].data.size);
+  KiiSendMessage (sock, "%g %g %g %g", 
+		  graph[0].data.xmin, graph[0].data.xmax, 
+		  graph[0].data.ymin, graph[0].data.ymax);
+
+  return (TRUE);
+}
Index: /branches/kapa-mods-2007-05/Ohana/src/kapa2/src/SetImageData.c
===================================================================
--- /branches/kapa-mods-2007-05/Ohana/src/kapa2/src/SetImageData.c	(revision 13434)
+++ /branches/kapa-mods-2007-05/Ohana/src/kapa2/src/SetImageData.c	(revision 13434)
@@ -0,0 +1,53 @@
+# include "Ximage.h"
+
+int SetImageData (int sock) {
+  
+  int i;
+  double xmin, xmax, ymin, ymax;
+  Graphic *graphic;
+  Section *section;
+  KapaImageWidget *image;
+
+  graphic = GetGraphic();
+
+  section = GetActiveSection();
+  if (section->image == NULL) {
+    section->image = InitImage ();
+    SetSectionSizes (section);
+  }
+  image = section->image;
+  
+  // get image data from client 
+  KiiScanMessage (sock, "%lf %lf %s", 
+		  &image[0].zero, 
+		  &image[0].range, 
+		  image[0].name, 
+		  image[0].file);
+
+  // XXX when we go to 32bit, this should remap the image
+  // if (USE_XWINDOW) XClearWindow (graphic->display, graphic->window);
+  // Refresh (1);
+
+  return (TRUE);  
+}
+
+int GetImageData (int sock) {
+  
+  Section *section;
+  KapaImageWidget *image;
+
+  section = GetActiveSection();
+  if (section->image == NULL) {
+    section->image = InitImage ();
+    SetSectionSizes (section);
+  }
+  image = section->image;
+
+  KiiSendMessage (sock, "%g %g %s %s", 
+		  image[0].zero,
+		  image[0].range,
+		  image[0].name,
+		  image[0].file);
+
+  return (TRUE);
+}
Index: /branches/kapa-mods-2007-05/Ohana/src/kapa2/src/UpdateStatusBox.c
===================================================================
--- /branches/kapa-mods-2007-05/Ohana/src/kapa2/src/UpdateStatusBox.c	(revision 13433)
+++ /branches/kapa-mods-2007-05/Ohana/src/kapa2/src/UpdateStatusBox.c	(revision 13434)
@@ -31,5 +31,5 @@
     
     bzero (line, 100);
-    sprintf (line, "(%s)                                          ", image[0].buffer_name); 
+    sprintf (line, "(%s)                                          ", 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);
Index: /branches/kapa-mods-2007-05/Ohana/src/kapa2/src/bDrawIt.c
===================================================================
--- /branches/kapa-mods-2007-05/Ohana/src/kapa2/src/bDrawIt.c	(revision 13433)
+++ /branches/kapa-mods-2007-05/Ohana/src/kapa2/src/bDrawIt.c	(revision 13434)
@@ -22,5 +22,5 @@
       section = GetSectionByNumber (i);
       bDrawGraph (section->graph);
-      // bDrawImage (section->graph);
+      // bDrawImage (section->image);
   }
 
Index: /branches/kapa-mods-2007-05/Ohana/src/libkapa/doc/api.txt
===================================================================
--- /branches/kapa-mods-2007-05/Ohana/src/libkapa/doc/api.txt	(revision 13433)
+++ /branches/kapa-mods-2007-05/Ohana/src/libkapa/doc/api.txt	(revision 13434)
@@ -31,6 +31,7 @@
 SAVE | SaveOverlay      | KiiOverlay.c  | KiiSaveOverlay
 CSVE | CSaveOverlay     | KiiOverlay.c  | KiiSaveOverlay
-LIMS | GetLimits      	| KapaWindow.c  | KapaGetLimits
-
-TICK | LoadTickmarks    | XXX not used
-NPIX | GetPixelCount    | XXX not used?
+SLIM | GetLimits      	| KapaWindow.c  | KapaGetLimits
+SSTY | SetGraphData	| KapaWindow.c 	| KapaSetGraphData
+GSTY | GetGraphData	| KapaWindow.c 	| KapaGetGraphData
+SIMD | SetImageData	| KapaWindow.c 	| KapaSetImageData
+GIMD | GetImageData	| KapaWindow.c 	| KapaGetImageData
Index: /branches/kapa-mods-2007-05/Ohana/src/libkapa/include/kapa.h
===================================================================
--- /branches/kapa-mods-2007-05/Ohana/src/libkapa/include/kapa.h	(revision 13433)
+++ /branches/kapa-mods-2007-05/Ohana/src/libkapa/include/kapa.h	(revision 13434)
@@ -20,13 +20,5 @@
   int Nx;
   int Ny;
-  char *file;
-  char *name;
 } KiiImage;
-
-typedef struct {
-  double zero;
-  double range;
-  int logflux;
-} KiiDisplayMode;
 
 typedef struct {
@@ -90,4 +82,11 @@
 
 typedef struct {
+  int logflux;
+  double zero, range;
+  char name[1024];
+  char file[1024];
+} KapaImageData;
+
+typedef struct {
   int dx, dy, ascent;
   unsigned char *bits;
@@ -123,6 +122,6 @@
 
 /* KiiPicture.c */
-int KiiNewPicture1D (int fd, KiiImage *image, KiiDisplayMode *mode, Coords *coords);
-int KiiNewPicture2D (int fd, KiiImage *image, KiiDisplayMode *mode, Coords *coords);
+int KiiNewPicture1D (int fd, KiiImage *image, KapaImageData *data, Coords *coords);
+int KiiNewPicture2D (int fd, KiiImage *image, KapaImageData *data, Coords *coords);
 
 /* KiiOverlay.c */
@@ -164,6 +163,8 @@
 int KapaGetSection (int fd, char *name);
 int KapaMoveSection (int fd, char *name, char *direction);
-int KapaSetGraphStyle (int fd, Graphdata *graphmode);
-int KapaGetGraphStyle (int fd, Graphdata *graphmode);
+int KapaSetGraphData (int fd, Graphdata *graphmode);
+int KapaGetGraphData (int fd, Graphdata *graphmode);
+int KapaSetImageData (int fd, KapaImageData *graphmode);
+int KapaGetImageData (int fd, KapaImageData *graphmode);
 
 /* KapaColors */
Index: /branches/kapa-mods-2007-05/Ohana/src/libkapa/src/KapaWindow.c
===================================================================
--- /branches/kapa-mods-2007-05/Ohana/src/libkapa/src/KapaWindow.c	(revision 13433)
+++ /branches/kapa-mods-2007-05/Ohana/src/libkapa/src/KapaWindow.c	(revision 13434)
@@ -91,54 +91,79 @@
 }
 
-int KapaPrepPlot (int fd, int Npts, Graphdata *graphmode) {
+int KapaPrepPlot (int fd, int Npts, Graphdata *data) {
 
   /* tell kapa to look for the incoming image */
   KiiSendCommand (fd, 4, "PLOT"); 
   
-  /* send Xgraph the plot details */
+  /* send kapa the plot details */
   KiiSendMessage (fd, "%8d %8d %d %d %d %d %d %f %f", 
-		  Npts, graphmode[0].style, 
-		  graphmode[0].ptype, graphmode[0].ltype, 
-		  graphmode[0].etype, graphmode[0].ebar, graphmode[0].color, 
-		  graphmode[0].lweight, graphmode[0].size);
+		  Npts, data[0].style, 
+		  data[0].ptype, data[0].ltype, 
+		  data[0].etype, data[0].ebar, data[0].color, 
+		  data[0].lweight, data[0].size);
   KiiSendMessage (fd, "%g %g %g %g", 
-		  graphmode[0].xmin, graphmode[0].xmax, 
-		  graphmode[0].ymin, graphmode[0].ymax);
-  KiiWaitAnswer (fd, "DONE");
-  return (TRUE);
-}
-
-int KapaSetGraphStyle (int fd, Graphdata *graphmode) {
+		  data[0].xmin, data[0].xmax, 
+		  data[0].ymin, data[0].ymax);
+  KiiWaitAnswer (fd, "DONE");
+  return (TRUE);
+}
+
+int KapaSetGraphData (int fd, Graphdata *data) {
 
   /* tell kapa to look for the incoming image */
   KiiSendCommand (fd, 4, "SSTY"); 
   
-  /* send Xgraph the plot details */
+  /* send kapa the plot details */
   KiiSendMessage (fd, "%8d %d %d %d %d %d %f %f", 
-		  graphmode[0].style, 
-		  graphmode[0].ptype, graphmode[0].ltype, 
-		  graphmode[0].etype, graphmode[0].ebar, graphmode[0].color, 
-		  graphmode[0].lweight, graphmode[0].size);
+		  data[0].style, 
+		  data[0].ptype, data[0].ltype, 
+		  data[0].etype, data[0].ebar, data[0].color, 
+		  data[0].lweight, data[0].size);
   KiiSendMessage (fd, "%g %g %g %g", 
-		  graphmode[0].xmin, graphmode[0].xmax, 
-		  graphmode[0].ymin, graphmode[0].ymax);
-  KiiWaitAnswer (fd, "DONE");
-  return (TRUE);
-}
-
-int KapaGetGraphStyle (int fd, Graphdata *graphmode) {
+		  data[0].xmin, data[0].xmax, 
+		  data[0].ymin, data[0].ymax);
+  KiiWaitAnswer (fd, "DONE");
+  return (TRUE);
+}
+
+int KapaGetGraphData (int fd, Graphdata *data) {
 
   /* tell kapa to look for the incoming image */
   KiiSendCommand (fd, 4, "GSTY"); 
   
-  /* send Xgraph the plot details */
+  /* send kapa the plot details */
   KiiScanMessage (fd, "%d %d %d %d %d %d %lf %lf", 
-		  &graphmode[0].style, 
-		  &graphmode[0].ptype, &graphmode[0].ltype, 
-		  &graphmode[0].etype, &graphmode[0].ebar, &graphmode[0].color, 
-		  &graphmode[0].lweight, &graphmode[0].size);
+		  &data[0].style, 
+		  &data[0].ptype, &data[0].ltype, 
+		  &data[0].etype, &data[0].ebar, &data[0].color, 
+		  &data[0].lweight, &data[0].size);
   KiiScanMessage (fd, "%lf %lf %lf %lf", 
-		  &graphmode[0].xmin, &graphmode[0].xmax, 
-		  &graphmode[0].ymin, &graphmode[0].ymax);
+		  &data[0].xmin, &data[0].xmax, 
+		  &data[0].ymin, &data[0].ymax);
+  KiiWaitAnswer (fd, "DONE");
+  return (TRUE);
+}
+
+int KapaSetImageData (int fd, KapaImageData *data) {
+
+  /* tell kapa to look for the incoming image */
+  KiiSendCommand (fd, 4, "SIMD"); 
+  
+  /* send kapa the plot details */
+  KiiSendMessage (fd, "%g %g %s %s", 
+		  data[0].zero, data[0].range, data[0].name, data[0].file);
+
+  KiiWaitAnswer (fd, "DONE");
+  return (TRUE);
+}
+
+int KapaGetImageData (int fd, KapaImageData *data) {
+
+  /* tell kapa to look for the incoming image */
+  KiiSendCommand (fd, 4, "GIMD"); 
+  
+  KiiScanMessage (fd, "%lf %lf %s %s", 
+		  &data[0].zero, &data[0].range, data[0].name, data[0].file);
+
   KiiWaitAnswer (fd, "DONE");
   return (TRUE);
@@ -203,8 +228,8 @@
 }
 
-int KapaSetLimits (int fd, Graphdata *graphmode) {
+int KapaSetLimits (int fd, Graphdata *data) {
 
   KiiSendCommand (fd, 4, "SLIM");
-  KiiSendMessage (fd, "%g %g %g %g ", graphmode[0].xmin, graphmode[0].xmax, graphmode[0].ymin, graphmode[0].ymax);
+  KiiSendMessage (fd, "%g %g %g %g ", data[0].xmin, data[0].xmax, data[0].ymin, data[0].ymax);
   KiiWaitAnswer (fd, "DONE");
   return (TRUE);
Index: /branches/kapa-mods-2007-05/Ohana/src/libkapa/src/KiiPicture.c
===================================================================
--- /branches/kapa-mods-2007-05/Ohana/src/libkapa/src/KiiPicture.c	(revision 13433)
+++ /branches/kapa-mods-2007-05/Ohana/src/libkapa/src/KiiPicture.c	(revision 13434)
@@ -1,15 +1,15 @@
 # include <kapa_internal.h>
 
-int KiiNewPicture1D (int fd, KiiImage *image, KiiDisplayMode *mode, Coords *coords) {
+int KiiNewPicture1D (int fd, KiiImage *image, KapaImageData *data, Coords *coords) {
 
   int i;
   int Npix, Ncolors, NNcolors, size;
   float *in, min, max;
-  char *out, *outbuffer, *root, extra[1024];
+  char *out, *outbuffer;
   double a1, a2;
 
   Npix = image[0].Nx*image[0].Ny;
 
-  KiiSendCommand (fd, 4, "READ"); /* tell Ximage to look for the incoming image */
+  KiiSendCommand (fd, 4, "READ"); /* tell kapa to look for the incoming image */
   KiiScanMessage (fd, "%d", &Ncolors);
 
@@ -22,14 +22,14 @@
   /* define color table, */
   NNcolors = Ncolors - 1;
-  if (mode[0].logflux) {
-    mode[0].range = MAX (2, mode[0].range);
-    a1 = Ncolors / log10 (mode[0].range);
-    a2 = mode[0].zero;
+  if (data[0].logflux) {
+    data[0].range = MAX (2, data[0].range);
+    a1 = Ncolors / log10 (data[0].range);
+    a2 = data[0].zero;
     for (i = 0; i < Npix; i++, in++, out++) {
       *out = (char) MIN (a1 * log10 (MAX (*in - a2, 1.0)), NNcolors);
     }
   } else {
-    a1 = Ncolors / mode[0].range;
-    a2 = Ncolors * mode[0].zero / mode[0].range;
+    a1 = Ncolors / data[0].range;
+    a2 = Ncolors * data[0].zero / data[0].range;
     for (i = 0; i < Npix; i++, in++, out++) {
       *out = (char) MIN (MAX (a1 * *in - a2, 0), NNcolors);
@@ -41,16 +41,12 @@
   size = Npix*sizeof(char);
 
-  /* done with the conversion, now send Ximage the converted picture */
+  /* done with the conversion, now send kapa the converted picture */
   KiiSendMessage (fd, "%8d %8d", image[0].Nx, image[0].Ny);
   KiiSendMessage (fd, "8 1 0.0 1.0");
-  KiiSendMessage (fd, "%f %f ", mode[0].zero, mode[0].range);
+  KiiSendMessage (fd, "%f %f %s %s", data[0].zero, data[0].range, data[0].name, data[0].file);
   KiiSendMessage (fd, "%f %f %d ", min, max, size);
   KiiSendMessage (fd, "%f %f %g %g %g ", coords[0].crval1, coords[0].crpix1, coords[0].cdelt1, coords[0].pc1_1, coords[0].pc1_2);
   KiiSendMessage (fd, "%f %f %g %g %g ", coords[0].crval2, coords[0].crpix2, coords[0].cdelt2, coords[0].pc2_1, coords[0].pc2_2);
-
-  /* send the filename */
-  root = filerootname (image[0].file);
-  KiiSendMessage (fd, "%s %s %s ", coords[0].ctype, root, image[0].name);
-  free (root);
+  KiiSendMessage (fd, "%s", coords[0].ctype);
 
   /* send the image data */
@@ -62,21 +58,16 @@
 }
 
-int KiiNewPicture2D (int fd, KiiImage *image, KiiDisplayMode *mode, Coords *coords) {
+int KiiNewPicture2D (int fd, KiiImage *image, KapaImageData *data, Coords *coords) {
 
   int i, j;
   int Npix, Ncolors, NNcolors, size;
   float *in, min, max;
-  char *out, *outbuffer, *root;
-  char buffer[1024];
+  char *out, *outbuffer;
   double a1, a2;
 
   Npix = image[0].Nx*image[0].Ny;
 
-  KiiSendCommand (fd, 4, "READ"); /* tell Ximage to look for the incoming image */
-
-  /* convert from (float *) to 1 byte chars -- depends on how many colors Kii owns */
-  /* use this response as a handshake test */
-  read (fd, buffer, 16); 
-  sscanf (buffer, "%*s %d", &Ncolors); 
+  KiiSendCommand (fd, 4, "READ"); /* tell kapa to look for the incoming image */
+  KiiScanMessage (fd, "%d", &Ncolors);
 
   ALLOCATE (outbuffer, char, Npix);
@@ -87,8 +78,8 @@
   /* define color table, */
   NNcolors = Ncolors - 1;
-  if (mode[0].logflux) {
-    mode[0].range = MAX (2, mode[0].range);
-    a1 = Ncolors / log10 (mode[0].range);
-    a2 = mode[0].zero;
+  if (data[0].logflux) {
+    data[0].range = MAX (2, data[0].range);
+    a1 = Ncolors / log10 (data[0].range);
+    a2 = data[0].zero;
     for (j = 0; j < image[0].Ny; j++) {
       in = image[0].data2d[j];
@@ -98,6 +89,6 @@
     }
   } else {
-    a1 = Ncolors / mode[0].range;
-    a2 = Ncolors * mode[0].zero / mode[0].range;
+    a1 = Ncolors / data[0].range;
+    a2 = Ncolors * data[0].zero / data[0].range;
     for (j = 0; j < image[0].Ny; j++) {
       in = image[0].data2d[j];
@@ -112,13 +103,12 @@
   size = Npix*sizeof(char);
 
-  /* done with the conversion, now send Ximage the converted picture */
-  KiiSendMessage (fd, "%8d %8d 8 1 %f %f", image[0].Nx, image[0].Ny, 0.0, 1.0);
-  KiiSendMessage (fd, "%f %f %f %f %d ", mode[0].zero, mode[0].range, min, max, size);
+  /* done with the conversion, now send kapa the converted picture */
+  KiiSendMessage (fd, "%8d %8d", image[0].Nx, image[0].Ny);
+  KiiSendMessage (fd, "8 1 0.0 1.0");
+  KiiSendMessage (fd, "%f %f %s %s", data[0].zero, data[0].range, data[0].name, data[0].file);
+  KiiSendMessage (fd, "%f %f %d ", min, max, size);
   KiiSendMessage (fd, "%f %f %g %g %g ", coords[0].crval1, coords[0].crpix1, coords[0].cdelt1, coords[0].pc1_1, coords[0].pc1_2);
   KiiSendMessage (fd, "%f %f %g %g %g ", coords[0].crval2, coords[0].crpix2, coords[0].cdelt2, coords[0].pc2_1, coords[0].pc2_2);
-
-  /* send the filename */
-  root = filerootname (image[0].file);
-  KiiSendMessage (fd, "%s %s %s ", coords[0].ctype, root, image[0].name);
+  KiiSendMessage (fd, "%s", coords[0].ctype);
 
   /* send the image data */
Index: /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.astro/gauss.c
===================================================================
--- /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.astro/gauss.c	(revision 13433)
+++ /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.astro/gauss.c	(revision 13434)
@@ -9,4 +9,5 @@
   char *name;
   Buffer *buf;
+  KapaImageData data;
 
   name = NULL;
@@ -16,5 +17,5 @@
     remove_argument (N, &argc, argv);
   }
-  if (!GetImage (&kapa, name)) return (FALSE);
+  if (!GetImageData (&data, &kapa, name)) return (FALSE);
   FREE (name);
 
@@ -50,5 +51,5 @@
   }
 
-  if ((buf = SelectBuffer (GetImageName(), OLDBUFFER, TRUE)) == NULL) return (FALSE);
+  if ((buf = SelectBuffer (data.name, OLDBUFFER, TRUE)) == NULL) return (FALSE);
 
   KiiCursorOn (kapa);
Index: /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.astro/objload.c
===================================================================
--- /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.astro/objload.c	(revision 13433)
+++ /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.astro/objload.c	(revision 13434)
@@ -17,5 +17,5 @@
     remove_argument (N, &argc, argv);
   }
-  if (!GetImage (&kapa, name)) return (FALSE);
+  if (!GetImage (NULL, &kapa, name)) return (FALSE);
   FREE (name);
 
Index: /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.astro/outline.c
===================================================================
--- /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.astro/outline.c	(revision 13433)
+++ /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.astro/outline.c	(revision 13434)
@@ -151,5 +151,5 @@
       KiiOverlay *overlay;
       
-      if (!GetImage (&kapa, NULL)) return (FALSE);
+      if (!GetImage (NULL, &kapa, NULL)) return (FALSE);
       
       Noverlay = 0;
Index: /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.astro/outline2.c
===================================================================
--- /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.astro/outline2.c	(revision 13433)
+++ /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.astro/outline2.c	(revision 13434)
@@ -309,5 +309,5 @@
   KiiOverlay *overlay;
   
-  if (!GetImage (&kapa, NULL)) return (FALSE);
+  if (!GetImage (NULL, &kapa, NULL)) return (FALSE);
   
   Noverlay = 0;
Index: /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.data/center.c
===================================================================
--- /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.data/center.c	(revision 13433)
+++ /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.data/center.c	(revision 13434)
@@ -14,5 +14,5 @@
     remove_argument (N, &argc, argv);
   }
-  if (!GetImage (&kapa, name)) return (FALSE);
+  if (!GetImage (NULL, &kapa, name)) return (FALSE);
   FREE (name);
 
Index: /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.data/cursor.c
===================================================================
--- /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.data/cursor.c	(revision 13433)
+++ /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.data/cursor.c	(revision 13434)
@@ -4,5 +4,5 @@
 
   char string[20], key[20], *name;
-  int i, N, kapa, IsImage;
+  int i, N, kapa;
   double X, Y, R, D, Z;
   void *oldsignal;
@@ -10,14 +10,9 @@
   Buffer *buf;
 
-  /* need to be able to specify graph vs image coords
-  if ((N = get_argument (argc, argv, "-g"))) {
-    remove_argument (N, &argc, argv);
-    SetImageDevice (FALSE);
-  }  
-  if ((N = get_argument (argc, argv, "-i"))) {
-    remove_argument (N, &argc, argv);
-    SetImageDevice (TRUE);
-  }  
-  */
+  // XXX need to be able to specify graph vs image coords
+  // currently, if only one exists, that frame will be used
+  // if both exist, defaults to ??
+  // if ((N = get_argument (argc, argv, "-g"))) {
+  // if ((N = get_argument (argc, argv, "-i"))) {
 
   name = NULL;
@@ -39,5 +34,6 @@
   
   buf = NULL;
-  if (IsImage) buf = SelectBuffer (GetImageName(), OLDBUFFER, FALSE);
+  // if (IsImage) buf = SelectBuffer (GetImageName(), OLDBUFFER, FALSE);
+  // XXX this stuff will go away with 32bit image data
   
   KiiCursorOn (kapa);
@@ -47,4 +43,6 @@
   Z = -1.0;
   for (i = 0; ((i < N) || (N == 0)) && !interrupt; i++) {
+
+    // XXX have kapa return x,y,z,ra,dec for all options
     KiiCursorRead (kapa, &X, &Y, key);
 
@@ -55,9 +53,7 @@
     set_str_variable ("KEY", key);
     
-    if (IsImage) {
-      if (buf != NULL) { 
-	Z = gfits_get_matrix_value (&buf[0].matrix, (int) X, (int) Y);
-      }
-      gprint (GP_LOG, "%s %f %f  %f\n", key, X, Y, Z);
+    if (buf != NULL) { 
+      Z = gfits_get_matrix_value (&buf[0].matrix, (int) X, (int) Y);
+      // gprint (GP_LOG, "%s %f %f  %f\n", key, X, Y, Z);
     } else {
       XY_to_RD (&R, &D, X, Y, &graphmode.coords);
Index: /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.data/device.c
===================================================================
--- /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.data/device.c	(revision 13433)
+++ /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.data/device.c	(revision 13434)
@@ -15,5 +15,5 @@
 
   if (name == NULL) {
-    name = GetGraphName ();
+    name = GetKapaName ();
     if (name == NULL) {
       gprint (GP_ERR, "no device defined\n");
Index: /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.data/erase.c
===================================================================
--- /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.data/erase.c	(revision 13433)
+++ /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.data/erase.c	(revision 13434)
@@ -13,5 +13,5 @@
     remove_argument (N, &argc, argv);
   }
-  if (!GetImage (&kapa, name)) return (FALSE);
+  if (!GetImage (NULL, &kapa, name)) return (FALSE);
   FREE (name);
 
Index: /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.data/jpeg.c
===================================================================
--- /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.data/jpeg.c	(revision 13433)
+++ /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.data/jpeg.c	(revision 13434)
@@ -22,4 +22,6 @@
     IsPNG = TRUE;
   }
+  if (!strcmp (argv[0], "png")) IsPNG = TRUE;
+  if (!strcmp (argv[0], "ppm")) IsPPM = TRUE;
 
   /* file name */
@@ -38,18 +40,15 @@
     remove_argument (N, &argc, argv);
   }
-  /* need to figure out what this implies
+
+  /* XXX output png / jpeg needs to include both graph and image
+     if available.  this is a poor mix of data representations 
+     (png for image / jpeg for plots)
   if ((N = get_argument (argc, argv, "-g"))) {
-    remove_argument (N, &argc, argv);
-    SetImageDevice (FALSE);
-  }  
   if ((N = get_argument (argc, argv, "-i"))) {
-    remove_argument (N, &argc, argv);
-    SetImageDevice (TRUE);
-  }  
   */
 
   if (!GetGraph (NULL, &kapa, name)) return (FALSE);
   if (!IsPNG && !IsPPM) {
-    if (!filename[0]) strcpy (filename, "kapa.png");
+    if (!filename[0]) strcpy (filename, "kapa.jpg");
     KiiJPEG (kapa, filename);
   }
Index: /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.data/load.c
===================================================================
--- /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.data/load.c	(revision 13433)
+++ /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.data/load.c	(revision 13434)
@@ -13,4 +13,5 @@
   Buffer *buf;
   KiiOverlay *overlay;
+  KapaImageData data;
   
   name = NULL;
@@ -20,5 +21,5 @@
     remove_argument (N, &argc, argv);
   }
-  if (!GetImage (&kapa, name)) return (FALSE);
+  if (!GetImageData (&data, &kapa, name)) return (FALSE);
   FREE (name);
 
@@ -46,5 +47,5 @@
 
   if (ISCEL) {
-    if ((buf = SelectBuffer (GetImageName(), OLDBUFFER, TRUE)) == NULL) return (FALSE);
+    if ((buf = SelectBuffer (data.name, OLDBUFFER, TRUE)) == NULL) return (FALSE);
     GetCoords (&coords, &buf[0].header);
   }
Index: /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.data/point.c
===================================================================
--- /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.data/point.c	(revision 13433)
+++ /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.data/point.c	(revision 13434)
@@ -11,4 +11,5 @@
   Buffer *buf;
   KiiOverlay overlay;
+  KapaImageData data;
 
   name = NULL;
@@ -18,5 +19,5 @@
     remove_argument (N, &argc, argv);
   }
-  if (!GetImage (&kapa, name)) return (FALSE);
+  if (!GetImageData (&data, &kapa, name)) return (FALSE);
   FREE (name);
 
@@ -39,5 +40,5 @@
   
   if (celestial) {
-    if ((buf = SelectBuffer (GetImageName(), OLDBUFFER, TRUE)) == NULL) return (FALSE);
+    if ((buf = SelectBuffer (data.name, OLDBUFFER, TRUE)) == NULL) return (FALSE);
     GetCoords (&coords, &buf[0].header);
   }
Index: /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.data/ps.c
===================================================================
--- /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.data/ps.c	(revision 13433)
+++ /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.data/ps.c	(revision 13434)
@@ -55,5 +55,6 @@
   if (argc > 1) strcpy (filename, argv[1]);
 
-  if (!GetImage (&kapa, name)) return (FALSE);
+  // get the connection to kapa, false if none available
+  if (!GetGraphData (NULL, &kapa, name)) return (FALSE);
   FREE (name);
 
Index: /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.data/resize.c
===================================================================
--- /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.data/resize.c	(revision 13433)
+++ /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.data/resize.c	(revision 13434)
@@ -15,5 +15,5 @@
     remove_argument (N, &argc, argv);
   }
-  if (!GetImage (&kapa, name)) return (FALSE);
+  if (!GetImage (NULL, &kapa, name)) return (FALSE);
   FREE (name);
 
Index: /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.data/save.c
===================================================================
--- /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.data/save.c	(revision 13433)
+++ /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.data/save.c	(revision 13434)
@@ -13,5 +13,5 @@
     remove_argument (N, &argc, argv);
   }
-  if (!GetImage (&kapa, name)) return (FALSE);
+  if (!GetImage (NULL, &kapa, name)) return (FALSE);
   FREE (name);
 
Index: /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.data/style.c
===================================================================
--- /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.data/style.c	(revision 13433)
+++ /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.data/style.c	(revision 13434)
@@ -4,7 +4,7 @@
   
   int kapa;
-  Graphdata graphmode;
+  Graphdata data;
 
-  if (!style_args (&graphmode, &argc, argv, &kapa)) return FALSE;
+  if (!style_args (&data, &argc, argv, &kapa)) return FALSE;
 
   if (argc > 1) {
@@ -12,5 +12,5 @@
     return (FALSE);
   }
-  KapaSetGraphStyle (kapa, &graphmode);
+  KapaSetGraphData (kapa, &data);
 
   return (TRUE);
Index: /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.data/tv.c
===================================================================
--- /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.data/tv.c	(revision 13433)
+++ /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.data/tv.c	(revision 13434)
@@ -4,9 +4,9 @@
   
   int N, kapa;
-  char *name;
+  char *name, *file;
   Coords coords;
   Buffer *buf;
   KiiImage image;
-  KiiDisplayMode mode;
+  KapaImageData data;
 
   name = NULL;
@@ -16,5 +16,5 @@
     remove_argument (N, &argc, argv);
   }
-  if (!GetImage (&kapa, name)) return (FALSE);
+  if (!GetImage (&data, &kapa, name)) return (FALSE);
   FREE (name);
 
@@ -25,10 +25,11 @@
   }
 
-  mode.logflux = FALSE;
+  data.logflux = FALSE;
   if ((N = get_argument (argc, argv, "-log"))) {
     remove_argument (N, &argc, argv);
-    mode.logflux = TRUE;
+    data.logflux = TRUE;
   }
 
+  // use the currently-set zero,range values if not supplied
   if ((argc != 2) && (argc != 4)) {
     gprint (GP_ERR, "USAGE: tv <buffer> [zero range] [-n Nimage] [-log] [-kill]\n");
@@ -36,10 +37,8 @@
   }
 
-  GetImageScale (&mode.zero, &mode.range);
   if (argc == 4) {
-    mode.zero = atof (argv[2]);
-    mode.range = atof (argv[3]);
-    if (mode.range == 0.0) mode.range = 0.001;
-    SetImageScale (mode.zero, mode.range);
+    data.zero = atof (argv[2]);
+    data.range = atof (argv[3]);
+    if (data.range == 0.0) data.range = 0.001;
   }
 
@@ -50,89 +49,15 @@
   image.Nx = buf[0].matrix.Naxis[0];
   image.Ny = buf[0].matrix.Naxis[1];
-  image.file = buf[0].file;
-  image.name = buf[0].name;
 
-  KiiNewPicture1D (kapa, &image, &mode, &coords);
+  // send only the root of the file, not the full path
+  file = filerootname (buf[0].file);
+  strcpy (data.file, file);
+  free (file);
 
-  SetImageName (argv[1]);
+  strcpy (data.name, argv[1]);
+  
+  KiiNewPicture1D (kapa, &image, &data, &coords);
+
   set_str_variable ("TV", argv[1]);
   return (TRUE);
 }
-
-
-/* 
-projections and coordinates:
-
-IRAS:
-CTYPE1  = 'LL      '                    /TANGENT PLANE (L)                     
-CRVAL1  =         0.100000D+02          /R.A. OF MAP CENTER  *** SEE COMMENT   
-CDELT1  =        -0.133333D-01          /SEPARATION IN L (DEG)                 
-CRPIX1  =                  128          /MAPCENTER IN L                        
-CROTA1  =         0.000000E+00          /NO ROTATION            
-                                                                               
-CTYPE2  = 'MM      '                    /TANGENT PLANE (M)                     
-CRVAL2  =         0.410000D+02          /DEC. OF MAP CENTER  *** SEE COMMENT   
-CDELT2  =         0.133333D-01          /SEPARATION IN M (DEG)                 
-CRPIX2  =                  128          /MAP CENTER IN M                       
-CROTA2  =         0.000000E+00          /NO ROTATION                           
-
-HIRAS:
-CTYPE1  = 'RA---TAN          ' / PRIMARY AXIS NAME                             
-CRVAL1  =   1.000000000000E+01 / PRIMARY REFERENCE VALUE                       
-CDELT1  =  -5.555555555556E-03 / PRIMARY PIXEL SEPARATION                      
-CRPIX1  =   2.560000000000E+02 / PRIMARY REFERENCE PIXEL                       
-CUNIT1  = 'DEGREE            ' / PRIMARY AXIS UNITS                            
-
-CDELT2  =   5.555555555556E-03 / PRIMARY PIXEL SEPARATION                      
-CRPIX2  =   2.560000000000E+02 / PRIMARY REFERENCE PIXEL                       
-CRVAL2  =   4.100000000000E+01 / PRIMARY REFERENCE VALUE                       
-CTYPE2  = 'DEC--TAN          ' / PRIMARY AXIS NAME                             
-CUNIT2  = 'DEGREE            ' / PRIMARY AXIS UNITS                            
-
-PROJTYPE= 'GNOMON    '                                                         
-COORDSYS= 'EQUATORIAL     '                                                    
-
-gene (small FOV linear):
-RA_O
-RA_X 
-RA_Y 
-DEC_O
-DEC_X
-DEC_Y
-
-
-*/
-
-# ifdef NEWTVMODE  
-  {
-    double *pixvalues, slope;
-
-    ALLOCATE (pixvalues, double, Ncolors + 1);
-    range = fabs (range);
-    for (i = 0; i < Ncolors + 1; i++) {
-      if (ISLOG) {
-	pixvalues[i] = i*range / NNcol + zero;
-      }
-      if (!ISLOG) {
-	pixvalues[i] = pow (10.0, i*log10(range - 1.0) / NNcol) + zero - 1.0;
-      }      
-    } 
-    for (j = 0; j < Npix; j++, in++, out++) {
-      if (*in < pixvalues[0]) {
-	i = 0;
-      } else {
-	if (*in > pixvalues[NNcol]) {
-	  i = NNcol;
-	} else {
-	  for (i = 0; (*in < pixvalues[i]) || (*in > pixvalues[i+1]); ) {
-	    slope = 1.0 / (pixvalues[i+1] - pixvalues[i]);
-	    i = MIN (MAX (0, i + (*in - pixvalues[i]) * slope), NNcol);
-	  }
-	}	
-      }
-      /* for (i = 0; (i < Ncolors - 1) && (pixvalues[i] < *in); i++); */
-      *out = i;
-    }
-    free (pixvalues);
-  }
-# endif
Index: /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.data/tvcontour.c
===================================================================
--- /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.data/tvcontour.c	(revision 13433)
+++ /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.data/tvcontour.c	(revision 13434)
@@ -69,5 +69,5 @@
     remove_argument (N, &argc, argv);
   }
-  if (!GetImage (&kapa, name)) return (FALSE);
+  if (!GetImage (NULL, &kapa, name)) return (FALSE);
   FREE (name);
 
Index: /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.data/tvgrid.c
===================================================================
--- /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.data/tvgrid.c	(revision 13433)
+++ /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.data/tvgrid.c	(revision 13434)
@@ -22,5 +22,5 @@
     remove_argument (N, &argc, argv);
   }
-  if (!GetImage (&kapa, name)) return (FALSE);
+  if (!GetImage (NULL, &kapa, name)) return (FALSE);
   FREE (name);
 
@@ -146,24 +146,4 @@
   }
 
-  # if (0)
-  /* write the labels on the axes */
-  dDEC = fabs(dec1 - dec0) / 100;
-  for (ra = dRA * ((int)(MIN(ra0, ra1)/dRA) + 1); ra < MAX(ra0, ra1); ra += dRA) {
-    RD_to_XY (&x0, &y0, ra + 0.1*dRA, MIN(dec0, dec1), &coords);
-    sprintf (label, format, ra);
-    sprintf (buffer, "%15s %20.10f %20.10f %20.10f %20.10f ", "TEXT", x0, y0, (double)(strlen(label) + 1), 0.0);
-    write (kapa, buffer, 128);
-    write (kapa, label, strlen(label) + 1);
-    RD_to_XY (&x0, &y0, ra, MIN(dec0, dec1), &coords);
-    for (dec = MIN(dec0, dec1) + dDEC; dec < MAX(dec0,dec1); dec += dDEC) {
-      RD_to_XY (&x1, &y1, ra, dec, &coords);
-      sprintf (buffer, "%15s %20.10f %20.10f %20.10f %20.10f ", "LINE", x0, y0, (x1 - x0), (y1 - y0));
-      write (kapa, buffer, 128);
-      x0 = x1;
-      y0 = y1;
-    }
-  }
-  # endif
-
   KiiLoadOverlay (kapa, overlay, Noverlay, argv[1]);
   free (overlay);
Index: /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.data/vload.c
===================================================================
--- /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.data/vload.c	(revision 13433)
+++ /branches/kapa-mods-2007-05/Ohana/src/opihi/cmd.data/vload.c	(revision 13434)
@@ -16,5 +16,5 @@
     remove_argument (N, &argc, argv);
   }
-  if (!GetImage (&kapa, name)) return (FALSE);
+  if (!GetImage (NULL, &kapa, name)) return (FALSE);
   FREE (name);
 
Index: /branches/kapa-mods-2007-05/Ohana/src/opihi/dvo/cmpload.c
===================================================================
--- /branches/kapa-mods-2007-05/Ohana/src/opihi/dvo/cmpload.c	(revision 13433)
+++ /branches/kapa-mods-2007-05/Ohana/src/opihi/dvo/cmpload.c	(revision 13434)
@@ -22,5 +22,5 @@
     remove_argument (N, &argc, argv);
   }
-  if (!GetImage (&kapa, name)) return (FALSE);
+  if (!GetImage (NULL, &kapa, name)) return (FALSE);
   FREE (name);
 
Index: /branches/kapa-mods-2007-05/Ohana/src/opihi/include/display.h
===================================================================
--- /branches/kapa-mods-2007-05/Ohana/src/opihi/include/display.h	(revision 13433)
+++ /branches/kapa-mods-2007-05/Ohana/src/opihi/include/display.h	(revision 13434)
@@ -5,40 +5,24 @@
 # define DISPLAY_H
 
-/*** plotting functions ***/
-int           GetCurrentDevice      PROTO((void));
+/*** kapa graph functions ***/
 int           PlotVectorPair        PROTO((int kapa, int Npts, float *xValues, float *yValues, Graphdata *graphmode));
 int           PlotVectorTriplet     PROTO((int kapa, int Npts, float *xValues, float *yValues, float *zValues, Graphdata *graphmode));
 int           GetGraphData          PROTO((Graphdata *data, int *kapa, char *name));
 int           GetGraph              PROTO((Graphdata *data, int *kapa, char *name));
-void          InitGraph             PROTO((void));
-int           open_graph            PROTO((int N));
-int           close_graph           PROTO((int N));
-void          QuitGraph             PROTO((void));
-void          SetGraph              PROTO((Graphdata *data));
-void          XGraphDead            PROTO((int input));
-int           GetColor              PROTO((char *name));
+int           SetGraph              PROTO((Graphdata *data));
 
-/* image (tv) functions */
-int           GetImage              PROTO((int *kapa, char *name));
-char         *GetImageName          PROTO((void));
-void          GetImageScale         PROTO((double *zero, double *range));
-void          InitImage             PROTO((void));
-int           open_image            PROTO((int N));
-int           close_image           PROTO((int N));
-void          QuitImage             PROTO((void));
-void          SetImageDevice        PROTO((int state));
-void          SetImageName          PROTO((char *name));
-void          SetImageScale         PROTO((double zero, double range));
-void          XImageDead            PROTO((int input));
-int           SelectOverlay         PROTO((char *name, int *number));
+/*** kapa image functions */
+int           GetImageData          PROTO((KapaImageData *data, int *kapa, char *name));
+int           GetImage              PROTO((KapaImageData *data, int *kapa, char *name));
+int           SetImage              PROTO((KapaImageData *data));
 
-void QuitKapa ();
-void InitKapa ();
-int open_kapa (int entry);
-int close_kapa (char *name);
-int AddKapaDevice (char *name);
-int DelKapaDevice (char *name);
-int FindKapaDevice (char *name);
-char *GetGraphName ();
+void	      QuitKapa              PROTO(());
+void	      InitKapa		    PROTO(());
+int 	      open_kapa		    PROTO((int entry));
+int 	      close_kapa	    PROTO((char *name));
+int 	      AddKapaDevice	    PROTO((char *name));
+int 	      DelKapaDevice	    PROTO((char *name));
+int 	      FindKapaDevice	    PROTO((char *name));
+char	     *GetKapaName	    PROTO(());
 
 /* calling program need to define a function 'get_variable' which
Index: /branches/kapa-mods-2007-05/Ohana/src/opihi/lib.data/open_kapa.c
===================================================================
--- /branches/kapa-mods-2007-05/Ohana/src/opihi/lib.data/open_kapa.c	(revision 13433)
+++ /branches/kapa-mods-2007-05/Ohana/src/opihi/lib.data/open_kapa.c	(revision 13434)
@@ -22,7 +22,4 @@
   ALLOCATE (Device, char *, 1);			  // for future REALLOCATE calls
   ALLOCATE (Socket, int, 1);			  // for future REALLOCATE calls
-
-  InitGraph ();
-  InitImage ();
 }
 
@@ -117,42 +114,8 @@
 }
 
-/**************** graph ops */
-
-# if (0)
-// XXX for now, use a local variable.  later: get from kapa
-static Graphdata graphdata;
-
-void InitGraph () {
-  graphdata.xmin = graphdata.ymin = 0.0;
-  graphdata.xmax = graphdata.ymax = 1.0;
-  graphdata.style = graphdata.ptype = 0;
-  graphdata.ltype = graphdata.color = 0;
-  graphdata.etype = graphdata.ebar = 0;
-  graphdata.lweight = graphdata.size = 1.0;
-    
-  graphdata.coords.pc1_1 = graphdata.coords.pc2_2 = 1.0;
-  graphdata.coords.pc1_2 = graphdata.coords.pc2_1 = 0.0;
-  strcpy (graphdata.coords.ctype, "RA---LIN");
-  graphdata.coords.crval1 = 0.0;
-  graphdata.coords.crval2 = 0.0;
-  graphdata.coords.crpix1 = 0.0;
-  graphdata.coords.crpix2 = 0.0;
-  graphdata.coords.cdelt1 = graphdata.coords.cdelt2 = 1.0;
-  graphdata.flipeast = TRUE;
-  graphdata.flipnorth = FALSE;
-  strcpy (graphdata.axis, "2222");
-  strcpy (graphdata.ticks, "2222");
-  strcpy (graphdata.labels, "2222");
-}
-
-  /* test Xgraph[0], flush junk from pipe */
-  signal (SIGPIPE, XGraphDead);
-  fcntl (Socket[n], F_SETFL,  O_NONBLOCK); 
-  for (i = 0; (read (Socket[n], buffer, 64) > 0) && (i < 20); i++);
-  fcntl (Socket[n], F_SETFL, !O_NONBLOCK); 
-# endif
+/**************** graph specific ops *******************/
 
 // return the current device name, if set 
-char *GetGraphName () {
+char *GetKapaName () {
   if (Active < 0) return NULL;
   return Device[Active];
@@ -166,5 +129,4 @@
   int entry;
 
-  SetImageDevice (FALSE);
   if (name == NULL) {
     if (Active < 0) {
@@ -181,5 +143,5 @@
   }
   
-  if (data != NULL) KapaGetGraphStyle (Socket[Active], data);
+  if (data != NULL) KapaGetGraphData (Socket[Active], data);
   if (fd != NULL) *fd = Socket[Active];
 
@@ -187,5 +149,5 @@
 }
 
-/* return pointers for given Xgraph, don't set or open */
+/* return pointers for given kapa, don't set or open */
 int GetGraphData (Graphdata *data, int *fd, char *name) {
 
@@ -207,10 +169,10 @@
 
   if (fd != NULL) *fd = Socket[entry];
-  if (data != NULL) KapaGetGraphStyle (Socket[entry], data);
-  return (TRUE);
-}
-
-/* assign given values to current Xgraph */
-void SetGraph (Graphdata *data) {
+  if (data != NULL) KapaGetGraphData (Socket[entry], data);
+  return (TRUE);
+}
+
+/* assign given values to current kapa */
+int SetGraph (Graphdata *data) {
   if (Active < 0) {
     gprint (GP_ERR, "no active kapa window\n"); 
@@ -221,55 +183,69 @@
     return (FALSE);
   }
-  KapaSetGraphStyle (Socket[Active], data);
-}
-
-/** internal tracking of current active device type **/
-/* drop this stuff */
-static int       IsImage = FALSE;
-
-int GetCurrentDevice () {
-  return (IsImage);
-}
-
-void SetImageDevice (int state) {
-  IsImage = state;
+  KapaSetGraphData (Socket[Active], data);
 }
 
 /************* image ops ***********/
-// XXX for now, use local static:
-
-static char      Ximbuffer[512];
-static double    Xzero;
-static double    Xrange;
-
-void InitImage () {
-  Xzero = 0;
-  Xrange = 1024;
-  strcpy (Ximbuffer, "none");
-}
 
 /* return pointers for current Ximage, set if desired, test, open if needed */
-int GetImage (int *fd, char *name) {
-  int status;
-  status = GetGraph (NULL, fd, name);
-  return (status);
-}
-
-void SetImageName (char *name) {
-  strcpy (Ximbuffer, name);
-}
-
-char *GetImageName () {
-  return (Ximbuffer);
-}
- 
-// leave this information on kapa, request when needed? 
-void SetImageScale (double zero, double range) {
-  Xzero = zero;
-  Xrange = range;
-}
-void GetImageScale (double *zero, double *range) {
-  *zero = Xzero;
-  *range = Xrange;
+int GetImage (KapaImageData *data, int *fd, char *name) {
+
+  int entry;
+
+  if (name == NULL) {
+    if (Active < 0) {
+      entry = AddKapaDevice ("0");
+    } else {
+      entry = Active;
+    }
+  } else {
+    entry = AddKapaDevice (name);
+  }
+  
+  if (!open_kapa (entry)) {
+    return (FALSE);
+  }
+  
+  if (data != NULL) KapaGetImageData (Socket[Active], data);
+  if (fd != NULL) *fd = Socket[Active];
+
+  return (TRUE);
+}
+
+/* return pointers for given kapa, don't set or open */
+int GetImageData (KapaImageData *data, int *fd, char *name) {
+
+  int entry;
+
+  if (name == NULL) {
+    if (Active < 0) {
+      gprint (GP_ERR, "no active kapa window\n"); 
+      return (FALSE);
+    }
+    entry = Active;
+  } else {
+    entry = FindKapaDevice (name);
+    if (entry < 0) {
+      gprint (GP_ERR, "invalid kapa window %s\n", name); 
+      return (FALSE);
+    }
+  }
+
+  if (fd != NULL) *fd = Socket[entry];
+  if (data != NULL) KapaGetImageData (Socket[entry], data);
+  return (TRUE);
+}
+
+/* assign given values to current kapa */
+int SetImage (KapaImageData *data) {
+  if (Active < 0) {
+    gprint (GP_ERR, "no active kapa window\n"); 
+    return (FALSE);
+  }
+  if (Socket[Active] == -1) {
+    gprint (GP_ERR, "no active kapa window\n"); 
+    return (FALSE);
+  }
+  KapaSetImageData (Socket[Active], data);
 }
 
Index: /branches/kapa-mods-2007-05/Ohana/src/opihi/lib.shell/BufferOps.c
===================================================================
--- /branches/kapa-mods-2007-05/Ohana/src/opihi/lib.shell/BufferOps.c	(revision 13433)
+++ /branches/kapa-mods-2007-05/Ohana/src/opihi/lib.shell/BufferOps.c	(revision 13434)
@@ -195,25 +195,4 @@
 }
 
-int SelectOverlay (char *name, int *number) {
-
-  *number = -1;
-  if (!strcmp (name, "red") || !strcmp (name, "0"))
-    *number = 0;
-  if (!strcmp (name, "green") || !strcmp (name, "1"))
-    *number = 1;
-  if (!strcmp (name, "blue") || !strcmp (name, "2"))
-    *number = 2;
-  if (!strcmp (name, "yellow") || !strcmp (name, "3"))
-    *number = 3;
-
-  if (*number < 0) {
-    gprint (GP_ERR, "valid overlays may be: red (0), green (1), blue (2), yellow (3)\n");
-    return (FALSE);
-  }
-  else {
-    return (TRUE);
-  }
-}
-
 void dump_buffers (int n) {
 
