home *** CD-ROM | disk | FTP | other *** search
- ;* ------------------------------------------------------- *
- ;* F1112.ASM *
- ;* Nutzung der Funktionstasten F11 und F12 *
- ;* (c) 1993 Eckart Börnchen & DMV-Verlag *
- ;* ------------------------------------------------------- *
-
- CODE SEGMENT
- ASSUME CS:CODE, DS:CODE
-
- ORG 100h
- START: JMP INIT
-
- ALTINT DD 0 ; Adresse des alten Interrupt 09h
-
- NEUINT PROC FAR ; Neuer Interrupt 09h
- PUSHF ; alten Int. simulieren
- CALL CS:[ALTINT]
- CLI
- PUSHF ; Register sichern
- PUSH AX
- PUSH BX
- PUSH DS
- PUSH DX
- MOV AX, 40h
- MOV DS, AX
- MOV DX, Word Ptr DS:[001Ch] ; Tastaturpuffer leer ?
- MOV BX, Word Ptr DS:[001Ah]
- CMP DX, BX
- JE INT_ENDE ; Wenn ja -> Ende
- MOV BX, Word Ptr DS:[001Ch] ; Tastaturpuffer voll ?
- ADD BX, 2
- CMP BX, Word Ptr DS:[001Ah]
- JE INT_ENDE ; Wenn ja -> Ende
- MOV BX, Word Ptr DS:[001Ah] ; Scan- u. ASCII-Code -> AX
- MOV AX, [BX]
- CMP AL, 0 ; Funktionstasten ?
- JNE INT_ENDE ; Ja -> Codes umwandeln ...
- F11:
- CMP AH, 85h
- JNE F12
- MOV AX, "»" ; Neuer Code für F11
- JMP SHORT INT_ENDE
- F12:
- CMP AH, 86h
- JNE SF11
- MOV AX, "«" ; Neuer Code für F12
- JMP SHORT INT_ENDE
- SF11: ; Shift+
- CMP AH, 87h
- JNE SF12
- MOV AX, 8700h ; Ab hier alter Code
- JMP SHORT INT_ENDE
- SF12:
- CMP AH, 88h
- JNE CF11
- MOV AX, 8800h
- JMP SHORT INT_ENDE
- CF11: ; Ctrl+
- CMP AH, 89h
- JNE CF12
- MOV AX, 8900h
- JMP SHORT INT_ENDE
- CF12:
- CMP AH, 8Ah
- JNE AF11
- MOV AX, 8A00h
- JMP SHORT INT_ENDE
- AF11: ; Alt+
- CMP AH, 8Bh
- JNE AF12
- MOV AX, 8B00h
- JMP SHORT INT_ENDE
- AF12:
- CMP AH, 8Ch
- JNE SHORT INT_ENDE
- MOV AX, 8C00h
- INT_ENDE:
- MOV [BX], AX ; Neuen Code abspeichern
- POP DX ; Register restaurieren
- POP DS
- POP BX
- POP AX
- POPF
- IRET
- IDRES DB "EB" ; Identif. ob resident
- NEUINT ENDP ; Ende residenter Teil
-
- INIT PROC NEAR ; Check-Prozedur
- MOV AX, 3509h ; Int.-Vektor auslesen
- INT 21h
- CMP Word Ptr ES:[IDRES], "BE" ; Bereits installiert ?
- JE DEINST ; Ja -> entfernen
- JMP INST ; Nein -> installieren
- INIT ENDP
-
- INST PROC NEAR ; Installations-Prozedur
- MOV Word Ptr [ALTINT], BX ; Alt-Int. 09h sichern
- MOV Word Ptr [ALTINT+2], ES
- MOV DX, OFFSET NEUINT ; Neu-Int.-handler setzen
- MOV AX, 2509h
- INT 21h
- MOV DX, OFFSET INIT ; Resid. Paragr. berechnen
- ADD DX, 15
- MOV CL, 4
- SHR DX, CL
- PUSH DX ; DX f. res. Ende retten
- MOV DX, OFFSET InstMsg ; Install-meldung ausgeben
- MOV AH, 09h
- INT 21h
- POP DX ; DX restaurieren
- MOV AX, 3100h ; Progr. resident beenden
- INT 21h
- INST ENDP
-
- DEINST PROC NEAR ; Deinstallations-Prozedur
- PUSH DS ; DS f. Deinst-msg retten
- LDS DX, ES:[ALTINT] ; Adr Alt-Int 09h holen
- MOV AX, 2509h
- INT 21h ; Alt-Int-Vekt zurücksetzen
- POP DS ; DS zurücksetzen
- PUSH ES
- MOV ES, ES:[02Ch] ; ENV-Speicher freigeben
- MOV AH, 49h
- INT 21h
- POP ES
- MOV AH, 49h ; Progr.-Speicher freigeben
- INT 21h
- MOV DX, OFFSET DInstMsg ; Deinst-msg ausgeben
- MOV AH, 09h
- INT 21h
- MOV AX, 4C00h ; Programm beenden
- INT 21h
- DEINST ENDP
-
- ; Daten des Installationsteils
- InstMsg DB 13, 10, "F11F12.COM installiert"
- DB 13, 10, "$"
- DInstMsg DB 13, 10, "F11F12.COM deinstalliert"
- DB 13, 10, "$"
-
- CODE ENDS
- END START
- ;* ------------------------------------------------------- *
- ;* Ende von F1112.ASM *
-
-