RENUM¶
Purpose¶
To renumber program lines and automatically update all line number references in GOTO, GOSUB, THEN, ELSE, ON...GOTO, ON...GOSUB, RESTORE, RUN, and ON ERROR GOTO statements.
Syntax¶
Versions: Disk
RENUM has four forms:
RENUM ' Renumber all lines starting at 10, increment 10
RENUM <new_start> ' Renumber all lines starting at new_start
RENUM <new_start>,<old_start> ' Renumber from old_start onwards
RENUM <new_start>,<old_start>,<increment> ' Full control
Parameters can be omitted using commas:
RENUM 100,,20 ' new_start=100, old_start=0 (all lines), increment=20
RENUM ,50,20 ' new_start=10, old_start=50, increment=20
Parameters¶
- new_start: First line number in the renumbered sequence (default: 10)
- old_start: First line to renumber - lines before this stay unchanged (default: 0 = all lines)
- increment: Gap between line numbers (default: 10)
Remarks¶
Automatic Reference Updates¶
RENUM automatically updates line number references in:
- GOTO and GOSUB statements
- IF...THEN line_number and ELSE line_number
- ON...GOTO and ON...GOSUB lists
- RESTORE line_number
- RUN line_number
- ON ERROR GOTO line_number (ON ERROR GOTO 0 stays 0)
- RESUME line_number
- ERL comparisons such as IF ERL=100 THEN ...: the number after ERL and its operator
- LIST, LLIST, DELETE, EDIT and AUTO line numbers and ranges
RENUM changes only the digits of the line numbers. All other text of the program stays as it is:
spaces, case, PRINT #1, the ; and , at the end of a PRINT, strings, DATA and REM text.
A number inside a string, a REM, a DATA statement or an apostrophe comment does not change.
A number must follow its keyword after a space (GOTO 10); MBASIC reads GOTO10 as a variable name.
Range Renumbering¶
When old_start is specified, only lines with numbers >= old_start are renumbered. Lines before old_start keep their original numbers.
This is useful when: - Adding code sections between existing code - Reorganizing parts of large programs - Making room in a specific section
Limitations¶
- Cannot create line numbers > 65529
- Cannot reorder lines (e.g., RENUM 15,30 when lines are 10,20,30)
- If line number reference doesn't exist, prints: "Undefined line xxxxx in yyyyy"
- xxxxx = the bad reference (not changed)
- yyyyy = the line that has it (the number before RENUM)
- RENUM goes on with all other lines
- A successful RENUM prints nothing
- A bad argument gives "Syntax error" (for example
RENUM Aor four parts)
Example¶
Example 1: Renumber Entire Program¶
Before:
After RENUM (default: start at 10, increment 10):
10 PRINT "START"
20 GOTO 40 ' Automatically updated from GOTO 60
30 PRINT "SKIP THIS"
40 PRINT "END"
Example 2: Different Starting Line¶
10 PRINT "ONE"
20 PRINT "TWO"
30 PRINT "THREE"
RENUM 100
100 PRINT "ONE"
110 PRINT "TWO"
120 PRINT "THREE"
Example 3: Range Renumbering¶
Original program:
Renumber from line 30 onwards to make room for more setup code:
RENUM 100,30,10
10 PRINT "INIT"
20 PRINT "SETUP"
100 PRINT "PROCESS A"
110 PRINT "PROCESS B"
120 PRINT "DONE"
Lines 10-20 unchanged, lines 30+ renumbered starting at 100.
Example 4: Custom Increment¶
Example 5: GOTO Reference Update¶
10 INPUT X
20 IF X<0 THEN GOTO 50
30 PRINT "POSITIVE"
40 END
50 PRINT "NEGATIVE"
RENUM 100,0,10
100 INPUT X
110 IF X<0 THEN GOTO 140
120 PRINT "POSITIVE"
130 END
140 PRINT "NEGATIVE"
GOTO 50 automatically updated to GOTO 140.
Example 6: ON...GOTO Reference Update¶
10 INPUT CHOICE
20 ON CHOICE GOTO 100,200,300
100 PRINT "OPTION 1"
110 END
200 PRINT "OPTION 2"
210 END
300 PRINT "OPTION 3"
310 END
RENUM 1000,100,100
10 INPUT CHOICE
20 ON CHOICE GOTO 1000,1100,1200
1000 PRINT "OPTION 1"
1010 END
1100 PRINT "OPTION 2"
1110 END
1200 PRINT "OPTION 3"
1210 END
All three target lines in ON...GOTO list updated.
Example 7: Making Room for Insertions¶
You have lines 10-100 but need to add many lines between 30-40:
Result: - Lines 10-30 stay unchanged - Lines 40+ renumbered to 1000, 1010, 1020... - Now you can add lines 40-999 with room to spare
Common Patterns¶
Tidy up cramped program¶
Make room in middle of program¶
Large increment for big programs¶
Error Messages¶
"Illegal function call"¶
- Trying to create line number > 65529
- A new number that is not above the last line that stays (for example, RENUM 15,30 with lines 10,20,30)
- An increment of 0
- The program is not changed
"Undefined line xxxxx in yyyyy"¶
- Line number reference doesn't exist
- xxxxx = bad reference (unchanged)
- yyyyy = the line that has it (the number before RENUM)
See Also¶
- AUTO - To generate a line number automatically after every carriage return
- DELETE - To delete program lines
- EDIT - To enter Edit Mode at the specified line
- LIST - To list all or part of the program currently in memory at the terminal
- LLIST - To list all or part of the program currently in memory at the line printer