To quote schwarze in the jot mutually exclusive thread: On Fri, 2021-08-13 at 11:48 +0200, Ingo Schwarze wrote: > In this case, even though this is not a POSIX command, POSIX utility > convention 12.2.11 is pertinent: > > The order of different options relative to one another should not > matter, unless the options are documented as mutually-exclusive > and such an option is documented to override any incompatible > options preceding it. If an option that has option-arguments is > repeated, the option and option-argument combinations should be > interpreted in the order specified on the command line.
This is also violated by cal(1) (and maybe others, but this one came up first). Diff below should fix this. OK? martijn@ Index: cal.1 =================================================================== RCS file: /cvs/src/usr.bin/cal/cal.1,v retrieving revision 1.31 diff -u -p -r1.31 cal.1 --- cal.1 27 Nov 2016 10:37:22 -0000 1.31 +++ cal.1 15 Aug 2021 21:39:28 -0000 @@ -53,11 +53,8 @@ The options are as follows: .Bl -tag -width Ds .It Fl j Display Julian dates (days one-based, numbered from January 1). -The options -.Fl j -and -.Fl w -are mutually exclusive. +Overrides earlier +.Fl w . .It Fl m Display weeks starting on Monday instead of Sunday. .It Fl w @@ -65,11 +62,8 @@ Display week numbers in the month displa If .Fl m is specified the ISO week format is assumed. -The options -.Fl j -and -.Fl w -are mutually exclusive. +Overrides earlier +.Fl j . .It Fl y Display a calendar for the current year. .El Index: cal.c =================================================================== RCS file: /cvs/src/usr.bin/cal/cal.c,v retrieving revision 1.30 diff -u -p -r1.30 cal.c --- cal.c 9 Oct 2015 01:37:06 -0000 1.30 +++ cal.c 15 Aug 2021 21:39:28 -0000 @@ -158,12 +158,14 @@ main(int argc, char *argv[]) switch(ch) { case 'j': julian = 1; + wflag = 0; break; case 'm': mflag = 1; break; case 'w': wflag = 1; + julian = 0; break; case 'y': yflag = 1; @@ -174,9 +176,6 @@ main(int argc, char *argv[]) } argc -= optind; argv += optind; - - if (julian && wflag) - usage(); day_headings = DAY_HEADINGS_S; sep1752 = sep1752s;