1*37da2899SCharles.Forsyth# To be removed... 2*37da2899SCharles.Forsyth# functionality has been moved to appl/cmd/memfs.b 3*37da2899SCharles.Forsyth# some progs still refer to lib/memfs so it remains for the time being 4*37da2899SCharles.Forsyth 5*37da2899SCharles.Forsythimplement MemFS; 6*37da2899SCharles.Forsyth 7*37da2899SCharles.Forsythinclude "sys.m"; 8*37da2899SCharles.Forsyth sys: Sys; 9*37da2899SCharles.Forsythinclude "draw.m"; 10*37da2899SCharles.Forsythinclude "memfs.m"; 11*37da2899SCharles.Forsyth 12*37da2899SCharles.ForsythCmd: module { 13*37da2899SCharles.Forsyth PATH: con "/dis/memfs.dis"; 14*37da2899SCharles.Forsyth init: fn(ctxt: ref Draw->Context, argv: list of string); 15*37da2899SCharles.Forsyth}; 16*37da2899SCharles.Forsyth 17*37da2899SCharles.Forsythcmd: Cmd; 18*37da2899SCharles.Forsyth 19*37da2899SCharles.Forsythinit(): string 20*37da2899SCharles.Forsyth{ 21*37da2899SCharles.Forsyth sys = load Sys Sys->PATH; 22*37da2899SCharles.Forsyth cmd = load Cmd Cmd->PATH; 23*37da2899SCharles.Forsyth if (cmd == nil) 24*37da2899SCharles.Forsyth return sys->sprint("lib/memfs cannot load %s: %r\n", Cmd->PATH); 25*37da2899SCharles.Forsyth return nil; 26*37da2899SCharles.Forsyth} 27*37da2899SCharles.Forsyth 28*37da2899SCharles.Forsythnewfs(maxsz: int): ref Sys->FD 29*37da2899SCharles.Forsyth{ 30*37da2899SCharles.Forsyth p := array [2] of ref Sys->FD; 31*37da2899SCharles.Forsyth if (sys->pipe(p) == -1) 32*37da2899SCharles.Forsyth return nil; 33*37da2899SCharles.Forsyth sync := chan of int; 34*37da2899SCharles.Forsyth spawn run(p[1].fd, maxsz, sync); 35*37da2899SCharles.Forsyth <- sync; 36*37da2899SCharles.Forsyth return p[0]; 37*37da2899SCharles.Forsyth} 38*37da2899SCharles.Forsyth 39*37da2899SCharles.Forsythrun(fd: int, sz: int, sync: chan of int) 40*37da2899SCharles.Forsyth{ 41*37da2899SCharles.Forsyth sys->pctl(Sys->FORKFD, nil); 42*37da2899SCharles.Forsyth sys->dup(fd, 0); 43*37da2899SCharles.Forsyth sys->pctl(Sys->NEWFD, 0::1::2::nil); 44*37da2899SCharles.Forsyth sync <-= 1; 45*37da2899SCharles.Forsyth cmd->init(nil, Cmd->PATH :: "-s" :: "-m" :: string sz :: nil); 46*37da2899SCharles.Forsyth} 47