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

📄 keywords.asm

📁 MasmEd是一款专门针对Masm32做的汇编代码编辑器
💻 ASM
📖 第 1 页 / 共 2 页
字号:

IDD_DLGKEYWORDS		equ 4000
IDC_LSTKWCOLORS		equ 4001
IDC_LSTKWACTIVE		equ 4014
IDC_LSTKWHOLD		equ 4013
IDC_LSTCOLORS		equ 4015
IDC_BTNKWAPPLY		equ 4002

IDC_BTNHOLD			equ 4009
IDC_BTNACTIVE		equ 4008
IDC_EDTKW			equ 4012
IDC_BTNADD			equ 4011
IDC_BTNDEL			equ 4010

IDC_CHKBOLD			equ 4004
IDC_CHKITALIC		equ 4003
IDC_CHKRCFILE		equ 4005
IDC_SPNTABSIZE		equ 4017
IDC_EDTTABSIZE		equ 4018
IDC_CHKEXPAND		equ 4019
IDC_CHKAUTOINDENT	equ 4020
IDC_CHKHILITELINE	equ 4021
IDC_CHKHILITECMNT	equ 4026

IDC_BTNCODEFONT		equ 4024
IDC_STCCODEFONT		equ 4022
IDC_BTNLNRFONT		equ 4025
IDC_STCLNRFONT		equ 4023

szColors			db '代码窗口背景',0
					db '代码窗口文本',0
					db '选择背景',0
					db '选择文本',0
					db '注释',0
					db '字符串',0
					db '操作符',0
					db '注释背景',0
					db '光标所在行',0
					db '缩进标线',0
					db '左侧选条',0
					db '选条边线',0
					db '行号',0
					db '数字',0
					db '子程序选择背景',0
					db '子程序选择文本',0
					db '资源窗口背景',0
					db '资源窗口文本',0
					db 0
szCustColors		db 'CustColors',0

.data?

nKWInx				dd ?
CustColors			dd 16 dup(?)
hCFnt				dd ?
hLFnt				dd ?

.code

SetKeyWordList proc uses esi edi,hWin:HWND,idLst:DWORD,nInx:DWORD
	LOCAL	hMem:DWORD
	LOCAL	buffer[64]:BYTE

	mov		eax,nInx
	mov		nKWInx,eax
	invoke SendDlgItemMessage,hWin,idLst,LB_RESETCONTENT,0,0
	invoke GlobalAlloc,GMEM_FIXED or GMEM_ZEROINIT,16384
	mov		hMem,eax
	invoke MakeKey,offset szGroup,nInx,addr buffer
	mov		lpcbData,16384
	invoke RegQueryValueEx,hReg,addr buffer,0,addr lpType,hMem,addr lpcbData
	mov		eax,hMem
	mov		al,[eax]
	mov		esi,nInx
	.if !al && esi<16
		lea		esi,kwofs[esi*4]
		mov		esi,[esi]
	.else
		mov		esi,hMem
	.endif
	dec		esi
  Nxt:
	inc		esi
	mov		al,[esi]
	or		al,al
	je		Ex
	cmp		al,VK_SPACE
	je		Nxt
	lea		edi,buffer
  @@:
	mov		al,[esi]
	.if al==VK_SPACE || !al
		mov		byte ptr [edi],0
		invoke SendDlgItemMessage,hWin,idLst,LB_ADDSTRING,0,addr buffer
		dec		esi
		jmp		Nxt
	.endif
	mov		[edi],al
	inc		esi
	inc		edi
	jmp		@b
  Ex:
	invoke SendDlgItemMessage,hWin,IDC_LSTKWCOLORS,LB_GETITEMDATA,nInx,0
	.if eax!=LB_ERR
		shr		eax,24
		mov		esi,eax
		mov		eax,BST_UNCHECKED
		test	esi,1
		.if !ZERO?
			mov		eax,BST_CHECKED
		.endif
		invoke CheckDlgButton,hWin,IDC_CHKBOLD,eax
		mov		eax,BST_UNCHECKED
		test	esi,2
		.if !ZERO?
			mov		eax,BST_CHECKED
		.endif
		invoke CheckDlgButton,hWin,IDC_CHKITALIC,eax
		mov		eax,BST_UNCHECKED
		test	esi,10h
		.if !ZERO?
			mov		eax,BST_CHECKED
		.endif
		invoke CheckDlgButton,hWin,IDC_CHKRCFILE,eax
	.endif
	invoke GlobalFree,hMem
	ret

SetKeyWordList endp

