Index: /trunk/Ohana/src/opihi/cmd.basic/run_while.c
===================================================================
--- /trunk/Ohana/src/opihi/cmd.basic/run_while.c	(revision 16883)
+++ /trunk/Ohana/src/opihi/cmd.basic/run_while.c	(revision 16884)
@@ -15,9 +15,4 @@
   }
 
-  val = dvomath (1, &argv[1], &size, 0);
-  if (val == NULL) return (FALSE);
-  logic = atof (val); /* warning: round-off error is a danger */
-  free (val);
-  
   NLINES = D_NLINES;
   ALLOCATE (loop.line, char *, NLINES);
@@ -76,6 +71,17 @@
   REALLOCATE (loop.line, char *, MAX (loop.Nlines, 1));
 
+  // test the logic once before running the loop
+  logic_line = strcreate (argv[1]);
+  logic_line = expand_vars (logic_line);
+  val = dvomath (1, &logic_line, &size, 0);
+  free (logic_line);
+
+  // if we have a parse failure, return FALSE
+  if (val == NULL) return (FALSE);
+  logic = atof (val); /* warning: round-off error is a danger */
+  free (val);
+
   /* execute for loop */
-  do { 
+  while (logic) { 
     status = exec_loop (&loop);
     if (loop_next) continue;
@@ -88,8 +94,10 @@
     free (logic_line);
 
-    if (val == NULL) return (FALSE);
-    logic = atof (val); /* warning: round-off error is a danger */
-    free (val);
-  } while (logic && !interrupt);
+    logic = FALSE;
+    if (val) {
+      logic = atof (val); /* warning: round-off error is a danger */
+      free (val);
+    }
+  }
   /* 'last' and 'next' should only affect one loop */
   loop_last = loop_next = FALSE; 
