on_char.asm

来自「一个十六进制编辑器源代码,cool!」· 汇编 代码 · 共 57 行

ASM
57
字号
OnChar proto:DWORD ,:DWORD ,:DWORD
_OnChar macro 
	invoke OnChar,hWin,wParam,lParam
	endm
.code
OnChar proc hWin,wParam,lParam
	pushad
	mov eax,wParam
	mov esi,lpMemFile
	add esi,dwCurPos
	.if FLAG_ALL & FLAG_INPUTCHAR
		;选中直接输入
		invoke _PushUndo,esi,UNDO_INPUT,NULL ,NULL 
		mov [esi],al
		mov eax,dwCurPos
		inc eax
		invoke _SetPos,eax
		xor eax,eax
	.elseif (al>='A' && al <='F') || (al >='0' && al<='9')	|| (al>='a' && al<='f')
	;如果没有选中直接输入,只能输入a-f,0-9
	;并且要根据输入的是高4位还是低4位进行组合
		.if al>='a'
			sub al,'a'-0ah
		.elseif al>='A'
			sub al,'A'-0ah
		.else
			sub al,'0'
		.endif
		
		mov ch,BYTE ptr [esi]
		mov dh,ch
		
		and ch,0f0h;清空低4位
		and dh,00fh;清空高4位
		invoke _PushUndo,esi,UNDO_INPUT,NULL ,NULL 
		.if  FLAG_ALL & FLAG_INPUTLOWBYTE			
			or ch,al
			mov eax,dwCurPos
			inc eax;正在输入的是低4位,输入后要把光标后移一位
			mov [esi],ch
			invoke _SetPos,eax
			and FLAG_ALL,not FLAG_INPUTLOWBYTE
		.else
			shl al,4
			or al,dh
			mov ch,al			
			mov [esi],ch
			call _ReDraw
			or FLAG_ALL, FLAG_INPUTLOWBYTE
		.endif				
	.endif
	popad
	ret
OnChar endp


⌨️ 快捷键说明

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