with TEXT_IO; use TEXT_IO; procedure SHOPPING is type FOOD_STUFF is (SALAD, WINE, MEAT, SNICKERS); SS,WW,MM:FOOD_STUFF:=SNICKERS; task GET_SALAD is entry PAY(M:in INTEGER); entry COLLECT(S: out FOOD_STUFF); end GET_SALAD; task body GET_SALAD is CASH: INTEGER; FOOD: FOOD_STUFF; begin accept PAY(M: in INTEGER) do CASH:=M; end PAY; PUT_LINE("Bought salad...for $"&INTEGER'IMAGE(CASH)); -- instead of M accept COLLECT(S:out FOOD_STUFF) do S:=SALAD; end COLLECT; end GET_SALAD; task GET_WINE is entry PAY(M:in INTEGER); entry COLLECT(S:out FOOD_STUFF); end GET_WINE; task body GET_WINE is CASH: INTEGER; FOOD: FOOD_STUFF; begin accept PAY(M: in INTEGER) do CASH:=M; end PAY; PUT_LINE("Bought wine...for $"&INTEGER'IMAGE(CASH)); -- instead of M accept COLLECT(S: out FOOD_STUFF) do S:=WINE; end COLLECT; end GET_WINE; task GET_MEAT is entry PAY(M:in INTEGER); entry COLLECT(S: out FOOD_STUFF); end GET_MEAT; task body GET_MEAT is CASH: INTEGER; FOOD: FOOD_STUFF; begin accept PAY(M: in INTEGER) do CASH:=M; end PAY; PUT_LINE("Bought meat...for $"&INTEGER'IMAGE(CASH)); -- instead of M accept COLLECT(S:out FOOD_STUFF) do S:=MEAT; end COLLECT; end GET_MEAT; begin PUT_LINE("going shopping"); GET_SALAD.PAY(50); GET_WINE.PAY(100); GET_MEAT.PAY(200); GET_SALAD.COLLECT(SS); put_line("Took delivery of "&food_stuff'image(ss)); GET_WINE.COLLECT(WW); put_line("Took delivery of "&food_stuff'image(ww)); GET_MEAT.COLLECT(MM); put_line("Took delivery of "&food_stuff'image(mm)); PUT_LINE("finished shopping"); end;