ref: d606d83ed85953a761f7e08ff3f18459d7b29c34
parent: 78953b41e400ecc9854c0d66acc48380f1482d7c
author: umbraticus@prosimetrum.com <umbraticus@prosimetrum.com>
date: Sat Apr 16 02:53:35 EDT 2022
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 =#.
--- a/sys/man/1/sam
+++ b/sys/man/1/sam
@@ -403,10 +403,10 @@
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
--- a/sys/src/cmd/sam/sam.c
+++ b/sys/src/cmd/sam/sam.c
@@ -688,11 +688,27 @@
}
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 @@
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");
}