ON KEY (TSB)

Aus C64-Wiki
Zur Navigation springenZur Suche springen
ON KEY (TSB)
Syntax: ON KEY <string>: <befehl>
Parameter
string: Tasten, die abgefangen werden sollen
befehl: z.B. GOTO 10000
Einordnung
Typ: Anweisung
Kontext: Strukturkontrolle
Aufgabe: Schaltet die Tastatur-Kontrolle ein
Abkürzung: oN oder on K
Token: $64 $37 (100 55)
Verwandte Befehle
DISABLE - RESUME


Dieser Artikel beschreibt das TSB-Schlüsselwort ON KEY (TSB).
Das entsprechende Simons'-Basic-Schlüsselwort lautet ebenfalls ON KEY.

Typ: Anweisung
Syntax: ON KEY <string>: <befehl>

TSB kann beliebige Tastendrücke unabhängig vom laufenden Programm abfangen. Wenn eine solche Taste gedrückt wird, verzweigt der Interpreter in eine dafür vorzusehende Tastatur-Kontrollroutine innerhalb des Programms, in der dieser Tastendruck behandelt wird. Alle von der Tastatur aus erreichbaren Zeichen sind zulässig (und auch nur sinnvoll). Die zuletzt gedrückte Taste wird in der Speicherstelle $c5ec festgehalten und kann dort abgefragt werden.

ON KEY dient hauptsächlich dazu, Hotkeys in menügeführten Programmen zu ermöglichen, beispielsweise könnte man mit der Tastenkombination C= +b  aus jeder Programmsituation heraus ins Menü "Bearbeiten" wechseln. Man kann ON KEY mehrfach (z.B. mit unterschiedlichen Kontroll-Strings, etwa, um anders gelagerte Vorgänge mit anderen Tasten zu steuern) in einem Programm verwenden. In einem umfangreicheren Anwendungsbeispiel kann man sich die Handhabung von ON KEY näher anschauen.

Beachten: Der Kontroll-String hinter ON KEY sollte stets eine String-Variable oder nur eine String-Konstante sein, insbesondere sollte hier nicht ein beliebiger String-Ausdruck vorkommen, wie etwa zusammengesetzte String-Konstanten, beispielsweise "abc"+"efg", da der Inhalt in diesem Fall vom Interpreter statt im BASIC-Code-Bereich am String-Heap angelegt würde. Dort ist der String jedoch praktisch herrenlos, da er zu keiner Variablen des laufenden Programms gehört, weshalb er vom nächsten Befehl, der Strings bearbeitet, überschrieben würde. ON KEY würde fortan auf keine (oder falsche) Tastendrücke reagieren.

Beispiele[Bearbeiten | Quelltext bearbeiten]

Beispiel 1
10 ON KEY "abc": CALL auswertung

... langes Programm ...

10000 PROC auswertung
10010 DISABLE
10020 tt$ = CHR$(PEEK($c5ec))
10030 IF tt$ = "a" THEN PRINT AT(35,0)"ah! "
10040 IF tt$ = "b" THEN PRINT AT(35,0)"beh!"
10050 IF tt$ = "c" THEN PRINT AT(35,0)"zeh!"
10060 RESUME

Wenn der Benutzer "a", "b" oder "c" drückt, springt der Interpreter in die BASIC-Zeile 10000 und kehrt nach RESUME an den Ausgangspunkt zurück.

Eine Zeile 10 könnte auch wie folgt aufgebaut sein:

10 ON KEY "abc": DISABLE: auswertung: RESUME
...

Bei RUN würde also der Interpreter nach ON KEY den Rest der Zeile übergehen und dann während des Programmlaufs auf das Drücken einer der Tasten "a", "b" oder "c" warten. Wird eine davon gedrückt, arbeitet der Interpreter die Befehle ab DISABLE ab. RESUME führt dann zurück an die Stelle im Programm, an der der Tastendruck erfolgte.

Beispiel 2

Siehe ON KEY (TSB)/Anwendungsbeispiel.