Index: trunk/Ohana/src/opihi/cmd.data/cursor.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.data/cursor.c	(revision 5242)
+++ trunk/Ohana/src/opihi/cmd.data/cursor.c	(revision 5349)
@@ -3,5 +3,5 @@
 int cursor (int argc, char **argv) {
 
-  char buffer[40], string[20], key;
+  char buffer[40], string[20], key[20], keyname[20];
   int i, N, Nsource, Source, IsImage;
   double X, Y, R, D, Z;
@@ -49,15 +49,18 @@
   Z = -1.0;
   for (i = 0; ((i < N) || (N == 0)) && !interrupt; i++) {
-    bzero (buffer, 20);
-    read (Source, buffer, 32);
-    buffer[32] = 0;
-    sscanf (buffer, "%c %lf %lf", &key, &X, &Y);
-
-    sprintf (string, "X%1c", key);
+    bzero (buffer, 40);
+    read (Source, buffer, 40);
+    buffer[39] = 0;
+    sscanf (buffer, "%s %lf %lf", key, &X, &Y);
+    if (ispunct(key[0])) {
+      strcpy (keyname, "_");
+    } else {
+      strcpy (keyname, key);
+    }
+    sprintf (string, "X%s", keyname);
     set_variable (string, X);
-    sprintf (string, "Y%1c", key);
+    sprintf (string, "Y%s", keyname);
     set_variable (string, Y);
-    sprintf (string, "%c", key);
-    set_str_variable ("KEY", string);
+    set_str_variable ("KEY", key);
     
     if (IsImage && (buf != NULL)) 
@@ -66,7 +69,7 @@
     if (!IsImage) {
       XY_to_RD (&R, &D, X, Y, &graphmode.coords);
-      sprintf (string, "R%1c", key);
+      sprintf (string, "R%s", keyname);
       set_variable (string, R);
-      sprintf (string, "D%1c", key);
+      sprintf (string, "D%s", keyname);
       set_variable (string, D);
     }
@@ -74,10 +77,10 @@
     /* I still don't like this, but I have to decide which to print... */
     if (IsImage) {
-      fprintf (GetOutfile(), "%c %f %f  %f\n", key, X, Y, Z);
+      fprintf (GetOutfile(), "%s %f %f  %f\n", key, X, Y, Z);
     } else {
-      fprintf (GetOutfile(), "%c %f %f\n", key, X, Y);
+      fprintf (GetOutfile(), "%s %f %f\n", key, X, Y);
     }
 
-    if ((key == 'q') || (key == 'Q')) {
+    if (!strcasecmp (key, "Q")) {
       signal (SIGINT, (void *) oldsignal);
       write (Source, "NCUR", 4); /* ask Source to stop looking for the keystrokes */
