diff options
author | roam <roam@FreeBSD.org> | 2002-10-02 12:31:10 +0000 |
---|---|---|
committer | roam <roam@FreeBSD.org> | 2002-10-02 12:31:10 +0000 |
commit | e474e1f04df3d56ee4471959471e7f9ae34e7cb8 (patch) | |
tree | 5508f731308dc3d69528e3771df815ffd5ec04b2 /usr.bin/ncal/ncal.c | |
parent | 4ab3b5c0e7f470c2a4a31f60fcd78f83f89c5102 (diff) | |
download | FreeBSD-src-e474e1f04df3d56ee4471959471e7f9ae34e7cb8.zip FreeBSD-src-e474e1f04df3d56ee4471959471e7f9ae34e7cb8.tar.gz |
Teach ncal(1) about month names specified on the command line.
Reviewed by: -audit
Approved by: silence on -audit
MFC after: 3 weeks
Diffstat (limited to 'usr.bin/ncal/ncal.c')
-rw-r--r-- | usr.bin/ncal/ncal.c | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/usr.bin/ncal/ncal.c b/usr.bin/ncal/ncal.c index e10f45a..4fa3fd4 100644 --- a/usr.bin/ncal/ncal.c +++ b/usr.bin/ncal/ncal.c @@ -162,6 +162,7 @@ char *center(char *s, char *t, int w); void mkmonth(int year, int month, int jd_flag, struct monthlines * monthl); void mkmonthb(int year, int month, int jd_flag, struct monthlines * monthl); void mkweekdays(struct weekdays * wds); +int parsemonth(const char *s); void printcc(void); void printeaster(int year, int julian, int orthodox); void printmonth(int year, int month, int jd_flag); @@ -306,9 +307,11 @@ main(int argc, char *argv[]) case 2: if (flag_easter) usage(); - m = atoi(*argv++); + m = parsemonth(*argv++); if (m < 1 || m > 12) - errx(EX_USAGE, "month %d not in range 1..12", m); + errx(EX_USAGE, + "%s is neither a month number (1..12) nor a name", + argv[-1]); /* FALLTHROUGH */ case 1: y = atoi(*argv++); @@ -848,3 +851,20 @@ center(char *s, char *t, int w) sprintf(s, "%.*s%s", (int)(w - strlen(t)) / 2, blanks, t); return (s); } + +int +parsemonth(const char *s) +{ + int v; + char *cp; + struct tm tm; + + v = (int)strtol(s, &cp, 10); + if (cp != s) + return (v); + if (strptime(s, "%B", &tm) != NULL) + return (tm.tm_mon + 1); + if (strptime(s, "%b", &tm) != NULL) + return (tm.tm_mon + 1); + return (0); +} |