| Home CBM ASCII-X BASIC Disk Commands Enter RUN mode Program Format Secret Variables Variable Format Expressions Keywords (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 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 Then Ti Ti string To Trap Troff Tron Until Using Usr Val Verify Vol Wait While Width Window Xor Syntax Tokens C128 D64plus Disk Escape Codes Hardware PCxface PETSCII Pet2asc Futurama IBM PC-AT Contact Games Glossary Hall of fame Hall of shame Miscellaneous Privacy policy Programming Twisty puzzles |
IF condition { GOTO lineNumTrue | THEN [ lineNumTrue | BEGIN ] } [ statementT ] [ : statementT ]... [ statementT : ] ... BEND [ junk1 ] [ : ELSE [ lineNumFalse | BEGIN ] [ statementF ] [ : statementF ] ... [ statementF : ] ... BEND [ junk2 ] ]
Program formatting. Allow conditional clause(s) to span multiple program lines.
Although the syntax shown above is rather complex, BEGIN is very simple. It may appear immediately after THEN or ELSE keywords (or both) to allow the conditional statements to span multiple lines. Without BEGIN/BEND, the entire IF/THEN/ELSE construct must fit on a single line. So BEGIN is in someways similar to GOSUB which executes a seperate block of statments (however BEGIN doesn't normally use the stack). Also similar to GOSUB/RETURN is the fact that if you include BEGIN, you should also include BEND; otherwise you will generate a BEND NOT FOUND ERROR when the opposite case is selected. In BASIC versions prior to 7.0 (i.e., without BEGIN/BEND), there were two or three alternatives:
Like most prepositions, attempting to use BEGIN as a command or statement (i.e., not following THEN/ELSE) will generate a SYNTAX ERROR. The first statement following BEGIN (or lineNumTrue, lineNumFalse, ELSE or THEN), 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 BEGIN clause; similarly error trapping is messed up; the hacked implementation also delays execution of a COLLISION routine. BEGIN/BEND allows real nesting of IF/THEN/ELSE statments (it is broken otherwise, see ELSE). Beware that BASIC does not impose any limits on the depth of nesting which can cause the system to mysteriously crash. In detail, when BEGIN is found while BEND is being sought, BASIC will recursively call "find BEND" which uses 2 bytes of the CPU stack but no test is ever made to see if space is available on the CPU stack. * The selected command/statement must be valid for the current Interpreter mode (Direct Mode or Run Mode, per the current state of the BASIC Interpreter). Example 1:
Example 2 is for BASIC v1.0 and v2.x which lack ELSE and BEGIN/BEND:
© H2Obsession, 2014 |