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

  1. Oberon10.Scn.Fnt
  2. Syntax10.Scn.Fnt
  3. Syntax10i.Scn.Fnt
  4. (* ETH Oberon, Copyright 2000 ETH Zuerich Institut fuer Computersysteme, ETH Zentrum, CH-8092 Zuerich.
  5. Refer to the "General ETH Oberon System Source License" contract available at: http://www.oberon.ethz.ch/ *)
  6. MODULE Lissajous; (** portable *)
  7. IMPORT
  8.     Math, Objects, Gadgets, BasicGadgets, Complex;
  9. (* Return the value of a input gadget *)
  10. PROCEDURE GetValue(name: ARRAY OF CHAR; default: REAL): REAL;
  11. VAR obj: Objects.Object;
  12. BEGIN
  13.     obj := Gadgets.FindObj(Gadgets.context, name);
  14.     IF (obj # NIL) & (obj IS BasicGadgets.Real) THEN RETURN SHORT(obj(BasicGadgets.Real).val)
  15.     ELSIF (obj # NIL) & (obj IS BasicGadgets.Integer) THEN RETURN obj(BasicGadgets.Integer).val
  16.     ELSE RETURN default
  17. END GetValue;
  18. PROCEDURE Do*;
  19. VAR obj: Objects.Object; i: INTEGER; freqA, freqB: REAL;
  20. BEGIN
  21.     obj := Gadgets.FindObj(Gadgets.context, "Controller");
  22.     IF (obj # NIL) & (obj IS Complex.Complex) THEN
  23.         WITH obj: Complex.Complex DO
  24.             freqA := GetValue("FreqA", 2); freqB := GetValue("FreqB", 2);
  25.             i := 0;
  26.             WHILE i < 360 DO
  27.                 obj.real := Math.sin(freqA * Math.pi / 180 * i); obj.imag := Math.sin(freqB *Math.pi / 180 * i);
  28.                 Gadgets.Update(obj); (* and plot *)
  29.                 INC(i)
  30.             END
  31.         END
  32. END Do;
  33. END Lissajous.
  34. Gadgets.Link Complex.New ~
  35. System.Free Lissajous Graphs~
  36. Gadgets.Insert Graphs.NewGraph ~
  37.