Home > CBM > BASIC > Keywords > Then 180 Subpages: (divide), (equal), (less), (minus), (more), (multiply), (plus), (power), Abs, And, Append, Asc, Atn, Auto, Backup, Bank, Begin, Bend, Bload, Boot, Box, Bsave, Bump, Catalog, Char, Chr, Circle, Close, Clr, Cmd, Collect, Collision, Color, Concat, Cont, Copy, Cos, Data, Dclear, Dclose, Dec, Def, Delete, Dim, Directory, Dispose, Dload, Do, Dopen, Draw, Ds, Ds string, Dsave, Dverify, El, Else, End, Envelope, Er, Err, Exit, Exp, Fast, Fetch, Filter, Fn, For, Fre, Get, Get num, Getkey, Go, Gosub, Goto, Graphic, Gshape, Header, Help, Hex, If, Input, Input num, Instr, Int, Joy, Key, Left, Len, Let, List, Load, Locate, Log, Loop, Mid, Monitor, Movspr, New, Next, Not, Off, On, Open, Or, Paint, Peek, Pen, Pi, Play, Pointer, Poke, Pos, Pot, Print, Print num, Pudef, Quit, Rclr, Rdot, Read, Record, Rem, Rename, Renumber, Restore, Resume, Return, Rgr, Right, Rlum, Rnd, Rreg, Rspcolor, Rsppos, Rsprite, Run, Rwindow, Save, Scale, Scnclr, Scratch, Sgn, Sin, Sleep, Slow, Sound, Spc, Sprcolor, Sprdef, Sprite, Sprsav, Sqr, Sshape, St, Stash, Step, Stop, Str, Swap, Sys, Tab, Tan, Tempo, Ti, Ti string, To, Trap, Troff, Tron, Until, Using, Usr, Val, Verify, Vol, Wait, While, Width, Window, Xor |
| Keyword | Abbreviation | Token (hex) | Version(s) | Classification | | THEN | T{Shift+H} | A7 | 1.0 to 7.0 | Preposition |
IF condition { GOTO lineNumTrue | THEN [ lineNumTrue | BEGIN ] } [ statementT ] [ : statementT ] ... [ statementT : ] ... BEND [ junk1 ] [ : ELSE [ lineNumFalse | BEGIN ] [ statementF ] [ : statementF ] ... [ statementF : ] ... BEND [ junk2 ] ] | Parameters | Type | Legal Value(s) | Default Value | Note(s) | | condition | Boolean | all numeric | | | lineNumTrue | Unsigned integer | 0 ~ 63999 | | Must be a literal number Branched to when condition is true (not 0) | statementT | Command or Statement | all* | | Must be valid in current direct/RUN mode Executed when condition is true (not 0) | junk1 | Literal character(s) | any but colon (:) | | ignored; similar to DATA | | lineNumFalse | Unsigned integer | 0 ~ 63999 | | Only valid in v3.5, 4.7, and 7.0 Must be a literal number. Branched to when condition is false (0) | | statementF | Command or Statement | all* | | Only valid in v3.5, 4.7, and 7.0 Must be valid in current direct/RUN mode Executed when condition is false (0) | junk2 | Literal character(s) | all | | ignored; just like REM |
Program flow control. Conditionally execute statement(s) or change program execution line.
Because the syntax shown above is rather complex, let me explain the 3 possibilities with the THEN clause. THEN may be followed by: - a literal line number (a numeric variable or expression is forbidden),
- or a series of statements that must all fit on the same line,
- or the BEGIN keyword (allows for multiple lines, but only in v7.0).
The THEN clause is only executed when the condition is true (evaluates to non-zero). Like most prepositions, attempting to use THEN by itself (as a command or statement) will generate a SYNTAX ERROR. The first statement following THEN (or lineNumTrue, lineNumFalse, BEGIN, or ELSE), if any, does not need a leading colon (:). This makes typing programs a bit easier and saves a byte; however, many BASIC extensions will fail if a leading colon is not present. It seems this is a hack written by Microsoft in the original version of BASIC. It essentially short-circuits the normal BASIC execution logic, with some ugly side-effects. Besides causing trouble for BASIC extensions, HELP will highlight the entire IF / THEN / ELSE construct when the error occured in the THEN clause; similarly error trapping is messed up; the hacked implementation also delays execution of a COLLISION routine. The Syntax allows THEN (but not ELSE) to be replaced with GOTO for program branching, but attempting to use GO TO in this case will cause SYNTAX ERROR. You can blame Commodore for this bug. * The selected command/statement(s) must be valid for the current Interpreter mode (Direct Mode or Run Mode, per the current state of the BASIC Interpreter). Example 1:
IF 1 THEN PRINT "TRUE"
TRUE
READY.
X=0: IF X=1 THEN PRINT "TRUE"
READY.
IF X=0 THEN PRINT "EQUALS ZERO IS TRUE" : ELSE PRINT "UNTRUE"
EQUALS ZERO IS TRUE
READY.
NEW
READY.
10 X=1 : IF X=1 THEN BEGIN
20 : PRINT "TRUE" : X = 2 : BEND : ELSE PRINT "FALSE" : X = 0
30 PRINT X
RUN
TRUE 2
READY.
|
Example 2 is for BASIC v1.0 and v2.x which lack an ELSE clause (uses GOTO):
NEW
READY.
10 X=1 : IF X=1 THEN PRINT "TRUE" : X=2 : GOTO 30 :REM THEN clause + GOTO to skip ELSE clause
20 PRINT "FALSE" : X = 0 : REM the ELSE clause
30 PRINT X
RUN
TRUE 2
READY.
|
© H2Obsession, 2014 |