⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parserc.asm

📁 汇编资源编辑器
💻 ASM
📖 第 1 页 / 共 4 页
字号:
	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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -