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