home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #6 / amigamamagazinepolishissue1998.iso / coders / jËzyki_programowania / oberon / system / amigamathl.mod (.txt) < prev    next >
Oberon Text  |  1977-12-31  |  6KB  |  174 lines

  1. Syntax20b.Scn.Fnt
  2. ParcElems
  3. Alloc
  4. Syntax24b.Scn.Fnt
  5. Syntax10.Scn.Fnt
  6. Syntax10b.Scn.Fnt
  7. FoldElems
  8. (* AMIGA *)
  9. MODULE AmigaMathL; (* RD 6.8.1995 *)
  10. IMPORT
  11.     SYSTEM, Amiga, AmigaExec, AmigaBase;
  12.     TwoLInts = RECORD
  13.         l1,l2: LONGINT;
  14.     END;
  15.     BasLib, TransLib: LONGINT;
  16.     Dummy: AmigaBase.Regs;
  17. PROCEDURE RealTo(r: LONGREAL; VAR l1,l2: LONGINT);
  18.     VAR t: TwoLInts;
  19. BEGIN
  20.     t:=SYSTEM.VAL(TwoLInts, r);
  21.     l1:=t.l1;l2:=t.l2;
  22. END RealTo;
  23. PROCEDURE ToReal(l1,l2: LONGINT; VAR r:LONGREAL);
  24.     VAR t: TwoLInts;
  25. BEGIN
  26.     t.l1:=l1;t.l2:=l2;
  27.     r:=SYSTEM.VAL( LONGREAL, t);
  28. END ToReal;
  29. PROCEDURE Short*(a: LONGREAL; VAR b: REAL);
  30.     VAR t: TwoLInts;
  31. BEGIN
  32.     RealTo(a,Dummy.d[0],Dummy.d[1]);
  33.     AmigaBase.LibCall(TransLib, -102, Dummy);
  34.     b:=SYSTEM.VAL(REAL, Dummy.d[0]);
  35. END Short;
  36. PROCEDURE Long*(a: REAL; VAR b: LONGREAL);
  37. BEGIN
  38.     Dummy.d[0]:=SYSTEM.VAL(LONGINT, a);
  39.     AmigaBase.LibCall(TransLib, -108, Dummy);
  40.     ToReal(Dummy.d[0],Dummy.d[1],b);
  41. END Long;
  42. PROCEDURE Entier*(s: LONGREAL): LONGINT;
  43. BEGIN
  44.     RealTo(s,Dummy.d[0],Dummy.d[1]);
  45.     AmigaBase.LibCall(BasLib, -90, Dummy);
  46.     AmigaBase.LibCall(BasLib, -30, Dummy);
  47.     RETURN Dummy.d[0];
  48. END Entier;
  49. PROCEDURE IntToReal*(l: LONGINT; VAR d: LONGREAL);
  50. BEGIN
  51.     Dummy.d[0]:=l;
  52.     AmigaBase.LibCall(BasLib, -36, Dummy);
  53.     ToReal(Dummy.d[0],Dummy.d[1],d);
  54. END IntToReal;
  55. (* 1 if s1>s2     0 if s1=s2       -1 if s1<s2 *)
  56. PROCEDURE Cmp*(s1, s2: LONGREAL): LONGINT;
  57. BEGIN
  58.     RealTo(s1,Dummy.d[0],Dummy.d[1]);
  59.     RealTo(s2,Dummy.d[2],Dummy.d[3]);
  60.     AmigaBase.LibCall(BasLib, -42, Dummy);
  61.     RETURN Dummy.d[0];
  62. END Cmp;
  63. (* 1 if s>0     0 if s=0       -1 if s<0 *)
  64. PROCEDURE Tst*(s: LONGREAL): LONGINT;
  65. BEGIN
  66.     RealTo(s,Dummy.d[0],Dummy.d[1]);
  67.     AmigaBase.LibCall(BasLib, -48, Dummy);
  68.     RETURN Dummy.d[0];
  69. END Tst;
  70. PROCEDURE Abs*(s: LONGREAL; VAR d: LONGREAL);
  71. BEGIN
  72.     RealTo(s,Dummy.d[0],Dummy.d[1]);
  73.     AmigaBase.LibCall(BasLib, -54, Dummy);
  74.     ToReal(Dummy.d[0],Dummy.d[1],d);
  75. END Abs;
  76. PROCEDURE Neg*(s: LONGREAL; VAR d: LONGREAL);
  77. BEGIN
  78.     RealTo(s,Dummy.d[0],Dummy.d[1]);
  79.     AmigaBase.LibCall(BasLib, -60, Dummy);
  80.     ToReal(Dummy.d[0],Dummy.d[1],d);
  81. END Neg;
  82. PROCEDURE Add*(s1, s2: LONGREAL; VAR d: LONGREAL);
  83. BEGIN
  84.     RealTo(s1,Dummy.d[0],Dummy.d[1]);
  85.     RealTo(s2,Dummy.d[2],Dummy.d[3]);
  86.     AmigaBase.LibCall(BasLib, -66, Dummy);
  87.     ToReal(Dummy.d[0],Dummy.d[1],d);
  88. END Add;
  89. PROCEDURE Sub*(s1, s2: LONGREAL; VAR d: LONGREAL);
  90. BEGIN
  91.     RealTo(s1,Dummy.d[0],Dummy.d[1]);
  92.     RealTo(s2,Dummy.d[2],Dummy.d[3]);
  93.     AmigaBase.LibCall(BasLib, -72, Dummy);
  94.     ToReal(Dummy.d[0],Dummy.d[1],d);
  95. END Sub;
  96. PROCEDURE Mul*(s1, s2: LONGREAL; VAR d: LONGREAL);
  97. BEGIN
  98.     RealTo(s1,Dummy.d[0],Dummy.d[1]);
  99.     RealTo(s2,Dummy.d[2],Dummy.d[3]);
  100.     AmigaBase.LibCall(BasLib, -78, Dummy);
  101.     ToReal(Dummy.d[0],Dummy.d[1],d);
  102. END Mul;
  103. PROCEDURE Div*(s1, s2: LONGREAL; VAR d: LONGREAL);
  104. BEGIN
  105.     RealTo(s1,Dummy.d[0],Dummy.d[1]);
  106.     RealTo(s2,Dummy.d[2],Dummy.d[3]);
  107.     AmigaBase.LibCall(BasLib, -84, Dummy);
  108.     ToReal(Dummy.d[0],Dummy.d[1],d);
  109. END Div;
  110. PROCEDURE Arctan*(s: LONGREAL; VAR d: LONGREAL);
  111. BEGIN
  112.     RealTo(s,Dummy.d[0],Dummy.d[1]);
  113.     AmigaBase.LibCall(TransLib, -30, Dummy);
  114.     ToReal(Dummy.d[0],Dummy.d[1],d);
  115. END Arctan;
  116. PROCEDURE Cos*(s: LONGREAL; VAR d: LONGREAL);
  117. BEGIN
  118.     RealTo(s,Dummy.d[0],Dummy.d[1]);
  119.     AmigaBase.LibCall(TransLib, -42, Dummy);
  120.     ToReal(Dummy.d[0],Dummy.d[1],d);
  121. END Cos;
  122. PROCEDURE Sin*(s: LONGREAL; VAR d: LONGREAL);
  123. BEGIN
  124.     RealTo(s,Dummy.d[0],Dummy.d[1]);
  125.     AmigaBase.LibCall(TransLib, -36, Dummy);
  126.     ToReal(Dummy.d[0],Dummy.d[1],d);
  127. END Sin;
  128. PROCEDURE Ln*(s: LONGREAL; VAR d: LONGREAL);
  129. BEGIN
  130.     RealTo(s,Dummy.d[0],Dummy.d[1]);
  131.     AmigaBase.LibCall(TransLib, -84, Dummy);
  132.     ToReal(Dummy.d[0],Dummy.d[1],d);
  133. END Ln;
  134. PROCEDURE Exp*(s: LONGREAL; VAR d: LONGREAL);
  135. BEGIN
  136.     RealTo(s,Dummy.d[0],Dummy.d[1]);
  137.     AmigaBase.LibCall(TransLib, -78, Dummy);
  138.     ToReal(Dummy.d[0],Dummy.d[1],d);
  139. END Exp;
  140. PROCEDURE Sqrt*(s: LONGREAL; VAR d: LONGREAL);
  141. BEGIN
  142.     RealTo(s,Dummy.d[0],Dummy.d[1]);
  143.     AmigaBase.LibCall(TransLib, -96, Dummy);
  144.     ToReal(Dummy.d[0],Dummy.d[1],d);
  145. END Sqrt;
  146. (* returns s1/s2 *)
  147. PROCEDURE Ratio*(s1, s2: LONGINT; VAR d: LONGREAL);
  148.     VAR r1,r2: LONGREAL;
  149. BEGIN
  150.     IntToReal(s1, r1);
  151.     IntToReal(s2,r2);
  152.     Div(r1,r2,d);
  153. END Ratio;
  154. PROCEDURE e*(VAR d: LONGREAL);
  155. BEGIN
  156.     ToReal(04005BF0AH,08B14575DH,d);
  157. END e;
  158. PROCEDURE pi*(VAR d: LONGREAL);
  159. BEGIN
  160.     ToReal(0400921FBH,054442D10H,d);
  161. END pi;
  162. PROCEDURE TermProc;
  163. BEGIN
  164.     Dummy.a[1]:=BasLib;
  165.     IF BasLib#0 THEN AmigaBase.LibCall(AmigaBase.ExecBase(), -414, Dummy);END;
  166.     Dummy.a[1]:=TransLib;
  167.     IF TransLib#0 THEN AmigaBase.LibCall(AmigaBase.ExecBase(), -414, Dummy)END
  168. END TermProc;
  169. BEGIN
  170.     BasLib:=AmigaExec.OpenLibrary("mathieeedoubbas.library", 0);
  171.     TransLib:=AmigaExec.OpenLibrary("mathieeedoubtrans.library", 0);
  172.     Amiga.TermProcedure(TermProc);
  173. END AmigaMathL.
  174.