|
@@ -0,0 +1,154 @@
|
|
|
+
|
|
|
+BEGIN {
|
|
|
+ y=2016; # change to the appropriate year !
|
|
|
+ lang=ENVIRON["LANG"]
|
|
|
+ easter["C"]="Easter"
|
|
|
+ easter["fr_FR.ISO8859-1"]="P?ques"
|
|
|
+ easter["it_IT.ISO8859-1"]="Pasqua"
|
|
|
+ easter["es_ES.ISO8859-1"]="Pascua"
|
|
|
+ easter["de_DE.ISO8859-1"]="Ostersonntag"
|
|
|
+
|
|
|
+ ascension["C"]="Ascension Day"
|
|
|
+ ascension["fr_FR.ISO8859-1"]="Ascension"
|
|
|
+ ascension["it_IT.ISO8859-1"]="Ascensione"
|
|
|
+ ascension["es_ES.ISO8859-1"]="Ascension"
|
|
|
+ ascension["de_DE.ISO8859-1"]="Christi Himmelfahrt"
|
|
|
+
|
|
|
+ whit["C"]="Whit Sunday"
|
|
|
+ whit["fr_FR.ISO8859-1"]="Pentec?te"
|
|
|
+ whit["it_IT.ISO8859-1"]="Spirito Sancto"
|
|
|
+ whit["es_ES.ISO8859-1"]="Pentecost?s"
|
|
|
+ whit["de_DE.ISO8859-1"]="Pfingstsonntag"
|
|
|
+
|
|
|
+# Formula to calculate the date of Easter
|
|
|
+ g=y%19;
|
|
|
+ c=int(y/100);
|
|
|
+ c4=int(c/4);
|
|
|
+ e=int((8*c+13)/25);
|
|
|
+ h=(19*g+c-c4-e+15)%30;
|
|
|
+ k=int(h/28);
|
|
|
+ p=int(29/(h+1));
|
|
|
+ q=int((21-g)/11);
|
|
|
+ i=(k*p*q-1)*k+h;
|
|
|
+ b=int(y/4)+y;
|
|
|
+ j1=b+i+2+c4-c;
|
|
|
+ j2=j1%7;
|
|
|
+ r=28+i-j2;
|
|
|
+ m=int(r/32)+3;
|
|
|
+ d=r-31*(m-3);
|
|
|
+
|
|
|
+# Creating an appointment in XAPIA format for Easter
|
|
|
+ sdate=sprintf("%.4d%.2d%.2dT004100Z",d,m,y);
|
|
|
+ fdate=sprintf("%.4d%.2d%.2dT004200Z",d,m,y);
|
|
|
+ appt="easter_"y;
|
|
|
+ printf("\n\n") >appt
|
|
|
+ print "\t** Calendar Appointment **" >appt
|
|
|
+ print "-//CDE_XAPIA_PRIVATE/CSA/ENTRYATTR//NONSGML Entry Delimiter//EN:string:begin">appt;
|
|
|
+ printf("-//XAPIA/CSA/ENTRYATTR//NONSGML Start Date//EN:datetime:%s\n",sdate)>appt;
|
|
|
+ print "-//XAPIA/CSA/ENTRYATTR//NONSGML Type//EN:uinteger:0">appt;
|
|
|
+ print "-//XAPIA/CSA/ENTRYATTR//NONSGML Subtype//EN:string:-//XAPIA/CSA/SUBTYPE//NONSGML Subtype Appointment//EN">appt;
|
|
|
+ print "-//XAPIA/CSA/ENTRYATTR//NONSGML Classification//EN:uinteger:0">appt;
|
|
|
+ printf("-//XAPIA/CSA/ENTRYATTR//NONSGML End Date//EN:datetime:%s\n",fdate)>appt;
|
|
|
+ print "-//CDE_XAPIA_PRIVATE/CSA/ENTRYATTR//NONSGML Show Time//EN:sinteger:0">appt;
|
|
|
+ printf("-//XAPIA/CSA/ENTRYATTR//NONSGML Summary//EN:string: %s %.4d\n",easter[lang],y)>appt;
|
|
|
+ print "-//XAPIA/CSA/ENTRYATTR//NONSGML Status//EN:uinteger:2304">appt;
|
|
|
+ printf("-//CDE_XAPIA_PRIVATE/CSA/ENTRYATTR//NONSGML Repeat Type//EN:sinteger:0\n")>appt;
|
|
|
+ printf("-//CDE_XAPIA_PRIVATE/CSA/ENTRYATTR//NONSGML Repeat Times//EN:uinteger:0\n")>appt;
|
|
|
+ print "-//XAPIA/CSA/ENTRYATTR//NONSGML Audio Reminder//EN:reminder:300:">appt;
|
|
|
+ print "-//XAPIA/CSA/ENTRYATTR//NONSGML Popup Reminder//EN:reminder:300:">appt;
|
|
|
+ print "-//CDE_XAPIA_PRIVATE/CSA/ENTRYATTR//NONSGML Repeat Occurrence Number//EN:sinteger:-1">appt;
|
|
|
+ print "-//CDE_XAPIA_PRIVATE/CSA/ENTRYATTR//NONSGML Repeat Interval//EN:uinteger:0">appt;
|
|
|
+ print "-//CDE_XAPIA_PRIVATE/CSA/ENTRYATTR//NONSGML Entry Delimiter//EN:string:end">appt;
|
|
|
+ printf("\tDate: %s/%s/%s\n",m,d,y)>appt;
|
|
|
+ printf("\tStart: 0241\n",shour,smin)>appt
|
|
|
+ printf("\tEnd: 0242\n",fhour,fmin)>appt
|
|
|
+ printf("\tRepeat: One Time\n")>appt;
|
|
|
+ printf("\tFor: 0\n")>appt;
|
|
|
+ printf("\tWhat: %s %.4d\n",easter[lang],y)>appt;
|
|
|
+ printf("\t")>appt;
|
|
|
+
|
|
|
+# Ascension day is 40 days after easter
|
|
|
+
|
|
|
+ aday=r+39;
|
|
|
+# print aday; # for debugging purpose only !
|
|
|
+ m=3;
|
|
|
+ if (aday>31) {aday-=31;m++ }
|
|
|
+ if (aday>30) {aday-=30;m++ }
|
|
|
+ if (aday>31) {aday-=31;m++}
|
|
|
+ if (aday>30) {aday-=30;m++}
|
|
|
+
|
|
|
+ sdate=sprintf("%.4d%.2d%.2dT004100Z",aday,m,y);
|
|
|
+ fdate=sprintf("%.4d%.2d%.2dT004200Z",aday,m,y);
|
|
|
+ appt="ascension_"y;
|
|
|
+
|
|
|
+ printf("\n\n") >appt
|
|
|
+ print "\t** Calendar Appointment **" >appt
|
|
|
+ print "-//CDE_XAPIA_PRIVATE/CSA/ENTRYATTR//NONSGML Entry Delimiter//EN:string:begin">appt;
|
|
|
+ printf("-//XAPIA/CSA/ENTRYATTR//NONSGML Start Date//EN:datetime:%s\n",sdate)>appt;
|
|
|
+ print "-//XAPIA/CSA/ENTRYATTR//NONSGML Type//EN:uinteger:0">appt;
|
|
|
+ print "-//XAPIA/CSA/ENTRYATTR//NONSGML Subtype//EN:string:-//XAPIA/CSA/SUBTYPE//NONSGML Subtype Appointment//EN">appt;
|
|
|
+ print "-//XAPIA/CSA/ENTRYATTR//NONSGML Classification//EN:uinteger:0">appt;
|
|
|
+ printf("-//XAPIA/CSA/ENTRYATTR//NONSGML End Date//EN:datetime:%s\n",fdate)>appt;
|
|
|
+ print "-//CDE_XAPIA_PRIVATE/CSA/ENTRYATTR//NONSGML Show Time//EN:sinteger:0">appt;
|
|
|
+ printf("-//XAPIA/CSA/ENTRYATTR//NONSGML Summary//EN:string: %s %.4d\n",ascension[lang],y)>appt;
|
|
|
+ print "-//XAPIA/CSA/ENTRYATTR//NONSGML Status//EN:uinteger:2304">appt;
|
|
|
+ printf("-//CDE_XAPIA_PRIVATE/CSA/ENTRYATTR//NONSGML Repeat Type//EN:sinteger:0\n")>appt;
|
|
|
+ printf("-//CDE_XAPIA_PRIVATE/CSA/ENTRYATTR//NONSGML Repeat Times//EN:uinteger:0\n")>appt;
|
|
|
+ print "-//XAPIA/CSA/ENTRYATTR//NONSGML Audio Reminder//EN:reminder:300:">appt;
|
|
|
+ print "-//XAPIA/CSA/ENTRYATTR//NONSGML Popup Reminder//EN:reminder:300:">appt;
|
|
|
+ print "-//CDE_XAPIA_PRIVATE/CSA/ENTRYATTR//NONSGML Repeat Occurrence Number//EN:sinteger:-1">appt;
|
|
|
+ print "-//CDE_XAPIA_PRIVATE/CSA/ENTRYATTR//NONSGML Repeat Interval//EN:uinteger:0">appt;
|
|
|
+ print "-//CDE_XAPIA_PRIVATE/CSA/ENTRYATTR//NONSGML Entry Delimiter//EN:string:end">appt;
|
|
|
+ printf("\tDate: %s/%s/%s\n",m,aday,y)>appt;
|
|
|
+ printf("\tStart: 0241\n",shour,smin)>appt
|
|
|
+ printf("\tEnd: 0242\n",fhour,fmin)>appt
|
|
|
+ printf("\tRepeat: One Time\n")>appt;
|
|
|
+ printf("\tFor: 0\n")>appt;
|
|
|
+ printf("\tWhat: %s %.4d\n",ascension[lang],y)>appt;
|
|
|
+ printf("\t")>appt;
|
|
|
+
|
|
|
+# Whit Monday is 50 days after easter
|
|
|
+ wday=r+48;
|
|
|
+ m=3;
|
|
|
+ if (wday>31) {wday-=30;m++}
|
|
|
+ if (wday>30) {wday-=30;m++}
|
|
|
+ if (wday>31) {wday-=31;m++}
|
|
|
+ if (wday>30) {wday-=30;m++}
|
|
|
+
|
|
|
+ sdate=sprintf("%.4d%.2d%.2dT004100Z",wday,m,y);
|
|
|
+ fdate=sprintf("%.4d%.2d%.2dT004200Z",wday,m,y);
|
|
|
+ appt="whit_"y;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ printf("\n\n") >appt
|
|
|
+ print "\t** Calendar Appointment **" >appt
|
|
|
+ print "-//CDE_XAPIA_PRIVATE/CSA/ENTRYATTR//NONSGML Entry Delimiter//EN:string:begin">appt;
|
|
|
+ printf("-//XAPIA/CSA/ENTRYATTR//NONSGML Start Date//EN:datetime:%s\n",sdate)>appt;
|
|
|
+ print "-//XAPIA/CSA/ENTRYATTR//NONSGML Type//EN:uinteger:0">appt;
|
|
|
+ print "-//XAPIA/CSA/ENTRYATTR//NONSGML Subtype//EN:string:-//XAPIA/CSA/SUBTYPE//NONSGML Subtype Appointment//EN">appt;
|
|
|
+ print "-//XAPIA/CSA/ENTRYATTR//NONSGML Classification//EN:uinteger:0">appt;
|
|
|
+ printf("-//XAPIA/CSA/ENTRYATTR//NONSGML End Date//EN:datetime:%s\n",fdate)>appt;
|
|
|
+ print "-//CDE_XAPIA_PRIVATE/CSA/ENTRYATTR//NONSGML Show Time//EN:sinteger:0">appt;
|
|
|
+ printf("-//XAPIA/CSA/ENTRYATTR//NONSGML Summary//EN:string: %s %.4d\n",whit[lang],y)>appt;
|
|
|
+ print "-//XAPIA/CSA/ENTRYATTR//NONSGML Status//EN:uinteger:2304">appt;
|
|
|
+ printf("-//CDE_XAPIA_PRIVATE/CSA/ENTRYATTR//NONSGML Repeat Type//EN:sinteger:0\n")>appt;
|
|
|
+ printf("-//CDE_XAPIA_PRIVATE/CSA/ENTRYATTR//NONSGML Repeat Times//EN:uinteger:0\n")>appt;
|
|
|
+ print "-//XAPIA/CSA/ENTRYATTR//NONSGML Audio Reminder//EN:reminder:300:">appt;
|
|
|
+ print "-//XAPIA/CSA/ENTRYATTR//NONSGML Popup Reminder//EN:reminder:300:">appt;
|
|
|
+ print "-//CDE_XAPIA_PRIVATE/CSA/ENTRYATTR//NONSGML Repeat Occurrence Number//EN:sinteger:-1">appt;
|
|
|
+ print "-//CDE_XAPIA_PRIVATE/CSA/ENTRYATTR//NONSGML Repeat Interval//EN:uinteger:0">appt;
|
|
|
+ print "-//CDE_XAPIA_PRIVATE/CSA/ENTRYATTR//NONSGML Entry Delimiter//EN:string:end">appt;
|
|
|
+ printf("\tDate: %s/%s/%s\n",m,wday,y)>appt;
|
|
|
+ printf("\tStart: 0241\n",shour,smin)>appt
|
|
|
+ printf("\tEnd: 0242\n",fhour,fmin)>appt
|
|
|
+ printf("\tRepeat: One Time\n")>appt;
|
|
|
+ printf("\tFor: 0\n")>appt;
|
|
|
+ printf("\tWhat: %s %.4d\n",whit[lang],y)>appt;
|
|
|
+ printf("\t")>appt;
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+# We can also calculate the date of Pentecost (Whit Sunday/Monday) = Easter +50 days
|
|
|
+# and of Ascension Day = Easter + 4O days
|
|
|
+# To write to files in awk, it is enough to do print(f) something > FILE
|