[Back to KEYBOARD SWAG index] [Back to Main SWAG index] [Original]
{$X+}
{ Author Trevor J Carlsen. Released into the public domain. Req TP6 }
{ Compile and run this Program and all keyboard input except keys that }
{ make up a valid passWord will be ignored. In this Case the passWord }
{ is '1234' and the scancodes For those keys are stored in a Constant. }
{ to change the passWord Compute the scancodes For the desired passWord}
{ and change the passWord approriately. }
Uses
Dos,
Crt;
Var
OldInt9 : Pointer; { For storing the old interrupt vector }
passWord : String[4];
pwdlen : Byte Absolute passWord;
Procedure RestoreOldInt9;
{ Restores control to the old interrupt handler }
begin
SetIntVec($09,OldInt9);
end;
{$F+}
Procedure NewInt9; interrupt;
Const
masterpwd :String[4] = #2#3#4#5; { '1234' scancodes }
Var
scancode : Byte;
Procedure ResetKBD;
Var
b : Byte;
begin
b := port[$61];
port[$61] := b or $80;
port[$61] := b;
port[$20] := $20; { Signals EOI to PIC }
end;
begin
scancode := port[$60];
if chr(scancode) = masterpwd[pwdlen+1] then begin
passWord[pwdlen+1] := chr(scancode);
inc(pwdlen);
if passWord = masterpwd then
RestoreOldInt9;
end
else if not odd(scancode shr 7) then { invalid key }
pwdlen := 0;
ResetKBD;
end;
{$F-}
begin
pwdlen := 0;
GetIntVec($09,OldInt9);
SetIntVec($09,@NewInt9);
ReadKey;
end.
TeeCee
--- TC-ED v2.01
* origin: The Pilbara's Pascal Centre (+61 91 732569) (3:690/644)
[Back to KEYBOARD SWAG index] [Back to Main SWAG index] [Original]