BBS: Inland Empire Archive Date: 04-14-92 (09:39) Number: 100 From: MATT HART Refer#: NONE To: JIM DUGGER Recvd: NO Subj: Trapping Shift Conf: (2) Quik_Bas
JD> Could someone help me with the code necessary to trap a
JD> double-tap of the right shift key? WOuld perfer if it did DIRECT
JD> hardware access.
With the below routines:
Tapped1 = 0
Tapped2 = 0
DO UNTIL Tapped1 AND Tapped2
IF RShift THEN
IF Tapped1 THEN Tapped2 = -1 ELSE Tapped1 = -1
ENDIF
LOOP
'
' KEYSTUFF.BAS by Matt Hart
' Uses Interrupt 16H for various keyboard operations.
'
' The scroll lock, num lock, caps lock, and insert
' key flags remain ON until pressed again, thus the need for
' the ?Flag variables in this demo program.
'
' Also see Keystuf.asm for assembly language equivilants.
'
DEFINT A-Z
TYPE RegTypeX
ax AS INTEGER
bx AS INTEGER
cx AS INTEGER
dx AS INTEGER
bp AS INTEGER
si AS INTEGER
di AS INTEGER
flags AS INTEGER
ds AS INTEGER
es AS INTEGER
END TYPE
DECLARE FUNCTION RShift()
DECLARE FUNCTION LShift()
DECLARE FUNCTION CtrlKey()
DECLARE FUNCTION AltKey()
DECLARE FUNCTION ScrollLock()
DECLARE FUNCTION NumLock()
DECLARE FUNCTION CapsLock()
DECLARE FUNCTION InsertKey()
SFlag=0 : NFlag=0 : CFlag=0 : IFlag=0
DO
IF RShift THEN PRINT "Right Shift Key"
IF LShift THEN PRINT "Left Shift Key"
IF CtrlKey THEN PRINT "Control Key"
IF AltKey THEN PRINT "Alt Key"
IF ScrollLock AND NOT SFlag THEN
PRINT "Scroll Lock Enabled"
SFlag = NOT SFlag
ELSEIF NOT ScrollLock AND SFlag THEN
PRINT "Scroll Lock Disabled"
SFlag = NOT SFlag
ENDIF
IF NumLock AND NOT NFlag THEN
PRINT "Num Lock Enabled"
NFlag = NOT NFlag
ELSEIF NOT NumLock AND NFlag THEN
PRINT "Num Lock Disabled"
NFlag = NOT NFlag
ENDIF
IF CapsLock AND NOT CFlag THEN
PRINT "Caps Lock Enabled"
CFlag = NOT CFlag
ELSEIF NOT CapsLock AND CFlag THEN
PRINT "Caps Lock Disabled"
CFlag = NOT CFlag
ENDIF
IF (InsertKey AND NOT IFlag) OR_
(NOT InsertKey AND IFlag) THEN
PRINT "Insert Key Toggled"
IFlag = NOT IFlag
ENDIF
LOOP UNTIL INKEY$=CHR$(27)
END
'
FUNCTION RShift
CALL KeyInt(AL) : RShift = (AL AND 1) = 1
END FUNCTION
'
FUNCTION LShift
CALL KeyInt(AL) : LShift = (AL AND 2) = 2
END FUNCTION
'
FUNCTION CtrlKey
CALL KeyInt(AL) : CtrlKey = (AL AND 4) = 4
END FUNCTION
'
FUNCTION AltKey
CALL KeyInt(AL) : AltKey = (AL AND 8) = 8
END FUNCTION
'
FUNCTION ScrollLock
CALL KeyInt(AL) : ScrollLock = (AL AND 16) = 16
END FUNCTION
'
FUNCTION NumLock
CALL KeyInt(AL) : NumLock = (AL AND 32) = 32
END FUNCTION
'
FUNCTION CapsLock
CALL KeyInt(AL) : CapsLock = (AL AND 64) = 64
END FUNCTION
'
FUNCTION InsertKey
CALL KeyInt(AL) : InsertKey = (AL AND 128) = 128
END FUNCTION
'
SUB KeyInt(AL)
DIM InRegs AS RegTypeX
DIM OutRegs AS RegTypeX
InRegs.AX = &H0200
CALL InterruptX(&H16,InRegs,OutRegs)
AL = OutRegs.AX MOD 256
END SUB
---
* Origin: Midnight Micro! V.32/REL (918)451-3306 (1:170/600)

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