(**************************************************************************

     $RCSfile: Timer.mod $
  Description: Interface to timer.device

   Created by: fjc (Frank Copeland)
    $Revision: 3.2 $
      $Author: fjc $
        $Date: 1994/08/08 00:51:23 $

  Includes Release 40.15

  (C) Copyright 1985-1993 Commodore-Amiga, Inc.
      All Rights Reserved

  Oberon-A interface Copyright © 1994, Frank Copeland.
  This file is part of the Oberon-A Interface.
  See Oberon-A.doc for conditions of use and distribution.

***************************************************************************)

MODULE Timer;

(*
** $C- CaseChk       $I- IndexChk  $L+ LongAdr   $N- NilChk
** $P- PortableCode  $R- RangeChk  $S- StackChk  $T- TypeChk
** $V- OvflChk       $Z- ZeroVars
*)

IMPORT E := Exec;

(*
**      $VER: timer.h 36.16 (25.1.91)
**
**      Timer device name and useful definitions.
*)

CONST

(* unit defintions *)
  unitMicroHZ   * = 0;
  unitVBlank    * = 1;
  unitEClock    * = 2;
  unitWaitUntil * = 3;
  unitWaitEClock* = 4;

  name      * = "timer.device";

TYPE

  TimeValPtr* = CPOINTER TO TimeVal;
  TimeVal* = RECORD
    secs*  : E.ULONG;
    micro* : E.ULONG;
  END; (* TimeVal *)

  EClockValPtr* = CPOINTER TO EClockVal;
  EClockVal* = RECORD
    hi* : E.ULONG;
    lo* : E.ULONG;
  END; (* EClockVal *)

  TimeRequestPtr* = CPOINTER TO TimeRequest;
  TimeRequest* = RECORD (E.IORequest)
    time* : TimeVal;
  END; (* TimeRequest *)

CONST

(* ioCommand to use for adding a timer *)
  addRequest  * = E.cmdNonstd;
  getSysTime  * = E.cmdNonstd+1;
  setSysTime  * = E.cmdNonstd+2;


(*-- Device base variable----------------------------------------------*)

TYPE

  TimerBasePtr * = CPOINTER TO TimerBase;
  TimerBase * = RECORD (E.Device) END;


(*-- Device functions -------------------------------------------------*)

(*
**      $VER: timer_protos.h 1.6 (25.1.91)
*)

LIBCALL (base : TimerBasePtr) AddTime*
  ( VAR dest [8] : TimeVal;
    VAR src  [9] : TimeVal );
  - 42;
LIBCALL (base : TimerBasePtr) SubTime*
  ( VAR dest [8] : TimeVal;
    VAR src  [9] : TimeVal );
  - 48;
LIBCALL (base : TimerBasePtr) CmpTime*
  ( VAR dest [8] : TimeVal;
    VAR src  [9] : TimeVal )
  : INTEGER;
  - 54;
LIBCALL (base : TimerBasePtr) ReadEClock*
  ( VAR dest [8] : EClockVal )
  : E.ULONG;
  - 60;
LIBCALL (base : TimerBasePtr) GetSysTime*
  ( VAR dest [8] : TimeVal );
  - 66;


END Timer.
