★ APPLICATIONS ★ PROGRAMMATION ★ REDO FROM START - nein danke|CPC Amstrad International) ★![]() |
INPUT-Befehl (CPC Amstrad International) | Applications Programmation |
Erweiterter INPUT-Befehl Es kann einen wirklich “fuchsig“ machen, wenn bei INPUT und LINE INPUT im BASIC-Bereich falsche Daten eingegeben werden. Denn allzu leicht passiert es, daß versehentlich numerische Eingaben erfolgen, statt geforderte Strings oder umgekehrt. Dadurch wird der Bildschirmaufbau durch die Mitteilung “REDO FROM START“ zerstört. Oder nehmen wir an, es wird eine zwei Zeichen lange Ziffernfolge verlangt und durch zu langes Betätigen oder Unachtsamkeit, hat man auf einen Schlag fünf oder mehr Zeichen eingegeben. Auch das kann zur Zerstörung des Bildauf-baus oder bei fehlenden Abfangroutinen für Eingabefehler, zu unschönen Ergebnissen führen. Nun gut, das erste Problem läßt sich leicht umgehen, indem man ausschließlich Strings in der Eingabe verlangt und diese nötigenfalls erst später mit VAL in numerische umwandelt. Aber dennoch können immer noch zu lange Zeichenfolgen eingegeben werden und längere Fehlerabfangroutinen sind (bei jedem verlangten Input) unvermeidlich. Das ist nun vorbei. Das nachstehend aufgeführte in BASIC realisierte Programm, begrenzt nicht nur die Zeichenlänge, sondern ist zudem auch mit seinen 869 Bytes ziemlich kurz, und Sie benötigen keine Fehlerabfangroutinen mehr. Das Programm läuft in der vorgegebenen Version nur auf dem CPC 664 und 6128. 464 Besitzer müssen vorher den Emulator starten. Das File wird nach Belegung der Abfragevariablen einfach mit GOSUB (Zeilennummer) aufgerufen. Je nachdem, unter welcher Zeilennummer es in Ihrem Programm Verwendung findet. Beachten Sie bei einer Umnumerierung, daß die internen Sprungbefehle angepaßt werden müssen. Bedienungsanleitung Die Routine läuft ohne Abänderungen in allen drei Mods! Wichtig sind die anwenderbezogenen Variablen; zahl = zwei Werte stehen zurVerfügung: null (0) ist die Mitteilung, daß Strings verlangt werden. Hier müssen zwei weitere Variablen definiert werden: pruef1 = Untergrenze und Damit werden dann eventuell zu hohe oder zu niedrige Werte abgefangen. Das ist wichtig bei negativen Eingaben, da die Angabe eines (-) als eine Stelle mitgezählt wird. dev = Hier stehen Werte von 0-7 zur Verfügung. Sie gibt den Stream an, von dem die Eingabe gelesen werden soll. halt = Anzahl der Zeichen, die maximal eingegeben werden können. Werte von 1-255 sind zulässig. Bedenken Sie, daß ein (+) oder (-) als eine Stelle gezählt werden muß. hilf$ = Enthält nach Abarbeitung der Routine den gewünschten String und kann dann z.B. mit versuch$=hilf$ auf andere Strings übertragen werden. Nie länger im Programmablauf behalten, da hilf$ bei Aufruf der Routine gelöscht wird. hilf = Enthält nach Abarbeitung der Routine den gewünschten numerischen Wert (bei zahl = l) ansonsten ähnlich dem hilf$. mal = Zwei Werte möglich. Null unterdrückt Printen der Eingabe auf dem Bildschirm und eins stellt diese an. switch = Kann zwei Werte annehmen. Null ergibt eine normale Eingabe. Eins stellt die Eingabe auf inversen Modus. Vorteil! Die maximale Länge der zu erwartenden Eingabe wird angezeigt. Tastaturbeleglaug DEL: Löscht das letzte eingegebene Zeichen vor dem Cursor. CLR: Vollzieht wirklich CLeaR.Eingabe von vorn. ENTER/RETURN: ist die Eingabebeendigung, wenn mindestens ein Zeichen eingegeben wurde. CURSORTASTEN: rechts wie Leertaste und links wie DEL. Die anderen haben keine Funktion; ansonsten wie auf dem Tastaturfeld vorhanden. Besonderheiten Ausdruck auf dem Bildschirm können Sie z.B. unsichtbar machen, um zu Beginn oder während des Programmablaufs in ruhe Codewörter eingeben zu können, die auch der beste Freund nicht sehen soll. Die zu erwartende Eingabe kann in der Maximallänge des Wortes invers eingegeben werden. So ist zu Beginn bereits zu erkennen, wie lang die Eingabe sein sollte. Vor Aufrufder Routine beachten Die zu Beginn genannten Variablen sind vorher mit Werten zu belegen. Wenn zahl mit eins geladen wird, müssen zusätzlich noch pruefl und prue£2 versorgt werden (bei zahl=0 nicht nötig). Dann ist es wichtig, den Cursor zu positionieren, wo die Eingabe auf dem Bildschirm erfolgen soll. Dazu gibt es zwei Möglichkeiten. Einmal direkt hinter dem Frageausdruck (Semikolon setzen). Das Semikolon ist wichtig, da dann kein CR durchgeführt wird. Oder Sie positionieren den Cursor einfach mit LOCATE. Danach können Sie beruhigt die Routine mit GOSUB (Zeilennummer) aufrufen. Zu guter Letzt noch ein kurzes Testprogramm, welches mit CHAIN MERGE die Routine selbsttätig nachlädt (folglich separat abspeichern).
|