home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / dtx9101 / modula / savescr.mod < prev    next >
Encoding:
Text File  |  1991-09-23  |  3.1 KB  |  142 lines

  1. (*========================================================*)
  2. (*                   savescr.MOD                          *)
  3. (*           (C) 1991 P. Engels & DOS-toolbox             *)
  4. (*--------------------------------------------------------*)
  5. (* Compiler:  Topspeed Modula-2 V. 2.XX                   *)
  6. (*========================================================*)
  7.  
  8. MODULE savescr;
  9.  
  10. (*# call (seg_name => null) *)
  11.  
  12. (*# data (seg_name     => null,
  13.           stack_size   => 1024,
  14.           heap_size    => 0,
  15.           ss_in_dgroup => off) *) (* ohne Stack *)
  16.  
  17. FROM TSR    IMPORT InterruptRoutine, GetInt, SetInt, PushF,
  18.                    Keep;
  19. FROM SYSTEM IMPORT Registers, EI;
  20. FROM Lib    IMPORT SetReturnCode, FatalError, Intr,
  21.                    ParamCount, ParamStr, Dos;
  22. FROM IO     IMPORT WrStr, WrLn, WrCard;
  23. FROM Str    IMPORT StrToCard;
  24.  
  25. (*# data (volatile => on) *)
  26.  
  27. VAR
  28.   ScreenOff: BOOLEAN;
  29.   Counter,
  30.   TimeOut  : CARDINAL;
  31.   oldtime,
  32.   oldkey,
  33.   oldmouse : InterruptRoutine;
  34.   r        : Registers;
  35.  
  36. (*# data (volatile => off) *)
  37.  
  38.  
  39.   PROCEDURE ResetCounter;
  40.   BEGIN
  41.     Counter := 0;
  42.     IF ScreenOff THEN
  43.       ScreenOff := FALSE;
  44.       r.AH := 12H;
  45.       r.AL := 0;
  46.       r.BL := 36H;
  47.       Intr(r, 10H)
  48.     END
  49.   END ResetCounter;
  50.  
  51. (*# save *)
  52.  
  53. (*# call (near_call => off,
  54.           same_ds   => off,
  55.           interrupt => on) *)
  56.  
  57.   PROCEDURE TimeCheck;
  58.   BEGIN
  59.     EI;
  60.     PushF;
  61.     oldtime;
  62.     IF NOT ScreenOff THEN
  63.       INC(Counter);
  64.       IF Counter = TimeOut THEN
  65.         r.AH := 12H;
  66.         r.AL := 1;
  67.         r.BL := 36H;
  68.         Intr(r, 10H);
  69.         ScreenOff := r.AL = 12H
  70.       END
  71.     END
  72.   END TimeCheck;
  73.  
  74.   PROCEDURE KeyCheck;
  75.   BEGIN
  76.     EI;
  77.     PushF;
  78.     oldkey;
  79.     ResetCounter;
  80.   END KeyCheck;
  81.  
  82.   PROCEDURE MouseCheck;
  83.   BEGIN
  84.     EI;
  85.     PushF;
  86.     ResetCounter;
  87.     oldmouse;
  88.   END MouseCheck;
  89.  
  90. (*# restore *)
  91.  
  92.   PROCEDURE Init_Screen;
  93.   (* initialisiert VGA-Karte mit Monochrom-Monitor *)
  94.   BEGIN
  95.     r.AH := 1AH;
  96.     r.AL := 1;
  97.     r.BH := 0;
  98.     r.BL := 8; (* Farbmonitor vorgaukeln *)
  99.     Intr(r, 10H);
  100.     r.AH := 0;
  101.     r.AL := 3; (* Betriebsart wählen *)
  102.     Intr (r, 10H);
  103.   END Init_Screen;
  104.  
  105.   PROCEDURE Init_Screen_Saver;
  106.   VAR
  107.     ok   : BOOLEAN;
  108.     data : ARRAY [0..9] OF CHAR;
  109.   BEGIN
  110.     TimeOut := 60 * 5;
  111.     IF ParamCount() > 0 THEN
  112.       ParamStr(data, 1);
  113.       TimeOut := CARDINAL(StrToCard(data, 10, ok));
  114.       IF NOT ok THEN
  115.         SetReturnCode(1);
  116.         FatalError('invalid Parameter')
  117.       END
  118.     END;
  119.     WrStr('ScreenSaver with ');
  120.     WrCard(TimeOut, 1);
  121.     WrStr(' sec. installed');
  122.     WrLn;
  123.     TimeOut := TimeOut * 18;
  124.     Counter := 0;
  125.     ScreenOff := FALSE;
  126.   END Init_Screen_Saver;
  127.  
  128. BEGIN
  129.   Init_Screen;
  130.   Init_Screen_Saver;
  131.   GetInt(9, oldkey);
  132.   SetInt(9, KeyCheck);
  133.   GetInt(0CH, oldmouse);
  134.   SetInt(0CH, MouseCheck);
  135.   GetInt(8, oldtime);
  136.   SetInt(8, TimeCheck);
  137.   Keep(0)
  138. END savescr.
  139.  
  140. (*========================================================*)
  141. (*                Ende von savescr.MOD                    *)
  142.