home *** CD-ROM | disk | FTP | other *** search
/ Media Share 9 / MEDIASHARE_09.ISO / pascal / tplib21.zip / INSTALL.EXE / CRTKB.ASM < prev    next >
Assembly Source File  |  1993-06-24  |  4KB  |  114 lines

  1. ;               TURBO PASCAL LIBRARY 2.1
  2. ;               Keyboard control module
  3.  
  4.                 TITLE   UNIT ENHCON: Input routines module
  5.                 PAGE    66,132
  6.                 %BIN    12
  7.  
  8. BIOS_KB         MACRO   SERVICE                 ; Call BIOS keyboard service
  9.                 MOV     AH,&SERVICE
  10.                 INT     16H
  11.                 ENDM
  12.  
  13. CODE            SEGMENT WORD
  14.                 ASSUME  CS:CODE
  15.                 LOCALS
  16.                 PUBLIC  FLUSHKB,CAPSLOCK,NUMLOCK,SCROLLLOCK
  17.                 PUBLIC  INSERTLOCK,FORCEINSERT
  18.  
  19.  
  20. ;               PROCEDURE FlushKB;
  21. ;               Flushes keyboard buffer
  22.  
  23. FLUSHKB         PROC    FAR
  24.                 PUSH    BP
  25. @@L1:           BIOS_KB 01H                     ; Check whether chr. in buffer
  26.                 JNZ     @@L2
  27.                 POP     BP                      ; Exit when no character ready
  28.                 RET
  29. @@L2:           BIOS_KB 00H                     ; Remove character from buffer
  30.                 JMP     SHORT @@L1
  31. FLUSHKB         ENDP
  32.  
  33.                 PAGE
  34.  
  35.  
  36. ;               FUNCTION  CapsLock: BOOLEAN;
  37. ;               Returns true if capitals lock is active
  38.  
  39. CAPSLOCK        PROC    FAR
  40.                 PUSH    BP
  41.                 BIOS_KB 02H                     ; Get shift status service
  42.                 POP     BP
  43.                 MOV     CL,6
  44.                 SHR     AL,CL                   ; Isolate required bit
  45.                 AND     AL,01H
  46.                 RET
  47. CAPSLOCK        ENDP
  48.  
  49.  
  50. ;               FUNCTION  NumLock: BOOLEAN;
  51. ;               Returns true if number lock is active
  52.  
  53. NUMLOCK         PROC    FAR
  54.                 PUSH    BP
  55.                 BIOS_KB 02H                     ; Get shift status service
  56.                 POP     BP
  57.                 MOV     CL,5
  58.                 SHR     AL,CL                   ; Isolate required bit
  59.                 AND     AL,01H
  60.                 RET
  61. NUMLOCK         ENDP
  62.  
  63.  
  64. ;               FUNCTION  ScrollLock: BOOLEAN;
  65. ;               Returns true if scroll lock is active
  66.  
  67. SCROLLLOCK      PROC    FAR
  68.                 PUSH    BP
  69.                 BIOS_KB 02H                     ; Get shift status service
  70.                 POP     BP
  71.                 MOV     CL,4
  72.                 SHR     AL,CL                   ; Isolate required bit
  73.                 AND     AL,01H
  74.                 RET
  75. SCROLLLOCK      ENDP
  76.  
  77.                 PAGE
  78.  
  79.  
  80. ;               FUNCTION  InsertLock: BOOLEAN;
  81. ;               Returns true if insert lock is active
  82.  
  83. INSERTLOCK      PROC    FAR
  84.                 PUSH    BP
  85.                 BIOS_KB 02H                     ; Get shift status service
  86.                 POP     BP
  87.                 ROL     AL,1                    ; Isolate required bit
  88.                 AND     AL,01H
  89.                 RET
  90. INSERTLOCK      ENDP
  91.  
  92.  
  93. ;               PROCEDURE ForceInsert (Ins: BOOLEAN);
  94. ;               Force keyboard insert state (True=Insert, False=OverWrite)
  95.  
  96. FORCEINSERT     PROC    FAR
  97.                 MOV     AX,0040H
  98.                 MOV     ES,AX                   ; Point ES to low BIOS store
  99.                 POP     BX                      ; Get return address off stack
  100.                 POP     CX
  101.                 POP     AX                      ; Fetch required insert state
  102.                 PUSH    CX                      ; Restore return addr. to stack
  103.                 PUSH    BX
  104.                 AND     BYTE PTR [ES:0017H],07FH  ; Clear ins. flag in KB stat.
  105.                 ROR     AL,1
  106.                 OR      BYTE PTR [ES:0017H],AL  ; Set insert flag if required
  107.                 RET
  108. FORCEINSERT     ENDP
  109.  
  110. CODE            ENDS
  111.  
  112.                 END
  113.  
  114.