home *** CD-ROM | disk | FTP | other *** search
- ; QGETKEY.INC
- ;
- ;
- ;
- ;
- ; display a reverse video box by calling BIOS VIDEO procedures
- ;
- DISPLAY_BOX: MOV AH,15 ;"get current video page" call
- INT 10H ;call BIOS, returns with BH=page
- ;
- ; get present attribute at cursor position.
- ;
- ; In case user has "customized" his DOS display colors,
- ; explicitly reverse the color foreground/background fields in the
- ; attribute, instead of just assuming black/white
- ;
- ; BH = current page
- ;
- MOV AH,8 ;"get attribute" call
- INT 10H ;call BIOS
- ;
- ; AH now contains attribute code. swap fore/back nibbles, leaving
- ; blink and intensity unchanged.
- ;
- ; BH = current page
- ;
- MOV BL,AH ;copy attribute into BL
- MOV USERS_ATTRIB,AH ;also save attrib in RAM
- MOV CL,4 ;nibble bit-count for shifting
- ROL BL,CL ;swap nibbles in BL
- AND BL,77H ;mask out B and I in BL
- AND AH,88H ;save B and I in AH
- OR BL,AH ;BL now contains swapped fore/back
- ; nibbles, with B and I unchanged.
- MOV CX,1 ;display one character position
- MOV AL,BLANK_CHAR ;ascii blank character ...
- MOV AH,9 ;"write attribute & char" call
- INT 10H ;call BIOS
- ;
- ; Get one keystroke from user. Don't echo because we want cursor
- ; to point to box so that we can easily "unreverse" it while we echo
- ; the character.
- ;
- GET_KEY: MOV AH,8 ;"get char-no echo" fn call code
- ;(DOS 2.0 Manual, p. D-19)
- INT 21H ;call DOS and get key code
- ;
- ; now restore character attribute ("unreverse") and echo the
- ; user's keystroke at the same time
- ;
- ; BH = current page
- ; AL = user's keystroke code
- ;
- MOV BL,USERS_ATTRIB ;get original users attribute
- MOV CX,1 ;display one character
- MOV AH,9 ;"display attribute" BIOS VIDEO fn
- INT 10H ;call BIOS
- ;
- ; display a new line through DOS
- ;
- MOV DX,OFFSET NEW_LINE ;CR, LF string offset
- MOV AH,9 ;DOS fn code to display string
- ;(DOS Manual, p. D-19)
- PUSH AX ;DOS trashes AL, so save it
- INT 21H ;call DOS
- POP AX ;restore keycode in AL
- ;
- ; -------- END OF QGETKEY.INC --------
- ;