xref: /inferno-os/appl/cmd/wmimport.b (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
1implement Wmimport;
2
3#
4# Copyright © 2003 Vita Nuova Holdings Limited.
5#
6
7include "sys.m";
8	sys: Sys;
9include "draw.m";
10	draw: Draw;
11include "arg.m";
12include "wmlib.m";
13include "sh.m";
14
15# turn wmexport namespace into a Draw->Context.
16# usage: wmimport [-d /dev/draw] [-w /mnt/wm] cmd [arg...]
17
18Wmimport: module {
19	init: fn(nil: ref Draw->Context, argv: list of string);
20};
21
22init(nil: ref Draw->Context, argv: list of string)
23{
24	sys = load Sys Sys->PATH;
25	draw = load Draw Draw->PATH;
26	wmlib := load Wmlib Wmlib->PATH;
27	wmlib->init();
28	sh := load Sh Sh->PATH;
29	arg := load Arg Arg->PATH;
30
31	devdraw := "/dev";
32	mntwm := "/mnt/wm";
33	arg->init(argv);
34	arg->setusage("wmimport [-d /dev] [-w /mnt/wm] cmd [arg...]");
35	while((opt := arg->opt()) != 0){
36		case opt{
37		'd' =>
38			devdraw = arg->earg();
39		'w' =>
40			mntwm = arg->earg();
41		* =>
42			arg->usage();
43		}
44	}
45	argv = arg->argv();
46	if(argv == nil)
47		arg->usage();
48	arg = nil;
49	(ok, nil) := sys->stat(mntwm + "/clone");
50	if(ok == -1){
51		sys->fprint(sys->fildes(2), "wmimport: no wm at %s\n", mntwm);
52		raise "fail:no wm";
53	}
54	(ctxt, err) := wmlib->importdrawcontext(devdraw, mntwm);
55	if(ctxt == nil){
56		sys->fprint(sys->fildes(2), "wmimport: remote connect failed; %s\n", err);
57		raise "fail:error";
58	}
59
60	e := sh->run(ctxt, argv);
61	if(e != nil)
62		raise "fail:" + e;
63}
64
65