CGOTO
Aus C64-Wiki
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Dieser Artikel beschreibt das Simons'-Basic-Schlüsselwort CGOTO.
Typ: Anweisung Syntax: CGOTO <ausdruck>
CGOTO ist ein Befehl, der lange Sprungtabellen hinter dem BASIC-Befehl ON ersetzt. Statt die Sprungziele wie bei ON vorzugeben und dann durch Angabe der Platznummer des gewünschten Ziels aufzurufen, kann hinter CGOTO ohne große Tipperei sofort die gewünschte Zielzeile durch eine Berechnung angepeilt werden. Die Verwendung von CGOTO setzt voraus, dass beim Programmieren die Zeilen so angeordnet sind, dass für den Algorithmus <ausdruck> hinter CGOTO diese Zeilen auch erreichbar bleiben.
Leider gibt es kein entsprechendes CGOSUB. Da Simons' Basic ohnehin darauf ausgerichtet ist, ohne Zeilennummern auszukommen (s. EXEC und PROC), stellt sich der Nutzen von CGOTO als eher zweifelhaft dar.
Beachten: Nach einem RENUMBER muss der Algorithmus hinter CGOTO angepasst werden, sonst funktioniert das Programm nicht mehr (wenn er sich anpassen lässt!)
Beispiel: ... 50 i4=1: GOSUB 1500: IF ri=0 THEN 50 60 IF ri=1 THEN GOSUB 1300: i7=i7+1: i8=1: i4=2: IF i7>mn THEN i7=1 70 IF ri=2 THEN GOSUB 1300: i7=i7-1: i8=1: i4=2: IF i7=0 THEN i7=mn 80 IF ri=3 THEN i8=i8+1: IF i8>ho THEN i8=1 90 IF ri=4 THEN i8=i8-1: IF i8=0 THEN i8=ho 100 IF ri=5 THEN i6=br: GOSUB 1300: GOSUB 1700: GOSUB 2000: zl=1: br=i6: GOTO 30 110 ON i4 GOSUB 1610, 1600: GOTO 50 999 END ... (Dies ist eine Menü-Navigationskontrolle. In Zeile 50 werden die Pfeiltasten abgefragt, die Routine liefert in RI die angesteuerte Richtung zurück. In Zeilen 60 bis 90 wird darauf reagiert. Die Variable I4 steuert dabei das Öffnen eines der beiden Menükästen in den Zeilen 1600 und 1610 (Zeile 110 nach ON). Zeile 100 ist die Reaktion auf die <RETURN>-Taste. Im Folgenden eine CGOTO-Version davon: ) ... 110 CGOTO (i4-1)*10+1600 ... 1620 GOTO 50 (Diese Änderung hätte die gleiche Wirkung, ist aber kürzer. Eine echte CGOTO-Version hätte in I4 bereits die Zeilennummernschrittweite vorgesehen und wäre dadurch noch kürzer (CGOTO 1600+I4).)