Index: trunk/Ohana/src/libkapa/include/kapa.h
===================================================================
--- trunk/Ohana/src/libkapa/include/kapa.h	(revision 13325)
+++ trunk/Ohana/src/libkapa/include/kapa.h	(revision 13326)
@@ -92,7 +92,8 @@
 /* IOfuncs.c */
 int KiiSendMessage (int device, char *format, ...);
+int KiiScanMessage (int device, char *format, ...);
 int KiiSendCommand (int device, int length, char *format, ...);
 int KiiSendCommandV (int device, int length, char *format, va_list argp);
-int KiiScanMessage (int device, char *format, ...);
+int KiiScanCommand (int device, int length, char *format, ...);
 int KiiSendData (int device, char *data, int Nbytes);
 char *KiiRecvData (int device);
Index: trunk/Ohana/src/libkapa/src/IOfuncs.c
===================================================================
--- trunk/Ohana/src/libkapa/src/IOfuncs.c	(revision 13325)
+++ trunk/Ohana/src/libkapa/src/IOfuncs.c	(revision 13326)
@@ -51,31 +51,4 @@
 }
 
-int KiiSendCommand (int device, int length, char *format, ...) {
-
-  int status;
-  va_list argp;  
-
-  va_start (argp, format);
-  status = KiiSendCommandV (device, length, format, argp);
-  va_end (argp);
-
-  return (status);
-}
-  
-int KiiSendCommandV (int device, int length, char *format, va_list argp) {
-
-  char *string;
-
-  /* string is sent WITHOUT ending NULL char */
-  /* allocate and zero length + 1 extra byte */
-  ALLOCATE (string, char, length + 1);
-  memset (string, 0, length + 1);
-  vsnprintf (string, length + 1, format, argp);
-
-  write (device, string, length);
-  free (string);
-  return (TRUE);
-}
-
 /* scan a message of arbitrary size, accepting the size first */
 int KiiScanMessage (int device, char *format, ...) {
@@ -106,2 +79,53 @@
   return (status);
 }
+
+/* send a command of fixed size */
+int KiiSendCommand (int device, int length, char *format, ...) {
+
+  int status;
+  va_list argp;  
+
+  va_start (argp, format);
+  status = KiiSendCommandV (device, length, format, argp);
+  va_end (argp);
+
+  return (status);
+}
+  
+int KiiSendCommandV (int device, int length, char *format, va_list argp) {
+
+  char *string;
+
+  /* string is sent WITHOUT ending NULL char */
+  /* allocate and zero length + 1 extra byte */
+  ALLOCATE (string, char, length + 1);
+  memset (string, 0, length + 1);
+  vsnprintf (string, length + 1, format, argp);
+
+  write (device, string, length);
+  free (string);
+  return (TRUE);
+}
+
+/* scan a command of fixed size */
+int KiiScanCommand (int device, int length, char *format, ...) {
+
+  int Nbytes, status;
+  char *buffer, *message;
+  va_list argp;  
+
+  ALLOCATE (message, char, length + 1);
+
+  /* read Nbytes from the device */
+  status = read (device, message, Nbytes);
+  if (status != Nbytes) fprintf (stderr, "Kii/Kapa comm error\n");
+  message[status] = 0;
+  /* make the string easy to parse */
+
+  /* scan the incoming message */
+  va_start (argp, format);
+  Nbytes = vsscanf (message, format, argp);
+  va_end (argp);
+
+  return (status);
+}
