| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- MODULE Showcase2;
- (* Step-9 tour: exported TYPEs, module whole-copy both directions,
- enum literals, field/row copy, VAR tails, open arrays, I/O. *)
- MODULE M EXPORT Point, Color, Red, Green, Blue, Vec, G, N, Reset;
- TYPE Point = RECORD x, y : INTEGER END;
- TYPE Color = (Red, Green, Blue);
- TYPE Vec = ARRAY [1 .. 3] OF INTEGER;
- VAR G : Point;
- VAR N : INTEGER;
- PROCEDURE Reset;
- BEGIN
- G.x := 0;
- G.y := 0;
- N := 0
- END Reset;
- END M;
- TYPE Inner = RECORD u, v : INTEGER END;
- TYPE Outer = RECORD a : INTEGER; b : Inner END;
- VAR p, q : M.Point;
- VAR c : M.Color;
- VAR v : M.Vec;
- VAR m, n : ARRAY [1 .. 2], [1 .. 2] OF INTEGER;
- VAR r1, r2 : Outer;
- VAR total : INTEGER;
- VAR ExitCode : INTEGER;
- PROCEDURE Bump(VAR x : INTEGER);
- BEGIN
- x := x + 1
- END Bump;
- PROCEDURE SumOpen(x : ARRAY OF INTEGER) : INTEGER;
- VAR i, s : INTEGER;
- BEGIN
- s := 0;
- FOR i := 0 TO HIGH(x) DO s := s + x[i] END;
- RETURN s
- END SumOpen;
- BEGIN
- total := 0;
- WriteString("show2");
- M.Reset();
- M.N := 7;
- total := total + M.N;
- p.x := 3;
- p.y := 4;
- M.G := p;
- total := total + M.G.x + M.G.y;
- q := M.G;
- total := total + q.x * q.y;
- c := M.Blue;
- CASE c OF
- M.Red : total := total + 0 |
- M.Green : total := total + 0 |
- M.Blue : total := total + 6
- END;
- IF c # M.Red THEN total := total + 1 END;
- m[1,1] := 1; m[1,2] := 2; m[2,1] := 3; m[2,2] := 4;
- n[2] := m[1];
- total := total + n[2,1] + n[2,2];
- r1.a := 0; r1.b.u := 10; r1.b.v := 20;
- r2.b := r1.b;
- total := total + r2.b.u + r2.b.v;
- Bump(q.y);
- total := total + q.y;
- v[1] := 2; v[2] := 4; v[3] := 6;
- total := total + SumOpen(v);
- WriteInt(total);
- ExitCode := total
- END Showcase2.
|