ncal: specify month with -m month argument
authorSimon Schubert <corecode@dragonflybsd.org>
Wed, 6 May 2009 09:28:17 +0000 (11:28 +0200)
committerSimon Schubert <corecode@dragonflybsd.org>
Wed, 6 May 2009 21:29:14 +0000 (23:29 +0200)
Ncal only supports specification of a month together with a year, which is
silly.  Using the -m argument, you can now specify a month in the current
year.

Obtained-from:  FreeBSD

usr.bin/ncal/ncal.1
usr.bin/ncal/ncal.c

index 5db4862..f5bf63c 100644 (file)
 .Sh SYNOPSIS
 .Nm
 .Op Fl jy
+.Op Fl m Ar month
 .Oo
 .Op Ar month
 .Ar year
 .Oc
 .Nm ncal
 .Op Fl jJpwy
+.Op Fl m Ar month
 .Op Fl s Ar country_code
 .Oo
 .Op Ar month
@@ -70,6 +72,9 @@ option, display date of easter according to the Julian Calendar.
 Display date of easter (for western churches).
 .It Fl j
 Display Julian days (days one-based, numbered from January 1).
+.It Fl m Ar month
+Display the specified
+.Ar month .
 .It Fl o
 Display date of orthodox easter (Greek and Russian
 Orthodox Churches).
@@ -96,7 +101,9 @@ Display a calendar for the current year.
 .Pp
 A single parameter specifies the year (1 - 9999) to be displayed;
 note the year must be fully specified.
-Two parameters denote the month and year; the month is either a number between
+Two parameters denote the month and year; the
+.Ar month
+is either a number between
 1 and 12, or a full or abbreviated name as specified by the current locale.
 A single dot,
 .Ql \&. ,
index 5bc0f48..ed844ed 100644 (file)
@@ -197,6 +197,7 @@ main(int argc, char *argv[])
        int     flag_orthodox = 0;      /* use wants Orthodox easter */
        int     flag_easter = 0;        /* use wants easter date */
        char    *cp;                    /* character pointer */
+       char    *flag_month = NULL;     /* requested month as string */
        char    *locale;                /* locale to get country code */
        char tbuf[1024], cbuf[512], *b;
        time_t t;
@@ -257,7 +258,7 @@ main(int argc, char *argv[])
        if (flag_backward)
                nswitchb = ndaysj(&ukswitch);
 
-       while ((ch = getopt(argc, argv, "Jejops:wy")) != -1)
+       while ((ch = getopt(argc, argv, "Jejm:ops:wy")) != -1)
                switch (ch) {
                case 'J':
                        if (flag_backward)
@@ -273,6 +274,9 @@ main(int argc, char *argv[])
                case 'j':
                        flag_julian_day = 1;
                        break;
+               case 'm':
+                       flag_month = optarg;
+                       break;
                case 'o':
                        if (flag_backward)
                                usage();
@@ -317,11 +321,7 @@ main(int argc, char *argv[])
        case 2:
                if (flag_easter)
                        usage();
-               m = parsemonth(*argv++);
-               if (m < 1 || m > 12)
-                       errx(EX_USAGE,
-                           "%s is neither a month number (1..12) nor a name",
-                           argv[-1]);
+               flag_month = *argv++;
                /* FALLTHROUGH */
        case 1:
                if (strcmp(*argv, ".") == 0)
@@ -338,6 +338,14 @@ main(int argc, char *argv[])
                usage();
        }
 
+       if (flag_month != NULL) {
+               m = parsemonth(flag_month);
+               if (m < 1 || m > 12)
+                       errx(EX_USAGE,
+                           "%s is neither a month number (1..12) nor a name",
+                           flag_month);
+       }
+
        if (flag_easter)
                printeaster(y, flag_julian_cal, flag_orthodox);
        else if (argc == 1 || flag_hole_year) {