Index: trunk/Ohana/src/opihi/lib.shell/VariableOps.c
===================================================================
--- trunk/Ohana/src/opihi/lib.shell/VariableOps.c	(revision 39558)
+++ trunk/Ohana/src/opihi/lib.shell/VariableOps.c	(revision 42080)
@@ -1,3 +1,4 @@
 # include "opihi.h"
+# define USE_DEPTH 1
 
 Variable *variables;   /* variable to store the list of all variables */
@@ -27,8 +28,9 @@
 
   int i;
-  char *local, *MacroName;
-
-  /* a local variable has the form (macroname).(varname) */
-  MacroName = GetMacroName ();
+  char *local;
+
+  /* a local variable has the form (macroname).(depth).(varname) */
+  char *MacroName = GetMacroName ();
+  int   MacroDepth = GetMacroDepth ();
 
   /* need to use a mutex to prevent two threads from changing variable list simultaneously */
@@ -36,6 +38,11 @@
 
   /* look for existing local variable */
-  ALLOCATE (local, char, strlen(name) + strlen(MacroName) + 2);
-  sprintf (local, "%s.%s", MacroName, name);
+  int maxLen = strlen(name) + strlen(MacroName) + 16;
+  ALLOCATE (local, char, maxLen);
+  if (USE_DEPTH) {
+    snprintf (local, maxLen, "%s.%d.%s", MacroName, MacroDepth, name);
+  } else {
+    snprintf (local, maxLen, "%s.%s", MacroName, name);
+  }
   for (i = 0; i < Nvariables; i++) {
     if (!strcmp (local, variables[i].name)) {
@@ -59,7 +66,8 @@
 
   int i;
-  char *local, *MacroName;
-
-  MacroName = GetMacroName ();
+  char *local;
+
+  char *MacroName = GetMacroName ();
+  int   MacroDepth = GetMacroDepth ();
 
   /* need to use a mutex to prevent two threads from changing variable list simultaneously */
@@ -67,6 +75,11 @@
 
   /* look for local variable first */
-  ALLOCATE (local, char, strlen(name) + strlen(MacroName) + 2);
-  sprintf (local, "%s.%s", MacroName, name);
+  int maxLen = strlen(name) + strlen(MacroName) + 16;
+  ALLOCATE (local, char, maxLen);
+  if (USE_DEPTH) {
+    snprintf (local, maxLen, "%s.%d.%s", MacroName, MacroDepth, name);
+  } else {
+    snprintf (local, maxLen, "%s.%s", MacroName, name);
+  }
   for (i = 0; i < Nvariables; i++) {
     if (!strcmp (local, variables[i].name)) {
@@ -122,11 +135,17 @@
   
   int i;
-  char *local, *MacroName;
-
-  MacroName = GetMacroName ();
+  char *local;
+
+  char *MacroName = GetMacroName ();
+  int   MacroDepth = GetMacroDepth ();
 
   /* look for local variable first */
-  ALLOCATE (local, char, strlen(name) + strlen(MacroName) + 2);
-  sprintf (local, "%s.%s", MacroName, name);
+  int maxLen = strlen(name) + strlen(MacroName) + 16;
+  ALLOCATE (local, char, maxLen);
+  if (USE_DEPTH) {
+    snprintf (local, maxLen, "%s.%d.%s", MacroName, MacroDepth, name);
+  } else {
+    snprintf (local, maxLen, "%s.%s", MacroName, name);
+  }
 
   /* need to use a mutex to prevent another thread from misleading on size of Nvariables */
