BBS: Inland Empire Archive Date: 11-21-92 (19:52) Number: 361 From: BRENT ASHLEY Refer#: NONE To: RAYMOND PAQUIN Recvd: NO Subj: QB SIMULATNEOUS INPUT Conf: (2) Quik_Bas
-> The question was not 'how do you capture TWO key presses' but 'how do -> you capture THREE keypresses' when two of those three keys are 'real' The following answer will clarify that all that can be done and more. Remember that at the INT 9 level, all keys are just scan codes, state keys (ctl/alt/shft) and otherwise (abc...). I've written a short assembly routine which will allow detection of multiple keypresses. It works by hooking the INT 9 BIOS keyboard handler and maintaining its own local array of flags representing the pressed status of each available scancode. The syntax of this beast is as follows: DECLARE FUNCTION KeyPressed%(ScanCode%) 'install our keyboard monitor CALL InstKeyPress 'your code . . . IF KeyPressed(ScanCode1%) AND KeyPressed(ScanCode2%) THEN CALL BothOfThoseKeysWerePressed ENDIF . . . 'remove monitor before exit or lockups will occur - a good idea is 'to ON ERROR GOTO some code which unhooks it in case there is an 'unexpected program termination. CALL UnhookKeyPress Here's an example program: -------------------8<-- cut here -->8------------------------ ' KP.BAS by Brent Ashley ' ' demonstrates the use of KeyPress routine ' to monitor the status of multiple keys DEFINT A-Z DECLARE SUB InstKeyPress() DECLARE SUB UnhookKeyPress() DECLARE FUNCTION KeyPressed(ScanCode%) InstKeyPress CLS: PRINT "Press keys 1-8, <ESC> to quit" DO LOCATE 2,1 FOR i = 2 to 9 ' scan codes for 1 to 8 IF KeyPressed(i) THEN PRINT CHR$(47 + i); ELSE PRINT "."; NEXT LOOP UNTIL INKEY$=CHR$(27) UnhookKeyPress END -------------------8<-- cut here -->8------------------------ The following message contains the ASM code for this assembly module. You'll need MASM 5.1 or greater to create the OBJ file (I used QC/QuickAssembler v2.51). Those who want the OBJ for this will have to get it from RelayNet or NorthAmeriNet, where reason prevails and PostIt is allowed for such things. ----- Brent ----- --- FidoPCB v1.3 [ff053/x] * Origin: Canada Remote Systems, Mississauga, Ontario (1:229/15)
Books at Amazon:
Back to BASIC: The History, Corruption, and Future of the Language
Hackers: Heroes of the Computer Revolution (including Tiny BASIC)
Go to: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Scientists and Iconoclasts who were the Hero Programmers of the Software Revolution
The Advent of the Algorithm: The Idea that Rules the World
Moths in the Machine: The Power and Perils of Programming
Mastering Visual Basic .NET