?? parserc.asm
字號:
jne @b
Ex:
ret
ParseControls endp
GetLoadOptions proc uses ebx esi,lpRCMem:DWORD
mov esi,lpRCMem
xor ebx,ebx
@@:
add esi,ebx
invoke GetWord,offset wordbuff,esi
mov ebx,eax
invoke lstrcmpi,offset wordbuff,offset szPRELOAD
or eax,eax
je @b
invoke lstrcmpi,offset wordbuff,offset szLOADONCALL
or eax,eax
je @b
invoke lstrcmpi,offset wordbuff,offset szFIXED
or eax,eax
je @b
invoke lstrcmpi,offset wordbuff,offset szMOVEABLE
or eax,eax
je @b
invoke lstrcmpi,offset wordbuff,offset szDISCARDABLE
or eax,eax
je @b
invoke lstrcmpi,offset wordbuff,offset szPURE
or eax,eax
je @b
invoke lstrcmpi,offset wordbuff,offset szIMPURE
or eax,eax
je @b
mov eax,esi
sub eax,lpRCMem
ret
GetLoadOptions endp
ParseDialogEx proc uses ebx esi edi,lpRCMem:DWORD,lpProMem:DWORD
LOCAL hMem:DWORD
LOCAL nPixy:DWORD
invoke AddTypeMem,lpProMem,MaxMem,TPE_DIALOG
mov hMem,eax
mov edi,eax
mov [edi+sizeof DLGHEAD].DIALOG.hwnd,TRUE
;Name / ID
invoke GetName,lpProMem,offset namebuff,addr [edi+sizeof DLGHEAD].DIALOG.idname,addr [edi+sizeof DLGHEAD].DIALOG.id
inc eax
mov [edi].DLGHEAD.ctlid,eax
mov esi,lpRCMem
invoke GetLoadOptions,esi
add esi,eax
invoke GetNum,lpProMem
mov [edi+sizeof DLGHEAD].DIALOG.dux,eax
mov [edi+sizeof DLGHEAD].DIALOG.x,eax
invoke GetNum,lpProMem
mov [edi+sizeof DLGHEAD].DIALOG.duy,eax
mov [edi+sizeof DLGHEAD].DIALOG.y,eax
invoke GetNum,lpProMem
mov [edi+sizeof DLGHEAD].DIALOG.duccx,eax
mov [edi+sizeof DLGHEAD].DIALOG.ccx,eax
invoke GetNum,lpProMem
mov [edi+sizeof DLGHEAD].DIALOG.duccy,eax
mov [edi+sizeof DLGHEAD].DIALOG.ccy,eax
movzx eax,byte ptr [esi]
.if eax!=0Dh
;HelpID
invoke GetNum,lpProMem
.endif
mov [edi+sizeof DLGHEAD].DIALOG.hdmy,0
@@:
invoke GetWord,offset wordbuff,esi
add esi,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
invoke lstrcmpi,offset wordbuff,offset szCAPTION
.if !eax
invoke GetWord,offset wordbuff,esi
add esi,eax
invoke UnQuoteWord,offset wordbuff
invoke lstrcpy,addr [edi+sizeof DLGHEAD].DIALOG.caption,offset wordbuff
jmp @b
.endif
invoke lstrcmpi,offset wordbuff,offset szFONT
.if !eax
invoke GetDC,NULL
push eax
invoke GetDeviceCaps,eax,LOGPIXELSY
mov nPixy,eax
pop edx
push eax
invoke ReleaseDC,NULL,edx
invoke GetNum,lpProMem
mov [edi].DLGHEAD.fontsize,eax
pop edx
mul edx
mov ecx,72
div ecx
neg eax
mov [edi].DLGHEAD.fontht,eax
invoke GetWord,offset wordbuff,esi
add esi,eax
invoke UnQuoteWord,offset wordbuff
invoke lstrcpy,addr [edi].DLGHEAD.font,offset wordbuff
.while byte ptr [esi] && byte ptr [esi]!=0Dh
invoke GetWord,offset wordbuff,esi
add esi,eax
.endw
jmp @b
.endif
invoke lstrcmpi,offset wordbuff,offset szMENU
.if !eax
invoke GetWord,offset wordbuff,esi
add esi,eax
invoke lstrcpy,addr [edi].DLGHEAD.menuid,offset wordbuff
jmp @b
.endif
invoke lstrcmpi,offset wordbuff,offset szCLASS
.if !eax
invoke GetWord,offset wordbuff,esi
add esi,eax
invoke UnQuoteWord,offset wordbuff
invoke lstrcpy,addr [edi].DLGHEAD.class,offset wordbuff
jmp @b
.endif
invoke lstrcmpi,offset wordbuff,offset szSTYLE
.if !eax
invoke GetStyle,esi,offset styledef
add esi,eax
mov [edi+sizeof DLGHEAD].DIALOG.style,edx
jmp @b
.endif
invoke lstrcmpi,offset wordbuff,offset szEXSTYLE
.if !eax
invoke GetStyle,esi,offset exstyledef
add esi,eax
mov [edi+sizeof DLGHEAD].DIALOG.exstyle,edx
jmp @b
.endif
invoke lstrcmpi,offset wordbuff,offset szBEGIN
.if eax
invoke lstrcmpi,offset wordbuff,offset szBEGINSHORT
.endif
.if !eax
invoke ParseControls,lpProMem
.endif
invoke ConvertSize,hMem
mov eax,esi
sub eax,lpRCMem
ret
ParseDialogEx endp
ParseDialog proc uses ebx esi edi,lpRCMem:DWORD,lpProMem:DWORD
LOCAL hMem:DWORD
LOCAL nPixy:DWORD
invoke AddTypeMem,lpProMem,MaxMem,TPE_DIALOG
mov hMem,eax
mov edi,eax
mov [edi+sizeof DLGHEAD].DIALOG.hwnd,TRUE
;Name / ID
invoke GetName,lpProMem,offset namebuff,addr [edi+sizeof DLGHEAD].DIALOG.idname,addr [edi+sizeof DLGHEAD].DIALOG.id
inc eax
mov [edi].DLGHEAD.ctlid,eax
mov esi,lpRCMem
invoke GetLoadOptions,esi
add esi,eax
invoke GetNum,lpProMem
mov [edi+sizeof DLGHEAD].DIALOG.dux,eax
mov [edi+sizeof DLGHEAD].DIALOG.x,eax
invoke GetNum,lpProMem
mov [edi+sizeof DLGHEAD].DIALOG.duy,eax
mov [edi+sizeof DLGHEAD].DIALOG.y,eax
invoke GetNum,lpProMem
mov [edi+sizeof DLGHEAD].DIALOG.duccx,eax
mov [edi+sizeof DLGHEAD].DIALOG.ccx,eax
invoke GetNum,lpProMem
mov [edi+sizeof DLGHEAD].DIALOG.duccy,eax
mov [edi+sizeof DLGHEAD].DIALOG.ccy,eax
mov [edi+sizeof DLGHEAD].DIALOG.hdmy,0
@@:
invoke GetWord,offset wordbuff,esi
add esi,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
invoke lstrcmpi,offset wordbuff,offset szCAPTION
.if !eax
invoke GetWord,offset wordbuff,esi
add esi,eax
invoke UnQuoteWord,offset wordbuff
invoke lstrcpy,addr [edi+sizeof DLGHEAD].DIALOG.caption,offset wordbuff
jmp @b
.endif
invoke lstrcmpi,offset wordbuff,offset szCLASS
.if !eax
invoke GetWord,offset wordbuff,esi
add esi,eax
invoke UnQuoteWord,offset wordbuff
invoke lstrcpy,addr [edi].DLGHEAD.class,offset wordbuff
jmp @b
.endif
invoke lstrcmpi,offset wordbuff,offset szSTYLE
.if !eax
invoke GetStyle,esi,offset styledef
add esi,eax
mov [edi+sizeof DLGHEAD].DIALOG.style,edx
jmp @b
.endif
invoke lstrcmpi,offset wordbuff,offset szEXSTYLE
.if !eax
invoke GetStyle,esi,offset exstyledef
add esi,eax
mov [edi+sizeof DLGHEAD].DIALOG.exstyle,edx
jmp @b
.endif
invoke lstrcmpi,offset wordbuff,offset szFONT
.if !eax
invoke GetDC,NULL
push eax
invoke GetDeviceCaps,eax,LOGPIXELSY
mov nPixy,eax
pop edx
push eax
invoke ReleaseDC,NULL,edx
invoke GetNum,lpProMem
mov [edi].DLGHEAD.fontsize,eax
pop edx
mul edx
mov ecx,72
div ecx
neg eax
mov [edi].DLGHEAD.fontht,eax
invoke GetWord,offset wordbuff,esi
add esi,eax
invoke UnQuoteWord,offset wordbuff
invoke lstrcpy,addr [edi].DLGHEAD.font,offset wordbuff
.while byte ptr [esi] && byte ptr [esi]!=0Dh
invoke GetWord,offset wordbuff,esi
add esi,eax
.endw
jmp @b
.endif
invoke lstrcmpi,offset wordbuff,offset szBEGIN
.if eax
invoke lstrcmpi,offset wordbuff,offset szBEGINSHORT
.endif
.if !eax
invoke ParseControls,lpProMem
.endif
invoke ConvertSize,hMem
mov eax,esi
sub eax,lpRCMem
ret
ParseDialog endp
ParseMenu proc uses ebx esi edi,lpRCMem:DWORD,lpProMem:DWORD
LOCAL nNest:DWORD
LOCAL hMem:DWORD
invoke AddTypeMem,lpProMem,MaxMem,TPE_MENU
mov hMem,eax
mov edi,eax
;Name / ID
invoke GetName,lpProMem,offset namebuff,addr [edi].MNUHEAD.menuname,addr [edi].MNUHEAD.menuid
mov eax,[edi].MNUHEAD.menuid
inc eax
mov [edi].MNUHEAD.startid,eax
add edi,sizeof MNUHEAD
mov nNest,0
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
inc nNest
jmp @b
.endif
invoke lstrcmpi,offset wordbuff,offset szPOPUP
.if !eax
mov [edi].MNUITEM.itemflag,TRUE
mov eax,nNest
dec eax
mov [edi].MNUITEM.level,eax
invoke GetWord,offset wordbuff,esi
add esi,eax
invoke UnQuoteWord,offset wordbuff
invoke lstrcpy,addr [edi].MNUITEM.itemcaption,offset wordbuff
Call SetOptions
add edi,sizeof MNUITEM
jmp @b
.endif
invoke lstrcmpi,offset wordbuff,offset szMENUITEM
.if !eax
mov [edi].MNUITEM.itemflag,TRUE
mov eax,nNest
dec eax
mov [edi].MNUITEM.level,eax
invoke GetWord,offset wordbuff,esi
add esi,eax
invoke lstrcmpi,offset wordbuff,offset szSEPARATOR
.if !eax
mov word ptr [edi].MNUITEM.itemcaption,'-'
add edi,sizeof MNUITEM
jmp @b
.endif
invoke UnQuoteWord,offset wordbuff
mov ebx,offset wordbuff
.while word ptr [ebx]!='t\' && byte ptr [ebx]
inc ebx
.endw
.if word ptr [ebx]=='t\'
push ebx
add ebx,2
NxtKey:
xor eax,eax
.if dword ptr [ebx]=='fihS'
add ebx,6
or [edi].MNUITEM.shortcut,100h
jmp NxtKey
.elseif dword ptr [ebx]=='lrtC'
add ebx,5
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
invoke GetWord,offset wordbuff,esi
add esi,eax
;Name / ID
invoke GetName,lpProMem,offset wordbuff,addr [edi].MNUITEM.itemname,addr [edi].MNUITEM.itemid
Call SetOptions
add edi,sizeof MNUITEM
jmp @b
.endif
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:
xor ebx,ebx
.while byte ptr [esi] && byte ptr [esi]!=0Dh
invoke GetWord,offset wordbuff,esi
add esi,eax
invoke lstrcmpi,offset wordbuff,offset szCHECKED
.if !eax
or ebx,MFS_CHECKED
.endif
invoke lstrcmpi,offset wordbuff,offset szGRAYED
.if !eax
or ebx,MFS_GRAYED
.endif
invoke lstrcmpi,offset wordbuff,offset szINACTIVE
.if !eax
.endif
invoke lstrcmpi,offset wordbuff,offset szMENUBARBREAK
.if !eax
.endif
invoke lstrcmpi,offset wordbuff,offset szMENUBREAK
.if !eax
.endif
.endw
mov [edi].MNUITEM.nstate,ebx
retn
ParseMenu endp
ParseMenuEx proc uses ebx esi edi,lpRCMem:DWORD,lpProMem:DWORD
LOCAL nNest:DWORD
LOCAL hMem:DWORD
invoke AddTypeMem,lpProMem,MaxMem,TPE_MENU
mov hMem,eax
mov edi,eax
;Name / ID
invoke GetName,lpProMem,offset namebuff,addr [edi].MNUHEAD.menuname,addr [edi].MNUHEAD.menuid
mov eax,[edi].MNUHEAD.menuid
inc eax
mov [edi].MNUHEAD.startid,eax
add edi,sizeof MNUHEAD
mov nNest,0
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
inc nNest
jmp @b
.endif
invoke lstrcmpi,offset wordbuff,offset szMENUITEM
.if eax
invoke lstrcmpi,offset wordbuff,offset szPOPUP
.endif
.if !eax
mov [edi].MNUITEM.itemflag,TRUE
mov eax,nNest
dec eax
mov [edi].MNUITEM.level,eax
invoke GetWord,offset wordbuff,esi
add esi,eax
invoke UnQuoteWord,offset wordbuff
mov ebx,offset wordbuff
.while word ptr [ebx]!='t\' && byte ptr [ebx]
inc ebx
.endw
.if word ptr [ebx]=='t\'
push ebx
add ebx,2
NxtKey:
xor eax,eax
.if dword ptr [ebx]=='fihS'
add ebx,6
or [edi].MNUITEM.shortcut,100h
jmp NxtKey
.elseif dword ptr [ebx]=='lrtC'
add ebx,5
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -