S_Input Eingabekontrolle für den GFA-Basic-Input-Befehl

Wissen sie, wie man ein Anwenderprogramm schnell auf Brauchbarkeit prüfen kann ? Man wartet einfach auf eine Eingabe und betätigt dann, anstatt der geforderten Tasten, relativ wahllos die Tastatur. Wenn sich das Programm dann sang- und klanglos verabschiedet, weiß man, daß der Programmierer nicht sorgfältig gearbeitet hat.

Manchmal liegt es aber auch an der eingesetzten Programmiersprache. GFA-Basic bietet für die Eingabe verschiedene Formen des Input-Befehls, die jedoch eins gemeinsam haben: Eine Überprüfung auf Zulässigkeit der Eingabe kann erst nach Abschluß derselben erfolgen. Das kann man bei einfachen Ja-Nein Entscheidungen mit der Alert-Box umgehen, bei der Eingabe von File-Namen mit der Fileselect-Box. Bei echten Dialogen wird aber der Programmieraufwand groß: Entweder man schreibt sich eine eigene Input-Routine, die jedes einzelne Zeichen überprüft, oder man verwendet ein Re-source-File und damit die in das Gern eingebauten Dialogfunktionen.

Die S_Input Proceduren gehen einen anderen Weg, der wesentlich weniger Aufwand erfordert: Vor jeder Eingabe wird einfach die Tastatur so umprogrammiert, daß die 'falschen’ Tasten nicht mehr Ihren eigentlichen Ascii-Code senden, sondern das Zeichen Chr$(0), also nichts! Zusätzlich ist auch die Alternate-Taste abgeschaltet, so daß auch die hebräischen und sonstigen Spezialzeichen nicht mehr eingegeben werden können.

Ein Mangel der Procedur sei nicht verschwiegen: Die Control-Taste ist nicht gesperrt, so daß noch einige unzulässige Eingaben möglich sind. Die Entscheidung darüber, welche Tasten erlaubt sein sollen, wird einfach mit einem String getroffen, in den man die ‘erlaubten’ Tasten einträgt. Alles weitere kann man dem dokumentierten Listing entnehmen. Wenn man nun die S Input Prozeduren in eigene Programme einbindet, kann ein Anwender des Programms zumindest bei den Eingaben weniger Fehler machen!

Helmut Schönbom

' S_input Tasten vor einer Eingabe sperren
' **********************************************

Dim Buf%(96)	!	Puffer
' -----------------------------------
' So werden die Prozeduren aufgerufen
'
@Init("abcdefghijklmnopqrstuvwxyz") ! erlaubte Zeichen 
@S_input("Kleinbuchstaben",12)	!	Eingabetext, Länge der Eingabe

@Init("12345678S0,")	! diesmal mit Zahlen und Komma
@S_input("Zahlen",8)	!	Eingabetext, Länge der Eingabe
@Norm
' -----------------------------------
Procedure Init(S$)
	Void Xbios(24)	!	Normale Tastatur einschalten
	S$=S$+Chr$(8)+Chr$(13)+Chr$(127)	! Backspace und Return erlauben
	Tz%=Xbios(16,L:-1,L:-1,L:-1)	!	Tabellenzeiger
	Buf%=Varptr(Buf%(0))
	Bmove Lpeek(Tz%),Buf%,384	!	Tabelle kopieren
	For 1=1 To 384	! 3 Tabellen mit 128 Zeichen
		If Instr (S$,Chr$(Peek(Buf%+I)))=0	! Mit erlaubten Zeichen vergleichen
			If 71<I<80	! Cursortasten und Delete nicht sperren 
				Poke Buf%+I,0	! übrige Tasten in der Tabelle sperren
			Endif 
		Endif
	Next I
		Void Xbios(16,L:Buf%,L:Buf%+128,L:Buf%+256) ! Neue Tabelle für Tastatur
Return
' -----------------------------------
Procedure S_input(T$, L%)
	Spoke SH484,Peek(SH484) And &HF7	! Alternate sperren
	Print L%;Space$ (1) ;T$;" ? ";
	Form Input L%,Test$
	Spoke &H484,Peek(&H484) Or &H8	! Alternate erlauben
	Print Test$
Return
' -----------------------------------
Procedure Norm 
	Void Xbios(24)	! Normtastatur einschalten
Return


Aus: ST-Computer 02 / 1988, Seite 48

Links

Copyright-Bestimmungen: siehe Über diese Seite