home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 11 Util
/
11-Util.zip
/
qtawkos2.zip
/
QTAUTL.ZIP
/
holiday.exp
< prev
next >
Wrap
Text File
|
1991-05-30
|
4KB
|
128 lines
#
# QTAwk utility for computing dates of holidays.
#
BEGIN {
# gregorian/julian calender
# TRUE == julian calender
# greg_jul = FALSE;
month_array[ 1] = "January";
month_array[ 2] = "Febuary";
month_array[ 3] = "March";
month_array[ 4] = "April";
month_array[ 5] = "May";
month_array[ 6] = "June";
month_array[ 7] = "July";
month_array[ 8] = "August";
month_array[ 9] = "September";
month_array[10] = "October";
month_array[11] = "November";
month_array[12] = "December";
week_day[0] = "Sunday";
week_day[1] = "Monday";
week_day[2] = "Tuesday";
week_day[3] = "Wednesday";
week_day[4] = "Thursday";
week_day[5] = "Friday";
week_day[6] = "Saturday";
# month of pass-over
psm = 3;
leader = copies(" ",20) ∩ ": ";
}
# /^{_w}*{_d}(4,4}({_w}|$)/ {
{
dates($1);
printf("\nHolidays for %4u\n",$1);
holiday = overlay(leader,"Purim",1);
printf("%s %s - %s, %02u/%02u/%02u\n",holiday,month_array[purim[2]],week_day[purim[0]],purim[2],purim[3],purim[1]);
holiday = overlay(leader,"Pass Over",1);
printf("%s %s - %s, %02u/%02u/%02u\n",holiday,month_array[pass_over[2]],week_day[pass_over[0]],pass_over[2],pass_over[3],pass_over[1]);
holiday = overlay(leader,"Shavuot",1);
printf("%s %s - %s, %02u/%02u/%02u\n",holiday,month_array[shavuot[2]],week_day[shavuot[0]],shavuot[2],shavuot[3],shavuot[1]);
holiday = overlay(leader,"Rosh Hashana",1);
printf("%s %s - %s, %02u/%02u/%02u\n",holiday,month_array[rosh_hashana[2]],week_day[rosh_hashana[0]],rosh_hashana[2],rosh_hashana[3],rosh_hashana[1]);
holiday = overlay(leader,"Yom Kippur",1);
printf("%s %s - %s, %02u/%02u/%02u\n",holiday,month_array[yom_kippur[2]],week_day[yom_kippur[0]],yom_kippur[2],yom_kippur[3],yom_kippur[1]);
holiday = overlay(leader,"Sukkot",1);
printf("%s %s - %s, %02u/%02u/%02u\n",holiday,month_array[sukkot[2]],week_day[sukkot[0]],sukkot[2],sukkot[3],sukkot[1]);
holiday = overlay(leader,"Simchat Torah",1);
printf("%s %s - %s, %02u/%02u/%02u\n",holiday,month_array[simchat_torah[2]],week_day[simchat_torah[0]],simchat_torah[2],simchat_torah[3],simchat_torah[1]);
holiday = overlay(leader,"Hanukkah",1);
printf("%s %s - %s, %02u/%02u/%02u\n",holiday,month_array[hanukkah[2]],week_day[hanukkah[0]],hanukkah[2],hanukkah[3],hanukkah[1]);
}
function dates(year) {
local M1, M2, ha, rh, day;
M1 = pass_over_day(year);
M2 = pass_over_day(year + 1);
ha = (M2 - M1) % 5 ? -1 : 0;
greg_jul = TRUE;
pass_over = jdn(year,psm,M1);
greg_jul = FALSE;
day = pass_over + 50;
shavuot = caln(day);
shavout[0] = (day + 1) % 7;
rh = pass_over + 163;
rosh_hashana = caln(rh);
rosh_hashana[0] = (day + 1) % 7;
day = pass_over + 172;
yom_kippur = caln(day);
yom_kippur[0] = (day + 1) % 7;
day = pass_over + 247 + ha;
hanukkah = caln(day);
hanukkah[0] = (day + 1) % 7;
day = pass_over - 30;
purim = caln(day);
purim[0] = (day + 1) % 7;
day = rh + 14;
sukkot = caln(day);
sukkot[0] = (day + 1) % 7;
day = rh + 22;
simchat_torah = caln(day);
simchat_torah[0] = (day + 1) % 7;
day = pass_over;
pass_over = caln(day);
pass_over[0] = (day + 1) % 7;
}
function pass_over_day(year) {
local r1 = 23269.0/25920;
local r2 = 1367.0/2160;
local r3 = 272953.0/492480;
local r4 = 4343.0/98496;
local A, a, b, N, M, M1, C;
A = year + 3760;
a = (12*A + 17) % 19;
b = A % 4;
N= (1 + r3)*a + b/4.0 + 32 + r4 - A/315.0;
M = int(N);
m = fract(N);
C = (3*A + 5*b + M + 5) % 7;
switch ( C ) {
case 0:
if ( a > 11 && m >= r1 ) M++;
break;
case 1:
if ( a > 6 && m >= r2 ) M += 2;
break;
case 2:
case 4:
case 6:
M++;
break;
}
return M;
}
# include Julian date functions
#include <jdn.exp>