-- Chapter 29 - Program 6 with Ada.Text_IO, Ada.Integer_Text_IO; use Ada.Text_IO, Ada.Integer_Text_IO; procedure Family is type SPEED is (FAST, MEDIUM, SLOW); task Selector is entry Answer_Query(SPEED)(Counter : INTEGER); end Selector; procedure Output_Value(Counter : INTEGER) is begin Put(Counter, 3); New_Line; end Output_Value; task body Selector is begin loop select accept Answer_Query(FAST)(Counter : INTEGER) do Put("FAST Query made"); Output_Value(Counter); end; or when Answer_Query(FAST)'COUNT = 0 => accept Answer_Query(MEDIUM)(Counter : INTEGER) do Put("MEDIUM Query made"); Output_Value(Counter); end; or when Answer_Query(FAST)'COUNT = 0 and Answer_Query(MEDIUM)'COUNT = 0 => accept Answer_Query(SLOW)(Counter : INTEGER) do Put("SLOW Query made"); Output_Value(Counter); end; or terminate; end select; end loop; end Selector; begin Put_Line("Begin the main program"); Selector.Answer_Query(FAST)(1); Selector.Answer_Query(FAST)(2); Selector.Answer_Query(SLOW)(3); Selector.Answer_Query(MEDIUM)(4); Selector.Answer_Query(SLOW)(5); Selector.Answer_Query(MEDIUM)(6); Selector.Answer_Query(FAST)(7); Selector.Answer_Query(FAST)(8); Put_Line("End of the main program"); end Family; -- Result of Execution -- Begin the main program -- FAST Query made 1 -- FAST Query made 2 -- SLOW Query made 3 -- MEDIUM Query made 4 -- SLOW Query made 5 -- MEDIUM Query made 6 -- FAST Query made 7 -- FAST Query made 8 -- End of main program