PROGRAM a_dynamic_storage_record; CONST number_of_friends = 50; TYPE full_name = RECORD first_name : STRING[12]; initial : CHAR; last_name : STRING[15]; END; date = RECORD day : BYTE; month : BYTE; year : INTEGER; END; person_id = ^person; person = RECORD name : full_name; city : STRING[15]; state : STRING[2]; zipcode : STRING[5]; birthday : date; END; VAR friend : ARRAY[1..number_of_friends] OF person_id; self,mother,father : person_id; temp : person; index : BYTE; BEGIN (* main program *) new(self); (* create the dynamic variable *) self^.name.first_name := 'Charley'; self^.name.initial := 'Z'; self^.name.last_name := 'Brown'; WITH self^ DO BEGIN city := 'Anywhere'; state := 'CA'; zipcode := '97342'; birthday.day := 17; WITH birthday DO BEGIN month := 7; year := 1938; END; END; (* all data for self now defined *) new(mother); mother := self; new(father); father^ := mother^; FOR index := 1 to number_of_friends DO BEGIN new(friend[index]); friend[index]^ := mother^; END; temp := friend[27]^; WRITE(temp.name.first_name,' '); temp := friend[33]^; WRITE(temp.name.initial,' '); temp := father^; WRITE(temp.name.last_name); WRITELN; dispose(self); { dispose(mother); } (* since mother is lost, it cannot be disposed of *) dispose(father); FOR index := 1 TO number_of_friends DO dispose(friend[index]); END. (* of main program *)