?? asmedit.inc
字號(hào):
je switch_blocks
cmp eax,VK_BACK
je wm_undo
mov al,[last_operation]
mov [current_operation],al
invoke ShowCaret,[hwnd]
jmp defwndproc
switch_blocks:
xor [editor_mode],AEMODE_VERTICALSEL
mov [notification],AEN_MODECHANGE
cmp [was_selection],0
je ignore
jmp moved_window
wm_char:
test [lparam],1 shl 31
jz ignore
mov eax,[wparam]
jmp character
wm_lbuttondown:
cmp [focus],0
jne focus_ok
invoke SetFocus,[hwnd]
mov esi,[editor_memory]
add esi,8
lea edi,[editor_data]
mov ecx,editor_data_size shr 2
rep movsd
focus_ok:
lea ebx,[kbstate]
invoke GetKeyboardState,ebx
cmp [was_selection],0
jne selection_ok
mov eax,[caret_line]
mov [selection_line],eax
mov eax,[caret_position]
mov [selection_position],eax
mov eax,[caret_line_number]
mov [selection_line_number],eax
selection_ok:
call get_mouse_position
invoke SetCapture,[hwnd]
or [mouse_select],-1
jmp moved_caret
get_mouse_position:
mov ax,word [lparam]
cwde
cdq
test [editor_style],AES_CONSOLECARET
jnz get_mouse_column
test [editor_mode],AEMODE_OVERWRITE
jnz get_mouse_column
mov ebx,[font_width]
shr ebx,1
adc eax,ebx
get_mouse_column:
idiv [font_width]
add eax,[window_position]
cmp eax,[maximum_position]
jg mouse_out_of_line
cmp eax,0
jge click_position_ok
xor eax,eax
jmp click_position_ok
mouse_out_of_line:
mov eax,[maximum_position]
click_position_ok:
mov [caret_position],eax
mov ax,word [lparam+2]
cwde
cdq
idiv [font_height]
add eax,[window_line_number]
cmp eax,0
jg click_line_ok
mov eax,1
click_line_ok:
call find_line
mov [caret_line],esi
mov [caret_line_number],ecx
retn
wm_lbuttonup:
invoke ReleaseCapture
mov [mouse_select],0
jmp done
wm_mousemove:
cmp [mouse_select],0
je ignore
cmp [was_selection],0
jne select
mov eax,[caret_line]
mov ebx,[caret_line_number]
mov [selection_line],eax
mov [selection_line_number],ebx
mov eax,[caret_position]
mov [selection_position],eax
select:
call get_mouse_position
jmp moved_selection
wm_lbuttondblclk:
mov [mouse_select],0
call get_mouse_position
call get_word_edges
mov [caret_position],ecx
mov [selection_position],ebx
mov eax,[caret_line]
mov [selection_line],eax
mov eax,[caret_line_number]
mov [selection_line_number],eax
jmp moved_selection
get_word_edges:
call get_caret_segment
mov ebx,[caret_position]
sub ebx,edx
find_left_edge:
or edx,edx
jz left_edge_in_previous_segment
cmp edx,SEGMENT_DATA_LENGTH
ja left_edge_ok
mov al,[esi+SEGMENT_HEADER_LENGTH+edx-1]
call recognize_character
jc left_edge_ok
dec edx
jmp find_left_edge
left_edge_in_previous_segment:
mov esi,[esi+4]
btr esi,0
jnc left_edge_ok
mov edx,SEGMENT_DATA_LENGTH
sub ebx,edx
jmp find_left_edge
left_edge_ok:
add ebx,edx
call get_caret_segment
mov ecx,[caret_position]
sub ecx,edx
find_right_edge:
cmp edx,SEGMENT_DATA_LENGTH
jae right_edge_in_next_segment
mov al,[esi+SEGMENT_HEADER_LENGTH+edx]
call recognize_character
jc right_edge_ok
inc edx
jmp find_right_edge
right_edge_in_next_segment:
mov esi,[esi]
btr esi,0
jnc right_edge_ok
xor edx,edx
add ecx,SEGMENT_DATA_LENGTH
jmp find_right_edge
right_edge_ok:
add ecx,edx
retn
wm_rbuttondown:
cmp [menu_handle],0
je ignore
lea eax,[point]
invoke GetCursorPos,eax
invoke TrackPopupMenu,[menu_handle],TPM_RIGHTBUTTON,[point.x],[point.y],0,[menu_window],0
jmp ignore
wm_copy:
cmp [was_selection],0
je ignore
call copy_to_clipboard
jmp ignore
copy_to_clipboard:
call get_block_length
inc ecx
invoke GlobalAlloc,GMEM_MOVEABLE+GMEM_DDESHARE,ecx
mov ebx,eax
invoke GlobalLock,ebx
mov edi,eax
push ebx
call copy_block
pop ebx
invoke GlobalUnlock,ebx
invoke OpenClipboard,[hwnd]
invoke EmptyClipboard
invoke SetClipboardData,CF_TEXT,ebx
or eax,eax
jz copy_failed
invoke CloseClipboard
retn
copy_failed:
invoke GlobalFree,ebx
retn
wm_cut:
cmp [was_selection],0
je ignore
call copy_to_clipboard
wm_clear:
cmp [was_selection],0
je ignore
call store_status_for_undo
call delete_block
mov [selection_line],0
jmp text_modified
wm_paste:
call store_status_for_undo
cmp [was_selection],0
je paste_secureselection_ok
test [editor_style],AES_SECURESEL
jnz paste_secureselection_ok
call delete_block
paste_secureselection_ok:
invoke OpenClipboard,NULL
invoke GetClipboardData,CF_TEXT
or eax,eax
jnz do_paste
invoke CloseClipboard
jmp ignore
do_paste:
or [clipboard_opened],-1
mov ebx,eax
invoke GlobalLock,ebx
mov esi,eax
push ebx
call insert_block
jc paste_failed
pop ebx
invoke GlobalUnlock,ebx
invoke CloseClipboard
mov [clipboard_opened],0
test [editor_style],AES_SECURESEL
jz no_selection_after_paste
mov eax,[caret_line]
mov ecx,[caret_line_number]
mov edx,[caret_position]
xchg eax,[selection_line]
xchg ecx,[selection_line_number]
xchg edx,[selection_position]
mov [caret_line],eax
mov [caret_line_number],ecx
mov [caret_position],edx
jmp text_modified
no_selection_after_paste:
mov [selection_line],0
jmp text_modified
paste_failed:
call undo_changes
pop ebx
invoke GlobalUnlock,ebx
invoke CloseClipboard
mov [clipboard_opened],0
jmp text_modified
wm_settext:
mov esi,[lparam]
call set_text
mov [return_value],TRUE
jmp text_modified
wm_gettextlength:
mov esi,[first_line]
count_text_length:
mov eax,[esi+8]
add [return_value],eax
skip_counted_line_segments:
mov esi,[esi]
or esi,esi
jz ignore
btr esi,0
jc skip_counted_line_segments
add [return_value],2
jmp count_text_length
wm_gettext:
mov esi,[first_line]
mov edi,[lparam]
sub [wparam],1
jc ignore
copy_text:
mov ecx,[esi+8]
test [editor_style],AES_OPTIMALFILL
jz direct_copy
or ecx,ecx
jz direct_copy
push edi ecx
mov edi,[line_buffer]
xor edx,edx
call copy_from_line
push esi
mov esi,[line_buffer]
mov edi,[line_buffer]
add edi,[peak_line_length]
mov ebx,edi
mov ecx,[esp+4]
xor al,al
rep stosb
mov ecx,[esp+4]
invoke syntax_proc,esi,ecx,ebx
pop esi ecx edi
mov eax,[return_value]
add eax,ecx
cmp eax,[wparam]
jbe optimal_fill_size_ok
mov ecx,[wparam]
sub eax,[return_value]
optimal_fill_size_ok:
push esi edi
mov esi,[line_buffer]
mov ebx,[peak_line_length]
jecxz optimal_fill_done
xor edx,edx
optimal_fill:
lodsb
cmp al,20h
jne store_character
cmp byte [esi-1+ebx],0
jne store_character
mov eax,esi
sub eax,[line_buffer]
test eax,111b
jz store_tab
inc edx
mov al,20h
stosb
loop optimal_fill
jmp optimal_fill_done
store_tab:
mov al,20h
or edx,edx
jz store_character
sub edi,edx
mov al,9
store_character:
stosb
xor edx,edx
loop optimal_fill
optimal_fill_done:
pop eax
neg eax
add eax,edi
add [return_value],eax
pop esi
jmp line_copied
direct_copy:
mov eax,[return_value]
add eax,ecx
cmp eax,[wparam]
jbe direct_copy_size_ok
mov ecx,[wparam]
sub eax,[return_value]
direct_copy_size_ok:
add [return_value],ecx
xor edx,edx
call copy_from_line
line_copied:
or esi,esi
jz text_copied
mov ecx,[return_value]
add ecx,2
cmp ecx,[wparam]
ja text_copied
mov ax,0A0Dh
stosw
mov [return_value],ecx
cmp ecx,[wparam]
jne copy_text
text_copied:
xor al,al
stosb
jmp ignore
aem_getlinelength:
mov esi,[caret_line]
mov eax,[wparam]
or eax,eax
jz return_length
call find_line
cmp ecx,[wparam]
je return_length
or [return_value],-1
jmp ignore
return_length:
mov ecx,[esi+8]
mov [return_value],ecx
jmp ignore
aem_getline:
mov esi,[caret_line]
mov eax,[wparam]
or eax,eax
jz get_line
call find_line
cmp ecx,[wparam]
jne ignore
get_line:
mov ecx,[esi+8]
mov [return_value],ecx
mov edi,[lparam]
xor edx,edx
call copy_from_line
xor al,al
stosb
jmp ignore
wm_setfont:
mov esi,[wparam]
or esi,esi
jnz get_metrics
mov esi,[asmedit_font]
get_metrics:
invoke GetDC,[hwnd]
mov ebx,eax
invoke SelectObject,ebx,esi
lea edi,[char]
mov byte [edi],20h
lea eax,[size]
invoke GetTextExtentPoint32,ebx,edi,1,eax
lea eax,[tm]
invoke GetTextMetrics,ebx,eax
invoke ReleaseDC,[hwnd],ebx
test [tm.tmPitchAndFamily],TMPF_FIXED_PITCH
jnz ignore
mov [return_value],esi
mov [editor_font],esi
mov eax,[size.cy]
mov [font_height],eax
mov eax,[size.cx]
mov [font_width],eax
call create_caret
mov eax,[lparam]
mov [redraw_now],al
jmp wm_size
wm_getfont:
mov eax,[editor_font]
cmp eax,[asmedit_font]
je ignore
mov [return_value],eax
jmp ignore
wm_undo:
cmp [undo_data],0
je ignore
call undo_changes
mov [last_operation],0
call create_caret
jmp text_modified
em_canundo:
mov eax,[undo_data]
or eax,eax
jz ignore
mov [return_value],TRUE
jmp ignore
em_emptyundobuffer:
call clear_undo_data
jmp ignore
em_replacesel:
test [editor_mode],AEMODE_VERTICALSEL + AEMODE_OVERWRITE
jnz ignore
cmp [undo_data],0
je replacesel_undopoint
cmp [wparam],0
je replace_undo_ok
replacesel_undopoint:
call store_status_for_undo
replace_undo_ok:
cmp [was_selection],0
je simple_replace
push [caret_line_number]
push [caret_position]
call delete_block
pop edx ecx
cmp ecx,[caret_line_number]
jne simple_replace
cmp edx,[caret_position]
jne simple_replace
mov esi,[lparam]
call insert_block
mov esi,[caret_line]
mov ecx,[caret_line_number]
mov edx,[caret_position]
xchg esi,[selection_line]
xchg ecx,[selection_line_number]
xchg edx,[selection_position]
mov [caret_line],esi
mov [caret_line_number],ecx
mov [caret_position],edx
mov [notification],AEN_TEXTCHANGE
jmp text_modified
simple_replace:
mov esi,[lparam]
call insert_block
mov [notification],AEN_TEXTCHANGE
jmp text_modified
aem_setmode:
mov eax,[wparam]
xchg [editor_mode],eax
cmp eax,[editor_mode]
je ignore
mov [notification],AEN_MODECHANGE
call create_caret
cmp [was_selection],0
jne moved_window
jmp done
aem_getmode:
mov eax,[editor_mode]
mov [return_value],eax
jmp ignore
aem_setsyntaxhighlight:
mov eax,[wparam]
mov ebx,[lparam]
mov [syntax_colors],eax
mov [syntax_proc],ebx
or eax,eax
jnz wm_size
mov [syntax_proc],SyntaxProc
jmp wm_size
aem_setrightclickmenu:
mov eax,[wparam]
mov ebx,[lparam]
mov [menu_handle],eax
mov [menu_window],ebx
jmp ignore
aem_settextcolor:
mov eax,[wparam]
mov ebx,[lparam]
mov [text_color],eax
mov [background_color],ebx
jmp wm_size
aem_setselcolor:
mov eax,[wparam]
mov ebx,[lparam]
mov [selection_text],eax
mov [selection_background],ebx
jmp wm_size
aem_setpos:
mov edi,[wparam]
virtual at edi
pos AEPOS
end virtual
cmp [selection_line],0
jne selection_current_ok
mov eax,[caret_line]
mov [selection_line],eax
mov eax,[caret_line_number]
mov [selection_line_number],eax
mov eax,[caret_position]
mov [selection_position],eax
selection_current_ok:
mov eax,[pos.selectionLine]
or eax,eax
jz selection_line_ok
call find_line
mov [selection_line],esi
mov [selection_line_number],ecx
selection_line_ok:
mov eax,[pos.selectionPosition]
sub eax,1
jc selection_position_set
mov [selection_position],eax
selection_position_set:
mov eax,[pos.caretLine]
or eax,eax
jz caret_line_ok
call find_line
mov [caret_line],esi
mov [caret_line_number],ecx
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -