Index: /branches/eam_branches/ipp-20230313/Ohana/src/opihi/lib.shell/convert_to_RPN.c
===================================================================
--- /branches/eam_branches/ipp-20230313/Ohana/src/opihi/lib.shell/convert_to_RPN.c	(revision 42682)
+++ /branches/eam_branches/ipp-20230313/Ohana/src/opihi/lib.shell/convert_to_RPN.c	(revision 42683)
@@ -77,4 +77,6 @@
     if (!strcmp (argv[i], "isflt"))  { type = ST_UNARY; goto gotit; }
     if (!strcmp (argv[i], "length")) { type = ST_UNARY; goto gotit; }
+    if (!strcmp (argv[i], "toupper")) { type = ST_UNARY; goto gotit; }
+    if (!strcmp (argv[i], "tolower")) { type = ST_UNARY; goto gotit; }
 
     /* binary operations */
Index: /branches/eam_branches/ipp-20230313/Ohana/src/opihi/lib.shell/stack_math.c
===================================================================
--- /branches/eam_branches/ipp-20230313/Ohana/src/opihi/lib.shell/stack_math.c	(revision 42682)
+++ /branches/eam_branches/ipp-20230313/Ohana/src/opihi/lib.shell/stack_math.c	(revision 42683)
@@ -1615,16 +1615,14 @@
   int i, Nx;
   
+  // handle string vectors in the L_unary function
+  if (V1->vector->type == OPIHI_STR) {
+    int status = L_unary (OUT, V1, op);
+    return status;
+  }
+
   Nx = V1[0].vector[0].Nelements;
 
   OUT[0].vector = InitVector ();
   OUT[0].type = ST_VECTOR_TMP; /*** <<--- says this is a temporary matrix ***/
-
-  if (V1->vector->type == OPIHI_STR) {
-    ResetVector (OUT->vector, V1->vector->type, V1->vector->Nelements);
-    for (i = 0; i < V1->vector->Nelements; i++) {
-      OUT->vector->elements.Str[i] = strcreate (V1->vector->elements.Str[i]);
-    }
-    goto escape;
-  }
 
 # define V_FUNC(OP,FTYPE) {						\
@@ -1744,4 +1742,22 @@
     for (int i = 0; i < Nx; i++) {			
       Ov[i] = strcreate (Iv[i]);
+    }									
+    goto escape;							
+  }
+  if (!strcmp (op, "toupper")) {
+    for (int i = 0; i < Nx; i++) {			
+      Ov[i] = strcreate (Iv[i]);
+      for (int j = 0; Ov[i][j]; j++) {
+	Ov[i][j] = toupper ((unsigned int) Ov[i][j]);
+      }
+    }									
+    goto escape;							
+  }
+  if (!strcmp (op, "tolower")) {
+    for (int i = 0; i < Nx; i++) {			
+      Ov[i] = strcreate (Iv[i]);
+      for (int j = 0; Ov[i][j]; j++) {
+	Ov[i][j] = tolower ((unsigned int) Ov[i][j]);
+      }
     }									
     goto escape;							
