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

     $RCSfile: MathIEEEDoubBas.mod $
  Description: Interface to mathieeedoubbas.library

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

  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 MathIEEEDoubBas;

(*

  This module is not defined.  This is because the compiler cannot yet
  handle the LONGREAL as an 8-byte IEEE double-precision real.
  Patience.

*)

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

IMPORT SYS := SYSTEM, E := Exec, M := MathLibrary;


(*-- MathIEEEDoubBas Base variable --------------------------------------*)

TYPE

  MathIEEEDoubBasBasePtr * = CPOINTER TO MathIEEEDoubBasBase;
  MathIEEEDoubBasBase * = RECORD (M.MathIEEEBase) END;

CONST

  Name * = "mathieeedoubbas.library";
  mathIEEEDoubBasName * = Name;

VAR

  Base * : MathIEEEDoubBasBasePtr;


(*-- Library Functions ------------------------------------------------*)


LIBCALL (base : MathIEEEDoubBasBasePtr ) Fix*
  ( parm [0] : E.DOUBLE )
  : LONGINT;
  - 30;

LIBCALL (base : MathIEEEDoubBasBasePtr ) Flt*
  ( integer [0] : LONGINT  )
  : E.DOUBLE;
  - 36;

LIBCALL (base : MathIEEEDoubBasBasePtr ) Cmp*
  ( leftParm  [0] : E.DOUBLE;
    rightParm [1] : E.DOUBLE )
  : LONGINT;
  - 42;

LIBCALL (base : MathIEEEDoubBasBasePtr ) Tst*
  ( parm [0] : E.DOUBLE )
  : LONGINT;
  - 48;

LIBCALL (base : MathIEEEDoubBasBasePtr ) Abs*
  ( parm [0] : E.DOUBLE )
  : E.DOUBLE;
  - 54;

LIBCALL (base : MathIEEEDoubBasBasePtr ) Neg*
  ( parm [0] : E.DOUBLE )
  : E.DOUBLE;
  - 60;

LIBCALL (base : MathIEEEDoubBasBasePtr ) Add*
  ( leftParm  [0] : E.DOUBLE;
    rightParm [1] : E.DOUBLE )
  : E.DOUBLE;
  - 66;

LIBCALL (base : MathIEEEDoubBasBasePtr ) Sub*
  ( leftParm  [0] : E.DOUBLE;
    rightParm [1] : E.DOUBLE )
  : E.DOUBLE;
  - 72;

LIBCALL (base : MathIEEEDoubBasBasePtr ) Mul*
  ( leftParm  [0] : E.DOUBLE;
    rightParm [1] : E.DOUBLE )
  : E.DOUBLE;
  - 78;

LIBCALL (base : MathIEEEDoubBasBasePtr ) Div*
  ( dividend [0] : E.DOUBLE;
    divisor  [1] : E.DOUBLE )
  : E.DOUBLE;
  - 84;

LIBCALL (base : MathIEEEDoubBasBasePtr ) Floor*
  ( parm [0] : E.DOUBLE )
  : E.DOUBLE;
  - 90;

LIBCALL (base : MathIEEEDoubBasBasePtr ) Ceil*
  ( parm [0] : E.DOUBLE )
  : E.DOUBLE;
  - 96;


(*-- Library Base variable --------------------------------------------*)
(* $L- Address globals through A4 *)


(*-----------------------------------*)
PROCEDURE* CloseLib ();

BEGIN (* CloseLib *)
  IF Base # NIL THEN E.Base.CloseLibrary (Base) END
END CloseLib;

(*-----------------------------------*)
PROCEDURE OpenLib * ();

BEGIN (* OpenLib *)
  IF Base = NIL THEN
    Base :=
      SYS.VAL
        ( MathIEEEDoubBasBasePtr,
          E.Base.OpenLibrary (Name, E.libraryMinimum) );
    IF Base = NIL THEN HALT (100) END;
    SYS.SETCLEANUP (CloseLib)
  END;
END OpenLib;


BEGIN
  Base := NIL
*)
END MathIEEEDoubBas.
