Formatierte Eingabe
Für professionelle Programme wird oft eine INPUT-Routine benötigt, die nur bestimmte Zeichen zuläßt. Mit diesem Maschinenprogramm können Sie sehr einfach Eingabemasken realisieren.
Haben Sie schon mal wirklich professionelle Programme geschrieben? Dann hat Ihnen mit Sicherheit die INPUT-Routine des C 64-Betriebssystems zu schaffen gemacht, die sämtliche Zeichen zuläßt. Auch solche, die zu völligem Unsinn oder Fehlermeldungen führen. Dieser Mißstand wird in Basic-Programmen meist mit einer GET-Schleife umgangen. Bei dieser Methode wird ständig ein Zeichen von der Tastatur geholt, auf Zulässigkeit überprüft und auf den Bildschirm gedruckt. Die einzelnen Zeichen werden in einem String addiert. Wenn sie mit INS oder DEL im Eingabefeld Korrekturen ausführen wollen, können Sie sich vorstellen, wie kompliziert und zeitraubend eine solche Routine werden kann.
Eine schnelle Lösung dieses Problems schafft dieses Maschinenprogramm, das einen neuen Input-Befehl generiert. Die Syntax des Befehls lautet:
INPUT>Eingabelänge, Spalte, Zeile, Variable
Wie Sie schon an der Syntax sehen, ein recht komfortabler INPUT-Befehl. Mit der Eingabelänge geben Sie an, wie lang das Eingabefeld höchstens sein darf. Durch Angabe von Zeile und Spalte können Sie das Eingabefeld direkt an jeder beliebigen Bildschirmstelle positionieren. Als Variable müssen Sie eine Stringvariable einsetzen, zum Beispiel A$. Sollen ausschließlich Zahlen eingegeben werden, braucht der String nur noch auf Buchstaben hin überprüft werden. Beispielsweise mit folgender Routine:
10 INPUT>4,1,1,A$
20 IF STR$(VAL(A$))=" "+A$ THEN PRINT "ES IST EINE ZAHL":END
30 PRINT "KEINE ZAHL":GOTO 10
Tips zur Eingabe
Das Programm müssen Sie mit dem MSE eingeben und abspeichern. Laden Sie dann die Input-Routine mit LOAD »name«,8,1 oder LOAD "name",1,1 und geben Sie NEW und SYS 49152 zur Initialisierung ein. Danach können Sie Ihre Basic-Programme eintippen und mit dem neuen INPUT>-Befehl verwenden. Die Routine können Sie natürlich auch mit dem Basic-Programm nachladen und mit dem neuen INPUT>-Befehl verwenden.
Zusammenfassung
- Die Routine wird mit SYS49152 initialisiert
- Das Programm benötigt den Speicherbereich von Adresse 49152 bis 49617
- Die Syntax lautet: INPUT>Eingabelänge, Zeile, Spalte, Stringvariable
- Die CLR-, HOME-, RUN-, STOP- und SHIFT-Taste ist bei der Eingabe gesperrt.
- Das Eingabefeld kann mit den Cursortasten nicht verlassen werden.
- INST/DEL wirkt nur innerhalb des Eingabefeldes
- Leerzeichen am Ende der Eingabe werden nicht mit übernommen.
- Benötigen Sie die Leerzeichen am Schluß geben Sie einfach POKE 49298,131 ein. POKE 49298,94 schaltet wieder in den Normalzustand.
Ein Nachteil soll nicht verschwiegen werden:
Fragetext kann nicht, wie beim serienmäßigen INPUT-Befehl, ausgegeben werden. Der Text muß mit PRINT gedruckt werden.
(Thomas Graf/hm)PROGRAMM : E-ROUTINE 64 C000 C1F4 ----------------------------------- C000 : A9 0B A0 C0 8D 08 03 8C AD C008 : 09 03 60 20 73 00 C9 85 18 C010 : F0 06 20 79 00 4C E7 A7 8C C018 : 20 73 00 C9 B1 F0 06 20 26 C020 : BF AB 4C AE A7 A9 00 8D 81 C028 : 6E C1 20 9B B7 8E 6F C1 23 C030 : 20 FD AE 20 9E B7 E0 28 7A C038 : B0 0C 86 FD 20 FD AE 20 3D C040 : 9E B7 E0 19 90 03 4C 48 F8 C048 : B2 8E 70 C1 A4 FD 20 0C 68 C050 : E5 20 24 EA A5 D2 85 FE B1 C058 : 98 18 65 D1 90 02 E6 FE 43 C060 : 85 FD A5 F4 85 FC 98 18 BF C068 : 65 F3 90 02 E6 FC 85 FB 90 C070 : A5 C6 85 CC 8D 92 02 F0 CB C078 : F7 78 A5 CF F0 0C A5 CE B2 C080 : AE 87 02 A0 00 84 CF 20 2A C088 : 13 EA 20 B4 E5 C9 0D D0 31 C090 : 03 4C 71 C1 C9 14 F0 46 DB C098 : C9 9D F0 42 C9 1D F0 29 50 C0A0 : C9 94 F0 61 C9 91 D0 03 8E C0A8 : 4C 41 C1 C9 11 D0 03 4C 7B C0B0 : 54 C1 AE 18 D0 E0 15 F0 DE C0B8 : 08 C9 DB B0 B3 C9 C1 B0 A4 C0C0 : 08 C9 60 B0 AB C9 20 90 86 C0C8 : A7 C9 22 F0 A3 AE 6E C1 E7 C0D0 : EC 6F C1 F0 9B EE 6E C1 71 C0D8 : 20 16 E7 4C 70 C0 AC 6E 23 C0E0 : C1 F0 8D CE 6E C1 C9 9D AE C0E8 : F0 EE B1 FB AA B1 FD 88 7C C0F0 : 91 FD 8A 91 FB C8 C8 F0 60 C0F8 : 07 CC 6F C1 90 EC F0 EA 83 C100 : A9 9D 4C D8 C0 AC 6F C1 59 C108 : CE 6F C1 88 C0 FF F0 2B 35 C110 : CC 6E C1 90 26 B1 FD C9 11 C118 : 20 F0 F0 CC 6F C1 F0 1B 85 C120 : B1 FB AA B1 FD C8 91 FD 18 C128 : 8A 91 FB 88 88 C0 FF F0 FB C130 : 05 CC 6E C1 B0 EA C8 A9 48 C138 : 20 91 FD EE 6F C1 4C 70 95 C140 : C0 AA 38 AD 6E C1 E9 28 06 C148 : 90 07 8D 6E C1 8A 4C D8 E0 C150 : C0 4C 70 C0 AA 18 AD 6E 69 C158 : C1 69 28 B0 07 CD 6F C1 0E C160 : F0 05 90 03 4C 70 C0 8D BE C168 : 6E C1 8A 4C D8 C0 EA EA F8 C170 : EA 4C 96 C1 88 C0 FF D0 8E C178 : 13 20 73 00 C9 00 F0 07 E7 C180 : C9 3A F0 03 4C 79 C1 A0 DC C188 : 00 4C EB C1 B1 FD C9 20 54 C190 : F0 E2 C8 8C 6F C1 20 FD 36 C198 : AE 20 8B B0 48 98 48 20 FA C1A0 : A3 B6 68 85 65 68 85 64 E2 C1A8 : AD 6F C1 20 75 B4 84 FB 88 C1B0 : A0 00 91 64 C8 8A 91 64 31 C1B8 : C8 A5 FB 91 64 A0 01 B1 37 C1C0 : 64 48 C8 B1 64 85 65 68 89 C1C8 : 85 64 AC 6F C1 88 B1 FD BB C1D0 : AE 18 D0 E0 15 F0 08 C9 67 C1D8 : 41 90 04 09 80 D0 06 C9 BE C1E0 : 20 B0 02 09 40 91 64 C0 9E C1E8 : 00 D0 E2 AE 70 C1 20 0C 8C C1F0 : E5 4C AE A7 DA