MODULE broadcast2; (*--------------------------------------------------------- File name: broadcast2.pm Author: AG Date: 5/23/05 Problem: This program broadcasts an ARRAY located in the controller into a chain. Example of Execution: L1: 5 6 8 5 6 8 5 6 8 5 6 8 5 6 8 5 Cycles: N assignments (where N is the size of the ARRAY) *) (*---------------------------------------------------------- CONFIGURATION ----------------------------------------------------------*) CONST MAXCELLS=1024; (* MAXCELLS cells in one line *) CONFIGURATION chain[0..(MAXCELLS - 1)]; CONNECTION left: chain [i] -> chain[(i-1) MOD MAXCELLS]; right: chain[i] -> chain[(i+1) MOD MAXCELLS]; (*---------------------------------------------------------- VARIABLES ----------------------------------------------------------*) VAR L0, L1: chain OF INTEGER; N, i, RightLimit: INTEGER; A: ARRAY[0..(N-1)] OF INTEGER; (*---------------------------------------------------------- MAIN ----------------------------------------------------------*) BEGIN (*Initialize data *) RightLimit:= 16; N:= 3; A[0]:= 5; A[1]:= 6; A[2]:= 8; L0:= ID(chain) - 1; (* L0= 0 1 2 3 4 5 6 7 8 9 10 .. *) IF L0 < RightLimit THEN (*Prepare Selection *) L0:= L0 MOD N; (* L0 = 0 1 2 3 4 0 1 2 3 4 0 1 2 3 *) FOR i:= 0 TO (N -1) DO IF L0 = i THEN L1:= A[i]; END; (* IF *) END; (* FOR *) (*printing*) WriteString("L1: "); WriteInt(L1, 2);WriteLn; END; (* IF *) END broadcast2.