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