home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 11 Util / 11-Util.zip / qtawkos2.zip / QTAUTL.ZIP / holiday.exp < prev    next >
Text File  |  1991-05-30  |  4KB  |  128 lines

  1. #
  2. # QTAwk utility for computing dates of holidays.
  3. #
  4. BEGIN {
  5.     # gregorian/julian calender
  6.     # TRUE == julian calender
  7.     # greg_jul = FALSE;
  8.     month_array[ 1] = "January";
  9.     month_array[ 2] = "Febuary";
  10.     month_array[ 3] = "March";
  11.     month_array[ 4] = "April";
  12.     month_array[ 5] = "May";
  13.     month_array[ 6] = "June";
  14.     month_array[ 7] = "July";
  15.     month_array[ 8] = "August";
  16.     month_array[ 9] = "September";
  17.     month_array[10] = "October";
  18.     month_array[11] = "November";
  19.     month_array[12] = "December";
  20.     week_day[0] = "Sunday";
  21.     week_day[1] = "Monday";
  22.     week_day[2] = "Tuesday";
  23.     week_day[3] = "Wednesday";
  24.     week_day[4] = "Thursday";
  25.     week_day[5] = "Friday";
  26.     week_day[6] = "Saturday";
  27.     # month of pass-over
  28.     psm = 3;
  29.     leader = copies(" ",20) ∩ ": ";
  30. }
  31.  
  32. # /^{_w}*{_d}(4,4}({_w}|$)/ {
  33.     {
  34.     dates($1);
  35.     printf("\nHolidays for %4u\n",$1);
  36.     holiday = overlay(leader,"Purim",1);
  37.     printf("%s %s - %s, %02u/%02u/%02u\n",holiday,month_array[purim[2]],week_day[purim[0]],purim[2],purim[3],purim[1]);
  38.  
  39.     holiday = overlay(leader,"Pass Over",1);
  40.     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]);
  41.  
  42.     holiday = overlay(leader,"Shavuot",1);
  43.     printf("%s %s - %s, %02u/%02u/%02u\n",holiday,month_array[shavuot[2]],week_day[shavuot[0]],shavuot[2],shavuot[3],shavuot[1]);
  44.  
  45.     holiday = overlay(leader,"Rosh Hashana",1);
  46.     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]);
  47.  
  48.     holiday = overlay(leader,"Yom Kippur",1);
  49.     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]);
  50.  
  51.     holiday = overlay(leader,"Sukkot",1);
  52.     printf("%s %s - %s, %02u/%02u/%02u\n",holiday,month_array[sukkot[2]],week_day[sukkot[0]],sukkot[2],sukkot[3],sukkot[1]);
  53.  
  54.     holiday = overlay(leader,"Simchat Torah",1);
  55.     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]);
  56.  
  57.     holiday = overlay(leader,"Hanukkah",1);
  58.     printf("%s %s - %s, %02u/%02u/%02u\n",holiday,month_array[hanukkah[2]],week_day[hanukkah[0]],hanukkah[2],hanukkah[3],hanukkah[1]);
  59. }
  60.  
  61. function dates(year) {
  62.     local M1, M2, ha, rh, day;
  63.  
  64.     M1 = pass_over_day(year);
  65.     M2 = pass_over_day(year + 1);
  66.     ha = (M2 - M1) % 5 ? -1 : 0;
  67.     greg_jul = TRUE;
  68.     pass_over = jdn(year,psm,M1);
  69.     greg_jul = FALSE;
  70.     day = pass_over + 50;
  71.     shavuot = caln(day);
  72.     shavout[0] = (day + 1) % 7;
  73.     rh = pass_over + 163;
  74.     rosh_hashana = caln(rh);
  75.     rosh_hashana[0] = (day + 1) % 7;
  76.     day = pass_over + 172;
  77.     yom_kippur = caln(day);
  78.     yom_kippur[0] = (day + 1) % 7;
  79.     day = pass_over + 247 + ha;
  80.     hanukkah = caln(day);
  81.     hanukkah[0] = (day + 1) % 7;
  82.     day = pass_over - 30;
  83.     purim = caln(day);
  84.     purim[0] = (day + 1) % 7;
  85.     day = rh + 14;
  86.     sukkot = caln(day);
  87.     sukkot[0] = (day + 1) % 7;
  88.     day = rh + 22;
  89.     simchat_torah = caln(day);
  90.     simchat_torah[0] = (day + 1) % 7;
  91.     day = pass_over;
  92.     pass_over = caln(day);
  93.     pass_over[0] = (day + 1) % 7;
  94. }
  95.  
  96. function pass_over_day(year) {
  97.     local r1 = 23269.0/25920;
  98.     local r2 = 1367.0/2160;
  99.     local r3 = 272953.0/492480;
  100.     local r4 = 4343.0/98496;
  101.     local A, a, b, N, M, M1, C;
  102.  
  103.     A = year + 3760;
  104.     a = (12*A + 17) % 19;
  105.     b = A % 4;
  106.     N= (1 + r3)*a + b/4.0 + 32 + r4 - A/315.0;
  107.     M = int(N);
  108.     m = fract(N);
  109.     C = (3*A + 5*b + M + 5) % 7;
  110.     switch ( C ) {
  111.     case 0:
  112.         if ( a > 11 && m >= r1 ) M++;
  113.         break;
  114.     case 1:
  115.         if ( a > 6 && m >= r2 ) M += 2;
  116.         break;
  117.     case 2:
  118.     case 4:
  119.     case 6:
  120.         M++;
  121.         break;
  122.     }
  123.     return M;
  124. }
  125.  
  126. # include Julian date functions
  127. #include <jdn.exp>
  128.