;Œ ªà®á ¤«ï ¢ë¢®¤ ®á®¢ëå äãªæ¨© ª®â®àë¥ ¨á¯«ì§ãîâáï ¡®ªá®¬ macro use_general_func { ;debug_func ;---------------------------------------------------------- ;--- ¯à®æ¥¤ãà ¯à®à¨á®¢ª¨ ¢ë¤¥«¥®© ç á⨠----------------- ;---------------------------------------------------------- .draw_shift: test word ed_flags,ed_shift_bac ;ãáâ ®¢ª ä« £ , ¢ë¤¥«¥®© ®¡« á⨠jz @f mov ebp,shift_color mov ebx,dword ed_shift_pos call .sh_cl_ @@: ret ;---------------------------------------------------------- ;--- ¯à®æ¥¤ãà ¯à®à¨á®¢ª¨ ⥪áâ -------------------------- ;---------------------------------------------------------- .draw_text: ;--- ¢ëç¨á«ï¥¬, ᪮«ìª® ¯®¬¥é ¥âáï ᨬ¢®«®¢ --- ;--- çâ®¡ë ¬ãá®à ¥ à¨á®¢ âì --- call .get_n mov esi,ed_size mov ebx,ed_offset sub esi,ebx cmp eax,esi jae @F mov esi,eax ;çâ®¡ë ¥ ¢ë室¨âì § ¯à¥¤¥«ë íªà ;--- à¨á㥬 ⥪áâ --- @@: mov eax,4 mov ebx,ed_left mov edx,ed_offset add ebx,2 shl ebx,16 add ebx,ed_top mov ecx,ed_text_color add ebx,4 add edx,ed_text mcall ret ;---------------------------------------------------------- ;--- ¯à®æ¥¤ãà ¯à®à¨á®¢ª¨ ä® ---------------------------- ;¢å®¤ë¥ ¤ ë¥ ;eax ;edx - color ;---------------------------------------------------------- ;¢å®¤ ⮫쪮 梥â edx .draw_bg: mov ebx,ed_left add ebx,1 mov edx,ed_color shl ebx,16 add ebx,ed_width sub ebx,1 .draw_bg_eax: mov ecx,ed_top mov eax,13 add ecx,1 shl ecx,16 add ecx,ed_height dec ecx mcall ret ;---------------------------------------------------------- ;--- ¯à®æ¥¤ãà ¯®«ãç¥¨ï ª®«¨ç¥á⢠ᨬ¢®«®¢ ¢ ⥪ã饩 é¨à¨¥ ª®¬¯®¥â ;---------------------------------------------------------- .get_n: mov eax,ed_width ;¯®«ã祬 è¨à¨ã ª®¬¯®¥â xor edx,edx ;१ã«ìâ â à ᯮ«®£ ¥âáï ¢ ¯ ॠedx:eax ¢ eax - ®áâ ⮪ sub eax,4 ;¢ëç⨬ 4 mov ebx,6 ;§ £à㧬¨ ¤¥«¨â¥«ì div ebx ;à §¬¤¥«¨¬ 6 ret ;---------------------------------------------------------- ;--- ¯à®æ¥¤ãà à¨á®¢ ¨ï ªãàá®à -------------------------- ;---------------------------------------------------------- ;¢å®¤ë¥ ebp- 梥â .clear_cursor: mov edx,ebp mov ebx,cl_curs_x mov ecx,cl_curs_y jmp .draw_curs .draw_cursor: mov edx,ed_text_color mov ebx,ed_pos mov ecx,ed_offset sub ebx,ecx lea ebx,[ebx*2+ebx] shl ebx,1 ;imul ebx,6 add ebx,ed_left mov ecx,ed_top inc ebx add ecx,2 mov ebp,ebx shl ebx,16 mov bx,bp mov ebp,ecx shl ecx,16 mov cx,bp add ecx,ed_height-4 mov cl_curs_x,ebx mov cl_curs_y,ecx .draw_curs: mcall 38 ret ;---------------------------------------------------------- ;--- ¯à®æ¥¤ãà à¨á®¢ ¨ï à ¬ª¨ ---------------------------- ;---------------------------------------------------------- .draw_border: ;--- 梥â à ¬ª¨ --- test word ed_flags,ed_focus mov edx,ed_focus_border_color jne @f mov edx,ed_blur_border_color @@: ;--- ᢥàåã --- mov eax,38 mov ebx,ed_left mov ecx,ebx shl ebx,16 mov bx,cx add ebx,ed_width mov ecx,ed_top mov esi,ecx shl ecx,16 mov cx,si mcall ;--- ᨧã --- mov esi,ecx add ecx,ed_height mov ebp,ecx shl ecx,16 mov cx,bp mcall ;--- á«¥¢ --- mov cx,si mov ebp,ebx sub ebx,ed_width mcall ;--- á¯à ¢ --- mov ebx,ebp shl ebx,16 mov bx,bp mcall ret ;---------------------------------------------------------- ;--- ¯à®¢¥àª , § 襫 «¨ ªãàá®à § £à ¨æë ¨, ¥á«¨ ¤®, --- ;--- ¨§¬¥ï¥¬ ᬥ饨¥ ------------------------------------ ;--- ¥á«¨ ᬥ饨¥ ¡ë«® ãáâ ®¢ª ä« £ ed_offset_cl ¨ ç¥ ; ¥á«¨ ¨ç¥£® ¥ ¨§¬¥¨«®áì â® ¢ëáâ ¢«¥¨¥ ed_offset_fl ; ¢ ®¡é¥© ¡¨â®¢®© ¬ àà¨æ¥ á®áâ®ï¨ï ª®¬¯®¥â®¢ word ed_flags ;---------------------------------------------------------- .check_offset: pusha mov ecx,ed_pos mov ebx,ed_offset cmp ebx,ecx ja .sub_8 push ebx call .get_n ;¯®«ã稬 ª®«-¢® ᨬ¢®«®¢ ¢ ¯ ॠॣ¨áâ஢ edx:eax pop ebx mov edx,ebx add edx,eax ;ed_offset+width editbox inc edx ;¥®¡å®¤¨¬® ¤«ï ®¬ «ì®£® ¯®«®¦¥¨ï ªãàá®à ¢ ªà ©¥© «¥¢®© ¯®§¨æ¨¨ cmp edx,ecx ja @f mov edx,ed_size cmp edx,ecx je .add_end sub edx,ecx cmp edx,8 jbe .add_8 add ebx,8 jmp .chk_d .sub_8: cmp ecx,0 je .sub_min cmp ebx,8 jbe .sub_min sub ebx,8 ;ebx=ed_offset jmp .chk_d .sub_min: xor ebx,ebx jmp .chk_d .add_end:sub edx,eax mov ebx,edx jmp .chk_d .add_8: add ebx,edx .chk_d: mov ed_offset,ebx call .draw_bg and word ed_flags,ed_offset_cl edit_ex @@: or word ed_flags,ed_offset_fl edit_ex } macro use_key_func { ;Ž¡à ¡®âª Shift ¤«ï áïâ¨ï ¢ë¤¥«¥¨ï ¥¨§¢¥á⮩ ®¡« á⨠.shift: ;;;;;;;SHIFT test word ed_flags,ed_shift je .f_exit @@: mov ebp,shift_color or word ed_flags,ed_shift_bac ;ãáâ ®¢ª ä« £ , ¢ë¤¥«¥®© ®¡« á⨠mov ebx,dword ed_shift_pos call .sh_cl_ jmp .draw_cursor_text ;;;;;;;;;;;;;;;;;;;;; .f_exit:call .check_offset and word ed_flags,ed_shift_cl call .enable_null jmp .draw_cursor_text .sh_cl_: ;;;;;;SHIFT end ;®¡à ¡®âª ®ç¨á⪨, ¯à¨ «¥¢®¬ - ¯à ¢®¬ ¤¢¨¦¥¨¨ ¢ë¤¥«¥¨ï ;¤«ï ®¡à ¡®âª¨ áïâ¨ï ¢ë¤¥«¥¨ï ;¢å®¤ë¥ ¯ à ¬¥âàë ebp=color ebx=ed_shift_pos mov eax,dword ed_pos cmp eax,ebx jae .sh_n push eax ;¬¥ì襥 ¢ eax push ebx ;¡®«ì襥 jmp .sh_n1 ;¥á«¨ ¨ ç¥ .sh_n: push ebx push eax .sh_n1: call .check_offset call .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 ;¡®«ì襥 pop eax ;¬¥ì襥 cmp eax,ecx ;áà ¢¥¨¥ á ¬¥ì襣® á offset. jae .f_f ;¥á«¨ ¡®«ìè¥ xor eax,eax cmp edx,ebx ;cà ¢¨¬ à §¬¥à w_off á ¡®«ì訬 jb @f sub ebx,ecx jmp .nxt_f @@: mov ebx,edx sub ebx,ecx jmp .nxt_f .f_f: sub eax,ecx cmp edx,ebx ;cà ¢¨¬ à §¬¥à w_off á ¡®«ì訬 jle @f sub ebx,ecx sub ebx,eax jmp .nxt_f @@: mov ebx,edx sub ebx,ecx sub ebx,eax .nxt_f: mov edx,ebx lea ebx,[eax*2+eax] shl ebx,1 add ebx,ed_left inc ebx shl ebx,16 lea ecx,[edx*2+edx] shl ecx,1 mov bx,cx inc ebx mov edx,ebp;shift_color call .draw_bg_eax @@: call .enable_null ret ;;;;;;;;;;;;;;;;;;;;; ;“áâ ®¢ª - áï⨥ ¢ë¤¥«¥¨ï ¢ ®¤¨ ᨬ¢®« ;;;;;;;;;;;;;;;;;;;;; .drw_sim: mov eax,dword ed_pos call .draw_rectangle ; à¨á®¢ âì ¯àאַ㣮«ì¨ª á § ¤ ë¬ æ¢¥â®¬ jmp @b ;;;;;;;;;;;;;;;;;;;;; ;”ãªæ¨ï ãáâ ®¢ª¨ ¢ë¤¥«¥¨ï ¯à¨ ¤¢¨¦¥¨ï ¢«¥¢® ¨ ¢¯à ¢® ¨ ¦ ⨨ shift ;‹®£¨ª : ;;;;;;;;;; .draw_wigwag: ;äãªæ¨ï ãáâ ®¢ª¨ ¯¥à¥¬¥ëå mov ebp,shift_color call .clear_cursor or word ed_flags,ed_shift_bac ;ãáâ ®¢ª ä« £ , ¢ë¤¥«¥®© ®¡« á⨠mov ebp,shift_color mov eax,dword ed_pos test word ed_flags,ed_left_fl jz .low jmp @f ;;;;;;;;;; ;”ãªæ¨ï 㤠«¥¨ï ¢ë¤¥«¥¨ï ¯à¨ ¤¢¨¦¥¨ï ¢«¥¢® ¨ ¢¯à ¢® ¨ ¦ ⨨ shift ;‹®£¨ª : ;;;;;;;;;; .draw_wigwag_cl: ;äãªæ¨ï ãáâ ®¢ª¨ ¯¥à¥¬¥ëå mov ebp,ed_color call .clear_cursor mov ebp,ed_color mov eax,dword ed_pos test word ed_flags,ed_left_fl jz .low @@: call .draw_rectangle ; à¨á®¢ âì ¯àאַ㣮«ì¨ª § ªà 訢 ¥¬®© ®¡« á⨠ret .low: dec eax jmp @b ;¢å®¤®© ¯ à ¬¥âà ebx - ed_pos .sh_first_sh: test word ed_flags,ed_shift je @f mov dword ed_shift_pos_old,ebx test word ed_flags,ed_shift_on jne @f mov dword ed_shift_pos,ebx or word ed_flags,ed_shift_on @@: ret ;Ž¡à ¡®âª ªà ©¨å ¯®«®¦¥¨© ¢ editbox ¯à¨ ¦ ⮬ shift ;¯à®¨§¢®¤¨â áï⨥ ¢ë¤¥«¥¨¥, ¥á«¨ ¥â shift ;¨ ç¥ ¢®®¡é¥ ¢ë室¨â .sh_st_of: test word ed_flags,ed_shift jne @f test word ed_flags,ed_shift_bac je @f mov ebp,ed_color mov ebx,dword ed_shift_pos call .sh_cl_ ;®ç¨á⪠¢ë¤¥«¥®£® äà £¬¥â and word ed_flags,ed_shift_cl ; ®ç¨á⪠®â ⮣® çâ® ã¡à «¨ ¢ë¤¥«¥¨¥ jmp .draw_cursor_text @@: and word ed_flags,ed_shift_off edit_ex ;¯à®¢¥àª á®áâ®ï¨ï shift ¡ë« «¨ ® ¦ â à ìè¥? .sh_enable: test word ed_flags,ed_shift jne .sh_ext_en ; à¨á®¢ âì § ªà è¥ë© ¯àאַ㣮«ì¨ª test word ed_flags,ed_shift_bac je @f call .check_offset mov ebp,ed_color mov ebx,dword ed_shift_pos call .sh_cl_ ;®ç¨á⪠¢ë¤¥«¥®£® äà £¬¥â call .draw_wigwag_cl and word ed_flags,ed_shift_cl ; 1¢ à ¥ 㦮 ret @@: mov ebp,ed_color call .clear_cursor call .check_offset ret .sh_ext_en: call .check_offset test word ed_flags,ed_offset_fl je @f ;¨á®¢ ¨¥ § ªà è¥ëå ¯àאַ㣮«ì¨ª®¢ ¨ ®ç¨á⪠¨å mov eax,dword ed_shift_pos mov ebx,dword ed_pos mov ecx,dword ed_shift_pos_old ;¯à®¢¥àª ¨ à¨á®¢ ¨¥ § ªà è¥ëå ®¡« á⥩ cmp eax,ecx je .1_shem jb .smaller cmp ecx,ebx ja .1_shem call .draw_wigwag_cl ;clear jmp .sh_e_end .smaller: cmp ecx,ebx jb .1_shem call .draw_wigwag_cl ;clear jmp .sh_e_end ;alike = .1_shem: call .draw_wigwag .sh_e_end: and word ed_flags,ed_shift_off ret @@: mov ebp,shift_color mov ebx,dword ed_shift_pos call .sh_cl_ jmp .sh_e_end ;äãªæ¨ï ¤«ï ®¡à ¡®âª¨ shift ¯à¨ ¦ ⨨ home and end .sh_home_end: mov ebp,ed_color call .clear_cursor test word ed_flags,ed_shift_bac je @f mov ebp,ed_color mov ebx,dword ed_shift_pos_old call .sh_cl_ @@: test word ed_flags,ed_shift je .sh_exit_ ;¢ë©â¨ mov ebp,shift_color mov ebx,dword ed_shift_pos call .sh_cl_ or word ed_flags,ed_shift_bac ;ãáâ ®¢ª ä« £ , ¢ë¤¥«¥®© ®¡« á⨠jmp .sh_e_end .sh_exit_: call .check_offset ret ;äãªæ¨ï ¢¥á¥¨ï 0 ¯® ¤à¥áã ed_size+1 .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 edit_ex ;- 㤠«¥¨¥ ᨬ¢®« ;‚å®¤ë¥ ¤ ë¥ edx=ed_size;ecx=ed_pos .del_char: mov esi,ed_text test word ed_flags,ed_shift_on je @f mov eax,dword ed_shift_pos mov ebx,esi cmp eax,ecx jae .dh_n mov ed_pos,eax ;çâ® ¡ë ¥ ¡ë«® ã¡¥£ ¨ï ªãàá®à mov ebp,ecx sub ebp,eax add ebx,eax ;eax ¬¥ìè¥ sub edx,ecx add esi,ecx mov dword ed_shift_pos,ebp jmp .del_ch_sh ;¥á«¨ ¨ ç¥ .dh_n: mov ebp,eax sub ebp,ecx add ebx,ecx sub edx,eax add esi,eax mov dword ed_shift_pos,ebp jmp .del_ch_sh @@: add esi,ecx ;㪠§ ⥫ì + ᬥ饨¥ ª ॠ«ì®¬ã ¡ãää¥àã mov ebx,esi inc esi cld sub edx,ecx .del_ch_sh: push edi mov edi,ebx @@: lodsb stosb dec edx jns @b pop edi ret ;¢ëç¨á«¨âì § ªà 訢 ¥¬ãî ®¡« áâì ;ᮣ« 襨¥ ¢ ebp - ¯¥à¥¤ ¥âáï ed_size .clear_bg: call .get_n ;¯®«ãç¨âì à §¬¥à ¢ ᨬ¢®« å è¨à¨ë ª®¬¯®¥â 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 .nxt @@: mov ebx,ed_pos push ebx sub eax,ebx mov ebx,eax ;It is don't optimal pop eax ;ed_pos mov ecx,ed_offset sub eax,ecx .nxt: mov ebp,eax ;¯à®¢¥àª ¢ë室 § ªà 訢 ¥¬®© ®¡« á⨠§ ¯à¥¤¥«ë ¤«¨ë add ebp,ebx pop edx cmp ebp,edx je @f inc ebx @@: mov edx,ebx lea ebx,[eax*2+eax] shl ebx,1 add ebx,ed_left inc ebx shl ebx,16 lea ecx,[edx*2+edx] shl ecx,1 mov bx,cx mov edx,ed_color call .draw_bg_eax ret ;;;;;;;;;;;;;;;;;;; ;;; Ž¡à ¡®âª ¯à¨¬¨â¨¢®¢ ;;;;;;;;;;;;;;;;;;;; ; à¨á®¢ âì ¯àאַ㣮«ì¨ª, 梥⠯¥à¥¤ ¥âáï ¢ ebp ;¢å®¤ë¥ ¯ à ¬¥âàë: ;eax=dword ed_pos ;ebp=-梥â ed_color or shift_color .draw_rectangle: mov ecx,dword ed_offset sub eax,ecx lea ebx,[eax*2+eax] shl ebx,1 inc ebx add ebx,ed_left shl ebx,16 add ebx,6 mov edx,ebp call .draw_bg_eax ret ;;;;;;;;;;;;;;;;;; ;;஢¥àª ¦ â «¨ shift ;;;;;;;;;;;;;;;;;; .check_shift: pusha ;á®åà ¨¬ ¢á¥ ॣ¨áâàë mcall 66,3,1 test al,0x03 je @f or word ed_flags,ed_shift ;ãáâ ®¢¨¬ ä« £ @@:edit_ex } ;¬ ªà®á ª« ¢¨è ª®â®àë¥ ¯à®¨á室¨â ॠªæ¨ï macro use_key_process backspase,delete,left,right,home,end,insert { if backspase eq else cmp ah,8 jz .backspace end if if delete eq else cmp ah,0xb6 jz .delete end if if left eq else cmp ah,176 jz .left end if if right eq else cmp ah,179 jz .right end if if home eq else cmp ah,180 jz .home end if if home eq else cmp ah,181 jz .end end if if insert eq else cmp ah,185 ;insert jz .insert end if } macro use_key_no_process up,down,esc { if up eq else cmp ah,177 jz .editbox_exit end if if down eq else cmp ah,178 jz .editbox_exit end if if esc eq else cmp ah,27 ;ESC - ª« ¢¨è )) jz .editbox_exit end if } macro use_key_figures_only { test word ed_flags,ed_figure_only ; ⮫쪮 æ¨äàë ? jz @f cmp ah,'0' jb .editbox_exit cmp ah,'9' ja .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 arrea mov ebp,ed_color mov ebx,dword ed_shift_pos call .sh_cl_ mov ebp,ed_size call .clear_bg ;;;;;;;;;;;;;;;;;;;;; popa call .del_char ;;;; mov eax,dword ed_shift_pos mov ebx,ed_size sub ebx,eax 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 .editbox_exit @@: mov ebx, ed_pos cmp ebx,edx jl @f ; ¥á«¨ ¬¥ìè¥ ¨«¨ à ¢® jmp .editbox_exit @@: ; ᤢ¨£ ¥¬ ᨬ¢®«ë ¯®á«¥ ªãàá®à ¢¯à ¢® mov ecx,ed_size push edi eax mov ebp,edi mov esi,ed_text ; “ª § â¥«ì ¡ãä¥à ;㤥¬ à ¡®â âì á® áâப®© add esi,ecx ;add ed_size ¤®¡ ¢¨¬ max size mov edi,esi cmp ecx,ebx ;…᫨ ã á ¯®§¨æ¨ï ªãàá®à = ⥪ã饬ã à §¬¥àã ¯¥ç â ëå ᨬ¢®«®¢ â.¥. ªãàá®à á⮨⠢ ª®æ¥ je .In_k test word [ebp+40],ed_insert ;IF insert is enable â.ª. edi ¨§¬¥¥ ¤à¥á㥬 ç¥à¥§ ebp jne .ins_v ;clear pusha mov edi,ebp mov ebp,ed_size call .clear_bg popa sub ecx,ebx ; ©¤¥¬ ª®«-¢® ᨬ¢®«®¢ ¤«ï ¯¥à¥¤¢¨¦¥¨ï. inc edi ;‘¬¥á⨬ è¨ á¨¬¢®«ë ¢ ¯à ¢® std inc ecx @@: ;-------- lodsb stosb ;-------- loop @b .In_k: cld pop eax mov al,ah stosb pop edi ; ¢áâ ¢«ï¥¬ ª®¤ ª« ¢¨è¨ â㤠, £¤¥ ªãàá®à ; 㢥«¨ç¨¢ ¥¬ § 票¥ à §¬¥à ¨ ¯®§¨æ¨¨ inc dword ed_size inc dword ed_pos call .draw_all2 jmp .shift } macro use_work_key { .insert: test word ed_flags,ed_insert ;not word ed_insert je @f and word ed_flags,ed_insert_cl jmp .editbox_exit @@: or word ed_flags,ed_insert jmp .editbox_exit .ins_v: dec dword [ebp+42];ed_size ;processing is insert sub esi,ecx add esi,ebx mov edi,esi ;clear pusha mov edi,ebp mov ebp,ed_pos call .clear_bg popa jmp .In_k ;;;;;;;;;;;;;;;;;;;;;;;;;;;; .delete: mov edx,ed_size mov ecx,ed_pos cmp edx,ecx jg .bac_del test word ed_flags,ed_shift_on jne .del_bac edit_ex .bac_del: call .del_char jmp .draw_all ;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;--- ¦ â ª« ¢¨è backspace --- .backspace: ; ¯à®¢¥à塞, ªãàá®à ã «¥¢®£® ªà ï ? mov ecx,ed_pos test ecx,ecx jnz .del_bac test word ed_flags,ed_shift_on jne .bac_del edit_ex .del_bac: mov edx,ed_size cmp edx,ecx ;if ed_pos=ed_size je @f dec ecx call .del_char @@: test word ed_flags,ed_shift_on jne .bac_del dec dword ed_pos .draw_all: push .shift;.draw_cursor_text;eax test word ed_flags,ed_shift_on je @f mov eax,dword ed_shift_pos mov ebx,ed_size sub ebx,eax mov ed_size,ebx mov ebp,ed_color call .clear_cursor call .check_offset call .draw_bg ret @@: dec dword ed_size .draw_all2: and word ed_flags,ed_shift_cl mov ebp,ed_color call .clear_cursor call .check_offset mov ebp,ed_size call .clear_bg ret ;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;--- ¦ â ª« ¢¨è left --- .left: mov ebx,ed_pos test ebx,ebx jz .sh_st_of or word ed_flags,ed_left_fl call .sh_first_sh dec dword ed_pos call .sh_enable jmp .draw_cursor_text ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;--- ¦ â ª« ¢¨è right --- .right: mov ebx,ed_pos cmp ebx,ed_size je .sh_st_of and word ed_flags,ed_right_fl call .sh_first_sh inc dword ed_pos call .sh_enable jmp .draw_cursor_text ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; .home: mov ebx,ed_pos test ebx,ebx jz .sh_st_of call .sh_first_sh xor eax,eax mov ed_pos,eax call .sh_home_end jmp .draw_cursor_text ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; .end: mov ebx,ed_pos cmp ebx,dword ed_size je .sh_st_of call .sh_first_sh mov eax,ed_size mov ed_pos,eax call .sh_home_end jmp .draw_cursor_text } macro use_mouse_func scr_w { ;---------------------------------------------------------- ;--- Ž¡à ¡®âª .mouse_wigwag ;---------------------------------------------------------- .mouse_wigwag: shr eax,16 or word ed_flags,ed_shift_bac+ed_shift_on+ed_shift ;;;;;;;;;;;;;;;;;; ;;¯à®æ¥¤ãà ®¡à ¡®âª¨ ¯®«®¦¥¨ï ¢ë¤¥«¥®£® ⥪áâ , ª®£¤ ¯à®¨á室¨â ¢ë室 § ¯à¥¤¥«ë editbox ;;;;;;;;;;;;;;;;;; mov ebx,[procinfo.box.left] add ebx,ed_left if scr_w eq else add ebx,dword scr_w end if cmp eax,ebx jb .mleft add ebx,ed_width cmp eax,ebx ja .mright sub ebx,ed_width xor edx,edx sub eax,ebx ; ¢ëç⨬ ¨§ ª®®à¤¨ â ¬ë誨 ¯® ®á¨ å ª®®à¤¨ âë ¤® editbox ¯® ®á¨ å mov ebx,6 div ebx ;;;;;;;;;;;;;;;;;; ;;¯à®æ¥¤ãà ®¡à ¡®âª¨ ¯®«®¦¥¨ï ¢ë¤¥«¥®£® ⥪áâ , ¢ ¯à¥¤¥« å ®¡« á⨠editbox ;;;;;;;;;;;;;;;;;; ;®«ã稫¨ ª®®à¤¨ âë ¢ eax ¬ë誨, â.¥. ªã¤ ® ¯¥à¥¬¥á⨫ áì ;¨á®¢ ¨¥ § ªà è¥ëå ¯àאַ㣮«ì¨ª®¢ ¨ ®ç¨á⪠¨å add eax,ed_offset ;¤®¡ ¢¨¬ ᬥ饨¥ cmp eax,dword ed_size ;¥á«¨ ¢ë諨 § ¯à¥¤¥«ë, â® ¨ç¥£® ¥ ¤¥« âì ja .mwigvag .mdraw: mov dword ed_pos,eax ;á®åà ¨¬ ®¢®¥ § 票¥ ;¨á®¢ ¨¥ § ªà è¥ëå ¯àאַ㣮«ì¨ª®¢ ¨ ®ç¨á⪠¨å mov ecx,dword ed_shift_pos mov ebx,dword ed_shift_pos_old mov dword ed_shift_pos_old,eax ;¢¥á¥¬ ®¢®¥ § 票¥ áâ ன ¯®§¨æ¨¨ ªãàá®à ;¯à®¢¥àª ¨ à¨á®¢ ¨¥ § ªà è¥ëå ®¡« á⥩ cmp ecx,ebx ;¢ëïá塞 ªã¤ ¡ë«® ¤¢¨¦¥¨¥ ®¤¨ è £ § ¤ je .m1_shem ;¤¢¨¦¥¨ï ¥ ¡ë«® à ¥¥ jb .msmaller ;¤¢¨¦¥¨¥ ¡ë«® -> cmp ebx,eax ;¤¢¨¦¥¨¥ ¡ë«® ¤® í⮣® <- ¨ âãâ ¬ë ¯à®¢¥à塞 ᥩç á ªã¤ ¤¢¨¦¥¨¥ ¯à®¨á室¨â ja .m1_shem ;¥á«¨ ¡ë«® ¤¢¨¦¥¨¥ <- ⮠㦮 § ªà á¨âì ®¡« áâì je .mwigvag ;¥á«¨ ¨§¬¥¥¨ï ¥ ¡ë«®, â® ¨ç¥£® ¥ ¤¥« âì mov ebp,ed_color ;âãâ 㦮 ®ç¨áâ¨âì ®¡« áâì c ed_pos ed_shift_pos_old ;¢å®¤ë¥ ¯ à ¬¥âàë ebp=color ebx=ed_shift_pos call .sh_cl_ jmp .mwigvag .msmaller: cmp ebx,eax jb .m1_shem mov ebp,ed_color ;¢å®¤ë¥ ¯ à ¬¥âàë ebp=color ebx=ed_shift_pos call .sh_cl_ jmp .mwigvag ;alike = .m1_shem: mov ebp,shift_color ;¢å®¤ë¥ ¯ à ¬¥âàë ebp=color ebx=ed_shift_pos mov ebx,ecx call .sh_cl_ jmp .mwigvag .mwigvag: and word ed_flags,ed_shift_mcl jmp .draw_cursor_text ; popa ; ret .mleft: mov eax,ed_pos cmp eax,0 jbe .mwigvag dec eax call .check_offset push eax mov ebx,ed_shift_pos mov ebp,shift_color call .sh_cl_ pop eax jmp .mdraw .mright: mov eax,ed_pos mov ebx,ed_size cmp eax,ebx jae .mwigvag inc eax call .check_offset mov ebx,ed_shift_pos mov ebp,shift_color push eax call .sh_cl_ pop eax jmp .mdraw } macro use_work_mause scr_h,scr_w ;---------------------------------------------------------- ;--- € ¥ 㤥ন¢ ¥¬ «¨ ¬ë ª« ¢¨èã ¬ë誨, ¯¥à¥¬¥é ï ªãàá®à, ¢® ¢á¥ à §ë¥ áâ®à®ë? ;---------------------------------------------------------- { test word ed_flags,ed_mouse_on jne .mouse_wigwag ;---------------------------------------------------------- ;--- ¯à®¢¥à塞, ¯®¯ ¤ ¥â «¨ ªãàá®à ¢ edit box ------------- ;---------------------------------------------------------- mov ebx,[procinfo.box.top] add ebx,ed_top if scr_h eq else add ebx,scr_h end if cmp ax,bx jl ._blur;.mouse_end_no_focus add ebx,ed_height cmp ax,bx jg ._blur;.mouse_end_no_focus shr eax,16 mov ebx,[procinfo.box.left] add ebx,ed_left if scr_w eq else add ebx,scr_w end if cmp ax,bx jl ._blur;.mouse_end_no_focus add ebx,ed_width cmp ax,bx jg ._blur;.mouse_end_no_focus ;--- ¨§¬¥ï¥¬ ¯®§¨æ¨î ªãàá®à --- push eax mov ebp,ed_color call .clear_cursor pop eax ._mvpos: mov ebx,dword [procinfo.box.left] xor edx,edx sub eax,ed_left sub eax,ebx if scr_w eq else add ebx,scr_w sub eax,2 end if mov ebx,6 div bx add eax,ed_offset cmp eax,ed_size jna ._mshift mov eax,ed_size ._mshift: ;;;;;;; ;;‘¥ªæ¨ï ®¡à ¡®âª¨ shift ¨ ¢ë¤¥«¥¨ï ¯® shift ;;;;;;; test word ed_flags,ed_shift_bac je @f mov ebp,dword ed_color mov ebx,dword ed_shift_pos push eax call .sh_cl_ and word ed_flags,ed_shift_bac_cl pop eax @@: test word ed_flags,ed_mouse_on jne @f mov dword ed_shift_pos,eax or word ed_flags,ed_mouse_on mov dword ed_pos,eax mov dword [mouse_flag],edi ;ãáâ ®¢¨¬ ¨¤¥â¨ä¨ª â®à bts word ed_flags,1 ;ãáâ ®¢ª 䮪ãá jmp .m_sh @@: cmp eax,dword ed_shift_pos ;¥á«¨ ¯®§¨æ¨¨ ¥ ¨§¬¥¨«¨áì je .editbox_exit mov ed_pos,eax mov ebp,dword shift_color mov ebx,dword ed_shift_pos call .sh_cl_ or word ed_flags,ed_mous_adn_b ;ãáâ ®¢¨¬ ¡¨â çâ® ¬ë ¢ë¤¥«¨«¨ +shift_on + .m_sh: call .draw_text call .draw_cursor ;---------------------------------------------------------- ;--- ¯à®æ¥¤ãà ãáâ ®¢ª¨ 䮪ãá --------------------------- ;---------------------------------------------------------- jmp .drc ._blur: test word ed_flags,ed_always_focus jne .editbox_exit btr word ed_flags,1 ; ¥á«¨ ¥ ¢ 䮪ãá¥, ¢ë室¨¬ jnc .editbox_exit mov ebp,ed_color call .clear_cursor .drc: call .draw_border jmp .editbox_exit } ; Œ ªà®á ¢ë室 macro edit_ex { popa ret } macro debug { ;----------- ®â« ¤ª pushad ; mov dword [ed_buffer.2],0 ; mov eax,edi mov eax,dword [ed_buffer.2] mov edi,ed_buffer.3 call .str ;à¨á®¢ ¨¥ ä® mov eax,13 mov ebx,178*65536+70 mov ecx,28*65536+10 xor edx,edx int 0x40 ;¢ë¢®¤ § 票ï íªà mov eax,4 mov ebx,180*65536+30 mov ecx,0x10DDBBCC mov edx,ed_buffer.3 mov esi,8 int 0x40 popad ;----------- ®â« ¤ª } macro debug_func { .str: mov ecx,0x0a ;§ ¤ ¥âáï á¨á⥬ áç¨á«¥¨ï ¨§¬¥ïîâáï ॣ¨áâàë ebx,eax,ecx,edx ¢å®¤ë¥ ¯ à ¬¥âàë eax - ç¨á«® ;¯à¥à¥¢®¤ ç¨á« ¢ ASCII áâப㠢§®¤ë¥ ¤ ë¥ ecx=á¨á⥬ áç¨á«¥ï edi ¤à¥á ªã¤ § ¯¨áë¢ âì, ¡ã¤¥¬ áâபã, ¯à¨ç¥¬ ª®¥æ ¯¥à¥¬¥®© cmp eax,ecx ;áà ¢¨âì ¥á«¨ ¢ eax ¬¥ìè¥ ç¥¬ ¢ ecx â® ¯¥à¥©â¨ @@-1 â.¥. pop eax jb @f xor edx,edx ;®ç¨áâ¨âì edx div ecx ;à §¤¥«¨âì - ®áâ ⮪ ¢ edx push edx ;¯®«®¦¨âì ¢ á⥪ ;dec edi ;ᬥ饨¥ ¥®¡å®¤¨¬®¥ ¤«ï § ¯¨á¨ á ª®æ áâப¨ call .str;¯¥à¥©â¨ á ¬ã ᥡï â.¥. ¢ë§¢ âì á ¬ã á¥¡ï ¨ â ª ¤® ⮣® ¬®¬¥â ¯®ª ¢ eax ¥ á⠥⠬¥ìè¥ ç¥¬ ¢ ecx pop eax @@: ;cmp al,10 ;¯à®¢¥à¨âì ¥ ¬¥ìè¥ «¨ § 票¥ ¢ al 祬 10 (¤«ï á¨á⥬ë áç¨á«¥ï 10 ¤ ï ª®¬ ¤ - «¨è ï)) ;sbb al,$69 ;- ç¥áâ® ¤ ï ¨áâàãªæ¨ï ¬¥ï § áâ ¢«ï¥â § ¤ã¬ âìáï â.¥. ï ¥ § î ª ª íâ® à ¡®â ¥â ;das ;¯®á«¥ ¤ ®© ª®¬ ¤ë ª ª ¡ë ¯à®¨á室¨â 㬥ì襨¥ al 66h (¢ ª¨£¥ ¯¨á ® ¤à㣮¥) or al,0x30 ;¤ ï ª®¬ ¤ ª®à®ç¥ 祬 ¤¢¥ ¢ëè¥ stosb ;§ ¯¨á âì í«¥¬¥â ¨§ ॣ¨áâà al ¢ ï祪㠯 ¬ï⨠es:edi ret ;¢¥àãâìáï ç¥ì ¨â¥à¥áë© å®¤ â.ª. ¯®ª ¢ á⥪¥ åà ¨âìáï ª®«-¢® ¢ë§®¢®¢ â® á⮫쪮 à § ¬ë ¨ ¡ã¤¥¬ ¢ë§ë¢ âìáï } ;;;;;;;;;;;;;;; ;For LibGui ;;;;;;;;;;;;;;; macro srt_ed_libgui { ed_width equ [EditBox.ed_width] ;è¨à¨ ª®¬¯®¥â ed_left equ [EditBox.ed_left] ;¯®«®¦¥¨¥ ¯® ®á¨ å ed_top equ [EditBox.ed_top] ;¯®«®¦¥¨¥ ¯® ®á¨ ã ed_color equ [EditBox.ed_color] ;梥â ä® ª®¬¯®¥â shift_color equ [EditBox.shift_color] ;=0x6a9480 ed_focus_border_color equ [EditBox.ed_focus_border_color] ;梥â à ¬ª¨ ª®¬¯®¥â ed_blur_border_color equ [EditBox.ed_blur_border_color] ;梥⠥ ªâ¨¢®£® ª®¬¯®¥â ed_text_color equ [EditBox.ed_text_color] ;梥â ⥪áâ ed_max equ [EditBox.ed_max] ;ª®«-¢® ᨬ¢®«®¢ ª®â®àë¥ ¬®¦® ¬ ªá¨¬ «ì® ¢¢¥á⨠ed_text equ [EditBox.ed_text] ;㪠§ â¥«ì ¡ãä¥à ed_flags equ [EditBox.ed_flags] ;ä« £¨ ed_size equ [EditBox.ed_size] ;ª®«-¢® ᨬ¢®«®¢ ed_pos equ [EditBox.ed_poz] ;¯®§¨æ¨ï ªãàá®à ed_offset equ [EditBox.ed_offset] ;ᬥ饨¥ cl_curs_x equ [EditBox.cl_curs_x] ;¯à¥¤ë¤ã饥 ª®®à¤¨ â ªãàá®à ¯® å cl_curs_y equ [EditBox.cl_curs_y] ;¯à¥¤ë¤ã饥 ª®®à¤¨ â ªãàá®à ¯® ã ed_shift_pos equ [EditBox.ed_shift_pos] ;¯®«®¦¥¨¥ ªãàá®à ed_shift_pos_old equ [EditBox.ed_shift_pos_old] ;áâ ஥ ¯®«®¦¥¨¥ ªãàá®à ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Bit mask from editbox ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ed_figure_only= 1000000000000000b ;®¤¨ ᨬ¢®«ë ed_always_focus= 100000000000000b ed_focus= 10b ;䮪ãá ¯à¨«®¦¥¨ï ed_shift_on= 1000b ;¥á«¨ ¥ ãáâ ®¢«¥ -§ ç¨â ¢¯¥à¢ë¥ ¦ â shift,¥á«¨ ¡ë« ãáâ ®¢«¥, § ç¨â ¬ë 㦥 çâ® - â® ¤¥« «¨ 㤥ন¢ ï shift ed_shift_on_off=1111111111110111b ed_shift= 100b ;¢ª«îç ¥âáï ¯à¨ ¦ ⨨ shift â.¥. ¥á«¨ ¦¨¬ î ed_shift_off= 1111111111111011b ed_shift_bac= 10000b ;¡¨â ¤«ï ®ç¨á⪨ ¢ë¤¥«¥®£® shift â.¥. ¯à¨ ãáâ ®¢ª¥ £®¢®à¨â çâ® ¥áâì ¢ë¤¥«¥¨¥ ed_shift_bac_cl=1111111111101111b ;®ç¨á⪠¯à¨ 㤠«¥¨¨ ¢ë¤¥«¥¨ï ed_shift_cl= 1111111111100011b ed_shift_mcl= 1111111111111011b ed_left_fl= 100000b ed_right_fl= 1111111111011111b ed_offset_fl= 1000000b ed_offset_cl= 1111111110111111b ed_insert= 10000000b ed_insert_cl= 1111111101111111b ed_mouse_on = 100000000b ed_mous_adn_b= 100011000b ed_mouse_on_off=1111111011111111b ed_height=14 ; ¢ëá®â }