Showcase2.mod 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. MODULE Showcase2;
  2. (* Step-9 tour: exported TYPEs, module whole-copy both directions,
  3. enum literals, field/row copy, VAR tails, open arrays, I/O. *)
  4. MODULE M EXPORT Point, Color, Red, Green, Blue, Vec, G, N, Reset;
  5. TYPE Point = RECORD x, y : INTEGER END;
  6. TYPE Color = (Red, Green, Blue);
  7. TYPE Vec = ARRAY [1 .. 3] OF INTEGER;
  8. VAR G : Point;
  9. VAR N : INTEGER;
  10. PROCEDURE Reset;
  11. BEGIN
  12. G.x := 0;
  13. G.y := 0;
  14. N := 0
  15. END Reset;
  16. END M;
  17. TYPE Inner = RECORD u, v : INTEGER END;
  18. TYPE Outer = RECORD a : INTEGER; b : Inner END;
  19. VAR p, q : M.Point;
  20. VAR c : M.Color;
  21. VAR v : M.Vec;
  22. VAR m, n : ARRAY [1 .. 2], [1 .. 2] OF INTEGER;
  23. VAR r1, r2 : Outer;
  24. VAR total : INTEGER;
  25. VAR ExitCode : INTEGER;
  26. PROCEDURE Bump(VAR x : INTEGER);
  27. BEGIN
  28. x := x + 1
  29. END Bump;
  30. PROCEDURE SumOpen(x : ARRAY OF INTEGER) : INTEGER;
  31. VAR i, s : INTEGER;
  32. BEGIN
  33. s := 0;
  34. FOR i := 0 TO HIGH(x) DO s := s + x[i] END;
  35. RETURN s
  36. END SumOpen;
  37. BEGIN
  38. total := 0;
  39. WriteString("show2");
  40. M.Reset();
  41. M.N := 7;
  42. total := total + M.N;
  43. p.x := 3;
  44. p.y := 4;
  45. M.G := p;
  46. total := total + M.G.x + M.G.y;
  47. q := M.G;
  48. total := total + q.x * q.y;
  49. c := M.Blue;
  50. CASE c OF
  51. M.Red : total := total + 0 |
  52. M.Green : total := total + 0 |
  53. M.Blue : total := total + 6
  54. END;
  55. IF c # M.Red THEN total := total + 1 END;
  56. m[1,1] := 1; m[1,2] := 2; m[2,1] := 3; m[2,2] := 4;
  57. n[2] := m[1];
  58. total := total + n[2,1] + n[2,2];
  59. r1.a := 0; r1.b.u := 10; r1.b.v := 20;
  60. r2.b := r1.b;
  61. total := total + r2.b.u + r2.b.v;
  62. Bump(q.y);
  63. total := total + q.y;
  64. v[1] := 2; v[2] := 4; v[3] := 6;
  65. total := total + SumOpen(v);
  66. WriteInt(total);
  67. ExitCode := total
  68. END Showcase2.