Sondertasten in DOS belegen

DOS bietet zwar die Möglichkeit, Tasten mit Hilfe von ANSI.SYS umzubelegen. Allerdings ist die Programmierung der dafür notwendigen Escape-Folgen, die zumeist über den PROMPT-Befehl erfolgt, sehr zeitaufwendig und unkomfortabel. DEFINE.DEB schafft hier endlich Abhilfe. Mit ihm wird das Belegen von Funktions- und anderen Tasten zum Kinderspiel! Das Programm belegt die gewünschte Tastenkombination mit einem beliebigen Text, indem es die entsprechende Steuersequenz an den Konsolentreiber ANSI.SYS sendet. Da Umbelegungen in aller Regel nur für erweiterte Tasten angewendet werden (Wer will schon auf der Taste »z« ein »x« o. ä.?), erkennt DEFINE auch nur solche Tastenfolgen an. Möglich sind also die meisten der Kombinationen aus [Shift], [Strg] oder [Alt] mit den Funktionstasten F1 bis F12, den Buchstaben von A bis Z, mit Zeichen wie ß und ‚, mit den Ziffern von 0 bis 9 sowie mit Sondertasten wie [Pos1], [Ende], Cursor rauf, runter, links oder rechts, Seite rauf oder runter, [Einfg], [Entf] oder [Druck].

Um die Anwendung von DEFINE möglichst komfortabel zu gestalten, haben wir für alle Tasten sowohl die deutsche als auch die amerikanische Bezeichnung vorgesehen. »Strg-Pos1« ist also gleichbedeutend mit »Ctrl-Home«, »Bildrauf« mit »PgUp« und so fort. Am letzten Beispiel sehen Sie, daß die englischen Tastenbezeichnungen zumeist eingängiger sind, weshalb wir ausnahmsweise den zusätzlichen Aufwand getrieben haben. Sie sollten daher unbedingt darauf achten, daß sich im Tabellenteil des Listings kein Fehler einschleicht – jeder einzelne ».« und jedes »=« hat seine spezielle, für die gesamte Funktion des Programmes entscheidende Bedeutung.

Ein abschließendes Return können Sie übrigens wie beim PROMPT-Befehl mit dem Parameter »;13« erreichen, das auch inmitten einer Definition erscheinen darf. Achtung! Nicht alle denkbaren Kombinationen sind möglich, weil das BIOS für einige Tastenfolgen einfach keine Codes liefern kann. Außerdem ist nur maximal ein (!) »Shift«-Status erlaubt; Sie dürfen also nicht mehrere der Schlüsselwörter »Shift«, »Strg« und »Alt« in einer einzigen Definition verwenden.

Dreifachkombinationen wie [Strg] – [Alt] – [A] kann das BIOS nämlich nicht verarbeiten, weshalb diese auch bevorzugt zum Aktivieren von speicherresidenten Programme verwendet werden. DEFINE unterliegt den üblichen Einschränkungen, die für ANSI.SYS gelten. Achten Sie z. B. auch auf Programme, die die Tastatur über einfache DOS-Funktionen abfragen. Sie könnten wichtige Tasten anders definieren und dadurch diverse Programmfunktionen unerreichbar machen. Den Norton-Editor könnten Sie z. B. nach der Umbelegung von F3 nicht mehr beenden. Eine versehentliche Fehlbelegung können Sie aufheben, indem Sie die Taste mit ihrem eigenen Code programmieren – »DEFINE Strg-Pos1=0;119« hebt z. B. die Umbelegung von Strg-Pos1 wieder auf. Die nötigen Codes können Sie mit BIOS.DEB (Kapitel »Tastatur«) ermitteln, wobei Sie das hexadezimale Ergebnis ins Dezimalsystem umrechnen müssen. Selbstverständlich können Sie dabei auch CONVERT.DEB aus dem Kapitel »Andere Befehle« zu Hilfe nehmen. Dabei sollten Sie allerdings bedenken, daß eine solche rückgängig gemachte Umbelegung bei den meisten ANSI.SYS-Version trotzdem Speicher belegt, von dem in der Regel nur rund 200 Byte zur Verfügung stehen.

Einige denkbare Definitionen sind:

