with text_io; use text_io; procedure Kocsma2 is type Ital is ( sor, bor, palinka ); task Kocsmaros is entry Tolt( mit: in Ital ); end Kocsmaros; task Ajto is entry Belep; entry Kilep; end Ajto; task type Reszeg; reszegek: array (1..5) of Reszeg; task type Egyetemista is entry Nevadas( nev: in string := ""); end Egyetemista; egyetemistak: array (1..3) of Egyetemista; type PEgyetemista is access Egyetemista; egyEgyetemista: PEgyetemista; task body Kocsmaros is toltido: constant array (Ital) of duration := (1.0,0.1,0.2); zaras_varas: constant duration := 5.0; begin loop select accept Tolt( mit: in Ital ) do Put_Line(Ital'IMAGE(mit)&"-t töltök"); delay toltido(mit); end Tolt; or delay zaras_varas; exit; end select; end loop; end Kocsmaros; task body Ajto is benn: NATURAL := 0; begin loop select accept Kilep; benn := benn-1; or when benn < 5 => accept Belep; benn := benn+1; or terminate; end select; end loop; end Ajto; task body Reszeg is ivasido: constant array (Ital) of duration := (2.0,1.0,0.2); idofaktor: positive := 1; begin loop select Ajto.Belep; Kocsmaros.Tolt(palinka); delay ivasido(palinka); Kocsmaros.Tolt(bor); delay ivasido(bor); loop Kocsmaros.Tolt(sor); delay ivasido(sor)*idofaktor; idofaktor := idofaktor+1; end loop; else Put_Line("Hat akkor alszom egyet a parkban..."); delay 5.0; end select; end loop; exception when tasking_error => -- elment mar a Kocsmaros Put_Line("Bezart?"); Ajto.Kilep; end Reszeg; task body Egyetemista is type PString is access string; nevem: PString; begin accept Nevadas( nev: in string := "" ) do nevem := new string'(nev); end; select Ajto.Belep; Kocsmaros.Tolt(bor); Put_Line(nevem.all&" iszik"); delay 3.0; Ajto.Kilep; or delay 1.0; Put_Line(nevem.all & ": Akkor inkabb anal eloadasra megyek..."); end select; end Egyetemista; begin for i in egyetemistak'range loop egyetemistak(i).Nevadas; end loop; delay 2.0; egyEgyetemista := new Egyetemista; egyEgyetemista.Nevadas("Jancsi"); delay 5.0; egyEgyetemista := new Egyetemista; egyEgyetemista.Nevadas("Juliska"); end Kocsma2;