'===========================================================================
' Subject: GET KEY                            Date: 02/24/92 (02:07)       
'  Author: Dave Navarro                       Code: PB                     
'  Origin: GET KEY                          Packet: KEYBOARD.ABC
'===========================================================================
'Here is some PowerBASIC code to read a key from the keyboard (101 key
'aware).

'The "zero" flag us actually bit 7 of the "flags" register..

'GetKey - Check if a key is pending and return the key to your program
'         Extended keyboard aware.

FUNCTION GetKey$ PUBLIC
   REG 1, &HC000                            'BIOS get configuration
   CALL INTERRUPT &H15
   DEF SEG=REG(9)
     ExKy%=(PEEK(REG(2)+5) AND 16)=16       'returns true if extended KB
   DEF SEG
   IF ExKy% THEN Extended
   REG 1, &H0100                            'regular BIOS check key routine
   CALL INTERRUPT &H16
   IF (REG(0) AND 64)=64 THEN EXIT FUNCTION 'if zero flag then no key
   REG 1, &H0000                            'regular BIOS read key routine
   CALL INTERRUPT &H16
   K1%=REG(1) AND &HFF                      'ASCII code in AL
   K2%=(REG(1)\2 AND &H7FFF)\128            'scan code in AH
   IF K1%=0 THEN
     GetKey$=CHR$(0,K2%)
    ELSE
     GetKey$=CHR$(K1%)
   END IF
   EXIT FUNCTION
 Extended:
   REG 1, &H1100
   CALL INTERRUPT &H16
   IF (REG(0) AND 64)=64 THEN EXIT FUNCTION
   REG 1, &H1000
   CALL INTERRUPT &H16
   K1%=REG(1) AND &HFF
   K2%=(REG(1)\2 AND &H7FFF)\128
   IF K1%=0 THEN
     GetKey$=CHR$(0,K2%)
    ELSEIF K1%=224 AND K2%>0 THEN
     GetKey$=CHR$(0,K2%)
    ELSE
     GetKey$=CHR$(K1%)
   END IF
END FUNCTION
