-- Package to demonstrate Private Types. WITH TEXT_IO ; USE TEXT_IO ; -- make text I/O available PACKAGE id_handler IS -- Package Types : TYPE id_number IS PRIVATE ; -- Package Functions : -- new_id => Genarate an id_number. FUNCTION new_id RETURN id_number ; -- Package Procedures : -- put => Output an id_number to the terminal. PROCEDURE put ( id : id_number ) ; PRIVATE -- hidden part -- Private Type Declarations : TYPE id_number IS ARRAY ( 1..3 ) OF INTEGER ; END id_handler ; --------------------------------------------------- PACKAGE BODY id_handler IS -- Local Variables : next_id : id_number := ( 0, 0, 0 ) ; -- zeros initially -- Generic Package Instantiations : PACKAGE int_io IS NEW INTEGER_IO ( INTEGER ) ; USE int_io ; -- Package Functions : -- new_id => Generate a value of type id_number. FUNCTION new_id RETURN id_number IS -- Local Variables : result : id_number ; -- local storage for result BEGIN -- new_id -- copy next available id into result & update next available id result := next_id ; IF next_id ( 3 ) = 9 THEN next_id ( 3 ) := 0 ; IF next_id ( 2 ) = 9 THEN next_id ( 2 ) := 0 ; IF next_id ( 1 ) = 9 THEN next_id ( 1 ) := 0 ; ELSE next_id ( 1 ) := next_id ( 1 ) + 1 ; END IF ; ELSE next_id ( 2 ) := next_id ( 2 ) + 1 ; END IF ; ELSE next_id ( 3 ) := next_id ( 3 ) + 1 ; END IF ; RETURN result ; END new_id ; ------------------------------------------------------- -- Package Procedures : -- put => Write out value of type id_number. PROCEDURE put ( id : id_number ) IS BEGIN -- put -- uses int_io put PUT ( id ( 1 ), 1 ) ; PUT ( "-" ) ; PUT ( id ( 2 ), 1 ) ; PUT ( "-" ) ; PUT ( id ( 3 ), 1 ) ; END put ; ---------------------------------------------------------- END id_handler ; ---------------------------------------------------