Index: user/edwin/calendar/calendars/calendar.dutch =================================================================== --- user/edwin/calendar/calendars/calendar.dutch (revision 211723) +++ user/edwin/calendar/calendars/calendar.dutch (revision 211724) @@ -1,79 +1,79 @@ /* * $FreeBSD$ * * Originally submitted by Edwin Groothuis */ LANG=nl_NL.ISO8859-15 Easter=Pasen /* * Feestdagen */ jan/01 Nieuwjaar jan/06 Driekoningen apr/01 1 april apr/30 Koninginnedag mei/01 Dag van de Arbeid mei/04 Dodenherdenking mei/05 Bevrijdingsdag okt/04 Dierendag -nov/01 Allerheilingen +nov/01 Allerheiligen nov/02 Allerzielen nov/11 Sint Maarten nov/11 Elfde-van-de-elfde dec/05 Sinterklaas avond dec/15 Koninkrijksdag dec/24 Kerstavond dec/25 Eerste kerstdag dec/26 Tweede kerstdag dec/28 Feest der Onnozele Kinderen dec/31 Oudjaar /* * Pasen gerelateerd */ Pasen-50 Carnaval Pasen-49 Carnaval Pasen-48 Carnaval Pasen-47 Carnaval (Vastenavond) Pasen-46 Aswoensdag Pasen-7 Palmzondag Pasen-3 Witte Donderdag Pasen-2 Goede vrijdag Pasen-1 Stille zaterdag Pasen Eerste paasdag Pasen+1 Tweede paasdag Pasen+39 Hemelvaartsdag Pasen+49 Eerste Pinksterdag Pasen+50 Tweede Pinksterdag Pasen+56 Trinitatis /* * Misc */ mei/SunSecond Moederdag jun/SunThird Vaderdag sep/TueThird Prinsjesdag /* * Het koningshuis */ jan/19 Prinses Margriet (1943) jan/31 Koningin Beatrix (1938) feb/17 Prins Willem III (1817 - 1890) feb/18 Prinses Christina (1947) apr/10 Prinses Ariane (2007) apr/19 Prins Hendrik (1876 - 1934) apr/27 Kroonprins Willem Alexander (1967) apr/30 Koningin Juliana (1909 - 2004) apr/30 Mr. Pieter van Vollenhoven (1939) mei/17 Prinses Maxima (1971) jun/26 Prinses Alexia (2005) jun/29 Prins Bernhard (1911 - 2004) aug/05 Prinses Irene (1939) aug/31 Prinses Wilhelmina (1880 - 1962) sep/06 Prins Claus (1925 - 2002) sep/25 Prins Johan Friso (1968) okt/11 Prins Constantijn (1969) dec/07 Prinses Catharina-Amalia (2003) Index: user/edwin/calendar/calendars/calendar.freebsd =================================================================== --- user/edwin/calendar/calendars/calendar.freebsd (revision 211723) +++ user/edwin/calendar/calendars/calendar.freebsd (revision 211724) @@ -1,313 +1,319 @@ /* * FreeBSD * * $FreeBSD$ */ #ifndef _calendar_freebsd_ #define _calendar_freebsd_ 01/01 Alexander Langer born in Duesseldorf, Nordrhein-Westfalen, Germany, 1981 01/02 Ion-Mihai "IOnut" Tetcu born in Bucharest, Romania, 1980 01/02 Patrick Li born in Beijing, People's Republic of China, 1985 01/03 Tetsurou Okazaki born in Mobara, Chiba, Japan, 1972 01/04 Hiroyuki Hanai born in Kagawa pre., Japan, 1969 01/06 Philippe Audeoud born in Bretigny-Sur-Orge, France, 1980 01/08 Michael L. Hostbaek born in Copenhagen, Denmark, 1977 01/10 Jean-Yves Lefort born in Charleroi, Belgium, 1980 01/12 Yen-Ming Lee born in Taipei, Taiwan, Republic of China, 1977 01/12 Ying-Chieh Liao born in Taipei, Taiwan, Republic of China, 1979 01/14 Yi-Jheng Lin born in Taichung, Taiwan, Republic of China, 1985 01/16 Ariff Abdullah born in Kuala Lumpur, Malaysia, 1978 01/16 Dmitry Sivachenko born in Moscow, USSR, 1978 01/16 Vanilla I. Shu born in Taipei, Taiwan, Republic of China, 1978 01/18 Dejan Lesjak born in Ljubljana, Slovenia, Yugoslavia, 1977 01/19 Marshall Kirk McKusick born in Wilmington, Delaware, United States, 1954 01/19 Marcelo S. Araujo born in Joinville, Santa Catarina, Brazil, 1981 01/19 Ruslan Ermilov born in Simferopol, USSR, 1974 01/20 Poul-Henning Kamp born in Korsoer, Denmark, 1966 01/22 Johann Visagie born in Cape Town, South Africa, 1970 01/23 Hideyuki KURASHINA born in Niigata, Japan, 1982 01/24 Matteo Riondato born in Padova, Italy, 1986 01/24 Fabien Thomas born in Avignon, France, 1971 01/25 Bernd Walter born in Moers, Nordrhein-Westfalen, Germany, 1974 01/26 Andrew Gallatin born in Buffalo, New York, United States, 1970 01/27 Nick Sayer born in San Diego, California, United States, 1968 01/27 Jacques Anthony Vidrine born in Baton Rouge, Louisiana, United States, 1971 01/31 Hidetoshi Shimokawa born in Yokohama, Kanagawa, Japan, 1970 02/01 Doug Rabson born in London, England, 1966 02/01 Nicola Vitale born in Busto Arsizio, Varese, Italy, 1976 02/01 Paul Saab born in Champaign-Urbana, Illinois, United States, 1978 02/01 Martin Wilke born in Ludwigsfelde, Brandenburg, Germany, 1980 02/01 Christian Brueffer born in Gronau, Nordrhein-Westfalen, Germany, 1982 02/01 Steven Kreuzer born in Oceanside, New York, 1982 02/01 Juli Mallett born in Washington, Pennsylvania, United States, 1985 02/02 Michael W Lucas born in Detroit, Michigan, United States, 1967 02/02 Diomidis D. Spinellis born in Athens, Greece, 1967 02/02 Yoichi Nakayama born in Tsu, Mie, Japan, 1976 02/05 Frank Laszlo born in Howell, Michigan, United States, 1983 02/10 David Greenman born in Portland, Oregon, United States, 1968 02/10 Paul Richards born in Ammanford, Carmarthenshire, United Kingdom, 1968 02/10 Simon Barner born in Rosenheim, Bayern, Germany, 1980 02/13 Jesper Skriver born in Aarhus, Denmark, 1975 02/13 Andrey Slusar born in Odessa, USSR, 1979 02/13 David W. Chapman Jr. born in Bethel, Connecticut, United States, 1981 02/14 Erwin Lansing born in 's-Hertogenbosch, the Netherlands, 1975 02/14 Manolis Kiagias born in Chania, Greece, 1970 02/14 Martin Blapp born in Olten, Switzerland, 1976 02/19 Murray Stokely born in Jacksonville, Florida, United States, 1979 02/20 Anders Nordby born in Oslo, Norway, 1976 02/21 Alexey Zelkin born in Simferopol, Ukraine, 1978 02/22 Brooks Davis born in Longview, Washington, United States, 1976 02/22 Jake Burkholder born in Maynooth, Ontario, Canada, 1979 02/23 Peter Wemm born in Perth, Western Australia, Australia, 1971 02/23 Mathieu Arnold born in Champigny sur Marne, Val de Marne, France, 1978 02/24 Johan Karlsson born in Mariannelund, Sweden, 1974 02/24 Colin Percival born in Burnaby, Canada, 1981 02/26 Pietro Cerutti born in Faido, Switzerland, 1984 02/28 Daichi GOTO born in Shimizu Suntou, Shizuoka, Japan, 1980 03/01 Hye-Shik Chang born in Daejeon, Republic of Korea, 1980 03/02 Cy Schubert born in Edmonton, Alberta, Canada, 1956 03/03 Sergey Matveychuk born in Moscow, Russian Federation, 1973 03/03 Doug White born in Eugene, Oregon, United States, 1977 03/03 Gordon Tetlow born in Reno, Nevada, United States, 1978 03/04 Oleksandr Tymoshenko born in Chernihiv, Ukraine, 1980 +03/05 Baptiste Daroussin born in Beauvais, France, 1980 03/05 Philip Paeps born in Leuven, Belgium, 1983 03/05 Ulf Lilleengen born in Hamar, Norway, 1985 03/06 Christopher Piazza born in Kamloops, British Columbia, Canada, 1981 03/07 Michael P. Pritchard born in Los Angeles, California, United States, 1964 03/07 Giorgos Keramidas born in Athens, Greece, 1976 03/10 Andreas Klemm born in Duesseldorf, Nordrhein-Westfalen, Germany, 1963 03/11 Soeren Straarup born in Andst, Denmark, 1978 03/12 Greg Lewis born in Adelaide, South Australia, Australia, 1969 03/13 Alexander Leidinger born in Neunkirchen, Saarland, Germany, 1976 03/13 Will Andrews born in Pontiac, Michigan, United States, 1982 +03/14 Bernhard Froehlich born in Graz, Styria, Austria, 1985 03/15 Paolo Pisati born in Lodi, Italy, 1977 03/15 Brian Fundakowski Feldman born in Alexandria, Virginia, United States, 1983 03/17 Michael Smith born in Bankstown, New South Wales, Australia, 1971 03/17 Alexander Motin born in Simferopol, Ukraine, 1979 03/18 Koop Mast born in Dokkum, the Netherlands, 1981 03/19 Mikhail Teterin born in Kyiv, Ukraine, 1972 03/20 MANTANI Nobutaka born in Hiroshima, Japan, 1978 03/20 Cameron Grant died in Hemel Hempstead, United Kingdom, 2005 03/20 Henrik Brix Andersen born in Aarhus, Denmark, 1978 +03/20 Joseph S. Atkinson born in Batesville, Arkansas, United States, 1977 03/22 Brad Davis born in Farmington, New Mexico, United States, 1983 03/23 Daniel C. Sobral born in Brasilia, Distrito Federal, Brazil, 1971 03/23 Benno Rice born in Adelaide, South Australia, Australia, 1977 03/24 Marcel Moolenaar born in Hilversum, the Netherlands, 1968 03/24 Emanuel Haupt born in Zurich, Switzerland, 1979 03/25 Andrew R. Reiter born in Springfield, Massachusetts, United States, 1980 03/27 Josef El-Rayes born in Linz, Austria, 1982 03/28 Sean C. Farley born in Indianapolis, Indiana, United States, 1970 03/29 Thierry Thomas born in Luxeuil les Bains, France, 1961 04/01 Matthew Jacob born in San Francisco, California, United States, 1958 04/01 Bill Fenner born in Bellefonte, Pennsylvania, United States, 1971 04/01 Peter Edwards born in Dublin, Ireland, 1973 04/03 Hellmuth Michaelis born in Kiel, Schleswig-Holstein, Germany, 1958 04/03 Tong Liu born in Beijing, People's Republic of China, 1981 04/03 Gabor Pali born in Kunhegyes, Hungary, 1982 04/05 Stacey Son born in Burley, Idaho, United States. 1967 04/08 Jordan K. Hubbard born in Honolulu, Hawaii, United States, 1963 04/09 Ceri Davies born in Haverfordwest, Pembrokeshire, United Kingdom, 1976 04/11 Bruce A. Mah born in Fresno, California, United States, 1969 04/12 Patrick Gardella born in Columbus, Ohio, United States, 1967 04/12 Ed Schouten born in Oss, the Netherlands, 1986 04/13 Oliver Braun born in Nuremberg, Bavaria, Germany, 1972 04/14 Crist J. Clark born in Milwaukee, Wisconsin, United States, 1970 04/15 David Malone born in Dublin, Ireland, 1973 04/17 Dryice Liu born in Jinan, Shandong, China, 1975 04/22 Joerg Wunsch born in Dresden, Sachsen, Germany, 1962 04/22 Jun Kuriyama born in Matsue, Shimane, Japan, 1973 04/26 Rene Ladan born in Geldrop, the Netherlands, 1980 04/29 Adam Weinberger born in Berkeley, California, United States, 1980 04/29 Eric Anholt born in Portland, Oregon, United States, 1983 05/01 Randall Stewart born in Spokane, Washington, United States, 1959 05/02 Wojciech A. Koszek born in Czestochowa, Poland, 1987 05/03 Brian Dean born in Elkins, West Virginia, United States, 1966 05/03 Robert Nicholas Maxwell Watson born in Harrow, Middlesex, United Kingdom, 1977 05/04 Denis Peplin born in Nizhniy Novgorod, Russian Federation, 1977 05/08 Kirill Ponomarew born in Volgograd, Russian Federation, 1977 05/08 Sean Kelly born in Walnut Creek, California, United States, 1982 05/09 Daniel Eischen born in Syracuse, New York, United States, 1963 05/09 Aaron Dalton born in Boise, Idaho, United States, 1973 05/10 Markus Brueffer born in Gronau, Nordrhein-Westfalen, Germany, 1977 05/11 Jesus Rodriguez born in Barcelona, Spain, 1972 05/11 Roman Kurakin born in Moscow, USSR, 1979 05/13 Pete Fritchman born in Lansdale, Pennsylvania, United States, 1983 05/14 Tatsumi Hosokawa born in Tokyo, Japan, 1968 05/14 Shigeyuku Fukushima born in Osaka, Japan, 1974 05/16 Johann Kois born in Wolfsberg, Austria, 1975 05/16 Marcus Alves Grando born in Florianopolis, Santa Catarina, Brazil, 1979 05/17 Thomas Abthorpe born in Port Arthur, Ontario, Canada, 1968 05/19 Philippe Charnier born in Fontainebleau, France, 1966 05/19 Ian Dowse born in Dublin, Ireland, 1975 05/21 Kris Kennaway born in Winnipeg, Manitoba, Canada, 1978 05/22 Clive Tong-I Lin born in Changhua, Taiwan, Republic of China, 1978 05/22 Michael Bushkov born in Rostov-on-Don, Russia, 1985 05/22 Rui Paulo , born in Evora, Portugal, 1986 05/23 Munechika Sumikawa born in Osaka, Osaka, Japan, 1972 05/24 Duncan McLennan Barclay born in London, Middlesex, United Kingdom, 1970 05/24 Oliver Lehmann born in Karlsburg, Germany, 1981 05/25 Roman Divacky born in Brno, Czech Republic, 1983 05/25 Tom Rhodes born in Ellwood City, Pennsylvania, United States, 1981 05/26 Jim Pirzyk born in Chicago, Illinois, United States, 1968 05/27 Ollivier Robert born in Paris, France, 1967 05/29 Wilko Bulte born in Arnhem, the Netherlands, 1965 05/29 Seigo Tanimura born in Kitakyushu, Fukuoka, Japan, 1976 05/31 Ville Skytta born in Helsinki, Finland, 1974 06/02 Jean-Marc Zucconi born in Pontarlier, France, 1954 06/02 Alexander Botero-Lowry born in Austin, TX, USA, 1986 06/03 CHOI Junho born in Seoul, Korea, 1974 06/04 Julian Elischer born in Perth, Australia, 1959 06/04 Jason Evans born in Greeley, Colorado, United States, 1973 06/04 Justin Gibbs born in San Pedro, California, United States, 1973 06/04 Thomas Moestl born in Braunschweig, Niedersachsen, Germany, 1980 06/06 Sergei Kolobov born in Karpinsk, Russian Federation, 1972 06/06 Alan Eldridge died in Denver, Colorado, 2003 06/07 Benjamin Close born in Adelaide, Australia, 1978 06/07 Jimmy Olgeni born in Milano, Italy, 1976 06/17 Tilman Linneweh born in Weinheim, Baden-Wuertemberg, Germany, 1978 06/18 Li-Wen Hsu born in Taipei, Taiwan, Republic of China, 1984 06/18 Roman Bogorodskiy born in Saratov, Russian Federation, 1986 06/19 Charlie Root born in Portland, Oregon, United States, 1993 06/21 Ganbold Tsagaankhuu born in Ulaanbaatar, Mongolia, 1971 06/21 Niels Heinen born in Markelo, the Netherlands, 1978 06/24 Chris Faulhaber born in Springfield, Illinois, United States, 1971 06/26 Brian Somers born in Dundrum, Dublin, Ireland, 1967 06/28 Mark Santcroos born in Rotterdam, the Netherlands, 1979 06/28 Xin Li born in Beijing, People's Republic of China, 1982 06/29 Wilfredo Sanchez Vega born in Majaguez, Puerto Rico, United States, 1972 06/29 Daniel Harris born in Lubbock, Texas, United States, 1985 06/29 Andrew Pantyukhin born in Moscow, Russian Federation, 1985 06/30 Guido van Rooij born in Best, Noord-Brabant, the Netherlands, 1965 07/01 Matthew Dillon born in San Francisco, California, United States, 1966 07/02 Mark Christopher Ovens born in Preston, Lancashire, United Kingdom, 1958 07/02 Vasil Venelinov Dimov born in Shumen, Bulgaria, 1982 07/04 Motoyuki Konno born in Musashino, Tokyo, Japan, 1969 07/04 Florent Thoumie born in Montmorency, Val d'Oise, France, 1982 07/07 Andrew Thompson born in Lower Hutt, Wellington, New Zealand, 1979 07/07 Maxime Henrion born in Metz, France, 1981 07/07 George Reid born in Frimley, Hampshire, United Kingdom, 1983 07/10 Jung-uk Kim born in Seoul, Korea, 1971 07/10 Justin Seger born in Harvard, Massachusetts, United States, 1981 07/10 David Schultz born in Oakland, California, United States, 1982 07/11 Jesus R. Camou born in Hermosillo, Sonora, Mexico, 1983 07/15 Gary Jennejohn born in Rochester, New York, United States, 1950 07/16 Suleiman Souhlal born in Roma, Italy, 1983 07/17 Michael Chin-Yuan Wu born in Taipei, Taiwan, Republic of China, 1980 07/19 Masafumi NAKANE born in Okazaki, Aichi, Japan, 1972 07/19 Simon L. Nielsen born in Copenhagen, Denmark, 1980 07/19 Gleb Smirnoff born in Kharkov, USSR, 1981 +07/20 Andrey V. Elsukov born in Kotelnich, Russian Federation, 1981 07/22 James Housley born in Chicago, Illinois, United States, 1965 07/22 Jens Schweikhardt born in Waiblingen, Baden-Wuerttemberg, Germany, 1967 07/22 Lukas Ertl born in Weissenbach/Enns, Steiermark, Austria, 1976 07/23 Sergey A. Osokin born in Krasnogorsky, Stepnogorsk, Akmolinskaya region, Kazakhstan, 1972 07/24 Alexander Nedotsukov born in Ulyanovsk, Russian Federation, 1974 07/28 Jim Mock born in Bethlehem, Pennsylvania, United States, 1974 07/28 Tom Hukins born in Manchester, United Kingdom, 1976 07/29 Dirk Meyer born in Kassel, Hessen, Germany, 1965 07/29 Felippe M. Motta born in Maceio, Alagoas, Brazil, 1988 08/02 Gabor Kovesdan born in Budapest, Hungary, 1987 08/03 Peter Holm born in Copenhagen, Denmark, 1955 08/05 Alfred Perlstein born in Brooklyn, New York, United States, 1978 08/06 Anton Berezin born in Dnepropetrovsk, Ukraine, 1970 08/06 John-Mark Gurney born in Detroit, Michigan, United States, 1978 08/07 Jonathan Mini born in San Mateo, California, United States, 1979 08/10 Peter Pentchev born in Sofia, Bulgaria, 1977 08/12 Joe Marcus Clarke born in Lakeland, Florida, United States, 1976 08/12 Max Brazhnikov born in Leningradskaya, Russia, 1979 08/14 Stefan Esser born in Cologne, Nordrhein-Westfalen, Germany, 1961 08/17 Olivier Houchard born in Nancy, France, 1980 08/19 Pav Lucistnik born in Kutna Hora, Czech Republic, 1980 08/19 Chin-San Huang born in Yi-Lan, Taiwan, Republic of China, 1979 08/20 Michael Heffner born in Cleona, Pennsylvania, United States, 1981 08/24 Mark Linimon born in Houston, Texas, United States, 1955 08/25 Jean Milanez Melo born in Divinopolis, Minas Gerais, Brazil, 1982 08/25 Beech Rintoul born in Oakland, California, United States, 1952 08/26 Dima Ruban born in Nalchik, USSR, 1970 08/26 Marc Fonvieille born in Avignon, France, 1972 08/26 Herve Quiroz born in Aix-en-Provence, France, 1977 08/27 Andrey Chernov born in Moscow, USSR, 1966 08/27 Tony Finch born in London, United Kingdom, 1974 08/27 Michael Johnson born in Morganton, North Carolina, United States, 1980 08/28 Norikatsu Shigemura born in Fujisawa, Kanagawa, Japan, 1974 08/29 Thomas Gellekum born in Moenchengladbach, Nordrhein-Westfalen, Germany, 1967 08/29 Max Laier born in Karlsruhe, Germany, 1981 09/01 Pyun YongHyeon born in Kimcheon, Korea, 1968 09/03 Max Khon born in Novosibirsk, USSR, 1976 09/03 Cheng-Lung Sung born in Taipei, Taiwan, Republic of China, 1977 09/05 Mark Robert Vaughan Murray born in Harare, Mashonaland, Zimbabwe, 1961 09/05 Adrian Harold Chadd born in Perth, Western Australia, Australia, 1979 09/07 Tim Bishop born in Cornwall, United Kingdom, 1978 09/08 Boris Samorodov born in Krasnodar, Russian Federation, 1963 09/09 Yoshio Mita born in Hiroshima, Japan, 1972 09/10 Wesley R. Peters born in Hartford, Alabama, United States, 1961 09/12 Weongyo Jeong born in Haman, Korea, 1980 09/12 William C. Fumerola II born in Detroit, Michigan, United States, 1981 09/12 Benedict Christopher Reuschling born in Darmstadt, Germany, 1981 09/15 Dima Panov born in Khabarovsk, Russian Federation, 1978 09/17 Maxim Bolotin born in Rostov-on-Don, Russian Federation, 1976 +09/18 Matthew Fleming born in Cleveland, Ohio, United States, 1975 09/20 Kevin Lo born in Taipei, Taiwan, Republic of China, 1972 09/27 Neil Blakey-Milner born in Port Elizabeth, South Africa, 1978 09/27 Renato Botelho born in Araras, Sao Paulo, Brazil, 1979 09/28 Greg Lehey born in Melbourne, Victoria, Australia, 1948 09/28 Alex Dupre born in Milano, Italy, 1980 09/29 Matthew Hunt born in Johnstown, Pennsylvania, United States, 1976 09/30 Hiten M. Pandya born in Dar-es-Salaam, Tanzania, East Africa, 1986 10/05 Hiroki Sato born in Yamagata, Japan, 1977 10/05 Chris Costello born in Houston, Texas, United States, 1985 10/09 Stefan Walter born in Werne, Nordrhein-Westfalen, 1978 10/12 Pawel Jakub Dawidek born in Radzyn Podlaski, Poland, 1980 10/15 Maxim Konovalov born in Khabarovsk, USSR, 1973 10/16 Remko Lodder born in Rotterdam, the Netherlands, 1983 10/17 Maho NAKATA born in Osaka, Japan, 1974 10/18 Sheldon Hearn born in Cape Town, Western Cape, South Africa, 1974 10/19 Nicholas Souchu born in Suresnes, Hauts-de-Seine, France, 1972 10/19 Nick Barkas born in Longview, Washington, United States, 1981 10/20 Joel Dahl born in Lidkoping, Sweden, 1983 10/20 Dmitry Marakasov born in Moscow, Russian Federation, 1984 10/21 Dan Moschuk born in Halifax, Nova Scotia, Canada, 1980 10/21 Ben Smithurst born in Sheffield, South Yorkshire, United Kingdom, 1981 10/22 Jean-Sebastien Pedron born in Redon, Ille-et-Vilaine, France, 1980 10/23 Mario Sergio Fujikawa Ferreira born in Brasilia, Distrito Federal, Brazil, 1976 10/25 Eric Melville born in Los Gatos, California, United States, 1980 10/26 Philip M. Gollucci born in Silver Spring, Maryland, United States, 1979 10/27 Takanori Watanabe born in Numazu, Shizuoka, Japan, 1972 11/05 M. Warner Losh born in Kansas City, Kansas, United States, 1966 11/09 Coleman Kane born in Cincinnati, OH, United States, 1980 11/09 Antoine Brodin born in Bagnolet, France, 1981 11/10 Gregory Neil Shapiro born in Providence, Rhode Island, United States, 1970 11/13 John Baldwin born in Stuart, Virginia, United States, 1977 11/15 Lars Engels born in Hilden, Nordrhein-Westfalen, Germany, 1980 +11/15 Tijl Coosemans born in Duffel, Belgium, 1983 11/16 Jose Maria Alcaide Salinas born in Madrid, Spain, 1962 11/17 Ralf S. Engelschall born in Dachau, Bavaria, Germany, 1972 11/18 Thomas Quinot born in Paris, France, 1977 11/19 Konstantin Belousov born in Kiev, USSR, 1972 11/20 Dmitry Morozovsky born in Moscow, USSR, 1968 11/20 Gavin Atkinson born in Middlesbrough, United Kingdom, 1979 11/23 Josef Lawrence Karthauser born in Pembury, Kent, United Kingdom, 1972 11/24 Andrey Zakhvatov born in Chelyabinsk, Russian Federation, 1974 11/24 Daniel Gerzo born in Bratislava, Slovakia, 1986 11/28 Nik Clayton born in Peterborough, United Kingdom, 1973 11/28 Stanislav Sedov born in Chelyabinsk, USSR, 1985 12/01 Hajimu Umemoto born in Nara, Japan, 1961 12/01 Alexey Dokuchaev born in Magadan, USSR, 1980 12/02 Ermal LuГi born in Tirane, Albania, 1980 12/03 Diane Bruce born in Ottawa, Ontario, Canada, 1952 12/05 Ivan Voras born in Slavonski Brod, Croatia, 1981 12/06 Stefan Farfeleder born in Wien, Austria, 1980 12/15 James FitzGibbon born in Amersham, Buckinghamshire, United Kingdom, 1974 12/15 Timur I. Bakeyev born in Kazan, Republic of Tatarstan, USSR, 1974 12/18 Chris Timmons born in Ellensburg, Washington, United States, 1964 12/18 Dag-Erling Smorgrav born in Brussels, Belgium, 1977 12/18 Semen Ustimenko born in Novosibirsk, Russian Federation, 1979 12/21 Rong-En Fan born in Taipei, Taiwan, Republic of China, 1982 12/22 Maxim Sobolev born in Dnepropetrovsk, Ukraine, 1976 12/23 Sean Chittenden born in Seattle, Washington, United States, 1979 12/23 Alejandro Pulver born in Buenos Aires, Argentina, 1989 12/28 Soren Schmidt born in Maribo, Denmark, 1960 12/28 Ade Lovett born in London, England, 1969 12/28 Marius Strobl born in Cham, Bavaria, Germany, 1978 12/31 Edwin Groothuis born in Geldrop, the Netherlands, 1970 #endif /* !_calendar_freebsd_ */ Index: user/edwin/calendar/calendars/calendar.history =================================================================== --- user/edwin/calendar/calendars/calendar.history (revision 211723) +++ user/edwin/calendar/calendars/calendar.history (revision 211724) @@ -1,476 +1,475 @@ /* * History * * $FreeBSD$ */ #ifndef _calendar_history_ #define _calendar_history_ 01/01 Anniversary of the Triumph of the Revolution in Cuba 01/01 Castro expels Cuban President Batista, 1959 01/01 Churchill delivers his "Iron Curtain" speech, 1947 01/01 First Rose Bowl; Michigan 49 - Stanford 0, 1902 01/04 Quadrantid meteor shower (look north) 01/05 -50 degrees F, Strawberry UT, 1913 01/05 The FCC hears the first demonstration of FM radio, 1940 01/05 Twelfth night 01/06 Millard Fillmore's birthday (let's party!) 01/08 Battle of New Orleans 01/09 Plough Monday 01/10 First meeting of United Nations General Assembly in London, 1946 01/10 Thomas Paine's Common Sense published, 1776 01/11 Anniversary of the Peoples Republic of Albania 01/11 De Hostos' Birthday in Puerto Rico 01/11 Milk delivered in bottles for first time, 1878 01/11 Prithvi Jayanti in Nepal 01/11 Surgeon General condemned cigarettes, 1964 01/11 The Whiskey-A-Go-Go opens on Sunset Boulevard in Los Angeles, 1963 01/14 The first "Be-In" is held in Golden Gate Park, 1967 01/16 Prohibition begins, 1920 01/18 Grey whale migration, California 01/20 St. Agnes Eve (Ah, bitter chill it was...) 01/24 Eskimo Pie patented by Christian Nelson, 1922 01/24 Gold discovered in California at Sutter's Mill, 1848 01/26 Sydney, New South Wales settled, 1788 01/27 Grissom, White and Chaffe burned to death in Apollo 1, 1967 01/27 Vietnam War cease-fire signed, 1973 01/28 First ski tow, Woodstock VT, 1914 01/28 Space Shuttle Challenger (51-L) explodes 74 seconds after liftoff killing Scobee, Smith, McNair, Resnick, Jarvis, Onizuka and McAuliffe, 1986 01/30 Mohandas Gandhi assassinated in New Delhi by Hindu fanatic, 1948 01/30 Tet Offensive, 1968 01/31 "Ham" the chimpanzee soars into space aboard Mercury-Redstone 2, 1961 01/31 Explorer I launched, 1958. Van Allen Belt discovered 01/31 Irving Langmuir, 1881, invented tungsten filament lamp 02/01 First TV soap: Secret Storm, 1954 02/01 Forces led by Khomeini take over Iran, 1979 02/01 Space Shuttle Columbia (STS-107) disintegrates 15 minutes before landing killing Husband, McCool, Chawla, Clark, Ramon, Brown, and Anderson, 2003 02/04 Cybernet inaugurated, 1969 02/04 Patricia Hearst kidnapped by Symbionese Liberation Army, 1974 02/08 1963 Revolution Anniversary in Iraq 02/09 -51 degrees F, Vanderbilt MI, 1934 02/12 US President Abraham Lincoln's real birthday 02/12 Santa Barbara oil leak, 1969 02/14 Bombing of Dresden, 1945 02/15 Chicago Seven convicted, 1970 02/16 Nylon patented, 1937 02/16 Stephen Decatur burns US frigate in Tripoli, 1804 02/18 Pluto discovered by Clyde Tombaugh, Lowell Observatory, AZ, 1930 02/19 US Marines land on Iwo Jima, 1945 02/20 John Glenn orbits the Earth 3 times, 1962 02/21 Battle of Verdun begins, 1916 1M casualties 02/21 First telephone directory, New Haven, Connecticut, 1878 02/21 Malcom X shot to death in Harlem, 1965 02/23 Lt. Calley confesses, implicates Cpt. Medina, 1971 02/24 Impeachment proceedings against Andrew Johnson begin, 1868 02/28 The "French Connection" drug bust occurs in Marseilles, 1972 02/29 French and Indian raid on Deerfield MA, 1704 03/01 Sarah Goode, Sarah Osborne, and Tituba arrested for witchcraft in Salem, Massachusetts, 1692 03/02 Blackthorn winds (New England) (Does anyone know what this is?) 03/04 First meeting of Congress, 1789, in N.Y.C. 03/13 "Striptease" introduced, Paris, 1894 03/14 Teddy Roosevelt excludes Japanese laborers from continental US, 1907 03/15 Day of the 1848 revolution in Hungary 03/15 Buzzards return to Hinckley OH 03/15 France assumes protectorate over Vietnam, 1874 03/15 Watts, Los Angeles, riots kill two, injure 25, 1966 03/15 Ides of March. Gaius Julius Caesar assassinated by senators, including adoptive son Marcus Junius Brutus Caepio, 44BC -03/16 First liquid-fuel-powered rocket flight, 1926 03/16 MyLai Massacre; 300 non-combatant villagers killed by US infantrymen 03/16 Robert Goddard launches first liquid-fueled rocket, Auburn MA, 1926 03/17 Vanguard I launched, 1958. Earth proved pear-shaped 03/18 Aleksei Leonov performs first spacewalk, 1965 03/19 Swallows return to Capistrano 03/20 Radio Caroline, the original British pirate radio station, sinks, 1980 03/24 Construction of New York subway system begins, 1900 03/25 Triangle Shirt Waist Fire, 1911 03/26 Popeye statue unveiled, Crystal City TX Spinach Festival, 1937 03/27 Khrushchev becomes Premier of Soviet Union, 1958 03/28 Three Mile Island releases radioactive gas, 1979 03/29 Swedish settled Christiana (Wilmington) DE, 1638 03/30 Alaska purchased from Russia for $7.2 million, 1867 03/30 Five rings around Uranus discovered, 1977 03/30 Pencil with eraser patented, 1858 04/01 People of superb intelligence, savoir-faire, etc. born this day. 04/04 Martin Luther King assassinated in Memphis, Tennessee, 1968 04/04 NATO Established, 1949 04/06 Joseph Smith founds Mormon Church, 1830 04/07 Albert Hofmann synthesizes LSD in Switzerland, 1943 04/07 Alewives run, Cape Cod 04/08 Matthew Flinders and Nicolas Baudin meet in Encounter Bay, 1802 04/09 Lee surrenders to Grant at Appomattox Courthouse, 1865 04/12 Confederate troops fire first shots of Civil War at Ft Sumter, 1861 04/12 Space Shuttle Columbia launched, 1981 04/12 Yuri Gagarin becomes the first man in space, 1961 04/13 Laotian New Year (3 days) in Laos 04/14 US President Abraham Lincoln shot in Ford's Theatre by John Wilkes Booth, 1865 04/14 Titanic hits iceberg and sinks, 1912 04/15 US President Abraham Lincoln dies, 1865 04/15 Ray Kroc opens first McDonalds in Des Plaines, IL, 1955 04/17 Bay of Pigs invasion crushed by Castro forces, 1961 04/18 Einstein's Death, 1955 04/18 First Laundromat opens, Fort Worth Texas, 1934 04/18 San Francisco earthquake, 1906 04/19 Landing of the "33" in Uruguay 04/19 Warsaw Ghetto uprising, 1943 04/20 Supreme Court unanimously rules in favor of busing, 1971 04/21 Lyrid meteor shower 04/22 Vladimir Ilich Ulyanov, called Lenin, Russian political leader, born in Simbirsk, 1870 04/23 Hank Aaron hits his first home run, 1954 04/26 William Shakespeare baptized in Stratford-on-Avon, England, 1564, birthdate unknown 04/27 Magellan killed in Philippines, 1521 04/29 Zipper patented by Gideon Sindback, 1913 05/01 Beltaine; Feast of the god Bel, sun god 05/03 Anti-war protest disrupts business in Washington, 1971 05/04 Four Kent State students are shot down by the National Guard, 1970 05/05 John Scopes arrested for teaching evolution, Dayton, TN, 1925 05/06 Hindenburg explodes and burns upon landing at Lakehurst, NJ, 1937 05/07 Germany surrenders after WWII, 1945 05/08 Beginning of ostrich mating season 05/08 US institutes mining of Haiphong Harbor, 1972 05/09 94 degrees, New York, 1979 05/10 Germany invades Low Countries, 1940 05/10 Nazi bookburning, 1933 05/14 Beginning of Lewis and Clark Expedition, 1804 05/14 Nation of Israel proclaimed, 1948 05/15 Asylum for Inebriates founded, Binghamton NY, 1854 05/17 24" rain in 11 hours, Pearl River, S. China, 1982 05/17 Six SLA members killed in televised gun fight, 1974 05/18 Battle of Las Piedras in Uruguay 05/18 Napoleon crowned Emperor, 1804 05/21 Battle of Iquique in Chile 05/21 US explodes first hydrogen bomb, 1956 05/22 US Civil War ends, 1865 05/23 Israeli raid into Argentina to capture Adolf Eichmann, 1960 05/23 Two Yetis sighted, Mt. Everest, 1953 05/23 Federal Republic of Germany founded, 1949 05/24 Battle of Pinchincha in Ecuador 05/25 Oral Roberts sees 900 foot tall Jesus Christ, Tulsa OK, 1980 05/25 Successful test of the limelight in Purfleet, England, 1830 05/26 Congress sets first immigration quotas, 1924 05/27 Golden Gate Bridge opens, 1937 05/29 Edmund Hillary and Tenzing Norkay climb Mt. Everest, 1953 05/29 First food stamps issued, 1961 05/30 US Marines sent to Nicaragua, 1912 06/02 Native Americans "granted" citizenship, 1924 06/04 Roquefort cheese developed, 1070 06/05 Robert Kennedy assassinated, 1968 06/05 US leaves the Gold Standard, 1933 06/06 First drive-in movie, 1933 06/06 Normandy landing, 1944 06/10 Death of Alexander the Great, 323 B.C. 06/10 Denver police tear gas Jethro Tull and 2000 fans at Red Rocks, 1971 06/11 Greeks seize Troy, 1184BC 06/13 Pioneer flies past Neptune, and therefore out of the Solar System 06/14 Sandpaper invented by I. Fischer, Jr., 1834 06/15 Ben Franklin's kite experiment, 1752 06/15 Magna Carta signed, 1215 06/15 Series of photographs by Edward Muggeridge prove to Leland Stanford that all the hooves of a horse are off the ground during the gallop, 1878 06/16 "The Blues Brothers" premieres in Chicago, 1980 06/17 China explodes its first Hydrogen bomb, 1967 06/17 Watergate Democratic National Committee break-in, 1972 06/19 Julius and Ethel Rosenberg are executed in Sing-Sing prison, 1953 06/19 Lizzie Bordon acquitted, 1893 06/20 Victoria crowned, 1837 06/21 Berlin airlift begins, 1948 06/21 Sun rises over Heelstone at Stonehenge 06/22 Civil rights workers disappear in Mississippi, 1964 06/23 Slavery abolished in England, 1772 06/24 Senate repeals Gulf of Tonkin resolution, 1970 06/25 Custer's Last Stand at Little Big Horn, 1876 06/25 North Korea invades South Korea, 1950 06/26 Battle of Gettysburg, 1863 06/26 St. Lawrence Seaway dedicated by Eisenhower & Queen Elizabeth II, 1959 06/26 Toothbrush invented, 1498 06/27 100 degrees, Fort Yukon, 1915 06/27 Bill Graham closes the Fillmore East, 1971 06/28 Supreme Court decides in favor of Alan Bakke, 1978 06/30 "That" explosion in Siberia, 1908 06/30 China and Soviet Union announce split over ideology, 1960 07/01 Battle of Gettysburg begins, 1863 07/03 Dog days begin 07/04 Battles of Vicksburg and Gettysburg won by Union forces, 1863 07/04 Cloudy, 76 degrees, Philadelphia PA, 1776 07/04 New York abstains on Declaration of Independence vote, 1776 07/04 Thoreau enters woods, 1845 07/06 First `talkie' (talking motion picture) premiere in New York, 1928 07/06 Lawrence of Arabia captures Aqaba, 1917 07/07 First radio broadcast of "Dragnet", 1949 07/07 Terrorists detonate four bombs on London public transport, 2005 07/08 First public reading of the Declaration of Independence, 1776 07/08 Liberty Bell cracks while being rung at funeral of John Marshall, 1835 07/09 10-hour working day set by law, NH, 1847 07/10 134 degrees in Death Valley, 1913 07/12 Minimum wages established: 40 cents/hour, 1933 07/13 Women first compete in Olympic games, 1908 07/16 Detonation of the first atomic bomb at Alamagordo, NM, 1945 07/17 Disneyland opens, 1955 07/18 Ty Cobb gets 4000th base hit, 1927 07/19 Five Massachusetts women executed for witchcraft, 1692 07/20 Armstrong and Aldrin land on moon, 1969 07/21 First Train Robbery, Jesse James gets $3000 near Adair, Iowa, 1873 07/21 Vietnam divided at 17th parallel, 1954 07/23 Ice cream cone introduced, St. Louis MO, 1904 07/24 Scopes Monkey Trial, 1925 07/30 "In God We Trust" made US motto, 1956 07/31 Harry S. Truman dedicates N.Y. Int'l Airport @ Idlewild Field, 1948, later JFK 08/01 Lughnasa; Feast of the god Lugh, a 30 day Celtic feast centers on this day 08/03 Columbus sets sail for Cathay, 1492 08/03 USS Nautilus crosses under north polar ice cap, 1958 08/04 Axe murder of Andrew and Abbey Borden, 1892 08/04 Bombing of N. Vietnam begins, 1964 08/04 Britain declares war on Germany starting World War I, 1914 08/06 Atomic bomb dropped on Hiroshima, 1945 08/06 Caricom in Barbados 08/06 Cy Young pitches first game, 1890 08/08 Montenegro declares war on Germany, 1914 08/08 Richard Nixon resigns the US presidency, 1974 08/08 The Great Train Robbery -- $7,368,000, 1963 08/09 Helter Skelter... the Charles Manson murders take place, 1969 08/09 Persia defeats Spartan King Leonidas at Thermopylae, 480 BC 08/09 US/Canada border defined in the Webster-Ashburton Treaty, 1842 08/09 Atomic bomb dropped on Nagasaki, 1945 08/09 Singapore secedes from Malaysia, 1965 08/10 Chicago incorporated as a village of 300 people, 1833 08/10 US and Panama agree to transfer the canal in the year 2000, 1977 08/11 Dog days end 08/11 France Ends War in Indochina, 1954 08/11 Perseid meteor shower (look north; three days) 08/12 First test flight of Space Shuttle "Enterprise" from 747, 1977 08/12 Last US ground troops out of Vietnam, 1972 08/13 Berlin wall erected, 1961 08/13 Li'l Abner debut, 1934 08/14 Social Security begins in US, 1935 08/15 Gandhi's movement obtains independence for Pakistan and India, 1947 08/15 Hurricane hits Plymouth Plantation, 1635 08/16 Roller Coaster patented, 1898 08/17 First public bath opened in N.Y., 1891 08/18 Anti-Cigarette League of America formed 08/19 Air Force cargo plane snares payload from Discoverer 14 spy satellite, marking start of practical military reconnaissance from space, 1960 08/19 Gail Borden patents condensed milk, 1856 08/22 Death of King Richard III, 1485, Last of the Plantagenets 08/22 Joe Walker sets X-15 all time altitude mark (67 miles), 1963 08/22 St. Columbia reports seeing monster in Loch Ness, 565 08/23 Sacco and Vanzetti executed, 1927 08/24 "Alice's Restaurant" premieres in New York and Los Angeles, 1969 08/24 -126.9 F at Vostok, Antarctica, 1960 08/24 British troops burn Washington, 1814 08/25 Gen. De Gaulle leads French forces into Paris, 1944 08/26 19th amendment of US constitution gives women the vote, 1920 08/27 "Tarzan of the Apes" published, 1912 08/27 Krakatoa, Java explodes with a force of 1,300 megatons, 1883 08/28 Martin Luther King leads over 200,000 in civil rights rally in Washington, DC, 1963 08/29 Star in Cygnus goes nova and becomes 4th brightest in sky, 1975; Nova Cygni 1975. 08/30 75 cents a pound tariff set on opium, 1842 08/30 Japan Stationery Co. sells first felt-tipped pen, 1960 08/30 St. Rose of Lima in Peru 08/30 Washington-to-Moscow hot line connected, 1963 08/31 269 people killed after Korean Airlines 747 shot down by USSR, 1983 08/31 Mary Anne Nichols becomes Jack the Ripper's first victim, 1888 08/31 Non-aggression pact signed by USSR and Afghanistan, 1926 08/31 Federation of Malaya gains independence from Great Britain, 1957 09/01 Bobby Fischer defeats Boris Spassky in World Chess Match, 1972 09/01 Joshua A. Norton proclaims himself 'Emperor Norton I', 1859 09/02 Great Britain adopts Gregorian Calendar, 1752 09/02 Japan signs unconditional surrender on US battleship `Missouri', 1945 09/03 Richard ``the Lionheart'' crowned king of England, 1189 09/03 Anniversary of the Founding of the Republic in San Marino 09/05 US President Kennedy orders resumption of underground nuclear tests, 1961 09/05 The first Continental Congress was convened in Philadelphia, 1774 09/06 149 Pilgrims set forth from England aboard the Mayflower, 1620 09/06 First Star Trek episode (The Man Trap) aired 1966 09/06 US President McKinley shot, 1901 09/06 Somhlolo in Swaziland 09/08 "Star Trek" debuts on NBC (1966) 09/08 Jack the Ripper kills again, Annie Chapman is second victim, 1888 09/08 US President Ford pardons Richard M. Nixon, 1974 09/09 California becomes the 31st state of the USA, 1850 09/09 United Colonies is renamed the United States, 1776 09/10 Mountain Meadows Massacre. Mormons kill Gentile wagon train, 1857 09/11 CIA-sponsored terrorists overthrow Chilean government, murder President Allende, 1973 09/11 Terrorists destroy World Trade Center in New York, 2001 09/12 German paratroopers rescue Mussolini from captivity in Rome, 1943 09/12 Germany annexes Sudetenland, 1938 09/13 58╟ C (136.4╟ F) measured at el Azizia, Libya, 1922 09/13 British defeat the French at Abraham near Quebec City, 1788 09/13 Building of Hadrian's Wall begun, 122 09/13 Chiang Kai-Shek becomes president of China, 1943 09/14 Benjamin Franklin is sent to France as an American minister, 1778 09/14 Salem, Massachusetts, is founded, 1629 09/14 The US Selective Service Act establishes the first peacetime draft, 1940 09/15 Soviet Premier Nikita Khrushchev begins his 13 day tour of the US, 1959 09/15 The US Foreign Affairs Dept. becomes the US State Department, 1789 09/16 The village of Shawmut, Massachusetts, becomes the city of Boston, 1630 09/16 Malaya, Sabah, Sarawak and Singapore unite to become Malaysia, 1963 09/17 Battle of Antietam, 1862 09/18 Victory of Uprona in Burundi 09/19 New Zealand women get the right to vote, 1893 09/20 Equal Rights Party nominates Belva Lockwood for US President, 1884 09/20 First meeting of the American Association for the Advancement of Science, 1848 09/20 First meeting of the US National Research Council, 1916 09/20 Magellan leaves Spain on the first Round the World passage, 1519 09/20 The Roxy Theater opens in Hollywood, 1973 09/22 US President Lincoln issues the Emancipation Proclamation, 1862 09/22 Special prosecutor Leon Jeworski subpoenas US President Nixon, 1974 09/22 The first Soviet atomic bomb explodes, 1949 09/23 Philippine President Ferdinand Marcos declares martial law, 1972 09/23 The New York Knickerbockers becomes the first US Baseball club, 1845 09/23 US Vice President Nixon denies campaign fund fraud with his "Checkers" speech, 1952 09/25 Sandra Day O'Connor becomes first woman on US Supreme Court, 1981 09/27 The first passenger was hauled in a locomotive in England, 1825 09/28 "Pilgrim's Progress" published, 1678 09/28 A Greek soldier runs 26+ miles after the Persian defeat at Marathon, 490BC 09/30 Red Jack kills 2, Elizabeth Stride (#3) and Catherine Eddowes (#4), 1888 09/30 The first tooth is extracted under anesthesia in Charleston, Mass, 1846 09/30 The verdicts of the Nuremberg trials are announced, 1946 10/01 NASA officially begins operations, 1958 10/02 Thurgood Marshall sworn as the first black Supreme Court Justice, 1967 10/04 Crimean war begins, 1853 10/04 First space vehicle, Sputnik I, launched, 1957 10/06 Antioch College is the first public school to admit men and women, 1853 10/06 Egyptian President Anwar es-Sadat is assassinated in Cairo, 1981 10/06 Israel is attacked by the alliance of Egypt and Syria, 1973 10/07 Foundation of the German Democratic Republic (GDR or DDR), 1949 10/07 Georgia Tech. beats Cumberland Univ. 222-0, 1916 10/07 Maryland Governor Marvin Mandel sent to prison on fraud charges, 1977 10/07 Mother Teresa of Calcutta awarded the Nobel Peace Prize, 1979 10/07 Police stop Wilbur Mills car, Fanne Fox jumps into water, 1974 10/08 Great Chicago Fire, 1871 10/09 First two-way telephone conversation, 1876 10/10 Beginning of the Wars for Independence in Cuba 10/10 Foundation of the Workers Party in North Korea 10/10 Mercury at Superior Conjunction with Sun. Moves into night sky. (1984) 10/10 Spiro T. Agnew resigns as Vice-President due to income tax fraud, 1973 10/11 "Saturday Night Live" premiers on NBC-TV, 1975 10/11 The Gang of Four are arrested in Peking, 1976 10/11 The first steam powered ferry ran between New York and Hoboken, 1811 10/11 The second Vatican Ecumenical Council opens in Rome, 1962 10/11 First broadcast of Saturday Night Live, 1975 10/12 Bahama Natives discover Columbus of Europe lost on their shores, 1492 10/12 Khrushchev pounds his desk with shoe during a speech to the UN, 1960 10/12 Man O'War's last race, 1920 10/12 Native Americans discover Columbus of Europe lost on their shores, 1492 10/13 Italy declares war on Germany, 1943 10/13 US Navy born, 1775, authorized by the Second Continental Congress 10/14 Battle of Hastings won by William the Conqueror and the Normans, 1066 10/14 Chuck Yeager breaks sound barrier, 1947 10/15 First draft card burned, 1965 10/18 Boston Shoemakers form first US labor org., 1648 10/18 Soviets announce their probe took photos of the Moon's far side, 1959 10/19 Mao Tse-tung establishes the People's Republic of China, 1949 10/19 Napoleon's beaten army begins the long retreat from Moscow, 1812 10/20 "Saturday Night Massacre", 1973 10/20 OPEC embargo, 1973 10/21 Edison makes the first practical incandescent lamp, 1879 10/21 Guggenheim Museum opens, 1959 10/23 Battle of Leyte Gulf begins, 1944 10/23 Day of the 1956 revolution in Hungary 10/23 Earth created at 6:30 AM, 4004BC. 10/23 Swallows leave Capistrano 10/25 The UN removes Taiwan and admits the People's Republic of China, 1971 10/26 UN's World Health Organization declares smallpox eradicated, 1978 10/27 New York's Boss Tweed is arrested on fraud charges, 1871 10/27 The first New York Subway is opened, 1904 10/28 Columbus discovers Cuba, 1492 10/28 Constantine's army defeats forces of Maxentius at Mulvian Bridge, 312 10/28 Harvard was founded in Massachusetts, 1636 10/28 Statue of Liberty was dedicated on Bedloe's Island, 1886 10/29 Stock Market Crash, 1929 10/30 Orson Welles' "War of the Worlds" broadcast, 1938 10/31 Luther nails 95 Theses to door of Castle Church, Wittenberg, 1517 11/01 Austria-Hungary become two separate nations, 1918 11/01 Puerto Rican nationalists try to kill Truman at the Blair House, 1950 11/02 Luftwaffe completes 57 consecutive nights of bombing of London, 1940 11/02 Two Frenchmen make the first free hot air balloon flight, 1783 11/03 Beef rises to 3 cents a pound, IL, 1837 11/03 Linus Pauling wins Nobel Chemistry Prize, 1954 11/03 Sputnik II launched, 1957, bearing space dog Laika 11/04 Iranian militants seize US embassy personnel in Teheran, 1979 11/04 Soviet forces crush the anti-communist revolt in Hungary, 1956 11/05 Guy Fawkes' Plot, 1605 11/07 Abolitionist newspaperman Elijah P. Lovejoy murdered by mob, 1837 11/07 Lewis and Clark Expedition in sight of the Pacific Ocean, 1805 11/09 Blackout of New York, New England, and Eastern Canada, 1965 11/09 Giant panda discovered (?!), China, 1927 11/09 Jack the Ripper kills fifth and final victim, Jane Kelly, 1888 11/09 Margaret Sanger forms American Birth Control League, 1921 11/09 Roosevelt establishes the Civil Works Administration, 1933 11/10 41 Women arrested in suffragette demonstrations near White House, 1917 11/10 Cpt. Wirz, commandant of Andersonville Prison hanged, 1865 11/10 Henry Stanley asks David Livingston, "Dr. Livingston, I presume?", 1871 11/11 Washington becomes the 42nd state, 1889 11/12 Dr. Sun Yat-sen's Birthday in Taiwan 11/12 USA first exports oil to Europe, 1861 11/14 Quarter Pounder price raised from $0.53 to $0.55 in violation of Nixon price controls (but okayed by Price Commission after formal request from McDonald's), 1971 11/15 Niagara Falls power plant startup, 1896 11/16 Opening of the Suez Canal, 1869 11/17 46,000 meteoroids fall over AZ in 20 minutes, 1966 11/17 Richard Nixon says "I am not a crook.", 1973 11/18 First hydrogen bomb blasts Enewetok, 1952 11/18 Local standard time zones established for US, 1883 11/19 Gettysburg Address delivered, 1863 11/21 Announcement of 18 1/2 minute gap on Watergate tape, 1973 11/22 Kennedy shot in Dallas, Texas by Lee Harvey Oswald, 1963 11/23 First broadcast of Dr. Who (longest running TV series), 1963 11/24 Lee Harvey Oswald killed by Jack Ruby, 1963 11/25 Alfred Nobel invents dynamite, 1867 11/27 Alfred Nobel establishes Nobel Prize, 1895 11/27 Friction match invented, England, 1826 11/27 Hoosac Railroad Tunnel completed, 1873, in NW Massachusetts 11/29 King Tut's tomb opened, 1922 12/01 First national corn-husking championship, Alleman IA, 1924 12/01 Martin Luther King Jr., leads black boycott of Montgomery buses, 1955 12/01 Rosa Parks refuses to move to back of the bus (Montgomery, AL), 1953 12/03 First neon light display, Paris, 1910 12/03 First successful human heart transplant led by Dr. Barnard, 1967 12/03 The Montreux Casino burns down during a Frank Zappa concert, 1971 12/04 Washington takes leave of his officers at Fraunce's Tavern, NYC, 1783 12/05 End of Prohibition, 1933 (at least the alcohol part) 12/05 Phi Beta Kappa founded, 1776 12/05 The Eighteenth Amendment repealed, ending Prohibition, 1933 12/07 Japan bombs Pearl Harbor, 1941 12/08 Japan enters Second World War with invasion of Pantai Sabak, Kelantan, 1941 12/09 Ball-bearing roller skates patented, 1884 12/10 Metric system established in France, 1799 12/10 Nobel Peace Prize awarded each year 12/12 First wireless message sent across Atlantic by Marconi, 1901 12/13 Apollo 17 leaves the moon, with "last" men to walk on moon aboard, 1972 12/13 Dartmouth College chartered, 1769 12/13 Geminid meteor shower (look south) 12/15 Argo Merchant oil spill, 1976 12/15 Bill of Rights adopted, 1791 12/15 James Naismith invents basketball, Canada, 1891 12/15 Sitting Bull shot in head while submitting to arrest, 1890 12/20 US buys ~1,000,000 sq. miles of Louisiana for ~$20/sq.mi. 12/21 Phileas Fogg completes his trip around the world in less than 80 days 12/21 Women gain the right to vote in South Australia, 1894 12/21 Women gain the right to hold political office in South Australia, 1894 12/24 KKK formed in Pulaski, Tenn, 1865 12/26 DPMA founded, 1951 12/27 APT report published, 1956 12/27 Ether first used as anesthetic in childbirth, 1845 12/28 Comet Kohoutek at perihelion, 1973 12/28 Proclamation of the Province of South Australia, 1836 12/29 Battle of Wounded knee, 1890 12/30 First Los Angeles freeway dedicated, 1940 12/31 St. Sylvester in Switzerland 12/31 Winterland closes its doors, 1978 #endif /* !_calendar_history_ */ Index: user/edwin/calendar/calendars/ru_RU.KOI8-R/calendar.common =================================================================== --- user/edwin/calendar/calendars/ru_RU.KOI8-R/calendar.common (revision 211723) +++ user/edwin/calendar/calendars/ru_RU.KOI8-R/calendar.common (revision 211724) @@ -1,90 +1,105 @@ /* * Российские праздники * * $FreeBSD$ */ #ifndef _ru_RU_KOI8_R_common_ #define _ru_RU_KOI8_R_common_ LANG=ru_RU.KOI8-R 12 янв День работника прокуратуры 13 янв День российской печати 14 янв Старый Новый год 21 янв День инженерных войск 25 янв Татьянин день. Студенческий праздник 8 фев День российской науки 10 фев День дипломатического работника 1 мар Всемирный день гражданской обороны 03/SunSecond День работников геодезии и картографии +11 мар День работника органов наркоконтроля 18 мар День налоговой полиции 03/SunThird День работников торговли, бытового обслуживания населения и жилищно-коммунального хозяйства 27 мар Международный день театра 27 мар День внутренних войск 1 апр День смеха 2 апр День единения народов 04/SunFirst День геолога 12 апр День космонавтики 04/SunSecond День войск противовоздушной обороны 26 апр День памяти погибших в радиационных авариях и катастрофах 30 апр День пожарной охраны 7 май День радио 17 май Международный день телекоммуникаций 18 май Международный день музеев 24 май День славянской письменности и культуры +26 май День российского предпринимательства 27 май Общероссийский день библиотек 28 май День пограничника +30 май День пожарной охраны +31 май День Российской Адвокатуры 05/SunLast День химика 1 июн День защиты детей + 5 июн День эколога 6 июн Пушкинский день 8 июн День социального работника 06/SunSecond День работников легкой промышленности 06/SunThird День медицинского работника 22 июн День памяти и скорби (Начало Великой Отечественной Войны, 1941 год) 27 июн День молодежи +29 июн День партизан и подпольщиков 06/SatLast День изобретателя и рационализатора 07/SunFirst День работников морского и речного флота 07/SunSecond День рыбака 07/SunSecond День российской почты 07/SunThird День металлурга 07/SunLast День Военно-Морского Флота +28 июл День крещения Руси 6 авг День железнодорожных войск 08/SunFirst День железнодорожника 12 авг День военно-воздушных сил 08/SunSecond День строителя 08/SunThird День Воздушного Флота 22 авг День государственного флага 27 авг День кино 08/SunLast День шахтера 1 сен День знаний 2 сен День российской гвардии + 3 сен День солидарности в борьбе с терроризмом + 4 сен День специалиста по ядерному обеспечению 09/SunFirst День работников нефтяной и газовой промышленности 09/SunSecond День танкиста 09/SunThird День работников леса +28 сен День работника атомной промышленности 09/SunLast День машиностроителя 1 окт День пожилых людей - 4 окт День военно-космических сил + 1 окт День сухопутных войск + 4 окт День космических войск 5 окт День учителя 14 окт Международный день стандартизации 10/SunSecond День работников сельского хозяйства и перерабатывающей промышленности 10/SunThird День работников дорожного хозяйства 24 окт Международный день ООН 25 окт День таможенника 30 окт День памяти жертв политических репрессий 10/SunLast День работников автомобильного транспорта + 7 ноя День октябрьской революции 1917 года 9 ноя Всемирный день качества 10 ноя День милиции 16 ноя День морской пехоты 17 ноя Международный день студентов -11/SunThird День ракетных войск и артиллерии +19 ноя День ракетных войск и артиллерии 21 ноя День работников налоговых органов 26 ноя Всемирный день информации 11/SunLast День матери 1 дек Всемирный день борьбы со СПИДом + 3 дек День юриста + 9 дек День Героев Отечества +12 дек День Конституции 17 дек День ракетных войск стратегического назначения 20 дек День работника органов безопасности 22 дек День энергетика 27 дек День спасателя #endif /* !_ru_RU_KOI8_R_common_ */ Property changes on: user/edwin/calendar/calendars/ru_RU.KOI8-R/calendar.common ___________________________________________________________________ Added: fbsd:notbinary ## -0,0 +1 ## +yes \ No newline at end of property Index: user/edwin/calendar/io.c =================================================================== --- user/edwin/calendar/io.c (revision 211723) +++ user/edwin/calendar/io.c (revision 211724) @@ -1,355 +1,359 @@ /*- * Copyright (c) 1989, 1993, 1994 * The Regents of the University of California. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 4. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #ifndef lint static const char copyright[] = "@(#) Copyright (c) 1989, 1993\n\ The Regents of the University of California. All rights reserved.\n"; #endif #if 0 #ifndef lint static char sccsid[] = "@(#)calendar.c 8.3 (Berkeley) 3/25/94"; #endif #endif #include __FBSDID("$FreeBSD$"); #include #include #include #include #include #include #include #include #include #include #include #include #include #include "pathnames.h" #include "calendar.h" const char *calendarFile = "calendar"; /* default calendar file */ const char *calendarHomes[] = {".calendar", _PATH_INCLUDE}; /* HOME */ const char *calendarNoMail = "nomail"; /* don't sent mail if this file exist */ char path[MAXPATHLEN]; struct fixs neaster, npaskha, ncny, nfullmoon, nnewmoon; struct fixs nmarequinox, nsepequinox, njunsolstice, ndecsolstice; #define REPLACE(string, slen, struct_) \ if (strncasecmp(buf, (string), (slen)) == 0 && buf[(slen)]) { \ if (struct_.name != NULL) \ free(struct_.name); \ if ((struct_.name = strdup(buf + (slen))) == NULL) \ errx(1, "cannot allocate memory"); \ struct_.len = strlen(buf + (slen)); \ continue; \ } void cal(void) { char *pp, p; FILE *fp; int ch, l; int count, i; int month[MAXCOUNT]; int day[MAXCOUNT]; int year[MAXCOUNT]; char **extradata; /* strings of 20 length */ int flags; static int d_first = -1; char buf[2048 + 1]; struct event *events[MAXCOUNT]; struct tm tm; char dbuf[80]; extradata = (char **)calloc(MAXCOUNT, sizeof(char *)); for (i = 0; i < MAXCOUNT; i++) { extradata[i] = (char *)calloc(1, 20); } /* Unused */ tm.tm_sec = 0; tm.tm_min = 0; tm.tm_hour = 0; tm.tm_wday = 0; count = 0; - if ((fp = opencal()) == NULL) + if ((fp = opencal()) == NULL) { + free(extradata); return; + } while (fgets(buf, sizeof(buf), stdin) != NULL) { if ((pp = strchr(buf, '\n')) != NULL) *pp = '\0'; else /* Flush this line */ while ((ch = getchar()) != '\n' && ch != EOF); for (l = strlen(buf); l > 0 && isspace((unsigned char)buf[l - 1]); l--) ; buf[l] = '\0'; if (buf[0] == '\0') continue; /* Parse special definitions: LANG, Easter, Paskha etc */ if (strncmp(buf, "LANG=", 5) == 0) { (void)setlocale(LC_ALL, buf + 5); d_first = (*nl_langinfo(D_MD_ORDER) == 'd'); setnnames(); continue; } REPLACE("Easter=", 7, neaster); REPLACE("Paskha=", 7, npaskha); REPLACE("ChineseNewYear=", 15, ncny); REPLACE("NewMoon=", 8, nnewmoon); REPLACE("FullMoon=", 9, nfullmoon); REPLACE("MarEquinox=", 11, nmarequinox); REPLACE("SepEquinox=", 11, nsepequinox); REPLACE("JunSolstice=", 12, njunsolstice); REPLACE("DecSolstice=", 12, ndecsolstice); if (strncmp(buf, "SEQUENCE=", 9) == 0) { setnsequences(buf + 9); continue; } /* * If the line starts with a tab, the data has to be * added to the previous line */ if (buf[0] == '\t') { for (i = 0; i < count; i++) event_continue(events[i], buf); continue; } /* Get rid of leading spaces (non-standard) */ - while (isspace(buf[0])) - memcpy(buf, buf + 1, strlen(buf) - 1); + while (isspace((unsigned char)buf[0])) + memcpy(buf, buf + 1, strlen(buf)); /* No tab in the line, then not a valid line */ if ((pp = strchr(buf, '\t')) == NULL) continue; /* Trim spaces in front of the tab */ - while (isspace(pp[-1])) + while (isspace((unsigned char)pp[-1])) pp--; p = *pp; *pp = '\0'; if ((count = parsedaymonth(buf, year, month, day, &flags, extradata)) == 0) continue; *pp = p; if (count < 0) { /* Show error status based on return value */ fprintf(stderr, "Ignored: %s\n", buf); if (count == -1) continue; count = -count + 1; } /* Find the last tab */ while (pp[1] == '\t') pp++; if (d_first < 0) d_first = (*nl_langinfo(D_MD_ORDER) == 'd'); for (i = 0; i < count; i++) { tm.tm_mon = month[i] - 1; tm.tm_mday = day[i]; tm.tm_year = year[i] - 1900; (void)strftime(dbuf, sizeof(dbuf), d_first ? "%e %b" : "%b %e", &tm); if (debug) fprintf(stderr, "got %s\n", pp); events[i] = event_add(year[i], month[i], day[i], dbuf, ((flags &= F_VARIABLE) != 0) ? 1 : 0, pp, extradata[i]); } } event_print_all(fp); closecal(fp); + free(extradata); } FILE * opencal(void) { uid_t uid; size_t i; int fd, found, pdes[2]; struct stat sbuf; /* open up calendar file as stdin */ if (!freopen(calendarFile, "r", stdin)) { if (doall) { if (chdir(calendarHomes[0]) != 0) return (NULL); if (stat(calendarNoMail, &sbuf) == 0) return (NULL); if (!freopen(calendarFile, "r", stdin)) return (NULL); } else { char *home = getenv("HOME"); if (home == NULL || *home == '\0') errx(1, "cannot get home directory"); - chdir(home); + if (chdir(home) != 0) + errx(1, "cannot enter home directory"); for (found = i = 0; i < sizeof(calendarHomes) / sizeof(calendarHomes[0]); i++) if (chdir(calendarHomes[i]) == 0 && freopen(calendarFile, "r", stdin)) { found = 1; break; } if (!found) errx(1, "can't open calendar file \"%s\": %s (%d)", calendarFile, strerror(errno), errno); } } if (pipe(pdes) < 0) return (NULL); switch (fork()) { case -1: /* error */ (void)close(pdes[0]); (void)close(pdes[1]); return (NULL); case 0: /* child -- stdin already setup, set stdout to pipe input */ if (pdes[1] != STDOUT_FILENO) { (void)dup2(pdes[1], STDOUT_FILENO); (void)close(pdes[1]); } (void)close(pdes[0]); uid = geteuid(); if (setuid(getuid()) < 0) { warnx("first setuid failed"); _exit(1); }; if (setgid(getegid()) < 0) { warnx("setgid failed"); _exit(1); } if (setuid(uid) < 0) { warnx("setuid failed"); _exit(1); } execl(_PATH_CPP, "cpp", "-P", "-traditional", "-nostdinc", /* GCC specific opts */ "-I.", "-I", _PATH_INCLUDE, (char *)NULL); warn(_PATH_CPP); _exit(1); } /* parent -- set stdin to pipe output */ (void)dup2(pdes[0], STDIN_FILENO); (void)close(pdes[0]); (void)close(pdes[1]); /* not reading all calendar files, just set output to stdout */ if (!doall) return (stdout); /* set output to a temporary file, so if no output don't send mail */ (void)snprintf(path, sizeof(path), "%s/_calXXXXXX", _PATH_TMP); if ((fd = mkstemp(path)) < 0) return (NULL); return (fdopen(fd, "w+")); } void closecal(FILE *fp) { uid_t uid; struct stat sbuf; int nread, pdes[2], status; char buf[1024]; if (!doall) return; rewind(fp); if (fstat(fileno(fp), &sbuf) || !sbuf.st_size) goto done; if (pipe(pdes) < 0) goto done; switch (fork()) { case -1: /* error */ (void)close(pdes[0]); (void)close(pdes[1]); goto done; case 0: /* child -- set stdin to pipe output */ if (pdes[0] != STDIN_FILENO) { (void)dup2(pdes[0], STDIN_FILENO); (void)close(pdes[0]); } (void)close(pdes[1]); uid = geteuid(); if (setuid(getuid()) < 0) { warnx("setuid failed"); _exit(1); }; if (setgid(getegid()) < 0) { warnx("setgid failed"); _exit(1); } if (setuid(uid) < 0) { warnx("setuid failed"); _exit(1); } execl(_PATH_SENDMAIL, "sendmail", "-i", "-t", "-F", "\"Reminder Service\"", (char *)NULL); warn(_PATH_SENDMAIL); _exit(1); } /* parent -- write to pipe input */ (void)close(pdes[0]); write(pdes[1], "From: \"Reminder Service\" <", 26); write(pdes[1], pw->pw_name, strlen(pw->pw_name)); write(pdes[1], ">\nTo: <", 7); write(pdes[1], pw->pw_name, strlen(pw->pw_name)); write(pdes[1], ">\nSubject: ", 12); write(pdes[1], dayname, strlen(dayname)); write(pdes[1], "'s Calendar\nPrecedence: bulk\n\n", 30); while ((nread = read(fileno(fp), buf, sizeof(buf))) > 0) (void)write(pdes[1], buf, nread); (void)close(pdes[1]); done: (void)fclose(fp); (void)unlink(path); while (wait(&status) >= 0); } Index: user/edwin/calendar/locale.c =================================================================== --- user/edwin/calendar/locale.c (revision 211723) +++ user/edwin/calendar/locale.c (revision 211724) @@ -1,164 +1,166 @@ /*- * Copyright (c) 1989, 1993, 1994 * The Regents of the University of California. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 4. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #include __FBSDID("$FreeBSD$"); #include #include #include #include #include #include #include "calendar.h" const char *fdays[] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", NULL, }; const char *days[] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", NULL, }; const char *fmonths[] = { "January", "February", "March", "April", "May", "June", "Juli", "August", "September", "October", "November", "December", NULL, }; const char *months[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", NULL, }; const char *sequences[] = { "First", "Second", "Third", "Fourth", "Fifth", "Last" }; struct fixs fndays[8]; /* full national days names */ struct fixs ndays[8]; /* short national days names */ struct fixs fnmonths[13]; /* full national months names */ struct fixs nmonths[13]; /* short national month names */ struct fixs nsequences[10]; /* national sequence names */ void setnnames(void) { char buf[80]; int i, l; struct tm tm; + memset(&tm, 0, sizeof(struct tm)); for (i = 0; i < 7; i++) { tm.tm_wday = i; strftime(buf, sizeof(buf), "%a", &tm); for (l = strlen(buf); l > 0 && isspace((unsigned char)buf[l - 1]); l--) ; buf[l] = '\0'; if (ndays[i].name != NULL) free(ndays[i].name); if ((ndays[i].name = strdup(buf)) == NULL) errx(1, "cannot allocate memory"); ndays[i].len = strlen(buf); strftime(buf, sizeof(buf), "%A", &tm); for (l = strlen(buf); l > 0 && isspace((unsigned char)buf[l - 1]); l--) ; buf[l] = '\0'; if (fndays[i].name != NULL) free(fndays[i].name); if ((fndays[i].name = strdup(buf)) == NULL) errx(1, "cannot allocate memory"); fndays[i].len = strlen(buf); } + memset(&tm, 0, sizeof(struct tm)); for (i = 0; i < 12; i++) { tm.tm_mon = i; strftime(buf, sizeof(buf), "%b", &tm); for (l = strlen(buf); l > 0 && isspace((unsigned char)buf[l - 1]); l--) ; buf[l] = '\0'; if (nmonths[i].name != NULL) free(nmonths[i].name); if ((nmonths[i].name = strdup(buf)) == NULL) errx(1, "cannot allocate memory"); nmonths[i].len = strlen(buf); strftime(buf, sizeof(buf), "%B", &tm); for (l = strlen(buf); l > 0 && isspace((unsigned char)buf[l - 1]); l--) ; buf[l] = '\0'; if (fnmonths[i].name != NULL) free(fnmonths[i].name); if ((fnmonths[i].name = strdup(buf)) == NULL) errx(1, "cannot allocate memory"); fnmonths[i].len = strlen(buf); } } void setnsequences(char *seq) { int i; char *p; p = seq; for (i = 0; i < 5; i++) { nsequences[i].name = p; if ((p = strchr(p, ' ')) == NULL) { + /* Oh oh there is something wrong. Erase! Erase! */ for (i = 0; i < 5; i++) { nsequences[i].name = NULL; nsequences[i].len = 0; - return; } - + return; } *p = '\0'; p++; } nsequences[i].name = p; for (i = 0; i < 5; i++) { nsequences[i].name = strdup(nsequences[i].name); nsequences[i].len = nsequences[i + 1].name - nsequences[i].name; } nsequences[i].name = strdup(nsequences[i].name); nsequences[i].len = strlen(nsequences[i].name); return; } Index: user/edwin/calendar/parsedata.c =================================================================== --- user/edwin/calendar/parsedata.c (revision 211723) +++ user/edwin/calendar/parsedata.c (revision 211724) @@ -1,1014 +1,1014 @@ /*- * Copyright (c) 1992-2009 Edwin Groothuis . * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * */ #include __FBSDID("$FreeBSD$"); #include #include #include #include #include #include #include "calendar.h" static char *showflags(int flags); static int isonlydigits(char *s, int nostar); static const char *getmonthname(int i); static int checkmonth(char *s, size_t *len, size_t *offset, const char **month); static const char *getdayofweekname(int i); static int checkdayofweek(char *s, size_t *len, size_t *offset, const char **dow); static int indextooffset(char *s); static int parseoffset(char *s); static char *floattoday(int year, double f); static char *floattotime(double f); /* * Expected styles: * * Date ::= Month . ' ' . DayOfMonth | * Month . ' ' . DayOfWeek . ModifierIndex | * Month . '/' . DayOfMonth | * Month . '/' . DayOfWeek . ModifierIndex | * DayOfMonth . ' ' . Month | * DayOfMonth . '/' . Month | * DayOfWeek . ModifierIndex . ' ' .Month | * DayOfWeek . ModifierIndex . '/' .Month | * DayOfWeek . ModifierIndex | * SpecialDay . ModifierOffset * * Month ::= MonthName | MonthNumber | '*' * MonthNumber ::= '0' ... '9' | '00' ... '09' | '10' ... '12' * MonthName ::= MonthNameShort | MonthNameLong * MonthNameLong ::= 'January' ... 'December' * MonthNameShort ::= 'Jan' ... 'Dec' | 'Jan.' ... 'Dec.' * * DayOfWeek ::= DayOfWeekShort | DayOfWeekLong * DayOfWeekShort ::= 'Mon' .. 'Sun' * DayOfWeekLong ::= 'Monday' .. 'Sunday' * DayOfMonth ::= '0' ... '9' | '00' ... '09' | '10' ... '29' | * '30' ... '31' | '*' * * ModifierOffset ::= '' | '+' . ModifierNumber | '-' . ModifierNumber * ModifierNumber ::= '0' ... '9' | '00' ... '99' | '000' ... '299' | * '300' ... '359' | '360' ... '365' * ModifierIndex ::= 'Second' | 'Third' | 'Fourth' | 'Fifth' | * 'First' | 'Last' * * SpecialDay ::= 'Easter' | 'Pashka' | 'ChineseNewYear' * */ static int determinestyle(char *date, int *flags, char *month, int *imonth, char *dayofmonth, int *idayofmonth, char *dayofweek, int *idayofweek, char *modifieroffset, char *modifierindex, char *specialday) { char *p, *p1, *p2; const char *dow, *pmonth; char pold; size_t len, offset; *flags = F_NONE; *month = '\0'; *imonth = 0; *dayofmonth = '\0'; *idayofmonth = 0; *dayofweek = '\0'; *idayofweek = 0; *modifieroffset = '\0'; *modifierindex = '\0'; *specialday = '\0'; #define CHECKSPECIAL(s1, s2, lens2, type) \ if (s2 != NULL && strncmp(s1, s2, lens2) == 0) { \ *flags |= F_SPECIALDAY; \ *flags |= type; \ *flags |= F_VARIABLE; \ if (strlen(s1) == lens2) { \ strcpy(specialday, s1); \ return (1); \ } \ strncpy(specialday, s1, lens2); \ specialday[lens2] = '\0'; \ strcpy(modifieroffset, s1 + lens2); \ *flags |= F_MODIFIEROFFSET; \ return (1); \ } if ((p = strchr(date, ' ')) == NULL) { if ((p = strchr(date, '/')) == NULL) { CHECKSPECIAL(date, STRING_CNY, strlen(STRING_CNY), F_CNY); CHECKSPECIAL(date, ncny.name, ncny.len, F_CNY); CHECKSPECIAL(date, STRING_NEWMOON, strlen(STRING_NEWMOON), F_NEWMOON); CHECKSPECIAL(date, nnewmoon.name, nnewmoon.len, F_NEWMOON); CHECKSPECIAL(date, STRING_FULLMOON, strlen(STRING_FULLMOON), F_FULLMOON); CHECKSPECIAL(date, nfullmoon.name, nfullmoon.len, F_FULLMOON); CHECKSPECIAL(date, STRING_PASKHA, strlen(STRING_PASKHA), F_PASKHA); CHECKSPECIAL(date, npaskha.name, npaskha.len, F_PASKHA); CHECKSPECIAL(date, STRING_EASTER, strlen(STRING_EASTER), F_EASTER); CHECKSPECIAL(date, neaster.name, neaster.len, F_EASTER); CHECKSPECIAL(date, STRING_MAREQUINOX, strlen(STRING_MAREQUINOX), F_MAREQUINOX); CHECKSPECIAL(date, nmarequinox.name, nmarequinox.len, F_SEPEQUINOX); CHECKSPECIAL(date, STRING_SEPEQUINOX, strlen(STRING_SEPEQUINOX), F_SEPEQUINOX); CHECKSPECIAL(date, nsepequinox.name, nsepequinox.len, F_SEPEQUINOX); CHECKSPECIAL(date, STRING_JUNSOLSTICE, strlen(STRING_JUNSOLSTICE), F_JUNSOLSTICE); CHECKSPECIAL(date, njunsolstice.name, njunsolstice.len, F_JUNSOLSTICE); CHECKSPECIAL(date, STRING_DECSOLSTICE, strlen(STRING_DECSOLSTICE), F_DECSOLSTICE); CHECKSPECIAL(date, ndecsolstice.name, ndecsolstice.len, F_DECSOLSTICE); if (checkdayofweek(date, &len, &offset, &dow) != 0) { *flags |= F_DAYOFWEEK; *flags |= F_VARIABLE; *idayofweek = offset; if (strlen(date) == len) { strcpy(dayofweek, date); return (1); } strncpy(dayofweek, date, len); dayofweek[len] = '\0'; strcpy(modifierindex, date + len); *flags |= F_MODIFIERINDEX; return (1); } if (isonlydigits(date, 1)) { /* Assume month number only */ *flags |= F_MONTH; *imonth = (int)strtol(date, (char **)NULL, 10); strcpy(month, getmonthname(*imonth)); return(1); } return (0); } } /* * AFTER this, leave by goto-ing to "allfine" or "fail" to restore the * original data in `date'. */ pold = *p; *p = 0; p1 = date; p2 = p + 1; /* Now p2 points to the next field and p1 to the first field */ /* Check if there is a month-string in the date */ if ((checkmonth(p1, &len, &offset, &pmonth) != 0) || (checkmonth(p2, &len, &offset, &pmonth) != 0 && (p2 = p1))) { /* p2 is the non-month part */ *flags |= F_MONTH; *imonth = offset; strcpy(month, getmonthname(offset)); if (isonlydigits(p2, 1)) { strcpy(dayofmonth, p2); *idayofmonth = (int)strtol(p2, (char **)NULL, 10); *flags |= F_DAYOFMONTH; goto allfine; } if (strcmp(p2, "*") == 0) { *flags |= F_ALLDAY; goto allfine; } if (checkdayofweek(p2, &len, &offset, &dow) != 0) { *flags |= F_DAYOFWEEK; *flags |= F_VARIABLE; *idayofweek = offset; strcpy(dayofweek, getdayofweekname(offset)); if (strlen(p2) == len) goto allfine; strcpy(modifierindex, p2 + len); *flags |= F_MODIFIERINDEX; goto allfine; } goto fail; } /* Check if there is an every-day or every-month in the string */ if ((strcmp(p1, "*") == 0 && isonlydigits(p2, 1)) || (strcmp(p2, "*") == 0 && isonlydigits(p1, 1) && (p2 = p1))) { int d; *flags |= F_ALLMONTH; *flags |= F_DAYOFMONTH; d = (int)strtol(p2, (char **)NULL, 10); *idayofmonth = d; sprintf(dayofmonth, "%d", d); goto allfine; } /* Month as a number, then a weekday */ if (isonlydigits(p1, 1) && checkdayofweek(p2, &len, &offset, &dow) != 0) { int d; *flags |= F_MONTH; *flags |= F_DAYOFWEEK; *flags |= F_VARIABLE; *idayofweek = offset; d = (int)strtol(p1, (char **)NULL, 10); *imonth = d; strcpy(month, getmonthname(d)); strcpy(dayofweek, getdayofweekname(offset)); if (strlen(p2) == len) goto allfine; strcpy(modifierindex, p2 + len); *flags |= F_MODIFIERINDEX; goto allfine; } /* If both the month and date are specified as numbers */ if (isonlydigits(p1, 1) && isonlydigits(p2, 0)) { /* Now who wants to be this ambigious? :-( */ int m, d; if (strchr(p2, '*') != NULL) *flags |= F_VARIABLE; m = (int)strtol(p1, (char **)NULL, 10); d = (int)strtol(p2, (char **)NULL, 10); *flags |= F_MONTH; *flags |= F_DAYOFMONTH; if (m > 12) { *imonth = d; *idayofmonth = m; strcpy(month, getmonthname(d)); sprintf(dayofmonth, "%d", m); } else { *imonth = m; *idayofmonth = d; strcpy(month, getmonthname(m)); sprintf(dayofmonth, "%d", d); } goto allfine; } /* FALLTHROUGH */ fail: *p = pold; return (0); allfine: *p = pold; return (1); } static void remember(int *rememberindex, int *y, int *m, int *d, char **ed, int yy, int mm, int dd, char *extra) { static int warned = 0; if (*rememberindex >= MAXCOUNT - 1) { if (warned == 0) warnx("Index > %d, ignored", MAXCOUNT); warned++; return; } y[*rememberindex] = yy; m[*rememberindex] = mm; d[*rememberindex] = dd; if (extra != NULL) strcpy(ed[*rememberindex], extra); else ed[*rememberindex][0] = '\0'; *rememberindex += 1; } static void debug_determinestyle(int dateonly, char *date, int flags, char *month, int imonth, char *dayofmonth, int idayofmonth, char *dayofweek, int idayofweek, char *modifieroffset, char *modifierindex, char *specialday) { if (dateonly != 0) { printf("-------\ndate: |%s|\n", date); if (dateonly == 1) return; } printf("flags: %x - %s\n", flags, showflags(flags)); if (modifieroffset[0] != '\0') printf("modifieroffset: |%s|\n", modifieroffset); if (modifierindex[0] != '\0') printf("modifierindex: |%s|\n", modifierindex); if (month[0] != '\0') printf("month: |%s| (%d)\n", month, imonth); if (dayofmonth[0] != '\0') printf("dayofmonth: |%s| (%d)\n", dayofmonth, idayofmonth); if (dayofweek[0] != '\0') printf("dayofweek: |%s| (%d)\n", dayofweek, idayofweek); if (specialday[0] != '\0') printf("specialday: |%s|\n", specialday); } struct yearinfo { int year; int ieaster, ipaskha, firstcnyday; double ffullmoon[MAXMOONS], fnewmoon[MAXMOONS]; double ffullmooncny[MAXMOONS], fnewmooncny[MAXMOONS]; int ichinesemonths[MAXMOONS]; double equinoxdays[2], solsticedays[2]; int *mondays; struct yearinfo *next; }; /* * Possible date formats include any combination of: * 3-charmonth (January, Jan, Jan) * 3-charweekday (Friday, Monday, mon.) * numeric month or day (1, 2, 04) * * Any character may separate them, or they may not be separated. Any line, * following a line that is matched, that starts with "whitespace", is shown * along with the matched line. */ int parsedaymonth(char *date, int *yearp, int *monthp, int *dayp, int *flags, char **edp) { char month[100], dayofmonth[100], dayofweek[100], modifieroffset[100]; char modifierindex[100], specialday[100]; int idayofweek = -1, imonth = -1, idayofmonth = -1, year, remindex; int d, m, dow, rm, rd, offset; char *ed; int retvalsign = 1; static struct yearinfo *years, *yearinfo; /* * CONVENTION * * Month: 1-12 * Monthname: Jan .. Dec * Day: 1-31 * Weekday: Mon .. Sun * */ *flags = 0; if (debug) debug_determinestyle(1, date, *flags, month, imonth, dayofmonth, idayofmonth, dayofweek, idayofweek, modifieroffset, modifierindex, specialday); if (determinestyle(date, flags, month, &imonth, dayofmonth, &idayofmonth, dayofweek, &idayofweek, modifieroffset, modifierindex, specialday) == 0) { if (debug) printf("Failed!\n"); return (0); } if (debug) debug_determinestyle(0, date, *flags, month, imonth, dayofmonth, idayofmonth, dayofweek, idayofweek, modifieroffset, modifierindex, specialday); remindex = 0; for (year = year1; year <= year2; year++) { /* Get important dates for this year */ yearinfo = years; while (yearinfo != NULL) { if (yearinfo->year == year) break; yearinfo = yearinfo -> next; } if (yearinfo == NULL) { yearinfo = (struct yearinfo *)calloc(1, sizeof(struct yearinfo)); if (yearinfo == NULL) errx(1, "Unable to allocate more years"); yearinfo->year = year; yearinfo->next = years; years = yearinfo; yearinfo->mondays = mondaytab[isleap(year)]; yearinfo->ieaster = easter(year); fpom(year, UTCOffset, yearinfo->ffullmoon, yearinfo->fnewmoon); fpom(year, UTCOFFSET_CNY, yearinfo->ffullmooncny, yearinfo->fnewmooncny); fequinoxsolstice(year, UTCOffset, yearinfo->equinoxdays, yearinfo->solsticedays); /* * CNY: Match day with sun longitude at 330` with new * moon */ yearinfo->firstcnyday = calculatesunlongitude30(year, UTCOFFSET_CNY, yearinfo->ichinesemonths); for (m = 0; yearinfo->fnewmooncny[m] >= 0; m++) { if (yearinfo->fnewmooncny[m] > yearinfo->firstcnyday) { yearinfo->firstcnyday = floor(yearinfo->fnewmooncny[m - 1]); break; } } } /* Same day every year */ if (*flags == (F_MONTH | F_DAYOFMONTH)) { if (!remember_ymd(year, imonth, idayofmonth)) continue; remember(&remindex, yearp, monthp, dayp, edp, year, imonth, idayofmonth, NULL); continue; } /* XXX Same day every year, but variable */ if (*flags == (F_MONTH | F_DAYOFMONTH | F_VARIABLE)) { if (!remember_ymd(year, imonth, idayofmonth)) continue; remember(&remindex, yearp, monthp, dayp, edp, year, imonth, idayofmonth, NULL); continue; } /* Same day every month */ if (*flags == (F_ALLMONTH | F_DAYOFMONTH)) { for (m = 1; m <= 12; m++) { if (!remember_ymd(year, m, idayofmonth)) continue; remember(&remindex, yearp, monthp, dayp, edp, year, m, idayofmonth, NULL); } continue; } /* Every day of a month */ if (*flags == (F_ALLDAY | F_MONTH)) { for (d = 1; d <= yearinfo->mondays[imonth]; d++) { if (!remember_ymd(year, imonth, d)) continue; remember(&remindex, yearp, monthp, dayp, edp, year, imonth, d, NULL); } continue; } /* One day of every month */ if (*flags == (F_ALLMONTH | F_DAYOFWEEK)) { for (m = 1; m <= 12; m++) { if (!remember_ymd(year, m, idayofmonth)) continue; remember(&remindex, yearp, monthp, dayp, edp, year, m, idayofmonth, NULL); } continue; } /* Every dayofweek of the year */ if (*flags == (F_DAYOFWEEK | F_VARIABLE)) { dow = first_dayofweek_of_year(year); d = (idayofweek - dow + 8) % 7; while (d <= 366) { if (remember_yd(year, d, &rm, &rd)) remember(&remindex, yearp, monthp, dayp, edp, year, rm, rd, NULL); d += 7; } continue; } /* A certain dayofweek of a month */ if (*flags == (F_MONTH | F_DAYOFWEEK | F_MODIFIERINDEX | F_VARIABLE)) { offset = indextooffset(modifierindex); dow = first_dayofweek_of_month(year, imonth); d = (idayofweek - dow + 8) % 7; if (offset > 0) { while (d <= yearinfo->mondays[imonth]) { if (--offset == 0 && remember_ymd(year, imonth, d)) { remember(&remindex, yearp, monthp, dayp, edp, year, imonth, d, NULL); continue; } d += 7; } continue; } if (offset < 0) { while (d <= yearinfo->mondays[imonth]) d += 7; while (offset != 0) { offset++; d -= 7; } if (remember_ymd(year, imonth, d)) remember(&remindex, yearp, monthp, dayp, edp, year, imonth, d, NULL); continue; } continue; } /* Every dayofweek of the month */ if (*flags == (F_DAYOFWEEK | F_MONTH | F_VARIABLE)) { dow = first_dayofweek_of_month(year, imonth); d = (idayofweek - dow + 8) % 7; while (d <= yearinfo->mondays[imonth]) { if (remember_ymd(year, imonth, d)) remember(&remindex, yearp, monthp, dayp, edp, year, imonth, d, NULL); d += 7; } continue; } /* Easter */ if ((*flags & ~F_MODIFIEROFFSET) == (F_SPECIALDAY | F_VARIABLE | F_EASTER)) { offset = 0; if ((*flags & F_MODIFIEROFFSET) != 0) offset = parseoffset(modifieroffset); if (remember_yd(year, yearinfo->ieaster + offset, &rm, &rd)) remember(&remindex, yearp, monthp, dayp, edp, year, rm, rd, NULL); continue; } /* Paskha */ if ((*flags & ~F_MODIFIEROFFSET) == (F_SPECIALDAY | F_VARIABLE | F_PASKHA)) { offset = 0; if ((*flags & F_MODIFIEROFFSET) != 0) offset = parseoffset(modifieroffset); if (remember_yd(year, yearinfo->ipaskha + offset, &rm, &rd)) remember(&remindex, yearp, monthp, dayp, edp, year, rm, rd, NULL); continue; } /* Chinese New Year */ if ((*flags & ~F_MODIFIEROFFSET) == (F_SPECIALDAY | F_VARIABLE | F_CNY)) { offset = 0; if ((*flags & F_MODIFIEROFFSET) != 0) offset = parseoffset(modifieroffset); if (remember_yd(year, yearinfo->firstcnyday + offset, &rm, &rd)) remember(&remindex, yearp, monthp, dayp, edp, year, rm, rd, NULL); continue; } /* FullMoon */ if ((*flags & ~F_MODIFIEROFFSET) == (F_SPECIALDAY | F_VARIABLE | F_FULLMOON)) { int i; offset = 0; if ((*flags & F_MODIFIEROFFSET) != 0) offset = parseoffset(modifieroffset); for (i = 0; yearinfo->ffullmoon[i] > 0; i++) { if (remember_yd(year, floor(yearinfo->ffullmoon[i]) + offset, &rm, &rd)) { ed = floattotime( yearinfo->ffullmoon[i]); remember(&remindex, yearp, monthp, dayp, edp, year, rm, rd, ed); } } continue; } /* NewMoon */ if ((*flags & ~F_MODIFIEROFFSET) == (F_SPECIALDAY | F_VARIABLE | F_NEWMOON)) { int i; offset = 0; if ((*flags & F_MODIFIEROFFSET) != 0) offset = parseoffset(modifieroffset); for (i = 0; yearinfo->ffullmoon[i] > 0; i++) { if (remember_yd(year, floor(yearinfo->fnewmoon[i]) + offset, &rm, &rd)) { ed = floattotime(yearinfo->fnewmoon[i]); remember(&remindex, yearp, monthp, dayp, edp, year, rm, rd, ed); } } continue; } /* (Mar|Sep)Equinox */ if ((*flags & ~F_MODIFIEROFFSET) == (F_SPECIALDAY | F_VARIABLE | F_MAREQUINOX)) { offset = 0; if ((*flags & F_MODIFIEROFFSET) != 0) offset = parseoffset(modifieroffset); if (remember_yd(year, yearinfo->equinoxdays[0] + offset, &rm, &rd)) { ed = floattotime(yearinfo->equinoxdays[0]); remember(&remindex, yearp, monthp, dayp, edp, year, rm, rd, ed); } continue; } if ((*flags & ~F_MODIFIEROFFSET) == (F_SPECIALDAY | F_VARIABLE | F_SEPEQUINOX)) { offset = 0; if ((*flags & F_MODIFIEROFFSET) != 0) offset = parseoffset(modifieroffset); if (remember_yd(year, yearinfo->equinoxdays[1] + offset, &rm, &rd)) { ed = floattotime(yearinfo->equinoxdays[1]); remember(&remindex, yearp, monthp, dayp, edp, year, rm, rd, ed); } continue; } /* (Jun|Dec)Solstice */ if ((*flags & ~F_MODIFIEROFFSET) == (F_SPECIALDAY | F_VARIABLE | F_JUNSOLSTICE)) { offset = 0; if ((*flags & F_MODIFIEROFFSET) != 0) offset = parseoffset(modifieroffset); if (remember_yd(year, yearinfo->solsticedays[0] + offset, &rm, &rd)) { ed = floattotime(yearinfo->solsticedays[0]); remember(&remindex, yearp, monthp, dayp, edp, year, rm, rd, ed); } continue; } if ((*flags & ~F_MODIFIEROFFSET) == (F_SPECIALDAY | F_VARIABLE | F_DECSOLSTICE)) { offset = 0; if ((*flags & F_MODIFIEROFFSET) != 0) offset = parseoffset(modifieroffset); if (remember_yd(year, yearinfo->solsticedays[1] + offset, &rm, &rd)) { ed = floattotime(yearinfo->solsticedays[1]); remember(&remindex, yearp, monthp, dayp, edp, year, rm, rd, ed); } continue; } printf("Unprocessed:\n"); debug_determinestyle(2, date, *flags, month, imonth, dayofmonth, idayofmonth, dayofweek, idayofweek, modifieroffset, modifierindex, specialday); retvalsign = -1; } if (retvalsign == -1) return (-remindex - 1); else return (remindex); } static char * showflags(int flags) { static char s[1000]; s[0] = '\0'; if ((flags & F_MONTH) != 0) strcat(s, "month "); if ((flags & F_DAYOFWEEK) != 0) strcat(s, "dayofweek "); if ((flags & F_DAYOFMONTH) != 0) strcat(s, "dayofmonth "); if ((flags & F_MODIFIERINDEX) != 0) strcat(s, "modifierindex "); if ((flags & F_MODIFIEROFFSET) != 0) strcat(s, "modifieroffset "); if ((flags & F_SPECIALDAY) != 0) strcat(s, "specialday "); if ((flags & F_ALLMONTH) != 0) strcat(s, "allmonth "); if ((flags & F_ALLDAY) != 0) strcat(s, "allday "); if ((flags & F_VARIABLE) != 0) strcat(s, "variable "); if ((flags & F_CNY) != 0) strcat(s, "chinesenewyear "); if ((flags & F_PASKHA) != 0) strcat(s, "paskha "); if ((flags & F_EASTER) != 0) strcat(s, "easter "); if ((flags & F_FULLMOON) != 0) strcat(s, "fullmoon "); if ((flags & F_NEWMOON) != 0) strcat(s, "newmoon "); if ((flags & F_MAREQUINOX) != 0) strcat(s, "marequinox "); if ((flags & F_SEPEQUINOX) != 0) strcat(s, "sepequinox "); if ((flags & F_JUNSOLSTICE) != 0) strcat(s, "junsolstice "); if ((flags & F_DECSOLSTICE) != 0) strcat(s, "decsolstice "); return s; } static const char * getmonthname(int i) { if (nmonths[i - 1].len != 0 && nmonths[i - 1].name != NULL) return (nmonths[i - 1].name); return (months[i - 1]); } static int checkmonth(char *s, size_t *len, size_t *offset, const char **month) { struct fixs *n; int i; for (i = 0; fnmonths[i].name != NULL; i++) { n = fnmonths + i; if (strncasecmp(s, n->name, n->len) == 0) { *len = n->len; *month = n->name; *offset = i + 1; return (1); } } for (i = 0; nmonths[i].name != NULL; i++) { n = nmonths + i; if (strncasecmp(s, n->name, n->len) == 0) { *len = n->len; *month = n->name; *offset = i + 1; return (1); } } for (i = 0; fmonths[i] != NULL; i++) { *len = strlen(fmonths[i]); if (strncasecmp(s, fmonths[i], *len) == 0) { *month = fmonths[i]; *offset = i + 1; return (1); } } for (i = 0; months[i] != NULL; i++) { if (strncasecmp(s, months[i], 3) == 0) { *len = 3; *month = months[i]; *offset = i + 1; return (1); } } return (0); } static const char * getdayofweekname(int i) { if (ndays[i].len != 0 && ndays[i].name != NULL) return (ndays[i].name); return (days[i]); } static int checkdayofweek(char *s, size_t *len, size_t *offset, const char **dow) { struct fixs *n; int i; for (i = 0; fndays[i].name != NULL; i++) { n = fndays + i; if (strncasecmp(s, n->name, n->len) == 0) { *len = n->len; *dow = n->name; *offset = i; return (1); } } for (i = 0; ndays[i].name != NULL; i++) { n = ndays + i; if (strncasecmp(s, n->name, n->len) == 0) { *len = n->len; *dow = n->name; *offset = i; return (1); } } for (i = 0; fdays[i] != NULL; i++) { *len = strlen(fdays[i]); if (strncasecmp(s, fdays[i], *len) == 0) { *dow = fdays[i]; *offset = i; return (1); } } for (i = 0; days[i] != NULL; i++) { if (strncasecmp(s, days[i], 3) == 0) { *len = 3; *dow = days[i]; *offset = i; return (1); } } return (0); } static int isonlydigits(char *s, int nostar) { int i; for (i = 0; s[i] != '\0'; i++) { if (nostar == 0 && s[i] == '*' && s[i + 1] == '\0') return 1; - if (!isdigit(s[i])) + if (!isdigit((unsigned char)s[i])) return (0); } return (1); } static int indextooffset(char *s) { int i; struct fixs *n; if (s[0] == '+') return(strtoll(s + 1, NULL, 10)); if (s[0] == '-') return(-strtoll(s + 1, NULL, 10)); for (i = 0; i < 6; i++) { if (strcasecmp(s, sequences[i]) == 0) { if (i == 5) return (-1); return (i + 1); } } for (i = 0; i < 6; i++) { n = nsequences + i; if (n->len == 0) continue; if (strncasecmp(s, n->name, n->len) == 0) { if (i == 5) return (-1); return (i + 1); } } return (0); } static int parseoffset(char *s) { return strtol(s, NULL, 10); } static char * floattotime(double f) { static char buf[100]; int hh, mm, ss, i; f -= floor(f); i = f * SECSPERDAY; hh = i / SECSPERHOUR; i %= SECSPERHOUR; mm = i / SECSPERMINUTE; i %= SECSPERMINUTE; ss = i; sprintf(buf, "%02d:%02d:%02d", hh, mm, ss); return (buf); } static char * floattoday(int year, double f) { static char buf[100]; int i, m, d, hh, mm, ss; int *cumdays = cumdaytab[isleap(year)]; for (i = 0; 1 + cumdays[i] < f; i++) ;; m = --i; d = floor(f - 1 - cumdays[i]); f -= floor(f); i = f * SECSPERDAY; hh = i / SECSPERHOUR; i %= SECSPERHOUR; mm = i / SECSPERMINUTE; i %= SECSPERMINUTE; ss = i; sprintf(buf, "%02d-%02d %02d:%02d:%02d", m, d, hh, mm, ss); return (buf); } void dodebug(char *what) { int year; printf("UTCOffset: %g\n", UTCOffset); printf("eastlongitude: %d\n", EastLongitude); if (strcmp(what, "moon") == 0) { double ffullmoon[MAXMOONS], fnewmoon[MAXMOONS]; int i; for (year = year1; year <= year2; year++) { fpom(year, UTCOffset, ffullmoon, fnewmoon); printf("Full moon %d:\t", year); for (i = 0; ffullmoon[i] >= 0; i++) { printf("%g (%s) ", ffullmoon[i], floattoday(year, ffullmoon[i])); } printf("\nNew moon %d:\t", year); for (i = 0; fnewmoon[i] >= 0; i++) { printf("%g (%s) ", fnewmoon[i], floattoday(year, fnewmoon[i])); } printf("\n"); } return; } if (strcmp(what, "sun") == 0) { double equinoxdays[2], solsticedays[2]; for (year = year1; year <= year2; year++) { printf("Sun in %d:\n", year); fequinoxsolstice(year, UTCOffset, equinoxdays, solsticedays); printf("e[0] - %g (%s)\n", equinoxdays[0], floattoday(year, equinoxdays[0])); printf("e[1] - %g (%s)\n", equinoxdays[1], floattoday(year, equinoxdays[1])); printf("s[0] - %g (%s)\n", solsticedays[0], floattoday(year, solsticedays[0])); printf("s[1] - %g (%s)\n", solsticedays[1], floattoday(year, solsticedays[1])); } return; } } Index: user/edwin/calendar/sunpos.c =================================================================== --- user/edwin/calendar/sunpos.c (revision 211723) +++ user/edwin/calendar/sunpos.c (revision 211724) @@ -1,448 +1,448 @@ /*- * Copyright (c) 2009-2010 Edwin Groothuis . * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * */ #include __FBSDID("$FreeBSD$"); /* * This code is created to match the formulas available at: * Formula and examples obtained from "How to Calculate alt/az: SAAO" at * http://www.saao.ac.za/public-info/sun-moon-stars/sun-index/how-to-calculate-altaz/ */ #include #include #include #include #include #include #include "calendar.h" #define D2R(m) ((m) / 180 * M_PI) #define R2D(m) ((m) * 180 / M_PI) #define SIN(x) (sin(D2R(x))) #define COS(x) (cos(D2R(x))) #define TAN(x) (tan(D2R(x))) #define ASIN(x) (R2D(asin(x))) #define ATAN(x) (R2D(atan(x))) #ifdef NOTDEF static void comp(char *s, double v, double c) { printf("%-*s %*g %*g %*g\n", 15, s, 15, v, 15, c, 15, v - c); } int expY; double expZJ = 30.5; double expUTHM = 8.5; double expD = 34743.854; double expT = 0.9512349; double expL = 324.885; double expM = 42.029; double expepsilon = 23.4396; double explambda = 326.186; double expalpha = 328.428; double expDEC = -12.789; double expeastlongitude = 17.10; double explatitude = -22.57; double expHA = -37.673; double expALT = 49.822; double expAZ = 67.49; #endif static double fixup(double *d) { if (*d < 0) { while (*d < 0) *d += 360; } else { while (*d > 360) *d -= 360; } return (*d); } static double ZJtable[] = { 0, -0.5, 30.5, 58.5, 89.5, 119.5, 150.5, 180.5, 211.5, 242.5, 272.5, 303.5, 333.5 }; static void sunpos(int inYY, int inMM, int inDD, double UTCOFFSET, int inHOUR, int inMIN, int inSEC, double eastlongitude, double latitude, double *L, double *DEC) { int Y; double ZJ, D, T, M, epsilon, lambda, alpha, HA, UTHM; ZJ = ZJtable[inMM]; if (inMM <= 2 && isleap(inYY)) ZJ -= 1.0; UTHM = inHOUR + inMIN / FMINSPERHOUR + inSEC / FSECSPERHOUR - UTCOFFSET; Y = inYY - 1900; /* 1 */ D = floor(365.25 * Y) + ZJ + inDD + UTHM / FHOURSPERDAY; /* 3 */ T = D / 36525.0; /* 4 */ *L = 279.697 + 36000.769 * T; /* 5 */ fixup(L); M = 358.476 + 35999.050 * T; /* 6 */ fixup(&M); epsilon = 23.452 - 0.013 * T; /* 7 */ fixup(&epsilon); lambda = *L + (1.919 - 0.005 * T) * SIN(M) + 0.020 * SIN(2 * M);/* 8 */ fixup(&lambda); alpha = ATAN(TAN(lambda) * COS(epsilon)); /* 9 */ /* Alpha should be in the same quadrant as lamba */ { int lssign = sin(D2R(lambda)) < 0 ? -1 : 1; int lcsign = cos(D2R(lambda)) < 0 ? -1 : 1; while (((sin(D2R(alpha)) < 0) ? -1 : 1) != lssign || ((cos(D2R(alpha)) < 0) ? -1 : 1) != lcsign) alpha += 90.0; } fixup(&alpha); *DEC = ASIN(SIN(lambda) * SIN(epsilon)); /* 10 */ fixup(DEC); fixup(&eastlongitude); HA = *L - alpha + 180 + 15 * UTHM + eastlongitude; /* 12 */ fixup(&HA); fixup(&latitude); #ifdef NOTDEF printf("%02d/%02d %02d:%02d:%02d l:%g d:%g h:%g\n", inMM, inDD, inHOUR, inMIN, inSEC, latitude, *DEC, HA); #endif return; /* * The following calculations are not used, so to save time * they are not calculated. */ #ifdef NOTDEF *ALT = ASIN(SIN(latitude) * SIN(*DEC) + COS(latitude) * COS(*DEC) * COS(HA)); /* 13 */ fixup(ALT); *AZ = ATAN(SIN(HA) / (COS(HA) * SIN(latitude) - TAN(*DEC) * COS(latitude))); /* 14 */ if (*ALT > 180) *ALT -= 360; if (*ALT < -180) *ALT += 360; printf("a:%g a:%g\n", *ALT, *AZ); #endif #ifdef NOTDEF printf("Y:\t\t\t %d\t\t %d\t\t %d\n", Y, expY, Y - expY); comp("ZJ", ZJ, expZJ); comp("UTHM", UTHM, expUTHM); comp("D", D, expD); comp("T", T, expT); comp("L", L, fixup(&expL)); comp("M", M, fixup(&expM)); comp("epsilon", epsilon, fixup(&expepsilon)); comp("lambda", lambda, fixup(&explambda)); comp("alpha", alpha, fixup(&expalpha)); comp("DEC", DEC, fixup(&expDEC)); comp("eastlongitude", eastlongitude, fixup(&expeastlongitude)); comp("latitude", latitude, fixup(&explatitude)); comp("HA", HA, fixup(&expHA)); comp("ALT", ALT, fixup(&expALT)); comp("AZ", AZ, fixup(&expAZ)); #endif } #define SIGN(a) (((a) > 180) ? -1 : 1) #define ANGLE(a, b) (((a) < (b)) ? 1 : -1) #define SHOUR(s) ((s) / 3600) #define SMIN(s) (((s) % 3600) / 60) #define SSEC(s) ((s) % 60) #define HOUR(h) ((h) / 4) #define MIN(h) (15 * ((h) % 4)) #define SEC(h) 0 #define DEBUG1(y, m, d, hh, mm, pdec, dec) \ printf("%4d-%02d-%02d %02d:%02d:00 - %7.7g -> %7.7g\n", \ y, m, d, hh, mm, pdec, dec) #define DEBUG2(y, m, d, hh, mm, pdec, dec, pang, ang) \ printf("%4d-%02d-%02d %02d:%02d:00 - %7.7g -> %7.7g - %d -> %d\n", \ y, m, d, hh, mm, pdec, dec, pang, ang) void equinoxsolstice(int year, double UTCoffset, int *equinoxdays, int *solsticedays) { double fe[2], fs[2]; fequinoxsolstice(year, UTCoffset, fe, fs); equinoxdays[0] = round(fe[0]); equinoxdays[1] = round(fe[1]); solsticedays[0] = round(fs[0]); solsticedays[1] = round(fs[1]); } void fequinoxsolstice(int year, double UTCoffset, double *equinoxdays, double *solsticedays) { double dec, prevdec, L; int h, d, prevangle, angle; int found = 0; double decleft, decright, decmiddle; int dial, s; int *cumdays; cumdays = cumdaytab[isleap(year)]; /* * Find the first equinox, somewhere in March: * It happens when the returned value "dec" goes from * [350 ... 360> -> [0 ... 10] */ - found = 0; - prevdec = 350; for (d = 18; d < 31; d++) { -// printf("Comparing day %d to %d.\n", d, d+1); + /* printf("Comparing day %d to %d.\n", d, d+1); */ sunpos(year, 3, d, UTCoffset, 0, 0, 0, 0.0, 0.0, &L, &decleft); sunpos(year, 3, d + 1, UTCoffset, 0, 0, 0, 0.0, 0.0, &L, &decright); -// printf("Found %g and %g.\n", decleft, decright); + /* printf("Found %g and %g.\n", decleft, decright); */ if (SIGN(decleft) == SIGN(decright)) continue; dial = SECSPERDAY; s = SECSPERDAY / 2; while (s > 0) { -// printf("Obtaining %d (%02d:%02d)\n", -// dial, SHOUR(dial), SMIN(dial)); + /* printf("Obtaining %d (%02d:%02d)\n", + dial, SHOUR(dial), SMIN(dial)); */ sunpos(year, 3, d, UTCoffset, SHOUR(dial), SMIN(dial), SSEC(dial), 0.0, 0.0, &L, &decmiddle); -// printf("Found %g\n", decmiddle); + /* printf("Found %g\n", decmiddle); */ if (SIGN(decleft) == SIGN(decmiddle)) { decleft = decmiddle; dial += s; } else { decright = decmiddle; dial -= s; } -// printf("New boundaries: %g - %g\n", decleft, decright); + /* + printf("New boundaries: %g - %g\n", decleft, decright); + */ s /= 2; } equinoxdays[0] = 1 + cumdays[3] + d + (dial / FSECSPERDAY); break; } /* Find the second equinox, somewhere in September: * It happens when the returned value "dec" goes from * [10 ... 0] -> <360 ... 350] */ - found = 0; - prevdec = 10; for (d = 18; d < 31; d++) { -// printf("Comparing day %d to %d.\n", d, d+1); + /* printf("Comparing day %d to %d.\n", d, d+1); */ sunpos(year, 9, d, UTCoffset, 0, 0, 0, 0.0, 0.0, &L, &decleft); sunpos(year, 9, d + 1, UTCoffset, 0, 0, 0, 0.0, 0.0, &L, &decright); -// printf("Found %g and %g.\n", decleft, decright); + /* printf("Found %g and %g.\n", decleft, decright); */ if (SIGN(decleft) == SIGN(decright)) continue; dial = SECSPERDAY; s = SECSPERDAY / 2; while (s > 0) { -// printf("Obtaining %d (%02d:%02d)\n", -// dial, SHOUR(dial), SMIN(dial)); + /* printf("Obtaining %d (%02d:%02d)\n", + dial, SHOUR(dial), SMIN(dial)); */ sunpos(year, 9, d, UTCoffset, SHOUR(dial), SMIN(dial), SSEC(dial), 0.0, 0.0, &L, &decmiddle); -// printf("Found %g\n", decmiddle); + /* printf("Found %g\n", decmiddle); */ if (SIGN(decleft) == SIGN(decmiddle)) { decleft = decmiddle; dial += s; } else { decright = decmiddle; dial -= s; } -// printf("New boundaries: %g - %g\n", decleft, decright); + /* + printf("New boundaries: %g - %g\n", decleft, decright); + */ s /= 2; } equinoxdays[1] = 1 + cumdays[9] + d + (dial / FSECSPERDAY); break; } /* * Find the first solstice, somewhere in June: * It happens when the returned value "dec" peaks * [40 ... 45] -> [45 ... 40] */ found = 0; prevdec = 0; prevangle = 1; for (d = 18; d < 31; d++) { for (h = 0; h < 4 * HOURSPERDAY; h++) { sunpos(year, 6, d, UTCoffset, HOUR(h), MIN(h), SEC(h), 0.0, 0.0, &L, &dec); angle = ANGLE(prevdec, dec); if (prevangle != angle) { #ifdef NOTDEF DEBUG2(year, 6, d, HOUR(h), MIN(h), prevdec, dec, prevangle, angle); #endif solsticedays[0] = 1 + cumdays[6] + d + ((h / 4.0) / 24.0); found = 1; break; } prevdec = dec; prevangle = angle; } if (found) break; } /* * Find the second solstice, somewhere in December: * It happens when the returned value "dec" peaks * [315 ... 310] -> [310 ... 315] */ found = 0; prevdec = 360; prevangle = -1; for (d = 18; d < 31; d++) { for (h = 0; h < 4 * HOURSPERDAY; h++) { sunpos(year, 12, d, UTCoffset, HOUR(h), MIN(h), SEC(h), 0.0, 0.0, &L, &dec); angle = ANGLE(prevdec, dec); if (prevangle != angle) { #ifdef NOTDEF DEBUG2(year, 12, d, HOUR(h), MIN(h), prevdec, dec, prevangle, angle); #endif solsticedays[1] = 1 + cumdays[12] + d + ((h / 4.0) / 24.0); found = 1; break; } prevdec = dec; prevangle = angle; } if (found) break; } return; } int calculatesunlongitude30(int year, int degreeGMToffset, int *ichinesemonths) { int m, d, h; double dec; double curL, prevL; int *pichinesemonths, *monthdays, *cumdays, i; int firstmonth330 = -1; cumdays = cumdaytab[isleap(year)]; monthdays = mondaytab[isleap(year)]; pichinesemonths = ichinesemonths; h = 0; sunpos(year - 1, 12, 31, -24 * (degreeGMToffset / 360.0), HOUR(h), MIN(h), SEC(h), 0.0, 0.0, &prevL, &dec); for (m = 1; m <= 12; m++) { for (d = 1; d <= monthdays[m]; d++) { for (h = 0; h < 4 * HOURSPERDAY; h++) { sunpos(year, m, d, -24 * (degreeGMToffset / 360.0), HOUR(h), MIN(h), SEC(h), 0.0, 0.0, &curL, &dec); if (curL < 180 && prevL > 180) { *pichinesemonths = cumdays[m] + d; #ifdef DEBUG printf("%04d-%02d-%02d %02d:%02d - %d %g\n", year, m, d, HOUR(h), MIN(h), *pichinesemonths, curL); #endif pichinesemonths++; } else { for (i = 0; i <= 360; i += 30) if (curL > i && prevL < i) { *pichinesemonths = cumdays[m] + d; #ifdef DEBUG printf("%04d-%02d-%02d %02d:%02d - %d %g\n", year, m, d, HOUR(h), MIN(h), *pichinesemonths, curL); #endif if (i == 330) firstmonth330 = *pichinesemonths; pichinesemonths++; } } prevL = curL; } } } *pichinesemonths = -1; return (firstmonth330); } #ifdef NOTDEF int main(int argc, char **argv) { /* year Mar June Sept Dec day time day time day time day time 2004 20 06:49 21 00:57 22 16:30 21 12:42 2005 20 12:33 21 06:46 22 22:23 21 18:35 2006 20 18:26 21 12:26 23 04:03 22 00:22 2007 21 00:07 21 18:06 23 09:51 22 06:08 2008 20 05:48 20 23:59 22 15:44 21 12:04 2009 20 11:44 21 05:45 22 21:18 21 17:47 2010 20 17:32 21 11:28 23 03:09 21 23:38 2011 20 23:21 21 17:16 23 09:04 22 05:30 2012 20 05:14 20 23:09 22 14:49 21 11:11 2013 20 11:02 21 05:04 22 20:44 21 17:11 2014 20 16:57 21 10:51 23 02:29 21 23:03 2015 20 22:45 21 16:38 23 08:20 22 04:48 2016 20 04:30 20 22:34 22 14:21 21 10:44 2017 20 10:28 21 04:24 22 20:02 21 16:28 */ int eq[2], sol[2]; equinoxsolstice(strtol(argv[1], NULL, 10), 0.0, eq, sol); printf("%d - %d - %d - %d\n", eq[0], sol[0], eq[1], sol[1]); return(0); } #endif Index: user/edwin/calendar =================================================================== --- user/edwin/calendar (revision 211723) +++ user/edwin/calendar (revision 211724) Property changes on: user/edwin/calendar ___________________________________________________________________ Modified: svn:mergeinfo ## -0,0 +0,1 ## Merged /head/usr.bin/calendar:r205964-211721