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

📄 copy.asm

📁 一个十六进制编辑器源代码,cool!
💻 ASM
字号:
_Copy proto:DWORD
__format_copy macro @lpfm
		.while esi<=edi
			.if isBlockSelMode
				invoke _InBlock,esi,TRUE 
				test eax,eax
				jnz @f
			.else
			@@:
					xor eax,eax
					mov al,[esi]
					invoke wsprintf,addr @szBuf,@lpfm,eax
					invoke _lstrcat,@lpBufData,addr @szBuf	
					mov @lpBufData,eax					
			.endif
			inc esi
		.endw
		endm
.code
_Copy proc wParam
Local @szBuf[50]:BYTE ,lParam
Local @hMem,@Len,@lpBufData,@Count,@hEdit
	pushad
	mov esi,dwBlockStart
	mov edi,dwBlockEnd
	add esi,lpMemFile
	add edi,lpMemFile
	invoke _GetBlockSize
	inc eax
	mov @Len,eax;选择的长度
	;确保长度足够
	shl eax,3;8倍
	add eax,50

	invoke GlobalAlloc,GMEM_MOVEABLE or GMEM_DDESHARE or GMEM_ZEROINIT ,eax
	mov @hMem,eax
	.if eax==0
		call _ShowError
		popad
		ret
	.endif
	invoke GlobalLock,@hMem
	mov @lpBufData,eax		

	mov eax,wParam
	.if eax==IDM_EDIT_COPY_C;c/++
		invoke _lstrcat, @lpBufData,ctext("unsigned char c_arr[] = {")
		mov @lpBufData,eax
		__format_copy ctext("0x%02X,")
		mov esi,@lpBufData
		mov word ptr [esi-1],";}"
	.elseif eax==IDM_EDIT_COPY_PAS;pascal
		.data
			szfmpas db 'pas_arr: array[0..%u] of byte = ( ',0
		.code
		invoke _GetBlockSize
		dec eax
		invoke wsprintf,@lpBufData,addr szfmpas,eax
		add @lpBufData,eax
		__format_copy ctext("$%02X,")			
		mov esi,@lpBufData
		mov word ptr [esi-1],";)"
	.elseif eax==IDM_EDIT_COPY_VB	;vb
		.data
			szfmvb db  "Dim vbarr",13,10,"vbarr=Array(",0
		.code
		invoke _lstrcat, @lpBufData,addr szfmvb
		mov @lpBufData,eax
		__format_copy ctext("&H%02X,")
		mov esi,@lpBufData
		mov BYTE  ptr [esi-1],")"
	.elseif eax==40005;asm
		invoke _lstrcat, @lpBufData,ctext("asm_arr db ")
		mov @lpBufData,eax
		__format_copy ctext("%03Xh,")			
		mov esi,@lpBufData
		mov BYTE ptr [esi-1],0
	.elseif eax==40003;hex
		xor edx,edx
		mov eax,dwBlockStart
		mov ecx,16
		div ecx
		mov ebx,edx
		mov lParam,edx
		;填充一些空格以对齐
		.if !(isBlockSelMode)
			mov DWORD ptr @szBuf,'   '
			.while edx
				push edx
					invoke _lstrcat,@lpBufData,addr @szBuf
					mov @lpBufData,eax
				pop edx
				dec edx
			.endw
		.endif
		.while esi<=edi
			.if !(isBlockSelMode)
				jmp @f
			.else
				invoke _InBlock,esi,TRUE 
				.if eax
				@@:
					xor eax,eax
					mov al,[esi]
					invoke wsprintf,addr @szBuf,ctext("%02X "),eax
					invoke _lstrcat,@lpBufData,addr @szBuf	
					mov @lpBufData,eax
					.if isBlockSelMode
						 invoke _GetBlockEnd,esi,TRUE 
						 cmp eax,esi
						 jne @0
						 mov dx,0a0dh
						 mov eax,@lpBufData
						 mov [eax],dx
						 add @lpBufData,2
						 mov ebx,lParam
						 jmp @1
					.else
						mov eax,esi
						sub eax,lpMemFile
						and eax,0fh
						.if eax==0fh
							mov dx,0a0dh
							mov eax,@lpBufData
							mov [eax],dx
							add @lpBufData,2
							xor ebx,ebx
							jmp @1
						.endif						
					.endif
				.endif
			.endif
		@0:
			inc ebx
		@1:
			inc esi
		.endw
	.elseif eax==IDM_EDIT_COPY_STR;binary
		.while esi<=edi
			.if isBlockSelMode
				invoke _InBlock,esi,TRUE 
				test eax,eax
				jnz @f				
			.else
			@@:
				mov ebx,@lpBufData
				mov al,[esi]
				mov [ebx],al
				inc @lpBufData
			.endif
			inc esi
		.endw			
	.endif
	invoke OpenClipboard,hWnd
	invoke EmptyClipboard 
	invoke GlobalUnlock,@hMem
	invoke SetClipboardData,CF_TEXT ,@hMem
	invoke CloseClipboard
	popad
	ret
_Copy endp
;-------------------------------------

⌨️ 快捷键说明

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