xref: /inferno-os/appl/cmd/dbm/fetch.b (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
1*37da2899SCharles.Forsythimplement Dbmfetch;
2*37da2899SCharles.Forsyth
3*37da2899SCharles.Forsythinclude "sys.m";
4*37da2899SCharles.Forsyth	sys: Sys;
5*37da2899SCharles.Forsyth
6*37da2899SCharles.Forsythinclude "draw.m";
7*37da2899SCharles.Forsyth
8*37da2899SCharles.Forsythinclude "dbm.m";
9*37da2899SCharles.Forsyth	dbm: Dbm;
10*37da2899SCharles.Forsyth	Datum, Dbf: import dbm;
11*37da2899SCharles.Forsyth
12*37da2899SCharles.ForsythDbmfetch: module
13*37da2899SCharles.Forsyth{
14*37da2899SCharles.Forsyth	init: fn(nil: ref Draw->Context, args: list of string);
15*37da2899SCharles.Forsyth};
16*37da2899SCharles.Forsyth
17*37da2899SCharles.Forsythinit(nil: ref Draw->Context, args: list of string)
18*37da2899SCharles.Forsyth{
19*37da2899SCharles.Forsyth	sys = load Sys Sys->PATH;
20*37da2899SCharles.Forsyth	dbm = load Dbm Dbm->PATH;
21*37da2899SCharles.Forsyth
22*37da2899SCharles.Forsyth	dbm->init();
23*37da2899SCharles.Forsyth
24*37da2899SCharles.Forsyth	args = tl args;
25*37da2899SCharles.Forsyth	db := Dbf.open(hd args, Sys->OREAD);
26*37da2899SCharles.Forsyth	if(db == nil){
27*37da2899SCharles.Forsyth		sys->fprint(sys->fildes(2), "dbm/fetch: %s: %r\n", hd args);
28*37da2899SCharles.Forsyth		raise "fail:open";
29*37da2899SCharles.Forsyth	}
30*37da2899SCharles.Forsyth	args = tl args;
31*37da2899SCharles.Forsyth	key := hd args;
32*37da2899SCharles.Forsyth	data := db.fetch(array of byte key);
33*37da2899SCharles.Forsyth	if(data == nil)
34*37da2899SCharles.Forsyth		sys->fprint(sys->fildes(2), "not found\n");
35*37da2899SCharles.Forsyth	else
36*37da2899SCharles.Forsyth		sys->write(sys->fildes(1), data, len data);
37*37da2899SCharles.Forsyth}
38