xref: /inferno-os/module/diskblocks.m (revision 46439007cf417cbd9ac8049bb4122c890097a0fa)
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