1Bufferm : module { 2 PATH : con "/dis/acme/buff.dis"; 3 4 init : fn(mods : ref Dat->Mods); 5 6 newbuffer : fn() : ref Buffer; 7 8 Buffer : adt { 9 nc : int; 10 c : ref Dat->Astring; # cache 11 cnc : int; # bytes in cache 12 cmax : int; # size of allocated cache 13 cq : int; # position of cache 14 cdirty : int; # cache needs to be written 15 cbi : int; # index of cache Block 16 bl : array of ref Dat->Block; # array of blocks 17 nbl : int; # number of blocks 18 19 insert : fn(b : self ref Buffer, n : int, s : string, m : int); 20 delete : fn(b : self ref Buffer, n : int, m : int); 21 # replace : fn(b : self ref Buffer, q0 : int, q1 : int, s : string, n : int); 22 loadx : fn(b : self ref Buffer, n : int, fd : ref Sys->FD) : int; 23 read : fn(b : self ref Buffer, n : int, s : ref Dat->Astring, p, m : int); 24 close : fn(b : self ref Buffer); 25 reset : fn(b : self ref Buffer); 26 sizecache : fn(b : self ref Buffer, n : int); 27 flush : fn(b : self ref Buffer); 28 setcache : fn(b : self ref Buffer, n : int); 29 addblock : fn(b : self ref Buffer, n : int, m : int); 30 delblock : fn(b : self ref Buffer, n : int); 31 }; 32 33 loadfile: fn(fd: ref Sys->FD, q1: int, fun: int, b: ref Bufferm->Buffer, f: ref Filem->File): int; 34}; 35