Syntax20b.Scn.Fnt ParcElems Alloc Syntax24b.Scn.Fnt Syntax10.Scn.Fnt Syntax10b.Scn.Fnt FoldElems (* AMIGA *) MODULE AmigaMath; (* RD 6.8.1995 *) IMPORT SYSTEM, Amiga, AmigaExec, AmigaBase; BasLib, TransLib: LONGINT; Dummy: AmigaBase.Regs; PROCEDURE Entier*(s: REAL): LONGINT; BEGIN Dummy.d[0]:=SYSTEM.VAL(LONGINT, s); AmigaBase.LibCall(BasLib, -90, Dummy); AmigaBase.LibCall(BasLib, -30, Dummy); RETURN Dummy.d[0]; END Entier; PROCEDURE IntToReal*(l: LONGINT; VAR d: REAL); BEGIN Dummy.d[0]:=l; AmigaBase.LibCall(BasLib, -36, Dummy); d:=SYSTEM.VAL(REAL, Dummy.d[0]); END IntToReal; (* 1 if s1>s2 0 if s1=s2 -1 if s10 0 if s=0 -1 if s<0 *) PROCEDURE Tst*(s: REAL): LONGINT; BEGIN Dummy.d[0]:=SYSTEM.VAL(LONGINT, s); AmigaBase.LibCall(BasLib, -48, Dummy); RETURN Dummy.d[0]; END Tst; PROCEDURE Abs*(s: REAL; VAR d: REAL); BEGIN Dummy.d[0]:=SYSTEM.VAL(LONGINT, s); AmigaBase.LibCall(BasLib, -54, Dummy); d:=SYSTEM.VAL(REAL, Dummy.d[0]); END Abs; PROCEDURE Neg*(s: REAL; VAR d: REAL); BEGIN Dummy.d[0]:=SYSTEM.VAL(LONGINT, s); AmigaBase.LibCall(BasLib, -60, Dummy); d:=SYSTEM.VAL(REAL, Dummy.d[0]); END Neg; PROCEDURE Add*(s1, s2: REAL; VAR d: REAL); BEGIN Dummy.d[0]:=SYSTEM.VAL(LONGINT, s1); Dummy.d[1]:=SYSTEM.VAL(LONGINT, s2); AmigaBase.LibCall(BasLib, -66, Dummy); d:=SYSTEM.VAL(REAL, Dummy.d[0]); END Add; PROCEDURE Sub*(s1, s2: REAL; VAR d: REAL); BEGIN Dummy.d[0]:=SYSTEM.VAL(LONGINT, s1); Dummy.d[1]:=SYSTEM.VAL(LONGINT, s2); AmigaBase.LibCall(BasLib, -72, Dummy); d:=SYSTEM.VAL(REAL, Dummy.d[0]); END Sub; PROCEDURE Mul*(s1, s2: REAL; VAR d: REAL); BEGIN Dummy.d[0]:=SYSTEM.VAL(LONGINT, s1); Dummy.d[1]:=SYSTEM.VAL(LONGINT, s2); AmigaBase.LibCall(BasLib, -78, Dummy); d:=SYSTEM.VAL(REAL, Dummy.d[0]); END Mul; PROCEDURE Div*(s1, s2: REAL; VAR d: REAL); BEGIN Dummy.d[0]:=SYSTEM.VAL(LONGINT, s1); Dummy.d[1]:=SYSTEM.VAL(LONGINT, s2); AmigaBase.LibCall(BasLib, -84, Dummy); d:=SYSTEM.VAL(REAL, Dummy.d[0]); END Div; PROCEDURE Arctan*(s: REAL; VAR d: REAL); BEGIN Dummy.d[0]:=SYSTEM.VAL(LONGINT, s); AmigaBase.LibCall(TransLib, -30, Dummy); d:=SYSTEM.VAL(REAL, Dummy.d[0]); END Arctan; PROCEDURE Cos*(s: REAL; VAR d: REAL); BEGIN Dummy.d[0]:=SYSTEM.VAL(LONGINT, s); AmigaBase.LibCall(TransLib, -42, Dummy); d:=SYSTEM.VAL(REAL, Dummy.d[0]); END Cos; PROCEDURE Sin*(s: REAL; VAR d: REAL); BEGIN Dummy.d[0]:=SYSTEM.VAL(LONGINT, s); AmigaBase.LibCall(TransLib, -36, Dummy); d:=SYSTEM.VAL(REAL, Dummy.d[0]); END Sin; PROCEDURE Ln*(s: REAL; VAR d: REAL); BEGIN Dummy.d[0]:=SYSTEM.VAL(LONGINT, s); AmigaBase.LibCall(TransLib, -84, Dummy); d:=SYSTEM.VAL(REAL, Dummy.d[0]); END Ln; PROCEDURE Exp*(s: REAL; VAR d: REAL); BEGIN Dummy.d[0]:=SYSTEM.VAL(LONGINT, s); AmigaBase.LibCall(TransLib, -78, Dummy); d:=SYSTEM.VAL(REAL, Dummy.d[0]); END Exp; PROCEDURE Sqrt*(s: REAL; VAR d: REAL); BEGIN Dummy.d[0]:=SYSTEM.VAL(LONGINT, s); AmigaBase.LibCall(TransLib, -96, Dummy); d:=SYSTEM.VAL(REAL, Dummy.d[0]); END Sqrt; (* returns s1/s2 *) PROCEDURE Ratio*(s1, s2: LONGINT; VAR d: REAL); VAR r1,r2: REAL; BEGIN IntToReal(s1, r1); IntToReal(s2,r2); Div(r1,r2,d); END Ratio; PROCEDURE e*(VAR d: REAL); BEGIN d:=SYSTEM.VAL(REAL, 0402DF854H); END e; PROCEDURE pi*(VAR d: REAL); BEGIN d:=SYSTEM.VAL(REAL, 040490FDBH); END pi; PROCEDURE TermProc; BEGIN Dummy.a[1]:=BasLib; IF BasLib#0 THEN AmigaBase.LibCall(AmigaBase.ExecBase(), -414, Dummy);END; Dummy.a[1]:=TransLib; IF TransLib#0 THEN AmigaBase.LibCall(AmigaBase.ExecBase(), -414, Dummy);END; END TermProc; BEGIN BasLib:=AmigaExec.OpenLibrary("mathieeesingbas.library", 0); TransLib:=AmigaExec.OpenLibrary("mathieeesingtrans.library", 0); Amiga.TermProcedure(TermProc); END AmigaMath.