(*---------------------------------------------------------------------------
  :Program.     MakeSinTab.mod
  :Contents.    Erzeugt eine Sinustabelle
  :Author.      Christian Stiens
  :Address.     Heustiege 2, W-4710 Lüdinghausen
  :Copyright.   PD
  :Language.    Oberon-2
  :Translator.  Amiga Oberon V3.01d
  :History.     V1.0, 01-Nov-91
  :History.     V1.1, 05-Mar-92
  :History.     V1.2, 26-Mar-93
---------------------------------------------------------------------------*)

MODULE MakeSinTab; (* $RangeChk- $OvflChk- *)

  IMPORT io,sys:SYSTEM,trans:MathTrans,d:Dos;

  CONST TabSize = 1024;
        TabSize2 = TabSize+TabSize DIV 4;

  VAR
    file       : d.FileHandlePtr;
    i          : INTEGER;
    buf        : ARRAY TabSize2 OF INTEGER;
    pi,faktor  : REAL;
    x,y        : REAL;

BEGIN
  pi := trans.Atan(1) * 4;
  faktor := pi / (TabSize DIV 2);
  FOR i := 0 TO TabSize2-1 DO
    x := i * faktor;
    y := MAX(INTEGER) * trans.Sin(x);
    buf[i] := SHORT(ENTIER(y + 1/2));
  END;
  file := d.Open("ram:SinTab_1024x16",d.newFile);
  IF file # NIL THEN
    IF d.Write(file,buf,sys.SIZE(buf))=0 THEN END;
    d.OldClose(file);
  END;
  IF ~d.Execute("AMOK#39:DataToObj/DataToObject ram:sintab_1024x16",NIL,io.out) THEN
    io.WriteString("Can't find DataToObject\n");
  END;
END MakeSinTab.

