'===========================================================================
' Subject: RETURNS KEY(S) PRESSED             Date: Unknown Date           
'  Author: Peter Norton                       Code: QB, PDS                
'  Origin: Advanced BASIC Book              Packet: KEYBOARD.ABC
'===========================================================================
' Returns the key(s) pressed
' Useful to find value of combined keys
' ie.  CTRL+UP     =  CHR$(0)+CHR$(141)
'      CTRL+DOWN   =  CHR$(0)+CHR$(145)

DECLARE FUNCTION InKeyNoEcho$ ()
TYPE RegType
        ax      AS INTEGER
        bx      AS INTEGER
        cx      AS INTEGER
        dx      AS INTEGER
        bp      AS INTEGER
        si      AS INTEGER
        di      AS INTEGER
        flags   AS INTEGER
END TYPE

DECLARE SUB INTERRUPT (IntNo AS INTEGER, InRegs AS RegType, OutRegs AS RegType)

        PRINT "Type a character: "
        DO
        TheKey$ = InKeyNoEcho$
        LOOP WHILE TheKey$ = ""
        PRINT "That character was: ", TheKey$

END

FUNCTION InKeyNoEcho$

   DIM InRegs AS RegType, OutRegs AS RegType
   InRegs.ax = &H600
   InRegs.dx = &HFF

   CALL INTERRUPT(&H21, InRegs, OutRegs)

   REM No character ready if zero flag set

   IF (OutRegs.flags AND 2 ^ 6) THEN
       InKeyNoEcho$ = ""
   ELSE
       IF (OutRegs.ax AND &HFF) <> 0 THEN
           InKeyNoEcho$ = CHR$(OutRegs.ax AND &HFF)
       ELSE    'Need one more call
           InRegs.ax = &H600
           InRegs.dx = &HFF
           CALL INTERRUPT(&H21, InRegs, OutRegs)
           InKeyNoEcho$ = CHR$(0) + CHR$(OutRegs.ax AND &HFF)
      END IF
   END IF

END FUNCTION

