--  Store all employees into an array, and print them
--  This version has an error

with ada.text_io; use ada.text_io; 
with ada.float_text_io; use ada.float_text_io; 
 
procedure emp2a  is 
   type Employee is record
      Name: String(1 .. 20);
      ID: String(1 .. 6);
      Salary: Float;
   end record;

   type Emp_Array is array(1 .. 10) of Employee;

   --  Input the employees
   procedure get_emps(emps: out Emp_Array) is
      e_tmp: Employee;
      num_emps: Natural := 0;
   begin
      while not end_of_file loop
         num_emps := num_emps + 1;

         get(e_tmp.Name);
         get(e_tmp.ID);
         get(e_tmp.salary);

         emps(num_emps) := e_tmp;
      end loop;
   end get_emps;

   --  Print the array
   procedure put_emps(emps: in Emp_Array) is
      e_tmp: Employee;
   begin
      --  Error: Prints entire array, including non-existent employees
      --  Need to pass num_emps from get_emps, to main, to put_emps
      for i in 1 .. emps'last loop  
         e_tmp := emps(i);
         put(e_tmp.Name);
         put(e_tmp.ID);
         put(e_tmp.salary, 7, 2, 0);
         new_line;
      end loop;
   end put_emps;

   the_emps: Emp_Array;

begin
   get_emps(the_emps);
   put_emps(the_emps);

end emp2a;