-- type declarations for records type names is record fname : string (1..30); sname : string (1..30); end record; type addresses is record name : names; phone : string (1..10); end record; -- file I/O: sequential file of addresses records package address_io is new SEQUENTIAL_IO (addresses); -- procedure to create a new sequential file of addresses procedure make_new_file (a_file : in out address_io.FILE_TYPE) is an_address : addresses; -- storage for 1 address any_more : CHARACTER := 'Y'; -- loop control slength : NATURAL; -- string length begin -- create the new file CREATE (a_file, OUT_FILE, "address.dat"); while ((any_more = 'Y') or (any_more = 'y')) loop -- obtain the data as text PUT ("Enter first name "); GET_LINE (an_address.name.fname, slength); PUT ("Enter second name "); GET_LINE (an_address.name.sname, slength); PUT ("Enter phone number "); GET_LINE (an_address.phone, slength); -- write the record to the file WRITE (a_file, an_address); -- continue? PUT ("Any more (y/n) ? "); GET (any_more); SKIP_LINE; end loop; CLOSE (a_file); end make_new_file; -- procedure to display a sequential file of addresses procedure show_file (a_file : in out address_io.FILE_TYPE) is an_address : addresses; -- storage for 1 address begin -- create the new file OPEN (a_file, IN_FILE, "address.dat"); while (not END_OF_FILE (a_file)) loop -- read the record from the file READ (a_file, an_address); -- display the data as text PUT (an_address.name.fname & ' '); PUT (an_address.name.sname & ' '); PUT (an_address.phone); NEW_LINE; end loop; CLOSE (a_file); end show_file;