ON

Aus C64-Wiki
Zur Navigation springenZur Suche springen
ON
Syntax: ON <Sprungindex> GOTO / GOSUB [<Zeilennummer>][,[<Zeilennummer>]]...
Parameter
<Sprungindex>: numerischer Ausdruck der zu wählenden Zeilennummer
<Zeilennummer>: einer der wählbaren Zeilennummer
Einordnung
Typ: Anweisung
Kontext: Programmstruktur
Aufgabe: Steuerung des Programmablaufs
Abkürzung: -
Token: $91 (145)
Verwandte Befehle
GOSUB, GOTO, IF, THEN

Anmerkung: Dieser Artikel beschreibt den BASIC-Befehl ON unter BASIC V2 des Commodore 64.


Der BASIC-Befehl ON wird im Zusammenhang mit den BASIC-Befehlen GOTO und GOSUB und einem Wert (das Argument Zahl von ON) genutzt, um abhängig vom Wert der ermittelten Zahl zu verschiedenen Sprungzielen zu verzweigen.
Die Liste hinter GOTO bzw. GOSUB enthält durch Komma getrennte Sprungziele als numerische Konstanten (keine allgemeinen Ausdrücke) im Wertebereich der zulässigen Zeilennummern (0-63999) oder Leerangaben sind. Die Sprungziele haben folgende Eigenschaften:

  • Eine Leerangabe entspricht dabei der Zeilennummer 0. Existiert diese Zeile nicht, mündet dies in der BASIC-Fehlermeldung ?UNDEF'D STATEMENT ERROR.
  • Ein Sprung zur angegebenen Zeilennummer wird nur dann ausgeführt, wenn der Wert des Arguments Zahl zwischen 1 und der Anzahl der tatsächlich angeführten Sprungziele liegt.
  • Zahl darf generell nur Werte von 0 bis 255 annehmen, sonst wird mit dem Fehler ?ILLEGAL QUANTITY ERROR abgebrochen.
  • Ergibt die Auswertung zu Zahl keine Ganzzahl, wird automatisch analog zu INT die entsprechende Ganzzahl ermittelt.
  • Falls die Zahl 0 oder größer als die Anzahl der Sprungziele ist, wird zu keinem der Sprungziele verzweigt und der BASIC-Befehl ON übergangen.
  • Ein nachfolgender GOTO-Befehl kann nicht als GO TO geschrieben werden.

Liefert das Argument zu ON keinen Zahlentyp (also eine Zeichenkette), erscheint die BASIC-Fehlermeldung ?TYPE MISMATCH ERROR. Enthält das Argument eine Zahl außerhalb des zulässigen Zeilennummernbereichs, führt dies zur BASIC-Fehlermeldung ?SYNTAX ERROR. Falls die Zeile zur gewählten Zeilennummer nicht existiert, endet dies in der Ausgabe der BASIC-Fehlermeldung ?UNDEF'D STATEMENT ERROR. Sonstige Berechnungsfehler des ON-Arguments können gegebenenfalls weitere BASIC-Fehlermeldungen hervorrufen, wie z.B. die BASIC-Fehler ?DIVISION BY ZERO ERROR oder ?OVERFLOW ERROR.


Bei den Diskettenbefehlen ab BASIC 3.5 dient das Schlüsselwort ON auch als syntaktisches Trennelement, dass statt oder nach einem Komma die Angabe der Gerätenummer einleitet (siehe Beispiel).

Beispiele[Bearbeiten | Quelltext bearbeiten]

Typische Anwendung[Bearbeiten | Quelltext bearbeiten]

Verwendung mit GOTO ...

10   INPUT "Geben Sie bitte eine Zahl an "; A
20   PRINT: ON A GOTO 1000,2000,3000
999  END
1000 PRINT "1. Sprungziel"
1001 A=A+1: GOTO 20
2000 PRINT "2. Sprungziel"
2001 A=A+1: GOTO 20
3000 PRINT "3. Sprungziel"
3001 A=A+1: GOTO 20

Verwendung mit GOSUB ...

10   INPUT "Geben Sie bitte eine Zahl an "; A
20   ON A GOSUB 1000,2000,3000: PRINT
999  END
1000 PRINT "1. Unterprogramm"
1001 A=A+1: RETURN
2000 PRINT "2. Unterprogramm"
2001 A=A+1: RETURN
3000 PRINT "3. Unterprogramm"
3001 A=A+1: RETURN

Berechneter Parameter[Bearbeiten | Quelltext bearbeiten]

Es dürfen auch beliebige Berechnungen vorgenommen werden. Allerdings sollte vorher sichergestellt werden, dass keine unzulässigen Werte entstehen können, die womöglich zu einem BASIC-Fehler und damit unerwarteten Abbruch des Programms führen könnten:

20 ON A/4 GOSUB  1000,2000,3000

Menü[Bearbeiten | Quelltext bearbeiten]

Eine einfache Menübehandlung und Verteilung zu den verschiedenen Funktionen:

100 PRINT "AUSWAHLMENUE:"
110 PRINT "1) DATEN AUFNEHMEN"
120 PRINT "2) DATEN ZEIGEN/AENDERN"
130 PRINT "3) DATEN DRUCKEN"
140 PRINT "0) ENDE"
200 GET A$: IF A$="" GOTO 200
210 ON VAL(A$)+1 GOTO 10000,1000,2000,3000
220 GOTO 100
...
1000 REM AUFNEHMEN
...
2000 REM ZEIGEN/AENDERN
...
3000 REM DRUCKEN
...
10000 END

IF-GOTO-Nachbildung[Bearbeiten | Quelltext bearbeiten]

IF-GOTO-Äquivalent mit ON-GOTO:

10 IF A > 0 GOTO 99

entspricht im wesentlichen

10 ON -(A > 0) GOTO 99 

allerdings mit dem Unterschied, dass bei der IF-Variante alles hinter dem GOTO ignoriert wird. In der ON-Variante wird die Ausführung unmittelbar nach einem ":" fortgesetzt, wenn das Sprungziel nicht gewählt wurde.

Diskettenbefehle ab BASIC 3.5[Bearbeiten | Quelltext bearbeiten]

Inhaltsverzeichnis der Diskette im Laufwerk mit Geräteadresse 9 anzeigen:

DIRECTORY ON U9