RENUMBER (BASIC 3.5)

Aus C64-Wiki
Wechseln zu: Navigation, Suche
RENUMBER (BASIC 3.5)
Format: 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
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 und überprüft dabei vorab, ob die durch die Anpassungen der Zeilennummern, sich der BASIC-Text vergrößert und den verfügbaren Platz überschreiten kann. Falls ja, endet die Ausführung mit dem Fehler ?OUT OF MEMORY ERROR.
Dann 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 Ganzzahl zu Beginn des entsprechenden Parameters des Befehls gesucht. Wird eine Zahl gefunden, wird überprüft, ob diese im Bereich von 0 bis 63999 liegt, ansonsten 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:

Manche Befehle mit Zeilennummern werden überhaupt nicht beachtet. Neben DELETE und RENUMBER selbst, die ohnehin im Programm nicht verwendbar sind und deren Behandlung keinen Sinn ergibt, bleibt noch LIST, dessen Gebrauch in einem Programm aber auch eher exotisch ist.

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]

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]