home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* 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.
-
- (* ------------------------------------------------------ *)