Combined Selection/Iteration statements: Exclusive to Sic64 is the fourth programming structure, the combined Selecta-iterative structure. FORIF , = [TO ] [STEP ] [EXCEPT ] EXIT FORIF [] NEXTIF Where is the initial start condition, is for starting loop value, is the ending loop value, is the step variable, and is the except variable. Defines the start of a forif/nextif loop structure where is the condition which determines the continuation of the forif loop, is any variable form A to Z, and 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 which determines if the loop starts. For example: 10 FORIF M=-1,L=1 TO 10 20 PRINT L; 30 NEXTIF 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: 10 FORIF M=-1,L=1 TO 10 STEP 2 20 PRINT L; 30 NEXTIF 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: 10 FORIF M=-1,L=10 TO 1 STEP -1 20 PRINT L; 30 NEXTIF 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: 10 FORIF M=-1,L=1 TO 10 STEP 2 EXCEPT 5 20 PRINT L; 30 NEXTIF 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 [] 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 [] 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 [UNLESS ] EXIT LOOPIF [] END LOOPIF Defines the ending loop of the do/loop structure where the start of the loop is a loopif. If the condition in is true, then the loop starts. The exit loop can optionally exit 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 , CASEIF ,, ... CASEIF ELSE END SELECTIF Calculates the condition in , 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