home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turbo Toolbox
/
Turbo_Toolbox.iso
/
1990
/
07
/
grdlagen
/
scrsave.pas
< prev
Wrap
Pascal/Delphi Source File
|
1990-04-03
|
3KB
|
76 lines
(* ------------------------------------------------------ *)
(* Residenter VGA-Monitorschutz *)
(* (C) 1990 Matthias Uphoff & TOOLBOX *)
(* Compiler: Turbo Pascal 5.0 *)
(* ------------------------------------------------------ *)
(*$M 1024,0,0 *) (* Heap/Stack-Speicherbedarf auf Minimum *)
USES Dos, Crt;
VAR ScreenOff: Boolean;
Count, TimeOut: Word;
SaveInt8, SaveInt9: Pointer;
R: Registers;
PROCEDURE TimeCheck; Interrupt;
(* Timer-Interrupthandler *)
BEGIN
(* Ursprüngliche Routine aufrufen: *)
INLINE($9C/$FF/$1E/SaveInt8);
IF NOT ScreenOff THEN BEGIN (* Screen eingeschaltet: *)
Inc(Count); (* Zähler erhöhen *)
IF Count = TimeOut THEN BEGIN (* Zeitlimit erreicht: *)
R.AH := $12; (* Funktionsnummer *)
R.AL := 1; (* Screen Off *)
R.BL := $36; (* Unterfunktion *)
Intr($10,R); (* BIOS-Call *)
ScreenOff := (R.AL = $12); (* ScreenOff := TRUE *)
END; (* bei gültigem Aufruf *)
END;
END;
PROCEDURE KeyCheck; Interrupt;
(* Tastatur-Interrupthandler *)
BEGIN
(* Ursprüngliche Routine aufrufen: *)
INLINE($9C/$FF/$1E/SaveInt9);
Count := 0; (* Zähler zurücksetzen *)
IF ScreenOff THEN BEGIN (* Screen abgeschaltet: *)
ScreenOff := FALSE;
R.AH := $12; (* Funktionsnummer *)
R.AL := 0; (* Screen On *)
R.BL := $36; (* Unterfunktion *)
Intr($10,R); (* BIOS-Call *)
IF KeyPressed THEN (* Falls Taste gedrückt, *)
IF ReadKey = #0 THEN (* Zeichen lesen.Bei Chr(0) *)
IF Readkey = #0 THEN; (* liegt Extended Code vor. *)
END;
END;
BEGIN (* Main *)
(* Die gewünschte Zeit bis zum Abschalten in Sekunden *)
(* wird als Kommandoparameter übergeben. Ein Aufruf *)
(* ohne Parameter stellt 10 Minuten ein. *)
Timeout := 18 * 60 * 10;
IF ParamCount > 0 THEN BEGIN
Val(ParamStr(1),TimeOut,Count);
TimeOut := TimeOut * 18;
IF Count <> 0 THEN BEGIN
WriteLn('Ungültiger Parameter!');
Halt(1);
END;
END;
Count := TimeOut DIV 18;
WriteLn('Screen-Saver mit ',Count,' Sek. installiert');
Count := 0;
ScreenOff := FALSE;
GetIntVec(8,SaveInt8);
SetIntVec(8,@TimeCheck);
GetIntVec(9,SaveInt9);
SetIntVec(9,@KeyCheck);
Keep(0);
END.
(* ------------------------------------------------------ *)