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