03-05-2005, 03:36 AM
I can't understand why this keyboard handler doesn't work when DEFINT A-Z is called at the begining of the program...
Code:
'===========================================================================
' Subject: MULTIPLE KEYS Date: 03-08-97 (13:07)
' Author: Joe Huber, Jr. Code: QB, QBasic, PDS
' Origin: huberjjr@nicom.com Packet: KEYBOARD.ABC
'===========================================================================
DECLARE FUNCTION MULTIKEY (KEYNUM)
'MUTIKEY FUNCTION - LETS YOU TRAP SEVERAL KEYS AT ONCE (BETTER THAN INKEY$!!)
'
'USAGE:
' riable=MULTIKEY(KEYNUM)
'WHERE KEYNUM IS THE KEY YOU WANT TO TRAP
' riable = 1 IF KEY IS DEPRESSED, 0 IF IT ISN'T
'
'EMAIL ME AT: huberjjr@nicom.com
'
'HAVE FUN!!!
DIM SHARED KEYS(255), SC(255), DU(255) 'ALWAYS NEED THIS!!!
CLS
X = 10: Y = 10
XX = X: YY = Y
DO
'FOR I = 1 TO 255 '\
' TEST = MULTIKEY(I) ' |-TEST LOOP
' LOCATE 1, 1: PRINT TEST; I ' |
' WHILE INKEY$ = "": WEND ' | PRESS KEY IN QUESTION UNTIL
' IF TEST = 1 THEN END ' | LOOP ENDS. THE SECOND NUMBER IS THE
'NEXT I '/ SCAN CODE FOR MULTIKEY
RIGHT = MULTIKEY(75) ' GET SOME KEYS' STATUSES
LEFT = MULTIKEY(77)
UP = MULTIKEY(72)
DOWN = MULTIKEY(80)
SPACE = MULTIKEY(57)
ESC = MULTIKEY(1)
IF ESC = 1 THEN END 'TEMINATE WHEN ESCAPE IS PRESSED
IF TIMELOOP = 100 THEN 'THIS MOVES YOU AROUND
IF RIGHT = 1 THEN X = X - 1
IF LEFT = 1 THEN X = X + 1 'THE TIMELOOP RIABLE DELAYS
IF UP = 1 THEN Y = Y - 1 'MOVEMENT WITHOUT SLOWING DOWN
IF DOWN = 1 THEN Y = Y + 1 'INPUT (WITHOUT IT YOU WOULD GO
TIMELOOP = 0 'WAAAAYYY TOO FAST)
END IF
IF X >= 80 THEN X = 80 'KEEPS YOU FROM GOING OFF THE SCREEN AND
IF X <= 0 THEN X = 1 'MAKING AN ERROR
IF Y >= 23 THEN Y = 23
IF Y <= 0 THEN Y = 1
IF SPACE = 1 THEN 'CHANGES YOUTR SHAPE WHEN
LOCATE Y, X: PRINT CHR$(94) 'YOU HIT SPACE
ELSE
LOCATE Y, X: PRINT CHR$(127)
END IF
IF XX <> X OR YY <> Y THEN 'UPDATES YOUR POSITION
LOCATE YY, XX: PRINT " "
LOCATE Y, X: PRINT CHR$(127)
END IF
XX = X: YY = Y 'TELLS ME WHERE I WAS LAST
TIMELOOP = TIMELOOP + 1
LOOP 'LOOP (DUH...) :)
'THANX TO Eric Carr FOR FIGURING OUT HOW TO TRAP SEVERAL KEYS AT ONCE
'EVERYTHING ELSE WRITTEN BY ME,
FUNCTION MULTIKEY (KEYNUM)
STATIC FIRSTIME
IF FIRSTIME = 0 THEN
FOR E = 0 TO 127 '\
SC(E) = E: DU(E) = 1 '|
NEXT '|-ERIC CARR'S CODE--------------------\
FOR E = 128 TO 255 '| |
SC(E) = E - 128: DU(E) = 0 '| |
NEXT '/ |
FIRSTIME = -1 ' |
END IF ' |
' |
I$ = INKEY$ ' So the keyb buffer don't get full \routine/ \ |
I = INP(&H60) ' Get keyboard scan code from port 60h \lines/ |-/
OUT &H61, INP(&H61) OR &H82: OUT &H20, &H20 ' \!!!/ |
KEYS(SC(I)) = DU(I) ' This says what keys are pressed \!/ /
MULTIKEY = KEYS(KEYNUM)
END FUNCTION
EEL THE BEAT OF EURODANCE!!!