home *** CD-ROM | disk | FTP | other *** search
- PAGE ,132
- ; WHYADUCK -- A SOFTWARE FIX FOR MISPLACED CAPS LOCK, ALT, CONTROL,
- ; INSERT, AND DELETE KEYS ON MANY PORTABLES WHICH ARE BASED ON THE
- ; IBM ENYUKKED KEYBOARD. TO USE THIS PROGRAM, ENTER
- ;
- ; WHYADUCK TO INSTALL OR ENABLE IT
- ; WHYADUCK D TO DISABLE IT.
- ;
- ; (Feel free to rename the program to something more intuitive.)
- ;
- ; Original program, designed to move Caps Lock and Control Keys,
- ; CAPCON BY P. SWAYNE, Heath Users Ggroup SOFTWARE ENGINEER, 1988
- ;
- ; First revision, moved Alt, as well as Caps Lock and Control,
- ; CAPALCON reworked and edited by TOM LOOKER, 20 MAY 91.
- ; Latest revision moves INSERT to Right Alt, DELETE to Right Control,
- ; WHYADUCK revised and edited by TOM LOOKER, 30 DEC 91.
- ;
- ;
- ; ==> Note that key codes are as follows: 3A = CAPSLOCK
- ; 1D = L CONTROL
- ; 38 = L ALT
- ; E0 1D = R CONTROL
- ; E0 38 = R ALT
-
-
- CODE SEGMENT
- ASSUME CS:CODE,DS:CODE,ES:CODE,SS:CODE
-
- ; DEFINE SOME MEMORY LOCATIONS
-
- ORG 1
- PSPSEG LABEL WORD ;PROGRAM SEGMENT PREFIX ADDRESS
- ORG 3
- MCBSIZE LABEL WORD ;MEMORY CONTROL BLOCK SIZE
- ORG 5DH
- FCBARG LABEL BYTE ;FCB ARGUMENT
- ORG 100H
-
- START: JMP SHORT SETUP ;GO SET UP PROGRAM
-
- SIG DB 'CAPCOM 1.0' ;PROGRAM SIGNATURE
-
- ENFLG DB 1 ;ENABLE FLAG
- INT15V DW 0,0 ;INT 15H VECTOR
- KEYHB DB 0 ;KEY HIGH BIT
- E0FLG DB 0 ;KEYCODE E0 FLAG
-
- ; INT 15H PROCESSOR
-
- INT15: CMP AH,4FH ;IS THIS A KEY PRESS?
- JZ GOTKEY ;YES
- JMP CS:DWORD PTR INT15V ;ELSE, GO ON
- GOTKEY: CMP CS:ENFLG,1 ;CAPCON ENABLED?
- JNZ INT15X ;IF NOT, EXIT
- CMP AL,0E0H ;WAS CODE E0?
- JNZ NOTE0 ;NO
- MOV CS:E0FLG,1 ;ELSE,MARK IT
- JMP SHORT INT15X ;AND EXIT
- NOTE0: PUSH AX ;SAVE KEY CODE
- AND AL,80H ;ISOLATE HIGH BIT
- MOV CS:KEYHB,AL ;SAVE IT
- POP AX ;GET KEY CODE
- AND AL,7FH ;STRIP HIGH BIT
- CMP AL,1DH ;CTRL KEY?
- JNZ NOTCTL ;NO
- CMP CS:E0FLG,1 ;RIGHT CTRL KEY PRESSED?
- JZ RTCTL ;IF SO, GO TO RTCTL
- MOV AL,38H ;REPLACE WITH ALT
- JMP SHORT FIXHB ;AND FIX HIGH BIT
- RTCTL: MOV AL,53H ;REPLACE WITH DELETE
- JMP SHORT FIXHB ;AND FIX HIGH BIT
- NOTCTL: CMP AL,3AH ;CAPS LOCK KEY?
- JNZ NOTCAP ;NO
- MOV AL,1DH ;REPLACE WITH CTRL
- JMP SHORT FIXHB ;AND FIX HIGH BIT
- NOTCAP: CMP AL,38H ;ALT KEY?
- JNZ FIXHB ;NO
- CMP CS:E0FLG,1 ;RIGHT ALT KEY PRESSED?
- JZ RTALT ;IF SO, GO TO RTALT
- MOV AL,3AH ;REPLACE WITH CAPS LOCK
- JMP SHORT FIXHB ;AND FIX HIGH BIT
- RTALT: MOV AL,52H ;REPLACE WITH INSERT
- JMP SHORT FIXHB ;AND FIX HIGH BIT
- FIXHB: OR AL,CS:KEYHB ;RESTORE WITH HIGH BIT
- MOV CS:E0FLG,0 ;CLEAR E0 FLAG
- INT15X: IRET ;RETURN WITH FIXED KEY
- ENDRES: ;END OF RESIDENT CODE
-
- ; INSTALL CAPCON IN MEMORY OR DISABLE/ENABLE IT
-
- SETUP: MOV AH,52H
- INT 21H ;GET MCB ADDR.
- MOV AX,ES:[BX-2] ;GET FIRST MCB SEGMENT
- MOV DS,AX ;POINT TO IT
- FNDLP: MOV AX,PSPSEG ;GET PSP SEGMENT
- MOV DX,CS
- CMP AX,DX ;IN THIS SEGMENT?
- JAE NOTFND ;IF SO, CAPCON NOT FOUND
- MOV ES,AX ;ELSE, PSP SEGMENT TO ES
- MOV SI,OFFSET SIG
- MOV DI,SI
- PUSH DS ;SAVE MCB SEGMENT
- PUSH CS
- POP DS ;PUT DS HERE
- MOV CX,5 ;5 WORDS IN SIGNATURE
- REPZ CMPSW ;IS CAPCON HERE?
- JZ GOTCC ;WE FOUND CAPCON
- POP DS ;RESTORE MCB SEGMENT
- MOV AX,MCBSIZE ;GET MCB SIZE
- INC AX ;CORRECT IT
- MOV BX,DS
- ADD AX,BX ;CALCULATE NEXT MCB SEGMENT
- MOV DS,AX ;POINT TO IT
- JMP FNDLP ;TRY AGAIN
- GOTCC: XOR AL,AL ;ASSUME DISABLE WANTED
- CMP FCBARG, 'D' ;DISABLE CAPCON?
- JZ SETFLG ;YES
- INC AL ;ELSE, ENABLE CAPCON
- SETFLG: MOV ES:ENFLG,AL ;SET CONDITION
- INT 20H
- NOTFND: PUSH CS
- POP DS ;FIX DS
- MOV AX,3515H
- INT 21H ;GET INT 15H VECTOR
- MOV INT15V,BX ;SAVE IT
- MOV INT15V+2,ES
- MOV AX,2515H
- MOV DX,OFFSET INT15
- INT 21H ;INSTALL NEW VECTOR
- MOV DX,OFFSET ENDRES
- INT 27H ;EXIT WITH CAPCON RESIDENT
- CODE ENDS
- END START
-
-
-