Index: /trunk/Ohana/src/opihi/cmd.basic/Makefile
===================================================================
--- /trunk/Ohana/src/opihi/cmd.basic/Makefile	(revision 19532)
+++ /trunk/Ohana/src/opihi/cmd.basic/Makefile	(revision 19533)
@@ -49,4 +49,5 @@
 $(SRC)/strlen.$(ARCH).o     \
 $(SRC)/substr.$(ARCH).o     \
+$(SRC)/strhash.$(ARCH).o     \
 $(SRC)/strpop.$(ARCH).o     \
 $(SRC)/strsub.$(ARCH).o     \
Index: /trunk/Ohana/src/opihi/cmd.basic/init.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.basic/init.c	(revision 19532)
+++ /trunk/Ohana/src/opihi/cmd.basic/init.c	(revision 19533)
@@ -37,4 +37,5 @@
 int substr_func     PROTO((int, char **));
 int strpop          PROTO((int, char **));
+int strhash         PROTO((int, char **));
 int strsub          PROTO((int, char **));
 int wait_func       PROTO((int, char **));
@@ -82,4 +83,5 @@
   {1, "strlen",        strlen_func,        "string length"},
   {1, "substr",        substr_func,        "substring"},
+  {1, "strhash",       strhash,            "generate a hash for a string"},
   {1, "strpop",        strpop,             "pop a string"},
   {1, "strsub",        strsub,             "replace instances of a key in a string"},
Index: /trunk/Ohana/src/opihi/cmd.basic/strhash.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.basic/strhash.c	(revision 19533)
+++ /trunk/Ohana/src/opihi/cmd.basic/strhash.c	(revision 19533)
@@ -0,0 +1,42 @@
+# include "basic.h"
+
+int strhash (int argc, char **argv) {
+
+  int i, N, Nchar, Nsum, modulus, value;
+  char *varName;
+
+  varName = NULL;
+  if ((N = get_argument (argc, argv, "-var"))) {
+    remove_argument (N, &argc, argv);
+    varName = strcreate (argv[N]);
+    remove_argument (N, &argc, argv);
+  }
+
+  if (argc != 3) {
+    gprint (GP_ERR, "USAGE: strhash (string) (modulus)\n");
+    return (FALSE);
+  }
+
+  modulus = atoi(argv[2]);
+  if (modulus > 255) {
+    gprint (GP_ERR, "for the moment, (modulus) is limited to 255\n");
+    return (FALSE);
+  }
+
+  Nchar = strlen (argv[1]);
+
+  Nsum = 0;
+  for (i = 0; i < Nchar; i++) {
+    Nsum += (argv[1][i] % modulus);
+  }
+  
+  value = Nsum % modulus;
+  
+  if (varName) {
+    set_int_variable (varName, value);
+  } else {
+    gprint (GP_LOG, "%d\n", value);
+  }
+
+  return (TRUE);
+}
