Index: /trunk/Ohana/src/opihi/lib.shell/variable.c
===================================================================
--- /trunk/Ohana/src/opihi/lib.shell/variable.c	(revision 6326)
+++ /trunk/Ohana/src/opihi/lib.shell/variable.c	(revision 6327)
@@ -97,8 +97,24 @@
 }
 
+static char variable_true[] = "1";
+static char variable_false[] = "0";
+
 char *get_variable_ptr (char *name) {
   
   int i;
   char *local, *MacroName;
+
+  if (name == NULL) return (NULL);
+  if (*name == 0) return (NULL);
+
+  /* check for the existence of the given name (after ?) */
+  /* return a string which should not be freed */
+  if (*name == '?') {
+    value = get_variable_ptr (name[1]);
+    if (value == NULL) {
+      return variable_false;
+    }
+    return variable_true;
+  }
 
   MacroName = GetMacroName ();
@@ -128,4 +144,20 @@
   int i;
   char *local, *MacroName;
+  char *value;
+
+  if (name == NULL) return (NULL);
+  if (*name == 0) return (NULL);
+
+  /* check for the existence of the given name (after ?) */
+  /* return a string which can be freed */
+  if (*name == '?') {
+    value = get_variable_ptr (name[1]);
+    if (value == NULL) {
+      value = strcreate (variable_false);
+      return value;
+    }
+    value = strcreate (variable_true);
+    return value;
+  }
 
   MacroName = GetMacroName ();
@@ -149,4 +181,32 @@
   }
   return (NULL);
+}
+
+/* return TRUE / FALSE if name is an existant variable */
+int get_variable_exists (char *name) {
+  
+  int i;
+  char *local, *MacroName;
+
+  MacroName = GetMacroName ();
+
+  /* look for local variable first */
+  ALLOCATE (local, char, strlen(name) + strlen(MacroName) + 2);
+  sprintf (local, "%s.%s", MacroName, name);
+  for (i = 0; i < Nvariables; i++) { /* find the variable mentioned */
+    if (!strcmp(local, variables[i].name)) {
+      free (local);
+      return (TRUE);
+    }
+  }
+  free (local);
+
+  /* look for global variable */
+  for (i = 0; i < Nvariables; i++) { /* find the variable mentioned */
+    if (!strcmp(name, variables[i].name)) {
+      return (TRUE);
+    }
+  }
+  return (FALSE);
 }
 
