Document optional line numbers
Chapter 2 gets the rule and the refusal, chapter 4 gets the payoff for LABEL, chapter 9 says DSAVE writes the numbers it handed out and to RENUMBER first if you want gaps, chapter 10 shows a host loading numberless source, chapter 13 gets the QuickBASIC-shaped divergence, and chapter 14's source[] passage gets its second half. Chapter 14 said "two prescans" and listed two; there were three before this and there are four now, so it lists all four and says which of them reports against the right line. TODO.md section 6 records four things found on the way and deliberately not fixed: set_label() filing into the active scope rather than the root, three prescans reporting the wrong line number, duplicate written line numbers still replacing silently, and renumber.c's file-scope scratch arrays. examples/embed.c runs the same program twice, numbered and not, so the example compiles the feature rather than describing it. Its header pointed at ./build/examples/embed, which is not where the binary lands. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -92,6 +92,29 @@ A statement typed with no line number runs immediately, as it should. This was n
|
||||
true until recently — the interpreter used to file everything but a handful of verbs as
|
||||
program text.
|
||||
|
||||
## Line numbers
|
||||
|
||||
**A program in a file does not need them.** Every BASIC this dialect descends from
|
||||
required a number on every line; here that requirement belongs to the prompt alone,
|
||||
where the number is the only thing separating program text from a statement to run now.
|
||||
A program loaded from a file, or handed to the library as a string, may leave them out,
|
||||
and a line without one is given the next number going. The two mix: a numbered line sets
|
||||
where the next unnumbered one goes.
|
||||
|
||||
This is QuickBASIC's idea rather than the C128's, and it is here for the same reason
|
||||
QuickBASIC had it — a program that branches by `LABEL` never names a line number, so the
|
||||
numbers are maintenance with nothing on the other end of it.
|
||||
|
||||
Two consequences worth knowing:
|
||||
|
||||
- **`GOTO <number>` must name a number the program wrote.** In a file with no line
|
||||
numbers `GOTO 100` would otherwise find the hundredth line and branch there. It is
|
||||
refused before the program runs. `GOTO <label>` is unaffected.
|
||||
- **`LIST` and `DSAVE` show the numbers that were handed out**, one apart. `RENUMBER`
|
||||
before `DSAVE` if you want gaps to insert into.
|
||||
|
||||
An unnumbered program is capped at 9998 lines, which is the cap that already applied.
|
||||
|
||||
## Errors
|
||||
|
||||
`ER` and `EL` are **`ER#` and `EL#`**, ordinary global variables. `ER#` holds this
|
||||
|
||||
Reference in New Issue
Block a user