GET

Aus C64-Wiki
Zur Navigation springenZur Suche springen
Begriffsklärung Der Titel dieses Artikels ist mehrdeutig. GET (Begriffsklärung).
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);:GOTO810
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