GET
GET | |
Syntax: | GET <Variable>[, <Variable>...] |
Parameter | |
<Variable>: Variable beliebigen Typs zur Übernahme des eingegebenen Zeichens | |
Einordnung | |
Typ: | Anweisung |
Kontext: | Ein/Ausgabe |
Aufgabe: | Einzelne Zeichen von der Tastatur einlesen |
Abkürzung: | gE |
Token: | $a1 (161) |
Verwandte Befehle | |
GET#, INPUT, INPUT# |
Anmerkung: Dieser Artikel beschreibt den BASIC-Befehl GET unter BASIC V2 des Commodore 64.
Der BASIC-Befehl GET liest einzelne Zeichen des Tastaturpuffers in eine Variable (Zeichenketten-, Fließkomma- oder Ganzzahlvariable) ein und kann nur innerhalb von BASIC-Programmen und nicht im Direktmodus genutzt werden. Wird ein Zeichen aus dem Tastaturpuffer ausgelesen, so ist wieder Platz für ein weiteres Zeichen im Tastaturpuffer. Der Tastaturpuffer des C64 hat Platz für maximal 10 Zeichen und ignoriert alle darüberhinausgehenden Eingaben. Der Befehl wartet nicht bis eine Eingabe vorliegt, sondern kehrt sofort mit einem Ergebnis zurück. Ist keine Taste gedrückt und der Tastaturpuffer leer, enthält eine Zahlenvariable den Wert 0, eine Zeichenkettenvariable den Leerstring.
Wird eine Zahlenvariable in dem GET-Befehl genutzt und wird keine Ziffer oder eine der Tasten + , - , . eingegeben, so erscheint die BASIC-Fehlermeldung ?SYNTAX ERROR. Bei Taste , und : wird die Meldung ?EXTRA IGNORED ausgegeben, ohne abzubrechen. Zur Vermeidung einer solchen BASIC-Fehlermeldung samt Programmabbruch sollten immer Zeichenkettenvariablen zum Einlesen von der Tastatur genutzt werden. Wird der GET-Befehl im Direktmodus genutzt, so wird die BASIC-Fehlermeldung ?ILLEGAL DIRECT ERROR ausgegeben.
Mit Hilfe das BASIC-Befehls GET können eigene Eingaberoutinen entwickelt werden und somit einige Nachteile des BASIC-Befehls INPUT behoben werden.
Beispiele[Bearbeiten | Quelltext bearbeiten]
Einfache Eingaberoutine[Bearbeiten | Quelltext bearbeiten]
10 PRINT "Geben Sie Bitte max. 20 Zeichen ein: ";:GOSUB 1000 20 PRINT: PRINT "Sie gaben ein: ";B$ 30 END 1000 REM EINFACHE GET-EINGABEROUTINE 1010 A$="": B$="": A=0: REM INITALISIEREN DER BENUTZTEN VARIABLEN 1020 GET A$: IF A$="" THEN 1020 1030 A=ASC(A$): IF (A<32 OR A>127) AND A<>13 THEN 1020 1040 B$=B$+A$: PRINT A$;: IF LEN(B$)<20 AND A$<>CHR$(13) THEN 1020 1050 RETURN
Es sind in dieser Eingaberoutine alle Zeichen der ASCII-Code-Tabelle von 32 (Taste SPACE bzw. Leerzeichen) bis 127 und 13 (RETURN ) zugelassen, d.h. alle Satzzeichen und mathematische Zeichen, Ziffern (0-9), die Buchstaben (A-Z in Groß- und Kleinschreibung). Die Zulassung nur bestimmter Zeichen bzw. Tasten ist erforderlich, damit nicht die Bildschirmmaske durch Steuerzeichen wie z.B. die Tasten CRSR bzw. Cursor-Tasten zerstört wird. Diese Eingaberoutine wird entweder durch die Taste RETURN oder beim Erreichen von 20 Zeichen beendet.
Komfortable Eingaberoutine[Bearbeiten | Quelltext bearbeiten]
Die Eingaberoutine aus Gold Quest VI. Sie unterstützt auch Eingabe per Joystick Port 2 sowie das Korrigieren der Eingabe per DEL .
Die maximale Länge der Eingabe ist 11 Zeichen (Zeile 818).
C$
ist das Zeichen für den "Cursor" (hier "$").
GOSUB nach 800 fängt mit einer leeren Eingabe an, 801 startet das Prompt mit der voreingestellten Eingabe aus G$
.
800 G$="":A%=1 801 C$="$";CHR$(157):IFG$<>""THENA%=42 802 PRINTG$C$; 810 J=PEEK(56320)AND127:GETE$:IFJ=127ANDE$=""THEN810 811 IFJ<>127THEN830 812 PRINTC$;:E=ASC(E$):IF(E<45ORE>57)AND(E<65ORE>93)ANDE<>13ANDE<>20ANDE<>32THEN810 814 IFE=13THENPRINT" "CHR$(157);:RETURN 816 IFE=20ANDLEN(G$)>0THENG$=LEFT$(G$,LEN(G$)-1):PRINTCHR$(157);C$;CHR$(29);" ";CHR$(157);CHR$(157);:[[GOTO]810 818 IFLEN(G$)<11ANDE<>20THENG$=G$+E$:PRINTE$C$; 820 GOTO810 829 REM *** FOLGENDES WIRD NUR FUER JOYSTICK BENOETIGT 830 IFJ<>119ANDJ<>123THEN810 831 E=1:IFLEN(G$)=11ORJ=123ORA%=42THENE=41 833 A$=MID$("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.- "+CHR$(95)+CHR$(94),E,1):PRINTA$;CHR$(157); 835 FORTW=0TO500:NEXT 840 J=PEEK(56320)AND127:GETE$:IFJ=127ANDE$=""THEN840 841 IFE$<>""THEN812 842 IFJ=111THEN850 844 IFJ=119THENE=E+1:IFE>41THENE=1 846 IFJ=123THENE=E-1:IFE<1THENE=41 848 GOTO833 850 FORTW=0TO500:NEXT:IFE=40THENE$=CHR$(20):GOTO812 852 IFE=41THENE=13:GOTO814 854 E$=A$:GOTO812
ABS | AND | ASC | ATN | CHR$ | CLOSE | CLR | CMD | CONT | COS | DATA | DEF | DIM | END | EXP | FN | FOR | FRE | GET | GET# | GOSUB | GOTO | IF | INPUT | INPUT# | INT | LEFT$ | LEN | LET | LIST | LOAD | LOG | MID$ | NEW | NEXT | NOT | ON | OPEN | OR | PEEK | POKE | POS | PRINT | PRINT# | READ | REM | RESTORE | RETURN | RIGHT$ | RND | RUN | SAVE | SGN | SIN | SPC | SQR | STATUS/ST | STEP | STOP | STR$ | SYS | TAB | TAN | THEN | TIME/TI | TIME$/TI$ | TO | USR | VAL | VERIFY | WAIT