-----BEGIN PGP SIGNED MESSAGE----- /*************************************************************/ /* */ /* Testdriver for a function which computes the */ /* Julian daynumber and back. These functions are emacs */ /* compatible, *not* "cal" compatible. */ /* */ /* (c) Herwig Huener 2000 --> GPL */ /* */ /* extension for computing the training sheets for my */ /* training schedule. */ /* */ /* (c) Herwig Huener 2001 --> GPL */ /* */ /*************************************************************/ #include #include #define HEADER_1 " 1994-02-28 01:33:33\n" #define HEADER_2 " 1994-03-12 20:20:20\n" #define HEADER_3 " 2000-02-15 22:27:00\n" #define HEADER_4 " 2000-02-20 16:55:16\n" #define HEADER_5 " 2001-02-04 20:28:00\n" #define HEADER_6 " 2001-02-14 19:00:00\n" #define HEADER_7 " 2001-03-25 14:14:14\n" int date_2_julian_day_at_noon (int year, int month, int day); /*****************************************************/ void main_test (); void main_error_test (); int consume_quad_century (); int consume_long_century (); int consume_short_century (); int consume_leap_four_years (); int consume_four_years (); int consume_leap_year (); int consume_year (); int consume_month (int d); /*****************************************************/ int julian_day_at_noon_2_date (int jul_date); void check_julian (int year, int month, int day, int result, char *comment); void header_line (); void further_check (); void print_week_day (int q); void print_27h (int q); void fprint_short_27h (int q); void generate_run_sheet (int first_jul); /* we need these global : */ int self_check_errors; int debug = 0; FILE *fp; void main_test () { printf ("\n"); printf (HEADER_1); printf (HEADER_2); printf (HEADER_3); printf (HEADER_4); printf (HEADER_5); printf (HEADER_6); printf (HEADER_7); printf ("\n"); self_check_errors = 0; header_line (); check_julian ( 1, 1, 1, 1721426, ""); check_julian ( 1, 1, 5, 1721430, ""); check_julian ( 1, 1, 19, 1721444, ""); check_julian ( 1, 1, 27, 1721452, ""); check_julian ( 1, 1, 28, 1721453, ""); check_julian ( 1, 1, 29, 1721454, ""); check_julian ( 1, 1, 30, 1721455, ""); check_julian ( 1, 1, 31, 1721456, ""); check_julian ( 1, 2, 1, 1721457, ""); check_julian ( 1, 2, 5, 1721461, ""); check_julian ( 1, 2, 28, 1721484, ""); check_julian ( 1, 3, 1, 1721485, ""); check_julian ( 1, 3, 31, 1721515, ""); check_julian ( 1, 4, 1, 1721516, ""); check_julian ( 1, 4, 30, 1721545, ""); check_julian ( 1, 5, 1, 1721546, ""); check_julian ( 1, 5, 31, 1721576, ""); check_julian ( 1, 6, 1, 1721577, ""); check_julian ( 1, 6, 30, 1721606, ""); check_julian ( 1, 7, 1, 1721607, ""); check_julian ( 1, 7, 31, 1721637, ""); check_julian ( 1, 8, 1, 1721638, ""); check_julian ( 1, 8, 31, 1721668, ""); check_julian ( 1, 9, 1, 1721669, ""); check_julian ( 1, 9, 30, 1721698, ""); check_julian ( 1, 10, 1, 1721699, ""); check_julian ( 1, 10, 31, 1721729, ""); check_julian ( 1, 11, 1, 1721730, ""); check_julian ( 1, 11, 30, 1721759, ""); check_julian ( 1, 12, 1, 1721760, ""); check_julian ( 1, 12, 31, 1721790, ""); check_julian ( 2, 1, 1, 1721791, ""); header_line (); check_julian ( 2, 12, 31, 1722155, ""); check_julian ( 3, 1, 1, 1722156, ""); check_julian ( 3, 2, 1, 1722187, ""); check_julian ( 3, 3, 1, 1722215, ""); check_julian ( 3, 4, 1, 1722246, ""); check_julian ( 3, 12, 20, 1722509, ""); check_julian ( 3, 12, 25, 1722514, ""); check_julian ( 3, 12, 28, 1722517, ""); check_julian ( 3, 12, 29, 1722518, ""); check_julian ( 3, 12, 30, 1722519, ""); check_julian ( 3, 12, 31, 1722520, ""); check_julian ( 4, 1, 1, 1722521, ""); check_julian ( 4, 2, 1, 1722552, ""); check_julian ( 4, 3, 1, 1722581, ""); check_julian ( 4, 4, 1, 1722612, ""); check_julian ( 4, 5, 1, 1722642, ""); check_julian ( 4, 6, 1, 1722673, ""); check_julian ( 4, 7, 1, 1722703, ""); check_julian ( 4, 8, 1, 1722734, ""); check_julian ( 4, 9, 1, 1722765, ""); check_julian ( 4, 10, 1, 1722795, ""); check_julian ( 4, 11, 1, 1722826, ""); check_julian ( 4, 12, 1, 1722856, ""); check_julian ( 4, 12, 31, 1722886, ""); check_julian ( 5, 1, 1, 1722887, ""); check_julian ( 5, 12, 31, 1723251, ""); check_julian ( 6, 1, 1, 1723252, ""); check_julian ( 6, 12, 31, 1723616, ""); check_julian ( 7, 1, 1, 1723617, ""); check_julian ( 7, 12, 31, 1723981, ""); check_julian ( 8, 1, 1, 1723982, ""); check_julian ( 8, 12, 31, 1724347, ""); check_julian ( 9, 1, 1, 1724348, ""); check_julian ( 9, 12, 31, 1724712, ""); check_julian ( 10, 1, 1, 1724713, ""); check_julian ( 10, 12, 31, 1725077, ""); check_julian ( 11, 1, 1, 1725078, ""); header_line (); check_julian ( 11, 12, 31, 1725442, ""); check_julian ( 12, 1, 1, 1725443, ""); check_julian ( 12, 12, 31, 1725808, ""); check_julian ( 13, 1, 1, 1725809, ""); check_julian ( 13, 12, 31, 1726173, ""); check_julian ( 14, 1, 1, 1726174, ""); check_julian ( 14, 12, 31, 1726538, ""); check_julian ( 15, 1, 1, 1726539, ""); check_julian ( 15, 12, 31, 1726903, ""); check_julian ( 16, 1, 1, 1726904, ""); check_julian ( 16, 12, 31, 1727269, ""); check_julian ( 17, 1, 1, 1727270, ""); check_julian ( 17, 12, 31, 1727634, ""); check_julian ( 18, 1, 1, 1727635, ""); check_julian ( 18, 12, 31, 1727999, ""); check_julian ( 19, 1, 1, 1728000, ""); check_julian ( 19, 12, 31, 1728364, ""); check_julian ( 20, 1, 1, 1728365, ""); check_julian ( 49, 12, 31, 1739322, ""); check_julian ( 50, 1, 1, 1739323, ""); check_julian ( 92, 12, 31, 1755028, ""); check_julian ( 93, 1, 1, 1755029, ""); check_julian ( 93, 12, 31, 1755393, ""); check_julian ( 94, 1, 1, 1755394, ""); check_julian ( 94, 12, 31, 1755758, ""); check_julian ( 95, 1, 1, 1755759, ""); check_julian ( 95, 12, 31, 1756123, ""); check_julian ( 96, 1, 1, 1756124, ""); check_julian ( 96, 12, 31, 1756489, ""); check_julian ( 97, 1, 1, 1756490, ""); check_julian ( 97, 12, 31, 1756854, ""); check_julian ( 98, 1, 1, 1756855, ""); check_julian ( 98, 12, 31, 1757219, ""); check_julian ( 99, 1, 1, 1757220, ""); check_julian ( 99, 2, 1, 1757251, ""); check_julian ( 99, 3, 1, 1757279, ""); check_julian ( 99, 4, 1, 1757310, ""); check_julian ( 99, 5, 1, 1757340, ""); check_julian ( 99, 6, 1, 1757371, ""); check_julian ( 99, 7, 1, 1757401, ""); check_julian ( 99, 8, 1, 1757432, ""); check_julian ( 99, 9, 1, 1757463, ""); check_julian ( 99, 10, 1, 1757493, ""); check_julian ( 99, 11, 1, 1757524, ""); check_julian ( 99, 11, 30, 1757553, ""); check_julian ( 99, 12, 1, 1757554, ""); check_julian ( 99, 12, 20, 1757573, ""); check_julian ( 99, 12, 27, 1757580, ""); check_julian ( 99, 12, 28, 1757581, ""); check_julian ( 99, 12, 29, 1757582, ""); check_julian ( 99, 12, 30, 1757583, ""); check_julian ( 99, 12, 31, 1757584, ""); check_julian ( 100, 1, 1, 1757585, ""); check_julian ( 100, 1, 2, 1757586, ""); check_julian ( 100, 1, 3, 1757587, ""); header_line (); check_julian ( 149, 12, 31, 1775846, ""); check_julian ( 150, 1, 1, 1775847, ""); check_julian ( 199, 12, 31, 1794108, ""); check_julian ( 200, 1, 1, 1794109, ""); check_julian ( 249, 12, 31, 1812370, ""); check_julian ( 250, 1, 1, 1812371, ""); check_julian ( 299, 12, 31, 1830632, ""); check_julian ( 300, 1, 1, 1830633, ""); check_julian ( 349, 12, 31, 1848894, ""); check_julian ( 350, 1, 1, 1848895, ""); check_julian ( 398, 12, 31, 1866791, ""); check_julian ( 399, 1, 1, 1866792, ""); check_julian ( 399, 12, 31, 1867156, ""); check_julian ( 400, 1, 1, 1867157, ""); check_julian ( 400, 12, 31, 1867522, ""); check_julian ( 401, 1, 1, 1867523, ""); check_julian ( 500, 12, 31, 1904046, ""); check_julian ( 501, 1, 1, 1904047, ""); check_julian ( 600, 12, 31, 1940570, ""); check_julian ( 601, 1, 1, 1940571, ""); check_julian ( 700, 12, 31, 1977094, ""); check_julian ( 701, 1, 1, 1977095, ""); check_julian ( 763, 9, 18, 2000000, ""); check_julian ( 800, 12, 31, 2013619, ""); check_julian ( 801, 1, 1, 2013620, ""); check_julian ( 900, 12, 31, 2050143, ""); check_julian ( 901, 1, 1, 2050144, ""); check_julian ( 999, 10, 1, 2086211, ""); check_julian ( 999, 11, 1, 2086242, ""); check_julian ( 999, 12, 1, 2086272, ""); check_julian ( 999, 12, 25, 2086296, ""); check_julian ( 999, 12, 26, 2086297, ""); check_julian ( 999, 12, 27, 2086298, ""); check_julian ( 999, 12, 28, 2086299, ""); check_julian ( 999, 12, 29, 2086300, ""); check_julian ( 999, 12, 30, 2086301, ""); check_julian ( 999, 12, 31, 2086302, ""); header_line (); check_julian (1000, 1, 1, 2086303, ""); check_julian (1000, 1, 2, 2086304, ""); check_julian (1000, 1, 3, 2086305, ""); check_julian (1000, 1, 4, 2086306, ""); check_julian (1000, 1, 5, 2086307, ""); check_julian (1000, 1, 10, 2086312, ""); check_julian (1000, 1, 30, 2086332, ""); check_julian (1000, 1, 31, 2086333, ""); check_julian (1000, 2, 1, 2086334, ""); check_julian (1000, 2, 2, 2086335, ""); check_julian (1000, 2, 10, 2086343, ""); check_julian (1000, 2, 28, 2086361, ""); check_julian (1000, 3, 1, 2086362, ""); check_julian (1000, 3, 2, 2086363, ""); header_line (); check_julian (1552, 6, 30, 2288097, ""); check_julian (1552, 7, 1, 2288098, ""); check_julian (1752, 9, 1, 2361209, ""); check_julian (1752, 9, 2, 2361210, "calendar reform"); check_julian (1752, 9, 14, 2361222, "calendar reform"); check_julian (1752, 9, 30, 2361238, ""); check_julian (1800, 3, 5, 2378560, ""); check_julian (1806, 9, 30, 2380960, ""); check_julian (1806, 10, 1, 2380961, ""); check_julian (1836, 5, 6, 2391771, "Max Eyth born"); check_julian (1879, 3, 14, 2407423, "Albert Einstein born"); check_julian (1881, 2, 15, 2408127, "Heinrich Huener born"); header_line (); check_julian (1906, 8, 25, 2417448, "Max Eyth died"); check_julian (1918, 5, 11, 2421725, "Richard P. Feynman born"); check_julian (1920, 3, 6, 2422390, "Hartmut born"); check_julian (1926, 9, 10, 2424769, "Helga born"); check_julian (1939, 9, 1, 2429508, "WWII begin"); check_julian (1945, 5, 8, 2431584, "WWII end"); check_julian (1945, 9, 21, 2431720, "Heinrich Huener died"); check_julian (1949, 12, 31, 2433282, ""); check_julian (1950, 1, 1, 2433283, ""); check_julian (1950, 6, 2, 2433435, "Undine born"); check_julian (1950, 12, 31, 2433647, ""); check_julian (1951, 1, 1, 2433648, ""); check_julian (1951, 4, 17, 2433754, "Herwig born"); check_julian (1951, 12, 31, 2434012, ""); check_julian (1952, 1, 1, 2434013, ""); check_julian (1952, 8, 19, 2434244, "Josella born"); check_julian (1952, 8, 23, 2434248, "Joerg born"); check_julian (1952, 12, 7, 2434354, "Holger born"); check_julian (1952, 12, 31, 2434378, ""); check_julian (1953, 1, 1, 2434379, ""); check_julian (1953, 12, 31, 2434743, ""); check_julian (1954, 1, 1, 2434744, ""); check_julian (1954, 12, 31, 2435108, ""); check_julian (1955, 1, 1, 2435109, ""); check_julian (1955, 4, 18, 2435216, "Albert Einstein died"); check_julian (1955, 12, 31, 2435473, ""); check_julian (1956, 1, 1, 2435474, ""); check_julian (1956, 12, 31, 2435839, ""); check_julian (1957, 1, 1, 2435840, ""); check_julian (1957, 12, 31, 2436204, ""); check_julian (1958, 1, 1, 2436205, ""); check_julian (1958, 12, 31, 2436569, ""); check_julian (1959, 1, 1, 2436570, ""); header_line (); check_julian (1960, 12, 14, 2437283, ""); check_julian (1964, 12, 17, 2438747, "Hedda born"); check_julian (1965, 4, 7, 2438858, "Monika born"); check_julian (1979, 3, 5, 2443938, "I got my diploma"); check_julian (1980, 3, 1, 2444300, "moving to Munich"); check_julian (1980, 7, 12, 2444433, "Lydia born"); check_julian (1985, 2, 1, 2446098, "moving to GHDF"); check_julian (1987, 6, 10, 2446957, "marriage with Irene"); check_julian (1988, 2, 15, 2447207, "Richard P. Feynman died"); check_julian (1991, 12, 5, 2448596, "divorce from Irene"); check_julian (1996, 5, 3, 2450207, "Helga died"); check_julian (1999, 10, 5, 2451457, "Charmion born"); header_line (); check_julian (2000, 2, 15, 2451590, "This program begun"); debug = 1; check_julian (2000, 2, 20, 2451595, "calendar works"); debug = 0; check_julian (2000, 8, 14, 2451771, "To Ireland"); check_julian (2000, 9, 2, 2451790, "From Ireland"); check_julian (2001, 2, 9, 2451950, "This program works"); check_julian (2001, 2, 12, 2451953, "This program works"); check_julian (2001, 4, 17, 2452017, "I turn 50"); check_julian (2001, 12, 22, 2452266, ""); check_julian (2002, 12, 22, 2452631, ""); check_julian (2003, 12, 22, 2452996, ""); check_julian (2004, 12, 22, 2453362, ""); check_julian (2005, 12, 22, 2453727, ""); check_julian (2006, 12, 22, 2454092, ""); check_julian (2007, 12, 22, 2454457, ""); check_julian (2008, 12, 22, 2454823, ""); check_julian (2009, 12, 22, 2455188, ""); check_julian (2010, 12, 22, 2455553, ""); check_julian (2011, 12, 22, 2455918, ""); check_julian (2012, 12, 22, 2456284, ""); check_julian (2013, 12, 22, 2456649, ""); check_julian (2014, 12, 22, 2457014, ""); check_julian (2015, 12, 22, 2457379, ""); check_julian (2016, 12, 22, 2457745, ""); check_julian (2017, 12, 22, 2458110, ""); check_julian (2018, 12, 22, 2458475, ""); check_julian (2019, 12, 22, 2458840, ""); check_julian (2020, 12, 22, 2459206, ""); check_julian (2021, 12, 22, 2459571, ""); check_julian (2022, 12, 22, 2459936, ""); check_julian (2023, 12, 22, 2460301, ""); check_julian (2024, 12, 22, 2460667, ""); check_julian (2025, 12, 22, 2461032, ""); check_julian (2026, 12, 22, 2461397, ""); check_julian (2027, 12, 22, 2461762, ""); check_julian (2028, 12, 22, 2462128, ""); check_julian (2029, 12, 22, 2462493, ""); check_julian (2030, 12, 22, 2462858, ""); header_line (); check_julian (2031, 12, 22, 2463223, ""); check_julian (2032, 12, 22, 2463589, ""); check_julian (2033, 12, 22, 2463954, ""); check_julian (2034, 12, 22, 2464319, ""); check_julian (2035, 12, 22, 2464684, ""); check_julian (2036, 12, 22, 2465050, ""); check_julian (2037, 12, 22, 2465415, ""); check_julian (2038, 12, 22, 2465780, ""); check_julian (2039, 12, 22, 2466145, ""); check_julian (2040, 12, 22, 2466511, ""); check_julian (2041, 12, 22, 2466876, ""); check_julian (2042, 12, 22, 2467241, ""); check_julian (2043, 12, 22, 2467606, ""); check_julian (2044, 12, 22, 2467972, ""); check_julian (2045, 12, 22, 2468337, ""); check_julian (2046, 12, 22, 2468702, ""); check_julian (2047, 12, 22, 2469067, ""); check_julian (2048, 12, 22, 2469433, ""); check_julian (2049, 12, 22, 2469798, ""); check_julian (2050, 12, 22, 2470163, ""); check_julian (2051, 12, 22, 2470528, ""); check_julian (2052, 12, 22, 2470894, ""); check_julian (2053, 12, 22, 2471259, ""); check_julian (2054, 12, 22, 2471624, ""); check_julian (2055, 12, 22, 2471989, ""); check_julian (2056, 12, 22, 2472355, ""); check_julian (2057, 12, 22, 2472720, ""); check_julian (2058, 12, 22, 2473085, ""); check_julian (2059, 12, 22, 2473450, ""); header_line (); check_julian (2221, 12, 31, 2532628, ""); check_julian (2222, 1, 1, 2532629, ""); check_julian (2222, 1, 31, 2532659, ""); check_julian (2222, 2, 1, 2532660, ""); check_julian (2222, 2, 28, 2532687, ""); check_julian (2222, 3, 1, 2532688, ""); check_julian (2222, 3, 31, 2532718, ""); check_julian (2222, 4, 1, 2532719, ""); check_julian (2222, 4, 30, 2532748, ""); check_julian (2222, 5, 1, 2532749, ""); check_julian (2222, 5, 31, 2532779, ""); check_julian (2222, 6, 1, 2532780, ""); check_julian (2222, 6, 30, 2532809, ""); check_julian (2222, 7, 1, 2532810, ""); check_julian (2222, 7, 31, 2532840, ""); check_julian (2222, 8, 1, 2532841, ""); check_julian (2222, 8, 31, 2532871, ""); check_julian (2222, 9, 1, 2532872, ""); check_julian (2222, 9, 30, 2532901, ""); check_julian (2222, 10, 1, 2532902, ""); check_julian (2222, 10, 31, 2532932, ""); check_julian (2222, 11, 1, 2532933, ""); check_julian (2222, 11, 30, 2532962, ""); check_julian (2222, 12, 1, 2532963, ""); check_julian (2222, 12, 31, 2532993, ""); check_julian (2223, 1, 1, 2532994, ""); header_line (); check_julian (3501, 8, 15, 3000000, ""); header_line (); check_julian (4443, 12, 31, 3344197, ""); check_julian (4444, 1, 1, 3344198, ""); check_julian (4444, 1, 31, 3344228, ""); check_julian (4444, 2, 1, 3344229, ""); check_julian (4444, 2, 29, 3344257, ""); check_julian (4444, 3, 1, 3344258, ""); check_julian (4444, 3, 31, 3344288, ""); check_julian (4444, 4, 1, 3344289, ""); check_julian (4444, 4, 30, 3344318, ""); check_julian (4444, 5, 1, 3344319, ""); check_julian (4444, 5, 31, 3344349, ""); check_julian (4444, 6, 1, 3344350, ""); check_julian (4444, 6, 30, 3344379, ""); check_julian (4444, 7, 1, 3344380, ""); check_julian (4444, 7, 31, 3344410, ""); check_julian (4444, 8, 1, 3344411, ""); check_julian (4444, 8, 31, 3344441, ""); check_julian (4444, 9, 1, 3344442, ""); check_julian (4444, 9, 30, 3344471, ""); check_julian (4444, 10, 1, 3344472, ""); check_julian (4444, 10, 31, 3344502, ""); check_julian (4444, 11, 1, 3344503, ""); check_julian (4444, 11, 30, 3344532, ""); check_julian (4444, 12, 1, 3344533, ""); check_julian (4444, 12, 31, 3344563, ""); check_julian (4445, 1, 1, 3344564, ""); header_line (); check_julian (6239, 7, 12, 4000000, ""); check_julian (8977, 6, 7, 5000000, ""); check_julian (9999, 11, 27, 5373450, ""); check_julian (9999, 11, 29, 5373452, ""); check_julian (9999, 11, 30, 5373453, ""); check_julian (9999, 12, 1, 5373454, ""); check_julian (9999, 12, 31, 5373484, ""); header_line (); printf ("\n"); further_check (); if (0 != self_check_errors) { printf (" %i self check errors\n", self_check_errors); } else { printf (" self check OK\n"); } printf ("\n"); } void main_error_test () /* just a few ... */ { if (date_2_julian_day_at_noon ( 3333, 33, 33 )) {self_check_errors++;} if (date_2_julian_day_at_noon ( 0, 4, 17 )) {self_check_errors++;} if (date_2_julian_day_at_noon ( 2001, 2, 29 )) {self_check_errors++;} if (date_2_julian_day_at_noon ( 2002, 2, 29 )) {self_check_errors++;} if (date_2_julian_day_at_noon ( 2003, 2, 29 )) {self_check_errors++;} if (date_2_julian_day_at_noon ( 2004, 2, 30 )) {self_check_errors++;} if (date_2_julian_day_at_noon ( 2005, 2, 29 )) {self_check_errors++;} if (date_2_julian_day_at_noon ( 2006, 2, 29 )) {self_check_errors++;} if (date_2_julian_day_at_noon ( 2006, 0, 14 )) {self_check_errors++;} if (date_2_julian_day_at_noon ( 2006, 13, 14 )) {self_check_errors++;} if (date_2_julian_day_at_noon ( 2006, 5, 0 )) {self_check_errors++;} if (date_2_julian_day_at_noon ( 2006, 5, 32 )) {self_check_errors++;} if (date_2_julian_day_at_noon ( 2006, 6, 31 )) {self_check_errors++;} if (date_2_julian_day_at_noon ( 2006, 6, -1 )) {self_check_errors++;} if (date_2_julian_day_at_noon ( 2006, -1, 31 )) {self_check_errors++;} if (date_2_julian_day_at_noon ( -945, 6, 31 )) {self_check_errors++;} if (0 != self_check_errors) { printf (" %i self check errors\n", self_check_errors); } else { printf (" self check still OK\n"); } printf ("\n"); } int date_2_julian_day_at_noon (int year, int month, int day) { int feb; int result; if ((1 > year ) || (9999 < year ) || (1 > month) || ( 12 < month) || (1 > day ) || ( 31 < day )) { return 0; /* error */ } result = 1721060 + year * 365; result = result + ((year - 1) / 4); result = result - ((year - 1) / 100); result = result + ((year - 1) / 400); feb = 28; if (0 == (year % 4)) feb = 29; if (0 == (year % 100)) feb = 28; if (0 == (year % 400)) feb = 29; if (( 2 == month) || ( 4 == month) || ( 6 == month) || ( 9 == month) || (11 == month)) { if ( 30 < day ) { return 0; /* error */ } if ( 2 == month) { if (feb < day) { return 0; /* error */ } } } if ( 2 <= month) result = result + 31; if ( 3 <= month) result = result + feb; if ( 4 <= month) result = result + 31; if ( 5 <= month) result = result + 30; if ( 6 <= month) result = result + 31; if ( 7 <= month) result = result + 30; if ( 8 <= month) result = result + 31; if ( 9 <= month) result = result + 31; if (10 <= month) result = result + 30; if (11 <= month) result = result + 31; if (12 <= month) result = result + 30; result = result + day; /* #define FORCED_ERROR */ #ifdef FORCED_ERROR if ((8234 == year) && (5 == month) && (17 == day)) { result = 0; } if ((2312 == year) && (2 == month) && (27 == day)) { result = 0; } #endif return result; } /***********************************************************/ /* */ /* calendar "parser" begin */ /* */ /***********************************************************/ #define YEAR400 146097 #define YEAR100Q 36525 #define YEAR100 36524 #define YEAR4Q 1461 #define YEAR4 1460 #define YEARQ 366 #define YEAR 365 int qj_date, qj_result; int consume_quad_century () { int conq; if (debug) printf (">>> consume_quad_century ();\n"); if (debug) printf (">>> qj_date = %i\n", qj_date ); if (debug) printf (">>> qj_result = %i\n", qj_result ); if (qj_date > YEAR400) { qj_result = qj_result + 4000000; qj_date = qj_date - YEAR400; return 1; } else { conq = 1; if (conq) conq = consume_long_century (); if (conq) conq = consume_short_century (); if (conq) conq = consume_short_century (); if (conq) conq = consume_short_century (); return 0; } } int consume_long_century () { int conq; if (debug) printf (">>> consume_long_century ();\n"); if (debug) printf (">>> qj_date = %i\n", qj_date ); if (debug) printf (">>> qj_result = %i\n", qj_result ); if (qj_date > YEAR100Q) { qj_result = qj_result + 1000000; qj_date = qj_date - YEAR100Q; return 1; } else { conq = 1; if (conq) conq = consume_leap_four_years (); if (conq) conq = consume_leap_four_years (); if (conq) conq = consume_leap_four_years (); if (conq) conq = consume_leap_four_years (); if (conq) conq = consume_leap_four_years (); if (conq) conq = consume_leap_four_years (); if (conq) conq = consume_leap_four_years (); if (conq) conq = consume_leap_four_years (); if (conq) conq = consume_leap_four_years (); if (conq) conq = consume_leap_four_years (); if (conq) conq = consume_leap_four_years (); if (conq) conq = consume_leap_four_years (); if (conq) conq = consume_leap_four_years (); if (conq) conq = consume_leap_four_years (); if (conq) conq = consume_leap_four_years (); if (conq) conq = consume_leap_four_years (); if (conq) conq = consume_leap_four_years (); if (conq) conq = consume_leap_four_years (); if (conq) conq = consume_leap_four_years (); if (conq) conq = consume_leap_four_years (); if (conq) conq = consume_leap_four_years (); if (conq) conq = consume_leap_four_years (); if (conq) conq = consume_leap_four_years (); if (conq) conq = consume_leap_four_years (); if (conq) conq = consume_leap_four_years (); return 0; } } int consume_short_century () { int conq; if (debug) printf (">>> consume_short_century ();\n"); if (debug) printf (">>> qj_date = %i\n", qj_date ); if (debug) printf (">>> qj_result = %i\n", qj_result ); if (qj_date > YEAR100) { qj_result = qj_result + 1000000; qj_date = qj_date - YEAR100; return 1; } else { conq = 1; if (conq) conq = consume_four_years (); if (conq) conq = consume_leap_four_years (); if (conq) conq = consume_leap_four_years (); if (conq) conq = consume_leap_four_years (); if (conq) conq = consume_leap_four_years (); if (conq) conq = consume_leap_four_years (); if (conq) conq = consume_leap_four_years (); if (conq) conq = consume_leap_four_years (); if (conq) conq = consume_leap_four_years (); if (conq) conq = consume_leap_four_years (); if (conq) conq = consume_leap_four_years (); if (conq) conq = consume_leap_four_years (); if (conq) conq = consume_leap_four_years (); if (conq) conq = consume_leap_four_years (); if (conq) conq = consume_leap_four_years (); if (conq) conq = consume_leap_four_years (); if (conq) conq = consume_leap_four_years (); if (conq) conq = consume_leap_four_years (); if (conq) conq = consume_leap_four_years (); if (conq) conq = consume_leap_four_years (); if (conq) conq = consume_leap_four_years (); if (conq) conq = consume_leap_four_years (); if (conq) conq = consume_leap_four_years (); if (conq) conq = consume_leap_four_years (); if (conq) conq = consume_leap_four_years (); return 0; } } int consume_leap_four_years () { int conq; if (debug) printf (">>> consume_leap_four_years ();\n"); if (debug) printf (">>> qj_date = %i\n", qj_date ); if (debug) printf (">>> qj_result = %i\n", qj_result ); if (qj_date > YEAR4Q) { qj_result = qj_result + 40000; qj_date = qj_date - YEAR4Q; return 1; } else { conq = 1; if (conq) conq = consume_leap_year (); if (conq) conq = consume_year (); if (conq) conq = consume_year (); if (conq) conq = consume_year (); return 0; } } int consume_four_years () { int conq; if (debug) printf (">>> consume_four_years ();\n"); if (debug) printf (">>> qj_date = %i\n", qj_date ); if (debug) printf (">>> qj_result = %i\n", qj_result ); if (qj_date > YEAR4) { qj_result = qj_result + 40000; qj_date = qj_date - YEAR4; return 1; } else { conq = 1; if (conq) conq = consume_year (); if (conq) conq = consume_year (); if (conq) conq = consume_year (); if (conq) conq = consume_year (); return 0; } } int consume_leap_year () { int conq; if (debug) printf (">>> consume_leap_year ();\n"); if (debug) printf (">>> qj_date = %i\n", qj_date ); if (debug) printf (">>> qj_result = %i\n", qj_result ); if (qj_date > YEARQ) { qj_result = qj_result + 10000; qj_date = qj_date - YEARQ; return 1; } else { conq = 1; if (conq) conq = consume_month (31); if (conq) conq = consume_month (29); /* !! */ if (conq) conq = consume_month (31); if (conq) conq = consume_month (30); if (conq) conq = consume_month (31); if (conq) conq = consume_month (30); if (conq) conq = consume_month (31); if (conq) conq = consume_month (31); if (conq) conq = consume_month (30); if (conq) conq = consume_month (31); if (conq) conq = consume_month (30); if (conq) conq = consume_month (31); return 0; } } int consume_year () { int conq; if (debug) printf (">>> consume_year ();\n"); if (debug) printf (">>> qj_date = %i\n", qj_date ); if (debug) printf (">>> qj_result = %i\n", qj_result ); if (qj_date > YEAR) { qj_result = qj_result + 10000; qj_date = qj_date - YEAR; return 1; } else { conq = 1; if (conq) conq = consume_month (31); if (conq) conq = consume_month (28); /* !! */ if (conq) conq = consume_month (31); if (conq) conq = consume_month (30); if (conq) conq = consume_month (31); if (conq) conq = consume_month (30); if (conq) conq = consume_month (31); if (conq) conq = consume_month (31); if (conq) conq = consume_month (30); if (conq) conq = consume_month (31); if (conq) conq = consume_month (30); if (conq) conq = consume_month (31); return 0; } } int consume_month (int d) { if (debug) printf (">>> consume_month (%i);\n", d); if (debug) printf (">>> qj_date = %i\n", qj_date ); if (debug) printf (">>> qj_result = %i\n", qj_result ); if (qj_date > d) { qj_result = qj_result + 100; qj_date = qj_date - d; return 1; } else { qj_result = qj_result + qj_date; qj_date = 0; return 0; } } int julian_day_at_noon_2_date (int jul_date) { int conq; if (debug) printf (">>> julian_day_at_noon_2_date (%i);\n", jul_date); qj_date = jul_date - 1721059; /* 1721060 ? */ qj_result = 100; if (debug) printf (">>> initial values:\n"); if (debug) printf (">>> qj_date = %i\n", qj_date ); if (debug) printf (">>> qj_result = %i\n", qj_result ); do { conq = consume_quad_century (); } while (conq); return qj_result; } /***********************************************************/ /* */ /* calendar "parser" end */ /* */ /***********************************************************/ void check_julian (int year, int month, int day, int result, char *comment) { int computed_result; int recomputed_date; double phase; computed_result = date_2_julian_day_at_noon (year, month, day); printf ("%7i-%02i-%02i", year, month, day); printf ("%10i ", computed_result); if (computed_result == 0) { printf (" wrong! ... ill date."); self_check_errors++; } if (computed_result == result) { printf ("=="); } else { printf ("!="); } printf ("%10i", result); if (computed_result != result) { printf (" wrong! ... delta =%5i", computed_result - result); self_check_errors++; } else { if (debug) printf ("\n>>> --------------------------------\n"); recomputed_date = julian_day_at_noon_2_date (result); if (debug) printf (">>> -------------------------------- <<<\n"); if (debug) printf (">>> "); if (10000 * year + 100 * month + day == recomputed_date) { printf (" %10i", recomputed_date); } else { printf (" !!!> %10i", recomputed_date); self_check_errors++; } if (0 != strlen (comment)) { printf (" %s", comment); } } printf ("\n"); } void header_line () { printf (" ---------- ------- -- ------- ---------------\n"); printf (" date julday julday recomputed date\n"); printf (" ---------- ------- -- ------- ---------------\n"); } void further_check () { int jday1, date, yy, mm, dd, jday2; jday1 = 1721426; printf (" checking *all* dates between 1-01-01 and 9999-12-31 ...\n"); while (jday1 < 5373485) { date = julian_day_at_noon_2_date (jday1); yy = date / 10000; mm = (date - 10000 * yy) / 100; dd = date % 100; jday2 = date_2_julian_day_at_noon (yy, mm, dd); if (0 == jday2) { self_check_errors++; printf (" check necessary on %6i-%02i-%02i / %i ???\n", yy, mm, dd, jday2); } if ((yy % 1000 == 0) && (mm == 1) && ( dd == 1)) printf (" %7i-%02i-%02i ...\n", yy, mm, dd); if (jday1 != jday2) { self_check_errors++; printf (" check necessary on %6i-%02i-%02i ???\n", yy, mm, dd); } jday1++; } printf (" ready.\n"); } void print_week_day (int q) { switch (q % 7) { case 0 : printf (" Mo"); break; case 1 : printf (" Di"); break; case 2 : printf (" Mi"); break; case 3 : printf (" Do"); break; case 4 : printf (" Fr"); break; case 5 : printf (" Sa"); break; case 6 : printf (" So"); break; default : printf (" ??"); break; } } void print_27h (int q) { switch ((q + 5) % 9) { case 8 : printf (" 08 w "); break; case 7 : printf (" 05 w 23 s "); break; case 6 : printf (" 02 w 20 s "); break; case 5 : printf (" 17 s "); break; case 4 : printf (" 14 s 23 w"); break; case 3 : printf (" 11 s 20 w"); break; case 2 : printf (" 08 s 17 w"); break; case 1 : printf (" 05 s 14 w"); break; case 0 : printf (" 02 s 11 w"); break; default : printf (" ?? ?? ?? "); break; } } void fprint_short_27h (int q) { switch ((q + 5) % 9) { case 8 : fprintf (fp, " 08w !"); break; case 7 : fprintf (fp, " 05w 23s !"); break; case 6 : fprintf (fp, " 02w 20s !"); break; case 5 : fprintf (fp, " 17s !"); break; case 4 : fprintf (fp, " 14s 23w !"); break; case 3 : fprintf (fp, " 11s 20w !"); break; case 2 : fprintf (fp, " 08s 17w !"); break; case 1 : fprintf (fp, " 05s 14w !"); break; case 0 : fprintf (fp, " 02s 11w !"); break; default : fprintf (fp, " ?? ?? !"); break; } } #define LINE_SP "+--------------+----------+----------+----------+----------+----------+----------+----------+" #define LINE_BX "! !" #define LINE_KM "! kilometer !" #define LINE_MN "! minutes !" #define LINE_RM "! remarks and !" #define LINE_OT "! other !" #define LINE_EX "! exercises !" #define LINE_BL " ! ! ! ! ! ! !" #define LINE_WK " sunday ! monday ! tuesday ! wednesday! thursday ! friday ! saturday !" void generate_run_sheet (int first_jul) { int qq; int qqdate; int qqyy; int qqmm; int qqdd; int qqq; int qqqdate; int qqqyy; int qqqmm; int qqqdd; int sheetnumber; char filename [64]; qqq = first_jul; sheetnumber = qqq / 21 - 116371; qqqdate = julian_day_at_noon_2_date (qqq); qqqyy = qqqdate / 10000; qqqmm = (qqqdate - 10000 * qqqyy) / 100; qqqdd = qqqdate % 100; if (0 > sheetnumber) /* avoid ill sheetnumbers prior to 1978-10-15 */ { sheetnumber = sheetnumber + 1000000; } sprintf (filename, "sheet.%i.%04i-%02i-%02i.txt\0", sheetnumber, qqqyy, qqqmm, qqqdd); if ((fp = fopen (filename, "w")) == (FILE *)NULL) { printf (" >>> Error writing %s\n", filename); } else { printf (" printing in file %s\n", filename); fprintf (fp, " LINUX - %i - COMPUTER\n\n", sheetnumber); fprintf (fp, " TRAINING CONTROL SHEET VERSION %s\n", HEADER_7); fprintf (fp, "%s\n", LINE_SP); qqdate = julian_day_at_noon_2_date (qqq); qqyy = qqdate / 10000; fprintf (fp, "! %4i !", qqyy); fprintf (fp, "%s\n", LINE_WK); fprintf (fp, "%s", LINE_BX); for (qq = qqq; qq < qqq + 7; qq++) { qqdate = julian_day_at_noon_2_date (qq); qqyy = qqdate / 10000; qqmm = (qqdate - 10000 * qqyy) / 100; qqdd = qqdate % 100; fprintf (fp, " %02i-%02i-%02i !", qqyy % 100, qqmm, qqdd); } fprintf (fp, "\n"); fprintf (fp, "%s\n", LINE_SP); fprintf (fp, "%s%s\n", LINE_BX, LINE_BL); fprintf (fp, "%s%s\n", LINE_KM, LINE_BL); fprintf (fp, "%s%s\n", LINE_BX, LINE_BL); fprintf (fp, "%s\n", LINE_SP); fprintf (fp, "%s%s\n", LINE_BX, LINE_BL); fprintf (fp, "%s%s\n", LINE_MN, LINE_BL); fprintf (fp, "%s%s\n", LINE_BX, LINE_BL); fprintf (fp, "%s\n", LINE_SP); fprintf (fp, "%s%s\n", LINE_RM, LINE_BL); fprintf (fp, "%s%s\n", LINE_OT, LINE_BL); fprintf (fp, "%s", LINE_EX); for (qq = qqq; qq < qqq + 7; qq++) { fprint_short_27h (qq); } fprintf (fp, "\n"); fprintf (fp, "%s\n", LINE_SP); fprintf (fp, "\n"); /**********************************************/ fprintf (fp, "%s\n", LINE_SP); qqdate = julian_day_at_noon_2_date (qqq + 7); qqyy = qqdate / 10000; fprintf (fp, "! %4i !", qqyy); fprintf (fp, "%s\n", LINE_WK); fprintf (fp, "%s", LINE_BX); for (qq = qqq + 7; qq < qqq + 14; qq++) { qqdate = julian_day_at_noon_2_date (qq); qqyy = qqdate / 10000; qqmm = (qqdate - 10000 * qqyy) / 100; qqdd = qqdate % 100; fprintf (fp, " %02i-%02i-%02i !", qqyy % 100, qqmm, qqdd); } fprintf (fp, "\n"); fprintf (fp, "%s\n", LINE_SP); fprintf (fp, "%s%s\n", LINE_BX, LINE_BL); fprintf (fp, "%s%s\n", LINE_KM, LINE_BL); fprintf (fp, "%s%s\n", LINE_BX, LINE_BL); fprintf (fp, "%s\n", LINE_SP); fprintf (fp, "%s%s\n", LINE_BX, LINE_BL); fprintf (fp, "%s%s\n", LINE_MN, LINE_BL); fprintf (fp, "%s%s\n", LINE_BX, LINE_BL); fprintf (fp, "%s\n", LINE_SP); fprintf (fp, "%s%s\n", LINE_RM, LINE_BL); fprintf (fp, "%s%s\n", LINE_OT, LINE_BL); fprintf (fp, "%s", LINE_EX); for (qq = qqq + 7; qq < qqq + 14; qq++) { fprint_short_27h (qq); } fprintf (fp, "\n"); fprintf (fp, "%s\n", LINE_SP); fprintf (fp, "\n"); /**********************************************/ fprintf (fp, "%s\n", LINE_SP); qqdate = julian_day_at_noon_2_date (qqq + 14); qqyy = qqdate / 10000; fprintf (fp, "! %4i !", qqyy); fprintf (fp, "%s\n", LINE_WK); fprintf (fp, "%s", LINE_BX); for (qq = qqq + 14; qq < qqq + 21; qq++) { qqdate = julian_day_at_noon_2_date (qq); qqyy = qqdate / 10000; qqmm = (qqdate - 10000 * qqyy) / 100; qqdd = qqdate % 100; fprintf (fp, " %02i-%02i-%02i !", qqyy % 100, qqmm, qqdd); } fprintf (fp, "\n"); fprintf (fp, "%s\n", LINE_SP); fprintf (fp, "%s%s\n", LINE_BX, LINE_BL); fprintf (fp, "%s%s\n", LINE_KM, LINE_BL); fprintf (fp, "%s%s\n", LINE_BX, LINE_BL); fprintf (fp, "%s\n", LINE_SP); fprintf (fp, "%s%s\n", LINE_BX, LINE_BL); fprintf (fp, "%s%s\n", LINE_MN, LINE_BL); fprintf (fp, "%s%s\n", LINE_BX, LINE_BL); fprintf (fp, "%s\n", LINE_SP); fprintf (fp, "%s%s\n", LINE_RM, LINE_BL); fprintf (fp, "%s%s\n", LINE_OT, LINE_BL); fprintf (fp, "%s", LINE_EX); for (qq = qqq + 14; qq < qqq + 21; qq++) { fprint_short_27h (qq); } fprintf (fp, "\n"); fprintf (fp, "%s\n", LINE_SP); } fclose (fp); } typedef enum { expecting_nothing, expecting_year, expecting_month, expecting_day, expecting_week, expecting_working } t_expect; main (int argc, char *argv[]) { int qqq; int qqqdate; int qqqyy; int qqqmm; int qqqdd; int qarg; int verbose; int test_mode; int table_mode; int run_sheet; int num_errors; int start_year, start_month, start_day; int final_year, final_month, final_day; int start_julian; int final_julian; int delta_julian; t_expect start_expect; t_expect final_expect; t_expect delta_expect; int delta_given_in_weeks; int unexpected_non_zero_number; num_errors = 0; verbose = 0; test_mode = 0; table_mode = 0; run_sheet = 0; start_year = 1951; start_month = 4; start_day = 17; final_year = 1951; final_month = 4; final_day = 17; start_julian = 0; final_julian = 0; delta_julian = 0; start_expect = expecting_nothing; final_expect = expecting_nothing; delta_expect = expecting_nothing; delta_given_in_weeks = 0; if (1 == argc) { printf ("\n"); printf (" Version %s", HEADER_7); printf ("\n"); printf (" usage: %s [options]\n", argv [0]); printf ("\n"); printf (" -v verbose\n"); printf (" --verbose verbose\n"); printf ("\n"); printf (" -t testmode\n"); printf (" --test testmode\n"); printf ("\n"); printf (" -s year month day start date\n"); printf (" --start year month day start date\n"); printf (" (-s / --start) is\n"); printf (" optional if start date comes first\n"); printf ("\n"); printf (" -f year month day final date\n"); printf (" --final year month day final date\n"); printf (" (-f / --final) is\n"); printf (" optional if final date comes second\n"); printf ("\n"); printf (" ( number 0 ends date entry )\n"); printf ("\n"); printf (" -d days period in days\n"); printf (" --days days period in days\n"); printf ("\n"); printf (" -w weeks period in weeks\n"); printf (" --weeks weeks period in weeks\n"); printf ("\n"); printf (" permissible combinations:\n"); printf ("\n"); printf (" any two of -s -f -d or -s -f -w\n"); printf ("\n"); printf (" -h generate 27 h timetable\n"); printf (" --h27 generate 27 h timetable\n"); printf ("\n"); printf (" -r generate training sheets\n"); printf (" for 3 weeks in a file.\n"); printf (" --run generate training sheets\n"); printf (" for 3 weeks in a file.\n"); printf (" (-w option accepts\n"); printf (" multiple of 3!)\n"); printf ("\n"); } else { for (qarg = 0; qarg < argc; qarg++) { if (((start_expect == expecting_nothing) || (start_expect == expecting_working)) && ((final_expect == expecting_nothing) || (final_expect == expecting_working)) && ((delta_expect == expecting_nothing) || (delta_expect == expecting_working))) { /* short command line treatment */ unexpected_non_zero_number = atoi (argv [qarg]); if (unexpected_non_zero_number) { if ((start_expect == expecting_nothing) && (final_expect == expecting_nothing) && ((delta_expect == expecting_nothing) || (delta_expect == expecting_working))) { start_year = unexpected_non_zero_number; start_expect = expecting_month; } else { if ((start_expect == expecting_working) && (final_expect == expecting_nothing) && ((delta_expect == expecting_nothing) || (delta_expect == expecting_working))) { final_year = unexpected_non_zero_number; final_expect = expecting_month; } } } /* the others won't match, and the other branch is not executed. */ if (!strcmp (argv [qarg], "-s")) { start_expect = expecting_year; } if (!strcmp (argv [qarg], "--start")) { start_expect = expecting_year; } if (!strcmp (argv [qarg], "-f")) { final_expect = expecting_year; } if (!strcmp (argv [qarg], "--final")) { final_expect = expecting_year; } if (!strcmp (argv [qarg], "-d")) { delta_expect = expecting_day; } if (!strcmp (argv [qarg], "--day")) { delta_expect = expecting_day; } if (!strcmp (argv [qarg], "-w")) { delta_expect = expecting_week; delta_given_in_weeks = 1; } if (!strcmp (argv [qarg], "--week")) { delta_expect = expecting_week; delta_given_in_weeks = 1; } if (!strcmp (argv [qarg], "-h")) { table_mode++; } if (!strcmp (argv [qarg], "--h27")) { table_mode++; } if (!strcmp (argv [qarg], "-r")) { run_sheet++; } if (!strcmp (argv [qarg], "--run")) { run_sheet++; } if (!strcmp (argv [qarg], "-v")) { verbose++; } if (!strcmp (argv [qarg], "--verbose")) { verbose++; } if (!strcmp (argv [qarg], "-t")) { test_mode++; printf (" test mode level %i\n", test_mode); } if (!strcmp (argv [qarg], "--test")) { test_mode++; printf (" test mode level %i\n", test_mode); } if (verbose > 0) { printf (">>> argv [%i] = %s\n", qarg, argv [qarg]); } } else /* waiting for a number */ { if (start_expect == expecting_day) { start_day = atoi (argv [qarg]); start_expect = expecting_working; } if (start_expect == expecting_month) { start_month = atoi (argv [qarg]); start_expect = expecting_day; } if (start_expect == expecting_year) { start_year = atoi (argv [qarg]); start_expect = expecting_month; } if (final_expect == expecting_day) { final_day = atoi (argv [qarg]); final_expect = expecting_working; } if (final_expect == expecting_month) { final_month = atoi (argv [qarg]); final_expect = expecting_day; } if (final_expect == expecting_year) { final_year = atoi (argv [qarg]); final_expect = expecting_month; } if (delta_expect == expecting_day) { delta_julian = atoi (argv [qarg]); delta_expect = expecting_working; } if (delta_expect == expecting_week) { delta_julian = atoi (argv [qarg]) * 7; delta_expect = expecting_working; } if (verbose > 0) { printf (">>> argv [%i] = %s\n", qarg, argv [qarg]); } } } /* for */ } /***********************************************************/ /* */ /* Interpretation of command line ready. Two of the three */ /* start_date, final_date and delta_date must be given. */ /* Then, the standard situation start_date and final_date */ /* given is computed, and we go on from this */ /* "normalized situation" */ /* */ /* Testmode, however, aborts after self-test. */ /* */ /***********************************************************/ if (test_mode) { main_test (); main_error_test (); return; } /***********************************************************/ /* */ /* Normalization. Errors are detected further down. */ /* */ /***********************************************************/ if ((start_expect == expecting_working) && (!(final_expect == expecting_working)) && (delta_expect == expecting_working)) { start_julian = date_2_julian_day_at_noon (start_year, start_month, start_day); final_julian = start_julian + delta_julian; final_julian = julian_day_at_noon_2_date (final_julian); /* misuse final_julian */ final_year = final_julian / 10000; /* misuse final_julian */ final_month = (final_julian - 10000 * final_year) / 100; /* misuse final_julian */ final_day = final_julian % 100; /* misuse final_julian */ final_julian = start_julian + delta_julian; /* recomp final_julian */ final_expect = expecting_working; } else { if (!(start_expect == expecting_working) && ((final_expect == expecting_working)) && (delta_expect == expecting_working)) { final_julian = date_2_julian_day_at_noon (final_year, final_month, final_day); start_julian = final_julian - delta_julian; start_julian = julian_day_at_noon_2_date (start_julian); /* misuse start_julian */ start_year = start_julian / 10000; /* misuse start_julian */ start_month = (start_julian - 10000 * start_year) / 100; /* misuse start_julian */ start_day = start_julian % 100; /* misuse start_julian */ start_julian = final_julian - delta_julian; /* recomp start_julian */ start_expect = expecting_working; } } /***********************************************************/ /* */ /* Final computation. */ /* */ /***********************************************************/ if (start_expect == expecting_working) { printf ("start date = %04i-%02i-%02i", start_year, start_month, start_day); start_julian = date_2_julian_day_at_noon (start_year, start_month, start_day); if (0 == start_julian) { printf (" ill date!"); num_errors++; } else { print_week_day (start_julian); print_27h (start_julian); printf (" julian =%9i ", start_julian); } printf ("\n"); } if (final_expect == expecting_working) { printf ("final date = %04i-%02i-%02i", final_year, final_month, final_day); final_julian = date_2_julian_day_at_noon (final_year, final_month, final_day); if (0 == final_julian) { printf (" ill date!"); num_errors++; } else { print_week_day (final_julian); print_27h (final_julian); printf (" julian =%9i ", final_julian); } printf ("\n"); } if ((0 == num_errors) && (start_expect == expecting_working) && (final_expect == expecting_working)) { delta_julian = final_julian - start_julian; printf (" delta julian =%9i \n", delta_julian); } if ((table_mode) && (0 == num_errors) && (delta_julian > 1)) { printf ("\n"); for (qqq = start_julian; qqq < final_julian + 1; qqq++) { qqqdate = julian_day_at_noon_2_date (qqq); qqqyy = qqqdate / 10000; qqqmm = (qqqdate - 10000 * qqqyy) / 100; qqqdd = qqqdate % 100; printf (" date = %04i-%02i-%02i", qqqyy, qqqmm, qqqdd); print_week_day (qqq); print_27h (qqq); printf (" julian =%9i ", qqq); printf ("\n"); } } if ((table_mode) && (0 == num_errors) && (delta_julian < -1)) { printf ("\n"); for (qqq = start_julian; qqq > final_julian - 1; qqq--) { qqqdate = julian_day_at_noon_2_date (qqq); qqqyy = qqqdate / 10000; qqqmm = (qqqdate - 10000 * qqqyy) / 100; qqqdd = qqqdate % 100; printf (" date = %04i-%02i-%02i", qqqyy, qqqmm, qqqdd); print_week_day (qqq); print_27h (qqq); printf (" julian =%9i ", qqq); printf ("\n"); } } if (run_sheet) { if ((delta_julian > 0) && (((delta_julian + 1 - delta_given_in_weeks) % 21) == 0 ) && ((start_julian % 21) == 20)) { printf (" generating %i run sheets:\n\n", (delta_julian + 1) / 21); for (qqq = start_julian; qqq < final_julian + 1 - delta_given_in_weeks; qqq = qqq + 21) { generate_run_sheet (qqq); } } else { if (!(delta_julian > 0)) { printf (" no negative interval.\n"); } /* dirty! */ if (!(((delta_julian + 1 - delta_given_in_weeks) % 21) == 0 )) { printf (" watch 3 week pattern.\n"); } if (!((start_julian % 21) == 20)) { printf (" must start on third sunday.\n"); } } } } -----BEGIN PGP SIGNATURE----- Version: 2.6.3i Charset: noconv iQEVAwUBOr3hjNCpYi1kuGdhAQFPkwgAjQK4TIwry3JfYqEuU9pvk2WqtjRskEL7 6yJPIrHwBIjNjLMcSGbppJ7KWNugT4ibzZJ5p/wslioxAARjRROtALQHcuU4SpiU A5tqBQkzDXymaUl8upeggFMlWXMVd/nApd8gGkTiObWupNLngdPanT6MpQ63ZZAl 2UlRyFZMbEHi/UX0fQ5Z1kSvNEjxJbDn6IzSYFqFSYT8oXEtY3FXVK9htXZYl8wA +DKoyv5JZy/NaxSeVqJ1dO22Tb0glb8JaIcJ3Xein6YsHTdUEhIfmJd4HQbDfy7g p4AtRAH58rrHMNN7+1ixvvOvc94ld+JR4cGah/6B8v6vLA6riRmI6g== =AvhJ -----END PGP SIGNATURE-----