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


Links

Copyright-Bestimmungen: siehe Über diese Seite
Classic Computer Magazines
[ Join Now | Ring Hub | Random | << Prev | Next >> ]