home *** CD-ROM | disk | FTP | other *** search
/ Black Box 4 / BlackBox.cdr / keybrd / denyuk10.arj / WHYADUCK.ASM < prev    next >
Encoding:
Assembly Source File  |  1992-01-02  |  6.0 KB  |  137 lines

  1.         PAGE ,132
  2. ;       WHYADUCK -- A SOFTWARE FIX FOR MISPLACED CAPS LOCK, ALT, CONTROL, 
  3. ;       INSERT, AND DELETE KEYS ON MANY PORTABLES WHICH ARE BASED ON THE
  4. ;       IBM ENYUKKED KEYBOARD.  TO USE THIS PROGRAM, ENTER
  5. ;       
  6. ;       WHYADUCK     TO INSTALL OR ENABLE IT
  7. ;       WHYADUCK D   TO DISABLE IT.
  8. ;
  9. ;       (Feel free to rename the program to something more intuitive.)
  10. ;
  11. ;       Original program, designed to move Caps Lock and Control Keys,
  12. ;       CAPCON BY P. SWAYNE, Heath Users Ggroup SOFTWARE ENGINEER, 1988
  13. ;
  14. ;       First revision, moved Alt, as well as Caps Lock and Control,
  15. ;       CAPALCON reworked and edited by TOM LOOKER, 20 MAY 91.
  16. ;       Latest revision moves INSERT to Right Alt, DELETE to Right Control,
  17. ;       WHYADUCK revised and edited by TOM LOOKER, 30 DEC 91.
  18. ;
  19. ;      
  20. ;          ==>  Note that key codes are as follows:  3A = CAPSLOCK
  21. ;                                                    1D = L CONTROL
  22. ;                                                    38 = L ALT
  23. ;                                                    E0 1D = R CONTROL
  24. ;                                                    E0 38 = R ALT
  25.  
  26.  
  27. CODE    SEGMENT
  28.         ASSUME  CS:CODE,DS:CODE,ES:CODE,SS:CODE
  29.  
  30. ;       DEFINE SOME MEMORY LOCATIONS
  31.  
  32.         ORG     1
  33. PSPSEG  LABEL   WORD                    ;PROGRAM SEGMENT PREFIX ADDRESS
  34.         ORG     3
  35. MCBSIZE LABEL   WORD                    ;MEMORY CONTROL BLOCK SIZE
  36.         ORG     5DH
  37. FCBARG  LABEL   BYTE                    ;FCB ARGUMENT
  38.         ORG     100H
  39.  
  40. START:  JMP     SHORT SETUP             ;GO SET UP PROGRAM
  41.  
  42. SIG     DB      'CAPCOM 1.0'            ;PROGRAM SIGNATURE
  43.  
  44. ENFLG   DB      1                       ;ENABLE FLAG
  45. INT15V  DW      0,0                     ;INT 15H VECTOR
  46. KEYHB   DB      0                       ;KEY HIGH BIT
  47. E0FLG   DB      0                       ;KEYCODE E0 FLAG
  48.  
  49. ;       INT 15H PROCESSOR
  50.  
  51. INT15:  CMP     AH,4FH                  ;IS THIS A KEY PRESS?
  52.         JZ      GOTKEY                  ;YES
  53.         JMP     CS:DWORD PTR INT15V     ;ELSE, GO ON
  54. GOTKEY: CMP     CS:ENFLG,1              ;CAPCON ENABLED?
  55.         JNZ     INT15X                  ;IF NOT, EXIT
  56.         CMP     AL,0E0H                 ;WAS CODE E0?
  57.         JNZ     NOTE0                   ;NO
  58.         MOV     CS:E0FLG,1              ;ELSE,MARK IT
  59.         JMP     SHORT INT15X            ;AND EXIT
  60. NOTE0:  PUSH    AX                      ;SAVE KEY CODE
  61.         AND     AL,80H                  ;ISOLATE HIGH BIT
  62.         MOV     CS:KEYHB,AL             ;SAVE IT
  63.         POP     AX                      ;GET KEY CODE
  64.         AND     AL,7FH                  ;STRIP HIGH BIT
  65.         CMP     AL,1DH                  ;CTRL KEY?
  66.         JNZ     NOTCTL                  ;NO
  67.         CMP     CS:E0FLG,1              ;RIGHT CTRL KEY PRESSED?
  68.         JZ      RTCTL                   ;IF SO, GO TO RTCTL
  69.         MOV     AL,38H                  ;REPLACE WITH ALT
  70.         JMP     SHORT FIXHB             ;AND FIX HIGH BIT
  71. RTCTL:  MOV     AL,53H                  ;REPLACE WITH DELETE
  72.         JMP     SHORT FIXHB             ;AND FIX HIGH BIT
  73. NOTCTL: CMP     AL,3AH                  ;CAPS LOCK KEY?
  74.         JNZ     NOTCAP                  ;NO
  75.         MOV     AL,1DH                  ;REPLACE WITH CTRL
  76.         JMP     SHORT FIXHB             ;AND FIX HIGH BIT
  77. NOTCAP: CMP     AL,38H                  ;ALT KEY?
  78.         JNZ     FIXHB                   ;NO
  79.         CMP     CS:E0FLG,1              ;RIGHT ALT KEY PRESSED?
  80.         JZ      RTALT                   ;IF SO, GO TO RTALT
  81.         MOV     AL,3AH                  ;REPLACE WITH CAPS LOCK
  82.         JMP     SHORT FIXHB             ;AND FIX HIGH BIT
  83. RTALT:  MOV     AL,52H                  ;REPLACE WITH INSERT
  84.         JMP     SHORT FIXHB             ;AND FIX HIGH BIT
  85. FIXHB:  OR      AL,CS:KEYHB             ;RESTORE WITH HIGH BIT
  86.         MOV     CS:E0FLG,0              ;CLEAR E0 FLAG
  87. INT15X: IRET                            ;RETURN WITH FIXED KEY
  88. ENDRES:                                 ;END OF RESIDENT CODE
  89.  
  90. ;       INSTALL CAPCON IN MEMORY OR DISABLE/ENABLE IT
  91.  
  92. SETUP:  MOV     AH,52H
  93.         INT     21H                     ;GET MCB ADDR.
  94.         MOV     AX,ES:[BX-2]            ;GET FIRST MCB SEGMENT
  95.         MOV     DS,AX                   ;POINT TO IT
  96. FNDLP:  MOV     AX,PSPSEG               ;GET PSP SEGMENT
  97.         MOV     DX,CS
  98.         CMP     AX,DX                   ;IN THIS SEGMENT?
  99.         JAE     NOTFND                  ;IF SO, CAPCON NOT FOUND
  100.         MOV     ES,AX                   ;ELSE, PSP SEGMENT TO ES
  101.         MOV     SI,OFFSET SIG
  102.         MOV     DI,SI
  103.         PUSH    DS                      ;SAVE MCB SEGMENT
  104.         PUSH    CS
  105.         POP     DS                      ;PUT DS HERE
  106.         MOV     CX,5                    ;5 WORDS IN SIGNATURE
  107.         REPZ    CMPSW                   ;IS CAPCON HERE?
  108.         JZ      GOTCC                   ;WE FOUND CAPCON
  109.         POP     DS                      ;RESTORE MCB SEGMENT
  110.         MOV     AX,MCBSIZE              ;GET MCB SIZE
  111.         INC     AX                      ;CORRECT IT
  112.         MOV     BX,DS
  113.         ADD     AX,BX                   ;CALCULATE NEXT MCB SEGMENT
  114.         MOV     DS,AX                   ;POINT TO IT
  115.         JMP     FNDLP                   ;TRY AGAIN
  116. GOTCC:  XOR     AL,AL                   ;ASSUME DISABLE WANTED
  117.         CMP     FCBARG, 'D'             ;DISABLE CAPCON?
  118.         JZ      SETFLG                  ;YES
  119.         INC     AL                      ;ELSE, ENABLE CAPCON
  120. SETFLG: MOV     ES:ENFLG,AL             ;SET CONDITION
  121.         INT     20H
  122. NOTFND: PUSH    CS
  123.         POP     DS                      ;FIX DS
  124.         MOV     AX,3515H
  125.         INT     21H                     ;GET INT 15H VECTOR
  126.         MOV     INT15V,BX               ;SAVE IT
  127.         MOV     INT15V+2,ES
  128.         MOV     AX,2515H
  129.         MOV     DX,OFFSET INT15
  130.         INT     21H                     ;INSTALL NEW VECTOR
  131.         MOV     DX,OFFSET ENDRES
  132.         INT     27H                     ;EXIT WITH CAPCON RESIDENT
  133. CODE    ENDS
  134.         END     START
  135.  
  136.  
  137.