home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS - Coast to Coast / simteldosarchivecoasttocoast2.iso / asmutil / 80x0393.zip / CUR_KEY.TXT < prev    next >
Internet Message Format  |  1993-03-30  |  3KB

  1. From: Inbar Raz
  2. Subj: Accessing the cursor keys
  3. ____________________________________________________________________________
  4.  
  5. Hello everyone.
  6.  
  7. I have seen a debate here about accessing the cursor keys. Well, having
  8. written a resident dialer that allows you to dial from the cursor keys, I am
  9. posting here a segment of its source, to display the use of the cursor keys.
  10.  
  11. If anyone wants the full source, lemme know.
  12.  
  13. --------------------------------- cut here ---------------------------------
  14.  
  15. Kbd:    mov     ah,010h
  16.         int     16h                             ; Extended kbd read
  17.  
  18.         cmp     al,01Bh                         ; ESCape?
  19.         jz      GoodBye1
  20.  
  21.         cmp     al,00Dh                         ; Done?
  22.         jz      Done1
  23.  
  24.         cmp     ax,00E08h                       ; Backspace?
  25.         jnz     Label1
  26.  
  27.         mov     bx,offset NumBuf
  28.         cmp     NumPtr,bx
  29.         jbe     Kbd                             ; Beginning of line?
  30.  
  31.         dec     NumPtr
  32.         mov     si,NumPtr
  33.         mov     byte ptr [si],000h              ;  from buffer too
  34.  
  35.         jmp     Kbd
  36.  
  37. Done1:  jmp     Done
  38.  
  39. Label1: cmp     al,000h                         ; Extended ASCII?
  40.         jnz     Label2
  41.  
  42.         cmp     ah,047h                         ; Keypad?
  43.         jb      Kbd
  44.  
  45.         cmp     ah,052h                         ;  - " -
  46.         ja      Kbd
  47.  
  48.         mov     bx,offset XlatTbl
  49.         sub     bx,047h                         ; To make up for partiality
  50.         mov     al,ah
  51.         xlat                                    ; Translate key
  52.                                                 ; Table is brought in the end
  53.  
  54.         cmp     al,000h                         ; If illegal,
  55.         jz      Kbd                             ;  get a new one
  56.  
  57. Echo:   mov     bx,offset NumBuf
  58.  
  59. <<< some irrelevant code >>>
  60.  
  61. Label3: mov     si,NumPtr
  62.  
  63. <<< some irrelevant code >>>
  64.  
  65. Label2: cmp     al,02Dh
  66.         jz      Echo                            ; '-'
  67.  
  68.         cmp     ah,026h
  69.         jnz     Label5
  70.  
  71.         and     al,04Fh
  72.         cmp     al,04Ch
  73.         jnz     Kbd1
  74.  
  75.         mov     bx,offset NumBuf
  76.         cmp     NumPtr,bx
  77.         jne     Kbd1                            ; Beginning of line?
  78.  
  79.         mov     AllDone,001h
  80.  
  81.         jmp     Echo
  82.  
  83. Label5: cmp     al,030h
  84.         jb      Kbd1
  85.  
  86.         cmp     al,039h
  87.         jna     Echo
  88.  
  89.         jmp     Kbd1
  90.  
  91. Done:   mov     si,NumPtr
  92.  
  93. ; Translation table:
  94.  
  95. XlatTbl db      037h, 038h, 039h, 0, 034h, 035h
  96.         db      036h, 0, 031h, 032h, 033h, 030h
  97.  
  98. --------------------------------- cut here ---------------------------------
  99.  
  100. Inbar Raz
  101.