Combined Selection/Iteration statements:
Proposed to QB64 is the fourth programming structure, the combined
Selecta-iterative structure.
FORIF <cond>, <var>=<exp1> [TO <exp2>] [STEP <exp3>] [EXCEPT <exp4>]
EXIT FORIF [<n1>]
NEXTIF
Where <cond> is the initial start condition, <exp1> is for starting
loop value, <exp2> is the ending loop value, <exp3> is the step
variable, and <exp4> is the except variable.
Defines the start of a forif/nextif loop structure where <cond> is
the condition which determines the continuation of the forif loop,
<var> is any variable form A to Z, and <exp> is any expression. If
the step variable is omitted then it defaults to one. If the except
variable is omitted it defaults to none. There is space for 26
nested loops.
The forif loop repeats for the positive increment of one from the
first expression to the second and when the counting of the loop
exceeds the second expression, the loop jumps to the statement
following the matching next statement, dependent on the start
condition <cond> which determines if the loop starts. For example:
FORIF M=-1,L=1 TO 10
starts the loop if M is -1, then increments L from 1 to 10,
executing all statements between the for and the matching nextif.
The step variable increments the variable loop by a different
specified value other than the default of one, for example:
FORIF M=-1,L=1 TO 10 STEP 2
increments L from 1 to 10 by steps of 2, if M is -1, executing all
statements between the for and the matching nextif. If the start
expression is greater than the second expression, the step should
be a negative value, for example:
FORIF M=-1,L=10 TO 1 STEP -1
decrements L from 10 to 1, if M is -1, executing all statements
between the for and the matching next.
The except variable skips values in the loop of a specific
expression, for example:
FORIF M=-1,L=1 TO 10 STEP 2 EXCEPT 5
increments L from 1 to 10, if M is -1, by steps of 2, skipping 5,
executing all statements between the for and the matching next.
NEXTIF
Concludes the definition of a forif/nextif loop structure. If the
nextif cannot find the start forif, or if the forif cannot find the
matching nextif, a 'Mismatched forif/nextif.' error is displayed
and the program terminated. Note however that the value of the
variable of the forif counter after the program continues with the
statement following the nextif cannot be relied upon for a specific
value.
CONTINUE FORIF [<n1>]
Jumps to the matching nextif from within a forif/nextif loop,
ignoring the remaining statements in the loop.
For example:
10 INPUT M
20 FORIF M=-1,L=1 TO 10 STEP 2
30 IF L>8 THEN
40 CONTINUE FORIF
50 END IF
60 PRINT "Loop counter at ";L
70 NEXTIF
EXIT FORIF [<n1>]
Jumps to the statement following the matching nextif from within a
forif/nextif loop, ignoring the remaining statements in the loop.
An example of a complete forif/nextif loop could be:
10 INPUT M
20 FORIF M=-1,L=1 TO 10 STEP 2
30 PRINT "Loop counter at ";L
40 IF L=9 THEN
50 EXIT FORIF
60 END IF
70 NEXTIF
Additional loop notes:
The continue and exit statements may also specify the number of
nested loops to exit by adding the number to the statement.
For example:
10 INPUT M, P
20 FORIF M=-1,L=1 TO 10 STEP 2
30 PRINT "Counter 1";L
40 FORIF M=-1,O=1 TO 10
50 IF O=P THEN
60 EXIT FORIF 2
70 END IF
80 PRINT "Counter 2";O
90 NEXTIF
100 NEXTIF
LOOPIF <cond> [UNLESS <exp1>]
EXIT LOOPIF [<n1>]
END LOOPIF
Defines the ending loop of the do/loop structure where the start
of the loop is a loopif. If the condition in <cond> is true, then
the loop starts. The exit loop can optionally exit <n1> number of
loop ends. If the loopif/end loopif is not matched with a beginning
loopif, a "Mismatched loopif/end loopif." error is displayed and
the program ended. Example:
10 INPUT X
20 LOOPIF X/2=X\2
30 FOR Y=1 TO 10
40 IF Y>4 THEN
50 EXIT LOOPIF
60 END IF
70 PRINT Y;
80 NEXT
90 END LOOPIF
100 PRINT
SELECTIF CASE <c1>,<v1>
CASEIF <n1>,<n2>, ...
CASEIF ELSE
END SELECTIF
Calculates the condition in <c1>, then calculates test-value
and compares the value to the following expressions in the caseif
statements, implementing the program statements after the first
matching value, if the selectif condition is true. If none of the
case expressions match the test-value then the caseif else structure
is implemented. Multiple caseif expressions can be separated on one
line with commas, then each expression is compared against the
test-value, and the caseif statements implemented if any expression
matchs the selectif case test-value. Select cases may be nested.
Caseif else may be omitted.
Expressions can also be an operation of two values starting with
the IS or ISNT keyword, such as, IS>10, for example:
10 SELECTIF CASE M=0,X
20 CASEIF IS>10
30 PRINT X
40 END SELECTIF
Only if M is equal to 0.
Expressions with both IS and ISNT expressions result in a true
condition when the first value matchs the test-value, for example:
10 SELECTIF CASE M=0,X
20 CASEIF IS>10,ISNT>20
30 PRINT X
40 END SELECTIF
results in printing x if x is greater than 10, and even if x is
greater than 20 since the test-value matchs IS>10 first, only if
the variable M is equalt to 0.
Expressions can also be a range of values separated with == symbols,
the range being inclusive, for example:
10 SELECTIF CASE M=-1,X
20 CASEIF 1==5
30 PRINT "X is between 1 and 5."
40 END SELECTIF
And case expressions can be mixed, for example:
10 SELECTIF CASE M=-1,X
20 CASEIF 1,2,4==10,IS>15
30 PRINT X
40 END SELECTIF
Case expressions may also be string, for example:
10 SELECTIF CASE Y$="Y",X$
20 CASEIF "A","B",IS>"w"
30 PRINT X$
40 END SELECTIF
Combined Selection/Iteration statement examples:
Display 1 to 10 if X is divisible by 2:
10 INPUT X
20 FORIF X/2=X\2,Z=1 TO 10
30 PRINT Z;
40 NEXTIF
50 PRINT
Display 1 to 10 if X is true, and Y between 1 to 2, or 4 to 5:
10 INPUT X,Y
20 SELECTIF CASE X=-1,Y
30 CASEIF 1==2,4==5
40 FOR Z=1 TO 10
50 PRINT Z;
60 NEXT
70 PRINT
80 END SELECTIF