Index: trunk/Ohana/src/opihi/cmd.basic/Makefile
===================================================================
--- trunk/Ohana/src/opihi/cmd.basic/Makefile	(revision 35109)
+++ trunk/Ohana/src/opihi/cmd.basic/Makefile	(revision 35237)
@@ -48,4 +48,5 @@
 $(SRC)/run_while.$(ARCH).o  \
 $(SRC)/scan.$(ARCH).o	     \
+$(SRC)/scannext.$(ARCH).o	     \
 $(SRC)/shell.$(ARCH).o	     \
 $(SRC)/sprintf.$(ARCH).o    \
Index: trunk/Ohana/src/opihi/cmd.basic/init.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.basic/init.c	(revision 35109)
+++ trunk/Ohana/src/opihi/cmd.basic/init.c	(revision 35237)
@@ -35,4 +35,5 @@
 int run_while       PROTO((int, char **));
 int scan            PROTO((int, char **));
+int scannext        PROTO((int, char **));
 int shell           PROTO((int, char **));
 int sprintf_opihi   PROTO((int, char **));
@@ -86,4 +87,5 @@
   {1, "while",         run_while,          "while loop"}, 
   {1, "scan",          scan,               "scan line from keyboard or file to variable *"},
+  {1, "scannext",      scannext,           "scan next line from file to variable (file stays open)"},
   {1, "!",             shell,              "system call"},
   {1, "exec",          shell,              "system call"},
Index: trunk/Ohana/src/opihi/cmd.basic/scannext.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.basic/scannext.c	(revision 35237)
+++ trunk/Ohana/src/opihi/cmd.basic/scannext.c	(revision 35237)
@@ -0,0 +1,52 @@
+# include "basic.h"
+
+int scannext (int argc, char **argv) {
+
+  int N, status;
+  char *line;
+  static char *filename = NULL;
+  static FILE *f = NULL;
+
+  // clear all sections
+  if ((N = get_argument (argc, argv, "-close"))) {
+    remove_argument (N, &argc, argv);
+    if (f) {
+      fclose (f);
+      f = NULL;
+    } else {
+      gprint (GP_ERR, "file is not currently open\n");
+    }
+    if (filename) { 
+      free (filename);
+      filename = NULL;
+    }
+    return (TRUE);
+  }
+
+  if ((argc != 2) && (argc != 3)) {
+    gprint (GP_ERR, "USAGE: scannext <filename> [var]\n");
+    return (FALSE);
+  }
+
+  if (!f || !filename || strcmp(filename, argv[1])) {
+    if (f) fclose (f);
+    f = fopen (argv[1], "r");
+    if (f == NULL) {
+      gprint (GP_ERR, "file %s not found\n", argv[1]);
+      return (FALSE);
+    }
+    if (filename) free (filename);
+    filename = strcreate (argv[1]);
+  }
+  
+  ALLOCATE (line, char, 2048);
+  status = scan_line_maxlen (f, line, 2048);
+  if (status == EOF) {
+    set_str_variable (argv[2], "EOF");
+  } else {
+    set_str_variable (argv[2], line);
+  }
+  free (line);
+
+  return (TRUE);
+}
Index: trunk/Ohana/src/opihi/cmd.data/Makefile
===================================================================
--- trunk/Ohana/src/opihi/cmd.data/Makefile	(revision 35109)
+++ trunk/Ohana/src/opihi/cmd.data/Makefile	(revision 35237)
@@ -43,4 +43,6 @@
 $(SRC)/dbselect.$(ARCH).o	\
 $(SRC)/dbinsert.$(ARCH).o	\
+$(SRC)/dbadmin.$(ARCH).o	\
+$(SRC)/dbupdate.$(ARCH).o	\
 $(SRC)/erase.$(ARCH).o		\
 $(SRC)/extract.$(ARCH).o	\
