(*-------------------------------------------------------------------------*)
(*                                                                         *)
(*  Amiga Oberon Interface Module:                    Date: 02-Nov-92      *)
(*                                                                         *)
(*   © 1992 by Fridtjof Siebert                                            *)
(*                                                                         *)
(*-------------------------------------------------------------------------*)

MODULE Timer;

IMPORT e * := Exec;

CONST
(* unit defintions *)
  microHz    * = 0;
  vBlank     * = 1;
  eClock     * = 2;
  waitUntil  * = 3;
  waitEClock * = 4;

  timerName  * = "timer.device";

TYPE
  TimeValPtr * = UNTRACED POINTER TO TimeVal;
  TimeVal * = STRUCT
    secs * : LONGINT;
    micro* : LONGINT;
  END;

  EClockValPtr * = UNTRACED POINTER TO EClockVal;
  EClockVal * = STRUCT
    hi * : LONGINT;
    lo * : LONGINT;
  END;

  TimeRequestPtr * = UNTRACED POINTER TO TimeRequest;
  TimeRequest * = STRUCT (node * : e.IORequest)
    time * : TimeVal;
  END;


CONST

(* IO_COMMAND to use for adding a timer *)
  addRequest * = e.nonstd+0;
  getSysTime * = e.nonstd+1;
  setSysTime * = e.nonstd+2;

VAR

(*
 *  You have to put a pointer to the timer.device here to use the timer
 *  procedures:
 *)

  base * : e.DevicePtr;

PROCEDURE AddTime    * {base,-42}(VAR dest{8},source{9}: TimeVal);
PROCEDURE SubTime    * {base,-48}(VAR dest{8},source{9}: TimeVal);
PROCEDURE CmpTime    * {base,-54}(VAR tv1{8} ,tv2{9}   : TimeVal): INTEGER;
PROCEDURE ReadEClock * {base,-60}(VAR dest{8}: EClockVal): LONGINT;
PROCEDURE GetSysTime * {base,-66}(VAR dest{8}: TimeVal);

END Timer.

