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