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