Rebased as requested.  See attachment.

-- 
http://www.fastmail.com - Email service worth paying for. Try it for free

From 0485b04e2515484a3ed47ccc348bc791a856017f Mon Sep 17 00:00:00 2001
From: Greg Reagle <greg.rea...@umbc.edu>
Date: Thu, 8 Jan 2015 14:21:37 -0500
Subject: [PATCH] If only the year operand is given, cal shall produce a
 calendar for all twelve months in the given calendar year.

---
 cal.1 |  8 +++++++-
 cal.c | 11 ++++++++++-
 2 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/cal.1 b/cal.1
index 8619460..e58b9d4 100644
--- a/cal.1
+++ b/cal.1
@@ -28,7 +28,13 @@ of calendars side by side. Each row of calendars contains at most
 .IR columns
 number of calendars. The defaults are obtained using
 .IR localtime (3).
-The Julian calendar is used through Sep 2, 1752, and the Gregorian calendar is used starting the next day with Sep 14, 1752.
+If
+.IR year
+is given without
+.IR month
+print the whole year, unless overridden by options.  The Julian calendar is used 
+through Sep 2, 1752, and the Gregorian calendar is used starting the next day 
+with Sep 14, 1752.
 .SH OPTIONS
 .TP
 .B \-1
diff --git a/cal.c b/cal.c
index 8d6dda0..52c2f6d 100644
--- a/cal.c
+++ b/cal.c
@@ -146,7 +146,7 @@ main(int argc, char *argv[])
 	fday = 0;
 
 	ncols = 3;
-	nmons = 1;
+	nmons = 0;
 
 	ARGBEGIN {
 	case '1':
@@ -183,6 +183,15 @@ main(int argc, char *argv[])
 		usage();
 	} ARGEND;
 
+	if (nmons == 0) {
+		if (argc == 1) {
+			month = 1;
+			nmons = 12;
+		} else {
+			nmons = 1;
+		}
+	}
+
 	switch (argc) {
 	case 2:
 		month = estrtol(argv[0], 0);
-- 
1.9.1

Reply via email to