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