From 6730cc562d3a90d2d1ea98b20819cabcdb9baca8 Mon Sep 17 00:00:00 2001 From: "umbraticus@prosimetrum.com" Date: Sat, 16 Apr 2022 06:53:35 +0000 Subject: [PATCH] make = command's output plumbable This patch makes sam's = cmd output what seems to me a more useful (plumbable) format: /full/path/to/file:addr , where addr is line(s) under = and rune(s) under =#. --- sys/man/1/sam | 4 ++-- sys/src/cmd/sam/sam.c | 24 ++++++++++++++++++------ 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/sys/man/1/sam b/sys/man/1/sam index 0d9d75ab5..f107b3c79 100644 --- a/sys/man/1/sam +++ b/sys/man/1/sam @@ -403,10 +403,10 @@ Print the text in the range. Set dot. .TP .B = -Print the line address and character address of the range. +Print the file name and line address of the range. .TP .B =# -Print just the character address of the range. +Print the file name and character address of the range. .PD .SS File commands .PD 0 diff --git a/sys/src/cmd/sam/sam.c b/sys/src/cmd/sam/sam.c index d1b53c2ff..14370bdf4 100644 --- a/sys/src/cmd/sam/sam.c +++ b/sys/src/cmd/sam/sam.c @@ -688,11 +688,27 @@ nlcount(File *f, Posn p0, Posn p1) } void -printposn(File *f, int charsonly) +printposn(File *f, int chars) { Posn l1, l2; + char *s; - if(!charsonly){ + if(f->name.s[0]){ + if(f->name.s[0]!='/'){ + getcurwd(); + s = Strtoc(&curwd); + dprint("%s", s); + free(s); + } + s = Strtoc(&f->name); + dprint("%s:", s); + free(s); + } + if(chars){ + dprint("#%lud", addr.r.p1); + if(addr.r.p2 != addr.r.p1) + dprint(",#%lud", addr.r.p2); + }else{ l1 = 1+nlcount(f, (Posn)0, addr.r.p1); l2 = l1+nlcount(f, addr.r.p1, addr.r.p2); /* check if addr ends with '\n' */ @@ -701,11 +717,7 @@ printposn(File *f, int charsonly) dprint("%lud", l1); if(l2 != l1) dprint(",%lud", l2); - dprint("; "); } - dprint("#%lud", addr.r.p1); - if(addr.r.p2 != addr.r.p1) - dprint(",#%lud", addr.r.p2); dprint("\n"); }