Looking at tb's diff I fell in the trap of looking at other parts of the
code. Now he's conning me into writing diffs...
So here's the first one:
- When -b is set, but followed by -w it doesn't remove the boring flag
and the -w is interpreted as a -b string
- -c is defined as "This is an abbreviation for -w %c.", but adding a
-w option itself results in:
$ jot -cw"bla " 5 97
bla a
bla b
bla c
bla d
bla e
instead of
$ jot -w"bla " 5 97
bla 97
bla 98
bla 99
bla 100
bla 101
- -b always overwrites -c.
tb already agrees that these options should be mutually exlusive, so
here's the accompanying code. I choose to go for the last option wins
appraoch, similar to ls, df, du, ...
Regress seems to pass.
OK?
martijn@
Index: jot.1
===================================================================
RCS file: /cvs/src/usr.bin/jot/jot.1,v
retrieving revision 1.23
diff -u -p -r1.23 jot.1
--- jot.1 12 Aug 2016 21:49:31 -0000 1.23
+++ jot.1 13 Aug 2021 06:50:42 -0000
@@ -101,6 +101,15 @@ conversion specification inside
in which case the data is inserted rather than appended.
.El
.Pp
+It is not an error to specify more than one of
+the mutually exclusive options
+.Fl b ,
+.Fl c
+and
+.Fl w .
+Where more than one of these options is specified,
+the last option given overrides the others.
+.Pp
The last four arguments specify the length of the output sequence,
its start and end points, and the step size.
Any three of these arguments determine the fourth.
Index: jot.c
===================================================================
RCS file: /cvs/src/usr.bin/jot/jot.c,v
retrieving revision 1.51
diff -u -p -r1.51 jot.c
--- jot.c 30 Jul 2021 02:47:37 -0000 1.51
+++ jot.c 13 Aug 2021 06:50:42 -0000
@@ -86,6 +86,7 @@ main(int argc, char *argv[])
int n = 0;
int ch;
const char *errstr;
+ bool word;
if (pledge("stdio", NULL) == -1)
err(1, "pledge");
@@ -94,10 +95,13 @@ main(int argc, char *argv[])
switch (ch) {
case 'b':
boring = true;
+ chardata = word = false;
format = optarg;
break;
case 'c':
chardata = true;
+ boring = word = false;
+ format = "";
break;
case 'n':
finalnl = false;
@@ -115,6 +119,8 @@ main(int argc, char *argv[])
sepstring = optarg;
break;
case 'w':
+ word = true;
+ boring = chardata = false;
format = optarg;
break;
default: