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