'=========================================================================== ' 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