95 lines
1.7 KiB
Brainfuck
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);
|
|
}
|
|
|
|
|