Erschienen in 64'er Magazin, Ausgabe unbekannt · Originaldatei: CRSRLOCK.TXT
Hinweis: Dies ist das an die Redaktion eingereichte Manuskript, nicht der gedruckte Endtext. Layout, Bildunterschriften, Korrekturen und Kürzungen der Redaktion können in der veröffentlichten Fassung abweichen.
Cursor - Lock
Tunen Sie den INPUT-Befehl! Mit unserer Routine werden Eingaben bedeutend komfortabler und sicherer. Endlich ist Schluß mit dem Problem, daß Cursorbewegungen die Bildschirmmaske zerstören, oder daß keine Doppelpunkte und Kommata eingegeben werden können. Und das alles ohne größere Veränderungen am fertigen Programm!
Nikolaus M. Heusler
Der INPUT-Befehl des Basic V2 eines C 64 hat einige entscheidende Nachteile. Da zur Eingabe der normale Fullscreen-Editor des C 64 verwendet wird, ist es für den Anwender des Programms möglich, durch Betätigen der Cursorsteuertasten den Eingabebereich zu verlassen. Es muß gar nicht mutwillig sein: Gelangt man versehentlich beispielsweise auf die Home-Taste (eigentlich sollte mit DEL ein Zeichen gelöscht werden), geht der C 64 gnadenlos nach links oben. Die Eingabe kann man getrost vergessen: Auch wenn man jetzt mit den Cursortasten an die ursprüngliche Stelle zurückgeht, ist nichts mehr zu retten.
Ein weiterer Schönheitsfehler war bisher, daß INPUT nur mit Tricks die Eingabe der sogenannten »Trennzeichen«, also Doppelpunkt und Komma erlaubt. Gerade bei der Eingabe von Texten oder Namen ist aber zum Beispiel das Komma oft erforderlich.
Es gibt Alternativen: Viele Programmierer schreiben sich unter Verwendung des GET-Befehles eine eigene Eingaberoutine. Nachteil: Geschieht dies in Basic, sind solche Routinen recht langsam und produzieren darüber hinaus relativ viel String-Müll, der nach einiger Zeit unweigerlich die Kunstpause in Form einer Garbage-Collection auslöst. Steigt man auf Maschinensprache um, entfallen zwar diese Probleme, jedoch sind dabei entstehende Routinen oft nicht ausreichend komfortabel. Beispielsweise will man oft schon Vorgaben am Bildschirm ausgeben, die ggf. einfach mit RETURN bestätigt werden müssen.
Es wäre viel einfacher, wenn man weiterhin den gewohnten INPUT-Befehl verwenden könnte, nur eben ohne die beschriebenen Nachteile. Genau das ist unter Verwendung von »Cursor-Lock« möglich. Dieses nur wenige Bytes lange Maschinenprogramm muß nur einmal zu Beginn eines Basicprogramms nachgeladen und aktiviert werden, weitere Änderungen zum Beispiel an einem fertigen Programm sind nicht unbedingt erforderlich. Cursor-Lock manipuliert direkt im System den INPUT-Befehl und stellt die Nachteile ab.
Obwohl die Routine aus Gründen des Komforts und der Geschwindigkeit vollständig in Maschinensprache geschrieben ist, benötigen Sie nur Basickenntnisse, um damit arbeiten zu können. Laden Sie Cursor-Lock in Ihrem Programm mit der Befehlsfolge
1 IF A=0 THEN A=1: LOAD "CURSOR-LOCK",8,1
2 SYS 50505
die möglichst in den ersten beiden Zeilen stehen sollte. Jetzt wurde der Editor verändert, so daß es nicht mehr möglich ist, mit den Cursortasten die Eingabezeile zu verlassen. Eingaben können nach wie vor mit dem normalen INPUT-Befehl erfolgen.
Da die Veränderungen den gesamten C 64-Editor betreffen und damit auch im Direktmodus wirksam sind, sollten Sie zum Editieren eines Programms mit
POKE 1,55
die Änderungen wieder abschalten. Mit
POKE 1,53
oder
SYS 50505
kann danach ggf. Cursor-Lock wieder aktiviert werden. Da, wie gesagt, ab jetzt auch Kommas und Doppelpunkte eingegeben werden können, ist es nicht mehr möglich, etwa bei
INPUT "DREI ZAHLEN";A,B,C
die drei Eingaben durch Kommas abzutrennen. Stattdessen müssen Sie jetzt nacheinander die drei Werte eingeben und jeweils mit RETURN bestätigen. Soll Ihr Programm READ- oder INPUT#-Befehle enthalten, ist es in den meisten Fällen notwendig, davor mit
POKE 1,55
den Normalzustand des Computers wiederherzustellen. Die Möglichkeit, Kommas und Doppelpunkte zu lesen, gilt nämlich sonst auch für READ/DATA, was hier jedoch nicht erwünscht sein wird. Diese Einschränkung wiegt jedoch in der Praxis nicht schwer, da normalerweise am Anfang eines Programms mit READ alle Werte gelesen werden. Erst danach erfolgen INPUT-Befehle, READ wird nicht mehr benötigt.
Übrigens wurde auch die RUN/STOP-Taste gesperrt, so daß Programme damit nicht mehr verlassen werden können. Mithin ist auch RUN/STOP-RESTORE unwirksam.
Anhand eines Beispiels soll die Anwendung erklärt werden:
1 IF A=0 THEN A=1: LOAD "CURSOR-LOCK",8,1
2 REM NOCH NICHT AKTIVIEREN!
10 FOR I=1 TO 5:READ A(I):NEXT
11 REM DAMIT DER READ-BEFEHL RICHTIG ARBEITET
20 SYS 50505:REM JETZT EINSCHALTEN
30 INPUT "IHR NAME ";NA$
40 PRINT "SIE HEISSEN ";NA$
50 POKE 1,55:REM ZUR SICHERHEIT
60 END
100 DATA 1,2,3,4,5:REM DURCH KOMMA GETRENNT!
Wie Sie sehen, empfiehlt es sich, vor Beendigung des Programms die Cursor-Lock Funktion wieder abzuschalten (Zeile 50).
Ein kurzer Hinweis zur Funktionsweise: Nach dem Start mit SYS 50505 (leicht zu merken!) kopiert das Programm die Roms von $A000-$BFFF (Basic) und $E000-$FFFF (Betriebssystem) in das jeweils darunterliegende RAM. Dort werden Änderungen vorgenommen. Unter anderem schreibt das Programm in die Tabellen, welche dem System die Codes aller Tasten mitteilen, an einige Stellen einen »nicht belegt«-Code, um die Tasten CLR, HOME, CRSR OP/DOWN, INSERT abzuschalten. Weiter wird die Routine zur Erkennung von RUN STOP unwirksam gemacht. Um zu verhindern, daß bei der Eingabe der linke oder rechte Rand der Eingabezone verlassen wird, erfolgt eine Manipulation der Interrupt-Routine. Wurde eine Taste gedrückt, prüft der C 64 erst, ob sich der Cursor noch im Eingabefenster befindet. Sonst wird die Taste nicht angenommen. Vor jedem INPUT-Befehl speichert Cursor-Lock die aktuelle Cursorposition als linken Eingaberand. Damit wird verhindert, daß der Anwender den Dialogstring überschreibt.
Um die Eingabe der Trennzeichen zu ermöglichen, löscht Cursor-Lock die Befehle zur Erkennung von Komma und Doppelpunkt im INPUT-Befehl. Da die entsprechende Routine jedoch alle Eingabe-Befehle, also auch READ, INPUT# und GET steuert, ist es erforderlich, vor GET oder READ Cursor-Lock wie oben erklärt mit
POKE 1,55
abzuschalten, wenn mehr als ein Wert gelesen werden soll.
Nach all diesen Manipulationen erfolgt programminter ein POKE 1,53, um von ROM- auf RAM-Betrieb umzuschalten. Cursor-Lock ist installiert.