diff options
Diffstat (limited to 'src/cmd/acme')
-rw-r--r-- | src/cmd/acme/look.c | 56 | ||||
-rw-r--r-- | src/cmd/acme/mkfile | 4 |
2 files changed, 44 insertions, 16 deletions
diff --git a/src/cmd/acme/look.c b/src/cmd/acme/look.c index a048a353..e8f926f5 100644 --- a/src/cmd/acme/look.c +++ b/src/cmd/acme/look.c @@ -21,32 +21,60 @@ Window* openfile(Text*, Expand*, int); int nuntitled; void -plumbproc(void *v) +plumbthread(void *v) { + CFid *fid; Plumbmsg *m; + Timer *t; USED(v); threadsetname("plumbproc"); + + /* + * Loop so that if plumber is restarted, acme need not be. + */ for(;;){ - m = plumbrecvfid(plumbeditfid); - if(m == nil) - threadexits(nil); - sendp(cplumb, m); + /* + * Connect to plumber. + */ + plumbunmount(); + while((fid = plumbopenfid("edit", OREAD|OCEXEC)) == nil){ + t = timerstart(2000); + recv(t->c, nil); + timerstop(t); + } + plumbeditfid = fid; + plumbsendfid = plumbopenfid("send", OWRITE|OCEXEC); + + /* + * Relay messages. + */ + for(;;){ + m = plumbrecvfid(plumbeditfid); + if(m == nil) + break; + sendp(cplumb, m); + } + + /* + * Lost connection. + */ + fid = plumbsendfid; + plumbsendfid = nil; + fsclose(fid); + + fid = plumbeditfid; + plumbeditfid = nil; + fsclose(fid); } } void startplumbing(void) { - plumbeditfid = plumbopenfid("edit", OREAD|OCEXEC); - if(plumbeditfid == nil) - fprint(2, "acme: can't initialize plumber: %r\n"); - else{ - cplumb = chancreate(sizeof(Plumbmsg*), 0); - chansetname(cplumb, "cplumb"); - threadcreate(plumbproc, nil, STACK); - } - plumbsendfid = plumbopenfid("send", OWRITE|OCEXEC); + cplumb = chancreate(sizeof(Plumbmsg*), 0); + chansetname(cplumb, "cplumb"); + threadcreate(plumbthread, nil, STACK); } diff --git a/src/cmd/acme/mkfile b/src/cmd/acme/mkfile index f4a902be..47ff8d6e 100644 --- a/src/cmd/acme/mkfile +++ b/src/cmd/acme/mkfile @@ -1,7 +1,7 @@ <$PLAN9/src/mkhdr TARG=acme -# DIRS=mail +DIRS=mail OFILES=\ acme.$O\ @@ -30,6 +30,6 @@ HFILES=dat.h\ fns.h\ <$PLAN9/src/mkone -# <$PLAN9/src/mkdirs +<$PLAN9/src/mkdirs edit.$O ecmd.$O elog.$O: edit.h |