1*46439007SCharles.ForsythDbm: module 2*46439007SCharles.Forsyth{ 3*46439007SCharles.Forsyth PATH: con "/dis/lib/dbm.dis"; 4*46439007SCharles.Forsyth 5*46439007SCharles.Forsyth Datum: type array of byte; 6*46439007SCharles.Forsyth 7*46439007SCharles.Forsyth Dbf: adt { 8*46439007SCharles.Forsyth create: fn(file: string, perm: int): ref Dbf; 9*46439007SCharles.Forsyth open: fn(file: string, flags: int): ref Dbf; 10*46439007SCharles.Forsyth 11*46439007SCharles.Forsyth fetch: fn(db: self ref Dbf, key: Datum): Datum; 12*46439007SCharles.Forsyth delete: fn(db: self ref Dbf, key: Datum): int; 13*46439007SCharles.Forsyth store: fn(db: self ref Dbf, key: Datum, dat: Datum, replace: int): int; 14*46439007SCharles.Forsyth firstkey: fn(db: self ref Dbf): Datum; 15*46439007SCharles.Forsyth nextkey: fn(db: self ref Dbf, key: Datum): Datum; 16*46439007SCharles.Forsyth 17*46439007SCharles.Forsyth flush: fn(db: self ref Dbf); 18*46439007SCharles.Forsyth 19*46439007SCharles.Forsyth isrdonly: fn(db: self ref Dbf): int; 20*46439007SCharles.Forsyth 21*46439007SCharles.Forsyth dirf: ref Sys->FD; # directory 22*46439007SCharles.Forsyth pagf: ref Sys->FD; # page 23*46439007SCharles.Forsyth flags: int; 24*46439007SCharles.Forsyth maxbno: int; # last `bno' in page file 25*46439007SCharles.Forsyth bitno: int; 26*46439007SCharles.Forsyth hmask: int; 27*46439007SCharles.Forsyth blkno: int; # current page to read/write 28*46439007SCharles.Forsyth pagbno: int; # current page in pagbuf 29*46439007SCharles.Forsyth pagbuf: array of byte; # [PBLKSIZ] 30*46439007SCharles.Forsyth dirbno: int; # current block in dirbuf 31*46439007SCharles.Forsyth dirbuf: array of byte; # [DBLKSIZ] 32*46439007SCharles.Forsyth }; 33*46439007SCharles.Forsyth 34*46439007SCharles.Forsyth init: fn(); 35*46439007SCharles.Forsyth}; 36