SaveKeyWordList proc uses esi edi,hWin:HWND,idLst:DWORD,nInx:DWORD
	LOCAL	hMem:DWORD
	LOCAL	buffer[64]:BYTE

	invoke GlobalAlloc,GMEM_FIXED or GMEM_ZEROINIT,16384
	mov		hMem,eax
	mov		edi,eax
	xor		esi,esi
  @@:
	invoke SendDlgItemMessage,hWin,idLst,LB_GETTEXT,esi,edi
	.if eax!=LB_ERR
		invoke lstrlen,edi
		add		edi,eax
		mov		byte ptr [edi],VK_SPACE
		inc		edi
		inc		esi
		jmp		@b
	.endif
	.if edi!=hMem
		mov		byte ptr [edi-1],0
	.endif
	sub		edi,hMem
	invoke MakeKey,offset szGroup,nInx,addr buffer
	invoke RegSetValueEx,hReg,addr buffer,0,REG_SZ,hMem,edi
	invoke GlobalFree,hMem
	ret

SaveKeyWordList endp

DeleteKeyWords proc hWin:HWND,idFrom:DWORD
	LOCAL	nInx:DWORD
	LOCAL	nCnt:DWORD

	invoke SendDlgItemMessage,hWin,idFrom,LB_GETSELCOUNT,0,0
	mov		nCnt,eax
	mov		nInx,0
	.while nCnt
		invoke SendDlgItemMessage,hWin,idFrom,LB_GETSEL,nInx,0
		.if eax
			invoke SendDlgItemMessage,hWin,idFrom,LB_DELETESTRING,nInx,0
			dec		nCnt
			mov		eax,1
		.endif
		xor		eax,1
		add		nInx,eax
	.endw
	ret

DeleteKeyWords endp

MoveKeyWords proc hWin:HWND,idFrom:DWORD,idTo:DWORD
	LOCAL	buffer[64]:BYTE
	LOCAL	nInx:DWORD
	LOCAL	nCnt:DWORD

	invoke SendDlgItemMessage,hWin,idFrom,LB_GETSELCOUNT,0,0
	mov		nCnt,eax
	mov		nInx,0
	.while nCnt
		invoke SendDlgItemMessage,hWin,idFrom,LB_GETSEL,nInx,0
		.if eax
			invoke SendDlgItemMessage,hWin,idFrom,LB_GETTEXT,nInx,addr buffer
			invoke SendDlgItemMessage,hWin,idFrom,LB_DELETESTRING,nInx,0
			invoke SendDlgItemMessage,hWin,idTo,LB_ADDSTRING,0,addr buffer
			dec		nCnt
			mov		eax,1
		.endif
		xor		eax,1
		add		nInx,eax
	.endw
	ret

MoveKeyWords endp

UpdateKeyWords proc uses ebx,hWin:HWND

	xor		ebx,ebx
	.while ebx<16
		invoke SendDlgItemMessage,hWin,IDC_LSTKWCOLORS,LB_GETITEMDATA,ebx,0
		mov		kwcol[ebx*4],eax
		inc		ebx
	.endw
	invoke RegSetValueEx,hReg,addr szKeyWordColor,0,REG_BINARY,addr kwcol,sizeof kwcol
	invoke SetKeyWords
	invoke UpdateAll,WM_PAINT
	ret

UpdateKeyWords endp

UpdateToolColors proc
	LOCAL	racol:RACOLOR
	LOCAL	rescol:COLOR

	invoke SendMessage,hOut,REM_GETCOLOR,0,addr racol
	mov		eax,col.toolback
	mov		racol.bckcol,eax
	mov		eax,col.tooltext
	mov		racol.txtcol,eax
	invoke SendMessage,hOut,REM_SETCOLOR,0,addr racol
	invoke SendMessage,hBrowse,FBM_SETBACKCOLOR,0,col.toolback
	invoke SendMessage,hBrowse,FBM_SETTEXTCOLOR,0,col.tooltext
	mov		eax,col.dialogback
	mov		rescol.back,eax
	mov		eax,col.dialogtext
	mov		rescol.text,eax
	invoke SendMessage,hResEd,DEM_SETCOLOR,0,addr rescol
	.if hBrBack
		invoke DeleteObject,hBrBack
	.endif
	invoke CreateSolidBrush,col.toolback
	mov		hBrBack,eax
	ret

UpdateToolColors endp

KeyWordsProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
	LOCAL	nInx:DWORD
	LOCAL	buffer[256]:BYTE
	LOCAL	rect:RECT
	LOCAL	hBr:DWORD
	LOCAL	cc:CHOOSECOLOR
	LOCAL	cf:CHOOSEFONT
	LOCAL	lf:LOGFONT

	mov		eax,uMsg
	.if eax==WM_INITDIALOG
		push	esi
		push	edi
        invoke SendDlgItemMessage,hWin,IDC_SPNTABSIZE,UDM_SETRANGE,0,00010014h		; Set range
        invoke SendDlgItemMessage,hWin,IDC_SPNTABSIZE,UDM_SETPOS,0,edopt.tabsize	; Set default value
		invoke CheckDlgButton,hWin,IDC_CHKEXPAND,edopt.exptabs
		invoke CheckDlgButton,hWin,IDC_CHKAUTOINDENT,edopt.indent
		invoke CheckDlgButton,hWin,IDC_CHKHILITELINE,edopt.hiliteline
		invoke CheckDlgButton,hWin,IDC_CHKHILITECMNT,edopt.hilitecmnt
		mov		esi,offset szColors
		mov		edi,offset col
	  @@:
		invoke SendDlgItemMessage,hWin,IDC_LSTCOLORS,LB_ADDSTRING,0,esi
		invoke SendDlgItemMessage,hWin,IDC_LSTCOLORS,LB_SETITEMDATA,eax,[edi]
		invoke lstrlen,esi
		add		esi,eax
		inc		esi
		add		edi,4
		mov		al,[esi]
		or		al,al
		jne		@b
		invoke SendDlgItemMessage,hWin,IDC_LSTCOLORS,LB_SETCURSEL,0,0
		mov		edi,offset kwcol
		mov		nInx,0
		.while nInx<16
			invoke MakeKey,offset szGroup,nInx,addr buffer
			invoke SendDlgItemMessage,hWin,IDC_LSTKWCOLORS,LB_ADDSTRING,0,addr buffer
			invoke SendDlgItemMessage,hWin,IDC_LSTKWCOLORS,LB_SETITEMDATA,eax,[edi]
			add		edi,4
			inc		nInx
		.endw
		invoke SendDlgItemMessage,hWin,IDC_LSTKWCOLORS,LB_SETCURSEL,0,0
		invoke SetKeyWordList,hWin,IDC_LSTKWHOLD,10
		invoke SetKeyWordList,hWin,IDC_LSTKWACTIVE,0
		invoke SendDlgItemMessage,hWin,IDC_EDTKW,EM_LIMITTEXT,63,0
		mov		eax,IDC_BTNKWAPPLY
		xor		edx,edx
		call	EnButton
		pop		edi
		pop		esi
		invoke SendDlgItemMessage,hWin,IDC_STCCODEFONT,WM_SETFONT,hFont,FALSE
		invoke SendDlgItemMessage,hWin,IDC_STCLNRFONT,WM_SETFONT,hLnrFont,FALSE
	.elseif eax==WM_COMMAND
		mov		eax,wParam
		mov		edx,eax
		shr		edx,16
		and		eax,0FFFFh
		.if edx==BN_CLICKED
			.if eax==IDOK
				call	Update
				invoke SendMessage,hWin,WM_CLOSE,NULL,NULL
			.elseif eax==IDCANCEL
				.if hCFnt
					invoke DeleteObject,hCFnt
				.endif
				.if hLFnt
					invoke DeleteObject,hLFnt
				.endif
				invoke SendMessage,hWin,WM_CLOSE,NULL,NULL
			.elseif eax==IDC_BTNKWAPPLY
				call	Update
			.elseif eax==IDC_BTNHOLD
				invoke MoveKeyWords,hWin,IDC_LSTKWACTIVE,IDC_LSTKWHOLD
				mov		eax,IDC_BTNHOLD
				xor		edx,edx
				call	EnButton
				mov		eax,IDC_BTNDEL
				xor		edx,edx
				call	EnButton
				mov		eax,IDC_BTNKWAPPLY
				mov		edx,TRUE
				call	EnButton
			.elseif eax==IDC_BTNACTIVE
				invoke MoveKeyWords,hWin,IDC_LSTKWHOLD,IDC_LSTKWACTIVE
				mov		eax,IDC_BTNACTIVE
				xor		edx,edx
				call	EnButton
				mov		eax,IDC_BTNKWAPPLY
				mov		edx,TRUE
				call	EnButton
			.elseif eax==IDC_BTNADD
				invoke GetDlgItemText,hWin,IDC_EDTKW,addr buffer,64
				invoke SendDlgItemMessage,hWin,IDC_LSTKWACTIVE,LB_ADDSTRING,0,addr buffer
				mov		buffer,0
				invoke SetDlgItemText,hWin,IDC_EDTKW,addr buffer
				mov		eax,IDC_BTNKWAPPLY
				mov		edx,TRUE
				call	EnButton
			.elseif eax==IDC_BTNDEL
				invoke DeleteKeyWords,hWin,IDC_LSTKWACTIVE
				mov		eax,IDC_BTNHOLD
				xor		edx,edx
				call	EnButton
				mov		eax,IDC_BTNDEL
				xor		edx,edx
				call	EnButton

⌨️ 快捷键说明

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