(* Chapter 12 - Program 4 *) 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 *) { Result of execution Charley Z Brown }