home *** CD-ROM | disk | FTP | other *** search
/ C!T ROM 5 / ctrom5b.zip / ctrom5b / PROGRAM / ASM / ALIB30B / MKEY09.ASM < prev    next >
Assembly Source File  |  1994-10-15  |  3KB  |  111 lines

  1.     page    66,132
  2. ;******************************** MKEY09.ASM *********************************
  3.  
  4. LIBSEG           segment byte public "LIB"
  5.         assume cs:LIBSEG , ds:nothing
  6.  
  7. ;----------------------------------------------------------------------------
  8. .xlist
  9.     include  mac.inc
  10.     include  common.inc
  11. .list
  12. ;----------------------------------------------------------------------------
  13.     extrn    key_if_ready:far
  14.     extrn    lib_info:byte
  15.     extrn    breakflag:byte
  16. comment 
  17. ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -(MOUSE/KEY)
  18. FLUSH_KEYBOARD - clears the keyboard's 'type-ahead' buffer
  19. ;
  20. ; inputs:  none
  21. ; output:  none
  22. ;* * * * * * * * * * * * * *
  23. 
  24.     PUBLIC    FLUSH_KEYBOARD
  25. FLUSH_KEYBOARD    PROC    FAR
  26.     call    KEY_IF_READY    ;returns 0=no key  1=KEY_CHECK
  27.     OR      AX,AX
  28.     JNZ     FLUSH_KEYBOARD
  29.     RETF
  30. FLUSH_KEYBOARD    ENDP
  31.  
  32.  
  33. comment 
  34. ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -(MOUSE/KEY)
  35. KEY_CHECK - check if a key is waiting in the keyboard buffer.
  36. ;
  37. ; inputs:    none
  38. ; output:    AX = 0 if no key waiting
  39. ;            AX = 1 if key waiting
  40. ;            
  41. ; note:      if key is found in buffer it is left there and the AX register
  42. ;            is set to one.
  43. ;* * * * * * * * * * * * * *
  44. 
  45.     PUBLIC    KEY_CHECK
  46. KEY_CHECK    PROC    FAR
  47.     cmp    cs:breakflag,0
  48.     je    kwa_cont
  49.     mov    ax,3
  50.     jmp    kwa_exit
  51. kwa_cont:    
  52.     mov    ah,11h            ;preload code for enhanced keyboard
  53.     cmp    lib_info.key_type,0    ;check if old style keyboard
  54.     jne    kwa_read        ; jmp if enhanced keyboard
  55.     mov    ah,01            ;get code for old style keyboard
  56. kwa_read:
  57.     int    16h
  58.     mov    ax,0
  59.     jz    kwa_exit        ;jmp if no key waiting
  60.     inc    ax
  61. kwa_exit:
  62.     retf    
  63. KEY_CHECK    ENDP
  64. comment 
  65. ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -(MOUSE/KEY)
  66. KEY_READ - returns next key pressed
  67. ;
  68. ; inputs:  none
  69. ; output:    if AH = 0  AL = ASCII key code
  70. ;            if AH = 1  AL = scan code
  71. ;* * * * * * * * * * * * * *
  72. 
  73.     PUBLIC    KEY_READ
  74. KEY_READ    PROC    FAR
  75. key_wait:    
  76.     call   KEY_CHECK
  77.     cmp     cs:breakflag,0
  78.     jne     break_occured        ;jmp if break key
  79.     or      ax,ax
  80.     jz    key_wait            ;jmp if no key found
  81.         
  82. KEY_READ1:
  83.     mov    ah,10h            ;preload code for enhanced keyboard
  84.     cmp    lib_info.key_type,0    ;check if old style keyboard
  85.     jne    KEY_READ2            ; jmp if enhanced keyboard
  86.     mov    ah,0
  87. KEY_READ2:    
  88.     int    16h            ;read the keyboard
  89.     cmp    al,0e0h            ;check if extended key flag
  90.     jne    KEY_READ3            ;  jmp if not extended key flag
  91.     mov    al,0
  92. KEY_READ3:
  93.     cmp    al,0            ;check if ascii is available for key
  94.     jne    KEY_READ5            ; jmp if ascii code present
  95.     mov    al,ah            ;put scan code in -al-
  96.     mov    ah,1            ;put flag in -ah-, scan code in -al-
  97.     jmp    KEY_READ_exit
  98.     
  99. break_occured:
  100.     mov     ax,0103h    ;get code for ctrl-c
  101.     jmp     KEY_READ_exit
  102. KEY_READ5:
  103.     mov    ah,0            ;normal ascii in -al-, set flag
  104. KEY_READ_exit:
  105.     retf                
  106. KEY_READ    ENDP
  107.  
  108. LIBSEG    ENDS
  109.     end
  110.