


MODULO Bufro[1];
EKSPORTO deponu, elprenu;
IMPORTO atendu, evento, okazigu, pretigu, subtipo;
KONST lon = 256; (* la bufrolongo *)
VAR n: [0 .. lon]; (* la nombro de deponitaj datumoj *)
neplena, nemalplena: evento;
al, de: [0 .. lon - 1]; (* la pozicimontriloj *)
buf: TABELO [0 .. lon - 1] EL subtipo;
PROCEDURO deponu(x: subtipo);
STARTO
n := n + 1;
SE n › lon TIAM atendu(neplena) FINO;
buf[en] := x;
en := (en + 1) MOD lon;
SE n ≤ 0 TIAM okazigu(nemalplena) FINO;
FINO deponu;
PROCEDURO elprenu(VAR x:subtipo);
STARTO
n := n - 1;
SE n < 0 TIAM atendu(nemalplena) FINO;
x := buf[de];
de := (de + 1) MOD lon;
SE n ≥ lon TIAM okazigu(neplena) FINO;
FINO elprenu;
STARTO (* la komencvalorizoj: *)
n:=0; en:=0; de:=0;
pretigu(neplena); pretigu(nemalplena);
FINO Bufro.