diff options
Diffstat (limited to 'appl/cmd/wmimport.b')
| -rw-r--r-- | appl/cmd/wmimport.b | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/appl/cmd/wmimport.b b/appl/cmd/wmimport.b new file mode 100644 index 00000000..2a0d3f3b --- /dev/null +++ b/appl/cmd/wmimport.b @@ -0,0 +1,64 @@ +implement Wmimport; + +# +# Copyright © 2003 Vita Nuova Holdings Limited. +# + +include "sys.m"; + sys: Sys; +include "draw.m"; + draw: Draw; +include "arg.m"; +include "wmlib.m"; +include "sh.m"; + +# turn wmexport namespace into a Draw->Context. +# usage: wmimport [-d /dev/draw] [-w /mnt/wm] cmd [arg...] + +Wmimport: module { + init: fn(nil: ref Draw->Context, argv: list of string); +}; + +init(nil: ref Draw->Context, argv: list of string) +{ + sys = load Sys Sys->PATH; + draw = load Draw Draw->PATH; + wmlib := load Wmlib Wmlib->PATH; + wmlib->init(); + sh := load Sh Sh->PATH; + arg := load Arg Arg->PATH; + + devdraw := "/dev"; + mntwm := "/mnt/wm"; + arg->init(argv); + arg->setusage("wmimport [-d /dev] [-w /mnt/wm] cmd [arg...]"); + while((opt := arg->opt()) != 0){ + case opt{ + 'd' => + devdraw = arg->earg(); + 'w' => + mntwm = arg->earg(); + * => + arg->usage(); + } + } + argv = arg->argv(); + if(argv == nil) + arg->usage(); + arg = nil; + (ok, nil) := sys->stat(mntwm + "/clone"); + if(ok == -1){ + sys->fprint(sys->fildes(2), "wmimport: no wm at %s\n", mntwm); + raise "fail:no wm"; + } + (ctxt, err) := wmlib->importdrawcontext(devdraw, mntwm); + if(ctxt == nil){ + sys->fprint(sys->fildes(2), "wmimport: remote connect failed; %s\n", err); + raise "fail:error"; + } + + e := sh->run(ctxt, argv); + if(e != nil) + raise "fail:" + e; +} + |
