home *** CD-ROM | disk | FTP | other *** search
- (*========================================================*)
- (* savescr.MOD *)
- (* (C) 1991 P. Engels & DOS-toolbox *)
- (*--------------------------------------------------------*)
- (* Compiler: Topspeed Modula-2 V. 2.XX *)
- (*========================================================*)
-
- MODULE savescr;
-
- (*# call (seg_name => null) *)
-
- (*# data (seg_name => null,
- stack_size => 1024,
- heap_size => 0,
- ss_in_dgroup => off) *) (* ohne Stack *)
-
- FROM TSR IMPORT InterruptRoutine, GetInt, SetInt, PushF,
- Keep;
- FROM SYSTEM IMPORT Registers, EI;
- FROM Lib IMPORT SetReturnCode, FatalError, Intr,
- ParamCount, ParamStr, Dos;
- FROM IO IMPORT WrStr, WrLn, WrCard;
- FROM Str IMPORT StrToCard;
-
- (*# data (volatile => on) *)
-
- VAR
- ScreenOff: BOOLEAN;
- Counter,
- TimeOut : CARDINAL;
- oldtime,
- oldkey,
- oldmouse : InterruptRoutine;
- r : Registers;
-
- (*# data (volatile => off) *)
-
-
- PROCEDURE ResetCounter;
- BEGIN
- Counter := 0;
- IF ScreenOff THEN
- ScreenOff := FALSE;
- r.AH := 12H;
- r.AL := 0;
- r.BL := 36H;
- Intr(r, 10H)
- END
- END ResetCounter;
-
- (*# save *)
-
- (*# call (near_call => off,
- same_ds => off,
- interrupt => on) *)
-
- PROCEDURE TimeCheck;
- BEGIN
- EI;
- PushF;
- oldtime;
- IF NOT ScreenOff THEN
- INC(Counter);
- IF Counter = TimeOut THEN
- r.AH := 12H;
- r.AL := 1;
- r.BL := 36H;
- Intr(r, 10H);
- ScreenOff := r.AL = 12H
- END
- END
- END TimeCheck;
-
- PROCEDURE KeyCheck;
- BEGIN
- EI;
- PushF;
- oldkey;
- ResetCounter;
- END KeyCheck;
-
- PROCEDURE MouseCheck;
- BEGIN
- EI;
- PushF;
- ResetCounter;
- oldmouse;
- END MouseCheck;
-
- (*# restore *)
-
- PROCEDURE Init_Screen;
- (* initialisiert VGA-Karte mit Monochrom-Monitor *)
- BEGIN
- r.AH := 1AH;
- r.AL := 1;
- r.BH := 0;
- r.BL := 8; (* Farbmonitor vorgaukeln *)
- Intr(r, 10H);
- r.AH := 0;
- r.AL := 3; (* Betriebsart wählen *)
- Intr (r, 10H);
- END Init_Screen;
-
- PROCEDURE Init_Screen_Saver;
- VAR
- ok : BOOLEAN;
- data : ARRAY [0..9] OF CHAR;
- BEGIN
- TimeOut := 60 * 5;
- IF ParamCount() > 0 THEN
- ParamStr(data, 1);
- TimeOut := CARDINAL(StrToCard(data, 10, ok));
- IF NOT ok THEN
- SetReturnCode(1);
- FatalError('invalid Parameter')
- END
- END;
- WrStr('ScreenSaver with ');
- WrCard(TimeOut, 1);
- WrStr(' sec. installed');
- WrLn;
- TimeOut := TimeOut * 18;
- Counter := 0;
- ScreenOff := FALSE;
- END Init_Screen_Saver;
-
- BEGIN
- Init_Screen;
- Init_Screen_Saver;
- GetInt(9, oldkey);
- SetInt(9, KeyCheck);
- GetInt(0CH, oldmouse);
- SetInt(0CH, MouseCheck);
- GetInt(8, oldtime);
- SetInt(8, TimeCheck);
- Keep(0)
- END savescr.
-
- (*========================================================*)
- (* Ende von savescr.MOD *)