(* reference.5.pasc *)

(* complex data structure, perform the
 * 1. 1- and multi-level record
 * 2. 1- and nulti-dimension array
 * 3. array of record	     <==
 * 4. record of array	     <==
 *
 *)

program Reference is
constant
	three = 3;
	nl = '\n';
type 

	rec1 = record 
		  i:  integer;
		  ch: char
	       endrec;
	arr1 = array(1..10) of integer;

var
	mix: array(-2..1) of record 
				i:  integer;
				ch: array(2..5) of rec1
			     endrec;
	i, j : integer;
	b1rec: rec1;
	b2rec: record
		 field1: integer;
		 field2: rec1
	       endrec;
	b1arr: arr1;
	b2arr: array(1..2) of arr1;
	
begin
	b1rec.i  := 100;
        b2rec.field2.i  := 100;
	b1rec.ch := '$';
        b2rec.field2.ch := '$';
	write(b2rec.field2.ch, b1rec.i + b2rec.field2.i, nl);

	b1arr(2) := 200;
        b2arr(2)(3) := 200;
	b1arr(3) := 800;
        b2arr(1)(3) := 800;
	write(b1arr(three) + b2arr(1)(three) - b2arr(2)(three), nl);

	i := -2;
	j := 1;
	mix(i).ch(three).i  := 38;
	mix(j).ch(three).ch := '!';
	write(mix(-2).ch(3).i, mix(1).ch(3).ch, nl);
end.

(*
 * INPUT:
 *	none
 * OUTPUT:
 *	$ 200
 *	1400
 *	38 !
 *)