@database HYPER:Modula-2/Timer
@node Main "HYPER:Modula-2/Timer"

Prozeduren

   @{" AddTime " link Modul 50}                     @{" CmpTime " link Modul 54}                     @{" GetSysTime " link Modul 58}
   @{" ReadEClock " link Modul 62}                  @{" SubTime " link Modul 66}                  

Konstanten

   @{" addRequest " link Modul 31}                  @{" eClock " link Modul 15}                      @{" getSysTime " link Modul 33}
   @{" microHz " link Modul 13}                     @{" setSysTime " link Modul 34}                  @{" timerName " link Modul 10}
   @{" vBlank " link Modul 14}                      @{" waitEClock " link Modul 17}                  @{" waitUntil " link Modul 16}


Typ-Deklarationen

   @{" EClockVal " link Modul 26}                   @{" EClockValPtr " link Modul 29}                @{" IOTimer " link Modul 47}
   @{" IOTimerPtr " link Modul 48}                  @{" TimeRequest " link Modul 36}                 @{" TimeRequestPtr " link Modul 44}
   @{" TimeVal " link Modul 19}                     @{" TimeValPtr " link Modul 24}               

@endnode
@node Modul "HYPER:Modula-2/Timer.def.guide"
DEFINITION MODULE Timer; (*$ Implementation:=FALSE *)
(* 10-Mar-1992/cn *)

FROM SYSTEM IMPORT ADDRESS;

FROM ExecD IMPORT
 nonstd,@{" IORequest " link HYPER:Modula-2/ExecD.def.guide/Modul 437};

IMPORT R;

CONST
 timerName="timer.device";

 microHz=0;
 vBlank=1;
 (*36*) eClock=2;
 (*36*) waitUntil=3;
 (*36*) waitEClock=4;

TYPE
 @{" TimeVal " link HYPER:Modula-2/Timer.def.guide/Modul 19}=RECORD
  secs:LONGCARD;
  micro:LONGCARD;
 END;
 @{" TimeValPtr " link HYPER:Modula-2/Timer.def.guide/Modul 24}=POINTER TO @{" TimeVal " link HYPER:Modula-2/Timer.def.guide/Modul 19};

 (*36*) @{" EClockVal " link HYPER:Modula-2/Timer.def.guide/Modul 26}=RECORD
         hi,lo:LONGCARD;
        END;
 (*36*) @{" EClockValPtr " link HYPER:Modula-2/Timer.def.guide/Modul 29}=POINTER TO @{" EClockVal " link HYPER:Modula-2/Timer.def.guide/Modul 26};

CONST
 addRequest=nonstd+0;
 getSysTime=nonstd+1;
 setSysTime=nonstd+2;

TYPE
 @{" TimeRequest " link HYPER:Modula-2/Timer.def.guide/Modul 36}=RECORD
  node:@{" IORequest " link HYPER:Modula-2/ExecD.def.guide/Modul 437};
  CASE :INTEGER OF
  |0: time:@{" TimeVal " link HYPER:Modula-2/Timer.def.guide/Modul 19};
  |1: eClock:@{" EClockVal " link HYPER:Modula-2/Timer.def.guide/Modul 26};
  END;
 END;
 @{" TimeRequestPtr " link HYPER:Modula-2/Timer.def.guide/Modul 44}=POINTER TO @{" TimeRequest " link HYPER:Modula-2/Timer.def.guide/Modul 36};

(* Synonyme zur einheitlichen Namensgebung *)
 @{" IOTimer " link HYPER:Modula-2/Timer.def.guide/Modul 47}=@{" TimeRequest " link HYPER:Modula-2/Timer.def.guide/Modul 36};
 @{" IOTimerPtr " link HYPER:Modula-2/Timer.def.guide/Modul 48}=@{" TimeRequestPtr " link HYPER:Modula-2/Timer.def.guide/Modul 44};

PROCEDURE @{" AddTime " link HYPER:Autodocs/timer/AddTime() }(
           timer{R.A6}:ADDRESS;
           dest{R.A0},source{R.A1}:@{" TimeValPtr " link HYPER:Modula-2/Timer.def.guide/Modul 24}); CODE -42;

PROCEDURE @{" CmpTime " link HYPER:Autodocs/timer/CmpTime() }(
           timer{R.A6}:ADDRESS;
           dest{R.A0},source{R.A1}:@{" TimeValPtr " link HYPER:Modula-2/Timer.def.guide/Modul 24}):LONGINT; CODE -54;

PROCEDURE(*36*) @{" GetSysTime " link HYPER:Autodocs/timer/GetSysTime() }(
                 timer{R.A6}:ADDRESS;
                 VAR dest{R.A0}:@{" TimeVal " link HYPER:Modula-2/Timer.def.guide/Modul 19}); CODE -66;

PROCEDURE(*36*) @{" ReadEClock " link HYPER:Autodocs/timer/ReadEClock() }(
                 timer{R.A6}:ADDRESS;
                 VAR dest{R.A0}:@{" EClockVal " link HYPER:Modula-2/Timer.def.guide/Modul 26}):LONGCARD; CODE -60;

PROCEDURE @{" SubTime " link HYPER:Autodocs/timer/SubTime() }(
           timer{R.A6}:ADDRESS;
           dest{R.A0},source{R.A1}:@{" TimeValPtr " link HYPER:Modula-2/Timer.def.guide/Modul 24}); CODE -48;

END Timer.noimp

@endnode
