FETCH (TSB)
FETCH (TSB) | |
Syntax: | FETCH [AT(zl,sp)] <string>, <len>, <variable>[, <mode>] |
Parameter | |
string: enthält die zulässigen Tasten | |
len: Höchstlänge der Eingabe | |
variable$: Stringvariable, der die Eingabe zugewiesen wird | |
mode: bei >0: Eingabe erzwingen | |
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$> [ , <mode> ]
Die Anweisung FETCH ist eine gelungene Kombination aus den Fähigkeiten von GET und INPUT. Bei GET hat man die Möglichkeit, vom Programm aus zu überwachen, welche Zeichen eingegeben werden dürfen und wie viele. Und 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 die Höchstlänge dieser Eingabe und in <variable$> wird die String-Variable angegeben, die das Ergebnis aufnehmen soll. 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 und dann neue eingeben. Erst die RETURN-Taste macht eine Eingabe endgültig.
Es ist in TSB - anders als bei Simons' Basic - 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. Der optionale letzte Parameter <mode> erzwingt bei Aktivierung (mit einem Wert größer als Null) den Verzicht auf diese Eigenschaft. Dann muss man auf jeden Fall einen Wert eintippen, RETURN allein reicht nicht mehr.
Mit dem ebenfalls optionalen Parameter AT legt man fest, an welcher Stelle auf dem Bildschirm der FETCH-Eingabe-Cursor erscheinen soll.
Um Platz zu sparen, gibt es drei Kontroll-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 bzw. Großbuchstaben im Groß-Grafik-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 ( bzw. Großbuchstaben und Grafikzeichen).
Diese drei Sonderzeichen sind beliebig mit anderen Tasten kombinierbar, z. B. hätte man mit "{crsr right}0123456789{space}." alle Buchstaben, die Ziffern, den Punkt und die Leertaste als zulässig ausgewählt. Ein Leerstring als Kontrollstring erzeugt einen ?ILLEGAL QUANTITY ERROR. Weniger als drei oder mehr als vier Argumente bei FETCH lösen einen ?SYNTAX ERROR aus.
Hinweis: Der INPUT-Befehl des C64-Kernals wird bei FETCH nicht verwendet, daher kommen dessen große Nachteile nicht zum Tragen (das Zeichen Komma bei der Eingabe führt dort zur Fehlermeldung ?EXTRA IGNORED, ein Doppelpunkt zur Meldung ?REDO FROM START, führende Leerzeichen sind nicht möglich).
FETCH in TSB beachtet den RVS-Modus. Ist er an, werden die Eingaben ohne weiteres Zutun korrekt invertiert angezeigt und stören so nicht den Charakter des laufenden Programms.
Zusammengefasst: 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. Diese Eigenschaft kann mit dem <mode>-Parameter verhindert werden.
- 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 und neue eingeben. Erst die RETURN-Taste macht eine Eingabe endgültig.
- Ist die Kontrollzeichenkette <string> leer, reagiert SB fehlerhaft (es erlaubt dann 255 unvorhersehbare Kontrollzeichen), während TSB (seit v2.21.108) einen ?ILLEGAL QUANTITY ERROR ausgibt.
- Ab TSB v2.40.728 sind bei FETCH nur noch Stringvariable als Zielvariablen gültig.
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.
$$ | %% | AT | CALL | CENTER | CHECK | COLD | COLOR | COPY | CLS | CSET | D! | D!PEEK | D!POKE | DIR | DISK | DISPLAY | DIV | DO | DO NULL | DRAW TO | DUMP | DUP | ELSE | ERROR | EXEC | FETCH | FIND | GRAPHICS | INSERT | INST | JOY | KEY | KEYGET | LIN | MAP | MEMCLR | MEMCONT | MEMDEF | MEMLEN | MEMLOAD | MEMOR | MEMPEEK | MEMPOS | MEMREAD | MEMRESTORE | MEMSAVE | MERGE | MOB ON/OFF | MOBCOL | MOD | MOVE | MULTI | NRM | ON ERROR | ON KEY | OPTION | OUT | PAGE | PAINT | PAUSE | PLACE | RENUMBER | RESUME | RETRACE | SCRLD | SCRSV | SOUND | TEXT | TRACE | USE | WAVE | X!