diff options
Diffstat (limited to 'module/diskblocks.m')
| -rw-r--r-- | module/diskblocks.m | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/module/diskblocks.m b/module/diskblocks.m new file mode 100644 index 00000000..44af5b22 --- /dev/null +++ b/module/diskblocks.m @@ -0,0 +1,26 @@ +Diskblocks: module { + PATH: con "/dis/lib/diskblocks.dis"; + + Block: adt { + addr: big; # address on file + n: int; # size in bytes + }; + + Disk: adt { + fd: ref Sys->FD; + addr: big; # length of temp file + free: array of list of ref Block; + maxblock: int; + gran: int; + lock: chan of int; + + init: fn(fd: ref Sys->FD, gran: int, maxblock: int): ref Disk; + new: fn(d: self ref Disk, n: int): ref Block; + release: fn(d: self ref Disk, b: ref Block); + read: fn(d: self ref Disk, b: ref Block, a: array of byte, n: int): int; + write: fn(d: self ref Disk, b: ref Block, a: array of byte, n: int): ref Block; + }; + + init: fn(); + tempfile: fn(): ref Sys->FD; +}; |
