xref: /inferno-os/appl/cmd/export.b (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
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