{$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)

