RENUMBER (BASIC 3.5)
RENUMBER (BASIC 3.5) | |
Syntax: | RENUMBER [[<Startzeile neu>], [<Schrittweite>] [,<Startzeile alt>]] |
Parameter | |
<Startzeile neu>: Ganzzahl im Wertebereich von 0 bis 63999 | |
<Schrittweite>: Ganzzahl im Wertebereich von 1 bis 63743 | |
<Startzeile alt>: Ganzzahl im Wertebereich von 0 bis 63999 | |
Einordnung | |
Typ: | Befehl |
Kontext: | BASIC-Editor |
Aufgabe: | BASIC-Programm oder Teile davon neu nummerieren |
Abkürzung: | renU |
Token: | $f8 (248) |
Verwandte Befehle | |
Anmerkung: Dieser Artikel beschreibt den BASIC-Befehl RENUMBER ab Commodore BASIC V3.5 oder höher
Der BASIC-Befehl RENUMBER nummeriert ein BASIC-Programm oder Teile davon neu und passt die Zeilenreferenzen der Sprungbefehle im gesamten BASIC-Programm an.
Der RENUMBER-Befehl kann nur im Direktmodus ausgeführt werden. In einem Programm führt dieser zu einem Abbruch mit der Meldung ?DIRECT MODE ONLY.
RENUMBER besitzt folgende, sämtlich optionale, Parameter:
- <Startzeile neu>: Gibt die Zeilennummer an, mit der der neu nummerierte Programmabschnitt beginnt, vorgegeben ist 10. Überschneidet sich diese Nummer mit dem nicht neu zu nummerierenden Programmteil, wird die Fehlermeldung ?ILLEGAL QUANTITY ERROR ausgegeben, d.h. die Zeilennummer muss größer als die Zeilennummer jener Zeile sein, die unmittelbar vor <Startzeile alt> vorkommt. Werte über 63999 (höchste erlaubte Zeilennummer) erzeugen einen ?SYNTAX ERROR.
- <Schrittweite>: Abstand der einzelnen Zeilennummern im durchnummerierten Abschnitt, vorgegeben ist 10. Erlaubt sind Werte von 1 bis 63743. Werte von 63744 (hex. F900) bis 65535 sind zwar erlaubt, erzeugen aber beim Vorhandensein mindestens einer BASIC-Zeile einen ?LINE NUMBER TOO LARGE ERROR. Werte kleiner 1 oder größer als 65535 verursachen einen ?ILLEGAL QUANTITY ERROR.
- <Startzeile alt>: Zeilennummer, ab der mit der Nummerierung begonnen wird, vorgegeben ist 0. Erlaubt sind Werte von 0 bis 65535. Werte außerhalb dieses Bereichs erzeugen einen ?ILLEGAL QUANTITY ERROR. Die angegebene Zeile muss nicht existieren, es wird ab der ersten Zeile, deren Wert größer oder gleich dem Parameter ist, mit der Nummerierung begonnen.
Ein RENUMBER ohne Parameter entspricht einem RENUMBER 10,10,0
.
RENUMBER arbeitet in mehreren Phasen:
- Es wird vorab überprüft, ob die neue Nummerierung auf den gültigen Zeilennummernbereich umgelegt werden kann. Die Zeilennummern dürfen dabei einen Wert von 0 bis 63742[1] annehmen. Ein Überschreiten der oberen Grenze wird mit dem Fehler ?LINE NUMBER TOO LARGE ERROR geahndet.
- Der Speicherplatzverbrauch, der sich durch die Anpassungen der Zeilennummern ergibt und den den BASIC-Text vergrößern kann, liefert bei Überschreitung des verfügbaren Platzes den Fehler ?OUT OF MEMORY ERROR.
- Die eigentliche Anpassung der Zeilennummern erfolgt nun analog zum simulierten Durchlauf davor. Dabei passt RENUMBER die Zeilennummer bei Befehlen mit Zeilenreferenzen (GOTO, GOSUB, THEN, ON..GOTO/GOSUB, ELSE, RESTORE, RESUME, RUN, TRAP, in BASIC 7.0 COLLISION) an die neue Nummerierung an. Dabei wird keine syntaktische Kontrolle vorgenommen, sondern einfach nach einer Ganzzahlkonstante zu Beginn des entsprechenden Parameters des Befehls gesucht. Wird eine Zahl gefunden, wird überprüft, ob diese im Bereich von 0 bis 63999 liegt, sonst wird ein ?SYNTAX ERROR ausgegeben. Ist die Zahl im erlaubten Bereich, wird die BASIC-Zeile mit der entsprechenden Nummer gesucht. Schlägt die Suche fehl, erfolgt bei BASIC 7.0 ein Abbruch mit ?UNRESOLVED REFERENCE ERROR, hingegen wird bei BASIC 3.5 schlicht die Zeilennummer 65535 eingesetzt. Wenn die Zeile gefunden, trägt RENUMBER ihre neue Nummer als Zeilenreferenz ein. Dabei werden Zeichen, die keine Ziffern sind, im Anschluss einer Zahl ignoriert (siehe Beispiele).
Vorsicht: Von den zuvor genannten Befehlen könnten bei den folgenden für die Zeilennummer arithmetische Ausdrücke vorliegen, die RENUMBER falsch (wenn der Ausdruck mit einer Zahlenkonstante beginnt, siehe nächstes Beispiel) oder gar nicht anpassen kann:
Nahezu alle Fehlermeldungen erfolgen ohne Angabe einer Zeilennummer, außer bei ?UNRESOLVED REFERENCE ERROR, wo die betroffene Zeile angegeben wird.
Der folgende Code
10 TR=100 20 TRAP 100+TR 30 TRAP TR+100 100 PRINT "XYZ" 200 RESUME NEXT |
ergibt nach einem RENUMBER-Aufruf:
10 TR=100 20 TRAP 40+TR 30 TRAP TR+100 40 PRINT "XYZ" 50 RESUME NEXT |
Nach dem RENUMBER zeigen beide TRAP-Befehle auf die falsche Zeile. Als Konsequenz sollten berechnete Sprungziele generell vermieden werden.
Beispiele[Bearbeiten | Quelltext bearbeiten]
RENUMBER 1000,10,100
Das Programm wird ab Zeile 100 neu nummeriert, die erste Zeile erhält die Nummer 1000, die nächste 1010 usw.
RENUMBER ,,10
Die Zeilen ab 10 werden mit den Vorgabewerten (Startzeile 10, Schrittweite 10) umnummeriert, wobei etwaige Zeilen 0-9 unberührt bleiben (abgesehen von eventuellen Zeilenreferenzen zu anderen Zeilen >= 10).
Weblinks[Bearbeiten | Quelltext bearbeiten]
Anmerkungen[Bearbeiten | Quelltext bearbeiten]
- ↑ Die maximale Zeilennummer von 63742 ergibt sich aus der Abfrage des höherwertigen Bytes auf kleiner $F9 ($5B94). Der damit maximal zulässige Wert $F8FF/63743 wird dabei auf die letzte Pseudozeile eines BASIC-Programms (bestehend aus drei Nullen), dessen Link-Zeiger auf 0 abgefragt wird, umgelegt. Bei einer minimalen Schrittweite von 1 kann damit die letzte reale Zeile somit 63742 annehmen.
AUTO | BACKUP | BOX | CHAR | CIRCLE | COLLECT | COLOR | COPY | DEC | DELETE | DIRECTORY | DLOAD | DO | DRAW | DS | DS$ | DSAVE | EL | ELSE | ER | ERR$ | EXIT | GETKEY | GRAPHIC | GSHAPE | HEADER | HELP | HEX$ | INSTR | JOY | KEY | LOCATE | LOOP | MONITOR | PAINT | PRINT USING | PUDEF | RCLR | RDOT | RENAME | RENUMBER | RESUME | RGR | RLUM | SCALE | SCNCLR | SCRATCH | SOUND | SSHAPE | TRAP | TROFF | TRON | UNTIL | VOL | WHILE