diff options
author | Sami Kerola | 2013-04-28 12:59:59 +0200 |
---|---|---|
committer | Sami Kerola | 2013-05-26 10:59:18 +0200 |
commit | e8c58289d96b89ce52ced50e71b589b661cf31e4 (patch) | |
tree | 2130dd0fc686e06cf579312af68b8e22e7b66bac /misc-utils | |
parent | tests: add calendar reformation check (diff) | |
download | kernel-qcow2-util-linux-e8c58289d96b89ce52ced50e71b589b661cf31e4.tar.gz kernel-qcow2-util-linux-e8c58289d96b89ce52ced50e71b589b661cf31e4.tar.xz kernel-qcow2-util-linux-e8c58289d96b89ce52ced50e71b589b661cf31e4.zip |
cal: simplify calendar reformat calculations
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>
Diffstat (limited to 'misc-utils')
-rw-r--r-- | misc-utils/cal.c | 41 |
1 files changed, 15 insertions, 26 deletions
diff --git a/misc-utils/cal.c b/misc-utils/cal.c index 433db72df..a89ca7648 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); |