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