public inbox for util-linux@vger.kernel.org
 help / color / mirror / Atom feed
From: Sami Kerola <kerolasa@iki.fi>
To: util-linux@vger.kernel.org
Cc: kerolasa@iki.fi
Subject: [PATCH 05/16] cal: simplify calendar reformat calculations
Date: Thu,  2 May 2013 19:51:30 +0100	[thread overview]
Message-ID: <1367520701-14962-6-git-send-email-kerolasa@iki.fi> (raw)
In-Reply-To: <1367520701-14962-1-git-send-email-kerolasa@iki.fi>

The only September 1752 offset calculation that is necessary is whether
Sun or Mon is the first day of the week.

Signed-off-by: Sami Kerola <kerolasa@iki.fi>
---
 misc-utils/cal.c | 41 +++++++++++++++--------------------------
 1 file changed, 15 insertions(+), 26 deletions(-)

diff --git a/misc-utils/cal.c b/misc-utils/cal.c
index 433db72..a89ca76 100644
--- a/misc-utils/cal.c
+++ b/misc-utils/cal.c
@@ -200,27 +200,16 @@ static int days_in_month[2][13] = {
 	{0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
 };
 
-#define SEP1752_OFS		4		/* sep1752[4] is a Sunday */
-
-/* 1 Sep 1752 is represented by sep1752[6] and j_sep1752[6] */
-int sep1752[MAXDAYS+6] = {
-				SPACE,	SPACE,	SPACE,	SPACE,
+/* September 1752 is special, and has static assignments for both date
+ * and Julian representations.  */
+ int d_sep1752[MAXDAYS / 2] = {
 	SPACE,	SPACE,	1,	2,	14,	15,	16,
 	17,	18,	19,	20,	21,	22,	23,
-	24,	25,	26,	27,	28,	29,	30,
-	SPACE,	SPACE,	SPACE,	SPACE,	SPACE,	SPACE,	SPACE,
-	SPACE,	SPACE,	SPACE,	SPACE,	SPACE,	SPACE,	SPACE,
-	SPACE,	SPACE,	SPACE,	SPACE,	SPACE,	SPACE,	SPACE,
-	SPACE,	SPACE
-}, j_sep1752[MAXDAYS+6] = {
-				SPACE,	SPACE,	SPACE,	SPACE,
+	24,	25,	26,	27,	28,	29,	30
+}, j_sep1752[MAXDAYS / 2] = {
 	SPACE,	SPACE,	245,	246,	258,	259,	260,
 	261,	262,	263,	264,	265,	266,	267,
-	268,	269,	270,	271,	272,	273,	274,
-	SPACE,	SPACE,	SPACE,	SPACE,	SPACE,	SPACE,	SPACE,
-	SPACE,	SPACE,	SPACE,	SPACE,	SPACE,	SPACE,	SPACE,
-	SPACE,	SPACE,	SPACE,	SPACE,	SPACE,	SPACE,	SPACE,
-	SPACE,	SPACE
+	268,	269,	270,	271,	272,	273,	274
 }, empty[MAXDAYS] = {
 	SPACE,	SPACE,	SPACE,	SPACE,	SPACE,	SPACE,	SPACE,
 	SPACE,	SPACE,	SPACE,	SPACE,	SPACE,	SPACE,	SPACE,
@@ -670,18 +659,18 @@ yearly(int day, int year) {
 void
 day_array(int day, int month, int year, int *days) {
 	int julday, daynum, dw, dm;
-	int *d_sep1752;
-
-	if (month == REFORMATION_MONTH && year == REFORMATION_YEAR) {
-		int sep1752_ofs = (weekstart + SEP1752_OFS) % 7;
-		d_sep1752 = julian ? j_sep1752 : sep1752;
-		memcpy(days, d_sep1752 + sep1752_ofs, MAXDAYS * sizeof(int));
-		for (dm=0; dm<MAXDAYS; dm++)
-			if (j_sep1752[dm + sep1752_ofs] == day)
+	int *sep1752;
+
+	memcpy(days, empty, MAXDAYS * sizeof(int));
+	if (year == REFORMATION_YEAR && month == REFORMATION_MONTH) {
+		sep1752 = julian ? j_sep1752 : d_sep1752;
+		memcpy(days, sep1752 + weekstart,
+		       ((MAXDAYS / 2) - weekstart) * sizeof(int));
+		for (dm = 0; dm < MAXDAYS / 2; dm++)
+			if (j_sep1752[dm] == day)
 				days[dm] |= TODAY_FLAG;
 		return;
 	}
-	memcpy(days, empty, MAXDAYS * sizeof(int));
 	dm = days_in_month[leap_year(year)][month];
 	dw = (day_in_week(1, month, year) - weekstart + DAYS_IN_WEEK) % DAYS_IN_WEEK;
 	julday = day_in_year(1, month, year);
-- 
1.8.2.2


  parent reply	other threads:[~2013-05-02 18:52 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-05-02 18:51 [PATCH 00/16]: [pull] cal: second review round Sami Kerola
2013-05-02 18:51 ` [PATCH 01/16] cal: fix preprocessor directive indendation Sami Kerola
2013-05-02 18:51 ` [PATCH 02/16] cal: convert function like definitions to functions Sami Kerola
2013-05-02 18:51 ` [PATCH 03/16] cal: clean up use of constants Sami Kerola
2013-05-02 18:51 ` [PATCH 04/16] tests: add calendar reformation check Sami Kerola
2013-05-02 18:51 ` Sami Kerola [this message]
2013-05-02 18:51 ` [PATCH 06/16] cal: remove unnecessary initializations Sami Kerola
2013-05-02 18:51 ` [PATCH 07/16] cal: de-duplicate julian specific functions Sami Kerola
2013-05-02 18:51 ` [PATCH 08/16] lib: copy argmatch from gnulib Sami Kerola
2013-05-06 17:16   ` Karel Zak
2013-05-07 21:14     ` Sami Kerola
2013-05-02 18:51 ` [PATCH 09/16] cal: add --highligth option which uses argmatch Sami Kerola
2013-05-06  0:11   ` Pádraig Brady
2013-05-06 10:44     ` Sami Kerola
2013-05-06 17:19   ` Karel Zak
2013-05-02 18:51 ` [PATCH 10/16] cal: add --highlight to usage() Sami Kerola
2013-05-02 18:51 ` [PATCH 11/16] docs: cal: add --highlight option description Sami Kerola
2013-05-02 18:51 ` [PATCH 12/16] tests: add cal day highlight corner cases Sami Kerola
2013-05-02 18:51 ` [PATCH 13/16] cal: stop trimming whitespaces Sami Kerola
2013-05-06  0:12   ` Pádraig Brady
2013-05-14 10:45   ` Karel Zak
2013-05-21 20:34     ` Sami Kerola
2013-05-02 18:51 ` [PATCH 14/16] cal: move global variables to local scope Sami Kerola
2013-05-14 10:49   ` Karel Zak
2013-05-02 18:51 ` [PATCH 15/16] cal: mark all functions static Sami Kerola
2013-05-02 18:51 ` [PATCH 16/16] cal: simplify day_in_week() Sami Kerola
2013-05-03 20:19   ` Sami Kerola

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1367520701-14962-6-git-send-email-kerolasa@iki.fi \
    --to=kerolasa@iki.fi \
    --cc=util-linux@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox