home *** CD-ROM | disk | FTP | other *** search
- /*
- * $Header: holidays.c,v 2.1 89/05/09 14:19:10 billr Exp $
- */
- /*
- * holidays.c
- *
- * Author: Bill Randle, Tektronix, Inc. <billr@saab.CNA.TEK.COM>
- * (based on a test driver by R.P.C. Rodgers)
- *
- * Copyright (C) 1989, Tektronix, Inc. All Rights Reserved
- *
- * Permission is hereby granted to use and modify this code in source
- * or binary form as long as it is not sold for profit and this copyright
- * notice remains intact.
- */
- /*
- * functions from datelib (by R.P.C. Rodgers)
- */
- #include "ct.h" /* for the NO_HOLIDAYS #define */
- #ifndef NO_HOLIDAYS
-
- #include <sys/time.h>
-
- double election_day(); /* Secular US holidays */
-
- double autumn_equinox(), /* Astronomical events */
- summer_solstice(),
- vernal_equinox(),
- winter_solstice();
-
- double ascension_day(), /* Christian holidays */
- ash_wednesday(),
- corpus_christi(),
- easter(),
- easter_monday(),
- easter_offset(),
- first_sunday_advent(),
- first_sunday_lent(),
- fourth_sunday_lent(),
- good_friday(),
- maundy_thursday(),
- palm_sunday(),
- passion_sunday(),
- rogation_sunday(),
- septuagesima(),
- sexagesima(),
- quinquagesima(),
- second_sunday_lent(),
- shrove_monday(),
- shrove_tuesday(),
- third_sunday_lent(),
- trinity_sunday(),
- whitsunday();
-
- double islamic_new_year(), /* Islamic holidays */
- muharram_9(),
- muharram_10(),
- muharram_16(),
- eid_i_milad_un_nabi(),
- jumada_al_akhir_23(),
- shab_e_miraj(),
- shab_e_barat(),
- shab_e_qadr(),
- ramadan(),
- eid_al_fitr(),
- dhul_hijja_9(),
- eid_al_adha(),
- ghadir();
-
- double chanukah(), /* Jewish holidays */
- passover(),
- passover_offset(),
- purim(),
- rosh_hashanah(),
- shavuot(),
- simchat_torah(),
- sukkot(),
- yom_kippur();
-
- int check_date();
-
- extern struct tm current; /* current day displayed from calentool */
- int marked_note;
-
- int
- a_dates(appt, flag)
- struct appt_entry *appt;
- int flag;
- {
- /*
- * Astromonical Events
- */
- if (!flag)
- return(0);
- marked_note = flag - 1;
- if (check_date(appt, "Vernal Equinox", vernal_equinox, TRUE))
- return(1);
- if (check_date(appt, "Summer Solstice", summer_solstice, TRUE))
- return(1);
- if (check_date(appt, "Autumn Equinox", autumn_equinox, TRUE))
- return(1);
- if (check_date(appt, "Winter Solstice", winter_solstice, TRUE))
- return(1);
- return(0);
- }
-
- int
- c_dates(appt, flag)
- struct appt_entry *appt;
- int flag;
- {
- /*
- * Christian holidays
- */
- if (!flag)
- return(0);
- marked_note = flag - 1;
- if (check_date(appt, "Septuagesima Sunday", septuagesima, FALSE))
- return(1);
- if (check_date(appt, "Sexagesima Sunday", sexagesima, FALSE))
- return(1);
- if (check_date(appt, "Quinquagesima Sunday", quinquagesima, FALSE))
- return(1);
- if (check_date(appt, "Shrove Monday", shrove_monday, FALSE))
- return(1);
- if (check_date(appt, "Shrove Tuesday (Mardi Gras)", shrove_tuesday, FALSE))
- return(1);
- if (check_date(appt, "Ash Wednesday", ash_wednesday, FALSE))
- return(1);
- if (check_date(appt, "First Sunday in Lent", first_sunday_lent, FALSE))
- return(1);
- if (check_date(appt, "Second Sunday in Lent", second_sunday_lent, FALSE))
- return(1);
- if (check_date(appt, "Third Sunday in Lent", third_sunday_lent, FALSE))
- return(1);
- if (check_date(appt, "Fourth Sunday in Lent", fourth_sunday_lent, FALSE))
- return(1);
- if (check_date(appt, "Passion Sunday", passion_sunday, FALSE))
- return(1);
- if (check_date(appt, "Palm Sunday", palm_sunday, FALSE))
- return(1);
- if (check_date(appt, "Maundy Thursday", maundy_thursday, FALSE))
- return(1);
- if (check_date(appt, "Good Friday", good_friday, FALSE))
- return(1);
- if (check_date(appt, "Easter", easter, FALSE))
- return(1);
- if (check_date(appt, "Easter Monday (Canada)", easter_monday, FALSE))
- return(1);
- if (check_date(appt, "Rogation Sunday", rogation_sunday, FALSE))
- return(1);
- if (check_date(appt, "Ascension Day", ascension_day, FALSE))
- return(1);
- if (check_date(appt, "Whitsunday", whitsunday, FALSE))
- return(1);
- if (check_date(appt, "Trinity Sunday", trinity_sunday, FALSE))
- return(1);
- if (check_date(appt, "Corpus Christi", corpus_christi, FALSE))
- return(1);
- if (check_date(appt, "First Sunday in Advent", first_sunday_advent, FALSE))
- return(1);
- return(0);
- }
-
- int
- i_dates(appt, flag)
- struct appt_entry *appt;
- int flag;
- {
- double day, date1, date2;
- int ndates, myear1, myear2=0;
- int month, year;
- char buf[16];
-
- /*
- * Islamic holidays
- */
- if (!flag)
- return(0);
- marked_note = flag - 1;
- if (check_idate(appt, "Muharram 1, %d A.H.: Islamic New Year", islamic_new_year))
- return(1);
- if (check_idate(appt, "Muharram 9, %d A.H.: Day of fasting", muharram_9))
- return(1);
- if (check_idate(appt,
- "Muharram 10, %d A.H.: Deliverance of Moses from the Pharoah (for Shia Islam, martyrdom of Husain)", muharram_10))
- return(1);
- if (check_idate(appt, "Muharram 16, %d A.H. (Imamat Day; Ismaili Khoja)", muharram_16))
- return(1);
- if (check_idate(appt, "Rabi I 12, %d A.H. (Eid-i-Milad-un-Nabi: The Prophet's Birthday)", eid_i_milad_un_nabi))
- return(1);
- if (check_idate(appt, "Jumada al-Akhir 23, %d A.H. (Birth of Agha Khan IV, Ismaili)", jumada_al_akhir_23))
- return(1);
- if (check_idate(appt, "Rajab 27, %d A.H. (Shab-e-Mi'raj: The Prophet's Ascension)", shab_e_miraj))
- return(1);
- if (check_idate(appt, "Shaban 15, %d A.H. (Shab-e-Bara't: Night, followed by day of fasting)", shab_e_barat))
- return(1);
- if (check_idate(appt, "Ramadan 1, %d A.H. (Fasting month begins)", ramadan))
- return(1);
- if (check_idate(appt, "Ramadan 27, %d A.H. (Shab-e-Qadr: Night vigil))", shab_e_qadr))
- return(1);
- if (check_idate(appt, "Shawwal 1, %d A.H. (Eid-al-Fitr: Day of Feast)", eid_al_fitr))
- return(1);
- if (check_idate(appt, "Dhul-Hijj 9, %d A.H. (Day of Pilgrimage at Arafat, Mecca)", dhul_hijja_9))
- return(1);
- if (check_idate(appt, "Dhul-Hijj 10, %d A.H. (Eid-al-Azha: Day of Abraham's Sacrifice)", eid_al_adha))
- return(1);
- if (check_idate(appt, "Dhul-Hijj 18, %d A.H. (Ghadir: Ali's Nomination)", ghadir))
- return(1);
- return(0);
- }
-
- int
- j_dates(appt, flag)
- struct appt_entry *appt;
- int flag;
- {
- char buf[24];
- int jyear;
-
- /*
- * Jewish holidays
- */
- if (!flag)
- return(0);
- marked_note = flag - 1;
- if (check_jdate(appt, "Purim", purim))
- return(1);
- if (check_jdate(appt, "First day of Passover", passover))
- return(1);
- if (check_jdate(appt, "Shavuot", shavuot))
- return(1);
- if (check_jdate(appt, "Rosh Hashanah (Jewish New Year)", rosh_hashanah))
- return(1);
- if (check_jdate(appt, "Yom Kippur", yom_kippur))
- return(1);
- if (check_jdate(appt, "First day of Sukkot (9 days)", sukkot))
- return(1);
- if (check_jdate(appt, "Simchat Torah", simchat_torah))
- return(1);
- if (check_jdate(appt, "First day of Chanukah (8 days)", chanukah))
- return(1);
- return(0);
- }
-
- int
- s_dates(appt, flag)
- struct appt_entry *appt;
- int flag;
- {
- /*
- * SECULAR US HOLIDAYS
- * [Holidays specified as a given date (e.g. July 4) or as
- * a known nth mday of a month (e.g. 2nd Monday) are not
- * calculated here. They are available from one of the
- * auxillary date files.]
- */
- if (!flag)
- return(0);
- marked_note = flag - 1;
- if (check_date(appt, "Election Day", election_day, FALSE))
- return(1);
- return(0);
- }
-
- /*
- * check for gregorian (i.e. US secular & Christian) holidays
- */
- int
- check_date(aptr, str, func, timeflag)
- struct appt_entry *aptr;
- char *str;
- double (*func)();
- int timeflag;
- {
- int month, year;
- double day, hday;
- char *julian_time();
-
- hday = (*func)(current.tm_year+1900);
- gregorian_date(&day, &month, &year, hday);
- if (current.tm_mon == --month && current.tm_mday == (int)day) {
- aptr->year = current.tm_year;
- aptr->month = current.tm_mon;
- aptr->day = current.tm_mday;
- aptr->arrows = aptr->repeat = aptr->lookahead = 0;
- aptr->flags = (A_NOTE | READONLY);
- if (marked_note)
- aptr->flags |= MARKED;
- strcpy(aptr->str, str);
- if (timeflag) {
- strcat(aptr->str, julian_time(hday));
- strcat(aptr->str, " GMT");
- }
- return(1);
- }
- return(0);
- }
-
- /*
- * check for Islamic holidays
- */
- int
- check_idate(aptr, str, func)
- struct appt_entry *aptr;
- char *str;
- int (*func)();
- {
- double day, date1, date2;
- int nr_dates, year1, year2;
- int month, year;
- int match = 0;
-
- (void)(*func)(current.tm_year+1900, &nr_dates, &date1, &date2, &year1, &year2);
- gregorian_date(&day, &month, &year, date1);
- if (current.tm_mon == --month && current.tm_mday == (int)day)
- match = 1;
- else if (nr_dates == 2) {
- gregorian_date(&day, &month, &year, date2);
- if (current.tm_mon == --month && current.tm_mday == (int)day)
- match = 2;
- }
- if (match) {
- aptr->year = current.tm_year;
- aptr->month = current.tm_mon;
- aptr->day = current.tm_mday;
- aptr->arrows = aptr->repeat = aptr->lookahead = 0;
- aptr->flags = (A_NOTE | READONLY);
- if (marked_note)
- aptr->flags |= MARKED;
- if (match == 1)
- /* match was on first year */
- sprintf(aptr->str, str, year1);
- else
- /* must have been second year */
- sprintf(aptr->str, str, year2);
- return(1);
- }
- return(0);
- }
-
- /*
- * check for Jewish holidays
- */
- int
- check_jdate(aptr, str, func)
- struct appt_entry *aptr;
- char *str;
- double (*func)();
- {
- int month, year, jyear;
- double hday, day;
- char buf[32];
-
- hday = (*func)(current.tm_year+1900, &jyear);
- gregorian_date(&day, &month, &year, hday);
- if (current.tm_mon == --month && current.tm_mday == (int)day) {
-
- aptr->year = current.tm_year;
- aptr->month = current.tm_mon;
- aptr->day = current.tm_mday;
- aptr->arrows = aptr->repeat = aptr->lookahead = 0;
- aptr->flags = (A_NOTE | READONLY);
- if (marked_note)
- aptr->flags |= MARKED;
- strcpy(aptr->str, str);
- sprintf(buf, " [Jewish year %d]", jyear);
- strcat(aptr->str, buf);
- return(1);
- }
- return(0);
- }
- #endif /* NO_HOLIDAYS */
-