Structured programming for portable BASIC. rice <> spaghetti
Since support for conditional and iterative blocks other then
FOR/NEXT varies among BASIC implementations, code blocks using
standard subroutines and IF-THEN statements. Minimize line number
dependence.
Subroutines have the virtue that their length can change without
impacting other code (as long as enough line space is reserved
between code segments).
* Conditional blocks
<line> IF <condition> THEN GOSUB <subr1>
<line> IF <condition> THEN GOSUB <subr1> ELSE GOSUB <subr2>
All conditionally executed statements in subroutines <subr1>,
<subr2>.
** First Generation BASIC
<line> IF NOT <condition> THEN <line>+2
<line>+1 GOSUB <subr1>
<line>+2 ...
<line> IF NOT <condition> THEN <line>+3
<line>+1 GOSUB <subr1>
<line>+2 GOTO <line>+4
<line>+3 GOSUB <subr2>
<line>+4 ...
<line>-1 LET E9=3*<ncase>+<line>
<line> IF NOT <cond1> THEN <line>+3
<line>+1 GOSUB <subr1>
<line>+2 GOTO E9
<line>+3 IF NOT <cond2> THEN <line>+6
<line>+4 GOSUB <subr2>
<line>+5 GOTO E9
<line>+6 ...
...
<line>+3*(<ncase>-1)
IF NOT <condn> THEN <...
(... avoid CASE structures)
* Conditional iteration
(test before)
<line> IF <iterate-condition> THEN GOSUB <subr1> : GOTO <line>
(test after)
<line>-10 GOSUB <subr1>
<line> IF <iterate-condition> THEN GOSUB <subr1> : GOTO <line>
** First Generation BASIC
<line> IF <exit-condition> THEN <line>+3
<line>+1 GOSUB <subr1>
<line>+2 GOTO <line>
<line>+3 ...
<line> GOSUB <subr1>
<line>+1 IF <repeat-condition> THEN <line>
<line>+2 ...
* Program layout
!bwbasic maximum line number is 32766!
- 10- 990: Program identification, documentation
- 1000- 5990: Initialization, main program
- 6000- 6099: Functions
- 6100- 7090: Subroutine 6100
- 7100- 8090: Subroutine 7100
- ...
- 29100-30090: Subroutine 29100
- 31000-32766: Data