ref: f0a44de6920f4fd1102fb67be08993504b691718
dir: /sam-fullfrontalnudity/
diff -Naur a/sys/src/cmd/sam/cmd.c b/sys/src/cmd/sam/cmd.c --- a/sys/src/cmd/sam/cmd.c Sun Mar 15 22:31:10 2020 +++ b/sys/src/cmd/sam/cmd.c Tue Feb 4 05:48:08 2020 @@ -35,7 +35,7 @@ '>', 0, 0, 0, 0, aDot, 0, linex, plan9_cmd, '<', 0, 0, 0, 0, aDot, 0, linex, plan9_cmd, '|', 0, 0, 0, 0, aDot, 0, linex, plan9_cmd, - '^', 0, 0, 0, 0, aNo, 0, linex, plan9_cmd, + '^', 0, 0, 0, 0, aDot, 0, linex, plan9_cmd, '_', 0, 0, 0, 0, aDot, 0, linex, plan9_cmd, '=', 0, 0, 0, 0, aDot, 0, linex, eq_cmd, 'c'|0x100,0, 0, 0, 0, aNo, 0, wordx, cd_cmd, diff -Naur a/sys/src/cmd/sam/mesg.c b/sys/src/cmd/sam/mesg.c --- a/sys/src/cmd/sam/mesg.c Mon Apr 30 05:09:33 2012 +++ b/sys/src/cmd/sam/mesg.c Tue Feb 4 05:48:08 2020 @@ -349,6 +349,12 @@ f = whichfile(inshort()); p0 = inlong(); journaln(0, p0); + int fd = open("/dev/snarf", OREAD); + if(fd < 0) + panic("paste: open"); + bufreset(&snarfbuf); + bufload(&snarfbuf, 0, fd, &i); + close(fd); for(l=0; l<snarfbuf.nc; l+=m){ m = snarfbuf.nc-l; if(m>BLOCKSIZE) @@ -576,7 +582,9 @@ snarf(File *f, Posn p1, Posn p2, Buffer *buf, int emptyok) { Posn l; - int i; + int i, fd, n; + String *s; + char *cs; if(!emptyok && p1==p2) return; @@ -586,11 +594,23 @@ fprint(2, "bad snarf addr p1=%ld p2=%ld f->nc=%d\n", p1, p2, f->nc); /*ZZZ should never happen, can remove */ p2 = f->nc; } + fd = open("/dev/snarf", OWRITE); + if(fd < 0){ + fprint(2, "snarf: %r\n"); + return; + } for(l=p1; l<p2; l+=i){ i = p2-l>BLOCKSIZE? BLOCKSIZE : p2-l; bufread(f, l, genbuf, i); - bufinsert(buf, buf->nc, tmprstr(genbuf, i)->s, i); + s = tmprstr(genbuf, i); + cs = Strtoc(s); + n = strlen(cs); + if(write(fd, cs, n) != n) + fprint(2, "snarf: %r\n"); + free(cs); + bufinsert(buf, buf->nc, s->s, i); } + close(fd); } int diff -Naur a/sys/src/cmd/sam/shell.c b/sys/src/cmd/sam/shell.c --- a/sys/src/cmd/sam/shell.c Sun Mar 15 22:31:10 2020 +++ b/sys/src/cmd/sam/shell.c Tue Feb 4 05:48:08 2020 @@ -13,8 +13,7 @@ static void updateenv(File *f) { - static int fd = -1; - int n; + int n, fd; char buf[64], *p, *e; if(f == nil){ @@ -33,7 +32,6 @@ p = seprint(p+1, e, "%lud", f->dot.r.p1); p = seprint(p+1, e, "%lud", f->dot.r.p2); n = p - buf; - if(fd == -1) if((fd = create("/env/%dot", OWRITE, 0666)) < 0) fprint(2, "updateenv create: %r\n"); if(write(fd, buf, n) != n) diff -Naur a/sys/src/cmd/sam/xec.c b/sys/src/cmd/sam/xec.c --- a/sys/src/cmd/sam/xec.c Sun Mar 15 22:31:10 2020 +++ b/sys/src/cmd/sam/xec.c Tue Feb 4 05:48:08 2020 @@ -26,7 +26,7 @@ if(f && f->unread) load(f); if(f==0 && (cp->addr==0 || cp->addr->type!='"') && - !utfrune("bBnqUXY!^", cp->cmdc) && + !utfrune("bBnqUXY!", cp->cmdc) && cp->cmdc!=('c'|0x100) && !(cp->cmdc=='D' && cp->ctext)) error(Enofile); i = lookup(cp->cmdc);