optimize and fix 't_edit'

git-svn-id: svn://kolibrios.org@6086 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
IgorA 2016-01-20 18:34:38 +00:00
parent 643e9a0c92
commit 8a4f974d14
3 changed files with 272 additions and 281 deletions

View File

@ -1,6 +1,6 @@
; ¬ ªà®á ¤«ï á¨á⥬­®© ¡¨¡«¨®â¥ª¨ box_lib.obj
; í«¥¬¥­â TextEditor ¤«ï Kolibri OS
; ä ©« ¯®á«¥¤­¨© à § ¨§¬¥­ï«áï 28.06.2014 IgorA
; ä ©« ¯®á«¥¤­¨© à § ¨§¬¥­ï«áï 20.01.2016 IgorA
; ­  ª®¤ ¯à¨¬¥­¥­  GPL2 «¨æ¥­§¨ï
;input:
@ -2124,14 +2124,13 @@ ted_text_colored:
;description:
; ”ã­ªæ¨ï ¤«ï ¯®¨áª  ¨ ¢ë¤¥«¥­¨ï ¯®¤á¢¥ç¥­ëå á«®¢
align 4
proc ted_text_find_sel_color
proc ted_text_find_sel_color uses eax ebx ecx esi
locals
begPos dd ? ;­ ç «ì­ ï ¯®§¨æ¨ï
endPos dd ? ;ª®­¥ç­ ï ¯®§¨æ¨ï
find db ? ;­ ©¤¥­® / ­¥ ­ ©¤¥­®
f_color db ? ;¨­¤¥ªá æ¢¥â  ­ ©¤¥­®£® á«®¢ 
endl
push eax ebx ecx esi
;eax = word_n ⥪ã騩 ­®¬¥à (¯®§¨æ¨ï) ¯à®¢¥à塞®£® á«®¢  ¢ ᯨ᪥
;ebx = ¤«ï à §­ëå 楫¥©
;ecx = l_pos ¯®á«¥¤­¨© ­®¬¥à (¯®§¨æ¨ï) ¯®¤å®¤ï饣® á«®¢  ¢ ᯨ᪥
@ -2169,7 +2168,7 @@ endl
mov dword[begPos],edx ;bP=i;
mov esi,1
align 4
.wh_2b: ;while(1){
call ted_iterat_next
@ -2196,7 +2195,7 @@ endl
mov bl,byte[ebx+MAX_COLOR_WORD_LEN+7]
mov byte[f_color],bl ;f_color=Col[word_n].color;
mov byte[find],1
mov byte[find],1
ColToIndexOffset eax,ebx ;... ebx = Col[word_n]
mov bl,byte[ebx+MAX_COLOR_WORD_LEN+4]
cmp bl,0 ;if(Col[word_n].wwo)
@ -2211,6 +2210,7 @@ mov byte[find],1
call isalnum
jae .if_3e
mov byte[find],0
jmp .if_4e
.if_3e:
btr bx,3 ;4-1
@ -2222,7 +2222,7 @@ mov byte[find],1
.if_4e:
mov edx,dword[endPos]
; call ted_iterat_next
;call ted_iterat_next
btr bx,1 ;2-1
jae .if_5e ;if(Col[word_n].wwo&2)
@ -2230,6 +2230,7 @@ mov byte[find],1
call isalnum
jae .if_5e
mov byte[find],0
jmp .if_6e
.if_5e:
btr bx,4 ;5-1
@ -2252,7 +2253,7 @@ mov byte[find],1
pop edx
.if_2n:
; if(i!=1){ // ­¥ ª®­¥æ ¤®ªã¬¥­â 
;if(i!=1){ // ­¥ ª®­¥æ ¤®ªã¬¥­â 
; cont_s=tex[eP].c;
; if(Col[word_n].wwo&2) u2= !(isalnum(cont_s)||cont_s=='_'); // ­¥ ¡ãª¢.-ç¨á«. ᨬ¢®«
; if(u2 && Col[word_n].wwo&16) u2= !isalpha(cont_s); // ­¥ ç¨á«. ᨬ¢®«
@ -2292,13 +2293,13 @@ mov byte[find],1
cmp byte[find],1
jne .if_1e ;if(fnd){ // ¢ë¤¥«¥­¨¥ ­ ©¤¥­®£® ⥪áâ 
; if(!mode_sf1 || (mode_sf1 && strlen(Col[word_n].f1->c_str())>0)){
;if(!mode_sf1 || (mode_sf1 && strlen(Col[word_n].f1->c_str())>0)){
mov eax,dword[begPos]
mov bl,byte[f_color]
mov byte[eax+1],bl ;tex[bP].col=f_color;
mov eax,dword[endPos]
mov byte[eax+1],0xff ;tex[eP].col=255;
; return ItPoPerv(eP); // ¢®§¢à é ¥¬ ¯®§¨æ¨î ª®­æ  ¢å®¦¤¥­¨ï
;return ItPoPerv(eP); // ¢®§¢à é ¥¬ ¯®§¨æ¨î ª®­æ  ¢å®¦¤¥­¨ï
mov edx,dword[endPos]
call ted_get_text_perv_pos
jmp @f
@ -2306,7 +2307,6 @@ mov byte[find],1
mov edx,ted_tex
@@:
pop esi ecx ebx eax
ret
endp
@ -2315,43 +2315,41 @@ endp
;output:
; cf=1 if symbol is...
align 4
tab_all_num db 0,0,0,0,0,0,11111111b,11b,11111110b,0xff,0xff,111b,11111110b,0xff,0xff,111b,0,0,0,0,0,0,0,0;,0,0,0,0,0,0,0,0 - tab_alpha_0,0,0,0,0,0,0,0
tab_alpha db 0,0,0,0,0,0,0,0,11111110b,0xff,0xff,111b,11111110b,0xff,0xff,111b,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
tab_all_num db 0,0,0,0,0,0,0xff,11b,11111110b,0xff,0xff,10000111b,11111110b,0xff,0xff,111b,0,0,0,0,0,0,0,0;,0,0,0,0,0,0,0,0 - tab_alpha_0,0,0,0,0,0,0,0
tab_alpha db 0,0,0,0,0,0,0,0,11111110b,0xff,0xff,10000111b,11111110b,0xff,0xff,111b,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
;output:
; cf=1 ¥á«¨ ¢ [edx] ¡ãª¢ , æ¨äà  ¨«¨ '_'
align 4
isalnum:
push eax ebx
mov al,byte[edx] ;al=offset
shr al,3
and eax,11111b
movzx eax,byte[edx] ;al=offset
shr eax,3
lea ebx,[tab_all_num]
add ebx,eax
mov ah,byte[ebx]
mov al,byte[edx] ;al=bit
movzx ax,byte[edx] ;al=bit
and ax,111b
mov bx,word[ebx]
btr bx,ax
bt word[ebx],ax
pop ebx eax
ret
;output:
; cf=1 ¥á«¨ ¢ [edx] ¡ãª¢  ¨«¨ '_'
align 4
isalpha:
push eax ebx
mov al,byte[edx] ;al=offset
shr al,3
and eax,11111b
movzx eax,byte[edx] ;al=offset
shr eax,3
lea ebx,[tab_alpha]
add ebx,eax
mov ah,byte[ebx]
mov al,byte[edx] ;al=bit
movzx ax,byte[edx] ;al=bit
and ax,111b
mov bx,word[ebx]
btr bx,ax
bt word[ebx],ax
pop ebx eax
ret
align 4
proc ted_show_help_f1, edit:dword
push eax edx edi
proc ted_show_help_f1 uses eax edx edi, edit:dword
mov edi,dword[edit]
call ted_get_pos_by_cursor
@ -2369,7 +2367,6 @@ proc ted_show_help_f1, edit:dword
@@:
;call ted_draw_main_cursor
call ted_draw_help_f1
pop edi edx eax
ret
endp

View File

@ -43,7 +43,7 @@ ted_but_new_file:
call On_NewFile
.ret_f:
mov byte[openfile_path],0
mcall 71,1,hed
mcall SF_SET_CAPTION,1,hed
pop ebx eax
ret
@ -142,17 +142,25 @@ ted_but_open_file:
@@:
cmp [OpenDialog_data.status],1
jne .ret_f
stdcall auto_open_syntax,[OpenDialog_data.openfile_path]
stdcall [ted_open_file], tedit0,run_file_70,openfile_path
call ted_messages_after_open_file
.ret_f:
popad
ret
proc auto_open_syntax, of_path:dword
pushad
;¨é¥¬ ¥áâì «¨ ä ©« ¯®¤á¢¥âª¨ ¤«ï ®âªà뢠¥¬®£® ⥪á⮢®£® ä ©« 
mov esi,[OpenDialog_data.openfile_path]
mov esi,[of_path]
call strlen
mov edx,openfile_path
mov edx,[of_path]
add edx,eax
.f_beg:
cmp byte[edx],'.'
je .found
dec edx
cmp edx,openfile_path
cmp edx,[of_path]
jg .f_beg
.found:
inc edx ;edx - 㪠§ â¥«ì ­  à áè¨à¥­¨¥ ®âªàë⮣® ä ©« 
@ -169,17 +177,11 @@ ted_but_open_file:
jmp .end_0
.ok: ;®âªàë⨥ ä ©«  ¯®¤á¢¥âª¨ ¢ § ¢¨á¨¬®á⨠®â ­ ©¤¥­­®£® à áè¨à¥­¨ï
sub ebx,32
;mov ecx,ebx
;mcall 71,1
call open_unpac_synt_file
stdcall open_unpac_synt_file,ebx
.end_0:
stdcall [ted_open_file], tedit0,run_file_70,openfile_path
call ted_messages_after_open_file
.ret_f:
popad
popad
ret
endp
;description:
; äã­ªæ¨ï á®åà ­¥­¨ï ä ©«  á ¢ë§®¢®¬ ®ª­  ¤¨ «®£ 
@ -269,8 +271,7 @@ proc ted_but_open_syntax uses eax ebx ecx edi, edit:dword
jne @f
stdcall dword[tl_node_get_data], tree1
mov [fn_col_option],eax
mov ebx,eax
call open_unpac_synt_file
stdcall open_unpac_synt_file,eax
cmp ebx,-1
je @f
@ -282,13 +283,13 @@ endp
;®âªàë⨥ ¨ à á¯ ª®¢ª  ä ©«  ¯®¤á¢¥âª¨ ᨭ⠪á¨á 
;input:
; ebx - 㪠§ â¥«ì ­  ¨¬ï ®âªà뢠¥¬®£® ä ©«  ᨭ⠪á¨á  (¡¥§ ¯ã⨠¨ ¯ ¯ª¨ info)
; f_name - 㪠§ â¥«ì ­  ¨¬ï ®âªà뢠¥¬®£® ä ©«  ᨭ⠪á¨á  (¡¥§ ¯ã⨠¨ ¯ ¯ª¨ info)
;output:
; ebx - ç¨á«® ¯à®ç¨â ­­ëå ¡ ©â ¨§ ä ©« 
; ecx - à §àãè ¥âáï
align 4
open_unpac_synt_file:
push eax edi esi
proc open_unpac_synt_file uses eax edi esi, f_name:dword
mov ebx,[f_name]
mov edi,last_open_synt_file
stdcall strcmp,ebx,edi ;áà ¢­¨¢ ¥¬ ¨¬ï ¯®¤ª«î祭­®£® ä ©«  á ¯®¤ª«î祭­ë¬ à ­¥¥ ä ©«®¬
test eax,eax
@ -296,14 +297,14 @@ push eax edi esi
;ª®¯¨à㥬 ¨¬ï ¯®¤ª«î祭­®£® ä ©«  (¤«ï ¨§¡¥¦ ­¨ï ¯®¢â®à­ëå ¯®¤ª«î祭¨©)
mov esi,ebx
mov ecx,32
mov ecx,32/4
cld
rep movsb
rep movsd
copy_path ebx,fn_syntax_dir,syntax_path,0
copy_path syntax_path,sys_path,file_name,0
mov edi, tedit0
mov [run_file_70.Function], 0
mov [run_file_70.Function], SSF_READ_FILE
mov [run_file_70.Position], 0
mov [run_file_70.Flags], 0
mov ecx, ted_syntax_file_size
@ -311,7 +312,7 @@ push eax edi esi
m2m dword[run_file_70.Buffer], ted_syntax_file
mov byte[run_file_70+20], 0
mov [run_file_70.FileName], file_name
mcall 70, run_file_70
mcall SF_FILE, run_file_70
cmp ebx,-1
jne .end_0
call ted_on_init_synt_err
@ -337,8 +338,8 @@ push eax edi esi
.end_unpack:
stdcall [ted_init_syntax_file], tedit0
@@:
pop esi edi eax
ret
endp
;description:
; ¢ë§®¢/áªàë⨥ ¯ ­¥«¨ ¯®¨áª 
@ -403,7 +404,7 @@ but_find_key_w:
cmp byte[wnd_k_words_run],0
jne @f
pushad
mcall 51,1,prop_start,thread_coords
mcall SF_CREATE_THREAD,1,prop_start,thread_coords
popad
@@:
ret

View File

@ -3,11 +3,7 @@
use32
org 0x0
db 'MENUET01' ;¨¤¥­â¨ä. ¨á¯®«­ï¥¬®£® ä ©«  ¢á¥£¤  8 ¡ ©â
dd 0x01
dd start
dd i_end ; à §¬¥à ¯à¨«®¦¥­¨ï
dd mem
dd stacktop
dd 1, start, i_end, mem, stacktop
dd file_name ; command line
dd sys_path
@ -21,6 +17,7 @@ include '../../proc32.inc'
;include '../../config.inc'
include '../../macros.inc'
include '../../dll.inc'
include '../../KOSfuncs.inc'
include '../../develop/libraries/box_lib/load_lib.mac'
include '../../develop/libraries/box_lib/trunk/box_lib.mac'
include '../../system/desktop/trunk/kglobals.inc'
@ -59,14 +56,14 @@ macro load_image_file path,buf,size
stdcall mem.Alloc, dword size ;¢ë¤¥«ï¥¬ ¯ ¬ïâì ¤«ï ¨§®¡à ¦¥­¨ï
mov [buf],eax
mov [run_file_70.Function], 0
mov [run_file_70.Function], SSF_READ_FILE
mov [run_file_70.Position], 0
mov [run_file_70.Flags], 0
mov [run_file_70.Count], dword size
m2m [run_file_70.Buffer], eax
mov byte[run_file_70+20], 0
mov [run_file_70.FileName], file_name
mcall 70,run_file_70 ;§ £à㦠¥¬ ä ©« ¨§®¡à ¦¥­¨ï
mcall SF_FILE,run_file_70 ;§ £à㦠¥¬ ä ©« ¨§®¡à ¦¥­¨ï
cmp ebx,0xffffffff
je @f
;®¯à¥¤¥«ï¥¬ ¢¨¤ ¨§®¡à ¦¥­¨ï ¨ ¯¥à¥¢®¤¨¬ ¥£® ¢® ¢à¥¬¥­­ë© ¡ãä¥à image_data
@ -84,14 +81,14 @@ icon_tl_sys dd 0 ;㪠
align 4
start:
mcall 48,3,sc,sizeof.sys_colors_new
mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.sys_colors_new
mcall 68,11
mcall SF_SYS_MISC,SSF_HEAP_INIT
or eax,eax
jz button.exit
mcall 66,1,1 ;scan code
mcall 40,0xC0000027
mcall SF_KEYBOARD,SSF_SET_INPUT_MODE,1 ;scan code
mcall SF_SET_EVENTS_MASK,0xC0000027
mov esi,file_name
call strlen
@ -107,7 +104,7 @@ mov ebp,lib0
.test_lib_open:
cmp dword [ebp+ll_struc_size-4],0
jz @f
mcall -1 ;exit not correct
mcall SF_TERMINATE_PROCESS ;exit not correct
@@:
add ebp,ll_struc_size
cmp ebp,load_lib_end
@ -209,7 +206,7 @@ mov ebp,lib0
mov dword[tree1.data_img],eax
;------------------------------------------------------------------------------
copy_path fn_syntax_dir,sys_path,file_name,0 ;¡¥à¥¬ ¯ãâì ª ¯ ¯ª¥ á ä ©« ¬¨ ᨭ⠪á¨á 
mcall 70,tree_file_struct
mcall SF_FILE,tree_file_struct
cmp ebx,-1
je .end_dir_init
@ -272,13 +269,13 @@ mov ebp,lib0
@@:
;--- load color option file ---
mov ebx,dword[fn_col_option]
call open_unpac_synt_file
stdcall open_unpac_synt_file,[fn_col_option]
;--- get cmd line ---
cmp byte[openfile_path+3],0 ;openfile_path
je @f ;if file names exist
mov esi,openfile_path
stdcall auto_open_syntax,esi
call strlen ;eax=strlen
call but_no_msg_OpenFile
@@:
@ -291,7 +288,7 @@ red_win:
align 4
still:
mcall 10
mcall SF_WAIT_EVENT
cmp dword[exit_code],1
je button.exit
@ -309,28 +306,24 @@ still:
align 4
draw_window:
mcall 12,1
mcall SF_REDRAW,SSF_BEGIN_DRAW
mov edx,[sc.work]
or edx,0x73000000
mov edi,hed
mcall 0,dword[wnd_s_pos],dword[wnd_s_pos+4]
mcall SF_CREATE_WINDOW,dword[wnd_s_pos],dword[wnd_s_pos+4],,,hed
mcall 9,procinfo,-1
mcall SF_THREAD_INFO,procinfo,-1
mov edi,tedit0 ;§­ ç¥­¨¥ edi ­ã¦­® ¤«ï EvSize ¨ ted_wnd_t
call EvSize
movzx ebx,word[procinfo.client_box.width]
inc bx
mcall 13,,ted_wnd_t ;¢¥àå­¨© ¯àאַ㣮«ì­¨ª, ¤«ï ®ç¨á⪨ ¢¥àå­¥© ¯ ­¥«¨
mcall SF_DRAW_RECT,,ted_wnd_t ;¢¥àå­¨© ¯àאַ㣮«ì­¨ª, ¤«ï ®ç¨á⪨ ¢¥àå­¥© ¯ ­¥«¨
call draw_but_toolbar
stdcall [kmainmenu_draw], [main_menu]
stdcall [ted_draw], tedit0
mcall 12,2
mcall SF_REDRAW,SSF_END_DRAW
ret
align 4
@ -363,7 +356,7 @@ endp
align 4
key:
mcall 66,3 ;66.3 ¯®«ãç¨âì á®áâ®ï­¨¥ ã¯à ¢«ïîé¨å ª« ¢¨è
mcall SF_KEYBOARD,SSF_GET_CONTROL_KEYS ;66.3 ¯®«ãç¨âì á®áâ®ï­¨¥ ã¯à ¢«ïîé¨å ª« ¢¨è
xor esi,esi
mov ecx,1
test al,0x03 ;[Shift]
@ -385,8 +378,8 @@ key:
or esi,KM_NUMLOCK
@@:
mcall 26,2,,conv_tabl ;26.2 ¯®«ãç¨âì à áª« ¤ªã ª« ¢¨ âãàë
mcall 2 ;¯®«ãç ¥¬ ª®¤ ­ ¦ â®© ª« ¢¨è¨
mcall SF_SYSTEM_GET,SSF_KEYBOARD_LAYOUT,,conv_tabl ;26.2 ¯®«ãç¨âì à áª« ¤ªã ª« ¢¨ âãàë
mcall SF_GET_KEY
stdcall [tl_key], tree1
test word [edit2.flags],10b;ed_focus ; ¥á«¨ ­¥ ¢ 䮪ãá¥, ¢ë室¨¬
@ -415,7 +408,7 @@ key:
align 4
button:
mcall 17 ;¯®«ãç¨âì ª®¤ ­ ¦ â®© ª­®¯ª¨
mcall SF_GET_BUTTON
cmp ah,3
jne @f
call ted_but_new_file
@ -531,7 +524,7 @@ button:
stdcall [ted_delete], tedit0
stdcall [tl_data_clear], tree1
mcall -1 ;¢ë室 ¨§ ¯à®£à ¬¬ë
mcall SF_TERMINATE_PROCESS ;¢ë室 ¨§ ¯à®£à ¬¬ë
edit2 edit_box TED_PANEL_WIDTH-1, 0, 20, 0xffffff, 0xff80, 0xff0000, 0xff, 0x4080, 300, buf_find, mouse_dd, 0