1# 2# export current name space on a connection 3# 4 5implement Export; 6 7include "sys.m"; 8 sys: Sys; 9include "draw.m"; 10 11Export: module 12{ 13 init: fn(nil: ref Draw->Context, argv: list of string); 14}; 15 16usage() 17{ 18 sys->fprint(stderr(), "Usage: export [-a] dir [connection]\n"); 19 raise "fail:usage"; 20} 21 22init(nil: ref Draw->Context, argv: list of string) 23{ 24 # usage: export dir [connection] 25 sys = load Sys Sys->PATH; 26 if(argv != nil) 27 argv = tl argv; 28 flag := Sys->EXPWAIT; 29 for(; argv != nil && len hd argv && (hd argv)[0] == '-'; argv = tl argv) 30 for(i := 1; i < len hd argv; i++) 31 case (hd argv)[i] { 32 'a' => 33 flag = Sys->EXPASYNC; 34 * => 35 usage(); 36 } 37 n := len argv; 38 if (n < 1 || n > 2) 39 usage(); 40 fd: ref Sys->FD; 41 if (n == 2) { 42 if ((fd = sys->open(hd tl argv, Sys->ORDWR)) == nil) { 43 sys->fprint(stderr(), "export: can't open %s: %r\n", hd tl argv); 44 raise "fail:open"; 45 } 46 } else 47 fd = sys->fildes(0); 48 if (sys->export(fd, hd argv, flag) < 0) { 49 sys->fprint(stderr(), "export: can't export: %r\n"); 50 raise "fail:export"; 51 } 52} 53 54stderr(): ref Sys->FD 55{ 56 return sys->fildes(2); 57} 58