Showcase2.LST 2.2 KB

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