[Back to KEYBOARD SWAG index] [Back to Main SWAG index] [Original]
{
JR> Does anyone have the code (probably ASM) to turn the CapsLock key of
JR> _and_ on as well? Thanks in advance if you can help.
}
Procedure TogLed (Lock: Integer);
Const
Num=1;
Caps=2;
Scroll=3;
AllOff=0;
AllOn=4;
Type
BitMapByte=Array[0..7] OF Boolean;
Var
OldStatByte,
StatByte: Byte;
StatMap: BitMapByte;
OldTimerVec: Pointer;
Label
Start,GetOne,Quit;
{****************************************************************}
Procedure BitMap(ToConvert: Byte;
Var Converted: BitMapByte);
Var Count: Integer;
Temp: Word;
Begin {Procedure BitMap}
For Count:=7 DownTo 0 DO
Begin {FOR Count}
Temp:=PowerX(2,Count);
If ToConvert>=Temp
Then
Begin {If ToConvert>=Temp}
Converted[Count]:=True;
ToConvert:=ToConvert-Temp
End {If ToConvert>=Temp}
Else
Converted[Count]:=False
End {FOR Count}
End;{Procedure BitMap}
{****************************************************************}
Procedure MapToByte(ToConvert: BitMapByte;
Var Converted: Byte);
Var
Count: Byte;
Begin {Procedure MapToByte}
Converted:=0;
For Count:=0 TO 7 Do
If ToConvert[Count]
Then
Converted:=Converted+PowerX(2,Count);
End; {Procedure MapToByte}
{****************************************************************************}
Begin {Procedure TogLed}
StatByte:=Mem[0:$417];
BitMap(StatByte,StatMap);
Case Lock Of
0: Begin
StatMap[4]:=False;
StatMap[5]:=False;
StatMap[6]:=False
End;
1: Begin
If StatMap[5]=True
Then
StatMap[5]:=False
Else
StatMap[5]:=True
End;
2: Begin
If StatMap[6]=True
Then
StatMap[6]:=False
Else
StatMap[6]:=True
End;
3: Begin
If StatMap[4]=True
Then
StatMap[4]:=False
Else
StatMap[4]:=True
End;
4: Begin
StatMap[4]:=True;
StatMap[5]:=True;
StatMap[6]:=True
End;
End;
Asm
Start:
MOV AH,$05
MOV CH,$00
MOV CL,$00
INT $16
CMP AL,$1
JE GetOne
JMP Quit
GetOne:
MOV AH,$00
INT $16
JMP Start
Quit:
End;
MapTOByte(StatMap,StatByte);
Mem[0:$417]:=StatByte;
Asm
MOV AH,$00
INT $16
End;
End; {Procedure TogLed}
/ -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- \
| Steve_Schwarz@f1244.n141.z1.fidonet.org |
| SysOp: The RoadHouse BBS |
| (203) 263-5922 -=Home of the blues=- |
\ -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- /
{ ---------------------------------------------------------------- }
USES DOS,CRT;
Type
Toggles = (RShift, LShift, Ctrl, Alt,
ScrollLock, NumLock, CapsLock, Insert);
Status = Set of Toggles;
Const
ToggleStr : Array[Toggles] OF String[10] = (
'RShift','LShift','Ctrl','Alt',
'Scroll','Num','Caps','Insert');
Var
KeyStatus : Status Absolute $40:$17;
OldStatus : Status;
Flip : BOOLEAN;
T : Toggles;
PROCEDURE RandomRoutine;
VAR
R,C : BYTE;
BEGIN
R := Random(24) + 1;
C := Random(79) + 1;
GoToXY(C,R);Write(ToggleStr[T]);
END;
PROCEDURE StatusFlasher ( D : BYTE);
BEGIN
WHILE NOT Keypressed DO
BEGIN
IF Flip THEN KeyStatus := KeyStatus + [T] ELSE
KeyStatus := KeyStatus - [T];
{ Call another routine here if you like }
RandomRoutine;
DEC(T); { get the next toggle }
DELAY(D); { delay this long }
Flip := NOT Flip; { flip the on/off state }
IF T = ALT THEN T := CapsLock; { limit the list to just the three }
END;
END;
BEGIN
CLRSCR;
T := Capslock; { staring toggle }
OldStatus := KeyStatus; { save the current Status }
Flip := TRUE; { used to flip it off/on }
StatusFlasher( 100 ); { the main procedure to make lights flash }
KeyStatus := OldStatus; { restore original status }
END.
Martin Woods
martin@nisa.net
[Back to KEYBOARD SWAG index] [Back to Main SWAG index] [Original]