DEFINE Alt-X="EXIT";13
DEFINE ^-Home="CLS";13 (gleichbedeutend mit DEFINE Strg-Pos1="CLS";13)
DEFINE F11="DIR/P";13
DEFINE Shift-F1="CLS";13;"VER";13
DEFINE Ctrl-PrtSc="Protokolldruck...";16
Name: DEFINE.DEB
Funktion: Belegt Sondertasten mit Zeichenfolgen.
Übersetzung: DEBUG <DEFINE.DEB
Prüfsumme: A214
Anwendung: DEFINE [S-]T=[„Text“][;13][;…]S = Zu drückende Shift-Taste: [Shift] = Shift, Sh oder S [Strg] = Strg, Ctrl, Ctl, C oder ^ [Alt] = A oder Alt T = Zu belegende Taste: F1 … F12, A … Z, ß, ‚, 0 … 9 Home (Pos1), End (Ende), Up (rauf), Down (runter), PgUp (Bildrauf), PgDn (Bildrunter), Left (links), Right (rechts), Ins (Einfg), Del (Entf) oder PrtSc (Druck) Text: Neue Belegung für die Taste

;13 = Return

Einschränkungen: Es können nur Tasten mit erweitertem Code belegt werden.
A
CLD                 ;100
MOV DI,19A          ;101
CALL 15F            ;104
JCXZ 10D            ;107
MOV [166],BP        ;109
MOV BX,CX           ;10D
MOV BL,[BX+18F]     ;10F
MOV By[145],3D      ;113
CMP By[DI],2E       ;118
JZ 172              ;11B
CALL 15F            ;11D
JCXZ 118            ;120
ADD CL,[BX+DI-4]    ;122
JB 118              ;125
MOV DX,344          ;127
CALL 175            ;12A
MOV AL,CL           ;12D
CALL 179            ;12F
MOV SI,BP           ;132
MOV DL,3B           ;134
CALL 18A            ;136
LODSB               ;139
MOV DL,70           ;13A
CMP AL,D            ;13C
JZ 18A              ;13E
MOV DL,AL           ;140
JMP 136             ;142
CMP AL,2D           ;144
JZ 161              ;146
LODSB               ;148
CMP AL,41           ;149
JB 153              ;14B
CMP AL,5A           ;14D
JA 153              ;14F
OR AL,20            ;151
SCASB               ;153
JZ 144              ;154
MOV AL,[145]        ;156
DEC DI              ;159
SCASB               ;15A
JNZ 15A             ;15B
JMP 165             ;15D
XOR DX,DX           ;15F
MOV CX,DX           ;161
MOV BP,SI           ;163
MOV SI,82           ;165
INC DX              ;168
CMP By[DI],2E       ;169
JNZ 148             ;16C
ADD DI,5            ;16E
RET                 ;171
MOV DX,33D          ;172
MOV AH,9            ;175
JMP 18C             ;177
AAM                 ;179
PUSH AX             ;17B
CMP AH,0            ;17C
JZ 186              ;17F
MOV AL,AH           ;181
CALL 179            ;183
POP DX              ;186
ADD DL,30           ;187
MOV AH,2            ;18A
INT 21              ;18C
RET                 ;18E
DB 0,1,1,1,2,2,2,2,2,3,3
DB "shift-sh-s-strg-c-"
DB "ctrl-ctl-^-alt-a-."
DB "1234"
DB "f1=f2=f3=f4=f5=f6="
DB "f7=f8=f9=f10=."
DB 3A,53,5D,67
DB "f11=f12=."
DB 84,86,88,8A
DB "q=w=e=r=t=z=u=i=o="
DB "p=.",FF,FF,FF,F
DB "a=s=d=f=g=h=j=k="
DB "l=.",FF,FF,FF,1D
DB "y=x=c=v=b=n=m=."
DB FF,FF,FF,2B
DB "1=2=3=4=5=6=7=8=9="
DB "0=ß='=.",FF,FF,FF,77
DB "home=up=pgup==left"
DB "==right==end=down"
DB "=pgdn=ins=del=."
DB 46,FF,FF,FF
DB "prtsc=left=right="
DB "end=pgdn=home=."
DB FF,FF,71,FF
DB "pgup=.",FF,FF,83,FF
DB "pos1=rauf=bildrauf="
DB "=links==rechts=="
DB "ende=runter=bild"
DB "runter=einfg=entf=."
DB 46,FF,FF,FF
DB "druck=links=rechts="
DB "ende=bildrunter="
DB "pos1=.",FF,FF,71,FF
DB "bildrauf=."
DB FF,FF,83,FF
DB ".Fehler$",1B,"[0;$"

RCX
249
NDEFINE.COM
W
Q

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