ref: 27f36483d44a1f9fcf9a3ffefe688a0f12ace466
parent: 50791b875552b0dc5748aa67c95776736f6ff4b7
author: Sigrid <[email protected]>
date: Mon Mar 9 09:21:50 EDT 2020
sam: add $%dot (thanks kvik)
--- a/sys/src/cmd/sam/sam.h
+++ b/sys/src/cmd/sam/sam.h
@@ -400,3 +400,5 @@
void outTsv(Hmesg, int, vlong);
void outflush(void);
int needoutflush(void);
+
+Posn nlcount(File *f, Posn p0, Posn p1);
--- a/sys/src/cmd/sam/shell.c
+++ b/sys/src/cmd/sam/shell.c
@@ -10,6 +10,36 @@
Buffer cmdbuf;
int cmdbufpos;
+static void
+updateenv(File *f)
+{
+ static int fd = -1;
+ int n;
+ char buf[64], *p, *e;
+
+ if(f == nil){
+ putenv("%", "");
+ putenv("%dot", "");
+ return;
+ }
+
+ p = Strtoc(&f->name);
+ putenv("%", p);
+ free(p);
+
+ p = buf;
+ e = buf+sizeof(buf);
+ p = seprint(p, e, "%lud", 1+nlcount(f, 0, f->dot.r.p1));
+ 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)
+ fprint(2, "updateenv write: %r\n");
+}
+
int
plan9(File *f, int type, String *s, int nest)
{
@@ -93,7 +123,7 @@
close(0); /* so it won't read from terminal */
open("/dev/null", 0);
}
- putenv("%", f == nil ? "" : Strtoc(&f->name));
+ updateenv(f);
execl(SHPATH, SH, "-c", Strtoc(&plan9cmd), nil);
exits("exec");
}