shithub: dddb

ref: aee91c4ed0277e343a62cd124ee7175f54ffefb3
dir: /appl/cmd/dddb.b/

View raw version
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);
}