'=========================================================================== ' Subject: MULTIKEY FUNCTION UPDATE Date: 05-13-97 (14:46) ' Author: Joe Huber, Jr. Code: QB, QBasic, PDS ' Origin: huberjjr@nicom.com Packet: KEYBOARD.ABC '=========================================================================== DECLARE SUB KEYTEST (LOWERLIMIT!, UPPERLIMIT!) 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 ' 'CALL KEYTEST(lower,upper) 'Use this to find new keycodes '(unrem below to test) ' CALL KEYTEST(1, 200) 'Gives all keynums between 1 & 200 'If the 0 by the number becomes a 1, then the key with that keycode is 'currently being depressed 'EMAIL ME AT: huberjjr@nicom.com ' 'HAVE FUN!!! ' CLS X = 10: Y = 10 XX = X: YY = Y DO 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, SUB KEYTEST (LOWERLIMIT, UPPERLIMIT) DO X = 1 Y = 1 FOR I = LOWERLIMIT TO UPPERLIMIT TEST = MULTIKEY(I) LOCATE Y, X PRINT TEST; I IF Y < 23 THEN Y = Y + 1 ELSE Y = 1 X = X + 7 END IF NEXT I LOOP WHILE MULTIKEY(1) = 0 END END SUB FUNCTION MULTIKEY (KEYNUM) STATIC FIRSTIME, KEYS(), SC(), DU() IF FIRSTIME = 0 THEN DIM KEYS(255), SC(255), DU(255) 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