;=============================
_GetLunarYearDays proc dwYear:dword
pushad
mov edx,dwYear
cmp edx,2050
ja toerr
sub dx,1900
jb toerr
mov bx,LunarInfo[edx*2]
&n103fbsp; mov ecx,12
xor eax,eax
loc3: shl bx,1
adc eax,29
loop loc3
or bx,bx
jz loc4
mov cl,dl
and cl,7
inc cl
shr edx,3
mov dl,leapBigTab[edx]
shl dl,cl
adc eax,29
loc4: jmp toRet
toerr: mov eax,12*30
toRet: mov [esp+1Ch],eax ;returnEAX
popad
ret
_GetLunarYearDays endp
;=============================
_GetLunarMonthDays proc dwYear:dword,dwMonth:dword
pushad
mov edx,dwYear
cmp edx,2050
ja toerr
103f sub dx,1900
jb toerr
mov ecx,dwMonth
cmp ecx,12
ja toerr
cmp cl,1
jb toerr
movzx ebx,LunarInfo[edx*2]
mov esi,ebx
xor eax,eax
shl bx,cl
adc eax,29
and esi,0Fh
cmp esi,ecx
jnz toRet
mov cl,dl
and cl,7
inc cl
shr edx,3
mov dl,leapBigTab[edx]
shl dl,cl
adc ah,29
jmp toRet
toerr: &103fnbsp; mov eax,30
toRet: mov [esp+1Ch],eax ;returnEAX
popad
ret
_GetLunarMonthDays endp
;=====================================
_GetLunarData proc _lpstLunarData:dword
assume esi:ptr LUNARDATA
local AllDay:dword,ThisYear,ThisMonth,ThisDay,AllDays
mov eax,-1
pushad
mov esi,_lpstLunarData
lea edi,[esi].dwLunarYear
mov ecx,sizeof LUNARDATA-6
inc eax
cld
rep stosb
movzx edx,[esi].dwYear
cmp edx,1901
jb OverErr
cmp edx,2050
ja OverErr
movzx ebx,[esi].dwMonth
cmp ebx,1
jb OverErr
cmp ebx,12
&nbs103fp; ja OverErr
invoke _GetMonthDays,edx,ebx
movzx ecx,[esi].dwDay
cmp ecx,1
jb OverErr
cmp ecx,31
ja OverErr
invoke _GetBetweenDays,edx,ebx,ecx,1901,1,1
mov AllDays,eax
mov ThisYear,1900
mov ThisMonth,11
mov ecx,eax
add cl,11
mov ThisDay,ecx
cmp eax,19
jb loc07
sub eax,18
inc ThisMonth
mov ThisDay,eax
cmp eax,31
jb loc07
sub eax,31
inc 103fThisYear
mov ThisMonth,1
mov ThisDay,1
mov AllDay,eax
loc01: invoke _GetLunarYearDays,ThisYear
cmp AllDay,eax
jb loc02
sub AllDay,eax
inc ThisYear
jmp loc01
loc02: invoke _GetLunarMonthDays,ThisYear,ThisMonth
movzx edx,ah
mov ah,0
cmp AllDay,eax
jb loc06
sub AllDay,eax
cmp AllDay,edx
jb loc05
sub AllDay,edx
loc04: inc ThisMonth
jmp loc02
loc05: mov [esi].dbIsLeapMonth,1
loc06: mov eax,AllDay
add ThisDay,eax
loc07: &nbs103fp; mov eax,ThisYear
mov [esi].dwLunarYear,ax
mov eax,ThisMonth
mov [esi].dbLunarMonth,al
mov eax, dword ptr ThisDay
mov [esi].dbLunarDay,al
movzx edx,[esi].dwYear
movzx ebx,[esi].dwMonth
movzx ecx,[esi].dwDay
invoke _GetWeekDay,edx,ebx,ecx
mov [esi].dbWeekDay,al
invoke _GetHolDay,edx,ebx,ecx
mov [esi].noLunarHolDay,al
mov ecx,60
movzx eax,[esi].dwLunarYear
add eax,56
cdq
div ecx
mov [esi].noLunarYear,dl
movzx eax,[esi].dwLunarYear
imul eax,12
movzx edx,[esi].dbLunarMonth
add eax,edx
103f add eax,13
cdq
div ecx
mov [esi].noLunarMonth,dl
mov eax,AllDays
add eax,15
cdq
div ecx
mov [esi].noLunarDay,dl
mov dword ptr [esp+1Ch],0 ;returnEAX
OverErr: popad
ret
assume esi:nothing
_GetLunarData endp