[Back to SCREEN SWAG index] [Back to Main SWAG index] [Original]
{ GLEN WILSON }
{$m 2000,0,0} (* Stops Pascal using all of memory *)
{$R-,s-,v-,b-,n-,l+} (* Nothing important, helps keep the size down*)
Program screensaver; (* Only blanks screen on CGA/Mono not VGA/etc*)
Uses
Dos, Crt;
Const
TimerInt = $08; {Timer Interrupt}
KbdInt = $09; {Keyboard Interrupt}
Timerlimit : Word = 5460; {5 minute Delay}
Var
Regs : Registers;
Cnt : Word;
PortNum : Word;
PortOff : Word;
Porton : Word;
OldKBDVEC : Pointer;
OldTimerVec : Pointer;
i : Real;
code : Real;
Procedure STI;
Inline($FB);
Procedure CLI;
Inline($FA);
Procedure CallOldInt(Sub : Pointer);
(* Primitive way of calling Old Interrupt, never the less, you can see what is
happening! *)
begin
Inline($9c/ { PushF }
$FF/$5e/$06); { Call DWord PTR [BP+6] }
end;
Procedure Keyboard(flags,CS,IP,AX,BX,CX,DX,SI,DI,DS,ES,BP : Word); Interrupt;
begin
CallOldInt(OldKbdVec);
if (CNT >= Timerlimit) then
port[portnum] := porton;
Cnt := 0;
STI;
end;
Procedure Clock(flags,CS,IP,AX,BX,CX,DX,SI,DI,DS,ES,BP : Word); Interrupt;
begin
CallOldInt(OldTimerVec);
if (CNT > Timerlimit) then
Port[portnum] := portoff
else
Inc(Cnt);
STI;
end;
begin
Regs.AH := $0F;
INTR($10, regs); (* determine Type of video adapter (Mono or Cga) *)
if Regs.AL= 7 then
begin
Portnum := $3b8;
Portoff := $21;
PortOn := $2d;
end
else
begin
Portnum:=$3d8;
Portoff:=$25;
porton :=$2d;
end;
(* Save original Procedures *)
GetIntVec(KbdInt, OldKbdVEc);
GetIntVec(TimerInt, OldTimerVec);
(* Install new Interrupts *)
SetIntVec(timerint, @clock);
SetIntVec(KbdInt, @Keyboard);
Cnt := 0; (* Initialize counter *)
Keep(0); (* Tell Pascal to keep us in memory *)
end.
{
it seems rather complex but most of that crap is For turning
on and off the screen. if you don't have a CGA or MONO you can replace the
Port crap With Writeln statements so you can see whats hapening.
BTW This is an example from a Programming book ( can't remember what it is
called ) becareful, It might be covered by Copy right laws.
}
[Back to SCREEN SWAG index] [Back to Main SWAG index] [Original]