1*46439007SCharles.ForsythDiskblocks: module { 2*46439007SCharles.Forsyth PATH: con "/dis/lib/diskblocks.dis"; 3*46439007SCharles.Forsyth 4*46439007SCharles.Forsyth Block: adt { 5*46439007SCharles.Forsyth addr: big; # address on file 6*46439007SCharles.Forsyth n: int; # size in bytes 7*46439007SCharles.Forsyth }; 8*46439007SCharles.Forsyth 9*46439007SCharles.Forsyth Disk: adt { 10*46439007SCharles.Forsyth fd: ref Sys->FD; 11*46439007SCharles.Forsyth addr: big; # length of temp file 12*46439007SCharles.Forsyth free: array of list of ref Block; 13*46439007SCharles.Forsyth maxblock: int; 14*46439007SCharles.Forsyth gran: int; 15*46439007SCharles.Forsyth lock: chan of int; 16*46439007SCharles.Forsyth 17*46439007SCharles.Forsyth init: fn(fd: ref Sys->FD, gran: int, maxblock: int): ref Disk; 18*46439007SCharles.Forsyth new: fn(d: self ref Disk, n: int): ref Block; 19*46439007SCharles.Forsyth release: fn(d: self ref Disk, b: ref Block); 20*46439007SCharles.Forsyth read: fn(d: self ref Disk, b: ref Block, a: array of byte, n: int): int; 21*46439007SCharles.Forsyth write: fn(d: self ref Disk, b: ref Block, a: array of byte, n: int): ref Block; 22*46439007SCharles.Forsyth }; 23*46439007SCharles.Forsyth 24*46439007SCharles.Forsyth init: fn(); 25*46439007SCharles.Forsyth tempfile: fn(): ref Sys->FD; 26*46439007SCharles.Forsyth}; 27