Def IsLeapYear(1) If( %(1) MOD 4 = 0 , %(1) MOD 100 <> 0, %(1) MOD 400 = 0 & 1 | 0 )
cls
Usefont "MS Sans Serif",10,0,0,0,0
SetDialogFont 1
DrawText 10,60,"allg. Feiertage"
var FeiertageLV%=CreateListBox(%hwnd,1,10,90,150,200)
var Datum$="02.02.2012"
FEIERTAGE Datum$
WERKTAG Datum$
waitinput
end
Proc WERKTAG
Parameters _Datum$
Declare _t%, _m%, _j%, _wtk%, _wtc%
_m%=val(substr$(_Datum$,2,"."))
_j%=val(substr$(_Datum$,3,"."))
case InStr(substr$(_Datum$,2,"."),"01030507081012") : _t%=31
case InStr(substr$(_Datum$,2,"."),"0406091011") : _t%=30
case substr$(_Datum$,2,".") = "02" : _t%=28 + IsLeapYear(val(substr$(_Datum$,3,".")))' Schaltjahr?
' 0= Sonntag
Whileloop 7
_wtk% = int(0.6+1/_m%)
_wtc%=int(13*(_m%+12*_wtk%+1)/5)+int(5*(_j%-_wtk%)/4)-int((_j%-_wtk%)/100)+int((_j%-_wtk%)/400)-(7*int((int(13*(_m%+12*_wtk%+1)/5)+int(5*(_j%-_wtk%)/4)-int((_j%-_wtk%)/100)+int((_j%-_wtk%)/400)+_t%-1)/7))+_t%-1
If (_wtc% <> 0) AND (_wtc% < 6)
' Feiertag?
If @SelectString(FeiertageLV%,-1,str$(_j%)+"."+Format$("00",_m%)+"."+Format$("00",_t%))=-1
print "letzer Werktag im " + substr$(_Datum$,2,".")+". Monat des Jahres "+substr$(_Datum$,3,".") + \
" ist der: " + @Format$("00",_t%)
BREAK
EndIf
EndIf
dec _t%
EndWhile
EndProc
Proc FEIERTAGE
Parameters _Datum$
var _j%=val(substr$(_Datum$,3,"."))
AddString(FeiertageLV%,str$(_j%)+".01.01")
AddString(FeiertageLV%,str$(_j%)+".05.01")
AddString(FeiertageLV%,str$(_j%)+".10.03")
Declare osterzahl%
' Berechnet den Ostersonntag
Declare a%,b%,c%,d%,e%,f%,g%,h%,h1%,h2%,i%
Declare k%,l%,L1%,L2%,m%,m1%,m2%,n%,n1%,n2%,p%
Declare kartag%,karmonat%,ostermontag%,ostermonat%
a%=_j% Mod 19
b%=_j%/100
c%=_j% Mod 100
d%=b%/4
e%=b% Mod 4
f%=(b%+8)/25
g%= b% + f%
Inc g%
g%=g%/3
h1%=19*a%
h2%=b%-d%
dec h2%,g%
inc h2%,15
h%=h1%+h2%
h%=h% Mod 30
i%=c%/4
k%=c% Mod 4
L1%=2*e%
inc L1%,32
L2%=2*i%
inc L1%,L2%
L2%=h%+k%
l%=L1%-L2%
l%=l% Mod 7
m1%=11 * h%
m2%=22+l%
m%=a%+m1%
inc m%,m2%
m%=m%/451
n1%=7*m%
n%=h%+l%
dec n%,n1%
n2%=n%+114
n%=n2%/31' n% ist der Monat des Osterdatums
p%=n2% Mod 31
Inc p%' p% ist der Tag des Osterdatums
' Karfreitag
kartag%=p%-2
karmonat%=n%
If p%=1
kartag%=30
karmonat%=3
ElseIf p%=2
kartag%=31
karmonat%=3
EndIf
AddString(FeiertageLV%,str$(_j%)+"."+Format$("00",karmonat%)+"."+Format$("00",kartag%))
' Ostersonntag"
AddString(FeiertageLV%,str$(_j%)+"."+Format$("00",n%)+"."+Format$("00",p%))
' Ostermontag ***
If p%=31
ostermontag%=1
ostermonat%=4
Else
ostermontag%=p%+1
ostermonat%=n%
EndIf
AddString(FeiertageLV%,str$(_j%)+"."+Format$("00",ostermonat%)+"."+Format$("00",ostermontag%))
' Berechnung osterabhängiger Feiertage
osterzahl%=59+p%
Case n%=4: osterzahl%=osterzahl%+31
Declare hi%,himon%,pfi%,pfimonat%,pfimo%,frolei%,fromon%,muta%
' Himmelfahrt
hi%=osterzahl%+39
If hi%>151
himon%=6
hi%=hi%-151
Else
himon%=5
hi%=hi%-120
EndIf
AddString(FeiertageLV%,str$(_j%)+"."+Format$("00",himon%)+"."+Format$("00",hi%))
' Pfingsten
pfi%=osterzahl%+49
If pfi%>151
pfimonat%=6
pfi%=pfi%-151
Else
pfimonat%=5
pfi%=pfi%-120
EndIf
AddString(FeiertageLV%,str$(_j%)+"."+Format$("00",pfimonat%)+"."+Format$("00",pfi%))
' Pfingstmontag ***
If pfi%>31
pfimo%=1
pfimonat%=6
Else
pfimo%=pfi%+1
EndIf
AddString(FeiertageLV%,str$(_j%)+"."+Format$("00",pfimonat%)+"."+Format$("00",pfimo%))
AddString(FeiertageLV%,str$(_j%)+".12.25")
AddString(FeiertageLV%,str$(_j%)+".12.26")
' wenn Heiligabend nicht als Werktag angesehen wird, als Feiertag eintragen
' AddString(FeiertageLV%,str$(_ja%)+".12.24")
' wenn Silvester nicht als Werktag angesehen wird, a
ertag present
' AddStrings(FeiertageLV%,st$(_j%)+".12.31")
ENDPROC