Sekvan paĝon! Antaŭan paĝon! Indekson! Instrukcion!

La dormema frizisto en MODULA

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.


Sekvan paĝon Indekson Instrukcion