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

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

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

  CONST TabSize = 1024;

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

BEGIN
  pi := trans.Atan(1) * 4;
  faktor := pi / (TabSize DIV 2);
  i := 0; WHILE i < TabSize DO
    x := i * faktor;
    y := (MAX(INTEGER)-2) * trans.Sin(x);
    buf[i] := SHORT(ENTIER(y + 1/2));
  INC(i) 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 NOT d.Execute("AMOK#39:DataToObj/DataToObject ram:sintab_1024x16",NIL,io.out) THEN
    io.WriteString("Can't find DataToObject\n");
  END;
END MakeSinTab.

