Commodore‎ > ‎BASIC‎ > ‎Keywords‎ > ‎

UNTIL

Keyword Abbreviation Token (hex) Version(s) Classification
UNTIL U{Shift+N} FC 3.5, 7.0 Presposition

  Syntax  
DO [ { UNTIL | WHILE startTest ] [ : statement ] ...
[ statement : ] ... [ EXIT ] [ : statement ] ...
[ statement : ] ... LOOP [ { UNTIL | WHILE } endTest ] [ : otherCode ] ...
 
Parameters Type Legal Value(s) Default Value Note(s)
startTest Float    all   Zero is false, any other number is true
endTest Float all Zero is false, any other number is true
statement
Command or
Statment
all Inside (during) the loop
otherCode
Command or
Statement
all   Outside (after) the loop
 
 
  Purpose  
Program flow control.  Evaluate a condition and verify false before starting/repeating a block of statement(s).

 
  Remarks  
The entire DO...LOOP construct may be on a single line, or span any number of lines (not only 3 lines like Syntax shows).  The statement(s) will be executed an arbitrary number of times; depending on the results of startTest and/or endTest (if either).  The loop will run forever (or until an EXIT is executed) if both startTest and endTest are omitted.
 
See the entry for DO for more details; this page concentrates on UNTIL itself.
 
The UNTIL clause will check its condition (the startTest following DO or the endTest following LOOP) and if it is false (zero) another (or first) pass of the statement(s) will be made.  If the condition is true = not zero (the test "fails") then DO is removed from the BASIC stack and the otherCode is executed (the code after LOOP, if any).  In the case of startTest (i.e., following DO), a matching LOOP must be found if the test "fails" or LOOP NOT FOUND ERROR occurs.
 
Unlike Visual BASIC or C, an UNTIL (or WHILE) test can be made at both the DO (start) and LOOP (end) parts of a pass in CBM BASIC.
  
One problem exists which is similar to that of FOR/NEXT.  The problem is that using LOOP in a conditional statement (IF/THEN/ELSE) may foul things up.  This happens when EXIT occurs before the conditional LOOP or the startTest "fails".  A solution is similar to that of a conditional NEXT, which is to follow the conditional LOOP with GOTO to get to the real/unconditional end of the loop.
 
Whenever UNTIL appears, its associated condition (startTest or endTest) is required; if missing, a SYNTAX ERROR occurs and if the condition is not a numeric expression a TYPE MISMATCH ERROR is generated.
 
Example:
NEW

READY.
10 X = 0: DO UNTIL X>2 : PRINT X;
20 : Y = 0: DO: PRINT Y
30 : Y = Y+1 : LOOP UNTIL Y>1
30 X = X+1 : LOOP
RUN
 0  0
 0  1
 1  0
 1  1
 2  0
 2  1

READY.
 
  Compare With  
ELSE, IF, ON, WAIT
 
  Contrast With  
  See Also  

© H2Obsession, 2014
Comments