Input erwartet Zeichenkette

Alle Programme, die wir Ihnen bisher vorgestellt haben, besitzen einen großen Nachteil: Sie ermöglichen es nur, auf einzelne Tastendrücke zu reagieren. In vielen Fällen wäre es aber nützlich, ganze Zeichenketten , wie z. B. Verzeichnisnamen, eingeben zu können. Wir zeigen Ihnen, wie Sie das recht komfortabel bewerkstelligen können.

Mit INPUT.DEB können Sie die Eingabe einer beliebigen Zeichenkette anfordern, wobei sich zusätzlich ein Text vorgeben läßt, den nur noch bestätigt oder geändert zu werden braucht. Dabei lassen sich Ihre Eingaben mit den Richtungstasten (Cursor links und rechts) editieren. Sie können mit [Pos1] und [Ende] an den Anfang oder das Ende der Eingabe springen, per Tastenkombination [Strg] + [Ende] den Rest bis zum Zeilenende löschen und mit [Backspace] oder [Entf] wie gewohnt löschen. »Normale« Eingaben, also Buchstaben oder Ziffer werden in den Text eingefügt, störende Steuerzeichen werden vorsorglich unterdrückt. Nach dem Beenden der Eingabe mit [Return] gibt INPUT den Text auf die Standardausgabe aus, die Sie vom Bildschirm grundsätzlich in eine Datei umleiten sollten.

Ausgeklügelte Kombinationen mit speziellen Filtern (siehe Kapitel »Ohne Filter extra…«) erlauben die Zerlegung oder Ausrichtung der Eingabe nach den verschiedensten Kriterien – und wenn es nur mit UPPER.DEB eine Umwandlung in Großbuchstaben ist. INDEMO.BAT zeigt Ihnen eine typische Anwendung von INPUT.DEB, die z. B. für ein Installationsprogramm wahlweise die Angabe eines ansonsten erst einzugebenden Verzeichnisses bereits als Parameter erlaubt:

@ECHO OFF
IF NOT "%1"=="" GOTO WEITER
SAY INDEMO >TMP.BAT
SAY Verzeichnis=
INPUT C:\WORD>>TMP.BAT
ECHO.
TMP
:WEITER
IF EXIST TMP.BAT DEL TMP.BAT
SAY Ist das Verzeichnis %1 in Ordnung? (J/N)
ASK JjNn
ECHO.
IF ERRORLEVEL 3 INDEMO
ECHO Das Programm wird im Verzeichnis %1 installiert...

Mit einem kleinen Trick können Sie nun endlich auch beliebige Texteingaben in Systemvariablen vornehmen! Unser nächstes Beispiel zeigt Ihnen, wie das geht:

SAY SET PATH=> TMP.BAT
SAY Neuer Pfad: 
INPUT %PATH%» TMP.BAT
CALL TMP.BAT
DEL TMP.BAT
Name: INPUT.DEB
Funktion: Nimmt eine Texteingabe entgegen und gibt sie auf der Standardausgabe aus.
Übersetzung: DEBUG <INPUT.DEB
Prüfsumme: A7A8
Anwendung: INPUT [Text] >DateiText: in der Eingabezeile eventuell vorgegebener Text

Datei: Erhält die die Texteingabe

Einschränkungen: Die Textlänge ist auf 64 Zeichen beschränkt. Funktions- und Sondertasten besitzen nicht ihre gewohnte Funktion.
A
MOV BX,2            ;100
MOV BP,[80]         ;103
SUB BP,2001         ;107
JNB 10F             ;10B
XOR BP,BP           ;10D
XOR SI,SI           ;10F
MOV DI,BP           ;111
CALL 14B            ;113
MOV AH,8            ;116
INT 21              ;118
CMP AL,8            ;11A
JNZ 129             ;11C
LEA DI,[SI-1]       ;11E
CALL 14B            ;121
CALL 1BC            ;124
JMP 116             ;127
CMP AL,1B           ;129
JNZ 13F             ;12B
XOR DI,DI           ;12D
CALL 14B            ;12F
MOV DI,SI           ;132
XCHG BP,DI          ;134
CMP SI,DI           ;136
JZ 111              ;138
CALL 1A8            ;13A
JMP 136             ;13D
CMP AL,D            ;13F
JNZ 163             ;141
CALL 149            ;143
XOR SI,SI           ;146
DEC BX              ;148
MOV DI,BP           ;149
CMP DI,BP           ;14B
JA 1BB              ;14D
CMP SI,DI           ;14F
JZ 1BB              ;151
MOV AL,[SI+82]      ;153
JB 15E              ;157
MOV AL,8            ;159
SUB SI,2            ;15B
CALL 1AA            ;15E
JMP 14B             ;161
CMP AL,0            ;163
JNZ 18D             ;165
MOV AH,8            ;167
INT 21              ;169
CMP AL,4F           ;16B
JZ 111              ;16D
CMP AL,53           ;16F
JZ 124              ;171
CMP AL,75           ;173
JZ 132              ;175
XOR DI,DI           ;177
CMP AL,47           ;179
JZ 113              ;17B
LEA DI,[SI-1]       ;17D
CMP AL,4B           ;180
JZ 113              ;182
ADD DI,2            ;184
CMP AL,4D           ;187
JZ 113              ;189
JMP 116             ;18B
CMP AL,20           ;18D
JB 116              ;18F
CMP BP,40           ;191
JNB 18B             ;194
LEA DI,[SI+1]       ;196
CALL 1AA            ;199
XCHG AL,[SI+81]     ;19C
CMP SI,BP           ;1A0
JBE 199             ;1A2
INC BP              ;1A4
JMP ne 113          ;1A5
MOV AL,20           ;1A8
INC SI              ;1AA
MOV [80],AL         ;1AB
MOV CX,1            ;1AE
MOV DX,80           ;1B1
MOV AH,40           ;1B4
INT 21              ;1B6
MOV AL,[80]         ;1B8
RET                 ;1BB
CMP SI,BP           ;1BC
JZ 1BB              ;1BE
MOV DI,SI           ;1C0
DEC BP              ;1C2
CMP SI,BP           ;1C3
JZ 1D4              ;1C5
MOV AL,[SI+83]      ;1C7
MOV [SI+82],AL      ;1CB
CALL 1AA            ;1CF
JMP 1C3             ;1D2
CALL 1A8            ;1D4
JMP ne 14B          ;1D7

RCX
DA
NINPUT.COM
W
Q

Quelle: 200 Utilities für PC-/MS-DOS von Gerhard Schild und Thomas Jannot