home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 July / Chip_2004-07_cd1.bin / tema / aos / files / Oberon.exe / Oberon / Docu.exe / Docu / Plot.Mod (.txt) < prev    next >
Oberon Text  |  2000-02-29  |  1KB  |  40 lines

  1. Oberon10.Scn.Fnt
  2. Syntax10.Scn.Fnt
  3. (* ETH Oberon, Copyright 2000 ETH Zuerich Institut fuer Computersysteme, ETH Zentrum, CH-8092 Zuerich.
  4. Refer to the "General ETH Oberon System Source License" contract available at: http://www.oberon.ethz.ch/ *)
  5. MODULE Plot; (** portable *)
  6. IMPORT Objects, Gadgets, BasicGadgets, Math;
  7. PROCEDURE FindY(): BasicGadgets.Integer;
  8. VAR obj: Objects.Object;
  9. BEGIN
  10.     obj := Gadgets.FindObj(Gadgets.context, "YAxis");
  11.     IF (obj # NIL) & (obj IS BasicGadgets.Integer) THEN RETURN obj(BasicGadgets.Integer)
  12.     ELSE RETURN NIL
  13. END FindY;
  14. PROCEDURE GetValue(name: ARRAY OF CHAR; default: REAL): REAL;
  15. VAR obj: Objects.Object;
  16. BEGIN
  17.     obj := Gadgets.FindObj(Gadgets.context, name);
  18.     IF (obj # NIL) & (obj IS BasicGadgets.Real) THEN RETURN SHORT(obj(BasicGadgets.Real).val)
  19.     ELSIF (obj # NIL) & (obj IS BasicGadgets.Integer) THEN RETURN obj(BasicGadgets.Integer).val * 1.0
  20.     ELSE RETURN default
  21. END GetValue;
  22. PROCEDURE Plot*;
  23. VAR y: BasicGadgets.Integer; i: INTEGER;
  24.     AmpA, FreqA, AmpB, FreqB, tmp: REAL;
  25. BEGIN
  26.     AmpA := GetValue("AmpA", 200); FreqA := GetValue("FreqA", 40);
  27.     AmpB := GetValue("AmpB", 200); FreqB := GetValue("FreqB", 40);
  28.     y := FindY();
  29.     IF y # NIL THEN
  30.         i := 0;
  31.         WHILE i < 360 DO
  32.             tmp := AmpB * Math.sin(FreqB * Math.pi / 180 * i);
  33.             y.val := ENTIER(AmpA * Math.sin(FreqA * Math.pi / 180 * i) + tmp);
  34.             Gadgets.Update(y);
  35.             INC(i)
  36.         END
  37. END Plot;
  38. END Plot.
  39. System.Free Plot ~
  40.