Index: /branches/eam_branches/20090715/Ohana/src/kapa2/Makefile
===================================================================
--- /branches/eam_branches/20090715/Ohana/src/kapa2/Makefile	(revision 25033)
+++ /branches/eam_branches/20090715/Ohana/src/kapa2/Makefile	(revision 25034)
@@ -48,5 +48,5 @@
 $(SRC)/Layout.$(ARCH).o		  	  $(SRC)/Sections.$(ARCH).o	      \
 $(SRC)/Graphs.$(ARCH).o                   $(SRC)/SetGraphSize.$(ARCH).o       \
-$(SRC)/Resize.$(ARCH).o                   $(SRC)/ErasePlots.$(ARCH).o         \
+$(SRC)/Resize.$(ARCH).o                   $(SRC)/Relocate.$(ARCH).o                   $(SRC)/ErasePlots.$(ARCH).o         \
 $(SRC)/EraseImage.$(ARCH).o         	  $(SRC)/SetToolbox.$(ARCH).o         \
 $(SRC)/EraseCurrentPlot.$(ARCH).o         $(SRC)/EraseSections.$(ARCH).o      \
Index: /branches/eam_branches/20090715/Ohana/src/kapa2/include/prototypes.h
===================================================================
--- /branches/eam_branches/20090715/Ohana/src/kapa2/include/prototypes.h	(revision 25033)
+++ /branches/eam_branches/20090715/Ohana/src/kapa2/include/prototypes.h	(revision 25034)
@@ -55,4 +55,5 @@
 int           LoadTextlines       PROTO((int sock));
 int           Resize              PROTO((int sock));
+int           Relocate            PROTO((int sock));
 int           GetLimits           PROTO((int sock));
 int           SetLimits           PROTO((int sock));
Index: /branches/eam_branches/20090715/Ohana/src/kapa2/src/CheckPipe.c
===================================================================
--- /branches/eam_branches/20090715/Ohana/src/kapa2/src/CheckPipe.c	(revision 25033)
+++ /branches/eam_branches/20090715/Ohana/src/kapa2/src/CheckPipe.c	(revision 25034)
@@ -131,4 +131,10 @@
   }
 
+  if (!strcmp (word, "MOVE")) {
+    status = Relocate (sock);
+    KiiSendCommand (sock, 4, "DONE");
+    FINISHED (status);
+  }
+
   if (!strcmp (word, "GLIM")) {
     GetLimits (sock);
Index: /branches/eam_branches/20090715/Ohana/src/kapa2/src/Relocate.c
===================================================================
--- /branches/eam_branches/20090715/Ohana/src/kapa2/src/Relocate.c	(revision 25034)
+++ /branches/eam_branches/20090715/Ohana/src/kapa2/src/Relocate.c	(revision 25034)
@@ -0,0 +1,30 @@
+# include "Ximage.h"
+
+// XXX Should there be a base command + KiiMessage command?
+int Relocate (int sock) {
+ 
+  int i, Nsection;
+  int x, y, dX, dY;
+  Graphic *graphic;
+  Section *section;
+
+  graphic = GetGraphic();
+
+  KiiScanMessage (sock, "%d %d", &x, &y);
+
+  if (!USE_XWINDOW) return (TRUE);
+
+  dX = DisplayWidth  (graphic->display, graphic->screen);
+  dY = DisplayHeight (graphic->display, graphic->screen);
+
+  // let's not lose the window
+  x = MAX(0, MIN(x, dX - 10)); 
+  y = MAX(0, MIN(y, dY - 10)); 
+
+  XMoveWindow (graphic->display, graphic->window, x, y);
+
+  // if (USE_XWINDOW) XClearWindow (graphic->display, graphic->window);
+  // Refresh ();
+
+  return (TRUE);
+}
Index: /branches/eam_branches/20090715/Ohana/src/libkapa/include/kapa.h
===================================================================
--- /branches/eam_branches/20090715/Ohana/src/libkapa/include/kapa.h	(revision 25033)
+++ /branches/eam_branches/20090715/Ohana/src/libkapa/include/kapa.h	(revision 25034)
@@ -154,4 +154,5 @@
 /* KapaWindow.c */
 int KiiResize (int fd, int Nx, int Ny);
+int KiiRelocate (int fd, int x, int y);
 int KiiCenter (int fd, double x, double y, int zoom);
 int KiiParity (int fd, int xflip, int yflip);
Index: /branches/eam_branches/20090715/Ohana/src/libkapa/src/KapaWindow.c
===================================================================
--- /branches/eam_branches/20090715/Ohana/src/libkapa/src/KapaWindow.c	(revision 25033)
+++ /branches/eam_branches/20090715/Ohana/src/libkapa/src/KapaWindow.c	(revision 25034)
@@ -23,4 +23,12 @@
   KiiSendCommand (fd, 4, "RSIZ");
   KiiSendMessage (fd, "%d %d", Nx, Ny); 
+  KiiWaitAnswer (fd, "DONE");
+  return (TRUE);
+}
+
+int KiiRelocate (int fd, int x, int y) {
+
+  KiiSendCommand (fd, 4, "MOVE");
+  KiiSendMessage (fd, "%d %d", x, y); 
   KiiWaitAnswer (fd, "DONE");
   return (TRUE);
Index: /branches/eam_branches/20090715/Ohana/src/opihi/cmd.data/init.c
===================================================================
--- /branches/eam_branches/20090715/Ohana/src/opihi/cmd.data/init.c	(revision 25033)
+++ /branches/eam_branches/20090715/Ohana/src/opihi/cmd.data/init.c	(revision 25034)
@@ -85,4 +85,5 @@
 int rebin            PROTO((int, char **));
 int resize           PROTO((int, char **));
+int relocate         PROTO((int, char **));
 int roll             PROTO((int, char **));
 int rotate           PROTO((int, char **));
@@ -220,4 +221,5 @@
   {1, "rebin",        rebin,            "rebin image data by factor of N"},
   {1, "resize",       resize,           "set graphics/image window size"},
+  {1, "relocate",     relocate,         "set graphics/image window position"},
   {1, "roll",         roll,             "roll image to new start point"},
   {1, "rotate",       rotate,           "rotate image"},
Index: /branches/eam_branches/20090715/Ohana/src/opihi/cmd.data/relocate.c
===================================================================
--- /branches/eam_branches/20090715/Ohana/src/opihi/cmd.data/relocate.c	(revision 25034)
+++ /branches/eam_branches/20090715/Ohana/src/opihi/cmd.data/relocate.c	(revision 25034)
@@ -0,0 +1,33 @@
+# include "data.h"
+
+int relocate (int argc, char **argv) {
+
+  char *end;
+  int x, y;
+  int N, kapa;
+  char *name;
+  
+  /* display source */
+  name = NULL;
+  if ((N = get_argument (argc, argv, "-n"))) {
+    remove_argument (N, &argc, argv);
+    name = strcreate (argv[N]);
+    remove_argument (N, &argc, argv);
+  }
+  if (!GetImage (NULL, &kapa, name)) return (FALSE);
+  FREE (name);
+
+  if (argc != 3) {
+    gprint (GP_ERR, "USAGE: relocate x y [-n]\n");
+    return (FALSE);
+  }
+
+  /* x & y are pixels for the screen -- this command has no meaning for non-X */
+
+  x = atoi (argv[1]);
+  y = atoi (argv[2]);
+
+  KiiRelocate (kapa, x, y);
+  return (TRUE);
+}
+
