//-------------------------------------------------------------------------- // Example of 3 dimensional array constructors //-------------------------------------------------------------------------- main module ARCONST3 use TEXTIO declare ZRANGE is 1..4 XRANGE is 1..5 YRANGE is 1..6 Y is array [YRANGE] of integer XY is array [XRANGE] of Y zxy is array [zrange] of xy Ccage =table ZXY ( XY ([1] : Y ( [1..1] : 1, [2..6] : 1), [2] : Y ( [1..2] : 2, [3..6] : 1), [3] : Y ( [1..3] : 3, [4..6] : 1), [4] : Y ( [1..4] : 4, [5..6] : 1), [5] : Y ( [1..5] : 5, [6..6] : 1) ), XY ([1] : Y ( [1..1] : 1, [2..6] : 2), [2] : Y ( [1..2] : 2, [3..6] : 2), [3] : Y ( [1..3] : 3, [4..6] : 2), [4] : Y ( [1..4] : 4, [5..6] : 2), [5] : Y ( [1..5] : 5, [6..6] : 2) ), XY ([1] : Y ( [1..1] : 1, [2..6] : 3), [2] : Y ( [1..2] : 2, [3..6] : 3), [3] : Y ( [1..3] : 3, [4..6] : 3), [4] : Y ( [1..4] : 4, [5..6] : 3), [5] : Y ( [1..5] : 5, [6..6] : 3) ), XY ([1] : Y ( [1..1] : 1, [2..6] : 4), [2] : Y ( [1..2] : 2, [3..6] : 4), [3] : Y ( [1..3] : 3, [4..6] : 4), [4] : Y ( [1..4] : 4, [5..6] : 4), [5] : Y ( [1..5] : 5, [6..6] : 4) ) ) cage : ZXY cage_c : static ZXY enddeclare procedure out_grid ( i: integer, G: in ref XY ) declare tab is array[zrange] of packed array [1..4] of char tabs = table tab ( " ", " ", " ", " ") enddeclare for XIndex in XRANGE do out_string( tty, tabs[i] ) for YIndex in YRANGE do out_integer (TTY, G [XIndex, YIndex], " ") endfor out_record (TTY) endfor endprocedure procedure out_cage ( C: in ref ZXY ) for zindex in zrange do out_grid ( zindex, c[zindex] ) tty_line (" ") endfor endprocedure cage := table ZXY ( XY ([1] : Y ( [1..1] : 1, [2..6] : 1), [2] : Y ( [1..2] : 2, [3..6] : 1), [3] : Y ( [1..3] : 3, [4..6] : 1), [4] : Y ( [1..4] : 4, [5..6] : 1), [5] : Y ( [1..5] : 5, [6..6] : 1) ), XY ([1] : Y ( [1..1] : 1, [2..6] : 2), [2] : Y ( [1..2] : 2, [3..6] : 2), [3] : Y ( [1..3] : 3, [4..6] : 2), [4] : Y ( [1..4] : 4, [5..6] : 2), [5] : Y ( [1..5] : 5, [6..6] : 2) ), XY ([1] : Y ( [1..1] : 1, [2..6] : 3), [2] : Y ( [1..2] : 2, [3..6] : 3), [3] : Y ( [1..3] : 3, [4..6] : 3), [4] : Y ( [1..4] : 4, [5..6] : 3), [5] : Y ( [1..5] : 5, [6..6] : 3) ), XY ([1] : Y ( [1..1] : 1, [2..6] : 4), [2] : Y ( [1..2] : 2, [3..6] : 4), [3] : Y ( [1..3] : 3, [4..6] : 4), [4] : Y ( [1..4] : 4, [5..6] : 4), [5] : Y ( [1..5] : 5, [6..6] : 4) ) ) cage_c := ccage //---------------------------------------------------- tty_line ("-------------------correct------------------------") tty_line ("static cage assigned from constant table constructor") out_cage( cage_c ) tty_line ("-------------------ERROR------------------------") tty_line ("dynamic cage assigned from inline table constructor") out_cage( cage ) endmodule