2 (***************************************************************)
\r
3 unit ecran : process(node: integer);
\r
5 unit koniec : procedure;
\r
8 unit Bold : procedure;
\r
10 write( chr(27), "[1m")
\r
13 unit Blink : procedure;
\r
15 write( chr(27), "[5m")
\r
18 unit Reverse : procedure;
\r
20 write( chr(27), "[7m")
\r
23 unit Normal : procedure;
\r
25 write( chr(27), "[0m")
\r
28 unit Underscore : procedure;
\r
30 write( chr(27), "[4m")
\r
34 unit inchar : IIuwgraph function : integer;
\r
35 (*podaj nr znaku przeslanego z klawiatury *)
\r
40 if i <> 0 then exit fi;
\r
45 unit NewPage : procedure;
\r
47 write( chr(27), "[2J")
\r
50 unit SetCursor : procedure(row, column : integer);
\r
62 write( chr(27), "[", c, d, ";", e, f, "H")
\r
64 unit pisz :procedure( co, li,kol, jak: integer);
\r
67 for i := 1 to 9000 do i :=i od;
\r
68 call SetCursor(li,kol);
\r
70 when 1 : call Normal;
\r
72 when 3 : call Reverse;
\r
73 when 4 : call Underscore;
\r
78 begin (* ecran ************************)
\r
81 call SetCursor(2,30);call Bold;
\r
82 write( "RING OF PROCESSES ");
\r
85 do accept pisz, koniec;
\r
87 call SetCursor(22,30); call Normal;
\r
88 write("KONIEC"); x := inchar;exit
\r
93 unit Pr : process(n,nr: integer, booo : boolean, next : Pr, E: ecran);
\r
94 var prive, number, x_pos,w_pos: integer;
\r
95 unit info : procedure(pp:Pr);
\r
99 unit send : procedure( x,n: integer);
\r
101 call E.pisz(x,5+2*nr+1,x_pos,1);
\r
104 prive := x;number :=n;
\r
106 unit work : procedure(output x : integer);
\r
109 call E.pisz(x,5+2*nr,w_pos,3);
\r
116 call E.pisz(nr,5+2*nr,2,2);
\r
117 (* number:= E.inchar; *)
\r
122 call next.send(prive,nr);
\r
127 if number<>nr then call next.send(0,number) fi;
\r
128 call E.pisz(0,5+2*nr,x_pos,4);
\r
129 if number=nr then call E.koniec fi;
\r
133 call next.send(prive,nr);
\r
139 var Ar_Pr: arrayof Pr, pp,q : Pr, nb_pr ,i: integer, Ek: ecran;
\r
141 begin (* main program *******************************************)
\r
144 write("Nb process = ");
\r
146 array Ar_Pr dim (1:nb_pr);
\r
148 Ek := new ecran(0);
\r
150 pp := new Pr(0,nb_pr,true,none, Ek);
\r
153 for i :=nb_pr-1 downto 1
\r
155 pp := new Pr(0,i,false,pp,Ek);
\r