DEFINITION MODULE MathLibLong;

(*
 * Dies Modul kann selbstverstaendlich normal benutzt
 * werden, es wird jedoch vom Compiler automatisch
 * importiert, wenn die transzendenten LONGREAL-
 * Prozeduren des Moduls SYSTEM benutzt werden und nicht
 * fuer 68881 compiliert wird.
 * ACHTUNG: Nicht alle hierin deklarierten Prozeduren
 * sind in SYSTEM vorhanden!
 *)

(*$ LargeVars:=FALSE LongAlign:=FALSE NameChk:=FALSE *)
(* Sehr wichtig: muß im SMALL-Modell kompiliert sein! *)

FROM SYSTEM IMPORT ADDRESS;

(*
 * Dies ist eine Mischung aus einem "normalen" und einem
 * Library-Modul.
 * Da einige der Prozeduren nicht direkt in der Library
 * vorkommen, ist eine Implementation notwendig.
 *)

VAR (* read-only! *)
  mathieeedoubtransVersion:INTEGER;
  mathieeedoubtransBase:ADDRESS;


CONST
  mathieeedoubtransMinVersion=34;
  mathieeedoubtransName="mathieeedoubtrans.library";
  e = 2.71828182845904523536;
  pi= 3.14159265358979323846;

PROCEDURE acos(x{0}:LONGREAL):LONGREAL; CODE -120;
PROCEDURE asin(x{0}:LONGREAL):LONGREAL; CODE -114;
PROCEDURE arctan(x{0}:LONGREAL):LONGREAL; CODE -30;
PROCEDURE cos(x{0}:LONGREAL):LONGREAL; CODE -42;
PROCEDURE cosh(x{0}:LONGREAL):LONGREAL; CODE -66;
PROCEDURE exp(x{0}:LONGREAL):LONGREAL; CODE -78;
PROCEDURE fieee(x{0}:REAL):LONGREAL; CODE -108;

PROCEDURE ln(x{0}:LONGREAL):LONGREAL; CODE -84;
PROCEDURE log(x{0}:LONGREAL):LONGREAL; CODE -84;(* !! *)

PROCEDURE log10(x{0}:LONGREAL):LONGREAL; CODE -126;
PROCEDURE pow(base{0},exp{2}:LONGREAL):LONGREAL;CODE -90;
PROCEDURE sin(x{0}:LONGREAL):LONGREAL; CODE -36;
PROCEDURE sincos(x{0}:LONGREAL;
                 VAR cos{8}:LONGREAL):LONGREAL; CODE -54;
PROCEDURE sinh(x{0}:LONGREAL):LONGREAL; CODE -60;
PROCEDURE sqrt(x{0}:LONGREAL):LONGREAL; CODE -96;
PROCEDURE tan(x{0}:LONGREAL):LONGREAL; CODE -48;
PROCEDURE tanh(x{0}:LONGREAL):LONGREAL; CODE -72;
PROCEDURE tieee(x{0}:LONGREAL):REAL; CODE -102;

(* Prozeduren mit Implementation: *)
PROCEDURE atanh(x{0}:LONGREAL):LONGREAL;
PROCEDURE etoxm1(x{0}:LONGREAL):LONGREAL;
PROCEDURE log2(x{0}:LONGREAL):LONGREAL;
PROCEDURE lognp1(x{0}:LONGREAL):LONGREAL;
PROCEDURE tentox(x{0}:LONGREAL):LONGREAL;
PROCEDURE twotox(x{0}:LONGREAL):LONGREAL;
PROCEDURE sqr(x{0}:LONGREAL):LONGREAL;

END MathLibLong.
