[Back to TSR SWAG index]  [Back to Main SWAG index]  [Original]

{This is a Screen saver, that passed X time blank screen if no pressed a Key}

{ - TSR.PAS - }

{$M 6000,0,0}
{$R-,S-,I-,D+,F+,V-,B-,N-,L+}

Uses Dos,Crt,Graph,Screen;
{ The code for SCREEN.PAS is in the SCREEN.SWG file }
Const
  KeyBdInt = $09;
  TimerInt = $08;
  ScreenOn:Boolean = True;
  Seconds = 10;    {Time to activate}
  Counter:Word = 0;
Var
  Regs:Registers;
  OldKbdVec,OldTimerVec:Pointer;
  S:ScreenStore;
Procedure STI; Inline($FB);
Procedure CLI; Inline($FA);
Procedure CallOldInt(Sub:Pointer);
  Begin
    Inline($9C/$FF/$5E/$06);
  End;
Procedure KeyBoard(Flags,CS,IP,AX,BX,CX,DX,SI,DI,DS,ES,BP:Word); Interrupt;
    Begin
      Counter:=0;
      If Not(ScreenOn) Then
        Begin
          S.RestoreScreen;
          ScreenOn:=True;
        End;
      CallOldInt(OldKbdVec);
      STI;
    End;
Procedure Timer(Flags,CS,IP,AX,BX,CX,DX,SI,DI,DS,ES,BP:Word); Interrupt;
    Begin
      If ScreenOn Then
        Begin
          Inc(Counter);
          If Counter>(Trunc(18.2*Seconds)) Then
            Begin
              S.StoreScreen;
              ClrScr;
              ScreenOn:=False;
            End;
        End;
      CallOldInt(OldTimerVec);
      STI;
    End;
Begin
S.Init(1,1,178,7);
GetIntVec(KeyBdInt,OldKbdVec);
SetIntVec(KeyBdInt,@KeyBoard);
GetIntVec(TimerInt,OldTimerVec);
SetIntVec(TimerInt,@Timer);
Keep(0);

End.

[Back to TSR SWAG index]  [Back to Main SWAG index]  [Original]