dddb/appl/cmd/dddb.b

95 lines
1.7 KiB
Brainfuck

implement Dddb;
include "sys.m";
sys: Sys;
include "arg.m";
include "draw.m";
include "string.m";
strm: String;
include "config.b";
include "ctlfs.b";
stderr: ref Sys->FD;
debug: int;
error(s: string)
{
sys->fprint(stderr, "dddb: %s\n", s);
raise "dddb:error";
}
Dddb: module {
init: fn(nil: ref Draw->Context, args: list of string);
run_fs: fn(cfg: Config);
Config: adt {
name: string;
sysn: string;
addr: string;
storage: string;
fswrks: int;
nodes: list of NodeConfig;
open: fn(nodename: string, path: string): Config;
};
NodeConfig: adt {
name: string;
sysn: string;
addr: string;
storage: string;
fswrks: int;
new: fn(entry: ref Dbentry): NodeConfig;
};
};
init(nil: ref Draw->Context, args: list of string)
{
sys = load Sys Sys->PATH;
arg := load Arg Arg->PATH;
strm = load String String->PATH;
stderr = sys->fildes(2);
cfgpath: string = "";
arg->init(args);
arg->setusage(arg->progname()+ " [-d] [-c config] nodename");
while((c := arg->opt()) != 0)
case c {
'd' => debug++;
'c' =>
cfgpath = arg->earg();
* =>
sys->fprint(sys->fildes(2), "bad option: -%c\n", c);
arg->usage();
}
args = arg->argv();
nodename := hd args;
if(nodename == nil) {
sys->fprint(stderr, "dddb: no nodename supplied\n");
arg->usage();
}
if(debug)
sys->fprint(stderr, "dddb: opening config file\n");
cfg := Config.open(nodename, cfgpath);
if(debug) {
sys->fprint(stderr, "dddb: database parms:\n");
sys->fprint(stderr, "cfg.name: %s\n", cfg.name);
sys->fprint(stderr, "cfg.sysn: %s\n", cfg.sysn);
sys->fprint(stderr, "cfg.storage: %s\n", cfg.storage);
sys->fprint(stderr, "cfg.fswrks: %d\n", cfg.fswrks);
}
run_fs(cfg);
}