?? parserc.asm
字號(hào):
or [edi].MNUITEM.shortcut,200h
jmp NxtKey
.elseif dword ptr [ebx]=='+tlA'
add ebx,4
or [edi].MNUITEM.shortcut,400h
jmp NxtKey
.elseif word ptr [ebx]>='A' && word ptr [ebx]<='Z'
movzx eax,byte ptr [ebx]
or [edi].MNUITEM.shortcut,eax
.elseif byte ptr [ebx]=='F'
invoke ResEdDecToBin,addr [ebx+1]
add eax,6Fh
or [edi].MNUITEM.shortcut,eax
.endif
pop ebx
.if eax
mov byte ptr [ebx],0
.else
mov [edi].MNUITEM.shortcut,eax
.endif
.endif
invoke lstrcpy,addr [edi].MNUITEM.itemcaption,offset wordbuff
.if byte ptr [esi] && byte ptr [esi]!=0Dh
invoke GetWord,offset wordbuff,esi
mov ecx,eax
invoke IsBegin,offset wordbuff
or eax,eax
jz NxtBegin
invoke IsEnd,offset wordbuff
or eax,eax
jz NxtEnd
add esi,ecx
;Name / ID
invoke GetName,lpProMem,offset wordbuff,addr [edi].MNUITEM.itemname,addr [edi].MNUITEM.itemid
Call SetOptions
.endif
NxtBegin:
add edi,sizeof MNUITEM
jmp @b
.endif
NxtEnd:
invoke lstrcmpi,offset wordbuff,offset szEND
.if eax
invoke lstrcmpi,offset wordbuff,offset szENDSHORT
.endif
.if !eax
dec nNest
je Ex
jmp @b
.endif
Ex:
mov eax,esi
sub eax,lpRCMem
ret
SetOptions:
.if byte ptr [esi] && byte ptr [esi]!=0Dh
;Type
invoke GetStyle,esi,offset menutypedef
test edx,MFT_SEPARATOR
.if !ZERO?
xor edx,MFT_SEPARATOR
mov word ptr [edi].MNUITEM.itemcaption,'-'
.endif
mov [edi].MNUITEM.ntype,edx
add esi,eax
.endif
.if byte ptr [esi] && byte ptr [esi]!=0Dh
;State
invoke GetStyle,esi,offset menustatedef
mov [edi].MNUITEM.nstate,edx
add esi,eax
.endif
.if byte ptr [esi] && byte ptr [esi]!=0Dh
;HelpID
invoke GetNum,lpProMem
.endif
retn
ParseMenuEx endp
ParseAccelerators proc uses ebx esi edi,lpRCMem:DWORD,lpProMem:DWORD
invoke AddTypeMem,lpProMem,64*1024,TPE_ACCEL
mov edi,eax
;Name / ID
invoke GetName,lpProMem,offset namebuff,addr [edi].ACCELMEM.szname,addr [edi].ACCELMEM.value
add edi,sizeof ACCELMEM
mov esi,lpRCMem
invoke GetLoadOptions,esi
add esi,eax
@@:
invoke GetWord,offset wordbuff,esi
add esi,eax
mov ebx,eax
invoke lstrcmpi,offset wordbuff,offset szCHARACTERISTICS
.if !eax
invoke GetNum,lpProMem
jmp @b
.endif
invoke lstrcmpi,offset wordbuff,offset szVERSION
.if !eax
invoke GetNum,lpProMem
jmp @b
.endif
invoke lstrcmpi,offset wordbuff,offset szLANGUAGE
.if !eax
invoke GetWord,offset wordbuff,esi
add esi,eax
invoke GetWord,offset wordbuff,esi
add esi,eax
jmp @b
.endif
sub esi,ebx
invoke GetWord,offset wordbuff,esi
add esi,eax
invoke lstrcmpi,offset wordbuff,offset szBEGIN
.if eax
invoke lstrcmpi,offset wordbuff,offset szBEGINSHORT
.endif
.if !eax
Nxt:
invoke GetWord,offset wordbuff,esi
add esi,eax
invoke lstrcmpi,offset wordbuff,offset szEND
.if eax
invoke lstrcmpi,offset wordbuff,offset szENDSHORT
.endif
.if eax
mov eax,dword ptr wordbuff
and eax,0FFFFFFh
.if al=='"'
invoke UnQuoteWord,offset wordbuff
movzx eax,wordbuff
.elseif ax=='x0'
invoke HexToBin,offset wordbuff+2
.elseif al>='0' && al<='9'
invoke ResEdDecToBin,offset wordbuff
.elseif eax=='_KV'
push esi
mov esi,offset szAclKeys
.while byte ptr [esi]
lea eax,[esi+1]
invoke lstrcmp,offset wordbuff+3,eax
.if !eax
movzx eax,byte ptr [esi]
jmp @f
.endif
invoke lstrlen,esi
lea esi,[esi+eax+1]
.endw
mov eax,41h
@@:
pop esi
.else
mov eax,41h
.endif
mov ebx,eax
push esi
push edi
xor edi,edi
mov esi,offset szAclKeys
.while byte ptr [esi]
.break .if bl==byte ptr [esi]
invoke lstrlen,esi
inc edi
lea esi,[esi+eax+1]
.endw
mov eax,edi
pop edi
pop esi
mov [edi].ACCELMEM.nkey,eax
invoke GetWord,offset wordbuff,esi
add esi,eax
invoke GetName,lpProMem,offset wordbuff,addr [edi].ACCELMEM.szname,addr [edi].ACCELMEM.value
xor ebx,ebx
.while byte ptr [esi]!=0Dh
invoke GetWord,offset wordbuff,esi
add esi,eax
invoke lstrcmpi,offset wordbuff,offset szVIRTKEY
.if !eax
jmp @f
.endif
invoke lstrcmpi,offset wordbuff,offset szNOINVERT
.if !eax
jmp @f
.endif
invoke lstrcmpi,offset wordbuff,offset szCONTROL
.if !eax
or ebx,1
jmp @f
.endif
invoke lstrcmpi,offset wordbuff,offset szSHIFT
.if !eax
or ebx,2
jmp @f
.endif
invoke lstrcmpi,offset wordbuff,offset szALT
.if !eax
or ebx,4
.endif
@@:
.endw
mov [edi].ACCELMEM.flag,ebx
add edi,sizeof ACCELMEM
jmp Nxt
.endif
.endif
mov eax,esi
sub eax,lpRCMem
ret
ParseAccelerators endp
ParseVersioninfo proc uses ebx esi edi,lpRCMem:DWORD,lpProMem:DWORD
LOCAL nNest:DWORD
invoke AddTypeMem,lpProMem,64*1024,TPE_VERSION
mov edi,eax
;Name / ID
invoke GetName,lpProMem,offset namebuff,addr [edi].VERSIONMEM.szname,addr [edi].VERSIONMEM.value
mov esi,lpRCMem
invoke GetLoadOptions,esi
add esi,eax
@@:
invoke GetWord,offset wordbuff,esi
add esi,eax
invoke lstrcmpi,offset wordbuff,offset szFILEVERSION
.if !eax
invoke GetNum,lpProMem
mov [edi].VERSIONMEM.fv[0],eax
invoke GetNum,lpProMem
mov [edi].VERSIONMEM.fv[4],eax
invoke GetNum,lpProMem
mov [edi].VERSIONMEM.fv[8],eax
invoke GetNum,lpProMem
mov [edi].VERSIONMEM.fv[12],eax
jmp @b
.endif
invoke lstrcmpi,offset wordbuff,offset szPRODUCTVERSION
.if !eax
invoke GetNum,lpProMem
mov [edi].VERSIONMEM.pv[0],eax
invoke GetNum,lpProMem
mov [edi].VERSIONMEM.pv[4],eax
invoke GetNum,lpProMem
mov [edi].VERSIONMEM.pv[8],eax
invoke GetNum,lpProMem
mov [edi].VERSIONMEM.pv[12],eax
jmp @b
.endif
invoke lstrcmpi,offset wordbuff,offset szFILEFLAGSMASK
.if !eax
invoke GetNum,lpProMem
jmp @b
.endif
invoke lstrcmpi,offset wordbuff,offset szFILEFLAGS
.if !eax
invoke GetNum,lpProMem
jmp @b
.endif
invoke lstrcmpi,offset wordbuff,offset szFILEOS
.if !eax
invoke GetNum,lpProMem
mov [edi].VERSIONMEM.os,eax
jmp @b
.endif
invoke lstrcmpi,offset wordbuff,offset szFILETYPE
.if !eax
invoke GetNum,lpProMem
mov [edi].VERSIONMEM.ft,eax
jmp @b
.endif
invoke lstrcmpi,offset wordbuff,offset szFILESUBTYPE
.if !eax
invoke GetNum,lpProMem
jmp @b
.endif
invoke lstrcmpi,offset wordbuff,offset szBEGIN
.if !eax
mov ebx,edi
add edi,sizeof VERSIONMEM
mov nNest,1
@@:
invoke GetWord,offset wordbuff,esi
add esi,eax
invoke lstrcmpi,offset wordbuff,offset szBEGIN
.if eax
invoke lstrcmpi,offset wordbuff,offset szBEGINSHORT
.endif
.if !eax
inc nNest
jmp @b
.endif
invoke lstrcmpi,offset wordbuff,offset szBLOCK
.if !eax
invoke GetWord,offset wordbuff,esi
add esi,eax
jmp @b
.endif
invoke lstrcmpi,offset wordbuff,offset szVALUE
.if !eax
invoke GetWord,offset wordbuff,esi
add esi,eax
invoke UnQuoteWord,offset wordbuff
invoke lstrcmpi,offset wordbuff,offset szTranslation
.if !eax
invoke GetNum,lpProMem
mov [ebx].VERSIONMEM.lng,eax
invoke GetNum,lpProMem
mov [ebx].VERSIONMEM.chs,eax
.else
invoke lstrcpyn,addr [edi].VERSIONITEM.szname,offset wordbuff,sizeof VERSIONITEM.szname
invoke GetWord,offset wordbuff,esi
add esi,eax
invoke UnQuoteWord,offset wordbuff
invoke lstrlen,offset wordbuff
.if word ptr wordbuff[eax-2]=='0\'
mov byte ptr wordbuff[eax-2],0
.endif
invoke lstrcpyn,addr [edi].VERSIONITEM.szvalue,offset wordbuff,sizeof VERSIONITEM.szvalue
add edi,sizeof VERSIONITEM
.endif
jmp @b
.endif
invoke lstrcmpi,offset wordbuff,offset szEND
.if eax
invoke lstrcmpi,offset wordbuff,offset szENDSHORT
.endif
.if !eax
dec nNest
jne @b
.endif
.endif
Ex:
mov eax,esi
sub eax,lpRCMem
ret
ParseVersioninfo endp
GetLineNo proc hRCMem:DWORD,lpRCMem:DWORD
mov edx,hRCMem
xor eax,eax
.while edx<=lpRCMem
.if byte ptr [edx]==VK_RETURN
inc eax
.endif
inc edx
.endw
ret
GetLineNo endp
ParseRC proc uses esi edi,lpRCMem:DWORD,hRCMem:DWORD,lpProMem:DWORD
mov esi,lpRCMem
mov edi,lpProMem
.while [edi].PROJECT.hmem
add edi,sizeof PROJECT
.endw
invoke GetWord,offset wordbuff,esi
add esi,eax
invoke GetLineNo,hRCMem,esi
mov [edi].PROJECT.lnstart,eax
invoke lstrcmpi,offset wordbuff,offset szDEFINE
.if !eax
invoke ParseDefine,esi,lpProMem
add esi,eax
jmp Ex
.endif
invoke lstrcmpi,offset wordbuff,offset szINCLUDE
.if !eax
invoke ParseInclude,esi,lpProMem
add esi,eax
jmp Ex
.endif
invoke lstrcmpi,offset wordbuff,offset szUNDEF
.if !eax
invoke SkipToEol
jmp Ex
.endif
invoke lstrcmpi,offset wordbuff,offset szIF
.if !eax
invoke SkipToEol
jmp Ex
.endif
invoke lstrcmpi,offset wordbuff,offset szELIF
.if !eax
invoke SkipToEol
jmp Ex
.endif
invoke lstrcmpi,offset wordbuff,offset szELSE
.if !eax
invoke SkipToEol
jmp Ex
.endif
invoke lstrcmpi,offset wordbuff,offset szENDIF
.if !eax
invoke SkipToEol
jmp Ex
.endif
invoke lstrcmpi,offset wordbuff,offset szIFDEF
.if !eax
invoke SkipToEol
jmp Ex
.endif
invoke lstrcmpi,offset wordbuff,offset szIFNDEF
.if !eax
invoke SkipToEol
jmp Ex
.endif
invoke lstrcmpi,offset wordbuff,offset szSTRINGTABLE
.if !eax
invoke ParseStringTable,esi,lpProMem
add esi,eax
jmp Ex
.endif
invoke lstrcpy,offset namebuff,offset wordbuff
invoke GetWord,offset wordbuff,esi
add esi,eax
invoke lstrcmpi,offset wordbuff,offset szDESIGNINFO
.if !eax
invoke ParseSkip,esi,lpProMem
add esi,eax
jmp Ex
.endif
invoke lstrcmpi,offset wordbuff,offset szBITMAP
.if !eax
invoke ParseResource,esi,lpProMem,0
add esi,eax
jmp Ex
.endif
invoke lstrcmpi,offset wordbuff,offset szCURSOR
.if !eax
invoke ParseResource,esi,lpProMem,1
add esi,eax
jmp Ex
.endif
invoke lstrcmpi,offset wordbuff,offset szICON
.if !eax
invoke ParseResource,esi,lpProMem,2
add esi,eax
jmp Ex
.endif
invoke lstrcmpi,offset wordbuff,offset szAVI
.if !eax
invoke ParseResource,esi,lpProMem,3
add esi,eax
jmp Ex
.endif
invoke lstrcmpi,offset wordbuff,offset szRCDATA
.if !eax
invoke ParseResource,esi,lpProMem,4
add esi,eax
jmp Ex
.endif
invoke lstrcmpi,offset wordbuff,offset szWAVE
.if !eax
invoke ParseResource,esi,lpProMem,5
add esi,eax
jmp Ex
.endif
invoke lstrcmpi,offset wordbuff,offset szIMAGE
.if !eax
invoke ParseResource,esi,lpProMem,6
add esi,eax
jmp Ex
.endif
invoke lstrcmpi,offset wordbuff,offset szMANIFEST
.if !eax
invoke ParseResource,esi,lpProMem,7
add esi,eax
jmp Ex
.endif
invoke lstrcmpi,offset wordbuff,offset szACCELERATORS
.if !eax
invoke ParseAccelerators,esi,lpProMem
add esi,eax
jmp Ex
.endif
invoke lstrcmpi,offset wordbuff,offset szVERSIONINFO
.if !eax
invoke ParseVersioninfo,esi,lpProMem
add esi,eax
jmp Ex
.endif
invoke lstrcmpi,offset wordbuff,offset szDIALOGEX
.if !eax
invoke ParseDialogEx,esi,lpProMem
add esi,eax
jmp Ex
.endif
invoke lstrcmpi,offset wordbuff,offset szDIALOG
.if !eax
invoke ParseDialog,esi,lpProMem
add esi,eax
jmp Ex
.endif
invoke lstrcmpi,offset wordbuff,offset szMENU
.if !eax
invoke ParseMenu,esi,lpProMem
add esi,eax
jmp Ex
.endif
invoke lstrcmpi,offset wordbuff,offset szMENUEX
.if !eax
invoke ParseMenuEx,esi,lpProMem
add esi,eax
jmp Ex
.endif
Ex:
invoke GetLineNo,hRCMem,esi
mov [edi].PROJECT.lnend,eax
;PrintDec [edi].PROJECT.lnstart
;PrintDec [edi].PROJECT.lnend
mov eax,esi
sub eax,lpRCMem
ret
ParseRC endp
ParseRCMem proc uses esi,hRCMem:DWORD,lpProMem:DWORD
mov esi,hRCMem
.while TRUE
invoke ParseRC,esi,hRCMem,lpProMem
.break .if !eax
add esi,eax
.endw
mov eax,lpProMem
ret
ParseRCMem endp
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -