kolibrios/programs/develop/libraries/box_lib/trunk/editbox.mac

1346 lines
39 KiB
Plaintext
Raw Normal View History

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Basic macros for use editbox ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
macro use_editbox_draw
{
edit_box:
.draw:
pushad
mov edi,[esp+36]
and dword ed_text_color,17FFFFFFh
mov ecx,ed_text_color
mov ebx,ecx
shr ecx,28
shl ebx,4
shr ebx,28
inc ebx
mov eax,6
jecxz @f
mov al, 8
@@:
mul bl
mov ed_char_width,eax
mov al, 9
jecxz @f
mov al, 16
@@:
mul bl
add eax,4
mov ed_height,eax
call .draw_border
.draw_bg_cursor_text:
call .check_offset
call .draw_bg
call .draw_shift
.draw_cursor_text:
call .draw_text
test word ed_flags,ed_focus
jz .editbox_exit
call .draw_cursor
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;<3B><><20><><20><> editbox <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20>㭪権 <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><E0A0A1><EFBFBD><E7A8AA>;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.editbox_exit:
popad
ret 4
}
macro use_editbox_key
{
;==========================================================
;=== <20><><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> =================================
;==========================================================
edit_box_key:
pushad
mov edi,[esp+36]
test word ed_flags,ed_focus ; <20><20><> <20><><E4AEAA><EFBFBD>, <20><><EFBFBD><E5AEA4>
jz edit_box.editbox_exit
test word ed_flags,ed_mouse_on or ed_disabled
jnz edit_box.editbox_exit
;--------------------------------------
; this code for Win-keys, works with
; kernel SVN r.3356 or later
push eax
push ebx
mcall 66,3
test ax,0x200 ; LWin
jnz .win_key_pressed
test ax,0x400 ; RWin
jz @f
.win_key_pressed:
pop ebx
pop eax
jmp edit_box.editbox_exit
@@: pop ebx
pop eax
;--------------------------------------
;<3B><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD> shift ?
call edit_box_key.check_shift_ctrl_alt
;----------------------------------------------------------
;--- <20><EFBFBD><E0AEA2>塞, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> --------------------------------
;----------------------------------------------------------
cmp ah,8
jz edit_box_key.backspace
cmp ah,0xb6
jz edit_box_key.delete
cmp ah,176
jz edit_box_key.left
cmp ah,179
jz edit_box_key.right
cmp ah,180
jz edit_box_key.home
cmp ah,181
jz edit_box_key.end
cmp ah,185 ;insert
jz edit_box_key.insert
; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>樨 Ctrl + <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
test word ed_flags,ed_ctrl_on
jz @f
; <20><EFBFBD>ઠ ᪠<><E1AAA0><EFBFBD><EFBFBD><EFBFBD>
ror eax,8
cmp ah,46 ; Ctrl + C
je edit_box_key.ctrl_c
cmp ah,47 ; Ctrl + V
je edit_box_key.ctrl_v
rol eax,8
@@:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;<3B><><EFBFBD><EFBFBD><EFBFBD><20><> <20><><EFBFBD><E0A0A1><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20>.<2E>. <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E3A6A5><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><EFBFBD><E5AEA4> <20><><20><> <20><><EFBFBD><E0A0A1><EFBFBD>
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
use_key_no_process up,down,esc,enter,tab,numl,capsl,scrolll
;--- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ---
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;<3B><EFBFBD><20><><EFBFBD><E2A0AD><EFBFBD><EFBFBD><EFBFBD> <20><><> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><20><EFBFBD> <20><EFBFBD><EBA2AE><EFBFBD><EFBFBD> ⮫쪮 <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><EFBFBD><E3A6AD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20>᫨ ⠪<><E2A0AA> <20><><EFBFBD><EFBFBD><EFBFBD><E5AEA4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>, <20><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0AEA2><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
use_key_figures_only
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;<3B><EFBFBD><20><> shift, <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
are_key_shift_press
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; <20><EFBFBD><E0AEA2>塞, <20><><EFBFBD><E5AEA4><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> + <20><><EFBFBD><EFBFBD><ECADA5><EFBFBD><EFBFBD> <20><><EFBFBD>
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
are_key_cur_end
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;<3B><><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> insert,delete.backspace,home,end,left,right
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
use_work_key
}
macro use_editbox_mouse
{
;==========================================================
;=== <20><><EFBFBD><20><><EFBFBD><EFBFBD> =======================================
;==========================================================
;save for stdcall ebx,esi,edi,ebp
edit_box_mouse:
pushad
mov edi,[esp+36]
test word ed_flags,ed_disabled
jnz edit_box.editbox_exit
;debug
;----------------------------------------------------------
;--- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> -----------------------
;----------------------------------------------------------
mcall 37,2
;----------------------------------------------------------
;--- <20><EFBFBD><E0AEA2><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ----------------------------------
;----------------------------------------------------------
test eax,1
jnz edit_box_mouse.mouse_left_button
and word ed_flags,ed_mouse_on_off
mov ebx,ed_mouse_variable
push 0
pop dword [ebx]
jmp edit_box.editbox_exit
.mouse_left_button:
;----------------------------------------------------------
;--- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0AEA2> <20><><><E4AEAA><EFBFBD><EFBFBD><E0AEA2> <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
;----------------------------------------------------------
mov eax,ed_mouse_variable
push dword [eax]
pop eax
test eax,eax
jz @f
cmp eax,edi
je @f
jmp edit_box_mouse._blur
;----------------------------------------------------------
;--- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E0A4A8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><EFBFBD><E2ADAE>⥫쭮 0 <20>.<2E> <20><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
;----------------------------------------------------------
@@: mcall 37,1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;<3B><EFBFBD><E3ADAA><EFBFBD> <20><><EFBFBD><20><><20><><EFBFBD><EFBFBD><EFBFBD><E7A5AD> <20><><EFBFBD><EFBFBD><E0A4A8><EFBFBD> <20> <20><EFBFBD><20><> + <20><EFBFBD><EBA4A5><EFBFBD><EFBFBD><EFBFBD>
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
use_work_mouse
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;<3B><><20>㭪樨 <20><><EFBFBD>
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
use_general_func
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;<3B>㭪樨 <20><><EFBFBD><><E0A0A1><EFBFBD> <20> key
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
use_key_func
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;<3B>㭪樨 <20><><EFBFBD><><E0A0A1><EFBFBD> <20> mouse
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
use_mouse_func
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Bit mask from editbox
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
}
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;<3B><><EFBFBD><EFBFBD> <20><><EFBFBD><E1AFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>㭪樨 <20><><EFBFBD><EFBFBD><EFBFBD>묨 ॠ<><E0A5A0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><EFBFBD><EBA2AE> <20><EFBFBD><E1ADAE><EFBFBD><EFBFBD> <20>㭪権 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E1AFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
macro use_general_func
{
;debug_func
;----------------------------------------------------------
;--- <20><><EFBFBD><EFBFBD><E6A5A4><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1AEA2> <20><EFBFBD><EBA4A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> ----------------
;----------------------------------------------------------
edit_box.draw_shift:
test word ed_flags,ed_shift_bac ;<3B><><EFBFBD><E2A0AD><EFBFBD><EFBFBD><><E4ABA0>, <20><EFBFBD><EBA4A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
jz @f
mov ebp,shift_color
movzx ebx, word ed_shift_pos
call edit_box_key.sh_cl_
@@: ret
;----------------------------------------------------------
;--- <20><><EFBFBD><EFBFBD><E6A5A4><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1AEA2><><E2A5AA><EFBFBD> --------------------------
;----------------------------------------------------------
edit_box.draw_text:
call edit_box.get_n
mov esi,ed_size
sub esi,ed_offset
cmp eax,esi
jae @f
mov esi,eax
@@:
test esi,esi
jz @f
mov eax,4
mov ebx,ed_left
add ebx,2
shl ebx,16
add ebx,ed_top
add ebx,3
mov ecx,ed_text_color
test dword ed_flags,ed_pass
jnz .password
mov edx,ed_text
add edx,ed_offset
mcall
@@:
ret
.password:
mov ebp,esi
mov esi,1
mov edx,txt_pass
@@:
mcall
rol ebx,16
add ebx,ed_char_width
rol ebx,16
dec ebp
jnz @b
ret
txt_pass db '*'
;----------------------------------------------------------
;--- <20><><EFBFBD><EFBFBD><E6A5A4><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1AEA2><> ----------------------------
;----------------------------------------------------------
edit_box.draw_bg:
mov ebx,ed_left
inc ebx
shl ebx,16
add ebx,ed_width
dec ebx
mov edx,ed_color
test word ed_flags, ed_disabled
jz edit_box.draw_bg_eax
mov edx, 0xCACACA ; TODO: add disabled_color field to editbox struct
edit_box.draw_bg_eax:
mov ecx,ed_top
inc ecx
shl ecx,16
add ecx,ed_height
mcall 13
ret
;----------------------------------------------------------
;--- <20><><EFBFBD><EFBFBD><E6A5A4><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><E7A5AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⢠ ᨬ<><E1A8AC><EFBFBD><EFBFBD><EFBFBD> <20><><20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
;----------------------------------------------------------
edit_box.get_n:
mov eax,ed_width
sub eax,4
xor edx,edx
div word ed_char_width
ret
;----------------------------------------------------------
;------------------ Draw Cursor Procedure -----------------
;----------------------------------------------------------
; in: ebp = Color
edit_box.clear_cursor:
mov edx, ebp
movzx ebx, word cl_curs_x
movzx ecx, word cl_curs_y
jmp edit_box.draw_curs
edit_box.draw_cursor:
mov edx, ed_text_color
mov eax, ed_pos
sub eax, ed_offset
mul dword ed_char_width
mov ebx, eax
add ebx, ed_left
inc ebx
mov ecx, ed_top
add ecx, 2
mov cl_curs_x, bx
mov cl_curs_y, cx
edit_box.draw_curs:
mov eax, ebx
shl ebx, 16
or ebx, eax
mov eax, ecx
shl ecx, 16
or ecx, eax
add ecx, ed_height
sub ecx, 3
mcall 38
ret
;----------------------------------------------------------
;--- <20><><EFBFBD><EFBFBD><E6A5A4><EFBFBD> <20><><EFBFBD><E1AEA2><EFBFBD><EFBFBD><><E0A0AC> ----------------------------
;----------------------------------------------------------
edit_box.draw_border:
test word ed_flags,ed_focus
mov edx,ed_focus_border_color
jne @f
mov edx,ed_blur_border_color
@@:
mov ebx,ed_left
mov ecx,ebx
shl ebx,16
add ebx,ecx
add ebx,ed_width
mov ecx,ed_top
mov esi,ecx
shl ecx,16
add ecx,esi
mcall 38 ; top
mov esi,ecx
inc ecx
add ecx,ed_height
mov ebp,ecx
shl ecx,16
mov cx,bp
mcall ; bottom
mov cx,si
mov ebp,ebx
sub ebx,ed_width
mcall ; left
mov ebx,ebp
shl ebx,16
mov bx,bp
mcall ; right
ret
;----------------------------------------------------------
;--- <20><EFBFBD>ઠ, <20><><20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><EFBFBD><E0A0AD><EFBFBD> <20>, <20><20><><EFBFBD><EFBFBD>, ---
;--- <20><><EFBFBD><EFBFBD><EFBFBD>塞 ᬥ饭<E1ACA5><E9A5AD> ------------------------------------
;--- <20>᫨ ᬥ饭<E1ACA5><E9A5AD> <20>뫮, <20><><EFBFBD><E2A0AD><EFBFBD><EFBFBD><><E4ABA0> ed_offset_cl, <20><><EFBFBD><EFBFBD><EFBFBD>,
; <20><20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><E2A0A2><EFBFBD><EFBFBD><EFBFBD> ed_offset_fl
; <20> <20><><20><><EFBFBD><E2AEA2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⮢ word ed_flags
;----------------------------------------------------------
edit_box.check_offset:
pushad
mov ecx,ed_pos
mov ebx,ed_offset
cmp ebx,ecx
ja edit_box.sub_8
push ebx
call edit_box.get_n
pop ebx
mov edx,ebx
add edx,eax
inc edx ;<3B><><EFBFBD><EFBFBD><EFBFBD><E5AEA4><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><ECADAE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><EFBFBD><E0A0A9><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
cmp edx,ecx
ja @f
mov edx,ed_size
cmp edx,ecx
je edit_box.add_end
sub edx,ecx
cmp edx,8
jbe edit_box.add_8
add ebx,8
jmp edit_box.chk_d
@@: or word ed_flags,ed_offset_fl
popad
ret
edit_box.sub_8:
test ecx,ecx
jz @f
sub ebx,8 ;ebx=ed_offset
ja edit_box.chk_d
@@:
xor ebx,ebx
jmp edit_box.chk_d
edit_box.add_end:
sub edx,eax
mov ebx,edx
jmp edit_box.chk_d
edit_box.add_8:
add ebx,edx
edit_box.chk_d:
mov ed_offset,ebx
call edit_box.draw_bg
and word ed_flags,ed_offset_cl
popad
ret
proc edit_box_set_text, edit:dword, text:dword
pushad
mov edi,[edit]
mov ecx,ed_max
inc ecx
mov edi,[text]
xor al,al
cld
repne scasb
mov ecx,edi
mov edi,[edit]
mov esi,[text]
sub ecx,esi
dec ecx
mov ed_size,ecx
mov ed_pos,ecx
and word ed_flags,ed_shift_cl
mov edi,ed_text
repne movsb
mov byte[edi],0
popad
ret
endp
}
macro use_key_func
{
;<3B><><EFBFBD>⪠ Shift <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><EBA4A5><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
edit_box_key.shift:
call edit_box.draw_bg
test word ed_flags,ed_shift
je edit_box_key.f_exit
mov ebp,shift_color
or word ed_flags,ed_shift_bac ;<3B><><EFBFBD><E2A0AD><EFBFBD><EFBFBD><><E4ABA0>, <20><EFBFBD><EBA4A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
movzx ebx, word ed_shift_pos
call edit_box_key.sh_cl_
jmp edit_box.draw_cursor_text
edit_box_key.f_exit:
call edit_box.check_offset
and word ed_flags,ed_shift_cl
call edit_box_key.enable_null
jmp edit_box.draw_cursor_text
edit_box_key.sh_cl_:
;<3B><><EFBFBD><20><><EFBFBD><EFBFBD>⪨, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> - <20><EFBFBD><E0A0A2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><EBA4A5><EFBFBD><EFBFBD><EFBFBD>
;<3B><><EFBFBD> <20><><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><EBA4A5><EFBFBD><EFBFBD><EFBFBD>
;<3B><EFBFBD><E5AEA4><EFBFBD> <20><><EFBFBD><E0A0AC><EFBFBD><EFBFBD> ebp=color ebx=ed_shift_pos
mov eax,ed_pos
cmp eax,ebx
jae edit_box_key.sh_n
push eax ;<3B><><EFBFBD><EFBFBD><20> eax
push ebx ;<3B><><EFBFBD><EFBFBD>
jmp edit_box_key.sh_n1
edit_box_key.sh_n:
push ebx
push eax
edit_box_key.sh_n1:
call edit_box.check_offset
call edit_box.get_n
mov edx,eax ;size of ed_box
mov ecx,ed_offset
add eax,ecx ;eax = w_off= ed_offset+width
mov edx,eax ;save
pop ebx ;<3B><><EFBFBD><EFBFBD>
pop eax ;<3B><><EFBFBD><EFBFBD>
cmp eax,ecx ;<3B><EFBFBD><E0A0A2><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> offset.
jae edit_box_key.f_f ;<3B><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
xor eax,eax
cmp edx,ebx ;cࠢ<63><E0A0A2><EFBFBD><><E0A0A7><EFBFBD> w_off <20> <20><><EFBFBD><EFBFBD>
jnb @f
mov ebx,edx
@@:
sub ebx,ecx
jmp edit_box_key.nxt_f
edit_box_key.f_f:
sub eax,ecx
cmp edx,ebx ;cࠢ<63><E0A0A2><EFBFBD><><E0A0A7><EFBFBD> w_off <20> <20><><EFBFBD><EFBFBD>
jle @f
sub ebx,ecx
sub ebx,eax
jmp edit_box_key.nxt_f
@@: mov ebx,edx
sub ebx,ecx
sub ebx,eax
edit_box_key.nxt_f:
mul dword ed_char_width
xchg eax,ebx
mul dword ed_char_width
add ebx,ed_left
inc ebx
shl ebx,16
inc eax
mov bx, ax
mov edx,ebp ;shift_color
call edit_box.draw_bg_eax
jmp edit_box_key.enable_null
;<3B><><EFBFBD><E2A0AD><EFBFBD><EFBFBD>- <20><><EFBFBD><20><EFBFBD><EBA4A5><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><><E1A8AC><EFBFBD>
edit_box_key.drw_sim:
mov eax,ed_pos
call edit_box_key.draw_rectangle
jmp edit_box_key.enable_null
;<3B><EFBFBD><E3ADAA><EFBFBD> <20><><EFBFBD><E2A0AD><EFBFBD><EFBFBD> <20><EFBFBD><EBA4A5><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD>⨨ shift
edit_box_key.draw_wigwag:
mov ebp,shift_color
call edit_box.clear_cursor
or word ed_flags,ed_shift_bac ;<3B><><EFBFBD><E2A0AD><EFBFBD><EFBFBD><><E4ABA0> <20><EFBFBD><EBA4A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
mov ebp,shift_color
mov eax,ed_pos
test word ed_flags,ed_left_fl
jnz edit_box_key.draw_rectangle
dec eax
jmp edit_box_key.draw_rectangle
;<3B><EFBFBD><E3ADAA><EFBFBD><><E3A4A0><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><EBA4A5><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD>⨨ shift
edit_box_key.draw_wigwag_cl:
mov ebp,ed_color
call edit_box.clear_cursor
mov ebp,ed_color
mov eax,ed_pos
test word ed_flags,ed_left_fl
jnz edit_box_key.draw_rectangle
dec eax
jmp edit_box_key.draw_rectangle
;<3B><EFBFBD><E5AEA4><EFBFBD> <20><><EFBFBD><E0A0AC><EFBFBD> ebx - ed_pos
edit_box_key.sh_first_sh:
test word ed_flags,ed_shift
je @f
mov ed_shift_pos_old,bx
test word ed_flags,ed_shift_on
jne @f
mov ed_shift_pos,bx
or word ed_flags,ed_shift_on
@@: ret
;<3B><><EFBFBD><20><EFBFBD><E0A0A9><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> editbox <20><><EFBFBD> <20><><EFBFBD><EFBFBD>⮬ shift
;<3B><EFBFBD><E0AEA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><20><EFBFBD><EBA4A5><EFBFBD><EFBFBD><EFBFBD>, <20><20><><EFBFBD> shift
;<3B><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><E5AEA4>
edit_box_key.sh_st_of:
test word ed_flags,ed_shift
jne @f
test word ed_flags,ed_shift_bac
je @f
call edit_box.draw_bg
mov ebp,ed_color
movzx ebx, word ed_shift_pos
call edit_box_key.sh_cl_ ;<3B><><EFBFBD><EFBFBD><20><EFBFBD><EBA4A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E0A0A3><EFBFBD><EFBFBD><EFBFBD>
and word ed_flags,ed_shift_cl ; <20><><EFBFBD><EFBFBD><20><><>, <20><><EFBFBD> <20><><EFBFBD> <20><EFBFBD><EBA4A5><EFBFBD><EFBFBD><EFBFBD>
jmp edit_box.draw_cursor_text
@@: and word ed_flags,ed_shift_off
popad
ret 4
;<3B><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> shift, <20><><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><><E0A0AD><EFBFBD>?
edit_box_key.sh_enable:
test word ed_flags,ed_shift
jne edit_box_key.sh_ext_en ;<3B><><EFBFBD><EFBFBD><EFBFBD><E1AEA2><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8A5AD><EFBFBD> <20><>אַ㣮<EFACAE><EFBFBD>
test word ed_flags,ed_shift_bac
je @f
call edit_box.check_offset
mov ebp,ed_color
movzx ebx, word ed_shift_pos
call edit_box_key.sh_cl_ ;<3B><><EFBFBD><EFBFBD><20><EFBFBD><EBA4A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E0A0A3><EFBFBD><EFBFBD><EFBFBD>
call edit_box_key.draw_wigwag_cl
and word ed_flags,ed_shift_cl ; 1<><31><EFBFBD> <20><> <20><EFBFBD>
ret
@@: mov ebp,ed_color
call edit_box.clear_cursor
jmp edit_box.check_offset
edit_box_key.sh_ext_en:
call edit_box.check_offset
test word ed_flags,ed_offset_fl
je @f
;<3B><><EFBFBD><E1AEA2><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8A5AD><EFBFBD> <20><>אַ㣮<EFACAE><EFBFBD><ECADA8><EFBFBD> <20> <20><> <20><><EFBFBD><EFBFBD>
movzx eax, word ed_shift_pos
mov ebx,ed_pos
movzx ecx, word ed_shift_pos_old
;<3B><EFBFBD><20> <20><><EFBFBD><E1AEA2><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8A5AD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
cmp eax,ecx
je edit_box_key.1_shem
jb edit_box_key.smaller
cmp ecx,ebx
ja edit_box_key.1_shem
call edit_box_key.draw_wigwag_cl ;clear
jmp edit_box_key.sh_e_end
edit_box_key.smaller:
cmp ecx,ebx
jb edit_box_key.1_shem
call edit_box_key.draw_wigwag_cl ;clear
jmp edit_box_key.sh_e_end
edit_box_key.1_shem:
call edit_box_key.draw_wigwag
edit_box_key.sh_e_end:
and word ed_flags,ed_shift_off
ret
@@: mov ebp,shift_color
movzx ebx, word ed_shift_pos
call edit_box_key.sh_cl_
jmp edit_box_key.sh_e_end
;<3B><EFBFBD><E3ADAA><EFBFBD> <20><><EFBFBD> <20><><EFBFBD>⪨ shift <20><><EFBFBD> <20><><EFBFBD><EFBFBD>⨨ home and end
edit_box_key.sh_home_end:
mov ebp,ed_color
call edit_box.clear_cursor
test word ed_flags,ed_shift_bac
je @f
mov ebp,ed_color
movzx ebx, word ed_shift_pos_old
call edit_box_key.sh_cl_
@@:
test word ed_flags,ed_shift
je edit_box_key.sh_exit_ ;<3B><><EFBFBD><EFBFBD><EFBFBD>
mov ebp,shift_color
movzx ebx, word ed_shift_pos
call edit_box_key.sh_cl_
or word ed_flags,ed_shift_bac ;<3B><><EFBFBD><E2A0AD><EFBFBD><EFBFBD><><E4ABA0>, <20><EFBFBD><EBA4A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
jmp edit_box_key.sh_e_end
edit_box_key.sh_exit_:
call edit_box.draw_bg
jmp edit_box.check_offset
;<3B><EFBFBD><E3ADAA><EFBFBD> <20><><EFBFBD><EFBFBD><E1A5AD> 0 <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ed_size+1
edit_box_key.enable_null:
pusha
mov eax,ed_size
mov ebx,ed_text
test eax,eax
add eax,ebx
jne @f
inc eax
@@: xor ebx,ebx
mov [eax],bl
popad
ret
;- 㤠<><E3A4A0><EFBFBD><EFBFBD><EFBFBD><><E1A8AC><EFBFBD><EFBFBD>
;<3B><EFBFBD><E5AEA4><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> edx=ed_size;ecx=ed_pos
edit_box_key.del_char:
mov esi,ed_text
test word ed_flags,ed_shift_on
je @f
movzx eax, word ed_shift_pos
mov ebx,esi
cmp eax,ecx
jae edit_box_key.dh_n
mov ed_pos,eax ;<3B><EFBFBD> <20><> <20>뫮 㡥<><E3A1A5><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
mov ebp,ecx
sub ebp,eax
add ebx,eax ;eax <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
sub edx,ecx
add esi,ecx
mov ed_shift_pos,bp
jmp edit_box_key.del_ch_sh
edit_box_key.dh_n:
mov ebp,eax
sub ebp,ecx
add ebx,ecx
sub edx,eax
add esi,eax
mov ed_shift_pos,bp
jmp edit_box_key.del_ch_sh
@@: add esi,ecx ;㪠<><E3AAA0><EFBFBD> + ᬥ饭<E1ACA5><E9A5AD> <20><><EFBFBD><ECADAE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
mov ebx,esi
inc esi
cld
sub edx,ecx
edit_box_key.del_ch_sh:
push edi
mov edi,ebx
@@:
lodsb
stosb
dec edx
jns @b
pop edi
ret
;<3B><><EFBFBD><EFBFBD><EFBFBD><E1ABA8> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8A8A2><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
;ᮣ<><E1AEA3><EFBFBD><E8A5AD> <20> ebp - <20><><EFBFBD><E0A5A4><EFBFBD><EFBFBD><EFBFBD> ed_size
edit_box_key.clear_bg:
call edit_box.get_n ;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E0A0A7><EFBFBD> <20><><E1A8AC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
push eax
mov ebx,ed_offset
add eax,ebx ;eax = w_off= ed_offset+width
mov ebx,ebp ;ed_size
cmp eax,ebx
jb @f
mov eax,ed_pos
sub ebx,eax
mov ecx,ed_offset
sub eax,ecx
jmp edit_box_key.nxt
@@: mov ebx,ed_pos
push ebx
sub eax,ebx
mov ebx,eax ;It is not optimal
pop eax ;ed_pos
mov ecx,ed_offset
sub eax,ecx
edit_box_key.nxt:
mov ebp,eax ;<3B><EFBFBD><20><> <20><><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8A8A2><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><EFBFBD><E0A5A4><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
add ebp,ebx
pop edx
cmp ebp,edx
je @f
inc ebx
@@:
mul dword ed_char_width
xchg eax,ebx
mul dword ed_char_width
add ebx,ed_left
inc ebx
shl ebx,16
inc eax
mov bx, ax
mov edx,ed_color
jmp edit_box.draw_bg_eax
;;;;;;;;;;;;;;;;;;;
;;; <20><><EFBFBD><20><EFBFBD><EFBFBD><E2A8A2>
;;;;;;;;;;;;;;;;;;;;
;<3B><><EFBFBD><EFBFBD><EFBFBD><E1AEA2><EFBFBD> <20><>אַ㣮<EFACAE><EFBFBD>, 梥<> <20><><EFBFBD><E0A5A4><EFBFBD><EFBFBD><EFBFBD> <20> ebp
;<3B><EFBFBD><E5AEA4><EFBFBD> <20><><EFBFBD><E0A0AC><EFBFBD><EFBFBD>:
;eax=dword ed_pos
;ebp=-梥<> ed_color or shift_color
edit_box_key.draw_rectangle:
sub eax,ed_offset
mul dword ed_char_width
add eax,ed_left
inc eax
shl eax,16
add eax,ed_char_width
mov ebx,eax
mov edx,ebp
jmp edit_box.draw_bg_eax
;;;;;;;;;;;;;;;;;;
;;<3B><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD> <20><> shift
;;;;;;;;;;;;;;;;;;
edit_box_key.check_shift_ctrl_alt:
pusha
mcall 66,3
test al,11b
je @f
or word ed_flags,ed_shift ;<3B><><EFBFBD><E2A0AD><EFBFBD><EFBFBD><> Shift
@@:
and word ed_flags,ed_ctrl_off ; <20><><EFBFBD><EFBFBD>⨬ 䫠<> Ctrl
test al,1100b
je @f
or word ed_flags,ed_ctrl_on ;<3B><><EFBFBD><E2A0AD><EFBFBD><EFBFBD><> Ctrl
@@:
and word ed_flags,ed_alt_off ; <20><><EFBFBD><EFBFBD>⨬ 䫠<> Alt
test al,110000b
je @f
or word ed_flags,ed_alt_on ;<3B><><EFBFBD><E2A0AD><EFBFBD><EFBFBD><> Alt
@@:
popad
ret
}
macro use_key_no_process up,down,esc,enter,tab,numl,capsl,scrolll
{
if up eq
else
cmp ah,177
jz edit_box.editbox_exit
end if
if down eq
else
cmp ah,178
jz edit_box.editbox_exit
end if
if esc eq
else
cmp ah,27 ;ESC - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ))
jz edit_box.editbox_exit
end if
if enter eq
else
cmp ah,13 ;ENTER - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ))
jz edit_box.editbox_exit
end if
if tab eq
else
cmp ah,9 ;TAB - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ))
jz edit_box.editbox_exit
end if
if numl eq
else
cmp ah,4 ;Num Lock - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ))
jz edit_box.editbox_exit
end if
if capsl eq
else
cmp ah,2 ;Caps Lock - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ))
jz edit_box.editbox_exit
end if
if scrolll eq
else
cmp ah,1 ;Scroll Lock - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ))
jz edit_box.editbox_exit
end if
}
macro use_key_figures_only
{
test word ed_flags,ed_figure_only ; ⮫쪮 <20><><EFBFBD><EFBFBD><EFBFBD>?
jz @f
cmp ah,'0'
jb edit_box.editbox_exit
cmp ah,'9'
ja edit_box.editbox_exit
@@:
}
macro are_key_shift_press
{
test word ed_flags,ed_shift_on
je @f
; edx = ed_size, ecx = ed_pos
push eax
mov edx,ed_size
mov ecx, ed_pos
pusha
; clear input area
mov ebp,ed_color
movzx ebx, word ed_shift_pos
call edit_box_key.sh_cl_
mov ebp,ed_size
call edit_box_key.clear_bg
popa
call edit_box_key.del_char
mov ebx,ed_size
sub bx,ed_shift_pos
mov ed_size,ebx
pop eax
@@:
}
macro are_key_cur_end
{
mov ecx,ed_size
mov edx, ed_max
test word ed_flags,ed_insert
jne @f
cmp ecx,edx
jae edit_box.editbox_exit
@@: mov ebx, ed_pos
cmp ebx,edx
jnl edit_box.editbox_exit
mov ecx,ed_size
push edi eax
mov ebp,edi
mov esi,ed_text
add esi,ecx
mov edi,esi
cmp ecx,ebx
je edit_box_key.In_k
test dword bp_flags,ed_insert
jne edit_box_key.ins_v
pusha
mov edi,ebp
mov ebp,ed_size
call edit_box_key.clear_bg
popa
sub ecx,ebx
inc edi
std
inc ecx
@@:
lodsb
stosb
loop @b
edit_box_key.In_k:
cld
pop eax
mov al,ah
stosb
pop edi
inc dword ed_size
inc dword ed_pos
call edit_box_key.draw_all2
jmp edit_box_key.shift
}
macro use_work_key
{
edit_box_key.insert:
test word ed_flags,ed_insert
je @f
and word ed_flags,ed_insert_cl
jmp edit_box.editbox_exit
@@: or word ed_flags,ed_insert
jmp edit_box.editbox_exit
edit_box_key.ins_v:
dec dword bp_size
sub esi,ecx
add esi,ebx
mov edi,esi
pusha
mov edi,ebp
mov ebp,ed_pos
call edit_box_key.clear_bg
popa
jmp edit_box_key.In_k
edit_box_key.delete:
mov edx,ed_size
mov ecx,ed_pos
cmp edx,ecx
jg edit_box_key.bac_del
test word ed_flags,ed_shift_on
jne edit_box_key.del_bac
popad
ret 4
edit_box_key.bac_del:
call edit_box_key.del_char
jmp edit_box_key.draw_all
edit_box_key.backspace:
test word ed_flags,ed_shift_on
jne edit_box_key.delete
mov ecx,ed_pos
test ecx,ecx
jnz edit_box_key.del_bac
popad
ret 4
edit_box_key.del_bac:
mov edx,ed_size
cmp edx,ecx ;if ed_pos=ed_size
je @f
dec ecx
call edit_box_key.del_char
@@: test word ed_flags,ed_shift_on
jne edit_box_key.bac_del
dec dword ed_pos
edit_box_key.draw_all:
push edit_box_key.shift
test word ed_flags,ed_shift_on
je @f
movzx eax, word ed_shift_pos
mov ebx,ed_size
sub ebx,eax
mov ed_size,ebx
mov ebp,ed_color
call edit_box.clear_cursor
call edit_box.check_offset
jmp edit_box.draw_bg
@@: dec dword ed_size
edit_box_key.draw_all2:
and word ed_flags,ed_shift_cl
mov ebp,ed_color
call edit_box.clear_cursor
call edit_box.check_offset
mov ebp,ed_size
jmp edit_box_key.clear_bg
;--- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> left ---
edit_box_key.left:
mov ebx,ed_pos
test ebx,ebx
jz edit_box_key.sh_st_of
or word ed_flags,ed_left_fl
call edit_box_key.sh_first_sh
dec dword ed_pos
call edit_box.draw_bg
call edit_box.draw_shift
call edit_box_key.sh_enable
jmp edit_box.draw_cursor_text
;--- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> right ---
edit_box_key.right:
mov ebx,ed_pos
cmp ebx,ed_size
je edit_box_key.sh_st_of
and word ed_flags,ed_right_fl
call edit_box_key.sh_first_sh
inc dword ed_pos
call edit_box.draw_bg
call edit_box.draw_shift
call edit_box_key.sh_enable
jmp edit_box.draw_cursor_text
edit_box_key.home:
mov ebx,ed_pos
test ebx,ebx
jz edit_box_key.sh_st_of
call edit_box_key.sh_first_sh
xor eax,eax
mov ed_pos,eax
call edit_box.draw_bg
call edit_box.draw_shift
call edit_box_key.sh_home_end
jmp edit_box.draw_cursor_text
;--- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> end ---
edit_box_key.end:
mov ebx,ed_pos
cmp ebx,ed_size
je edit_box_key.sh_st_of
call edit_box_key.sh_first_sh
mov eax,ed_size
mov ed_pos,eax
call edit_box.draw_bg
call edit_box.draw_shift
call edit_box_key.sh_home_end
jmp edit_box.draw_cursor_text
edit_box_key.ctrl_c:
; add memory area
mov ecx,ed_size
add ecx,3*4
mcall 68,12
; building the clipboard slot header
xor ecx,ecx
mov [eax+4],ecx ; type 'text'
inc ecx
mov [eax+8],ecx ; cp866 text encoding
mov ecx,ed_size
add ecx,3*4
mov [eax],ecx
sub ecx,3*4
; copy data
mov esi,ed_text
push edi
mov edi,eax
add edi,3*4
cld
rep movsb
pop edi
; put slot to the kernel clipboard
mov edx,eax
mov ecx,[edx]
push eax
mcall 54,2
pop ecx
; remove unnecessary memory area
mcall 68,13
.exit:
jmp edit_box.editbox_exit
edit_box_key.ctrl_v:
mcall 54,0
; no slots of clipboard ?
test eax,eax
jz .exit
; main list area not found ?
inc eax
test eax,eax
jz .exit
sub eax,2
mov ecx,eax
mcall 54,1
; main list area not found ?
inc eax
test eax,eax
jz .exit
; error ?
sub eax,2
test eax,eax
jz .exit
inc eax
; check contents of container
mov ebx,[eax+4]
; check for text
test ebx,ebx
jnz .no_valid_text
mov ebx,[eax+8]
; check for cp866
cmp bl,1
jnz .no_valid_text
mov ecx,[eax]
sub ecx,3*4
cmp ecx,ed_max
jb @f
mov ecx,ed_max
@@:
mov esi,eax
add esi,3*4
mov ed_size,ecx
mov ed_pos,ecx
push eax edi
mov edi,ed_text
cld
@@:
lodsb
cmp al,0x0d ; EOS (end of string)
je .replace
cmp al,0x0a ; EOS (end of string)
jne .continue
.replace:
mov al,0x20 ; space
.continue:
stosb
dec ecx
jnz @b
pop edi eax
.no_valid_text:
; remove unnecessary memory area
mov ecx,eax
mcall 68,13
.exit:
jmp edit_box.draw_bg_cursor_text
}
macro use_mouse_func
{
edit_box_mouse.mouse_wigwag:
push eax
call edit_box.draw_bg
call edit_box.draw_shift
pop eax
or word ed_flags,ed_shift_bac+ed_shift_on+ed_shift
;<3B><><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><EBA4A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E2A5AA><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><EFBFBD><E5AEA4> <20><><20><> <20><EFBFBD><E0A5A4><EFBFBD> editbox
test eax,eax
js edit_box_mouse.mleft
shr eax,16
sub eax,ed_left
jc edit_box_mouse.mleft
cmp ed_width,eax
jc edit_box_mouse.mright
xor edx,edx
div word ed_char_width
;<3B><><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><EBA4A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E2A5AA><EFBFBD>, <20> <20><EFBFBD><E0A5A4><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> editbox
;<3B><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E0A4A8><EFBFBD><EFBFBD> <20> eax <20><>誨, <20>.<2E>. <20><20><><EFBFBD> <20><><EFBFBD><E0A5AC><EFBFBD><E2A8AB><EFBFBD>
;<3B><><EFBFBD><E1AEA2><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8A5AD><EFBFBD> <20><>אַ㣮<EFACAE><EFBFBD><ECADA8><EFBFBD> <20> <20><> <20><><EFBFBD><EFBFBD>
add eax,ed_offset
cmp eax,ed_size
ja edit_box_mouse.mwigvag
edit_box_mouse.mdraw:
mov ed_pos,eax
;<3B><><EFBFBD><E1AEA2><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8A5AD><EFBFBD> <20><>אַ㣮<EFACAE><EFBFBD><ECADA8><EFBFBD> <20> <20><> <20><><EFBFBD><EFBFBD>
movzx ecx, word ed_shift_pos
movzx ebx, word ed_shift_pos_old
mov ed_shift_pos_old,ax
;<3B><EFBFBD><20> <20><><EFBFBD><E1AEA2><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8A5AD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
cmp ecx,ebx
je edit_box_mouse.m1_shem ;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>뫮 ࠭<><E0A0AD>
jb edit_box_mouse.msmaller ;<3B><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ->
cmp ebx,eax
ja edit_box_mouse.m1_shem ;<3B><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <-
je edit_box_mouse.mwigvag
mov ebp,ed_color
call edit_box_key.sh_cl_ ;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> c ed_pos ed_shift_pos_old
jmp edit_box_mouse.mwigvag
edit_box_mouse.msmaller:
cmp ebx,eax
jb edit_box_mouse.m1_shem
mov ebp,ed_color
call edit_box_key.sh_cl_
jmp edit_box_mouse.mwigvag
edit_box_mouse.m1_shem:
mov ebp,shift_color
mov ebx,ecx
call edit_box_key.sh_cl_
edit_box_mouse.mwigvag:
and word ed_flags,ed_shift_mcl
jmp edit_box.draw_cursor_text
edit_box_mouse.mleft:
mov eax,ed_pos
cmp eax,0
jbe edit_box_mouse.mwigvag
dec eax
call edit_box.check_offset
push eax
movzx ebx, word ed_shift_pos
mov ebp,shift_color
call edit_box_key.sh_cl_
pop eax
jmp edit_box_mouse.mdraw
edit_box_mouse.mright:
mov eax,ed_pos
mov ebx,ed_size
cmp eax,ebx
jae edit_box_mouse.mwigvag
inc eax
call edit_box.check_offset
movzx ebx, word ed_shift_pos
mov ebp,shift_color
push eax
call edit_box_key.sh_cl_
pop eax
jmp edit_box_mouse.mdraw
}
macro use_work_mouse
; <20><> 㤥ন<E3A4A5><E0A6A8><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>誨, <20><><EFBFBD><E0A5AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
{
test word ed_flags,ed_mouse_on
jne edit_box_mouse.mouse_wigwag
; <20><EFBFBD><E0AEA2>塞, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> edit box
mov ebx,ed_top
cmp ax,bx
jl edit_box_mouse._blur
add ebx,ed_height
cmp ax,bx
jg edit_box_mouse._blur
shr eax,16
mov ebx,ed_left
cmp ax,bx
jl edit_box_mouse._blur
add ebx,ed_width
cmp ax,bx
jg edit_box_mouse._blur
; <20><><EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
push eax
mov ebp,ed_color
call edit_box.clear_cursor
pop eax
edit_box_mouse._mvpos:
xor edx,edx
sub eax,ed_left
div word ed_char_width
add eax,ed_offset
cmp eax,ed_size
jna edit_box_mouse._mshift
mov eax,ed_size
edit_box_mouse._mshift:
; ᥪ<><E1A5AA><EFBFBD> <20><><EFBFBD>⪨ shift <20> <20><EFBFBD><EBA4A5><EFBFBD><EFBFBD><EFBFBD> <20><> shift
test word ed_flags,ed_shift_bac
je @f
mov ebp,ed_color
movzx ebx, word ed_shift_pos
push eax
call edit_box_key.sh_cl_
and word ed_flags,ed_shift_bac_cl
pop eax
@@:
test word ed_flags,ed_mouse_on
jne @f
mov ed_shift_pos,ax
or word ed_flags,ed_mouse_on
mov ed_pos,eax
mov ebx,ed_mouse_variable
push edi
pop dword [ebx]
bts word ed_flags,1
call edit_box.draw_bg
jmp edit_box_mouse.m_sh
@@: cmp ax,ed_shift_pos
je edit_box.editbox_exit
mov ed_pos,eax
call edit_box.draw_bg
mov ebp,shift_color
movzx ebx, word ed_shift_pos
call edit_box_key.sh_cl_
or word ed_flags,ed_mous_adn_b
edit_box_mouse.m_sh:
call edit_box.draw_text
call edit_box.draw_cursor
; <20><><EFBFBD><EFBFBD><E6A5A4><EFBFBD> <20><><EFBFBD><E2A0AD><EFBFBD><EFBFBD><><E4AEAA><EFBFBD>
jmp edit_box_mouse.drc
edit_box_mouse._blur:
test word ed_flags,ed_always_focus
jne edit_box.editbox_exit
btr word ed_flags,1 ; <20><20><> <20><><E4AEAA><EFBFBD>, <20><><EFBFBD><E5AEA4>
jnc edit_box.editbox_exit
mov ebp,ed_color
call edit_box.clear_cursor
edit_box_mouse.drc:
call edit_box.draw_border
jmp edit_box.editbox_exit
}
macro debug
{
;----------- <20><EFBFBD><E2ABA0><EFBFBD>
pushad
mov eax,dword [ed_buffer.2]
mov edi,ed_buffer.3
call .str
;<3B><><EFBFBD><E1AEA2><EFBFBD><EFBFBD><>
mov eax,13
mov ebx,178*65536+70
mov ecx,28*65536+10
xor edx,edx
int 0x40
;<3B><EFBFBD> <20><><EFBFBD><EFBFBD><E7A5AD> <20><> <20><>
mov eax,4
mov ebx,180*65536+30
mov ecx,0x10DDBBCC
mov edx,ed_buffer.3
mov esi,8
int 0x40
popad
;----------- <20><EFBFBD><E2ABA0><EFBFBD>
}
macro debug_func
{
.str:
mov ecx,0x0a ;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E1ABA5><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E0A5A3><EFBFBD><EFBFBD><EFBFBD> ebx,eax,ecx,edx, <20><EFBFBD><E5AEA4><EFBFBD> <20><><EFBFBD><E0A0AC><EFBFBD><EFBFBD> eax - <20><>
;<3B><><EFBFBD><E0A5A2> <20><><20> ASCII <20><><EFBFBD>, <20><EFBFBD><E5AEA4><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ecx=<3D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E1ABA5><EFBFBD>, edi <20><><EFBFBD><EFBFBD><EFBFBD> <20><20><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBA2A0> <20><><EFBFBD>, <20><><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><E0A5AC><EFBFBD><EFBFBD><EFBFBD>
cmp eax,ecx ;<3B><EFBFBD><E0A0A2><EFBFBD><EFBFBD>, <20><20> eax <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 祬 <20> ecx, <20><> <20><><EFBFBD><E0A5A9> <20><> @@-1 <20>.<2E>. <20><> pop eax
jb @f
xor edx,edx ;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> edx
div ecx ;ࠧ<><E0A0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><20> edx
push edx ;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20>
;dec edi ;ᬥ饭<E1ACA5><E9A5AD> <20><><EFBFBD><EFBFBD><EFBFBD><E5AEA4><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
call .str ;<3B><><EFBFBD><E0A5A9> <20><><><> <20>.<2E>. <20><EFBFBD><EBA7A2><EFBFBD><><> <20><20><><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20> eax <20><> <20><EFBFBD><E2A0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><20> ecx
pop eax
@@: ;cmp al,10 ;<3B><EFBFBD><E0AEA2><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><E7A5AD> <20> al, 祬 10 (<28><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E1ABA5><EFBFBD> 10 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD>))
;sbb al,$69 ;- <20><><EFBFBD>⭮, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E2A0A2><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E3ACA0><EFBFBD><EFBFBD> <20>.<2E>. <20> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><><EFBFBD>
;das ;<3B><><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><EFBFBD><EFBFBD><E5AEA4><><E3ACA5><EFBFBD><E8A5AD> al <20><> 66h (<28> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>)
or al,0x30 ;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 祬 <20><><EFBFBD> <20><><EFBFBD><EFBFBD>
stosb ;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><><E0A5A3><EFBFBD><EFBFBD><EFBFBD> al <20> <20><EFBFBD><E7A5A9> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> es:edi
ret ;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 室, <20>.<2E>. <20><><EFBFBD><EFBFBD> <20> <20><EFBFBD> <20><EFBFBD><E0A0AD><EFBFBD><EFBFBD> <20><><EFBFBD>-<2D><> <20><EFBFBD><EBA7AE><EFBFBD>, <20><> <20>⮫쪮 ࠧ <20><> <20> <20><EFBFBD> <20><><EFBFBD><EFBFBD><EBA2A0><EFBFBD><EFBFBD>
}
ed_struc_size=84