Rice Code				-*- mode: org; -*-

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