Index: trunk/Ohana/src/opihi/cmd.data/dbadmin.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.data/dbadmin.c	(revision 35237)
+++ trunk/Ohana/src/opihi/cmd.data/dbadmin.c	(revision 35237)
@@ -0,0 +1,66 @@
+# include "data.h"
+# if (HAVE_MYSQL_H) 
+# include "mysql.h"
+
+int dbadmin (int argc, char **argv) {
+  
+  int i, Nbytes;
+  char *query;
+
+  MYSQL *connection = NULL;
+
+  if (argc < 2) {
+    gprint (GP_ERR, "USAGE: dbadmin [command]\n");
+    gprint (GP_ERR, "  currently allowed commands: CREATE, DROP, USE\n");
+    return FALSE;
+  }
+
+  connection = db_getConnection ();
+  if (connection == NULL) {
+    gprint (GP_ERR, "database not defined; use dbconnect\n");
+    return (FALSE);
+  }
+
+  // check for allowed sql commands
+  if (!strcasecmp(argv[1], "USE")) goto valid;
+  if (!strcasecmp(argv[1], "DROP")) goto valid;
+  if (!strcasecmp(argv[1], "CREATE")) goto valid;
+  gprint (GP_ERR, "currently allowed dbadmin commands are CREATE, DROP\n");
+  return (FALSE);
+
+valid:
+
+  // generate the query line (concat the argv[i] entries)
+  Nbytes = 0;
+  for (i = 1; i < argc; i++) {
+    Nbytes += strlen(argv[i]) + 1;
+  }
+  Nbytes += 10;
+
+  ALLOCATE (query, char, Nbytes);
+  bzero (query, Nbytes);
+  for (i = 1; i < argc; i++) {
+    strcat (query, argv[i]);
+    strcat (query, " ");
+  }
+  
+  fprintf (stderr, "query: %s\n", query);
+
+  if (mysql_query (connection, query)) {
+    gprint (GP_ERR, "problem with query\n");
+    gprint (GP_ERR, "%s\n", mysql_error (connection));
+    free (query);
+    return (FALSE);
+  }
+  free (query);
+  return (TRUE);
+}
+# else 
+
+int dbadmin (int argc, char **argv) {
+
+  gprint (GP_ERR, "mysql library is not available\n");
+  return FALSE;
+}
+
+# endif
Index: trunk/Ohana/src/opihi/cmd.data/dbupdate.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.data/dbupdate.c	(revision 35237)
+++ trunk/Ohana/src/opihi/cmd.data/dbupdate.c	(revision 35237)
@@ -0,0 +1,57 @@
+# include "data.h"
+# if (HAVE_MYSQL_H) 
+# include "mysql.h"
+
+int dbupdate (int argc, char **argv) {
+  
+  int i, Nbytes;
+  char *query;
+
+  MYSQL *connection = NULL;
+
+  if (argc < 4) {
+    gprint (GP_ERR, "USAGE: dbupdate (tablerefs) set field = value,... [where]");
+    return FALSE;
+  }
+
+  connection = db_getConnection ();
+  if (connection == NULL) {
+    gprint (GP_ERR, "database not defined; use dbconnect\n");
+    return (FALSE);
+  }
+
+  // generate the query line (concat the argv[i] entries)
+  Nbytes = 0;
+  for (i = 1; i < argc; i++) {
+    Nbytes += strlen(argv[i]) + 1;
+  }
+  Nbytes += 10;
+
+  ALLOCATE (query, char, Nbytes);
+  bzero (query, Nbytes);
+  strcat (query, "update ");
+  for (i = 1; i < argc; i++) {
+    strcat (query, argv[i]);
+    strcat (query, " ");
+  }
+  
+  fprintf (stderr, "query: %s\n", query);
+
+  if (mysql_query (connection, query)) {
+    gprint (GP_ERR, "problem with query\n");
+    gprint (GP_ERR, "%s\n", mysql_error (connection));
+    free (query);
+    return (FALSE);
+  }
+  free (query);
+  return (TRUE);
+}
+# else 
+
+int dbupdate (int argc, char **argv) {
+
+  gprint (GP_ERR, "mysql library is not available\n");
+  return FALSE;
+}
+
+# endif
Index: trunk/Ohana/src/opihi/cmd.data/init.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.data/init.c	(revision 35109)
+++ trunk/Ohana/src/opihi/cmd.data/init.c	(revision 35237)
@@ -25,4 +25,6 @@
 int dbselect         PROTO((int, char **));
 int dbinsert         PROTO((int, char **));
+int dbadmin          PROTO((int, char **));
+int dbupdate         PROTO((int, char **));
 int delete           PROTO((int, char **));
 int densify          PROTO((int, char **));
@@ -172,4 +174,6 @@
   {1, "dbselect",     dbselect,         "extract vectors from mysql database table"},
   {1, "dbinsert",     dbinsert,         "sql insert command"},
+  {1, "dbadmin",      dbadmin,          "sql admin command (create, drop)"},
+  {1, "dbupdate",     dbupdate,         "sql update command"},
   {1, "delete",       delete,           "delete vectors or images"},
   {1, "densify",      densify,          "create an image histogram from a set of vectors"},
