FETCH (TSB)

Aus C64-Wiki
Zur Navigation springenZur Suche springen
FETCH (TSB)
Syntax: FETCH [AT(zl,sp)] <string>, <len>, <variable>
Parameter
string: enthält die zulässigen Tasten
len: Höchstlänge der Eingabe
variable: Variable, der die Eingabe zugewiesen wird
Einordnung
Typ: Anweisung
Kontext: Eingabe
Aufgabe: kontrollierte Eingabe
Abkürzung: fE
Token: $64 $27 (100 39)
Verwandte Befehle
GET - INPUT


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

Typ: Anweisung 
Syntax: FETCH [ AT(zl,sp) ] <string>, <len>, <variable>

Die Anweisung FETCH ist eine gelungene Kombination aus GET und INPUT. Bei GET hat man die Möglichkeit, vom Programm aus zu überwachen, welche Zeichen eingegeben werden dürfen und wie viele. INPUT weist Eingaben vorher festgelegten Variablen zu. FETCH bietet beides zugleich, man kann kontrollieren, welche und wie viele Zeichen eingetippt werden, und diese werden komfortabel vom Befehl direkt einer gewünschten Variablen zugewiesen.

Der String-Ausdruck in Argument <string> gibt an, welche Tasten während der Eingabe erlaubt sein sollen, Argument <len> definiert dabei die Höchstlänge der Eingabe und in Argument <variable> wird die String-Variable angegeben, die das Ergebnis aufnehmen soll. Mit dem optionalen Parameter AT legt man fest, an welcher Stelle auf dem Bildschirm FETCH eingesetzt werden soll.

Um Platz zu sparen, gibt es drei Sonderzeichen, die jeweils für einen ganzen Bereich zulässiger Zeichen stehen:

  • "{home}" oder CHR$(19) steht für alle Kleinbuchstaben (im Klein-Groß-Modus),
  • "{crsr down}" oder CHR$(17) steht für alle Ziffern und Satzzeichen einschließlich "@",
  • "{crsr right}" oder CHR$(29) steht für alle Klein- und Großbuchstaben.

Diese drei Sonderzeichen sind beliebig mit anderen Tasten kombinierbar, z. B. hätte man mit "{crsr right}0123456789 ." alle Buchstaben, die Ziffern, Punkt und Leertaste als zulässig ausgewählt.

Obwohl intern das INPUT des C64-Kernals verwendet wird, bei dem das Zulassen des Zeichens "," (Komma) eigentlich unweigerlich zur Fehlermeldung ?EXTRA IGNORED führt, wenn es verwendet wird (das Komma trennt bei INPUT die Werte zweier angehängter Variablen voneinander), kann man unter TSB das Komma (fast) folgenlos verwenden. Ein Komma führt zu keiner Meldung mehr. Kommt mehr als eines vor, werden alle bis auf das letzte in Punkte verwandelt. Auch ein Doppelpunkt (der ?REDO FROM START erzeugen würde) wird in einen Punkt umgewandelt.

?REDO FROM START kann weiterhin vorkommen, wenn der gewählte Variablentyp nicht mit der Eingabe übereinstimmt. Weniger als 3 Argumente lösen einen ?SYNTAX ERROR aus. Werden noch weitere Variablen nach Argument 3 angegeben, werden diese jeweils mit dem "??"-Prompt abgefragt, wobei sich hier nur das gewöhnliche INPUT-Verhalten zeigt. Haben die ersten beiden Argumente nicht den entsprechenden Ausdruckstyp (Zeichenkette, Zahl), kommt es zu einem ?TYPE MISMATCH ERROR.

Weitere Unterschiede zwischen FETCH (TSB) und der Version von Simons' Basic:

  • In TSB ist es auch möglich, gar kein Zeichen einzugeben (und nur die RETURN-Taste zu drücken), was bei der Ergebniszuweisung den Wert der bei FETCH verwendeten Variablen so belässt wie vor dem Aufruf von FETCH.
  • FETCH in TSB beachtet den RVS-Modus. Ist er an, werden die Eingaben korrekt invertiert angezeigt und stören so nicht den Charakter des laufenden Programms.
  • Während man in Simons' Basic die maximale Eingabelänge größer als den zulässigen Wert 88 für den Eingabepuffer wählen kann, wird dies in TSB mit einer Fehlermeldung abgefangen.
  • Bei Erreichen der vorgegebenen maximalen Eingabelänge (Parameter <len>) verschwindet in TSB der Eingabe-Cursor. Man kann jedoch die schon getippten Zeichen auch jetzt noch löschen. Erst die RETURN-Taste macht eine Eingabe endgültig.
  • Ist die Kontrollzeichenkette <string> leer, reagiert SB fehlerhaft (es erlaubt Eingaben unvorhersehbar), während TSB (seit v2.21108) einen "?illegal quantity error" ausgibt.

Beispiel[Bearbeiten | Quelltext bearbeiten]

10020 PRINT "Beenden (b)? Fortsetzen (f)? ";: FETCH "fb",1,x$: PRINT
10030 IF x$ = "b" THEN PRINT: PRINT "Abbruch nach Fehler!": STOP

Bietet einen Dialog, auf den mit einem einzigen Auswahlzeichen ("f" oder "b") reagiert werden soll.