home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS 1992 September / Simtel20_Sept92.cdr / msdos / batutl / battutor.arc / QGETKEY.INC < prev    next >
Text File  |  1983-08-14  |  3KB  |  72 lines

  1. ;                       QGETKEY.INC
  2. ;
  3. ;
  4. ;
  5. ;
  6. ;       display a reverse video box by calling BIOS VIDEO procedures
  7. ;
  8. DISPLAY_BOX:    MOV     AH,15           ;"get current video page" call
  9.                 INT     10H             ;call BIOS, returns with BH=page
  10. ;
  11. ;       get present attribute at cursor position.
  12. ;
  13. ;       In case user has "customized" his DOS display colors,
  14. ;       explicitly reverse the color foreground/background fields in the
  15. ;       attribute, instead of just assuming black/white
  16. ;
  17. ;       BH =  current page
  18. ;
  19.                 MOV     AH,8            ;"get attribute" call
  20.                 INT     10H             ;call BIOS
  21. ;
  22. ;       AH now contains attribute code.  swap fore/back nibbles, leaving
  23. ;       blink and intensity unchanged.
  24. ;
  25. ;       BH = current page
  26. ;
  27.                 MOV     BL,AH           ;copy attribute into BL
  28.                 MOV     USERS_ATTRIB,AH ;also save attrib in RAM
  29.                 MOV     CL,4            ;nibble bit-count for shifting
  30.                 ROL     BL,CL           ;swap nibbles in BL
  31.                 AND     BL,77H          ;mask out B and I in BL
  32.                 AND     AH,88H          ;save B and I in AH
  33.                 OR      BL,AH           ;BL now contains swapped fore/back
  34.                                         ; nibbles, with B and I unchanged.
  35.                 MOV     CX,1            ;display one character position
  36.                 MOV     AL,BLANK_CHAR   ;ascii blank character ...
  37.                 MOV     AH,9            ;"write attribute & char" call
  38.                 INT     10H             ;call BIOS
  39. ;
  40. ;       Get one keystroke from user.  Don't echo because we want cursor
  41. ;       to point to box so that we can easily "unreverse" it while we echo
  42. ;       the character.
  43. ;
  44. GET_KEY:        MOV     AH,8            ;"get char-no echo" fn call code
  45.                                         ;(DOS 2.0 Manual, p. D-19)
  46.                 INT     21H             ;call DOS and get key code
  47. ;
  48. ;       now restore character attribute ("unreverse") and echo the
  49. ;       user's keystroke at the same time
  50. ;
  51. ;       BH = current page
  52. ;       AL = user's keystroke code
  53. ;
  54.                 MOV     BL,USERS_ATTRIB ;get original users attribute
  55.                 MOV     CX,1            ;display one character
  56.                 MOV     AH,9            ;"display attribute" BIOS VIDEO fn
  57.                 INT     10H             ;call BIOS
  58. ;
  59. ;       display a new line  through DOS
  60. ;
  61.                 MOV     DX,OFFSET NEW_LINE       ;CR, LF string offset
  62.                 MOV     AH,9            ;DOS fn code to display string
  63.                                         ;(DOS Manual, p. D-19)
  64.                 PUSH    AX              ;DOS trashes AL, so save it
  65.                 INT     21H             ;call DOS
  66.                 POP     AX              ;restore keycode in AL
  67. ;
  68. ;               --------        END OF QGETKEY.INC      --------
  69. ;
  70.                      ;call DOS
  71.                 RET                             ;done
  72. DELIM_LINE