xref: /inferno-os/appl/cmd/fs/print.b (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
1*37da2899SCharles.Forsythimplement Fsmodule;
2*37da2899SCharles.Forsythinclude "sys.m";
3*37da2899SCharles.Forsyth	sys: Sys;
4*37da2899SCharles.Forsythinclude "draw.m";
5*37da2899SCharles.Forsythinclude "sh.m";
6*37da2899SCharles.Forsythinclude "fslib.m";
7*37da2899SCharles.Forsyth	fslib: Fslib;
8*37da2899SCharles.Forsyth	Report, Value, type2s, quit: import fslib;
9*37da2899SCharles.Forsyth	Fschan, Fsdata, Entrychan, Entry,
10*37da2899SCharles.Forsyth	Gatechan, Gatequery, Nilentry, Option,
11*37da2899SCharles.Forsyth	Next, Down, Skip, Quit: import Fslib;
12*37da2899SCharles.Forsyth
13*37da2899SCharles.Forsythtypes(): string
14*37da2899SCharles.Forsyth{
15*37da2899SCharles.Forsyth	return "vt";
16*37da2899SCharles.Forsyth}
17*37da2899SCharles.Forsyth
18*37da2899SCharles.Forsythbadmod(p: string)
19*37da2899SCharles.Forsyth{
20*37da2899SCharles.Forsyth	sys->fprint(sys->fildes(2), "fs: size: cannot load %s: %r\n", p);
21*37da2899SCharles.Forsyth	raise "fail:bad module";
22*37da2899SCharles.Forsyth}
23*37da2899SCharles.Forsyth
24*37da2899SCharles.Forsythinit()
25*37da2899SCharles.Forsyth{
26*37da2899SCharles.Forsyth	sys = load Sys Sys->PATH;
27*37da2899SCharles.Forsyth	fslib = load Fslib Fslib->PATH;
28*37da2899SCharles.Forsyth	if(fslib == nil)
29*37da2899SCharles.Forsyth		badmod(Fslib->PATH);
30*37da2899SCharles.Forsyth}
31*37da2899SCharles.Forsyth
32*37da2899SCharles.Forsythrun(nil: ref Draw->Context, report: ref Report,
33*37da2899SCharles.Forsyth			nil: list of Option, args: list of ref Value): ref Value
34*37da2899SCharles.Forsyth{
35*37da2899SCharles.Forsyth	sync := chan of int;
36*37da2899SCharles.Forsyth	spawn printproc(sync, (hd args).t().i, report.start("print"));
37*37da2899SCharles.Forsyth	return ref Value.V(sync);
38*37da2899SCharles.Forsyth}
39*37da2899SCharles.Forsyth
40*37da2899SCharles.Forsythprintproc(sync: chan of int, c: Entrychan, errorc: chan of string)
41*37da2899SCharles.Forsyth{
42*37da2899SCharles.Forsyth	if(<-sync == 0){
43*37da2899SCharles.Forsyth		c.sync <-= 0;
44*37da2899SCharles.Forsyth		quit(errorc);
45*37da2899SCharles.Forsyth		exit;
46*37da2899SCharles.Forsyth	}
47*37da2899SCharles.Forsyth	c.sync <-= 1;
48*37da2899SCharles.Forsyth	while(((d, p, nil) := <-c.c).t0 != nil)
49*37da2899SCharles.Forsyth		sys->print("%s\n", p);
50*37da2899SCharles.Forsyth	quit(errorc);
51*37da2899SCharles.Forsyth}
52