home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1990 / 07 / grdlagen / scrsave.pas < prev   
Pascal/Delphi Source File  |  1990-04-03  |  3KB  |  76 lines

  1. (* ------------------------------------------------------ *)
  2. (*            Residenter VGA-Monitorschutz                *)
  3. (*         (C) 1990 Matthias Uphoff & TOOLBOX             *)
  4. (*             Compiler: Turbo Pascal 5.0                 *)
  5. (* ------------------------------------------------------ *)
  6.  
  7. (*$M 1024,0,0 *) (* Heap/Stack-Speicherbedarf auf Minimum *)
  8.  
  9. USES Dos, Crt;
  10.  
  11. VAR ScreenOff: Boolean;
  12.     Count, TimeOut: Word;
  13.     SaveInt8, SaveInt9: Pointer;
  14.     R: Registers;
  15.  
  16. PROCEDURE TimeCheck; Interrupt;
  17.   (* Timer-Interrupthandler *)
  18. BEGIN
  19.   (* Ursprüngliche Routine aufrufen: *)
  20.   INLINE($9C/$FF/$1E/SaveInt8);
  21.   IF NOT ScreenOff THEN BEGIN   (* Screen eingeschaltet: *)
  22.     Inc(Count);                   (* Zähler erhöhen *)
  23.     IF Count = TimeOut THEN BEGIN (* Zeitlimit erreicht: *)
  24.       R.AH := $12;                (* Funktionsnummer *)
  25.       R.AL := 1;                  (* Screen Off *)
  26.       R.BL := $36;                (* Unterfunktion *)
  27.       Intr($10,R);                (* BIOS-Call *)
  28.       ScreenOff := (R.AL = $12);  (* ScreenOff := TRUE   *)
  29.     END;                          (* bei gültigem Aufruf *)
  30.   END;
  31. END;
  32.  
  33. PROCEDURE KeyCheck; Interrupt;
  34.   (* Tastatur-Interrupthandler *)
  35. BEGIN
  36.   (* Ursprüngliche Routine aufrufen: *)
  37.   INLINE($9C/$FF/$1E/SaveInt9);
  38.   Count := 0;               (* Zähler zurücksetzen *)
  39.   IF ScreenOff THEN BEGIN   (* Screen abgeschaltet: *)
  40.     ScreenOff := FALSE;
  41.     R.AH := $12;              (* Funktionsnummer *)
  42.     R.AL := 0;                (* Screen On *)
  43.     R.BL := $36;              (* Unterfunktion *)
  44.     Intr($10,R);              (* BIOS-Call *)
  45.     IF KeyPressed THEN        (* Falls Taste gedrückt,    *)
  46.       IF ReadKey = #0 THEN    (* Zeichen lesen.Bei Chr(0) *)
  47.         IF Readkey = #0 THEN; (* liegt Extended Code vor. *)
  48.   END;
  49. END;
  50.  
  51. BEGIN  (* Main *)
  52.   (* Die gewünschte Zeit bis zum Abschalten in Sekunden *)
  53.   (* wird als Kommandoparameter übergeben. Ein Aufruf   *)
  54.   (* ohne Parameter stellt 10 Minuten ein.              *)
  55.   Timeout := 18 * 60 * 10;
  56.   IF ParamCount > 0 THEN BEGIN
  57.     Val(ParamStr(1),TimeOut,Count);
  58.     TimeOut := TimeOut * 18;
  59.     IF Count <> 0 THEN BEGIN
  60.       WriteLn('Ungültiger Parameter!');
  61.       Halt(1);
  62.     END;
  63.   END;
  64.   Count := TimeOut DIV 18;
  65.   WriteLn('Screen-Saver mit ',Count,' Sek. installiert');
  66.   Count := 0;
  67.   ScreenOff := FALSE;
  68.   GetIntVec(8,SaveInt8);
  69.   SetIntVec(8,@TimeCheck);
  70.   GetIntVec(9,SaveInt9);
  71.   SetIntVec(9,@KeyCheck);
  72.   Keep(0);
  73. END.
  74.  
  75. (* ------------------------------------------------------ *)
  76.