Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 1456 → Rev 1457

/programs/develop/libraries/box_lib/trunk/bl_sys.mac
6,4 → 6,5
include 'menubar.mac' ;macro implements menubar
include 'filebrowser.mac' ;macro implements filebrowser
include 'tree_list.mac' ;macro implements tree_list, image_list, list_box
include 'pathshow.mac' ;macro implements pathshow
include 'pathshow.mac' ;macro implements pathshow
include 't_edit.mac' ;macro implements text_editor
/programs/develop/libraries/box_lib/trunk/box_lib.asm
16,6 → 16,7
 
section '.flat' code readable align 16
include '../../../../macros.inc'
include '../../../../proc32.inc'
include 'bl_sys.mac'
include 'box_lib.mac' ;macro which should make life easier :)
 
88,7 → 89,13
align 16
use_path_show
 
;--------------------------------------------------
;text editor
;--------------------------------------------------
align 16
use_text_edit
 
align 16
init:
ret
 
165,6 → 172,31
dd sz_PathShow_draw, path_show.draw
dd szVersion_path_show, 0x00010001
dd sz_ted_but_save_file, ted_but_save_file
dd sz_ted_but_sumb_upper, ted_but_sumb_upper
dd sz_ted_but_sumb_lover, ted_but_sumb_lover
dd sz_ted_can_save, ted_can_save
dd sz_ted_clear, ted_clear
dd sz_ted_delete, ted_delete
dd sz_ted_draw, ted_draw
dd sz_ted_init, ted_init
dd sz_ted_init_syntax_file, ted_init_syntax_file
dd sz_ted_is_select, ted_is_select
dd sz_ted_key, ted_key
dd sz_ted_mouse, ted_mouse
dd sz_ted_open_file, ted_open_file
dd sz_ted_text_add, ted_text_add
dd sz_ted_but_select_word, ted_but_select_word
dd sz_ted_but_cut, ted_but_cut
dd sz_ted_but_copy, ted_but_copy
dd sz_ted_but_paste, ted_but_paste
dd sz_ted_but_undo, ted_but_undo
dd sz_ted_but_redo, ted_but_redo
dd sz_ted_but_reverse, ted_but_reverse
dd sz_ted_but_find_next, ted_but_find_next
dd sz_ted_text_colored, ted_text_colored
dd sz_ted_version, 0x00000001
 
dd 0,0
 
 
235,3 → 267,28
sz_PathShow_prepare db 'PathShow_prepare',0
sz_PathShow_draw db 'PathShow_draw',0
szVersion_path_show db 'version_PathShow',0
 
sz_ted_but_save_file db 'ted_but_save_file',0
sz_ted_but_sumb_upper db 'ted_but_sumb_upper',0
sz_ted_but_sumb_lover db 'ted_but_sumb_lover',0
sz_ted_can_save db 'ted_can_save',0
sz_ted_clear db 'ted_clear',0
sz_ted_delete db 'ted_delete',0
sz_ted_draw db 'ted_draw',0
sz_ted_init db 'ted_init',0
sz_ted_init_syntax_file db 'ted_init_syntax_file',0
sz_ted_is_select db 'ted_is_select',0
sz_ted_key db 'ted_key',0
sz_ted_mouse db 'ted_mouse',0
sz_ted_open_file db 'ted_open_file',0
sz_ted_text_add db 'ted_text_add',0
sz_ted_but_select_word db 'ted_but_select_word',0
sz_ted_but_cut db 'ted_but_cut',0
sz_ted_but_copy db 'ted_but_copy',0
sz_ted_but_paste db 'ted_but_paste',0
sz_ted_but_undo db 'ted_but_undo',0
sz_ted_but_redo db 'ted_but_redo',0
sz_ted_but_reverse db 'ted_but_reverse',0
sz_ted_but_find_next db 'ted_but_find_next',0
sz_ted_text_colored db 'ted_text_colored',0
sz_ted_version db 'version_text_edit',0
/programs/develop/libraries/box_lib/trunk/box_lib.mac
168,6 → 168,10
.flags: dd flags+0 ; ä« £¨
}
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Basic macros for use TreeList ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
struc tree_list info_size,info_max_count,style, img_cx,img_cy,\
col_bkg,col_zag,col_txt, box_l,box_t,box_w,box_h, capt_cy,info_capt_offs,\
info_capt_len,el_focus, p_scrol,on_press {
201,10 → 205,6
.on_press dd on_press
}
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Basic macros for use TreeList ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
tl_info_size equ word[edi +4] ;à §¬¥à ¤ ­­ëå ¢ë¤¥«ï¥¬ëå ¤«ï ª ¦¤®£® 㧫  (¯®«ì§®¢ â¥«ìá쪨¥ ¤ ­­ë¥ + ⥪áâ ¤«ï ¯®¤¯¨á¨)
tl_info_max_count equ dword[edi+6] ;¬ ªá¨¬ «ì­®¥ ª®«¨ç¥á⢮ 㧫®¢, ª®â®àë¥ ¬®¦­® ¤®¡ ¢¨âì ¢ í«¥¬¥­â
tl_style equ dword[edi+10] ;á⨫¨ í«¥¬¥­â 
245,3 → 245,102
tl_err_load_info_size equ 100b ;­¥ ᮢ¯ ¤ ¥â à §¬¥à ¨­ä®à¬ æ¨®­­®© áâàãªâãàë ¯à¨ ®âªàë⨨
tl_load_mode_add equ 0x20000 ;®¯æ¨ï áç¨â뢠­¨ï ¢ ०¨¬¥ ¤®¡ ¢«¥­¨ï ¨­ä®à¬ æ¨¨
tl_save_load_heder_size equ 26 ;à §¬¥à § £®«®¢ª  ¤«ï § ¯¨á¨/ç⥭¨ï í«¥¬¥­â®¢
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Basic macros for use TextEditor ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
ted_wnd_l equ dword[edi+ 0] ;®ª­® । ªâ®à : ®âáâ㯠᫥¢ 
ted_wnd_t equ dword[edi+ 4] ;®ª­® । ªâ®à : ®âáâ㯠ᢥàåã
ted_wnd_w equ dword[edi+ 8] ;®ª­® । ªâ®à : è¨à¨­ 
ted_wnd_h equ dword[edi+12] ;®ª­® । ªâ®à : ¢ëá®â 
ted_rec_l equ dword[edi+16] ;è¨à¨­  ¯ ­¥«¨ ¢ ®ª­¥
ted_rec_t equ dword[edi+20] ;¢ëá®â  ¯ ­¥«¨ ¢ ®ª­¥
ted_rec_w equ dword[edi+24] ;è¨à¨­  ᨬ¢®«  (§­ ª®¬¥áâ ) ¢ ®ª­¥
ted_rec_h equ dword[edi+28] ;¢ëá®â  ᨬ¢®«  (§­ ª®¬¥áâ ) ¢ ®ª­¥
ted_drag_m equ byte[edi+32] ;¢ë¤¥«¥­¨¥ ®â ¬ëè¨
ted_drag_k equ byte[edi+33] ;¢ë¤¥«¥­¨¥ ®â ª« ¢¨ âãàë
ted_sel_x0 equ dword[edi+34] ;ª®®à¤¨­ â  ¢ë¤¥«¥­¨ï x0
ted_sel_y0 equ dword[edi+38] ;ª®®à¤¨­ â  ¢ë¤¥«¥­¨ï y0
ted_sel_x1 equ dword[edi+42] ;ª®®à¤¨­ â  ¢ë¤¥«¥­¨ï x1
ted_sel_y1 equ dword[edi+46] ;ª®®à¤¨­ â  ¢ë¤¥«¥­¨ï y1
;§ ¯ á­ë¥ ª®®à¤¨­ âë ¢ë¤¥«¥­¨ï
ted_seln_x0 equ dword[edi+50]
ted_seln_y0 equ dword[edi+54]
ted_seln_x1 equ dword[edi+58]
ted_seln_y1 equ dword[edi+62]
 
ted_tex equ dword[edi+66] ;㪠§ â¥«ì ­  ¯ ¬ïâì ¤«ï åà ­¥­¨ï ⥪áâ 
ted_tex_1 equ dword[edi+70] ;㪠§ â¥«ì ­  1-î áâàªãâàã ᨬ¢®« 
ted_tex_end equ dword[edi+74] ;㪠§ â¥«ì ­  ¯®á«¥¤­îî áâàãªâãàã ᨬ¢®« 
ted_cur_x equ dword[edi+78] ;ª®®à¤¨­ â  x ªãàá®à 
ted_cur_y equ dword[edi+82] ;ª®®à¤¨­ â  y ªãàá®à 
ted_max_chars equ dword[edi+86] ;¬ ªá¨¬ «ì­®¥ ç¨á«® ᨬ¢®«®¢ ¢ ®¤­®¬ ¤®ªã¬¥­â¥
ted_colors_text_count equ dword[edi+90] ;ª®««¨ç¥á⢮ 梥⮢ ⥪áâ 
ted_key_words_count equ dword[edi+94] ;ª®««¨ç¥á⢮ ª«î祢ëå á«®¢
ted_color_cursor equ dword[edi+98] ;梥⠪ãàá®à 
ted_color_wnd_capt equ dword[edi+102] ;梥⠯®«¥© ¢®ªà㣠®ª­ 
ted_color_wnd_work equ dword[edi+106] ;梥â ä®­  ®ª­ 
ted_color_wnd_bord equ dword[edi+110] ;梥â ⥪áâ  ­  ¯®«ïå
ted_color_select equ dword[edi+114] ;梥⠢뤥«¥­¨ï
ted_color_cur_text equ dword[edi+118] ;梥â ᨬ¢®«  ¯®¤ ªãàá®à®¬
ted_color_wnd_text equ dword[edi+122] ;梥â ⥪áâ  ¢ ®ª­¥
ted_syntax_file equ dword[edi+126] ;㪠§ â¥«ì ­  ­ ç «® ä ©«  ᨭ⠪á¨á 
ted_syntax_file_size equ dword[edi+130] ;¬ ªá¨¬ «ì­ë© à §¬¥à ä ©«  ᨭ⠪á¨á 
ted_text_colors equ dword[edi+134] ;㪠§ â¥«ì ­  ¬ áᨢ 梥⮢ ⥪áâ 
ted_help_text_f1 equ dword[edi+138] ;㪠§ â¥«ì ­  ⥪áâ á¯à ¢ª¨ (¯® ­ ¦ â¨¨ F1)
ted_help_id equ dword[edi+142] ;¨¤¥­â¨ä¨ª â®à ¤«ï á¯à ¢ª¨
ted_key_words_data equ dword[edi+146] ;㪠§ â¥«ì ­  áâàãªâãàë ª«î祢ëå á«®¢ TexColViv
ted_tim_ch equ dword[edi+150] ;ª®««¨ç¥á⢮ ¨§¬¥­¥­¨© ¢ ä ©«¥
ted_tim_undo equ dword[edi+154] ;ª®««¨ç¥á⢮ ®â¬¥­¥­­ëå ¤¥©á⢨©
ted_tim_ls equ dword[edi+158] ;¢à¥¬ï ¯®á«¥¤­¥£® á®åà ­¥­¨ï
ted_tim_co equ dword[edi+162] ;¢à¥¬ï ¯®á«¥¤­¥© 梥⮢®© à §¬¥âª¨
ted_el_focus equ dword[edi+166] ;㪠§ â¥«ì ­  ¯¥à¥¬¥­­ãî í«¥¬¥­â  ¢ 䮪ãá¥
ted_err_save equ byte[edi+170] ;®è¨¡ª  á®åà ­¥­¨ï ä ©« 
ted_panel_id equ byte[edi+171] ;­®¬¥à ®âªàë⮩ ¯ ­¥«¨
ted_key_new equ byte[edi+172] ;ᨬ¢®«, ª®â®àë© ¡ã¤¥â ¤®¡ ¢«ïâáï á ª« ¢¨ âãàë
ted_symbol_new_line equ byte[edi+173] ;ᨬ¢®« § ¢¥à襭¨ï áâப¨
ted_scr_w equ dword[edi+174] ;¢¥à⨪ «ì­ë© áªà®««¨­£
ted_scr_h equ dword[edi+178] ;£®à¨§®­â «ì­ë© áªà®««¨­£
ted_arr_key_pos equ dword[edi+182] ;㪠§ â¥«ì ­  ¬ áᨢ ¯®§¨æ¨© ª«î祢ëå á«®¢
ted_buffer equ dword[edi+186] ;㪠§ â¥«ì ­  ¡ãä¥à ª®¯¨à®¢ ­¨ï/¢áâ ¢ª¨
ted_buffer_find equ dword[edi+190] ;㪠§ â¥«ì ­  ¡ãä¥à ¤«ï ¯®¨áª 
ted_cur_ins equ byte[edi+194] ;०¨¬ à ¡®âë ªãàá®à  (®¡ëç­ë© ¨«¨ § ¬¥­ )
ted_mode_color equ byte[edi+195] ;०¨¬ ¢ë¤¥«¥­¨ï á«®¢ 梥⮬ (0-¢ëª«. 1-¢ª«.)
ted_mode_invis equ byte[edi+196] ;०¨¬ ¯®ª §  ­¥¯¥ç â ¥¬ëå ᨬ¢®«®¢
ted_gp_opt equ byte[edi+197] ;®¯æ¨¨ ¢®§¢à é ¥¬ë¥ ä㭪樥© ted_get_pos_by_cursor
ted_fun_on_key_ctrl_o equ dword[edi+198] ;㪠§ â¥«ì ­  äã­ªæ¨î ¢ë§ë¢ ¥¬ãî ¯à¨ ­ ¦ â¨¨ Ctrl+O (®âªàë⨥ ä ©« )
ted_fun_on_key_ctrl_f equ dword[edi+202] ;... Ctrl+F (¢ë§®¢ /áªàëâ¨ï ¯ ­¥«¨ ¯®¨áª )
ted_fun_on_key_ctrl_n equ dword[edi+206] ;... Ctrl+N (ᮧ¤ ­¨¥ ­®¢®£® ¤®ªã¬¥­â )
ted_fun_on_key_ctrl_s equ dword[edi+210] ;... Ctrl+S
ted_buffer_size equ dword[edi+214] ;à §¬¥à ¡ãä¥à  ª®¯¨à®¢ ­¨ï/¢áâ ¢ª¨
ted_fun_find_err equ dword[edi+218] ;㪠§ â¥«ì ­  äã­ªæ¨î ¢ë§ë¢ ¥¬ãî ¥á«¨ ¯®¨áª § ª®­ç¨«áï ­¥ã¤ ç­®
ted_fun_init_synt_err equ dword[edi+222] ;㪠§ â¥«ì ­  äã­ªæ¨î ¢ë§ë¢ ¥¬ãî ¯à¨ ®è¨¡®ç­®¬ ®âªàë⨨ ä ©«  ᨭ⠪á¨á 
ted_fun_draw_panel_buttons equ dword[edi+226] ;㪠§ â¥«ì ­  äã­ªæ¨î à¨á®¢ ­¨ï ¯ ­¥«¨ á ª­®¯ª ¬¨
ted_fun_draw_panel_find equ dword[edi+230] ;㪠§ â¥«ì ­  äã­ªæ¨î à¨á®¢ ­¨ï ¯ ­¥«¨ ¯®¨áª 
ted_fun_draw_panel_syntax equ dword[edi+234] ;㪠§ â¥«ì ­  äã­ªæ¨î à¨á®¢ ­¨ï ¯ ­¥«¨ ᨭ⠪á¨á 
ted_fun_save_err equ dword[edi+238] ;㪠§ â¥«ì ­  äã­ªæ¨î ¢ë§ë¢ ¥¬ãî ¥á«¨ á®åà ­¥­¨¥ ä ©«  § ª®­ç¨«®áì ­¥ã¤ ç­®
;------------------------------------------------------------------------------
ted_opt_ed_move_cursor equ 1 ;¤¢¨£ âì ªãàá®à ¯®á«¥ ¤®¡ ¢«¥­¨ï ⥪áâ 
ted_opt_ed_change_time equ 2 ;¤®¡ ¢«ïâì ¨§¬¥­¥­¨ï ¯à¨ । ªâ¨à®¢ ­¨¨ ⥪áâ 
ted_offs_sel equ 34 ;ᬥ饭¨¥ áâàãªâãàë sel
ted_offs_seln equ 50 ;ᬥ饭¨¥ áâàãªâãàë seln
ted_offs_count_colors equ 90 ;ᬥ饭¨¥ ¯¥à¥¬¥­­®© ª®««¨ç¥á⢠ 梥⮢
ted_offs_key_new equ 172
ted_offs_symbol_new_line equ 173 ;ᬥ饭¨¥ ᨬ¢®«  ­®¢®© áâப¨
;------------------------------------------------------------------------------
 
 
 
; *** scroll bar constant ***
sb_offs_size_x equ 0
sb_offs_start_x equ 2
sb_offs_size_y equ 4
sb_offs_start_y equ 6
sb_offs_max_area equ 16
sb_offs_cur_area equ 20
sb_offs_position equ 24
sb_offs_redraw equ 40
sb_offs_delta2 equ 46
sb_offs_all_redraw equ 80
;------------------------------------------------------------------------------
/programs/develop/libraries/box_lib/trunk/doc/box_lib.htm
24,7 → 24,9
<li>d_button</li>
<li>menubar</li>
<li>filebrowser</li>
<li>filepath</li>
<li><a href="tree_list\info_treelist.htm">tree_list</a></li>
<li><a href="t_edit\t_edit.htm">text_editor</a></li>
</ul>
 
<h1><a name="autors">Àâòîðñêèé ñîñòàâ</a></h1>
36,6 → 38,6
<p>Èãîðü Àôàíàñüåâ aka IgorA</p>
 
<hr>
<p>Äîêóìåíòàöèÿ îáíîâëÿëàñü ïîñëåäíèé ðàç 05.02.10.</p>
<p>Äîêóìåíòàöèÿ îáíîâëÿëàñü ïîñëåäíèé ðàç 29.04.10.</p>
</body>
</html>
/programs/develop/libraries/box_lib/trunk/doc/style.css
36,16 → 36,6
color: #004000;
background: #ffd0ff;
}
pre font.f0 { color: #ffff00; }
pre font.f1 { color: #ffffff; }
pre font.f2 { color: #00ff00; }
pre font.f3 { color: #00ffff; }
pre font.f4 { color: #808080; }
pre font.f5 { color: #ff40ff; }
pre font.f6 { color: #4080ff; }
pre font.f7 { color: #ff0000; }
pre font.f8 { color: #ffcc00; }
pre font.f9 { color: #00ccff; }
 
caption
{
57,15 → 47,12
}
table
{
font-size: 10px;
border-collapse: collapse;
border: #000000 1px solid;
background-color: #c0e7fb;
}
table td
{
border: none;
text-align: center;
}
table th
{
/programs/develop/libraries/box_lib/trunk/doc/t_edit/t_edit.htm
0,0 → 1,138
<html>
<head>
<title>ýëåìåíò Text Editor</title>
<meta http-equiv="content-type" content="text/html; charset=WINDOWS-1251">
<link href="../style.css" type=text/css rel=stylesheet>
</head>
 
<body>
<p><a href="../box_lib.htm">Íà ãëàâíóþ &uarr;</a></p>
<h1>Îãëàâëåíèå</h1>
 
<p><a href="#vveden">Ââåäåíèå</a></p>
<p><a href="#funct">Ôóíêöèè</a></p>
<ul>
<li><a href="#fun_but_copy">ted_but_copy</a></li>
</ul>
 
<h1><a name="vveden">Ââåäåíèå</a></h1>
<p>Ýëåìåíò text_editor ïîçâîëÿåò ðàáîòàòü ñ òåêñòîâûìè ôàéëàìè, ñîäåðæèò ìíîãî ôóíêöèÿ äëÿ ðåäàêòèðîâàíèÿ òåêñòà.</p>
<p><img src="../../../../../../other/t_edit/t_edit.png"></p>
<p>Âíåøíèé âèä ïðîãðàììû, ñ ýëåìåíòîì text_editor.</p>
 
<h2>Âîçìîæíîñòè</h2>
<ul>
<li>Îòêðûòèå (Ctrl+O)/Ñîõðàíåíèå ôàéëà.</li>
<li>Ðåäàêòèðîâàíèå: Ïîâòîð/Îòìåíà äåéñòâèÿ (Ctrl+Z), Âûðåçàòü/Êîïèðîâàòü (Ctrl+C)/Âñòàâèòü (Ctrl+V), Ïîèñê (Ctrl+F, F3).</li>
<li>Âûäåëåíèå öâåòîì ñëîâ, çàäàííûõ â ôàéëå ñèíòàêñèñà. Âûâîä ñïðàâêè ïî íèì, åñëè îíà åñòü (íàæàòèåì F1 êîãäà êóðñîð íà ñëîâå).</li>
</ul>
 
<h2>Íåêîòîðûå íåäîðàáîòêè</h2>
<ul>
<li>Åñëè îòêðûòü áîëüøîé ôàéë, ðàçìåð êîòîðîãî áîëüøå ÷åì:
maxChars equ 100002 ;(...+2)
îí îòêðîåòñÿ íå âåñü, à ïåðâûå maxChars-2 ñèìâîëîâ èç ôàéëà
(î ÷åì âûäàåòñÿ ñîîáùåíèå).</li>
<li>Ïðè ñîõðàíåíèè ïðîãðàììà íå ñïðàøèâàåò î çàìåíå ñóùåñòâ. ôàéëà.</li>
</ul>
 
<h2>Î ðàáîòå ïðîãðàììû</h2>
<p>Ðàçäåë äëÿ ïðîãðàììèñòîâ (è èíòåðåñóþùèõñÿ ëþäåé), â êîòîðîì ðàñêàçàíû
íåêîòîðûå èäåè, íà êîòîðûõ ïîñòðîåíà äàííàÿ ïðîãðàììà.</p>
 
<p>Äëÿ ðàáîòû ñ òåêñòîì ïðîãðàììà èñïîëüçóåò ñòðóêòóðû:</p>
<pre>struct symbol
c db ? ; +0 ñèìâîë
col db ? ; +1 öâåò
perv dd ? ; +2
next dd ? ; +6 óêàçàòåëè
tc dd ? ; +10 âðåì. ñîçäàíèÿ
td dd ? ; +14 âðåì. óäàëåíèÿ
ends</pre>
<p>Êàæäàÿ èç òàêèõ ñòðóêòóð ñîõðàíÿåò îäèí ñèìâîë â ïåðåìåííîé 'c'. Ïåðåìåííûå
'perv' è 'next' õðàíÿò èíäåêñû ïåðâîãî è ñëåäóþùåãî ñèìâîëîâ. Áëàãîäàðÿ ÷åìó
òåêñò ñîçäàåòñÿ â âèäå öåïî÷êè ñèìâîëîâ (äâóíàïðàâëåííûé ñïèñîê).</p>
<p><b>'tc'</b> - âðåìÿ ñîçäàíèÿ ñèìâîëà, ïðè îòìåíå äåéñòâèÿ òåêñòîâûé ðåäàêòîð "çíàåò"
êàêèå ñèìâîëû îòîáðàæàòü, à êàêèå íåò (õîòÿ âñå ñèìâîëû "âèñÿò" â ïàìÿòè).</p>
<p><b>'td'</b> - âðåìÿ óäàëåíèÿ ñèìâîëà, çàïîëíÿåòñÿ ïðè óäàëåíèè, ïðè îòìåíå äåéñòâèÿ
óäàëåíèÿ ñèìâîëîâ, òåêñò ìîæåò áûòü âîññòàíîâëåí.</p>
<p><b>'col'</b> - èñïîëüçóåòñÿ äëÿ öâåòîâîé ðàçìåòêè.</p>
 
<h1><a name="funct">Ôóíêöèè</a></h1>
<p>Ôóíêöèè íà ýêñïîðò:</p>
 
<h4><a name="fun_but_copy">ted_but_copy</a></h4>
 
<p>Ôóíêöèÿ êîòîðàÿ áóäåò âûçûâàòüñÿ ïðè íàæàòèè íà êíîïêó êîïèðîâàíèÿ â áóôåð èëè íà <b>Ctrl+C</b>.</p>
<p>Ïðèìåð èñïîëüçîâàíèÿ:</p>
<pre>stdcall [ted_but_copy], tedit0</pre>
 
<h4>ted_but_cut</h4><p></p>
<h4>ted_but_find_next</h4><p></p>
<h4>ted_but_paste</h4><p></p>
<h4>ted_but_redo</h4><p></p>
<h4>ted_but_reverse</h4><p></p>
<h4>ted_but_save_file</h4><p></p>
<h4>ted_but_select_word</h4><p></p>
<h4>ted_but_sumb_lover</h4><p></p>
<h4>ted_but_sumb_upper</h4><p></p>
<h4>ted_but_undo</h4><p></p>
<h4>ted_can_save</h4><p></p>
<h4>ted_clear</h4><p></p>
<h4>ted_delete</h4><p></p>
<h4>ted_draw</h4><p></p>
<h4>ted_init</h4><p></p>
<h4>ted_init_syntax_file</h4><p></p>
<h4>ted_is_select</h4><p></p>
<h4>ted_key</h4><p></p>
<h4>ted_mouse</h4><p></p>
<h4>ted_open_file</h4><p></p>
<h4>ted_text_add</h4><p></p>
<h4>ted_text_colored</h4><p></p>
 
<p>Âíóòðåííèå ôóíêöèè:</p>
<p><b>ted_get_text_perv_pos</b> - ïåðåõîä íà ïðåäûäóùèé ñèìâîë â öåïè (÷åðåç óêàçàòåëü 'perv')</p>
<p><b>ted_get_text_next_pos</b> - ïåðåõîä íà ñëåäóþùèé ñèìâîë â öåïè (÷åðåç óêàçàòåëü 'next')</p>
<p><b>ted_symbol_not_vis</b> - îïðåäåëÿåò âèäèìûé ëè óêàçàííûé ñèìâîë íà ýêðàíå (â çàâèñèìîñòè
îò çíà÷åíèé 'tc' è 'td')</p>
<p><b>ted_iterat_next</b> - ïåðåõîä íà ñëåäóþùèé âèäèìûé ñèìâîë â öåïè. Èñïîëüçóåò äëÿ
ðàáîòû ôóíêöèè ted_get_text_next_pos è ted_symbol_not_vis.</p>
<p><b>ted_iterat_perv</b> - ïåðåõîä íà ïðåäåäóùèé âèäèìûé ñèìâîë â öåïè.</p>
 
<p><b>ted_iterat_next_pos_char</b> - íàéòè ñëåäóþùóþ ïîçèöèþ óêàçàííîãî ñèìâîëà (edx-ïîç. íà÷àëà
ïîèñêà, bl->êîä èñêîìîãî ñèìâîëà)</p>
<p><b>ted_get_pos_by_coords</b> - áåðåò ïîçèöèþ ñèìâîëà ïî êîîðäèíàòàì (esi->êîîðä. x, çíàê;
ecx->êîîðä. y, ñòðîêà)</p>
<p><b>ted_go_to_pos</b> - ïåðåñòàâëÿåò êóðñîð â óêàçàííóþ ïîçèöèþ, åñëè óêàçàííàÿ ïîçèöèÿ
íàõîäèòñÿ âíå ýêðàíà, òî òàêæå ïåðåñòàâëÿþòñÿ ñêðîëèíãè (ecx->êîîðä. x, çíàê; edx->êîîðä. y, ñòðîêà)</p>
 
 
<h1>Ôîðìàò ôàéëà ïîäñâåòêè *.syn</h1>
<table>
<tr><th>Ýëåìåíò</th><th>Ðàçìåð (áàéò)</th></tr>
<tr><td>Êîëè÷åñòâî öâåòîâ òåêñòà</td>
<td><pre>4</pre></td></tr>
<tr><td>Êîëè÷åñòâî ïîäñâå÷èâàåìûõ ñëîâ</td>
<td><pre>4</pre></td></tr>
<tr><td>Öâåòà èíòåðôåéñà</td>
<td><pre>4*6</pre></td></tr>
<tr><td>Öâåòà äëÿ òåêñòà</td>
<td><pre>4*(êîë. öâ. òåêñòà)</pre></td></tr>
<tr><td>Ñòðóêòóðû ñî ñâîéñòâàìè è îïèñàíèÿìè ñëîâ</td>
<td><pre>sizeof(TexColViv)*(êîë. ñëîâ)</pre></td></tr>
<tr><td>Ðàçäåëèòåëüíûé ñèìâîë, îçíà÷àþùèé íà÷àëî îïèñàíèé ñëîâ (âñåãäà ðàâåí 0)</td>
<td><pre>1 áàéò</pre></td></tr>
<tr><td>Îïèñàíèÿ ñëîâ (ñòðîêè òåêñòà ñ 0-ìè â êîíöå)</td>
<td><pre>(äëèííà ñïðàâî÷íîãî òåêñòà + 1)</pre></td></tr>
</table>
<h4>Çàìå÷àíèÿ.</h4>
<ul>
<li>Âñå ñëîâà äîëæíû áûòü ðàñïîëîæåíû â ïîðÿäêå ñëåäîâàíèÿ èõ ASCII êîäîâ.
Âîçìîæíî â áóäóùèõ âåðñèÿõ ôîðìàò ôàéëîâ ïîäñâåòêè áóäåò èçìåíåí.</li>
</ul>
 
<hr>
<p>Äîêóìåíòàöèÿ îáíîâëÿëàñü ïîñëåäíèé ðàç 29.04.10.</p>
 
</body>
</html>
/programs/develop/libraries/box_lib/trunk/t_edit.mac
0,0 → 1,3867
; ¬ ªà®á ¤«ï á¨á⥬­®© ¡¨¡«¨®â¥ª¨ box_lib.obj
; í«¥¬¥­â TextEditor ¤«ï Kolibri OS
; ä ©« ¯®á«¥¤­¨© à § ¨§¬¥­ï«áï 29.04.2010 IgorA
; ­  ª®¤ ¯à¨¬¥­¥­  GPL2 «¨æ¥­§¨ï
 
;input:
; edi = pointer to tedit struct
; reg = index
;output:
; reg = pointer to 'tex' struct
macro ConvertIndexToPointer reg {
imul reg,sizeof.symbol
add reg,ted_tex
}
 
;--- out_reg = ted_key_words_data[ind_reg].Text[0] ---
macro ColToIndexOffset ind_reg,out_reg {
mov out_reg,ind_reg
imul out_reg,sizeof.TexColViv
add out_reg,ted_key_words_data
}
 
macro use_text_edit
{
TED_PANEL_NULL equ 0 ;­¥â ®âªàë⮩ ¯ ­¥«¨
TED_PANEL_FIND equ 1 ;¯ ­¥«ì ¯®¨áª 
TED_PANEL_SYNTAX equ 2 ;¯ ­¥«ì ¢ë¡®à  ä ©«®¢ ¯®¤á¢¥âª¨
TED_PANEL_WIDTH equ 150 ;è¨à¨­  ¯ ­¥«¨
 
MAX_COLOR_WORD_LEN equ 40
;------------------------------------------------------------------------------
struct TexSelect
x0 dd ?
y0 dd ?
x1 dd ?
y1 dd ?
ends
 
struct TexColViv
Text rb MAX_COLOR_WORD_LEN ; á«®¢® ¤«ï ¯®¤á¢¥âª¨
f1 dd 0 ; á¯à ¢ª  ¯® á«®¢ã
wwo db ? ; whole words only
endc db ? ; ᨬ¢®« ª®­æ  ¢ë¤¥«¥­¨ï (wwo&4)
color db ? ; ­®¬¥à 梥â 
ends
 
struct symbol
c db ? ; +0 ᨬ¢®«
col db ? ; +1 梥â
perv dd ? ; +2
next dd ? ; +6 㪠§ â¥«¨
tc dd ? ; +10 ¢à¥¬. ᮧ¤ ­¨ï
td dd ? ; +14 ¢à¥¬. 㤠«¥­¨ï
ends
;------------------------------------------------------------------------------
 
if lang eq ru
 
txtFindCapt db '®¨áª',0
txtFindNext db ' ©â¨ ¤ «¥¥',0
txtFormatCapt db '”®à¬ â',0
txtFormatApply db 'à¨¬¥­¨âì',0
txtRow db '‘âப ',0
txtCol db '‡­ ª',0
txtOtm db 'Žâ¬¥­ë',0
txtBuf db 'ãä¥à:',0
 
else
 
txtFindCapt db 'Search',0
txtFindNext db 'Find next',0
txtFormatCapt db 'Format',0
txtFormatApply db 'Apply',0
txtRow db 'Rows',0
txtCol db 'Cols',0
txtOtm db 'Undo',0
txtBuf db 'Buffer:',0
 
end if
 
;------
align 4
EvChar db 0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 
EvUpper db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79
db 80,81,82,83,84,85,86,87,88,89,90,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
EvLover db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111
db 112,113,114,115,116,117,118,119,120,121,122,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
conv_table dd 0
 
 
KM_SHIFT equ 0x00010000
KM_CTRL equ 0x00020000
KM_ALT equ 0x00040000
KM_NUMLOCK equ 0x00080000
 
; KEY CODES
KEY_F1 equ 0x0000003B
KEY_F2 equ 0x0000003C
KEY_F3 equ 0x0000003D
 
 
 
align 4
proc ted_init, edit:dword
push eax ecx edi
mov edi,dword[edit]
 
mov ecx,sizeof.symbol
imul ecx,ted_max_chars
call mem_Alloc ;¢ë¤¥«ï¥¬ ¯ ¬ïâì
mov ted_tex,eax
mov ted_tex_1,eax
add ted_tex_1,sizeof.symbol
add eax,ecx
mov ted_tex_end,eax
 
stdcall ted_clear, edi,1
 
;-------------------------------------------------
mov ecx,1024 ;1024 - ¤«ï ¬ áᨢ  ted_arr_key_pos
add ecx,ted_syntax_file_size
call mem_Alloc
mov ted_arr_key_pos,eax
add eax,1024
mov ted_syntax_file,eax
 
pop edi ecx eax
ret
endp
 
align 4
proc ted_delete, edit:dword
push ecx edi
mov edi,dword[edit]
 
mov ecx,ted_tex
call mem_Free
mov ecx,ted_arr_key_pos ;ted_syntax_file
call mem_Free
 
pop edi ecx
ret
endp
 
 
;input:
; eax = key kodes
align 4
proc ted_key, edit:dword, table:dword, control:dword
pushad
mov edi,dword[edit]
mov esi,dword[control]
 
cmp ah,KEY_F1 ;[F1]
jne @f
stdcall ted_show_help_f1,edi
jmp .end_key_fun
@@:
cmp ah,KEY_F3 ;[F3]
jne @f
stdcall ted_but_find_next,edi
jmp .end_key_fun
@@:
 
test esi,KM_CTRL ;Ctrl+...
jz .key_Ctrl
cmp ah,24 ;Ctrl+O
jne @f
cmp ted_fun_on_key_ctrl_o,0
je @f
call ted_fun_on_key_ctrl_o
@@:
cmp ah,33 ;Ctrl+F
jne @f
cmp ted_panel_id,TED_PANEL_FIND
je @f
cmp ted_fun_on_key_ctrl_f,0
je @f
call ted_fun_on_key_ctrl_f
@@:
cmp ah,44 ;Ctrl+Z
jne @f
stdcall ted_but_undo,edi
@@:
cmp ah,46 ;Ctrl+C
jne @f
stdcall ted_but_copy,edi
@@:
cmp ah,47 ;Ctrl+V
jne @f
stdcall ted_but_paste,edi
@@:
cmp ah,49 ;Ctrl+N
jne @f
cmp ted_fun_on_key_ctrl_n,0
je @f
call ted_fun_on_key_ctrl_n
@@:
cmp ah,199 ;Ctrl+Home
jne @f
call ted_key_ctrl_home
@@:
jmp .end_key_fun
.key_Ctrl:
 
test esi,KM_SHIFT ;Shift+...
jz .key_Shift
cmp ah,72 ;Shift+Up
jne @f
call ted_sel_key_up
@@:
cmp ah,75 ;Shift+Left
jne @f
call ted_sel_key_left
@@:
cmp ah,77 ;Shift+Right
jne @f
call ted_sel_key_right
@@:
cmp ah,80 ;Shift+Down
jne @f
call ted_sel_key_down
@@:
;mov ted_drag_k,1 ;­ ç¨­ ¥¬ ¢ë¤¥«¥­¨¥ ®â ª« ¢¨ âãàë
jmp .key_MoveCur
.key_Shift:
;-------------------------------------------------
cmp ah,72 ;178 ;Up
jne @f
call ted_draw_cursor_sumb
call ted_cur_move_up
cmp dl,8
jne .no_red_0
call ted_scroll_set_redraw
stdcall ted_draw,edi
jmp @f
.no_red_0:
call ted_draw_main_cursor
mov ted_drag_k,0 ;§ ª ­ç¨¢ ¥¬ ¢ë¤¥«¥­¨¥ ®â ª« ¢¨ âãàë
@@:
cmp ah,80 ;177 ;Down
jne @f
call ted_draw_cursor_sumb
call ted_cur_move_down
cmp dl,8
jne .no_red_1
call ted_scroll_set_redraw
stdcall ted_draw,edi
jmp @f
.no_red_1:
call ted_draw_main_cursor
mov ted_drag_k,0 ;§ ª ­ç¨¢ ¥¬ ¢ë¤¥«¥­¨¥ ®â ª« ¢¨ âãàë
@@:
cmp ah,75 ;176 ;Left
jne @f
call ted_draw_cursor_sumb
call ted_cur_move_left
cmp dl,8
jne .no_red_2
call ted_scroll_set_redraw
stdcall ted_draw,edi
jmp @f
.no_red_2:
call ted_draw_main_cursor
mov ted_drag_k,0 ;§ ª ­ç¨¢ ¥¬ ¢ë¤¥«¥­¨¥ ®â ª« ¢¨ âãàë
@@:
cmp ah,77 ;179 ;Right
jne @f
call ted_draw_cursor_sumb
call ted_cur_move_right
cmp dl,8
jne .no_red_3
call ted_scroll_set_redraw
stdcall ted_draw,edi
jmp @f
.no_red_3:
call ted_draw_main_cursor
mov ted_drag_k,0 ;§ ª ­ç¨¢ ¥¬ ¢ë¤¥«¥­¨¥ ®â ª« ¢¨ âãàë
@@:
cmp ah,71 ;180 ;Home
jne @f
call ted_draw_cursor_sumb
call ted_cur_move_x_first_char
cmp dl,8
jne .no_red_4
call ted_scroll_set_redraw
stdcall ted_draw,edi
jmp @f
.no_red_4:
call ted_draw_main_cursor
mov ted_drag_k,0 ;§ ª ­ç¨¢ ¥¬ ¢ë¤¥«¥­¨¥ ®â ª« ¢¨ âãàë
@@:
cmp ah,79 ;181 ;End
jne @f
call ted_draw_cursor_sumb
call ted_cur_move_x_last_char
cmp dl,8
jne .no_red_5
call ted_scroll_set_redraw
stdcall ted_draw,edi
jmp @f
.no_red_5:
call ted_draw_main_cursor
mov ted_drag_k,0 ;§ ª ­ç¨¢ ¥¬ ¢ë¤¥«¥­¨¥ ®â ª« ¢¨ âãàë
@@:
cmp ah,73 ;184 ;PageUp
jne @f
call ted_cur_move_page_up
cmp dl,0
je @f
call ted_scroll_set_redraw
stdcall ted_draw,edi
@@:
cmp ah,81 ;183 ;PageDown
jne @f
call ted_cur_move_page_down
cmp dl,0
je @f
call ted_scroll_set_redraw
stdcall ted_draw,edi
mov ted_drag_k,0 ;§ ª ­ç¨¢ ¥¬ ¢ë¤¥«¥­¨¥ ®â ª« ¢¨ âãàë
@@:
;-------------------------------------------------
; cmp esi,0
; jne .end_key_fun
.key_MoveCur:
 
cmp ah,69 ;[Pause Break]
je .end_key_fun
cmp ah,120 ;[Fn]
je .end_key_fun
cmp ah,0x80 ;if key up
ja .end_key_fun
 
cmp dword[table],0
je @f
stdcall KeyConvertToASCII, dword[table]
@@:
 
;mov ted_drag_k,0 ;§ ª ­ç¨¢ ¥¬ ¢ë¤¥«¥­¨¥ ®â ª« ¢¨ âãàë
 
lea edx,[EvChar] ;¡¥à¥¬  ¤à¥á â ¡«¨æë á ¤®¯ãá⨬묨 ᨬ¢®« ¬¨
add dl,ah
jae @f
add edx,0x100 ;¥á«¨ ¡ë«® ¯¥à¥¯®«­¥­¨¥ ¯à¨ ¤®¡ ¢«¥­¨¨ ª®¤  ᨬ¢®« 
@@:
cmp byte [edx],1
jne @f
mov ted_key_new,ah
call ted_set_undo
mov edx,ted_opt_ed_change_time+ted_opt_ed_move_cursor
stdcall ted_sel_text_del,edx
cmp al,1
jne .del
mov edx,ted_opt_ed_move_cursor
.del:
cmp ted_cur_ins,1
je .no_ins_mod
stdcall ted_text_del,edi,ted_opt_ed_change_time
mov edx,ted_opt_ed_move_cursor
.no_ins_mod:
mov ecx,edi
add ecx,ted_offs_key_new
stdcall ted_text_add,edi,ecx,1,edx ;¤®¡ ¢«ï¥¬ ᨬ¢®« ¢¢¥¤¥­­ë© á ª« ¢¨ âãàë
cmp ted_key_new,13
jne .dr_m_win
stdcall ted_draw,edi
jmp .dr_cur_l
.dr_m_win:
stdcall ted_draw_cur_line,edi
.dr_cur_l:
cmp ted_fun_draw_panel_buttons,0
je @f
call ted_fun_draw_panel_buttons
@@:
 
cmp ah,8 ;[<-]
jne @f
call ted_set_undo
stdcall ted_sel_text_del,ted_opt_ed_change_time
cmp al,1
je .del_one_b
stdcall ted_text_del,edi,ted_opt_ed_change_time+ted_opt_ed_move_cursor
.del_one_b:
stdcall ted_draw,edi
cmp ted_fun_draw_panel_buttons,0
je .end_key_fun
call ted_fun_draw_panel_buttons
jmp .end_key_fun
@@:
 
cmp ah,182 ;Delete
jne @f
call ted_set_undo
stdcall ted_sel_text_del,ted_opt_ed_change_time
cmp al,1
je .del_one_d
stdcall ted_text_del,edi,ted_opt_ed_change_time
.del_one_d:
stdcall ted_draw,edi
cmp ted_fun_draw_panel_buttons,0
je .end_key_fun
call ted_fun_draw_panel_buttons
jmp .end_key_fun
@@:
 
cmp ah,185 ;Ins
jne @f
call ted_draw_cursor_sumb
xor ted_cur_ins,1
call ted_draw_main_cursor
@@:
 
.end_key_fun:
popad
ret
endp
 
;output:
; al = 1 - can save
align 4
proc ted_can_save, edit:dword
push ecx edi
mov edi,dword[edit]
 
mov ecx,ted_tim_ch
sub ecx,ted_tim_undo
mov al,1
cmp ted_tim_ls,ecx
jne @f
dec al
@@:
pop edi ecx
ret
endp
 
;input:
; edi = pointer to tedit struct
;output:
; al = 1 - selected
align 4
proc ted_is_select
push ebx
xor al,al
cmp ted_drag_m,1
je @f
mov al,1
mov ebx,ted_sel_x0
cmp ebx,ted_sel_x1
jne @f
mov ebx,ted_sel_y0
cmp ebx,ted_sel_y1
jne @f
xor al,al
@@:
pop ebx
ret
endp
 
;input:
; edi = pointer to tedit struct
align 4
proc ted_sel_normalize
push ecx esi
push edi
mov esi,edi
add esi,ted_offs_sel
add edi,ted_offs_seln
mov ecx,sizeof.TexSelect
rep movsb
pop edi
 
jmp @f
.swp_f:
mov ecx,ted_seln_x0
m2m ted_seln_x0,ted_seln_x1
mov ted_seln_x1,ecx
 
mov ecx,ted_seln_y0
cmp ecx,ted_seln_y1 ;(sel_y0>sel_y1)
jle .end_f
m2m ted_seln_y0,ted_seln_y1
mov ted_seln_y1,ecx
 
jmp .end_f
@@:
 
mov ecx,ted_seln_y0
cmp ecx,ted_seln_y1 ;(sel_y0>sel_y1)
jg .swp_f
 
cmp ecx,ted_seln_y1 ;(sel_y0==sel_y1)
jne .end_f
mov ecx,ted_seln_x0
cmp ecx,ted_seln_x1 ;(sel_x0>sel_x1)
jg .swp_f
 
.end_f:
pop esi ecx
ret
endp
 
;input:
; edi = pointer to tedit struct
;description:
; ”ã­ªæ¨ï ¢ë§ë¢ ¥¬ ï ¯à¨ ­ ç «¥ ¢ë¤¥«¥­¨ï
align 4
proc ted_sel_start
push eax ecx
mov eax,ted_scr_h
mov ecx,ted_cur_x
add ecx,dword[eax+sb_offs_position]
mov ted_sel_x0,ecx
mov ted_sel_x1,ecx
 
mov eax,ted_scr_w
mov ecx,ted_cur_y
add ecx,dword[eax+sb_offs_position]
mov ted_sel_y0,ecx
mov ted_sel_y1,ecx
pop ecx eax
ret
endp
 
;input:
; edi = pointer to tedit struct
;description:
; ”ã­ªæ¨ï ¢ë§ë¢ ¥¬ ï ¯à¨ ¯¥à¥¬¥é¥­¨¨ ¢ë¤¥«¥­¨ï
align 4
proc ted_sel_move
push eax ecx
mov ecx,ted_cur_x
mov eax,ted_scr_h
add ecx,dword[eax+sb_offs_position]
mov ted_sel_x1,ecx
 
mov eax,ted_scr_w
mov ecx,ted_cur_y
add ecx,dword[eax+sb_offs_position]
mov ted_sel_y1,ecx
pop ecx eax
cmp ted_fun_draw_panel_buttons,0 ;redraw toolbar (need to button Copy)
je @f
call ted_fun_draw_panel_buttons
@@:
ret
endp
 
;input:
; cl_al_mem = 1 - clear all memory
align 4
proc ted_clear, edit:dword, cl_al_mem:dword
push ecx edi
mov edi,dword[edit]
 
mov ted_cur_x,0
mov ted_cur_y,0
mov ted_tim_ch,0
mov ted_tim_ls,0
mov ted_tim_co,0
mov ted_tim_undo,0
mov ted_help_id,-1
 
mov ecx,ted_scr_w
mov dword[ecx+sb_offs_position],0
mov dword[ecx+sb_offs_max_area],100
mov dword[ecx+sb_offs_redraw],1
mov ecx,ted_scr_h
mov dword[ecx+sb_offs_position],0
mov dword[ecx+sb_offs_max_area],100
 
mov ted_sel_x0,0
mov ted_sel_y0,0
mov ted_sel_x1,0
mov ted_sel_y1,0
 
cmp dword[cl_al_mem],0
je .exit
 
push edx
mov ecx,sizeof.symbol
imul ecx,ted_max_chars
mov edx,ted_tex
@@:
mov byte [edx],0
inc edx
loop @b
mov edx,ted_tex
mov dword [edx+6],1
pop edx
 
.exit:
pop edi ecx
ret
endp
 
 
align 4
proc ted_init_syntax_file, edit:dword, file:dword, f_name:dword
pushad
mov edi,dword[edit]
 
mov eax,70
mov ebx,dword[file]
mov dword[ebx], 0
mov dword[ebx+4], 0
mov dword[ebx+8], 0
mov ecx,ted_syntax_file_size
mov dword[ebx+12], ecx
m2m dword[ebx+16], ted_syntax_file
mov byte[ebx+20], 0
m2m dword[ebx+21], dword[f_name]
int 0x40
 
mov ecx,0x100
mov edx,ted_arr_key_pos
@@:
mov dword[edx],-1
add edx,4
loop @b
 
;init: ted_colors_text_count, ted_key_words_count, ...
mov ted_colors_text_count,1
mov ted_key_words_count,0
mov ted_help_text_f1,0
mov ted_help_id,-1 ;¨¤¥­â¨ä¨ª â®à á«®¢  ¤«ï á¯à ¢ª¨
 
cmp eax,6
je @f
cmp eax,0
je @f
cmp ax,10
jl .zifra_0_9
mov al,'?'
sub ax,48
.zifra_0_9:
add ax,48
cmp ted_fun_init_synt_err,0
je .no_colors
call ted_fun_init_synt_err
jmp .no_colors
@@:
 
mov eax,edi ;á®å࠭塞 §­ ç¥­¨¥ edi
mov esi,ted_syntax_file
add edi,ted_offs_count_colors
mov ecx,9*4
rep movsb
mov edi,eax ;¢®áâ ­ ¢«¨¢ ¥¬ §­ ç¥­¨¥ edi
 
mov eax,ted_syntax_file
add eax,32
mov ted_text_colors,eax
 
mov eax,ted_colors_text_count ;init: count_colors_text (offset to key words)
add eax,8
shl eax,2
add eax,ted_syntax_file
mov ted_key_words_data,eax
 
mov ecx,ted_key_words_count ;init: ted_arr_key_pos (first key positions)
xor eax,eax
@@:
ColToIndexOffset eax,edx
xor ebx,ebx
mov bl,byte[edx]
shl bx,2
mov esi,ted_arr_key_pos
add esi,ebx
cmp dword[esi],-1
jne .no_ch_key
mov dword[esi],eax
.no_ch_key:
inc eax
loop @b
 
;init: ted_help_text_f1
mov ecx,ted_key_words_count
imul ecx,sizeof.TexColViv
add ecx,ted_key_words_data
mov ted_help_text_f1,ecx
 
.no_colors:
popad
ret
endp
 
;input:
; ebx = file size
; edi = pointer to tedit struct
;description:
; ”ã­ªæ¨ï ¢ë§ë¢ ¥âáï ¯à¨ ®âªàë⨨ ä ©« 
align 4
proc ted_on_open_file
push eax ;destination
push ecx ;for cycle
push edx ;source
push esi
 
stdcall ted_clear,edi,0 ;ç¨á⨬ ­¥ ¢áî ¯ ¬ïâì, ¯®â®¬ã çâ® ­¨¦¥ ¡ã¤¥¬ ¥¥ § ¯®«­ïâì ­®¢ë¬¨ ¤ ­ë¬¨
mov eax,ebx
mov ecx,ebx
add eax,2
ConvertIndexToPointer eax
mov edx,ted_tex
add edx,ebx
push ebx
@@:
mov ebx,[edx]
mov byte [eax],bl
mov dword [eax+2],ecx
inc dword [eax+2]
mov dword [eax+6],ecx
add dword [eax+6],3
;mov byte[eax+1],0 ;col=0
mov dword [eax+10],-1 ;tc=-1
mov dword [eax+14],0 ;td=0
 
cmp ecx,0
je @f
dec ecx
dec edx
sub eax,sizeof.symbol
jmp @b
@@:
pop ebx
add eax,2
mov dword [eax],0 ; first sumbol 'perv=0'
 
mov edx,ted_tex
; begining sumbol 'perv=0' 'next=2'
mov dword [edx+2],0
mov dword [edx+6],2
 
add edx,sizeof.symbol
mov dword [edx+6],0 ; last sumbol 'next=0'
mov dword [edx+2],ebx ; last sumbol 'perv=last'
inc dword [edx+2]
 
mov edx,ebx
inc edx ;2 = rezerv sumbols
imul edx,sizeof.symbol
add edx,ted_tex
mov dword [edx+6],1 ; last sumbol 'next=1'
 
@@: ;clear memory, need if before was open big file
add edx,sizeof.symbol
cmp edx,ted_tex_end
jge @f
mov dword[edx+10],0
mov dword[edx+14],0
jmp @b
@@:
 
call ted_get_num_lines
cmp eax,100
jge @f
mov eax,100
@@:
mov esi,ted_scr_w
mov dword[esi+sb_offs_max_area],eax
pop esi edx ecx eax
 
call ted_text_colored
stdcall ted_draw,edi
cmp ted_fun_draw_panel_buttons,0
je @f
call ted_fun_draw_panel_buttons
@@:
ret
endp
 
;input:
; edx = pointer to symbol struct
; edi = pointer to tedit struct
;output:
; edx = pointer to 'perv' visible symbol struct
align 4
ted_iterat_perv:
cmp ted_tim_undo,0
je .else
push ebx
@@:
call ted_get_text_perv_pos
cmp edx,ted_tex
je @f
call ted_symbol_not_vis
cmp bl,1
je @b
cmp byte[edx],10 ;¯à®¯ã᪠ᨬ¢®«  á ª®¤®¬ 10
je @b
@@:
pop ebx
ret
.else:
call ted_get_text_perv_pos
cmp edx,ted_tex
je .endif
cmp dword [edx+14],0
jne .else
cmp byte[edx],10 ;¯à®¯ã᪠ᨬ¢®«  á ª®¤®¬ 10
je .else
.endif:
ret
 
 
;input:
; edx = pointer to symbol struct
; edi = pointer to tedit struct
;output:
; edx = pointer to 'next' visible symbol struct
align 4
ted_iterat_next:
cmp ted_tim_undo,0
je .else
push ebx
@@:
call ted_get_text_next_pos
cmp edx,ted_tex_1
jle @f
call ted_symbol_not_vis
cmp bl,1
je @b
cmp byte[edx],10 ;¯à®¯ã᪠ᨬ¢®«  á ª®¤®¬ 10
je @b
@@:
pop ebx
ret
.else:
call ted_get_text_next_pos
cmp edx,ted_tex_1
jle .endif
cmp dword [edx+14],0
jne .else
cmp byte[edx],10 ;¯à®¯ã᪠ᨬ¢®«  á ª®¤®¬ 10
je .else
.endif:
ret
 
;input:
; bl = symbol end of select
; edx = pointer to symbol struct
; edi = pointer to tedit struct
;description:
; ­ ©â¨ á«¥¤ãîéãî ¯®§¨æ¨î 㪠§ ­­®£® ᨬ¢®« 
align 4
ted_iterat_next_pos_char:
@@:
cmp bl,byte[edx]
je @f
cmp edx,ted_tex_1
jle @f
call ted_iterat_next
jmp @b
@@:
call ted_iterat_next
ret
 
;input:
; edx = pointer to symbol struct
; edi = pointer to tedit struct
align 4
ted_iterat_perv_color_tag:
@@:
cmp byte[edx+1],0
jne @f
call ted_iterat_perv
cmp edx,ted_tex_1
jle @f
jmp @b
@@:
ret
 
;input:
; edx = pointer to symbol struct
; edi = pointer to tedit struct
align 4
ted_iterat_next_color_tag:
@@:
call ted_iterat_next
cmp byte[edx+1],0
jne @f
cmp edx,ted_tex_1
jle @f
jmp @b
@@:
;call ted_iterat_next
ret
 
;input:
; edx = pointer to symbol struct
; edi = pointer to tedit struct
;output:
; bl = 1 if sumbol not visible
; (tex[i].td+ted_tim_undo<=ted_tim_ch && tex[i].td) || (tex[i].tc>ted_tim_ch-ted_tim_undo)
align 4
ted_symbol_not_vis:
push eax
 
xor bl,bl
 
cmp dword [edx+14],0
je @f
mov eax,[edx+14] ;eax=tex[i].td
add eax,ted_tim_undo
cmp eax,ted_tim_ch
jg @f
mov bl,1
pop eax
ret
@@:
 
mov eax,ted_tim_ch
sub eax,ted_tim_undo
cmp [edx+10],eax
jle @f
or bl,1
@@:
 
pop eax
ret
 
;input:
; text:dword - pointer to text string
; add_opt:dword - options
align 4
proc ted_text_add, edit:dword, text:dword, t_len:dword, add_opt:dword
locals
new_spc dd ? ;count new spaces
new_lin dd ? ;count new lines
endl
;¨á¯®«ì§®¢ ­¨¥ ॣ¨áâ஢ ¢­ãâਠä㭪樨:
;eax - ¯®§¨æ¨ï ¤«ï ¢áâ ¢ª¨ ⥪áâ 
;ebx - ¤«ï ¢à¥¬¥­­ëå ­ã¦¤, ¤«¨­­  ¢áâ ¢«ï¥¬®£® ⥪áâ 
;ecx - ¤«ï ¢à¥¬¥­­ëå ­ã¦¤
;edx - 㪠§ â¥«ì ­  áâàãªâãàã ᨬ¢®« 
pushad
mov edi,dword[edit]
mov esi,dword[text]
 
call ted_get_pos_by_cursor
call ted_get_text_perv_pos
call ted_get_text_arr_index ;eax=po_t
 
mov dword[new_spc],0
cmp ted_gp_opt,2
je @f
push eax ;c_sp=cur[cn].x+Scroller->XPos-StrLen(cur[cn].y+Scroller->YPos);
mov eax,ted_scr_h
mov eax,dword[eax+sb_offs_position]
add eax,ted_cur_x ;eax - ­®¬¥à ᨬ¢®« 
mov dword[new_spc],eax
 
mov eax,ted_scr_w
mov eax,dword[eax+sb_offs_position]
add eax,ted_cur_y ;eax - ­®¬¥à áâப¨
call ted_strlen ;ebx = line len
sub dword[new_spc],ebx ;®â ¯®§¨æ¨¨ ªãàá®à  ®â­¨¬ ¥¬ ¤«¨­­ã áâப¨, 㧭 ¥¬ ª®««¨ç¥á⢮ ¤®¡ ¢«ï¥¬ëå ¯à®¡¥«®¢
pop eax
@@:
 
mov ebx,dword[t_len]
 
mov dword[new_lin],0
cmp ted_gp_opt,0
jne @f
push eax
mov eax,ted_scr_w
mov eax,dword[eax+sb_offs_position]
add eax,ted_cur_y
inc eax
mov dword[new_lin],eax
 
call ted_get_num_lines
sub dword[new_lin],eax
pop eax
@@:
 
mov edx,sizeof.symbol
shl edx,1
add edx,ted_tex
@@: ;for(i=2;i<texMax;i++)
cmp dword [edx+10],0 ;if(!tex[i].tc && !tex[i].td)
jne .u1f
cmp dword [edx+14],0
jne .u1f
test dword[add_opt],ted_opt_ed_change_time ;if(n_tim) ted_tim_ch++;
jz .no_tim
inc ted_tim_ch
.no_tim:
test dword[add_opt],ted_opt_ed_move_cursor
jz .no_cur_mov
cmp dword[new_lin],0 ;¥á«¨ ¥áâì ¤®¡ ¢®ç­ë¥ áâப¨, â® ªãàá®à ¥é¥ ­¥ ¤¢¨£ ¥¬
jg .no_cur_mov
cmp dword[new_spc],0 ;¥á«¨ ­¥â ¤®¡ ¢®ç­ëå ¯à®¡¥«®¢, â® ªãàá®à ⮦¥ ­¥ ¤¢¨£ ¥¬
jg .no_cur_mov
inc ted_cur_x ;move cursor
;call ted_go_to_pos
cmp byte [esi],13
jne .no_cur_mov
mov ted_cur_x,0
inc ted_cur_y
.no_cur_mov:
 
mov ecx,ted_opt_ed_change_time
not ecx
and dword[add_opt],ecx ;n_tim=false;
 
mov cl,byte [esi] ;tex[i].c=ta[ns];
mov byte [edx],cl
m2m dword [edx+10],ted_tim_ch ;tex[i].tc=ted_tim_ch;
mov [edx+2],eax ;tex[i].perv=po_t;
 
mov ecx,eax
imul ecx,sizeof.symbol
add ecx,ted_tex ; *** ecx = tex[po_t] ***
add ecx,6 ; *** ecx = tex[po_t].next ***
m2m dword [edx+6],dword [ecx] ;tex[i].next=tex[po_t].next;
 
call ted_get_text_arr_index ;*** eax = i ***
cmp eax,ted_max_chars
jge @f
mov [ecx],eax ;tex[po_t].next=i; // áá뫪¨ ¯¥à¥­ ¯à ¢«ï¥¬
mov ecx,[edx+6] ; *** ecx = tex[i].next ***
imul ecx,sizeof.symbol
add ecx,ted_tex ; *** ecx = tex[tex[i].next] ***
mov [ecx+2],eax ;tex[tex[i].next].perv=i;
 
cmp dword[new_lin],0 ;add lines or text
jle .spc_add
dec dword[new_lin]
mov byte [edx],13
jmp .u1f
.spc_add:
cmp dword[new_spc],0 ;add spaces or text
jle .tex_add
dec dword[new_spc]
mov byte [edx],' '
jmp .u1f
.tex_add:
inc esi
dec ebx
.u1f:
add edx,sizeof.symbol
cmp edx,ted_tex_end
jge @f ;out of memory
cmp ebx,0
jne @b
@@:
 
call ted_text_colored
popad
ret
endp
 
;input:
; ecx = position to free insert cell
; edx = pointer to sumbol, when insert
; esi = pointer to added symbol
; edi = pointer to tedit struct
;output:
; ecx = position to inserted cell
align 4
ted_char_add:
 
.loop_b:
cmp ecx,ted_tex_end
jge .end_f
cmp dword[ecx+10],0
jne @f
cmp dword[ecx+14],0
je .loop_e
@@:
add ecx,sizeof.symbol
jmp .loop_b
.loop_e:
 
push eax ebx
mov eax,ted_tim_ch
mov dword[ecx+10],eax
mov al,byte[esi]
mov byte[ecx],al
 
call ted_get_text_arr_index ; *** eax=pos ***
mov [ecx+2],eax ;tex[i].perv=pos;
m2m dword[ecx+6],dword[edx+6] ;tex[i].next=tex[pos].next;
 
push edx
mov edx,ecx
call ted_get_text_arr_index ; *** eax=i ***
pop edx
 
mov [edx+6],eax ;tex[pos].next=i; // áá뫪¨ ¯¥à¥­ ¯à ¢«ï¥¬
mov ebx,[ecx+6]
ConvertIndexToPointer ebx
mov [ebx+2],eax ;tex[tex[i].next].perv=i; // ...
pop ebx eax
 
.end_f:
call ted_text_colored
ret
 
 
;input:
; conv_table = pointert to convert table
; edi = pointer to tedit struct
;output:
; esi = count converted symbols
;description:
; ”ã­ªæ¨ï ¨á¯®«ì§ã¥âáï ¤«ï ᬥ­ë ॣ¨áâà  ¢ë¡à ­­ëå ᨬ¢®«®¢
align 4
proc ted_convert_sel_text
locals
conv_cou dd ?
endl
mov dword[conv_cou],0
pushad
 
call ted_is_select
cmp al,0
je .end_f
call ted_set_undo
call ted_sel_normalize
 
mov esi,ted_seln_x0
mov ecx,ted_seln_y0
call ted_get_pos_by_coords
mov eax,edx
mov esi,ted_seln_x1
mov ecx,ted_seln_y1
call ted_get_pos_by_coords
;call ted_get_text_perv_pos
mov ebx,edx
 
cmp eax,ebx
je .end_f
 
inc ted_tim_ch
mov edx,eax ;i=p0;
mov ecx,2
ConvertIndexToPointer ecx
@@:
mov esi,[edx]
and esi,0xff
add esi,[conv_table] ;EvUpper
cmp byte [esi],0
je .no_change
m2m dword [edx+14],ted_tim_ch
call ted_char_add ;b_pos=ted_char_add(tex[i].c^32,i,false,b_pos);
call ted_get_text_next_pos ;go to added symbol
inc dword[conv_cou]
.no_change:
 
call ted_iterat_next
cmp edx,ted_tex
je @f
cmp edx,ebx
je @f
 
jmp @b
@@:
cmp dword[conv_cou],0
jne @f
dec ted_tim_ch
@@:
.end_f:
popad
mov esi,dword[conv_cou]
ret
endp
 
;output:
; bl = 0 - no delete
; bl = 1 - delete
align 4
proc ted_text_del, edit:dword, del_opt:dword
push cx edx edi
mov edi,dword[edit]
mov ebx,dword[del_opt]
 
xor cl,cl
test ebx,ted_opt_ed_move_cursor
jz @f
call ted_cur_move_left
cmp dl,0
je .no_del
@@:
call ted_get_pos_by_cursor
cmp ted_gp_opt,1
je .no_del
test ebx,ted_opt_ed_change_time
jz @f
inc ted_tim_ch
@@:
m2m dword [edx+14], ted_tim_ch
mov cl,1
.no_del:
mov bl,cl
pop edi edx cx
ret
endp
 
;input:
; edi = pointer to tedit struct
;output:
; al = 1 if delete
;description:
; ”ã­ªæ¨ï 㤠«ï¥â ¢ë¤¥«¥­­ë© ⥪áâ
align 4
proc ted_sel_text_del, del_opt:dword
push ebx ecx edx esi
 
call ted_is_select
cmp al,0
je .end_f
 
call ted_sel_normalize
 
mov esi,ted_seln_x1
mov ecx,ted_seln_y1
call ted_get_pos_by_coords
mov ebx,edx
 
mov esi,ted_seln_x0
mov ecx,ted_seln_y0
call ted_get_pos_by_coords
 
test dword[del_opt],ted_opt_ed_change_time
jz @f
inc ted_tim_ch
@@:
cmp edx,ted_tex
je @f
cmp edx,ebx ;if(i==te)break;
je @f
m2m dword[edx+14],ted_tim_ch
mov esi,ted_opt_ed_change_time
not esi
and dword[del_opt],esi ;n_tim=false;
call ted_iterat_next
jmp @b
@@:
test dword[del_opt],ted_opt_ed_change_time
jz @f
dec ted_tim_ch
xor al,al
@@:
test dword[del_opt],ted_opt_ed_change_time
jnz @f
mov ecx,ted_seln_x0
mov edx,ted_seln_y0
call ted_go_to_pos
mov ted_sel_x0,0
mov ted_sel_y0,0
mov ted_sel_x1,0
mov ted_sel_y1,0
@@:
.end_f:
pop esi edx ecx ebx
ret
endp
 
 
;input:
; eax = pointer to begin select
; ebx = pointer to end select
; edi = pointer to tedit struct
align 4
ted_revers:
cmp eax,ebx
jne @f
ret
@@:
 
push ecx edx
 
mov edx,ted_tex_1
cmp edx,ebx ;if(p1==1)p1=tex[1].perv;
jne @f
call ted_get_text_perv_pos
mov ebx,edx
@@:
 
push esi
mov edx,[eax+2] ; *** edx = tex[p0].perv ***
ConvertIndexToPointer edx
add edx,6
mov ecx,[edx] ;tmp = tex[tex[p0].perv].next;
 
mov esi,[ebx+6] ; *** esi = tex[p1].next ***
ConvertIndexToPointer esi
add esi,2
m2m dword[edx],dword[esi] ;tex[tex[p0].perv].next = tex[tex[p1].next].perv;
 
mov [esi],ecx ;tex[tex[p1].next].perv = tmp;
pop esi
 
mov ecx,[eax+2] ;tmp = tex[p0].perv;
m2m dword[eax+2],dword[ebx+6] ;tex[p0].perv = tex[p1].next;
mov [ebx+6],ecx ;tex[p1].next = tmp;
 
mov edx,eax ;i=p0;
@@:
mov ecx,[edx+6] ;tmp = tex[i].next;
m2m dword[edx+6],dword[edx+2] ;tex[i].next = tex[i].perv;
mov [edx+2],ecx ;tex[i].perv = tmp;
cmp edx,ebx ;if(i==p1)break;
je @f
; ---
;cmp edx,ted_tex
;je @f
; ---
mov edx,ecx ;i = tmp;
ConvertIndexToPointer edx
jmp @b
@@:
pop edx ecx
call ted_text_colored
ret
 
 
;input:
; edi = pointer to tedit struct
;output:
; dl = 0 not move
; dl = 2 if move up
; dl = 8 if scroll move up
align 4
ted_cur_move_up:
cmp ted_cur_y,0
je @f
dec ted_cur_y
mov dl,2
ret
@@:
push eax
mov eax,ted_scr_w
cmp dword[eax+sb_offs_position],0
je @f
dec dword[eax+sb_offs_position]
mov dl,8
jmp .ret_f
@@:
mov dl,0
.ret_f:
pop eax
ret
 
;input:
; edi = pointer to tedit struct
;output:
; dl = 0 not move
; dl = 2 if move down
; dl = 8 if scroll move down
align 4
ted_cur_move_down:
push eax ebx
mov ebx,ted_scr_w
mov dl,0
mov eax,dword[ebx+sb_offs_cur_area]
dec eax
cmp ted_cur_y,eax
jge @f
inc ted_cur_y
mov dl,2
jmp .ret_f
@@:
mov eax,ted_cur_y
add eax,dword[ebx+sb_offs_position]
inc eax
cmp dword[ebx+sb_offs_max_area],eax
jle @f
inc dword[ebx+sb_offs_position]
mov dl,8
@@:
.ret_f:
pop ebx eax
ret
 
 
;input:
; edi = pointer to tedit struct
;output:
; dl = 0 not move
; dl = 1 if move up
align 4
ted_cur_move_page_up:
push eax ebx
mov ebx,ted_scr_w
mov eax,dword[ebx+sb_offs_cur_area]
xor dl,dl
cmp eax,dword[ebx+sb_offs_position]
jg @f
sub dword[ebx+sb_offs_position],eax
mov dl,1
@@:
cmp dword[ebx+sb_offs_position],0
je @f
cmp dl,1
je @f
mov dword[ebx+sb_offs_position],0
mov dl,1
@@:
pop ebx eax
ret
 
;input:
; edi = pointer to tedit struct
align 4
ted_cur_move_page_down:
push eax ebx ecx
mov ecx,ted_scr_w
 
xor dl,dl
mov eax,dword[ecx+sb_offs_max_area]
sub eax,dword[ecx+sb_offs_cur_area]
cmp dword[ecx+sb_offs_position],eax
jge @f
mov ebx,dword[ecx+sb_offs_cur_area]
add dword[ecx+sb_offs_position],ebx
mov dl,1
mov dword[ecx+sb_offs_redraw],1
cmp dword[ecx+sb_offs_position],eax
jle @f
mov dword[ecx+sb_offs_position],eax
@@:
pop ecx ebx eax
ret
 
;input:
; edi = pointer to tedit struct
;output:
; dl = 0 not move
; dl = 1 if move left
; dl = 3 if move left and up
; dl = 8 if scroll move up
align 4
ted_cur_move_left:
cmp ted_cur_x,0
je @f
dec ted_cur_x
mov dl,1
ret
@@:
push eax
mov eax,ted_scr_h
cmp dword[eax+sb_offs_position],0
je @f
dec dword[eax+sb_offs_position]
mov dl,8
jmp .ret_f
@@:
cmp ted_cur_y,0
jne @f
mov eax,ted_scr_w
mov dl,0
cmp dword[eax+sb_offs_position],0
je .ret_f
dec dword[eax+sb_offs_position]
call ted_scroll_set_redraw
call ted_cur_move_x_last_char
mov dl,8
jmp .ret_f
@@:
cmp ted_cur_y,0
je @f
dec ted_cur_y
call ted_cur_move_x_last_char
cmp dl,8
je .ret_f
mov dl,3
jmp .ret_f
@@:
mov dl,0
.ret_f:
pop eax
ret
 
;input:
; edi = pointer to tedit struct
align 4
ted_cur_move_right:
push eax ebx
mov eax,ted_scr_h
xor dl,dl
mov ebx,dword[eax+sb_offs_cur_area]
cmp ted_cur_x,ebx
jge @f
inc ted_cur_x
mov dl,1
jmp .ret_f
@@:
inc dword[eax+sb_offs_position]
mov dl,8
.ret_f:
pop ebx eax
ret
 
;input:
; edi = pointer to tedit struct
align 4
ted_cur_move_x_last_char:
;[hScr.position]
;[hScr.cur_area]
;dl-???
push eax ebx ecx
mov eax,ted_cur_y
mov ecx,ted_scr_w
add eax,dword[ecx+sb_offs_position]
call ted_strlen
xor dl,dl
 
mov ecx,ted_scr_h
cmp ebx,dword[ecx+sb_offs_position]
jge @f
mov dl,8
mov dword[ecx+sb_offs_position],ebx
@@:
sub ebx,dword[ecx+sb_offs_position]
 
cmp ebx,dword[ecx+sb_offs_cur_area]
jle @f ; b---[---]---e
add dword[ecx+sb_offs_position],ebx
mov ebx,dword[ecx+sb_offs_cur_area]
sub dword[ecx+sb_offs_position],ebx
mov dl,8
@@:
mov ted_cur_x,ebx
pop ecx ebx eax
ret
 
;input:
; edi = pointer to tedit struct
;output:
; dl = 0 not move
; dl = 1 move cursor
; dl = 8 move cursor and scroll
align 4
ted_cur_move_x_first_char:
xor dl,dl
cmp ted_cur_x,0
je @f
mov ted_cur_x,0
mov dl,1
@@:
push eax
mov eax,ted_scr_h
cmp dword[eax+sb_offs_position],0
je @f
mov dword[eax+sb_offs_position],0
mov dl,8
@@:
pop eax
ret
 
;input:
; edx = pointer to symbol struct
; edi = pointer to tedit struct
;output:
; eax = array index
align 4
ted_get_text_arr_index:
push ecx edx
mov eax,edx
sub eax,ted_tex
xor edx,edx
mov ecx,sizeof.symbol
div ecx
pop edx ecx
ret
 
;input:
; edx = pointer to symbol struct
; edi = pointer to tedit struct
;output:
; edx = pointer to 'perv' struct
align 4
ted_get_text_perv_pos:
mov edx,dword[edx+2]
imul edx,sizeof.symbol
add edx,ted_tex
ret
 
;input:
; edx = pointer to symbol struct
;output:
; edx = pointer to 'next' symbol struct
align 4
ted_get_text_next_pos:
mov edx,dword[edx+6]
imul edx,sizeof.symbol
add edx,ted_tex
ret
 
;input:
; edi = pointer to tedit struct
;output:
; edx = symbol under cursor
; ted_gp_opt = 1,2
; edx = tex[1].perv if error
; ted_gp_opt = 0
align 4
ted_get_pos_by_cursor:
push eax ecx esi
mov esi,ted_cur_x
mov eax,ted_scr_h
add esi,dword[eax+sb_offs_position]
mov ecx,ted_cur_y
mov eax,ted_scr_w
add ecx,dword[eax+sb_offs_position]
call ted_get_pos_by_coords
pop esi ecx eax
ret
 
;input:
; esi = XPos
; ecx = YPos
; edi = pointer to tedit struct
;output:
; edx = symbol under cursor
; ted_gp_opt = 1 if found text line
; ted_gp_opt = 2 if found text line and column
; edx = tex[1] if error
; ted_gp_opt = 0 if text no found
align 4
ted_get_pos_by_coords:
push eax ;Row
push ebx ;Col
 
xor eax,eax
xor ebx,ebx
mov ted_gp_opt,0
mov edx,ted_tex
@@:
call ted_iterat_next
cmp edx,ted_tex_1
jle @f
cmp ebx,esi
jne .u1_0 ;Col <> ted_cur_x
mov ted_gp_opt,1
cmp eax,ecx
jge @f ; Row >= ted_cur_y
.u1_0:
mov ted_gp_opt,0
inc ebx
cmp byte [edx],13
jne @b
cmp eax,ecx
jge @f ; Row >= ted_cur_y
inc eax
xor ebx,ebx
jmp @b
@@:
cmp eax,ecx
jne @f ; Row = ted_cur_y
inc ted_gp_opt
@@:
cmp ted_gp_opt,0
jne @f
mov edx,ted_tex_1
;call ted_get_text_perv_pos
@@:
pop ebx eax
ret
 
 
;input:
; eax = Row
; edi = pointer to tedit struct
;output:
; ebx = str len
align 4
ted_strlen:
push edx ecx
;ecx = Row, from cycle
 
xor ebx,ebx
xor ecx,ecx
mov edx,ted_tex
@@:
call ted_iterat_next
cmp edx,ted_tex_1
jle @f
inc ebx
cmp byte [edx],13
jne @b
dec ebx ;lenght minus 1 sumbol to paragraph
cmp eax,ecx
je @f
xor ebx,ebx
inc ecx
jmp @b
@@:
 
cmp eax,ecx
je @f
xor ebx,ebx
@@:
 
pop ecx edx
ret
 
 
;input:
; edx = symbol position
; edi = pointer to tedit struct
;output:
; eax = number of line
; ebx = symbol position in line
align 4
ted_get_text_coords:
push edx
xor eax,eax
xor ebx,ebx
@@:
call ted_iterat_perv
 
cmp eax,0
jne .no_col_mov
inc ebx
.no_col_mov:
 
cmp edx,ted_tex_1
jle @f
cmp byte [edx],13
jne @b
inc eax
jmp @b
@@:
dec ebx
pop edx
ret
 
;input:
; edi = pointer to tedit struct
;output:
; eax = num lines
align 4
ted_get_num_lines:
push edx
mov eax,1
mov edx,ted_tex
@@:
call ted_iterat_next
cmp edx,ted_tex_1
jle @f
cmp byte [edx],13
jne @b
inc eax
jmp @b
@@:
;...
;dec eax
pop edx
ret
 
 
;input:
; edi = pointer to tedit struct
;description:
; ®â¬¥­ï¥â ®â¬¥­¥­­ë¥ ¤¥©á⢨ï, ¯¥à¥¤ ¨§¬¥­¥­¨¥¬ ¤®ªã¬¥­â 
align 4
proc ted_set_undo
mov ted_drag_k,0 ;§ ª ­ç¨¢ ¥¬ ¢ë¤¥«¥­¨¥ ®â ª« ¢¨ âãàë
cmp ted_tim_undo,1
jl .no_work
 
push eax ebx edx
mov edx,ted_tex
call ted_get_text_next_pos ;long i=tex[0].next;
mov eax,ted_tim_undo
sub ted_tim_ch,eax ;ted_tim_ch-=ted_tim_undo;
mov eax,ted_tim_ch
cmp ted_tim_ls,eax ;if(ted_tim_ls>ted_tim_ch)
jle @f
mov ted_tim_ls,0
@@:
cmp edx,ted_tex
je @f
 
;if(tex[i].tc>ted_tim_ch){ // ¥á«¨ ᮧ¤ ­¨¥ ᨬ¢®«  ¡ë«® ®â¬¥­¥­®
cmp [edx+10],eax
jle .no_u1
mov dword [edx+10],0
mov dword [edx+14],0
 
mov ebx,[edx+2]
imul ebx,sizeof.symbol
add ebx,ted_tex;.next
m2m dword [ebx+6],dword [edx+6] ;tex[tex[i].perv].next=tex[i].next;
 
mov ebx,[edx+6]
imul ebx,sizeof.symbol
add ebx,ted_tex;.perv
m2m dword [ebx+2],dword [edx+2] ;tex[tex[i].next].perv=tex[i].perv;
 
.no_u1:
 
;else if(tex[i].td>ted_tim_ch) tex[i].td=0; // ¥á«¨ 㤠«¥­¨¥ ᨬ¢®«  ¡ë«® ®â¬¥­¥­®
cmp [edx+14],eax
jle .no_u2
mov dword [edx+14],0
.no_u2:
 
call ted_get_text_next_pos
jmp @b
@@:
mov ted_tim_undo,0
mov eax,ted_tim_co
cmp ted_tim_ch,eax
jge @f
mov ted_tim_co,0
@@:
pop edx ebx eax
.no_work:
ret
endp
 
;input:
; ecx = Col
; edx = Row
; edi = pointer to tedit struct
align 4
ted_go_to_pos:
push eax
mov eax,ted_scr_w
mov ted_cur_x,ecx
sub edx,dword[eax+sb_offs_position]
 
cmp edx,dword[eax+sb_offs_cur_area] ;ted_cur_y > [.cur_area]
jl @f
push ebx
mov ebx,edx
sub ebx,dword[eax+sb_offs_cur_area]
inc ebx
add dword[eax+sb_offs_position],ebx
sub edx,ebx
pop ebx
; ??? redrav
@@:
mov ted_cur_y,edx
pop eax
ret
 
;input:
; edi = pointer to tedit struct
align 4
ted_text_colored:
push eax edx
mov eax,ted_tim_ch
sub eax,ted_tim_undo
mov ted_tim_co,eax
mov edx,ted_tex
@@:
call ted_iterat_next
cmp edx,ted_tex_1
jle @f
mov byte[edx+1],0
jmp @b
@@:
 
cmp ted_key_words_count,1
jl .no_colors
mov edx,ted_tex
@@:
call ted_text_find_sel_color
cmp edx,ted_tex_1
jle .no_colors
jmp @b
.no_colors:
pop edx eax
ret
 
 
;input:
; edx = pointer to start symbol
; edi = pointer to tedit struct
;output:
; edx = pointer to next symbol
;description:
; ”ã­ªæ¨ï ¤«ï ¯®¨áª  ¨ ¢ë¤¥«¥­¨ï ¯®¤á¢¥ç¥­ëå á«®¢
align 4
proc ted_text_find_sel_color
locals
begPos dd ? ;­ ç «ì­ ï ¯®§¨æ¨ï
endPos dd ? ;ª®­¥ç­ ï ¯®§¨æ¨ï
find db ? ;­ ©¤¥­® / ­¥ ­ ©¤¥­®
f_color db ? ;¨­¤¥ªá æ¢¥â  ­ ©¤¥­®£® á«®¢ 
endl
push eax ebx ecx esi
;eax = word_n ⥪ã騩 ­®¬¥à (¯®§¨æ¨ï) ¯à®¢¥à塞®£® á«®¢  ¢ ᯨ᪥
;ebx = ¤«ï à §­ëå 楫¥©
;ecx = l_pos ¯®á«¥¤­¨© ­®¬¥à (¯®§¨æ¨ï) ¯®¤å®¤ï饣® á«®¢  ¢ ᯨ᪥
;esi = ¤«ï à §­ëå 楫¥©, ­®¬¥à ¯à®¢¥à塞®£® ᨬ¢®«  ¢ á«®¢¥
mov dword[begPos],1
mov dword[endPos],1
mov byte[find],0
mov byte[f_color],1
@@:
call ted_iterat_next
cmp edx,ted_tex_1
jle @f
 
xor eax,eax
mov al,byte[edx]
shl ax,2 ;eax*=4
add eax,ted_arr_key_pos
mov eax,dword[eax]
cmp eax,0
jl @b ;if( (word_n=ted_arr_key_pos[(unsigned char)tex[i].c])>-1 ){
 
mov ecx,eax
;while(l_pos<ted_key_words_count && Col[l_pos].Text[0]==Col[word_n].Text[0])
.wh_1b:
cmp ecx,ted_key_words_count
jge .wh_1e
ColToIndexOffset ecx,esi
mov bl,byte[esi]
ColToIndexOffset eax,esi
cmp bl,byte[esi]
jne .wh_1e
inc ecx
jmp .wh_1b
.wh_1e:
 
mov dword[begPos],edx ;bP=i;
mov esi,1
 
.wh_2b: ;while(1){
call ted_iterat_next
 
;while(l_pos>word_n && Col[l_pos-1].Text[pos]!=tex[i].c)
.wh_3b:
cmp ecx,eax
jle .wh_3e
dec ecx
ColToIndexOffset ecx,ebx
inc ecx
;cmp byte[ebx+esi],byte[edx]
mov bl,byte[ebx+esi]
cmp bl,byte[edx]
je .wh_3e
dec ecx
jmp .wh_3b
.wh_3e:
 
ColToIndexOffset eax,ebx
cmp byte[ebx+esi],0
jne .if_0 ;if(Col[word_n].Text[pos]==0){
mov dword[endPos],edx ;eP=i;
ColToIndexOffset eax,ebx
mov bl,byte[ebx+MAX_COLOR_WORD_LEN+6]
mov byte[f_color],bl ;f_color=Col[word_n].color;
 
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)
je .if_2n
push edx
mov edx,dword[begPos]
call ted_iterat_perv
 
btr bx,0 ;1-1
jae .if_3e ;if(Col[word_n].wwo&1)
;u1= !(isalnum(cont_s)||cont_s=='_')
call isalnum
jae .if_3e
mov byte[find],0
.if_3e:
 
btr bx,3 ;4-1
jae .if_4e ;if(Col[word_n].wwo&8)
;u1= !isalpha(cont_s);
call isalpha
jae .if_4e
mov byte[find],0
.if_4e:
 
mov edx,dword[endPos]
; call ted_iterat_next
 
btr bx,1 ;2-1
jae .if_5e ;if(Col[word_n].wwo&2)
;u1= !(isalnum(cont_s)||cont_s=='_')
call isalnum
jae .if_5e
mov byte[find],0
.if_5e:
 
btr bx,4 ;5-1
jae .if_6e ;if(Col[word_n].wwo&16)
;u1= !isalpha(cont_s);
call isalpha
jae .if_6e
mov byte[find],0
.if_6e:
 
btr bx,2 ;3-1
jae .if_7e ;if(Col[word_n].wwo&4)
ColToIndexOffset eax,ebx
mov bl,byte[ebx+MAX_COLOR_WORD_LEN+5]
call ted_iterat_next_pos_char
cmp edx,ted_tex_1
jle .if_7e
mov dword[endPos],edx
.if_7e:
 
pop edx
.if_2n:
; 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); // ­¥ ç¨á«. ᨬ¢®«
; if(Col[word_n].wwo&4) eP=ted_iterat_next_pos_char(eP,Col[word_n].endc);
 
cmp eax,ecx
je .wh_2e ;if(word_n==l_pos) break; // do double - ¥á«¨ á«®¢® â®ç­® ¯®á«¥¤­¥¥
.if_0:
 
cmp edx,ted_tex_1
jle .wh_2e ;if(i==1) break;
 
;while(l_pos>word_n && Col[word_n].Text[pos]!=tex[i].c)
.wh_4b:
cmp ecx,eax
jle .wh_4e
ColToIndexOffset eax,ebx
;cmp byte[ebx+esi],byte[edx]
mov bl,byte[ebx+esi]
cmp bl,byte[edx]
je .wh_4e
inc eax
jmp .wh_4b
.wh_4e:
 
cmp eax,ecx
je .wh_2e;if(word_n==l_pos) break;
inc esi ;pos++;
jmp .wh_2b
.wh_2e:
 
cmp byte[find],1 ;if(fnd)break;
je @f
mov edx,dword[begPos];i=bP;
jmp @b
@@:
 
cmp byte[find],1
jne .if_1e ;if(fnd){ // ¢ë¤¥«¥­¨¥ ­ ©¤¥­®£® ⥪áâ 
; 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); // ¢®§¢à é ¥¬ ¯®§¨æ¨î ª®­æ  ¢å®¦¤¥­¨ï
mov edx,dword[endPos]
call ted_get_text_perv_pos
jmp @f
.if_1e:
mov edx,ted_tex
@@:
 
pop esi ecx ebx eax
ret
endp
 
;input:
; edx = pointer to char (byte)
;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
 
align 4
isalnum:
push eax ebx
mov al,byte[edx] ;al=offset
shr al,3
and eax,11111b
lea ebx,[tab_all_num]
add ebx,eax
mov ah,byte[ebx]
mov al,byte[edx] ;al=bit
and ax,111b
mov bx,word[ebx]
btr bx,ax
pop ebx eax
ret
align 4
isalpha:
push eax ebx
mov al,byte[edx] ;al=offset
shr al,3
and eax,11111b
lea ebx,[tab_alpha]
add ebx,eax
mov ah,byte[ebx]
mov al,byte[edx] ;al=bit
and ax,111b
mov bx,word[ebx]
btr bx,ax
pop ebx eax
ret
 
align 4
proc ted_show_help_f1, edit:dword
push eax edx edi
mov edi,dword[edit]
 
call ted_get_pos_by_cursor
push edx
call ted_iterat_next_color_tag
mov eax,edx
pop edx
call ted_iterat_perv_color_tag
 
cmp eax,ted_tex
jle @f
cmp edx,ted_tex_1
jle @f
stdcall ted_find_help_id,eax
@@:
;call ted_draw_main_cursor
call ted_draw_help_f1
pop edi edx eax
ret
endp
 
;input:
; edx = position begin 'symbol' struct
; edi = pointer to tedit struct
; end_pos = position end 'symbol' struct
align 4
proc ted_find_help_id, end_pos:dword
; ecx = word_n
; ebx = l_pos
mov ted_help_id,-1
 
push ebx ecx
xor ebx,ebx
mov bl,byte[edx]
shl bx,2 ;ebx*=4
add ebx,ted_arr_key_pos
mov ecx,dword[ebx]
cmp ecx,0
jl .if_0e ;if( (word_n=ted_arr_key_pos[(unsigned char)tf[0]])>-1 ){
push esi eax
mov ebx,ecx ;l_pos=word_n;
ColToIndexOffset ecx,esi
push cx
mov cl,byte[esi]
@@:
cmp ebx,ted_key_words_count ;while(l_pos<ted_key_words_count)
jge @f
;ColToIndexOffset ecx,esi
ColToIndexOffset ebx,eax
cmp cl,byte[eax] ;&& Col[l_pos].Text[0]==Col[word_n].Text[0])
jne @f
inc ebx ;l_pos++;
jmp @b
@@:
pop cx
call ted_iterat_next ;pos=1;
mov esi,1
@@:
push dx
push word[edx]
pop dx
.wh_0b:
cmp ebx,ecx ;while(l_pos>word_n
jle .wh_0e
dec ebx
ColToIndexOffset ebx,eax
inc ebx
cmp byte[eax+esi],dl ;&& Col[l_pos-1].Text[pos]!=tf[i])
je .wh_0e
dec ebx ;l_pos--;
jmp .wh_0b
.wh_0e:
 
.wh_1b:
cmp ebx,ecx ;while(l_pos>word_n
jle .wh_1e
ColToIndexOffset ecx,eax
cmp byte[eax+esi],dl
je .wh_1e
inc ecx ;word_n++;
jmp .wh_1b
.wh_1e:
pop dx
 
cmp ecx,ebx ;if(word_n==l_pos) break;
je @f
call ted_iterat_next ;pos++;
cmp edx,dword[end_pos] ;for(...;i<strlen;...)
je @f ;jge
inc esi
jmp @b
@@:
pop eax esi
 
mov ted_help_id,ecx
;return word_n;
 
.if_0e:
pop ecx ebx
ret
endp
 
;output:
; eax = ª®¤ ®è¨¡ª¨
; ebx = ª®««¨ç¥á⢮ ¯à®ç¨â ­­ëå ¡ ©â
align 4
proc ted_open_file, edit:dword, file:dword, f_name:dword ;äã­ªæ¨ï ®âªàëâ¨ï ä ©« 
push edi
mov edi,dword[edit]
 
mov eax,70
mov ebx,dword[file]
mov dword[ebx], 0
mov dword[ebx+4], 0
mov dword[ebx+8], 0
m2m dword[ebx+12], ted_max_chars ;ç¨á«® ¡ ©â, ª®â®àë¥ ¬®£ãâ ¡ëâì áç¨â ­ë á ä ©« 
m2m dword[ebx+16], ted_tex
mov byte[ebx+20], 0
push dword[f_name]
pop dword[ebx+21]
int 0x40
 
cmp eax,0
je @f
cmp eax,6
je @f
jmp .ret_f
@@:
cmp ebx,-1
je .ret_f
;if open file
call ted_on_open_file
.ret_f:
pop edi
ret
endp
 
align 4
proc ted_but_select_word, edit:dword
pushad
mov edi,dword[edit]
 
call ted_get_pos_by_cursor
push edx
call ted_iterat_perv_color_tag
cmp edx,ted_tex_1
jle @f
call ted_get_text_coords
mov ted_sel_x0,ebx
mov ted_sel_y0,eax
@@:
pop edx
call ted_iterat_next_color_tag
cmp edx,ted_tex_1
jle @f
call ted_get_text_coords
mov ted_sel_x1,ebx
mov ted_sel_y1,eax
@@:
 
cmp ted_fun_draw_panel_buttons,0
je @f
call ted_fun_draw_panel_buttons
@@:
stdcall ted_draw,edi
popad
ret
endp
 
align 4
proc ted_but_cut, edit:dword
push edi
mov edi,dword[edit]
 
stdcall ted_but_copy,edi
call ted_set_undo
stdcall ted_sel_text_del,ted_opt_ed_change_time
 
cmp al,1
jne @f
stdcall ted_draw,edi
cmp ted_fun_draw_panel_buttons,0
je @f
call ted_fun_draw_panel_buttons
@@:
pop edi
ret
endp
 
;output:
; al = 1 if copy text
align 4
proc ted_but_copy, edit:dword
pushad
mov edi,dword[edit]
 
call ted_is_select
cmp al,0
je .end_f ;if not selected text
call ted_sel_normalize
 
mov esi,ted_seln_x1
mov ecx,ted_seln_y1
call ted_get_pos_by_coords
mov ebx,edx
mov esi,ted_seln_x0
mov ecx,ted_seln_y0
call ted_get_pos_by_coords
mov esi,ebx
 
xor ecx,ecx
mov ebx,ted_buffer
;mov edx,ted_tex
@@:
cmp edx,ted_tex_1 ;end of file
jle @f
cmp edx,esi ;end of select
je @f
inc ecx
cmp ecx,ted_buffer_size ;owerflow bufer
je @f
 
mov al,byte[edx]
mov byte[ebx],al
inc ebx
 
call ted_iterat_next
jmp @b
@@:
add ecx,ted_buffer
mov byte[ebx],0
 
cmp ecx,0
je .end_f
call ted_draw_buffer
cmp ted_fun_draw_panel_buttons,0
je .end_f
call ted_fun_draw_panel_buttons
.end_f:
popad
ret
endp
 
 
align 4
proc ted_but_paste, edit:dword
push eax ebx esi edi
mov edi,dword[edit]
 
mov esi,ted_buffer
call tl_strlen
cmp eax,1
jl @f
mov esi,eax
call ted_set_undo
mov ebx,ted_opt_ed_change_time+ted_opt_ed_move_cursor
stdcall ted_sel_text_del,ebx
cmp al,1
jne .del
mov ebx,ted_opt_ed_move_cursor
.del:
stdcall ted_text_add,edi,ted_buffer,esi,ebx
stdcall ted_draw,edi
cmp ted_fun_draw_panel_buttons,0
je @f
call ted_fun_draw_panel_buttons
@@:
pop edi esi ebx eax
ret
endp
 
align 4
proc ted_but_sumb_upper, edit:dword
push edi esi
mov edi,dword[edit]
 
mov [conv_table],EvUpper
call ted_convert_sel_text
cmp esi,0
je @f
stdcall ted_draw,edi
@@:
pop esi edi
ret
endp
 
align 4
proc ted_but_sumb_lover, edit:dword
push edi esi
mov edi,dword[edit]
 
mov [conv_table],EvLover
call ted_convert_sel_text
cmp esi,0
je @f
stdcall ted_draw,edi
@@:
pop esi edi
ret
endp
 
align 4
proc ted_but_reverse, edit:dword
push eax ebx edi
mov edi,dword[edit]
 
call ted_is_select
cmp al,0
je @f
call ted_sel_normalize
push esi ecx edx
mov esi,ted_seln_x0
mov ecx,ted_seln_y0
call ted_get_pos_by_coords
mov eax,edx
mov esi,ted_seln_x1
cmp esi,0
je .beg_str
dec esi
.beg_str:
mov ecx,ted_seln_y1
call ted_get_pos_by_coords
;call ted_get_text_perv_pos
mov ebx,edx
pop edx ecx esi
;cmp eax,...
;je @f
call ted_revers
@@:
stdcall ted_draw,edi
pop edi ebx eax
ret
endp
 
align 4
proc ted_but_undo, edit:dword
push eax edi
mov edi,dword[edit]
 
mov eax,ted_tim_undo
cmp ted_tim_ch,eax
jbe @f
inc ted_tim_undo
;call ted_text_colored
stdcall ted_draw,edi
cmp ted_fun_draw_panel_buttons,0
je @f
call ted_fun_draw_panel_buttons
@@:
pop edi eax
ret
endp
 
align 4
proc ted_but_redo, edit:dword
push edi
mov edi,dword[edit]
 
cmp ted_tim_undo,1
jb @f
dec ted_tim_undo
;call ted_text_colored
stdcall ted_draw,edi
cmp ted_fun_draw_panel_buttons,0
je @f
call ted_fun_draw_panel_buttons
@@:
pop edi
ret
endp
 
align 4
proc ted_but_find_next, edit:dword
pushad
mov edi,dword[edit]
 
call ted_get_pos_by_cursor
mov eax,ted_buffer_find
mov bl,byte[eax]
@@:
call ted_get_find_rezult
cmp bh,1
je @f ; find
call ted_iterat_next
cmp edx,ted_tex_1
jle @f
jmp @b
@@:
cmp bh,0
je @f
call ted_get_text_coords
inc ebx ;move cursor right
mov ted_sel_x1,ebx
mov ted_sel_y1,eax
mov edx,eax
mov ecx,ebx
call ted_go_to_pos
mov edx,esi ;esi ¡ë«® ãáâ ­®¢«¥® ¢ ted_get_find_rezult
call ted_get_text_coords
mov ted_sel_x0,ebx
mov ted_sel_y0,eax
stdcall ted_draw,edi
jmp .end_find
@@:
;¯®¯ ¤ ¥¬ á ¥á«¨ ⥪áâ ­¥ ­ ©¤¥­
cmp ted_fun_find_err,0
je .end_find
call ted_fun_find_err ;¯®«ì§®¢ â¥«ì᪠ï äã­ªæ¨ï
.end_find:
popad
ret
endp
 
;input:
; edi = pointer to tedit struct
align 4
ted_key_ctrl_home:
mov ted_cur_x,0
mov ted_cur_y,0
push eax
mov eax,ted_scr_w
mov dword[eax+sb_offs_position],0
mov eax,ted_scr_h
mov dword[eax+sb_offs_position],0
pop eax
stdcall ted_draw,edi
cmp ted_fun_draw_panel_buttons,0
je @f
call ted_fun_draw_panel_buttons
@@:
ret
 
;input:
; edi = pointer to tedit struct
align 4
proc ted_sel_key_up
cmp ted_drag_k,1
je @f
call ted_sel_start
mov ted_drag_k,1
@@:
push dx
call ted_cur_move_up
cmp dl,8
jne @f
call ted_scroll_set_redraw
@@:
pop dx
call ted_sel_move
stdcall ted_draw,edi
ret
endp
 
;input:
; edi = pointer to tedit struct
align 4
proc ted_sel_key_down
cmp ted_drag_k,1
je @f
call ted_sel_start
mov ted_drag_k,1
@@:
push dx
call ted_cur_move_down
cmp dl,8
jne @f
call ted_scroll_set_redraw
@@:
pop dx
call ted_sel_move
stdcall ted_draw,edi
ret
endp
 
;input:
; edi = pointer to tedit struct
align 4
proc ted_sel_key_left
cmp ted_drag_k,1
je @f
call ted_sel_start
@@:
push dx
call ted_cur_move_left
call ted_sel_move
cmp ted_drag_k,1
je @f
mov ted_drag_k,1
mov dl,8
@@:
cmp dl,8
jne @f
call ted_scroll_set_redraw
stdcall ted_draw,edi
jmp .end_f
@@:
stdcall ted_draw_cur_line,edi
.end_f:
pop dx
ret
endp
 
;input:
; edi = pointer to tedit struct
align 4
proc ted_sel_key_right
cmp ted_drag_k,1
je @f
call ted_sel_start
@@:
push dx
call ted_cur_move_right
call ted_sel_move
cmp ted_drag_k,1
je @f
mov ted_drag_k,1
mov dl,8
@@:
cmp dl,8
jne @f
call ted_scroll_set_redraw
stdcall ted_draw,edi
jmp .end_f
@@:
stdcall ted_draw_cur_line,edi
.end_f:
pop dx
ret
endp
 
;input:
; edi = pointer to tedit struct
;description:
; this function need to optimize output
align 4
proc ted_draw_cursor_sumb
pushad
 
mov eax,13 ;rect
mov ebx,ted_wnd_l
add ebx,ted_rec_l
mov edx,ted_cur_x
imul edx,ted_rec_w
add ebx,edx
shl ebx,16
add ebx,ted_rec_w
 
mov ecx,ted_wnd_t ;calc rect -> y0,y1
add ecx,ted_rec_t
mov edx,ted_cur_y
imul edx,ted_rec_h
add ecx,edx
shl ecx,16
add ecx,ted_rec_h
 
mov edx,ted_color_wnd_work
push ecx
call ted_sel_normalize
 
mov esi,ted_scr_w
mov ecx,dword[esi+sb_offs_position]
sub ted_seln_y0,ecx
sub ted_seln_y1,ecx
 
mov ecx,ted_cur_y
cmp ecx,ted_seln_y0
jl .no_cur_sel
cmp ecx,ted_seln_y1
jg .no_cur_sel
mov edx,ted_color_select ;¬¥­ï¥¬ 梥â ä®­  ­  梥⠢뤥«¥­¨ï
mov esi,ted_scr_h
cmp ecx,ted_seln_y0
jne @f
mov ecx,ted_cur_x
add ecx,dword[esi+sb_offs_position]
cmp ecx,ted_seln_x0
jge @f
mov edx,ted_color_wnd_work
@@:
 
mov ecx,ted_cur_y
cmp ecx,ted_seln_y1
jne .no_cur_sel
mov ecx,ted_cur_x
add ecx,dword[esi+sb_offs_position]
cmp ecx,ted_seln_x1
jl .no_cur_sel
mov edx,ted_color_wnd_work
 
.no_cur_sel:
pop ecx
int 0x40 ;à¨á®¢ ­¨¥ ¯àאַ㣮«ì­¨ª 
 
call ted_get_pos_by_cursor ;¡¥à¥¬ ¯®§¨æ¨î ᨬ¢®« 
cmp ted_gp_opt,2
jne @f
mov eax,4
mov esi,1
ror ecx,16
mov bx,cx
add ebx,0x10001
call ted_get_symb_color
call ted_convert_invis_symb
int 0x40 ;à¨á®¢ ­¨¥ ᨬ¢®« 
@@:
 
popad
ret
endp
 
;input:
; edx -> pointer to text
; edi -> 㪠§ â¥«ì ­  áâàãªâãàã tedit
;output:
; ecx = color
; if ted_mode_color=0 then ecx=ted_color_wnd_text
align 4
ted_get_symb_color:
mov ecx,ted_color_wnd_text ;§ ¤ ¥¬ 梥â ⥪áâ  ¯® 㬮«ç ­¨î
 
push eax edx
cmp ted_mode_color,0
je .exit
jmp .on_first
@@:
call ted_iterat_perv
cmp edx,ted_tex_1
jle .exit
.on_first:
xor eax,eax
mov al,byte[edx+1]
cmp al,0 ;¥á«¨ al=0 ⮠梥⠭¥ ¬¥­ï¥âáï
je @b
 
cmp eax,ted_colors_text_count
jge .exit
 
shl ax,2 ;㬭®¦ ¥¬ ¨­¤¥ªá æ¢¥â  ­  4 ¡ ©â 
mov ecx,ted_text_colors ;¯à¨¡ ¢«ï¥¬ ᬥ饭¨¥ 1-£® 梥â 
add ecx,eax
mov ecx,dword[ecx] ;ãáâ ­ ¢«¨¢ ¥¬ ⥪ã騩 梥â ⥪áâ  ¯® ᬥ饭¨î
.exit:
pop edx eax
ret
 
;input:
; edx = pointer to text
; edi = pointer to tedit struct
;description:
; ”ã­ªæ¨ï ¯à¥®¡à §ã¥â ­¥¢¨¤¨¬ë¥ ᨬ¢®«ë ¢ ¯¥ç â ¥¬ë¥ ­  íªà ­¥
align 4
ted_convert_invis_symb:
cmp ted_mode_invis,1
jne @f
cmp byte[edx],13
jne @f
mov edx,edi
add edx,ted_offs_symbol_new_line
@@:
ret
 
;input:
; edi = pointer to tedit struct
align 4
ted_scroll_set_redraw:
push eax
mov eax,ted_scr_w
mov dword[eax+sb_offs_redraw],1
mov eax,ted_scr_h
mov dword[eax+sb_offs_redraw],1
pop eax
ret
 
align 4
proc ted_draw, edit:dword
locals
line_num dd ?
endl
pushad
mov edi,dword[edit]
 
mov eax,4 ;draw text
mov ecx,ted_text_colors
mov ecx,dword[ecx]
 
mov ebx,ted_wnd_l
add ebx,ted_rec_l
shl ebx,16
add ebx,ted_wnd_t
add ebx,ted_rec_t
add ebx,0x10001 ;¤®¡ ¢«ï¥¬ ®âáâã¯ë ¤«ï ¢ëà ¢­¨¢ ­¨ï ¡ãª¢ë ¯® 業âàã
 
call ted_sel_normalize ;need before draw select
mov esi,ted_scr_w
mov esi,dword[esi+sb_offs_position]
mov dword[line_num],esi
 
stdcall ted_clear_line_before_draw, edi,ebx,1,esi
call ted_get_first_visible_pos
cmp edx,0
je .no_draw_text
mov esi,1 ;¤«¨­­  ¢ë¢®¤¨¬®£® ⥪áâ  ¯® 1-¬ã ᨬ¢®«ã
@@:
call ted_iterat_next
cmp edx,ted_tex_1
jle .no_draw_text
 
; *** 梥⮢ ï à §¬¥âª 
cmp ted_mode_color,0
je .no_col_change
cmp byte[edx+1],0
je .no_col_change
call ted_get_symb_color
.no_col_change:
 
cmp byte [edx],13
jne .no_13
cmp ted_mode_invis,1
jne .no_invis
push edx
mov edx,edi
add edx,ted_offs_symbol_new_line
int 0x40
pop edx
.no_invis:
add ebx,ted_rec_h
;optimized output \/
mov eax,ted_wnd_h
add eax,ted_wnd_t
cmp bx,ax
jg .no_draw_text
mov eax,4
;optimized output /\
and ebx,0xffff
ror ebx,16
add ebx,ted_wnd_l
add ebx,ted_rec_l
inc ebx
ror ebx,16
inc dword[line_num] ;increment line number
stdcall ted_clear_line_before_draw,edi,ebx,1,dword[line_num]
call ted_opt_draw_line_left
jmp @b
.no_13:
 
int 0x40
ror ebx,16
add ebx,ted_rec_w
mov esi,ted_wnd_l
add esi,ted_wnd_w
cmp bx,si
jl .no_opt
call ted_opt_draw_line_right
.no_opt:
mov si,1
ror ebx,16
jmp @b
.no_draw_text:
 
stdcall ted_clear_line_before_draw,edi,ebx,0,dword[line_num]
call ted_draw_line_numbers
call ted_draw_main_cursor
 
;---------------------------------------------
; set all_redraw flag for draw all ScrollBar
; In some cases it is necessity to draw only the area
; of moving of a "runner", for acceleration of output -
; in this case the flag needs to be reset to 0 (zero).
mov eax,ted_scr_h
mov esi,ted_scr_w
mov dword[eax+sb_offs_all_redraw],1
mov dword[esi+sb_offs_all_redraw],1
 
; à¨á®¢ ­¨¥ ¯®«®á ¯à®ªàã⪨
stdcall scroll_bar_horizontal.draw,eax ;[scrollbar_hor_draw]
stdcall scroll_bar_vertical.draw,esi ;[scrollbar_ver_draw]
; reset all_redraw flag
mov dword[eax+sb_offs_all_redraw],0
mov dword[esi+sb_offs_all_redraw],0
;---------------------------------------------
 
;left-bottom square
mov ebx,ted_wnd_l
shl ebx,16
add ebx,ted_rec_l
mov ecx,ted_wnd_t
add ecx,ted_wnd_h
shl ecx,16
mov cx,word[eax+sb_offs_size_y]
inc cx
mov edx,ted_color_wnd_capt ;[sc.work]
mov eax,13
int 0x40
 
;right-bottom square
mov ebx,ted_wnd_l
add ebx,ted_wnd_w
shl ebx,16
mov bx,word[esi+sb_offs_size_x]
inc bx
int 0x40
 
cmp ted_fun_draw_panel_find,0
je @f
call ted_fun_draw_panel_find
@@:
cmp ted_fun_draw_panel_syntax,0
je @f
call ted_fun_draw_panel_syntax
@@:
popad
ret
endp
 
;input:
; edi = pointer to tedit struct
align 4
proc ted_draw_main_cursor
pushad
 
mov eax,13 ;draw cursor
mov ecx,ted_wnd_t ;calc rect -> y0,y1
add ecx,ted_rec_t
mov edx,ted_cur_y
imul edx,ted_rec_h
add ecx,edx
 
cmp ted_cur_ins,1 ;¯à®¢¥àª  ०¨¬  à ¡®âë ªãàá®à  (®¡ëç­ë© ¨«¨ ¢áâ ¢ª )
jne @f
mov edx,ted_rec_h
inc edx ;1->1, 3->2, 5->3, ...
shr edx,1 ;edx = ¢ëá®â  áâப¨ ¤¥«¥­­ ï ­  2 (ª®£¤  ªãàá®à ­¥ ¯®«­ë©)
add ecx,edx
@@:
shl ecx,16
add ecx,ted_rec_h
cmp ted_cur_ins,1
jne @f
shr cx,1 ;¤¥«¨¬ ¢ëá®âã ªãàá®à  ­  2
@@:
 
mov ebx,ted_wnd_l ;calc rect -> x0,x1
add ebx,ted_rec_l
mov edx,ted_cur_x
imul edx,ted_rec_w
add ebx,edx
shl ebx,16
add ebx,ted_rec_w
 
mov edx,ted_color_cursor
int 0x40 ;¢ë¢®¤ ªãàá®à 
 
call ted_get_pos_by_cursor
cmp ted_gp_opt,2
jne @f
mov eax,4 ;draw text
mov esi,1
ror ecx,16
mov bx,cx
add ebx,0x10001
cmp ted_cur_ins,1
jne .no_up_tetx
mov ecx,ted_rec_h
inc cx ; 1->1, 3->2, 5->3, ...
shr cx,1
sub bx,cx
.no_up_tetx:
mov ecx,ted_color_cur_text
call ted_convert_invis_symb
int 0x40
@@:
 
mov eax,4
mov ebx,ted_wnd_l
add ebx,ted_rec_l
shl ebx,16
add ebx,ted_wnd_t
add ebx,3
mov ecx,ted_color_wnd_bord
or ecx,0x80000000
lea edx,[txtRow]
int 0x40 ;¢ë¢®¤ ¯®¤¯¨á¨ '‘âப '
 
add ebx,0x500000
lea edx,[txtCol]
int 0x40 ;¢ë¢®¤ ¯®¤¯¨á¨ '‡­ ª'
 
cmp ted_tim_undo,0
je @f
add ebx,0x500000
lea edx,[txtOtm]
int 0x40
sub ebx,0x500000
@@:
 
call ted_draw_buffer
call ted_draw_help_f1
 
mov eax,47 ;draw cursor coords
mov esi,ted_color_wnd_bord
or esi,0x40000000
 
mov edx,ebx
ror edx,16
sub edx,35
ror edx,16
;add edx,3
mov ebx,0x40000 ;Row=...
mov ecx,ted_scr_w
mov ecx,dword[ecx+sb_offs_position]
add ecx,ted_cur_y
inc ecx
 
push edi
mov edi,ted_color_wnd_work
int 0x40 ;¢ë¢®¤ ç¨á«  ⥪ã饩 áâப¨
pop edi
 
;mov ebx,0x40000 ;Col=...
mov ecx,ted_scr_h
mov ecx,dword[ecx+sb_offs_position]
add ecx,ted_cur_x
inc ecx
add edx,0x500000
push edi
mov edi,ted_color_wnd_work
int 0x40 ;¢ë¢®¤ ç¨á«  §­ ª®¢
pop edi
 
cmp ted_tim_undo,0
je @f
mov ecx,ted_tim_undo
add edx,0x500000
int 0x40
@@:
 
popad
ret
endp
 
;input:
; edi = pointer to tedit struct
proc ted_draw_buffer
pushad
 
mov eax,ted_buffer
cmp byte[eax],0 ;ᬮâਬ 1-© ᨬ¢®« ¨§ ¡ãä¥à 
je @f
mov ebx,ted_wnd_l
add ebx,ted_rec_l
add bx,300
shl ebx,16
add ebx,ted_wnd_t
add ebx,3
mov ecx,ted_color_wnd_bord
or ecx,0x40000000
 
mov edx,ted_buffer
mov esi,edx
mov edi,ted_color_wnd_work ;edi - destroy not pointer to tedit
call tl_strlen
;cmp eax,0 ;¡ãä¥à ¯ãáâ
;je @f
cmp eax,20
jle .crop_buf
mov eax,20 ;®¡à¥§ª  ¯®¤¯¨á¨ ¤® 20 ᨬ¢®«®¢
.crop_buf:
mov esi,eax
mov eax,4
int 0x40 ;¢ë¢®¤ ᮤ¥à¦¨¬®£® ¡ãä¥à 
 
sub ebx,50 shl 16
lea edx,[txtBuf]
mov esi,edx
call tl_strlen
mov esi,eax
mov eax,4
xor ecx,0x40000000 ;㡨ࠥ¬ 梥â ä®­ 
int 0x40 ;¢ë¢®¤ ¯®¤¯¨á¨ ¤«ï ¡ãä¥à 
@@:
popad
ret
endp
 
;input:
; edi = pointer to tedit struct
align 4
proc ted_draw_help_f1
pushad
 
mov eax,13 ;clear place before draw help
mov ebx,ted_wnd_l
add ebx,ted_rec_l
shl ebx,16
add ebx,ted_wnd_w
sub ebx,ted_rec_l
mov ecx,ted_wnd_t
add ecx,13
shl ecx,16
add ecx,ted_rec_h
mov edx,ted_color_wnd_capt
int 0x40
 
cmp ted_help_id,-1
je @f
mov eax,ted_help_id
ColToIndexOffset eax,edx
 
;SetCoordinates
mov ebx,ted_wnd_l
add ebx,ted_rec_l
shl ebx,16
add ebx,ted_wnd_t
add ebx,13 ;=3+10
 
;SetTextColor
xor eax,eax
mov al,byte[edx+MAX_COLOR_WORD_LEN+6]
shl ax,2
mov ecx,ted_text_colors
add ecx,eax
mov ecx,dword[ecx]
or ecx,0xc0000000 ;SetTextStyles
mov esi,edi
mov edi,ted_color_wnd_work
mov eax,4
int 0x40
mov edi,esi
 
;*** draw help string ***
mov ecx,ted_color_wnd_bord
or ecx,0x80000000
mov edx,dword[edx+MAX_COLOR_WORD_LEN]
cmp edx,0
je @f
add edx,ted_help_text_f1
add ebx,0x500000
int 0x40
@@:
popad
ret
endp
 
;input:
; edi = pointer to tedit struct
align 4
proc ted_draw_line_numbers
pushad
 
;top panel with caption
mov ebx,ted_wnd_l
; add ebx,ted_rec_l
shl ebx,16
add ebx,ted_wnd_w
; sub ebx,ted_rec_l
mov edx,ted_color_wnd_work
mov ecx,ted_wnd_t
shl ecx,16
add ecx,ted_rec_t
mov eax,13
mov edx,ted_color_wnd_capt
int 0x40
 
;line numbers
mov ebx,0x40000 ;format
mov ecx,ted_scr_w
mov ecx,dword[ecx+sb_offs_position]
inc ecx
mov edx,3
add edx,ted_wnd_l
rol edx,16
add edx,ted_wnd_t
add edx,ted_rec_t
@@:
 
push ebx ecx edx
;left panel with numbers
mov ebx,ted_wnd_l
shl ebx,16
add ebx,ted_rec_l
mov ecx,ted_rec_h
rol ecx,16
mov cx,dx
rol ecx,16
mov eax,13
mov edx,ted_color_wnd_capt
int 0x40 ;à¨á㥬 ¯àאַ㣮«ì­¨ª ¯®¤ ­®¬¥à®¬ áâப¨
pop edx ecx ebx
 
mov eax,47
mov esi,ted_color_wnd_bord
int 0x40 ;à¨á㥬 ­®¬¥à áâப¨
inc ecx
add edx,ted_rec_h
sub edx,ted_wnd_t
mov esi,edx
and esi,0xffff
cmp esi,ted_wnd_h
jge @f
add edx,ted_wnd_t
jmp @b
@@:
 
popad
ret
endp
 
;output:
; ah = symbol
align 4
proc KeyConvertToASCII, table:dword
push ebx
mov ebx,dword[table] ;convert scan to ascii
ror ax,8
xor ah,ah
add bx,ax
mov ah,byte[ebx]
pop ebx
ret
endp
 
align 4
proc ted_draw_cur_line, edit:dword
pushad
mov edi,dword[edit]
 
mov ebx,ted_wnd_l
add ebx,ted_rec_l
shl ebx,16
mov eax,ted_cur_y
imul eax,ted_rec_h
mov bx,ax
add ebx,ted_wnd_t
add ebx,ted_rec_t ;ebx - ª®®à¤¨­ âë ¤«ï ¯àאַ㣮«ì­¨ª  ®ç¨á⪨ «¨­¨¨
add ebx,0x10001 ;¤®¡ ¢«ï¥¬ ®âáâã¯ë ¤«ï ¢ëà ¢­¨¢ ­¨ï ¡ãª¢ë ¯® 業âàã
 
call ted_sel_normalize ;need before draw select
mov ecx,ted_cur_y
mov eax,ted_scr_w
add ecx,dword[eax+sb_offs_position]
stdcall ted_clear_line_before_draw,edi,ebx,1,ecx
 
mov eax,ted_scr_h
mov esi,dword[eax+sb_offs_position]
call ted_get_pos_by_coords
 
cmp ted_gp_opt,2
jne .no_draw_text
; mov eax,4 ;draw text
call ted_get_symb_color
mov esi,1 ;draw 1 symbol
@@:
;call ted_iterat_next
cmp edx,ted_tex_1
jle .no_draw_text
 
; *** 梥⮢ ï à §¬¥âª 
cmp ted_mode_color,0
je .no_col_change
cmp byte[edx+1],0
je .no_col_change
call ted_get_symb_color
.no_col_change:
 
mov eax,4 ;draw text
cmp byte [edx],13
jne .no_13
cmp ted_mode_invis,1
jne .no_draw_text
push edx
mov edx,edi
add edx,ted_offs_symbol_new_line
int 0x40
pop edx
jmp .no_draw_text
.no_13:
 
int 0x40
ror ebx,16
add ebx,ted_rec_w
mov eax,ted_wnd_w
add eax,ted_wnd_l ;ax = ®âáâ㯠¯® ®á¨ x
cmp bx,ax
jge .no_draw_text ;Opt
ror ebx,16
call ted_iterat_next
jmp @b
.no_draw_text:
 
call ted_draw_main_cursor
popad
ret
endp
 
;input:
; eax - text need find
; bl - first symbol to find
; edx - first symbol pointer
; edi - pointer to tedit struct
;output:
; bh - rezult
; edx - last text position (if find sucess)
; esi - first symbol pointer
;description:
; ”ã­ªæ¨ï ¯à®¢¥àï¥â ᮢ¯ ¤ ¥â «¨ ⥪áâ ¢ ¡ãä¥à¥ eax
; á ⥪á⮬ । ªâ®à  ¯® 㪠§ â¥«î edx.
; ‘â ­¤ àâ­ë¥ ä㭪樨 (­ ¯à. strcmp) âãâ ­¥ ¯®¤®©¤ãâ, ¯®â®¬ã çâ®
; ¢ ¯ ¬ï⨠। ªâ®à  ⥪áâ ᮤ¥à¦¨âáï ­¥ ¢ ¢¨¤¥ ascii áâப.
align 4
ted_get_find_rezult:
push eax
mov bh,1
mov esi,edx ;copy edx
@@:
cmp byte[edx],bl
jne .no_text
 
inc eax ;*** get next symbol (in find text) ***
mov bl,byte[eax]
cmp bl,0
je @f ;end of find text
 
call ted_iterat_next ;*** get next symbol (in editor text) ***
cmp edx,ted_tex_1
jle @f ;end of editor text
 
jmp @b
.no_text:
xor bh,bh
mov edx,esi ;restore edx
@@:
pop eax
mov bl,byte[eax] ;restore bl
ret
 
;input:
; clear_o - ¥á«¨ =1 ®ç¨áâ¨âì ®¤­ã áâபã, =0 ®ç¨áâ¨âì ¢á¥ áâப¨ ®ª­  ¤® ­¨§ã
align 4
proc ted_clear_line_before_draw, edit:dword, coords:dword, clear_o:dword, numb_lin:dword
pushad
mov edi,dword[edit]
mov ebx,dword[coords] ;ebx = x*2^16+y coords to left up point clear line
mov esi,dword[numb_lin] ;esi - number text line
 
sub ebx,0x10001 ;®â­¨¬ ¥¬ ®âáâã¯ë ¤«ï ¢ëà ¢­¨¢ ­¨ï ¡ãª¢ë ¯® 業âàã
cmp dword[clear_o],0
jne @f
add ebx,ted_rec_h
inc esi
ror ebx,16
xor bx,bx
add ebx,ted_wnd_l
add ebx,ted_rec_l ;bx = ted_wnd_l+ted_rec_l
ror ebx,16
@@:
 
mov eax,ted_wnd_h
add eax,ted_wnd_t
cmp ax,bx
jl .no_clear
sub ax,bx
 
mov cx,bx
shl ecx,16
 
xor bx,bx
add ebx,ted_wnd_w
sub ebx,ted_rec_l
xor cx,cx
add ecx,ted_rec_h
mov edx,ted_color_wnd_work
 
cmp dword[clear_o],0
je .pusto
cmp ax,cx
jge @f
.pusto:
mov cx,ax
@@:
 
call ted_is_select
cmp al,0
je @f
cmp ted_seln_y0,esi
jg @f
cmp ted_seln_y1,esi
jl @f
mov edx,ted_color_select ;draw selected line
@@:
 
mov eax,13 ;rect
int 0x40
 
call ted_is_select
cmp al,0
je .no_clear
 
mov al,13 ;rect
xor cx,cx
add ecx,ted_rec_h
cmp ted_seln_y0,esi
jne @f
push bx esi
mov edx,ted_seln_x0 ; ¢¥àå­ïï ¯®«®á  (§ â¨à ¥â á«¥¢ )
mov esi,ted_scr_h
cmp edx,dword[esi+sb_offs_position]
jle .in_wnd
sub edx,dword[esi+sb_offs_position]
imul edx,ted_rec_w
mov bx,dx
jmp .no_wnd
.in_wnd:
mov bx,0
.no_wnd:
mov edx,ted_color_wnd_work
int 0x40
pop esi bx
@@:
cmp ted_seln_y1,esi
jne @f
push esi
mov edx,ted_seln_x1 ; ­¨¦­ïï ¯®«®á  (§ â¨à ¥â á¯à ¢ )
mov esi,ted_scr_h
cmp edx,dword[esi+sb_offs_position]
jle .in_wnd2
sub edx,dword[esi+sb_offs_position]
imul edx,ted_rec_w
sub bx,dx
shl edx,16
add ebx,edx
.in_wnd2:
 
mov edx,ted_color_wnd_work
int 0x40
pop esi
@@:
 
.no_clear:
popad
ret
endp
 
;input:
; edi = pointer to tedit struct
;output:
; ecx = ­®¢ë© 梥â ᨬ¢®« 
; edx = pointer to symbol
; edx = 0 if text not in screen
align 4
ted_get_first_visible_pos:
push eax ecx
mov eax,ted_scr_w
mov edx,ted_tex
xor ecx,ecx
@@:
cmp ecx,dword[eax+sb_offs_position]
je @f
call ted_iterat_next
cmp edx,ted_tex_1
jle @f
cmp byte [edx],13
jne @b
inc ecx
jmp @b
@@:
 
cmp ecx,dword[eax+sb_offs_position]
je @f
xor edx,edx
@@:
cmp ecx,dword[eax+sb_offs_max_area]
jle @f
mov dword[eax+sb_offs_max_area],ecx
@@:
pop ecx eax
call ted_opt_draw_line_left
ret
 
;input:
; edx = pointer to symbol
; edi = pointer to tedit struct
;output:
; ecx = 梥â ᨬ¢®« 
; edx = 㪠§ â¥«ì ­  ¯¥à¢ë© «¥¢ë© ᨬ¢®«
;description:
; äã­ªæ¨ï ­ã¦­  ¤«ï ®¯â¨¬¨§ æ¨¨ ¢ë¢®¤  ⥪áâ 
align 4
proc ted_opt_draw_line_left
push ebx
 
mov ebx,ted_scr_h
mov ebx,dword[ebx+sb_offs_position]
cmp ebx,0
je .ret_f
push eax
mov eax,edx
 
cmp edx,ted_tex
jne @f
call ted_iterat_next
jmp .beg_cycle
@@:
 
cmp ebx,0
je @f
 
cmp byte[edx],13
jne @f
call ted_iterat_next
.beg_cycle:
@@:
cmp edx,ted_tex_1
jle @f
cmp byte[edx],13
je @f
cmp ebx,0
je @f
;--------------------------------------
xor eax,eax ;eax ¡ã¤¥â ¬¥­ïâìáï
mov al,byte[edx+1]
cmp al,0
je .no_color
cmp eax,ted_colors_text_count
jge .no_color
xor ecx,ecx
mov cl,byte[edx+1]
shl cx,2
add ecx,ted_text_colors
mov ecx,dword[ecx]
.no_color:
;--------------------------------------
mov eax,edx
call ted_iterat_next
dec ebx
jmp @b
@@:
mov edx,eax
pop eax
.ret_f:
call ted_get_symb_color
pop ebx
ret
endp
 
;input:
; edx = pointer to symbol
; edi = pointer to tedit struct
;output:
; ecx = symbol color
; edx = pointer to 13 symbol
;description:
; äã­ªæ¨ï ­ã¦­  ¤«ï ®¯â¨¬¨§ æ¨¨ ¢ë¢®¤  ⥪áâ 
align 4
proc ted_opt_draw_line_right
push eax
mov eax,edx
@@:
cmp edx,ted_tex_1
jle @f
cmp byte[edx],13
je @f
mov eax,edx
call ted_iterat_next
jmp @b
@@:
mov edx,eax ;perv sumbol
call ted_get_symb_color
 
pop eax
ret
endp
 
align 4
proc ted_mouse, edit:dword
pushad
mov edi,dword[edit]
 
;®¡à ¡ â뢠¥¬ áªà®««¨­£¨
mov edx,ted_scr_h
mov ecx,ted_scr_w
 
cmp word[edx+sb_offs_delta2],0
jne .horizontal
 
mov eax,dword[ecx+sb_offs_max_area]
cmp eax,dword[ecx+sb_offs_cur_area]
jbe .horizontal
; mouse event for Vertical ScrollBar
stdcall scroll_bar_vertical.mouse,ecx ;[scrollbar_ver_mouse]
cmp dword[ecx+sb_offs_redraw],0
je @f
mov dword[ecx+sb_offs_redraw],0
stdcall ted_draw,edi
jmp .no_in_wnd
@@:
cmp word[ecx+sb_offs_delta2],0
jne .no_in_wnd
.horizontal:
mov eax,dword[edx+sb_offs_max_area]
cmp eax,dword[edx+sb_offs_cur_area]
jbe .other
; mouse event for Horizontal ScrollBar
stdcall scroll_bar_horizontal.mouse,edx ;[scrollbar_hor_mouse]
cmp dword[edx+sb_offs_redraw],0
je .other
mov dword[edx+sb_offs_redraw],0
stdcall ted_draw,edi
jmp .no_in_wnd
.other:
cmp word[ecx+sb_offs_delta2],0
jne .no_in_wnd
cmp word[edx+sb_offs_delta2],0
jne .no_in_wnd
 
;®¡à ¡ â뢠¥¬ ®ª­® । ªâ®à 
mcall 37,2 ;get mouse buttons
cmp al,1
jne @f
mcall 37,1 ;get mouse coords
mov ebx,ted_wnd_t
add ebx,ted_rec_t
cmp ax,bx
jl @f ;y_mouse<y_wnd
 
sub ebx,ted_rec_t
add ebx,ted_wnd_h
cmp bx,ax
jl @f ;y_mouse>y_wnd
 
mov ebx,ted_wnd_l
add ebx,ted_rec_l
mov ecx,eax
shr ecx,16
cmp cx,bx
jl @f ;x_mouse<x_wnd
 
sub ebx,ted_rec_l
add ebx,ted_wnd_w
cmp bx,cx
jl @f ;x_mouse>x_wnd
 
call ted_draw_cursor_sumb
call ted_wnd_main_click
jmp .no_in_wnd
@@:
call ted_wnd_main_mouse_scroll
cmp ted_drag_m,0
je .no_in_wnd
mov ted_drag_m,0
stdcall ted_draw,edi
cmp ted_fun_draw_panel_buttons,0
je .no_in_wnd
call ted_fun_draw_panel_buttons
.no_in_wnd:
popad
ret
endp
 
;input:
; eax -> (x,y)
; edi -> 㪠§ â¥«ì ­  áâàãªâãàã tedit
;description:
; äã­ªæ¨ï ¢ë§ë¢¥âáï ¯à¨ ­ ¦ â¨¨ ª­®¯ª®© ¬ëè¨ ¨ ¯®¯ ¤¥­¨¨ ªãàá®à®¬ ¢ ®ª­® । ªâ®à 
align 4
ted_wnd_main_click:
push ebx ecx edx
 
push eax
shr eax,16
and eax,0xffff
sub eax,ted_wnd_l
sub eax,ted_rec_l
 
xor edx,edx
mov ecx,ted_rec_w
div cx
;inc eax
mov ebx,ted_scr_h
cmp eax,dword[ebx+sb_offs_cur_area]
jle @f
mov eax,dword[ebx+sb_offs_cur_area]
@@:
;dec eax
mov ted_cur_x,eax
pop eax
 
push eax
and eax,0xffff
sub eax,ted_wnd_t
sub eax,ted_rec_t
 
xor edx,edx
mov ecx,ted_rec_h
div cx
inc eax
mov ebx,ted_scr_w
cmp eax,dword[ebx+sb_offs_cur_area]
jle @f
mov eax,dword[ebx+sb_offs_cur_area]
@@:
dec eax
mov ted_cur_y,eax
pop eax
 
cmp ted_drag_m,0
je @f
call ted_sel_move
jmp .sel_move
@@:
mov ted_drag_m,1
call ted_sel_start
.sel_move:
pop edx ecx ebx
ret
 
;input:
; edi = pointer to tedit struct
align 4
ted_wnd_main_mouse_scroll:
push eax ebx ecx
mcall 37,7
cmp ax,0
je .no_scroll
mov ecx,ted_scr_w
mov ebx,dword[ecx+sb_offs_position] ;copy old scroll position
and eax,0xffff
btr ax,15
jae @f
or eax,0xffff8000
@@:
add dword[ecx+sb_offs_position],eax
 
mov eax,[ecx+sb_offs_position]
cmp eax,[ecx+sb_offs_max_area]
jb @f
mov dword[ecx+sb_offs_position],ebx ;if scroll position out of range
jmp .no_scroll
@@:
stdcall ted_draw,edi
.no_scroll:
pop ecx ebx eax
ret
 
align 4
proc ted_but_save_file, edit:dword, file:dword, f_name:dword
pushad
mov edi,dword[edit]
 
stdcall ted_can_save,edi
cmp al,0
je .no_save
 
mov ecx,ted_max_chars
call mem_Alloc
push eax ;§ ¯®¬¨­ ¥¬ 㪠§ â¥«ì ­  ¢ë¤¥«¥­­ãî ¯ ¬ïâì
 
mov edx,ted_tex
xor ecx,ecx
@@:
call ted_iterat_next
cmp edx,ted_tex_1
jle @f ;edx = ted_tex or edx = ted_tex+sizeof.symbol
mov bl,[edx]
mov byte[eax],bl
inc eax
inc ecx
jmp @b
@@:
 
cmp ecx,0
je @f
mov ebx,dword[file]
pop eax ;§ ¯¨á뢠¥¬ 㪠§ â¥«ì ­  ¢ë¤¥«¥­­ãî ¯ ¬ïâì
mov dword[ebx+16],eax
push eax ;®¡à â­® § ¯®¬¨­ ¥¬ 㪠§ â¥«ì ­  ¢ë¤¥«¥­­ãî ¯ ¬ïâì
mov eax,70
mov dword[ebx], 2
mov dword[ebx+4], 0
mov dword[ebx+8], 0
mov dword[ebx+12], ecx
mov byte[ebx+20], 0
push dword[f_name]
pop dword[ebx+21]
int 0x40
 
mov ted_err_save,al
 
cmp eax,0
je .no_msg
; cmp eax,6
; je @f
cmp ax,10
jl .zifra_0_9
mov al,'?'
sub ax,48
.zifra_0_9:
add ax,48
cmp ted_fun_save_err,0
je @f
call ted_fun_save_err
jmp @f
.no_msg:
m2m ted_tim_ls,ted_tim_ch
@@:
 
pop ecx ;§ ¯¨á뢠¥¬ 㪠§ â¥«ì ­  ¢ë¤¥«¥­­ãî ¯ ¬ïâì
call mem_Free
.no_save:
popad
ret
endp
}
/programs/develop/libraries/box_lib/trunk/tree_list.mac
1,6 → 1,6
; ìàêðîñ äëÿ ñèñòåìíîé áèáëèîòåêè box_lib.obj
; ýëåìåíò TreeList äëÿ Kolibri OS
; ôàéë ïîñëåäíèé ðàç èçìåíÿëñÿ 14.04.2010 IgorA
; ôàéë ïîñëåäíèé ðàç èçìåíÿëñÿ 29.04.2010 IgorA
; íà êîä ïðèìåíåíà GPL2 ëèöåíçèÿ
 
 
1303,7 → 1303,7
cmp byte[eax],0
je @f
inc eax
loop @b
jmp @b
@@:
sub eax,esi
ret
/programs/other/t_edit/t_work.inc
File deleted
/programs/other/t_edit/build_en.bat
6,7 → 6,7
if not exist bin\info mkdir bin\info
copy info\* bin\info\*
 
@fasm.exe -m 16384 ..\..\develop\libraries\box_lib\trunk\box_lib.asm bin\box_lib.obj
if not exist bin\box_lib.obj @fasm.exe -m 16384 ..\..\develop\libraries\box_lib\trunk\box_lib.asm bin\box_lib.obj
@kpack bin\box_lib.obj
 
@erase lang.inc
/programs/other/t_edit/build_ru.bat
6,7 → 6,7
if not exist bin\info mkdir bin\info
copy info\* bin\info\*
 
@fasm.exe -m 16384 ..\..\develop\libraries\box_lib\trunk\box_lib.asm bin\box_lib.obj
if not exist bin\box_lib.obj @fasm.exe -m 16384 ..\..\develop\libraries\box_lib\trunk\box_lib.asm bin\box_lib.obj
@kpack bin\box_lib.obj
 
@erase lang.inc
/programs/other/t_edit/readme.htm
48,7 → 48,7
</head>
 
<body>
<h1>TextEditor âåðñèÿ îò 22.04.2010</h1>
<h1>TextEditor âåðñèÿ îò 29.04.2010</h1>
<h2>Î ïðîãðàììå</h2>
<p>Ïðîãðàììà äëÿ ðàáîòû ñ òåêñòîâûìè ôàéëàìè.
Ëèöåíçèÿ ñâîáîäíàÿ.</p>
73,11 → 73,11
<tr><td>Ïîääåðæêà êîäèðîâîê KOI8M, OEM</td>
<td>åñòü</td><td>íåò</td></tr>
<tr><td>Ïîäñâåòêà ñèíòàêñèñà</td>
<td>ïîäñâåòêà çàðàíåå çàøèòà â ïðîãðàììó</td><td>ïîäñâåòêà áåðåòñÿ èç ôàéëîâ, êîòîðûå ìîæåò óêàçàòü ïîëüçîâàòåëü. Òàêæå åñòü âîçìîæíîñòü ïîëó÷àòü ñïðàâêó ïî ïîäñâå÷èâàåìûì ñëîâàì (åñëè îíà åñòü â ôàéëàõ ïîäñâåòêè, íàâåñòè êóðñîð íà ñëîâî è íàæàòü F1).</td><td></td></tr>
<td>ïîäñâåòêà çàðàíåå çàøèòà â ïðîãðàììó</td><td>ïîäñâåòêà áåðåòñÿ èç ôàéëîâ, êîòîðûå ìîæåò óêàçàòü ïîëüçîâàòåëü. Òàêæå åñòü âîçìîæíîñòü ïîëó÷àòü ñïðàâêó ïî ïîäñâå÷èâàåìûì ñëîâàì (åñëè îíà åñòü â ôàéëàõ ïîäñâåòêè, íàâåñòè êóðñîð íà ñëîâî è íàæàòü F1).</td></tr>
<tr><td>Ìíîãîêðàòíàÿ îòìåíà/ïîâòîð äåéñòâèé</td>
<td>íåò</td><td>åñòü</td><td></td></tr>
<td>íåò</td><td>åñòü</td></tr>
<tr><td>Îãðàíè÷åíèÿ íà ðàçìåð ôàéëîâ</td>
<td>íåò</td><td>åñòü</td><td></td></tr>
<td>íåò</td><td>åñòü</td></tr>
</table>
 
<h2>Íåêîòîðûå íåäîðàáîòêè</h2>
112,22 → 112,9
óäàëåíèÿ ñèìâîëîâ, òåêñò ìîæåò áûòü âîññòàíîâëåí.</p>
<p><b>'col'</b> - èñïîëüçóåòñÿ äëÿ öâåòîâîé ðàçìåòêè.</p>
 
<p>Òåïåðü íåìíîãî î ôóíêöèÿõ:</p>
<p><b>GetTexPervPos</b> - ïåðåõîä íà ïðåäûäóùèé ñèìâîë â öåïè (÷åðåç óêàçàòåëü 'perv')</p>
<p><b>GetTexNextPos</b> - ïåðåõîä íà ñëåäóþùèé ñèìâîë â öåïè (÷åðåç óêàçàòåëü 'next')</p>
<p><b>SymbNotVis</b> - îïðåäåëÿåò âèäèìûé ëè óêàçàííûé ñèìâîë íà ýêðàíå (â çàâèñèìîñòè
îò çíà÷åíèé 'tc' è 'td')</p>
<p><b>IteratNext</b> - ïåðåõîä íà ñëåäóþùèé âèäèìûé ñèìâîë â öåïè. Èñïîëüçóåò äëÿ
ðàáîòû ôóíêöèè GetTexNextPos è SymbNotVis.</p>
<p><b>IteratPerv</b> - ïåðåõîä íà ïðåäåäóùèé âèäèìûé ñèìâîë â öåïè.</p>
<h3>Ôóíêöèè</h3>
<p>Èíôîðìàöèþ ïî ôóíêöèÿì ñìîòðèòå â äîêóìåíòàöèè ïî ýëåìåíòó t_edit â áèáëèîòåêå box_lib.obj.</p>
 
<p><b>ItPoNextUc</b> - íàéòè ñëåäóþùóþ ïîçèöèþ óêàçàííîãî ñèìâîëà (edx-ïîç. íà÷àëà
ïîèñêà, bl->êîä èñêîìîãî ñèìâîëà)</p>
<p><b>GetPosByParam</b> - áåðåò ïîçèöèþ ñèìâîëà ïî êîîðäèíàòàì (esi->êîîðä. x, çíàê;
ecx->êîîðä. y, ñòðîêà)</p>
<p><b>GoToPos</b> - ïåðåñòàâëÿåò êóðñîð â óêàçàííóþ ïîçèöèþ, åñëè óêàçàííàÿ ïîçèöèÿ
íàõîäèòñÿ âíå ýêðàíà, òî òàêæå ïåðåñòàâëÿþòñÿ ñêðîëèíãè (ecx->êîîðä. x, çíàê; edx->êîîðä. y, ñòðîêà)</p>
 
<h3>Ôîðìàò ôàéëà ïîäñâåòêè *.syn</h3>
<table>
<tr><th>Ýëåìåíò</th><th>Ðàçìåð (áàéò)</th></tr>
/programs/other/t_edit/t_button.inc
1,7 → 1,83
struct f70
func_n dd ?
param1 dd ?
param2 dd ?
param3 dd ?
param4 dd ?
rezerv db ?
name dd ?
ends
 
struct TexColViv
Text rb MAX_COLOR_WORD_LEN ; á«®¢® ¤«ï ¯®¤á¢¥âª¨
f1 dd 0 ; á¯à ¢ª  ¯® á«®¢ã
wwo db ? ; whole words only
endc db ? ; ᨬ¢®« ª®­æ  ¢ë¤¥«¥­¨ï (wwo&4)
color db ? ; ­®¬¥à 梥â 
ends
 
struct symbol
c db ? ; +0 ᨬ¢®«
col db ? ; +1 梥â
perv dd ? ; +2
next dd ? ; +6 㪠§ â¥«¨
tc dd ? ; +10 ¢à¥¬. ᮧ¤ ­¨ï
td dd ? ; +14 ¢à¥¬. 㤠«¥­¨ï
ends
 
 
hed db 'TextEditor 29.04.10',0 ;¯®¤¯¨áì ®ª­ 
sc system_colors
 
fn_icon db 'te_icon.bmp',0
bmp_icon dd 0
run_file_70 f70
 
 
;input:
; al = ª®¤ ®è¨¡ª¨
align 4
but_NewFile:
ted_on_init_synt_err:
mov byte[msgbox_3.err],al
stdcall [mb_create],msgbox_3,thread ;message: Can-t open color options file!
ret
 
 
;-----------------------------------------------------------------------------
;äã­ªæ¨ï ¤«ï ¢ë¤¥«¥­¨ï ¯ ¬ïâ¨
;input:
; ecx = size data
;otput:
; eax = pointer to memory
align 4
mem_Alloc:
push ebx
mov eax,68
mov ebx,12
int 0x40
pop ebx
ret
;-----------------------------------------------------------------------------
;äã­ªæ¨ï ¤«ï ®á¢®¡®¦¤¥­¨ï ¯ ¬ïâ¨
;input:
; ecx = pointer to memory
align 4
mem_Free:
push eax ebx
stdcall ted_can_save, tedit0
cmp ecx,0
jz @f
mov eax,68
mov ebx,13
int 0x40
@@:
pop ebx eax
ret
 
align 4
ted_but_new_file:
push eax ebx
stdcall [ted_can_save], tedit0
cmp al,1
jne @f
stdcall [mb_create],msgbox_2,thread ;message: save changes in file?
18,9 → 94,9
 
align 4
On_NewFile:
stdcall ted_clear, tedit0,1
stdcall [ted_clear], tedit0,1
call draw_but_toolbar
stdcall draw_main_win, tedit0
stdcall [ted_draw], tedit0
ret
 
align 4
28,7 → 104,7
push edi
mov edi, tedit0
 
stdcall but_SaveFile,edi
stdcall [ted_but_save_file],edi,run_file_70,[edit1.text]
cmp ted_err_save,0
jne @f
call On_NewFile
36,17 → 112,22
pop edi
ret
 
;description:
; äã­ªæ¨ï ®âªàëâ¨ï ä ©«  ¡¥§ ®ª®­  á®®¡é¥­¨ï
align 4
but_no_msg_OpenFile: ;äã­ªæ¨ï ®âªàëâ¨ï ä ©«  ç¥à¥§ ¡¥§ ®ª®­  á®®¡é¥­¨ï
stdcall ted_on_open_file, tedit0
but_no_msg_OpenFile:
push eax ebx
stdcall [ted_open_file], tedit0,run_file_70,[edit1.text]
call ted_messages_after_open_file
pop ebx eax
ret
 
 
;description:
;äã­ªæ¨ï ®âªàëâ¨ï ä ©«  á ¢®§¬®¦­ë¬ ®ª­®¬ á®®¡é¥­¨ï (® ¢®§¬®¦­®á⨠®â¬¥­¨âì ®âªàë⨥)
align 4
but_OpenFile:
push eax
stdcall ted_can_save, tedit0
ted_but_open_file:
push eax ebx
stdcall [ted_can_save], tedit0
cmp al,1
jne @f
stdcall [mb_create],msgbox_5,thread ;message: save changes in file?
53,28 → 134,19
stdcall [mb_setfunctions],msgbox_5_funct
jmp .ret_f
@@:
stdcall ted_on_open_file, tedit0
stdcall [ted_open_file], tedit0,run_file_70,[edit1.text]
call ted_messages_after_open_file
.ret_f:
pop eax
pop ebx eax
ret
 
;input:
; eax = ª®¤ ®è¨¡ª¨
; ebx = ª®««¨ç¥á⢮ ¯à®ç¨â ­­ëå ¡ ©â
; edi = pointer to tedit struct
align 4
proc ted_on_open_file, edit:dword ;äã­ªæ¨ï ®âªàëâ¨ï ä ©« 
push eax ebx edi
mov edi,dword[edit]
 
mov eax,70
mov [run_file_70.func_n], 0
mov [run_file_70.param1], 0
mov [run_file_70.param2], 0
mov [run_file_70.param3], maxChars-2 ;sizeof.symbol
m2m [run_file_70.param4], ted_tex
mov [run_file_70.rezerv], 0
push dword[edit1.text]
pop dword[run_file_70.name]
mov ebx,run_file_70
int 0x40
 
ted_messages_after_open_file:
push ecx
cmp eax,0
je @f
cmp eax,6
93,435 → 165,75
cmp ebx,-1
je .ret_f
;if open file
call OpenFile
cmp ebx,maxChars-2
mov ecx,ted_max_chars
sub ecx,2 ;ecx = ¬ ªá¨¬ «ì­®¥ ç¨á«® ¡ ©â, ¤«ï ª®â®àëå ¡ë«  ¢ë¤¥«¥­  ¯ ¬ïâì
cmp ebx,ecx
jl .ret_f
stdcall [mb_create],msgbox_1,thread
.ret_f:
pop edi ebx eax
pop ecx
ret
endp
 
 
align 4
proc but_SaveFile, edit:dword
pushad
 
stdcall ted_can_save,edi
cmp al,0
je .no_save
 
mov edi,dword[edit]
 
mov ecx,maxChars
call mem_Alloc
push eax
 
mov edx,ted_tex
xor ecx,ecx
@@:
call IteratNext
cmp edx,ted_tex_1
jle @f ;edx = ted_tex or edx = ted_tex+sizeof.symbol
mov bl,[edx]
mov byte[eax],bl
inc eax
inc ecx
jmp @b
@@:
 
cmp ecx,0
je @f
pop eax
mov [run_file_70.param4],eax
push eax
mov eax,70
mov [run_file_70.func_n], 2
mov [run_file_70.param1], 0
mov [run_file_70.param2], 0
mov [run_file_70.param3], ecx
mov [run_file_70.rezerv], 0
push [edit1.text]
pop [run_file_70.name]
mov ebx,run_file_70
int 0x40
 
mov ted_err_save,ax
 
cmp eax,0
je .no_msg
; cmp eax,6
; je @f
cmp ax,10
jl .zifra_0_9
mov al,'?'
sub ax,48
.zifra_0_9:
add ax,48
 
ted_save_err_msg:
mov byte[msgbox_6.err],al
stdcall [mb_create],msgbox_6,thread ;message: Can-t save text file!
jmp @f
.no_msg:
m2m ted_tim_ls,ted_tim_ch
@@:
 
pop ecx
call mem_Free
.no_save:
popad
ret
endp
 
 
align 4
proc but_FindText, edit:dword
pushad
mov edi,dword[edit]
 
call GetPos
mov eax,[edit2.text]
mov bl,byte[eax]
@@:
call GetFindRezult
cmp bh,1
je @f ; find
 
call IteratNext
cmp edx,ted_tex_1
jle @f
jmp @b
@@:
cmp bh,0
je @f
call GetTexCoords
inc ebx ;move cursor right
mov ted_sel_x1,ebx
mov ted_sel_y1,eax
mov edx,eax
mov ecx,ebx
call GoToPos
mov edx,esi ;esi ¡ë«® ãáâ ­®¢«¥® ¢ GetFindRezult
call GetTexCoords
mov ted_sel_x0,ebx
mov ted_sel_y0,eax
stdcall draw_main_win,edi
jmp .end_find
@@:
stdcall [mb_create],msgbox_7,thread ;message: Can not find text
.end_find:
popad
ret
endp
 
;input:
; eax - text need find
; bl - first symbol to find
; edx - first symbol pointer
; edi - pointer to tedit struct
;output:
; bh - rezult
; edx - last text position (if find sucess)
; esi - first symbol pointer
;description:
; ”ã­ªæ¨ï ¯à®¢¥àï¥â ᮢ¯ ¤ ¥â «¨ ⥪áâ ¢ ¡ãä¥à¥ eax
; á ⥪á⮬ । ªâ®à  ¯® 㪠§ â¥«î edx.
; ‘â ­¤ àâ­ë¥ ä㭪樨 (­ ¯à. strcmp) âãâ ­¥ ¯®¤®©¤ãâ, ¯®â®¬ã çâ®
; ¢ ¯ ¬ï⨠। ªâ®à  ⥪áâ ᮤ¥à¦¨âáï ­¥ ¢ ¢¨¤¥ ascii áâப.
align 4
GetFindRezult:
push eax
mov bh,1
mov esi,edx ;copy edx
@@:
cmp byte[edx],bl
jne .no_text
 
inc eax ;*** get next symbol (in find text) ***
mov bl,byte[eax]
cmp bl,0
je @f ;end of find text
 
call IteratNext ;*** get next symbol (in editor text) ***
cmp edx,ted_tex_1
jle @f ;end of editor text
 
jmp @b
.no_text:
xor bh,bh
mov edx,esi ;restore edx
@@:
pop eax
mov bl,byte[eax] ;restore bl
ret
 
align 4
proc ted_but_open_syntax, edit:dword
push edi
push ebx edi
mov edi,dword[edit]
 
cmp ted_panel_id,TE_PANEL_SYNTAX
cmp ted_panel_id,TED_PANEL_SYNTAX
jne @f
stdcall dword[tl_node_get_data], tree1
pop dword[fn_col_option]
stdcall InitColText,edi
call CmColored
stdcall draw_main_win,edi
mov ebx,dword[fn_col_option]
copy_path ebx,fn_syntax_dir,file_name_rez,0x0
copy_path file_name_rez,sys_path,file_name,0x0
stdcall [ted_init_syntax_file],edi,run_file_70,file_name
call [ted_text_colored]
stdcall [ted_draw],edi
@@:
pop edi
pop edi ebx
ret
endp
 
align 4
proc ted_but_select_word, edit:dword
pushad
mov edi,dword[edit]
 
call GetPos
push edx
call ItPervColorTag
cmp edx,ted_tex_1
jle @f
call GetTexCoords
mov ted_sel_x0,ebx
mov ted_sel_y0,eax
@@:
pop edx
call ItNextColorTag
cmp edx,ted_tex_1
jle @f
call GetTexCoords
mov ted_sel_x1,ebx
mov ted_sel_y1,eax
@@:
 
call draw_but_toolbar
stdcall draw_main_win,edi
popad
ret
endp
 
align 4
proc ted_but_cut, edit:dword
proc ted_but_find ;¢ë§®¢/áªàë⨥ ¯ ­¥«¨ ¯®¨áª 
push edi
mov edi,dword[edit]
mov edi,tedit0
 
stdcall ted_but_copy,edi
stdcall ted_set_undo,edi
stdcall SelTextDel,ted_opt_ed_change_time
 
cmp al,1
jne @f
call draw_but_toolbar
stdcall draw_main_win,edi
@@:
pop edi
ret
endp
 
;output:
; al = 1 if copy text
align 4
proc ted_but_copy, edit:dword
pushad
mov edi,dword[edit]
 
stdcall IsSel,edi
cmp al,0
je .end_f ;if not selected text
stdcall SelNormalize,edi
 
mov esi,ted_seln_x1
mov ecx,ted_seln_y1
call GetPosByParam
mov ebx,edx
mov esi,ted_seln_x0
mov ecx,ted_seln_y0
call GetPosByParam
mov esi,ebx
 
xor ecx,ecx
mov ebx,buf
;mov edx,ted_tex
@@:
cmp edx,ted_tex_1 ;end of file
jle @f
cmp edx,esi ;end of select
cmp ted_panel_id,TED_PANEL_NULL
je @f
inc ecx
cmp ecx,BUF_SIZE ;owerflow bufer
je @f
 
mov al,byte[edx]
mov byte[ebx],al
inc ebx
 
call IteratNext
jmp @b
@@:
add ecx,buf
mov byte[ebx],0
 
cmp ecx,0
je .end_f
call draw_but_toolbar
stdcall draw_bufer,edi
.end_f:
popad
ret
endp
 
 
align 4
proc ted_but_paste, edit:dword
push eax ebx esi edi
mov edi,dword[edit]
 
mov esi,buf
call strlen
cmp eax,1
jl @f
stdcall ted_set_undo,edi
mov esi,eax
mov ebx,ted_opt_ed_change_time+ted_opt_ed_move_cursor
stdcall SelTextDel,ebx
cmp al,1
jne .del
mov ebx,ted_opt_ed_move_cursor
.del:
stdcall ted_text_add,edi,buf,esi,ebx
call draw_but_toolbar
stdcall draw_main_win,edi
@@:
pop edi esi ebx eax
ret
endp
 
align 4
proc but_find, edit:dword ;¢ë§®¢/áªàë⨥ ¯ ­¥«¨ ¯®¨áª 
push edi
mov edi,dword[edit]
 
cmp ted_panel_id,TE_PANEL_NULL
je @f
mov ted_panel_id,TE_PANEL_NULL
mov ted_panel_id,TED_PANEL_NULL
mov ted_wnd_l,0
jmp .e_if
@@:
mov ted_panel_id,TE_PANEL_FIND
mov ted_wnd_l,TE_PANEL_WIDTH
mov ted_panel_id,TED_PANEL_FIND
mov ted_wnd_l,TED_PANEL_WIDTH
.e_if:
stdcall EvSize,edi
stdcall draw_main_win,edi
stdcall [ted_draw],edi
pop edi
ret
endp
 
align 4
but_replace:
ted_on_find_err:
stdcall [mb_create],msgbox_7,thread ;message: Can not find text
ret
 
align 4
but_find_key_w:
but_replace:
ret
 
align 4
proc but_sumb_upper, edit:dword
push edi esi
mov edi,dword[edit]
 
mov [conv_table],EvUpper
call ConvertSelText
cmp esi,0
je @f
stdcall draw_main_win,edi
@@:
pop esi edi
but_find_key_w:
ret
endp
 
align 4
proc but_sumb_lover, edit:dword
push edi esi
mov edi,dword[edit]
 
mov [conv_table],EvLover
call ConvertSelText
cmp esi,0
je @f
stdcall draw_main_win,edi
@@:
pop esi edi
ret
endp
 
align 4
proc but_reverse, edit:dword
push eax ebx edi
mov edi,dword[edit]
 
stdcall IsSel,edi
cmp al,0
je @f
stdcall SelNormalize,edi
push esi ecx edx
mov esi,ted_seln_x0
mov ecx,ted_seln_y0
call GetPosByParam
mov eax,edx
mov esi,ted_seln_x1
cmp esi,0
je .beg_str
dec esi
.beg_str:
mov ecx,ted_seln_y1
call GetPosByParam
;call GetTexPervPos
mov ebx,edx
pop edx ecx esi
;cmp eax,...
;je @f
call Revers
@@:
stdcall draw_main_win,edi
pop edi ebx eax
ret
endp
 
align 4
proc ted_but_undo, edit:dword
push eax edi
mov edi,dword[edit]
 
mov eax,ted_tim_undo
cmp ted_tim_ch,eax
jbe @f
inc ted_tim_undo
;call CmColored
stdcall draw_main_win,edi
call draw_but_toolbar
@@:
pop edi eax
ret
endp
 
align 4
proc ted_but_redo, edit:dword
push edi
mov edi,dword[edit]
 
cmp ted_tim_undo,1
jb @f
dec ted_tim_undo
;call CmColored
stdcall draw_main_win,edi
call draw_but_toolbar
@@:
pop edi
ret
endp
 
align 4
proc but_sumb_invis, edit:dword
push edi
mov edi,dword[edit]
528,7 → 240,7
 
xor ted_mode_invis,1
call draw_but_toolbar
stdcall draw_main_win,edi
stdcall [ted_draw],edi
pop edi
ret
endp
541,153 → 253,30
xor ted_mode_color,1
cmp ted_mode_color,0
je @f
call CmColored
call [ted_text_colored]
@@:
call draw_but_toolbar
stdcall draw_main_win,edi
stdcall [ted_draw],edi
pop edi
ret
endp
 
 
;input:
; edi = pointer to tedit struct
align 4
but_CtrlHome:
mov ted_cur_x,0
mov ted_cur_y,0
push eax
mov eax,ted_scr_w
mov dword[eax+sb_offs_position],0
mov eax,ted_scr_h
mov dword[eax+sb_offs_position],0
pop eax
call draw_but_toolbar
stdcall draw_main_win,edi
ret
 
align 4
proc but_synt_show, edit:dword
push edi
mov edi,[edit]
 
cmp ted_panel_id,TE_PANEL_NULL
cmp ted_panel_id,TED_PANEL_NULL
je @f
mov ted_panel_id,TE_PANEL_NULL
mov ted_panel_id,TED_PANEL_NULL
mov ted_wnd_l,0
jmp .e_if
@@:
mov ted_panel_id,TE_PANEL_SYNTAX
mov ted_wnd_l,TE_PANEL_WIDTH
mov ted_panel_id,TED_PANEL_SYNTAX
mov ted_wnd_l,TED_PANEL_WIDTH
.e_if:
stdcall EvSize,edi
stdcall draw_main_win,edi
stdcall [ted_draw],edi
pop edi
ret
endp
 
align 4
proc ted_sel_key_up, edit:dword
push edi
mov edi,dword[edit]
 
cmp ted_drag_k,1
je @f
stdcall SelStart,edi
mov ted_drag_k,1
@@:
push dx
call CurMoveUp
cmp dl,8
jne @f
call OnInitialUpdate
@@:
pop dx
stdcall SelMove,edi
stdcall draw_main_win,edi
pop edi
ret
endp
 
align 4
proc ted_sel_key_down, edit:dword
push edi
mov edi,dword[edit]
 
cmp ted_drag_k,1
je @f
stdcall SelStart,edi
mov ted_drag_k,1
@@:
push dx
call CurMoveDown
cmp dl,8
jne @f
call OnInitialUpdate
@@:
pop dx
stdcall SelMove,edi
stdcall draw_main_win,edi
pop edi
ret
endp
 
align 4
proc ted_sel_key_left, edit:dword
push edi
mov edi,dword[edit]
 
cmp ted_drag_k,1
je @f
stdcall SelStart,edi
@@:
push dx
call CurMoveLeft
stdcall SelMove,edi
cmp ted_drag_k,1
je @f
mov ted_drag_k,1
mov dl,8
@@:
cmp dl,8
jne @f
call OnInitialUpdate
stdcall draw_main_win,edi
jmp .end_f
@@:
stdcall draw_cur_line,edi
.end_f:
pop dx
pop edi
ret
endp
 
align 4
proc ted_sel_key_right, edit:dword
push edi
mov edi,dword[edit]
 
cmp ted_drag_k,1
je @f
stdcall SelStart,edi
@@:
push dx
call CurMoveRight
stdcall SelMove,edi
cmp ted_drag_k,1
je @f
mov ted_drag_k,1
mov dl,8
@@:
cmp dl,8
jne @f
call OnInitialUpdate
stdcall draw_main_win,edi
jmp .end_f
@@:
stdcall draw_cur_line,edi
.end_f:
pop dx
pop edi
ret
endp
/programs/other/t_edit/t_data.inc
72,6 → 72,32
tl_node_close_open dd sz_tl_node_close_open
tl_node_lev_inc dd sz_tl_node_lev_inc
tl_node_lev_dec dd sz_tl_node_lev_dec
 
ted_but_save_file dd sz_ted_but_save_file
ted_but_sumb_upper dd sz_ted_but_sumb_upper
ted_but_sumb_lover dd sz_ted_but_sumb_lover
ted_can_save dd sz_ted_can_save
ted_clear dd sz_ted_clear
ted_delete dd sz_ted_delete
ted_draw dd sz_ted_draw
ted_init dd sz_ted_init
ted_init_syntax_file dd sz_ted_init_syntax_file
ted_is_select dd sz_ted_is_select
ted_key dd sz_ted_key
ted_mouse dd sz_ted_mouse
ted_open_file dd sz_ted_open_file
ted_text_add dd sz_ted_text_add
ted_but_select_word dd sz_ted_but_select_word
ted_but_cut dd sz_ted_but_cut
ted_but_copy dd sz_ted_but_copy
ted_but_paste dd sz_ted_but_paste
ted_but_undo dd sz_ted_but_undo
ted_but_redo dd sz_ted_but_redo
ted_but_reverse dd sz_ted_but_reverse
ted_but_find_next dd sz_ted_but_find_next
ted_text_colored dd sz_ted_text_colored
;;;version_text_edit dd sz_ted_version
 
dd 0,0
 
aEdit_box_draw db 'edit_box',0
119,6 → 145,31
sz_tl_node_close_open db 'tl_node_close_open',0
sz_tl_node_lev_inc db 'tl_node_lev_inc',0
sz_tl_node_lev_dec db 'tl_node_lev_dec',0
 
sz_ted_but_save_file db 'ted_but_save_file',0
sz_ted_but_sumb_upper db 'ted_but_sumb_upper',0
sz_ted_but_sumb_lover db 'ted_but_sumb_lover',0
sz_ted_can_save db 'ted_can_save',0
sz_ted_clear db 'ted_clear',0
sz_ted_delete db 'ted_delete',0
sz_ted_draw db 'ted_draw',0
sz_ted_init db 'ted_init',0
sz_ted_init_syntax_file db 'ted_init_syntax_file',0
sz_ted_is_select db 'ted_is_select',0
sz_ted_key db 'ted_key',0
sz_ted_mouse db 'ted_mouse',0
sz_ted_open_file db 'ted_open_file',0
sz_ted_text_add db 'ted_text_add',0
sz_ted_but_select_word db 'ted_but_select_word',0
sz_ted_but_cut db 'ted_but_cut',0
sz_ted_but_copy db 'ted_but_copy',0
sz_ted_but_paste db 'ted_but_paste',0
sz_ted_but_undo db 'ted_but_undo',0
sz_ted_but_redo db 'ted_but_redo',0
sz_ted_but_reverse db 'ted_but_reverse',0
sz_ted_but_find_next db 'ted_but_find_next',0
sz_ted_text_colored db 'ted_text_colored',0
;;;sz_ted_version db 'version_text_edit',0
;--------------------------------------------------
align 4
msgbox_lib_import:
275,10 → 326,10
.get_mouse_flag dd 0 ;+116
;-------------------------
 
TE_PANEL_NULL equ 0
TE_PANEL_FIND equ 1
TE_PANEL_SYNTAX equ 2
TE_PANEL_WIDTH equ 150 ;øèðèíà ïàíåëè
TED_PANEL_NULL equ 0 ;­¥â ®âªàë⮩ ¯ ­¥«¨
TED_PANEL_FIND equ 1 ;¯ ­¥«ì ¯®¨áª 
TED_PANEL_SYNTAX equ 2 ;¯ ­¥«ì ¢ë¡®à  ä ©«®¢ ¯®¤á¢¥âª¨
TED_PANEL_WIDTH equ 150 ;è¨à¨­  ¯ ­¥«¨
 
count_of_dir_list_files equ 15
 
290,75 → 341,6
y1 dd ?
ends
;------------------------------------------------------------------------------
ted_wnd_l equ dword[edi+ 0] ;®ª­® । ªâ®à : ®âáâ㯠᫥¢ 
ted_wnd_t equ dword[edi+ 4] ;®ª­® । ªâ®à : ®âáâ㯠ᢥàåã
ted_wnd_w equ dword[edi+ 8] ;®ª­® । ªâ®à : è¨à¨­ 
ted_wnd_h equ dword[edi+12] ;®ª­® । ªâ®à : ¢ëá®â 
ted_rec_l equ dword[edi+16] ;è¨à¨­  ¯ ­¥«¨ ¢ ®ª­¥
ted_rec_t equ dword[edi+20] ;¢ëá®â  ¯ ­¥«¨ ¢ ®ª­¥
ted_rec_w equ dword[edi+24] ;è¨à¨­  ᨬ¢®«  (§­ ª®¬¥áâ ) ¢ ®ª­¥
ted_rec_h equ dword[edi+28] ;¢ëá®â  ᨬ¢®«  (§­ ª®¬¥áâ ) ¢ ®ª­¥
ted_drag_m equ byte[edi+32] ;¢ë¤¥«¥­¨¥ ®â ¬ëè¨
ted_drag_k equ byte[edi+33] ;¢ë¤¥«¥­¨¥ ®â ª« ¢¨ âãàë
ted_sel_x0 equ dword[edi+34] ;ª®®à¤¨­ â  ¢ë¤¥«¥­¨ï x0
ted_sel_y0 equ dword[edi+38] ;ª®®à¤¨­ â  ¢ë¤¥«¥­¨ï y0
ted_sel_x1 equ dword[edi+42] ;ª®®à¤¨­ â  ¢ë¤¥«¥­¨ï x1
ted_sel_y1 equ dword[edi+46] ;ª®®à¤¨­ â  ¢ë¤¥«¥­¨ï y1
;§ ¯ á­ë¥ ª®®à¤¨­ âë ¢ë¤¥«¥­¨ï
ted_seln_x0 equ dword[edi+50]
ted_seln_y0 equ dword[edi+54]
ted_seln_x1 equ dword[edi+58]
ted_seln_y1 equ dword[edi+62]
 
ted_tex equ dword[edi+66] ;㪠§ â¥«ì ­  ¯ ¬ïâì ¤«ï åà ­¥­¨ï ⥪áâ 
ted_tex_1 equ dword[edi+70] ;㪠§ â¥«ì ­  1-î áâàªãâàã ᨬ¢®« 
ted_tex_end equ dword[edi+74] ;㪠§ â¥«ì ­  ¯®á«¥¤­îî áâàãªâãàã ᨬ¢®« 
ted_cur_x equ dword[edi+78] ;ª®®à¤¨­ â  x ªãàá®à 
ted_cur_y equ dword[edi+82] ;ª®®à¤¨­ â  y ªãàá®à 
ted_cur_ins equ byte[edi+86] ;०¨¬ à ¡®âë ªãàá®à  (®¡ëç­ë© ¨«¨ § ¬¥­ )
ted_mode_color equ byte[edi+87] ;०¨¬ ¢ë¤¥«¥­¨ï á«®¢ 梥⮬ (0-¢ëª«. 1-¢ª«.)
ted_mode_invis equ byte[edi+88] ;०¨¬ ¯®ª §  ­¥¯¥ç â ¥¬ëå ᨬ¢®«®¢
ted_gp_opt equ byte[edi+89] ;®¯æ¨¨ ¢®§¢à é ¥¬ë¥ ä㭪樥© GetPos
ted_colors_text_count equ dword[edi+90] ;ª®««¨ç¥á⢮ 梥⮢ ⥪áâ 
ted_key_words_count equ dword[edi+94] ;ª®««¨ç¥á⢮ ª«î祢ëå á«®¢
ted_color_cursor equ dword[edi+98] ;梥⠪ãàá®à 
ted_color_wnd_capt equ dword[edi+102] ;梥⠯®«¥© ¢®ªà㣠®ª­ 
ted_color_wnd_work equ dword[edi+106] ;梥â ä®­  ®ª­ 
ted_color_wnd_bord equ dword[edi+110] ;梥â ⥪áâ  ­  ¯®«ïå
ted_color_select equ dword[edi+114] ;梥⠢뤥«¥­¨ï
ted_color_cur_text equ dword[edi+118] ;梥â ᨬ¢®«  ¯®¤ ªãàá®à®¬
ted_color_wnd_text equ dword[edi+122] ;梥â ⥪áâ  ¢ ®ª­¥
ted_syntax_file equ dword[edi+126] ;㪠§ â¥«ì ­  ­ ç «® ä ©«  ᨭ⠪á¨á 
ted_syntax_file_end equ dword[edi+130] ;㪠§ â¥«ì ­  ª®­¥æ ä ©«  ᨭ⠪á¨á 
ted_text_colors equ dword[edi+134] ;㪠§ â¥«ì ­  ¬ áᨢ 梥⮢ ⥪áâ 
ted_help_text_f1 equ dword[edi+138] ;㪠§ â¥«ì ­  ⥪áâ á¯à ¢ª¨ (¯® ­ ¦ â¨¨ F1)
ted_help_id equ dword[edi+142] ;¨¤¥­â¨ä¨ª â®à ¤«ï á¯à ¢ª¨
ted_key_words_data equ dword[edi+146] ;㪠§ â¥«ì ­  áâàãªâãàë ª«î祢ëå á«®¢ TexColViv
ted_tim_ch equ dword[edi+150] ;ª®««¨ç¥á⢮ ¨§¬¥­¥­¨© ¢ ä ©«¥
ted_tim_undo equ dword[edi+154] ;ª®««¨ç¥á⢮ ®â¬¥­¥­­ëå ¤¥©á⢨©
ted_tim_ls equ dword[edi+158] ;¢à¥¬ï ¯®á«¥¤­¥£® á®åà ­¥­¨ï
ted_tim_co equ dword[edi+162] ;¢à¥¬ï ¯®á«¥¤­¥© 梥⮢®© à §¬¥âª¨
ted_el_focus equ dword[edi+166] ;㪠§ â¥«ì ­  ¯¥à¥¬¥­­ãî í«¥¬¥­â  ¢ 䮪ãá¥
ted_err_save equ word[edi+170] ;®è¨¡ª  á®åà ­¥­¨ï ä ©« 
ted_key_new equ byte[edi+172] ;ᨬ¢®«, ª®â®àë© ¡ã¤¥â ¤®¡ ¢«ïâáï á ª« ¢¨ âãàë
ted_symbol_new_line equ byte[edi+173] ;ᨬ¢®« § ¢¥à襭¨ï áâப¨
ted_scr_w equ dword[edi+174] ;¢¥à⨪ «ì­ë© áªà®««¨­£
ted_scr_h equ dword[edi+178] ;£®à¨§®­â «ì­ë© áªà®««¨­£
ted_panel_id equ byte[edi+182] ;­®¬¥à ®âªàë⮩ ¯ ­¥«¨
;------------------------------------------------------------------------------
sb_offs_max_area equ 16
sb_offs_cur_area equ 20
sb_offs_position equ 24
sb_offs_redraw equ 40
;------------------------------------------------------------------------------
ted_opt_ed_move_cursor equ 1 ;¤¢¨£ âì ªãàá®à ¯®á«¥ ¤®¡ ¢«¥­¨ï ⥪áâ 
ted_opt_ed_change_time equ 2 ;¤®¡ ¢«ïâì ¨§¬¥­¥­¨ï ¯à¨ । ªâ¨à®¢ ­¨¨ ⥪áâ 
ted_offs_sel equ 34 ;ᬥ饭¨¥ áâàãªâãàë sel
ted_offs_seln equ 50 ;ᬥ饭¨¥ áâàãªâãàë seln
ted_offs_count_colors equ 90 ;ᬥ饭¨¥ ¯¥à¥¬¥­­®© ª®««¨ç¥á⢠ 梥⮢
ted_offs_key_new equ 172
ted_offs_symbol_new_line equ 173 ;ᬥ饭¨¥ ᨬ¢®«  ­®¢®© áâப¨
;------------------------------------------------------------------------------
align 4
tedit0: ;áâàãªâãà  â¥ªá⮢®£® । ªâ®à 
.wnd BOX 0,50,440,150 ;+ 0
370,12 → 352,9
.tex dd 0 ;+66 text memory pointer
.tex_1 dd 0 ;+70 text first symbol pointer
.tex_end dd 0 ;+74 text end memory pointer
.cur_x dd 0 ;+78
.cur_y dd 0 ;+82
.cur_ins db 1 ;+86
.mode_color db 1 ;+87 ०¨¬ ¢ë¤¥«¥­¨ï á«®¢ 梥⮬ (0-¢ëª«. 1-¢ª«.)
.mode_invis db 0 ;+88 ०¨¬ ¯®ª §  ­¥¯¥ç â ¥¬ëå ᨬ¢®«®¢
.gp_opt db 0 ;+89 ®¯æ¨¨ ¢®§¢à é ¥¬ë¥ ä㭪樥© GetPos
.cur_x dd 0 ;+78 ª®®à¤¨­ â  x ªãàá®à 
.cur_y dd 0 ;+82 ª®®à¤¨­ â  y ªãàá®à 
.max_chars dd maxChars ;+86 ¬ ªá¨¬ «ì­®¥ ç¨á«® ᨬ¢®«®¢ ¢ ®¤­®¬ ¤®ªã¬¥­â¥
; \/ ­¥ à §à뢠âì á«¥¤ãî騥 ¯¥à¥¬¥­­ë¥:
.count_colors_text dd 1 ;+90 ª®««¨ç¥á⢮ 梥⮢ ⥪áâ 
.count_key_words dd 0 ;+94 ª®««¨ç¥á⢮ ª«î祢ëå á«®¢
388,7 → 367,7
.color_wnd_text dd 0xffff00 ;+122 梥â ⥪áâ  ¢ ®ª­¥
; /\ ¤à㣨¥, ¨¤ã騥 ­¨¦¥ ¬®¦­® à §à뢠âì.
.syntax_file dd 0 ;+126 㪠§ â¥«ì ­  ­ ç «® ä ©«  ᨭ⠪á¨á 
.syntax_file_end dd 0 ;+130 㪠§ â¥«ì ­  ª®­¥æ ä ©«  ᨭ⠪á¨á 
.syntax_file_size dd maxSyntaxFileSize ;+130 ¬ ªá¨¬ «ì­ë© à §¬¥à ä ©«  ᨭ⠪á¨á 
.text_colors dd 0 ;+134 㪠§ â¥«ì ­  ¬ áᨢ 梥⮢ ⥪áâ 
.help_text_f1 dd 0 ;+138 㪠§ â¥«ì ­  ⥪áâ á¯à ¢ª¨ (¯® ­ ¦ â¨¨ F1)
.help_id dd -1 ;+142 ¨¤¥­â¨ä¨ª â®à ¤«ï á¯à ¢ª¨
398,22 → 377,39
.tim_ls dd ? ;+158 ¢à¥¬ï ¯®á«¥¤­¥£® á®åà ­¥­¨ï
.tim_co dd ? ;+162 ¢à¥¬ï ¯®á«¥¤­¥© 梥⮢®© à §¬¥âª¨
.el_focus dd el_focus ;+166 㪠§ â¥«ì ­  ¯¥à¥¬¥­­ãî í«¥¬¥­â  ¢ 䮪ãá¥
.err_save dw 0 ;+170 ®è¨¡ª  á®åà ­¥­¨ï ä ©« 
.err_save db 0 ;+170 ®è¨¡ª  á®åà ­¥­¨ï ä ©« 
.panel_id db 0 ;+171 ­®¬¥à ®âªàë⮩ ¯ ­¥«¨
.key_new db 0 ;+172 ᨬ¢®«, ª®â®àë© ¡ã¤¥â ¤®¡ ¢«ïâáï á ª« ¢¨ âãàë
.symbol_new_line db 20 ;+173 ᨬ¢®« § ¢¥à襭¨ï áâப¨
.scr_w dd wScr ;+174 ¢¥à⨪ «ì­ë© áªà®««¨­£
.scr_h dd hScr ;+178 £®à¨§®­â «ì­ë© áªà®««¨­£
.panel_id db 0 ;+182 ­®¬¥à ®âªàë⮩ ¯ ­¥«¨
.arr_key_pos dd 0 ;+182 㪠§ â¥«ì ­  ¬ áᨢ ¯®§¨æ¨© ª«î祢ëå á«®¢
.buffer dd buf ;+186 㪠§ â¥«ì ­  ¡ãä¥à ª®¯¨à®¢ ­¨ï/¢áâ ¢ª¨
.buffer_find dd buf_find ;+190 㪠§ â¥«ì ­  ¡ãä¥à ¤«ï ¯®¨áª 
.cur_ins db 1 ;+194 ०¨¬ à ¡®âë ªãàá®à  (®¡ëç­ë© ¨«¨ § ¬¥­ )
.mode_color db 1 ;+195 ०¨¬ ¢ë¤¥«¥­¨ï á«®¢ 梥⮬ (0-¢ëª«. 1-¢ª«.)
.mode_invis db 0 ;+196 ०¨¬ ¯®ª §  ­¥¯¥ç â ¥¬ëå ᨬ¢®«®¢
.gp_opt db 0 ;+197 ®¯æ¨¨ ¢®§¢à é ¥¬ë¥ ä㭪樥© ted_get_pos_by_cursor
.fun_on_key_ctrl_o dd ted_but_open_file ;+198 㪠§ â¥«ì ­  äã­ªæ¨î ¢ë§ë¢ ¥¬ãî ¯à¨ ­ ¦ â¨¨ Ctrl+O (®âªàë⨥ ä ©« )
.fun_on_key_ctrl_f dd ted_but_find ;+202 ... Ctrl+F (¢ë§®¢ /áªàëâ¨ï ¯ ­¥«¨ ¯®¨áª )
.fun_on_key_ctrl_n dd ted_but_new_file ;+206 ... Ctrl+N (ᮧ¤ ­¨¥ ­®¢®£® ¤®ªã¬¥­â )
.fun_on_key_ctrl_s dd 0 ;+210 ... Ctrl+S
.buffer_size dd BUF_SIZE ;+214 à §¬¥à ¡ãä¥à  ª®¯¨à®¢ ­¨ï/¢áâ ¢ª¨
.fun_find_err dd ted_on_find_err ;+218 㪠§ â¥«ì ­  äã­ªæ¨î ¢ë§ë¢ ¥¬ãî ¥á«¨ ¯®¨áª § ª®­ç¨«áï ­¥ã¤ ç­®
.fun_init_synt_err dd ted_on_init_synt_err ;+222 㪠§ â¥«ì ­  äã­ªæ¨î ¢ë§ë¢ ¥¬ãî ¯à¨ ®è¨¡®ç­®¬ ®âªàë⨨ ä ©«  ᨭ⠪á¨á 
.fun_draw_panel_buttons dd draw_but_toolbar ;+226 㪠§ â¥«ì ­  äã­ªæ¨î à¨á®¢ ­¨ï ¯ ­¥«¨ á ª­®¯ª ¬¨
.fun_draw_panel_find dd draw_panel_find ;+230 㪠§ â¥«ì ­  äã­ªæ¨î à¨á®¢ ­¨ï ¯ ­¥«¨ ¯®¨áª 
.fun_draw_panel_syntax dd draw_panel_syntax ;+234 㪠§ â¥«ì ­  äã­ªæ¨î à¨á®¢ ­¨ï ¯ ­¥«¨ ᨭ⠪á¨á 
.fun_save_err dd ted_save_err_msg ;+238 㪠§ â¥«ì ­  äã­ªæ¨î ¢ë§ë¢ ¥¬ãî ¥á«¨ á®åà ­¥­¨¥ ä ©«  § ª®­ç¨«®áì ­¥ã¤ ç­®
;------------------------------------------------------------------------------
 
FkPos: rd 256
conv_tabl rb 128 ; â ¡«¨æ  ¤«ï ª®­¢¥àâ¨à®¢ ­¨ï scan-ª®¤  ¢ ascii-ª®¤
buf db BUF_SIZE dup(0)
 
 
el_focus dd 0
mouse_dd dd 0
tree1 tree_list 264,count_of_dir_list_files+2, tl_key_no_edit+tl_draw_par_line+tl_list_box_mode,\
16,16, 0x8080ff,0x0000ff,0xffffff, 0,70,TE_PANEL_WIDTH-17,120, 0,0,0, el_focus,\
16,16, 0x8080ff,0x0000ff,0xffffff, 0,70,TED_PANEL_WIDTH-17,120, 0,0,0, el_focus,\
ws_dir_lbox,0
 
;dir_list memory
426,7 → 422,6
 
dir_mem rb 32+304*count_of_dir_list_files
 
 
if lang eq ru
 
menu_text_area:
525,11 → 520,6
txtFindNext db ' ©â¨ ¤ «¥¥',0
txtFormatCapt db '”®à¬ â',0
txtFormatApply db 'à¨¬¥­¨âì',0
txtRow db '‘âப ',0
txtCol db '‡­ ª',0
txtOtm db 'Žâ¬¥­ë',0
txtBuf db 'ãä¥à: '
buf db BUF_SIZE dup(0) ;buf âñåãäà ïîñëå txtBuf
 
else
 
629,67 → 619,10
txtFindNext db 'Find next',0
txtFormatCapt db 'Format',0
txtFormatApply db 'Apply',0
txtRow db 'Rows',0
txtCol db 'Cols',0
txtOtm db 'Undo',0
txtBuf db 'Buffer: '
buf db BUF_SIZE dup(0) ;buf always after txtBuf
 
end if
;------
align 4
EvChar db 0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0
db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 
EvUpper db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79
db 80,81,82,83,84,85,86,87,88,89,90,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
EvLover db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111
db 112,113,114,115,116,117,118,119,120,121,122,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
conv_table dd 0
 
 
KM_SHIFT equ 0x00010000
KM_CTRL equ 0x00020000
KM_ALT equ 0x00040000
/programs/other/t_edit/t_draw.inc
1,133 → 1,6
align 4
proc mouse_wnd_main, edit:dword
push eax ebx ecx edi
mcall 37,2 ;get mouse buttons
 
mov edi,dword[edit]
 
cmp al,1
jne @f
mcall 37,1 ;get mouse coords
mov ebx,ted_wnd_t
add ebx,ted_rec_t
cmp ax,bx
jl @f ;y_mouse<y_wnd
 
sub ebx,ted_rec_t
add ebx,ted_wnd_h
cmp bx,ax
jl @f ;y_mouse>y_wnd
 
mov ebx,ted_wnd_l
add ebx,ted_rec_l
mov ecx,eax
shr ecx,16
cmp cx,bx
jl @f ;x_mouse<x_wnd
 
sub ebx,ted_rec_l
add ebx,ted_wnd_w
cmp bx,cx
jl @f ;x_mouse>x_wnd
 
stdcall draw_cursor_sumb, tedit0
call wnd_main_click
jmp .no_in_wnd
@@:
call wnd_main_mouse_scroll
cmp ted_drag_m,0
je .no_in_wnd
mov ted_drag_m,0
call draw_but_toolbar
stdcall draw_main_win, tedit0
.no_in_wnd:
pop edi ecx ebx eax
ret
endp
 
;input:
; eax -> (x,y)
; edi -> óêàçàòåëü íà ñòðóêòóðó tedit
;description:
; ôóíêöèÿ âûçûâåòñÿ ïðè íàæàòèè êíîïêîé ìûøè è ïîïàäåíèè êóðñîðîì â îêíî ðåäàêòîðà
align 4
wnd_main_click:
push ecx edx
 
push eax
shr eax,16
and eax,0xffff
sub eax,ted_wnd_l
sub eax,ted_rec_l
 
xor edx,edx
mov ecx,ted_rec_w
div cx
;inc eax
cmp eax,[hScr.cur_area]
jle @f
mov eax,[hScr.cur_area]
@@:
;dec eax
mov ted_cur_x,eax
pop eax
 
push eax
and eax,0xffff
sub eax,ted_wnd_t
sub eax,ted_rec_t
 
xor edx,edx
mov ecx,ted_rec_h
div cx
inc eax
cmp eax,[wScr.cur_area]
jle @f
mov eax,[wScr.cur_area]
@@:
dec eax
mov ted_cur_y,eax
pop eax
 
cmp ted_drag_m,0
je @f
stdcall SelMove,edi
jmp .sel_move
@@:
mov ted_drag_m,1
stdcall SelStart,edi
.sel_move:
pop edx ecx
ret
 
align 4
wnd_main_mouse_scroll:
push eax ebx
mcall 37,7
cmp ax,0
je .no_scroll
mov ebx,dword[wScr.position] ;copy old scroll position
and eax,0xffff
btr ax,15
jae @f
or eax,0xffff8000
@@:
add dword[wScr.position],eax
 
mov eax,[wScr.position]
cmp eax,[wScr.max_area]
jb @f
mov dword[wScr.position],ebx ;if scroll position out of range
jmp .no_scroll
@@:
stdcall draw_main_win, tedit0
.no_scroll:
pop ebx eax
ret
 
align 4
draw_but_toolbar: ;âíåøíÿÿ ôóíêöèÿ äëÿ ðèñîâàíèÿ ïàíåëè èíñòðóìåíòîâ
push ebx ecx edx edi
draw_but_toolbar: ;ôóíêöèÿ äëÿ ðèñîâàíèÿ ïàíåëè èíñòðóìåíòîâ
pushad
mov edi,tedit0
 
mov ecx,0x40000000
140,7 → 13,7
mov edx,110*65536+2
call draw_but_icon
 
stdcall ted_can_save,edi
stdcall [ted_can_save],edi
cmp al,1
je @f
and ecx,0xffff
155,7 → 28,7
mov edx,85*65536+25
call draw_but_icon
 
stdcall IsSel,edi
call [ted_is_select]
cmp al,0
jne @f
and ecx,0xffff
176,7 → 49,7
mov edx,290*65536+25
call draw_but_icon
 
inc cx ; Reverse
inc cx ; reverse
mov edx,315*65536+25
call draw_but_icon
or ecx,0x40000000
233,262 → 106,26
mov edx,450*65536+25
call draw_but_icon
 
pop edi edx ecx ebx
ret
 
;input:
; clear_o - åñëè =1 î÷èñòèòü îäíó ñòðîêó, =0 î÷èñòèòü âñå ñòðîêè îêíà äî íèçó
align 4
proc clear_line_before_draw, edit:dword, coords:dword, clear_o:dword, numb_lin:dword
pushad
mov edi,dword[edit]
mov ebx,dword[coords] ;ebx = x*2^16+y coords to left up point clear line
mov esi,dword[numb_lin] ;esi - number text line
 
sub ebx,0x10001 ;îòíèìàåì îòñòóïû äëÿ âûðàâíèâàíèÿ áóêâû ïî öåíòðó
cmp dword[clear_o],0
jne @f
add ebx,ted_rec_h
inc esi
ror ebx,16
xor bx,bx
add ebx,ted_wnd_l
add ebx,ted_rec_l ;bx = ted_wnd_l+ted_rec_l
ror ebx,16
@@:
 
mov eax,ted_wnd_h
add eax,ted_wnd_t
cmp ax,bx
jl .no_clear
sub ax,bx
 
mov cx,bx
shl ecx,16
 
xor bx,bx
add ebx,ted_wnd_w
sub ebx,ted_rec_l
xor cx,cx
add ecx,ted_rec_h
mov edx,ted_color_wnd_work
 
cmp dword[clear_o],0
je .pusto
cmp ax,cx
jge @f
.pusto:
mov cx,ax
@@:
 
stdcall IsSel,edi
cmp al,0
je @f
cmp ted_seln_y0,esi
jg @f
cmp ted_seln_y1,esi
jl @f
mov edx,ted_color_select ;draw selected line
@@:
 
mov eax,13 ;rect
int 0x40
 
stdcall IsSel,edi
cmp al,0
je .no_clear
 
mov al,13 ;rect
xor cx,cx
add ecx,ted_rec_h
cmp ted_seln_y0,esi
jne @f
push bx
mov edx,ted_seln_x0 ; âåðõíÿÿ ïîëîñà (çàòèðàåò ñëåâà)
cmp edx,[hScr.position]
jle .in_wnd
sub edx,[hScr.position]
imul edx,ted_rec_w
mov bx,dx
jmp .no_wnd
.in_wnd:
mov bx,0
.no_wnd:
mov edx,ted_color_wnd_work
int 0x40
pop bx
@@:
cmp ted_seln_y1,esi
jne @f
mov edx,ted_seln_x1 ; íèæíÿÿ ïîëîñà (çàòèðàåò ñïðàâà)
cmp edx,[hScr.position]
jle .in_wnd2
sub edx,[hScr.position]
imul edx,ted_rec_w
sub bx,dx
shl edx,16
add ebx,edx
.in_wnd2:
 
mov edx,ted_color_wnd_work
int 0x40
@@:
 
.no_clear:
popad
ret
endp
 
align 4
proc draw_main_win, edit:dword
locals
line_num dd ?
endl
pushad
mov edi,dword[edit]
 
mov eax,4 ;draw text
mov ecx,ted_text_colors
mov ecx,dword[ecx]
 
mov ebx,ted_wnd_l
add ebx,ted_rec_l
shl ebx,16
add ebx,ted_wnd_t
add ebx,ted_rec_t
add ebx,0x10001 ;äîáàâëÿåì îòñòóïû äëÿ âûðàâíèâàíèÿ áóêâû ïî öåíòðó
 
stdcall SelNormalize,edi ;need before draw select
mov esi,[wScr.position]
mov dword[line_num],esi
 
stdcall clear_line_before_draw, edi,ebx,1,esi
call GetFirstVisiblePos
cmp edx,0
je .no_draw_text
mov esi,1 ;äëèííà âûâîäèìîãî òåêñòà ïî 1-ìó ñèìâîëó
@@:
call IteratNext
cmp edx,ted_tex_1
jle .no_draw_text
 
; *** öâåòîâàÿ ðàçìåòêà
cmp ted_mode_color,0
je .no_col_change
cmp byte[edx+1],0
je .no_col_change
call GetSymbColor
.no_col_change:
 
cmp byte [edx],13
jne .no_13
cmp ted_mode_invis,1
jne .no_invis
push edx
mov edx,edi
add edx,ted_offs_symbol_new_line
int 0x40
pop edx
.no_invis:
add ebx,ted_rec_h
;optimized output \/
mov eax,ted_wnd_h
add eax,ted_wnd_t
cmp bx,ax
jg .no_draw_text
mov eax,4
;optimized output /\
and ebx,0xffff
ror ebx,16
add ebx,ted_wnd_l
add ebx,ted_rec_l
inc ebx
ror ebx,16
inc dword[line_num] ;increment line number
stdcall clear_line_before_draw,edi,ebx,1,dword[line_num]
call OptDrawLineLeft
jmp @b
.no_13:
 
int 0x40
ror ebx,16
add ebx,ted_rec_w
mov esi,ted_wnd_l
add esi,ted_wnd_w
cmp bx,si
jl .no_opt
call OptDrawLineRight
.no_opt:
mov si,1
ror ebx,16
jmp @b
.no_draw_text:
 
stdcall clear_line_before_draw,edi,ebx,0,dword[line_num]
stdcall draw_line_numbers,edi
stdcall draw_main_cursor,edi
 
;---------------------------------------------
; set all_redraw flag for draw all ScrollBar
; In some cases it is necessity to draw only the area
; of moving of a "runner", for acceleration of output -
; in this case the flag needs to be reset to 0 (zero).
xor eax,eax
inc eax
mov [wScr.all_redraw],eax
mov [hScr.all_redraw],eax
 
; draw for Vertical ScrollBar
stdcall [scrollbar_ver_draw], dword wScr
stdcall [scrollbar_hor_draw], dword hScr
; reset all_redraw flag
xor eax,eax
mov [wScr.all_redraw],eax
mov [hScr.all_redraw],eax
;---------------------------------------------
 
mov eax,13
;left-bottom square
mov ebx,ted_wnd_l
shl ebx,16
add ebx,ted_rec_l
mov ecx,ted_wnd_t
add ecx,ted_wnd_h
shl ecx,16
mov cx,word[hScr.size_y]
inc cx
mov edx,[sc.work]
int 0x40
 
;right-bottom square
mov ebx,ted_wnd_l
add ebx,ted_wnd_w
shl ebx,16
mov bx,word[wScr.size_x]
inc bx
int 0x40
 
stdcall draw_panel_find, edi
stdcall draw_panel_syntax, edi
popad
ret
endp
 
;txtBUp db 24
;txtBDn db 25
;txtBRi db 26
;txtBLe db 27
 
;input:
; edi = pointer to tedit struct
align 4
proc draw_panel_find, edit:dword
push edi
mov edi,dword[edit]
 
cmp ted_panel_id,TE_PANEL_FIND ;if not panel
proc draw_panel_find
;push edi
;mov edi,dword[edit]
cmp ted_panel_id,TED_PANEL_FIND ;if not panel
jne @f
push eax ebx ecx edx
 
mov eax,13 ;ðèñîâàíèå ïðÿìîóãîëüíèêà
mov ebx,TE_PANEL_WIDTH
mov ebx,TED_PANEL_WIDTH
mov ecx,ted_wnd_t
shl ecx,16
mov cx,20
506,12 → 143,13
stdcall [edit_box_draw], dword edit2
 
mov eax,13 ;ðèñîâàíèå ïðÿìîóãîëüíèêà
mov ebx,TE_PANEL_WIDTH
mov ebx,TED_PANEL_WIDTH
mov ecx,ted_wnd_t
add cx,20+15 ; 15 - height text box
shl ecx,16
add ecx,ted_wnd_h
add cx,word[hScr.size_y]
mov edx,ted_scr_h
add cx,word[edx+sb_offs_size_y]
sub cx,20+15-1 ; 15 - height text box
mov edx,[sc.work]
int 0x40
544,22 → 182,22
int 0x40
pop edx eax
.end_f:
pop edi
;pop edi
ret
endp
 
 
;input:
; edi = pointer to tedit struct
align 4
proc draw_panel_syntax, edit:dword
push edi
mov edi,dword[edit]
 
cmp ted_panel_id,TE_PANEL_SYNTAX ;if not panel
proc draw_panel_syntax
;push edi
;mov edi,dword[edit]
cmp ted_panel_id,TED_PANEL_SYNTAX ;if not panel
jne @f
push eax ebx ecx edx
pushad
 
mov eax,13 ;ðèñîâàíèå ïðÿìîóãîëüíèêà
mov ebx,TE_PANEL_WIDTH
mov ebx,TED_PANEL_WIDTH
mov ecx,ted_wnd_t
shl ecx,16
mov cx,20
576,7 → 214,8
and ecx,0xffff
ror ecx,16
add ecx,ted_wnd_h
add cx,word[hScr.size_y]
mov esi,ted_scr_h
add cx,word[esi+sb_offs_size_y]
sub cx,20
sub ecx,dword[tree1.box_height]
inc cx
607,7 → 246,7
mov edx,txtFormatApply
int 0x40
 
pop edx ecx ebx eax
popad
jmp .end_f
@@:
push eax edx
617,94 → 256,24
int 0x40 ;åñëè íåò ïàíåëè òî óäàëÿåì êíîïêó
pop edx eax
.end_f:
pop edi
;pop edi
ret
endp
 
 
align 4
proc draw_cur_line, edit:dword
pushad
mov edi,dword[edit]
 
mov ebx,ted_wnd_l
add ebx,ted_rec_l
shl ebx,16
mov eax,ted_cur_y
imul eax,ted_rec_h
mov bx,ax
add ebx,ted_wnd_t
add ebx,ted_rec_t ;ebx - êîîðäèíàòû äëÿ ïðÿìîóãîëüíèêà î÷èñòêè ëèíèè
add ebx,0x10001 ;äîáàâëÿåì îòñòóïû äëÿ âûðàâíèâàíèÿ áóêâû ïî öåíòðó
 
stdcall SelNormalize,edi ;need before draw select
mov ecx,ted_cur_y
add ecx,[wScr.position]
stdcall clear_line_before_draw, tedit0, ebx,1,ecx
 
mov esi,[hScr.position]
call GetPosByParam
 
cmp ted_gp_opt,2
jne .no_draw_text
; mov eax,4 ;draw text
call GetSymbColor
mov esi,1 ;draw 1 symbol
@@:
;call IteratNext
cmp edx,ted_tex_1
jle .no_draw_text
 
; *** öâåòîâàÿ ðàçìåòêà
cmp ted_mode_color,0
je .no_col_change
cmp byte[edx+1],0
je .no_col_change
call GetSymbColor
.no_col_change:
 
mov eax,4 ;draw text
cmp byte [edx],13
jne .no_13
cmp ted_mode_invis,1
jne .no_draw_text
push edx
mov edx,edi
add edx,ted_offs_symbol_new_line
int 0x40
pop edx
jmp .no_draw_text
.no_13:
 
int 0x40
ror ebx,16
add ebx,ted_rec_w
mov eax,ted_wnd_w
add eax,ted_wnd_l ;ax = îòñòóï ïî îñè x
cmp bx,ax
jge .no_draw_text ;Opt
ror ebx,16
call IteratNext
jmp @b
.no_draw_text:
 
stdcall draw_main_cursor,edi
popad
ret
endp
 
MIN_M_WND_H equ 100
MIN_W_SCRL_ARE equ 3
MIN_H_SCRL_ARE equ 3
align 4
proc EvSize, edit:dword
push eax ecx edx edi
pushad
mov edi,dword[edit]
mov ebx,ted_scr_h
mov esi,ted_scr_w
 
m2m ted_wnd_w,[procinfo.client_box.width] ;ñòàâèì øèðèíó îêíà ðåäàêòîðà ðàâíîé øèðèíå âñåãî îêíà
mov eax,ted_wnd_l
sub ted_wnd_w,eax ;îòíèìàåì îòñòóï ñëåâà
mov eax,[wScr] ;+0 size_x
mov eax,dword[esi+sb_offs_size_x]
and eax,0xffff
sub ted_wnd_w,eax ;îòíèìàåì øèðèíó âåðò. ñêðîëëèíãà
 
714,11 → 283,11
mov ted_wnd_h,MIN_M_WND_H
@@:
 
mov ax,word[hScr.size_y]
mov ax,word[ebx+sb_offs_size_y]
and eax,0xffff
sub ted_wnd_h,eax ;îòíèìàåì âûñîòó ãîðèç. ñêðîëëèíãà
mov eax,ted_wnd_h ;eax = âûñîòà îêíà - âûñîòà ãîðèç. ñêðîëëèíãà
mov word[hScr.start_y],ax ;ïåðåäâèãàåì ãîðèç. ñêðîëëèíã
mov word[ebx+sb_offs_start_y],ax ;ïåðåäâèãàåì ãîðèç. ñêðîëëèíã
mov eax,ted_wnd_t
sub ted_wnd_h,eax ;îòíèìàåì îòñòóï ñâåðõó
 
725,15 → 294,15
mov eax,ted_wnd_w
mov ecx,ted_wnd_l
add eax,ecx
mov word[wScr.start_x],ax ;ïåðåäâèãàåì âåðò. ñêðîëëèíã
mov word[esi+sb_offs_start_x],ax ;ïåðåäâèãàåì âåðò. ñêðîëëèíã
mov eax,ted_wnd_h
mov word[wScr.size_y],ax ;çàäàåì âûñîòó âåðò. ñêðîëëèíãà
mov word[esi+sb_offs_size_y],ax ;çàäàåì âûñîòó âåðò. ñêðîëëèíãà
 
add ecx,ted_rec_l ;ecx=ted_wnd_l+ted_rec_l
mov [hScr.start_x],cx ;ñäâèãàåì ãîðèç. ñêðîëëèíã ïî ðàçìåðó ëåâîãî îòñòóïà äëÿ öèôð
mov word[ebx+sb_offs_start_x],cx ;ñäâèãàåì ãîðèç. ñêðîëëèíã ïî ðàçìåðó ëåâîãî îòñòóïà äëÿ öèôð
mov eax,ted_wnd_w
sub eax,ted_rec_l
mov word[hScr.size_x],ax ;çàäàåì øèðèíó ãîðèç. ñêðîëëèíãà
mov word[ebx+sb_offs_size_x],ax ;çàäàåì øèðèíó ãîðèç. ñêðîëëèíãà
 
mov eax,ted_wnd_h ;calculate lines in page
sub eax,ted_rec_t
744,7 → 313,7
jg @f
mov eax,MIN_W_SCRL_ARE
@@:
mov [wScr.cur_area],eax
mov dword[esi+sb_offs_cur_area],eax
 
mov eax,ted_wnd_w ;calculate cols in page
sub eax,ted_rec_l
756,7 → 325,7
mov eax,MIN_H_SCRL_ARE
@@:
dec eax ; ???
mov [hScr.cur_area],eax
mov dword[ebx+sb_offs_cur_area],eax
 
mov eax,ted_wnd_t
mov edi,dword tree1
766,558 → 335,11
mov dword[edit2.top],eax ;=ted_wnd_t
add dword[edit2.top],20
 
pop edi edx ecx eax
call OnInitialUpdate
ret
endp
 
align 4
OnInitialUpdate:
mov [wScr.redraw],1
mov [hScr.redraw],1
ret
 
;input:
; edi = pointer to tedit struct
;output:
; ecx = íîâûé öâåò ñèìâîëà
; edx = pointer to symbol
; edx = 0 if text not in screen
align 4
GetFirstVisiblePos:
push ecx
mov edx,ted_tex
xor ecx,ecx
@@:
cmp ecx,[wScr.position]
je @f
call IteratNext
cmp edx,ted_tex_1
jle @f
cmp byte [edx],13
jne @b
inc ecx
jmp @b
@@:
 
cmp ecx,[wScr.position]
je @f
xor edx,edx
@@:
cmp ecx,[wScr.max_area]
jle @f
mov [wScr.max_area],ecx
@@:
pop ecx
call OptDrawLineLeft
ret
 
 
 
;input:
; edx = pointer to symbol
; edi = pointer to tedit struct
;output:
; ecx = íîâûé öâåò ñèìâîëà
; edx = óêàçàòåëü íà ïåðâûé ëåâûé ñèìâîë
align 4
proc OptDrawLineLeft
push ebx
 
mov ebx,[hScr.position]
cmp ebx,0
je .ret_f
push eax
mov eax,edx
 
cmp edx,ted_tex
jne @f
call IteratNext
jmp .beg_cycle
@@:
 
cmp ebx,0
je @f
 
cmp byte[edx],13
jne @f
call IteratNext
.beg_cycle:
@@:
cmp edx,ted_tex_1
jle @f
cmp byte[edx],13
je @f
cmp ebx,0
je @f
;--------------------------------------
xor eax,eax ;eax áóäåò ìåíÿòüñÿ
mov al,byte[edx+1]
cmp al,0
je .no_color
cmp eax,ted_colors_text_count
jge .no_color
xor ecx,ecx
mov cl,byte[edx+1]
shl cx,2
add ecx,ted_text_colors
mov ecx,dword[ecx]
.no_color:
;--------------------------------------
mov eax,edx
call IteratNext
dec ebx
jmp @b
@@:
mov edx,eax
pop eax
.ret_f:
call GetSymbColor
pop ebx
ret
endp
 
;input:
; edx = pointer to symbol
; edi = pointer to tedit struct
;output:
; edx = pointer to 13 symbol
align 4
proc OptDrawLineRight
push eax
mov eax,edx
@@:
cmp edx,ted_tex_1
jle @f
cmp byte[edx],13
je @f
mov eax,edx
call IteratNext
jmp @b
@@:
mov edx,eax ;perv sumbol
call GetSymbColor
 
pop eax
ret
endp
 
align 4
proc draw_main_cursor, edit:dword
pushad
mov edi,dword[edit]
 
mov eax,13 ;draw cursor
mov ecx,ted_wnd_t ;calc rect -> y0,y1
add ecx,ted_rec_t
mov edx,ted_cur_y
imul edx,ted_rec_h
add ecx,edx
 
cmp ted_cur_ins,1 ;ïðîâåðêà ðåæèìà ðàáîòû êóðñîðà (îáû÷íûé èëè âñòàâêà)
jne @f
mov edx,ted_rec_h
inc edx ;1->1, 3->2, 5->3, ...
shr edx,1 ;edx = âûñîòà ñòðîêè äåëåííàÿ íà 2 (êîãäà êóðñîð íå ïîëíûé)
add ecx,edx
@@:
shl ecx,16
add ecx,ted_rec_h
cmp ted_cur_ins,1
jne @f
shr cx,1 ;äåëèì âûñîòó êóðñîðà íà 2
@@:
 
mov ebx,ted_wnd_l ;calc rect -> x0,x1
add ebx,ted_rec_l
mov edx,ted_cur_x
imul edx,ted_rec_w
add ebx,edx
shl ebx,16
add ebx,ted_rec_w
 
mov edx,ted_color_cursor
int 0x40 ;âûâîä êóðñîðà
 
call GetPos
cmp ted_gp_opt,2
jne @f
mov eax,4 ;draw text
mov esi,1
ror ecx,16
mov bx,cx
add ebx,0x10001
cmp ted_cur_ins,1
jne .no_up_tetx
mov ecx,ted_rec_h
inc cx ; 1->1, 3->2, 5->3, ...
shr cx,1
sub bx,cx
.no_up_tetx:
mov ecx,ted_color_cur_text
call ConvertInvisSymb
int 0x40
@@:
 
mov eax,4
mov ebx,ted_wnd_l
add ebx,ted_rec_l
shl ebx,16
add ebx,ted_wnd_t
add ebx,3
mov ecx,ted_color_wnd_bord
or ecx,0x80000000
mov edx,txtRow
int 0x40 ;âûâîä ïîäïèñè 'Ñòðîêà'
 
add ebx,0x500000
mov edx,txtCol
int 0x40 ;âûâîä ïîäïèñè 'Çíàê'
 
cmp ted_tim_undo,0
je @f
add ebx,0x500000
mov edx,txtOtm
int 0x40
sub ebx,0x500000
@@:
 
stdcall draw_bufer,edi
stdcall draw_help_f1
 
mov eax,47 ;draw cursor coords
mov esi,ted_color_wnd_bord
or esi,0x40000000
 
mov edx,ebx
ror edx,16
sub edx,35
ror edx,16
;add edx,3
mov ebx,0x40000 ;Row=...
mov ecx,ted_cur_y
inc ecx
add ecx,[wScr.position]
 
push edi
mov edi,ted_color_wnd_work
int 0x40 ;âûâîä ÷èñëà òåêóùåé ñòðîêè
pop edi
 
;mov ebx,0x40000 ;Col=...
mov ecx,ted_cur_x
inc ecx
add ecx,[hScr.position]
add edx,0x500000
push edi
mov edi,ted_color_wnd_work
int 0x40 ;âûâîä ÷èñëà çíàêîâ
pop edi
 
cmp ted_tim_undo,0
je @f
mov ecx,ted_tim_undo
add edx,0x500000
int 0x40
@@:
 
popad
ret
endp
 
align 4
proc draw_bufer, edit:dword
pushad
mov edi,dword[edit]
 
cmp byte[buf],0
je @f
mov ebx,ted_wnd_l
add ebx,ted_rec_l
add bx,250
shl ebx,16
add ebx,ted_wnd_t
add ebx,3
mov ecx,ted_color_wnd_bord
or ecx,0x40000000
mov edi,ted_color_wnd_work
mov edx,txtBuf
mov esi,buf
call strlen
if lang eq ru
cmp eax,15
jle .crop_buf
mov eax,15
.crop_buf:
mov esi,7 ;7=len(txtBuf)
else
cmp eax,14
jle .crop_buf
mov eax,14
.crop_buf:
mov esi,8 ;8=len(txtBuf)
end if
add esi,eax
 
mov eax,4
int 0x40
@@:
popad
ret
endp
 
;input:
; edi = pointer to tedit struct
align 4
proc draw_help_f1
pushad
 
mov eax,13 ;clear place before draw help
mov ebx,ted_wnd_l
add ebx,ted_rec_l
shl ebx,16
add ebx,ted_wnd_w
sub ebx,ted_rec_l
mov ecx,ted_wnd_t
add ecx,13
shl ecx,16
add ecx,ted_rec_h
mov edx,ted_color_wnd_capt
int 0x40
 
cmp ted_help_id,-1
je @f
mov eax,ted_help_id
ColToIndexOffset eax,edx
 
;SetCoordinates
mov ebx,ted_wnd_l
add ebx,ted_rec_l
shl ebx,16
add ebx,ted_wnd_t
add ebx,13 ;=3+10
 
;SetTextColor
xor eax,eax
mov al,byte[edx+MAX_COLOR_WORD_LEN+6]
shl ax,2
mov ecx,ted_text_colors
add ecx,eax
mov ecx,dword[ecx]
or ecx,0xc0000000 ;SetTextStyles
mov esi,edi
mov edi,ted_color_wnd_work
mov eax,4
int 0x40
mov edi,esi
 
;*** draw help string ***
mov ecx,ted_color_wnd_bord
or ecx,0x80000000
mov edx,dword[edx+MAX_COLOR_WORD_LEN]
cmp edx,0
je @f
add edx,ted_help_text_f1
add ebx,0x500000
int 0x40
@@:
popad
ret
endp
 
align 4
proc draw_line_numbers, edit:dword
pushad
mov edi,dword[edit]
 
;top panel with caption
mov ebx,ted_wnd_l
; add ebx,ted_rec_l
shl ebx,16
add ebx,ted_wnd_w
; sub ebx,ted_rec_l
mov edx,ted_color_wnd_work
mov ecx,ted_wnd_t
shl ecx,16
add ecx,ted_rec_t
mov eax,13
mov edx,ted_color_wnd_capt
int 0x40
 
;line numbers
mov ebx,0x40000 ;format
mov ecx,[wScr.position]
inc ecx
mov edx,3
add edx,ted_wnd_l
rol edx,16
add edx,ted_wnd_t
add edx,ted_rec_t
@@:
 
push ebx ecx edx
;left panel with numbers
mov ebx,ted_wnd_l
shl ebx,16
add ebx,ted_rec_l
mov ecx,ted_rec_h
rol ecx,16
mov cx,dx
rol ecx,16
mov eax,13
mov edx,ted_color_wnd_capt
int 0x40 ;ðèñóåì ïðÿìîóãîëüíèê ïîä íîìåðîì ñòðîêè
pop edx ecx ebx
 
mov eax,47
mov esi,ted_color_wnd_bord
int 0x40 ;ðèñóåì íîìåð ñòðîêè
inc ecx
add edx,ted_rec_h
sub edx,ted_wnd_t
mov esi,edx
and esi,0xffff
cmp esi,ted_wnd_h
jge @f
add edx,ted_wnd_t
jmp @b
@@:
 
popad
ret
endp
;this function need to optimize output
align 4
proc draw_cursor_sumb, edit:dword
push eax ecx edx edi
mov edi,dword[edit]
 
mov eax,13 ;rect
mov ebx,ted_wnd_l
add ebx,ted_rec_l
mov edx,ted_cur_x
imul edx,ted_rec_w
add ebx,edx
shl ebx,16
add ebx,ted_rec_w
 
mov ecx,ted_wnd_t ;calc rect -> y0,y1
add ecx,ted_rec_t
mov edx,ted_cur_y
imul edx,ted_rec_h
add ecx,edx
shl ecx,16
add ecx,ted_rec_h
 
mov edx,ted_color_wnd_work
push ecx
stdcall SelNormalize,edi
 
mov ecx,[wScr.position]
sub ted_seln_y0,ecx
sub ted_seln_y1,ecx
 
mov ecx,ted_cur_y
cmp ecx,ted_seln_y0
jl .no_cur_sel
cmp ecx,ted_seln_y1
jg .no_cur_sel
mov edx,ted_color_select
cmp ecx,ted_seln_y0
jne @f
mov ecx,ted_cur_x
add ecx,[hScr.position]
cmp ecx,ted_seln_x0
jge @f
mov edx,ted_color_wnd_work
@@:
 
mov ecx,ted_cur_y
cmp ecx,ted_seln_y1
jne .no_cur_sel
mov ecx,ted_cur_x
add ecx,[hScr.position]
cmp ecx,ted_seln_x1
jl .no_cur_sel
mov edx,ted_color_wnd_work
 
.no_cur_sel:
pop ecx
int 0x40
 
call GetPos
cmp ted_gp_opt,2
jne @f
push esi
mov eax,4 ;draw text
mov esi,1
ror ecx,16
mov bx,cx
add ebx,0x10001
call GetSymbColor
call ConvertInvisSymb
int 0x40
pop esi
@@:
 
pop edi edx ecx eax
ret
endp
 
 
;input:
; edx -> pointer to text
; edi -> óêàçàòåëü íà ñòðóêòóðó tedit
;output:
; ecx = color
; if ted_mode_color=0 then ecx=ted_color_wnd_text
align 4
GetSymbColor:
mov ecx,ted_color_wnd_text ;çàäàåì öâåò òåêñòà ïî óìîë÷àíèþ
 
push eax edx
cmp ted_mode_color,0
je .exit
jmp .on_first
@@:
call IteratPerv
cmp edx,ted_tex_1
jle .exit
.on_first:
xor eax,eax
mov al,byte[edx+1]
cmp al,0 ;åñëè al=0 òî öâåò íå ìåíÿåòñÿ
je @b
 
cmp eax,ted_colors_text_count
jge .exit
 
shl ax,2 ;óìíîæàåì èíäåêñ öâåòà íà 4 áàéòà
mov ecx,ted_text_colors ;ïðèáàâëÿåì ñìåùåíèå 1-ãî öâåòà
add ecx,eax
mov ecx,dword[ecx] ;óñòàíàâëèâàåì òåêóùèé öâåò òåêñòà ïî ñìåùåíèþ
.exit:
pop edx eax
ret
 
;input:
; edx = pointer to text
; edi = pointer to tedit struct
align 4
ConvertInvisSymb:
cmp ted_mode_invis,1
jne @f
cmp byte [edx],13
jne @f
mov edx,edi
add edx,ted_offs_symbol_new_line
@@:
ret
 
;input:
; ecx = 0x4000____
; cx = icon index
; edx = x*2^16+y
1334,16 → 356,23
shl ecx,16
mov cx,19 ;=20-1
mov bx,19 ;=20-1
mov esi,ebx
shr esi,16
add esi,20
cmp esi,[procinfo.client_box.width]
jge @f ;êíîïêà íå âëåçëà â ýêðàí
mov esi,[sc.work_button]
int 0x40
int 0x40 ;ñòàâèì êíîïêó
mov eax,7 ;bmp
@@:
pop esi edx ecx
 
cmp eax,7
jne @f ;êíîïêà íå âëåçëà â ýêðàí
mov ebx,ecx
ror ebx,16
cmp bx,0x4000
jne @f
 
mov eax,7 ;bmp
mov ebx,[bmp_icon]
push ecx
and ecx,0xffff
1352,9 → 381,8
mov ecx,20
shl ecx,16
add ecx,20
int 0x40
int 0x40 ;ñòàâèì ðèñóíîê íà êíîïêó
pop ecx
 
@@:
pop ebx eax
ret
/programs/other/t_edit/t_edit.asm
16,8 → 16,8
 
MAX_COLOR_WORD_LEN equ 40
maxChars equ 100002 ;(...+2)
BUF_SIZE equ 1000 ;bufer for copy|paste
maxColWords equ 10000
BUF_SIZE equ 1000 ;buffer for copy|paste
maxSyntaxFileSize equ 410000
 
include '../../proc32.inc'
include '../../macros.inc'
27,9 → 27,8
include 'lang.inc'
include 't_data.inc'
include 'strlen.inc'
include 't_work.inc' ;text work functions
include 't_draw.inc' ;draw main window functions
include 't_button.inc'
include 't_button.inc' ;text work functions
 
@use_library
 
37,15 → 36,16
start:
mcall 48,3,sc,sizeof.system_colors
 
m2m [wScr.bckg_col],[sc.work]
m2m [wScr.frnt_col],[sc.work_button]
m2m [wScr.line_col],[sc.work_button_text]
mov eax,[sc.work]
mov [wScr.bckg_col],eax
mov [hScr.bckg_col],eax
mov eax,[sc.work_button]
mov [wScr.frnt_col],eax
mov [hScr.frnt_col],eax
mov eax,[sc.work_button_text]
mov [wScr.line_col],eax
mov [hScr.line_col],eax
 
m2m [hScr.bckg_col],[sc.work]
m2m [hScr.frnt_col],[sc.work_button]
m2m [hScr.line_col],[sc.work_button_text]
 
 
mcall 68,11
or eax,eax
jz button.exit
75,7 → 75,7
@@:
 
;---------------------------------------------------------------------
stdcall ted_init, tedit0
stdcall [ted_init], tedit0
stdcall dword[tl_data_init], tree1
;---------------------------------------------------------------------
 
174,7 → 174,10
.end_dir_init:
 
;--- load color option file ---
stdcall InitColText, tedit0
mov ebx,dword[fn_col_option]
copy_path ebx,fn_syntax_dir,file_name_rez,0x0
copy_path file_name_rez,sys_path,file_name,0x0
stdcall [ted_init_syntax_file], tedit0,run_file_70,file_name
 
;--- get cmd line ---
cmp byte[buf_cmd_lin+3],0 ;buf_cmd_lin
202,7 → 205,7
mcall 9,procinfo,-1
stdcall EvSize,edi
 
mov eax,13 ;âåðõíèé ïðÿìîóãîëüíèê, äëÿ î÷èñòêè âåðõíåé ïàíåëè
mov eax,13 ;¢¥àå­¨© ¯àאַ㣮«ì­¨ª, ¤«ï ®ç¨á⪨ ¢¥àå­¥© ¯ ­¥«¨
xor ebx,ebx
mov ecx,ted_wnd_t
mov bx,word [procinfo.client_box.width]
234,7 → 237,7
 
cmp [err_ini0],1
je @f
stdcall draw_main_win, tedit0
stdcall [ted_draw], tedit0
@@:
 
mcall 12,2
263,53 → 266,13
test word [edit1.flags],10b;ed_focus ; ¥á«¨ ­¥ ¢ 䮪ãá¥, ¢ë室¨¬
jne still
 
;-----------------------------------------------
cmp [hScr.delta2],0
jne .horizontal
.vertical:
mov eax,[wScr.max_area]
cmp eax,[wScr.cur_area]
jbe .horizontal
; mouse event for Vertical ScrollBar
stdcall [scrollbar_ver_mouse], dword wScr
mov eax,wScr.redraw
xor ebx,ebx
cmp [eax],ebx
je @f
mov [eax],ebx
stdcall [ted_mouse], tedit0
 
stdcall draw_main_win, tedit0
jmp still
@@:
cmp [wScr.delta2],0
jne still
.horizontal:
mov eax,[hScr.max_area]
cmp eax,[hScr.cur_area]
jbe .other
; mouse event for Horizontal ScrollBar
push dword hScr
call [scrollbar_hor_mouse]
mov eax,hScr.redraw
xor ebx,ebx
cmp [eax],ebx
je .other
mov [eax],ebx
stdcall draw_main_win, tedit0
jmp still
.other:
cmp [wScr.delta2],0
jne still
cmp [hScr.delta2],0
jne still
 
stdcall mouse_wnd_main, tedit0
 
cmp byte[tedit0.panel_id],TE_PANEL_FIND ;if not panel
cmp byte[tedit0.panel_id],TED_PANEL_FIND ;if not panel
jne @f
stdcall [edit_box_mouse], dword edit2
@@:
cmp byte[tedit0.panel_id],TE_PANEL_SYNTAX ;if not panel
cmp byte[tedit0.panel_id],TED_PANEL_SYNTAX ;if not panel
jne .menu_bar_1 ;@f
stdcall [tl_mouse], tree1
;-----------------------------------------------
324,15 → 287,15
je button.exit
cmp [menu_data_1.cursor_out],dword 3
jne @f
stdcall but_SaveFile, tedit0
stdcall [ted_but_save_file], tedit0,run_file_70,[edit1.text]
@@:
cmp [menu_data_1.cursor_out],dword 2
jne @f
call but_OpenFile
call ted_but_open_file
@@:
cmp [menu_data_1.cursor_out],dword 1
jne @f
call but_NewFile
call ted_but_new_file
@@:
;cmp [menu_data_1.cursor_out],dword 0
;jne @f
357,29 → 320,30
align 4
key:
mcall 66,3 ;66.3 ¯®«ãç¨âì á®áâ®ï­¨¥ ã¯à ¢«ïîé¨å ª« ¢¨è
xor ebx,ebx
xor esi,esi
mov ecx,1
test al,0x03 ;[Shift]
jz @f
mov cl,2
or ebx,KM_SHIFT
or esi,KM_SHIFT
@@:
test al,0x0c ;[Ctrl]
jz @f
or ebx,KM_CTRL
or esi,KM_CTRL
@@:
test al,0x30 ;[Alt]
jz @f
mov cl,3
or ebx,KM_ALT
or esi,KM_ALT
@@:
test al,0x80 ;[NumLock]
jz @f
or ebx,KM_NUMLOCK
or esi,KM_NUMLOCK
@@:
 
mcall 26,2,,conv_tabl ;26.2 ¯®«ãç¨âì à áª« ¤ªã ª« ¢¨ âãàë
mcall 2 ;¯®«ãç ¥¬ ª®¤ ­ ¦ â®© ª« ¢¨è¨
;stdcall [tl_key], tree1 ;???
;stdcall [tl_key], tree1
 
test word [edit1.flags],10b;ed_focus ; ¥á«¨ ­¥ ¢ 䮪ãá¥, ¢ë室¨¬
je @f
421,9 → 385,10
jmp still
@@:
 
stdcall ted_key, tedit0, conv_tabl
stdcall [ted_key], tedit0, conv_tabl,esi
jmp still
 
align 4
button:
; cmp [menu_active],1 ;¥á«¨ ­ ¦ «¨ ¬¥­î, â® á­ ç «  ॠªæ¨ï ­  ¬¥­î
; jne @f ;mouse.menu_bar_1
434,35 → 399,35
mcall 17 ;¯®«ãç¨âì ª®¤ ­ ¦ â®© ª­®¯ª¨
cmp ah,3
jne @f
call but_NewFile
call ted_but_new_file
@@:
cmp ah,4
jne @f
call but_OpenFile
call ted_but_open_file
@@:
cmp ah,5
jne @f
stdcall but_SaveFile, tedit0
stdcall [ted_but_save_file], tedit0,run_file_70,[edit1.text]
@@:
cmp ah,6
jne @f
stdcall ted_but_select_word, tedit0
stdcall [ted_but_select_word], tedit0
@@:
cmp ah,7
jne @f
stdcall ted_but_cut, tedit0
stdcall [ted_but_cut], tedit0
@@:
cmp ah,8
jne @f
stdcall ted_but_copy, tedit0
stdcall [ted_but_copy], tedit0
@@:
cmp ah,9
jne @f
stdcall ted_but_paste, tedit0
stdcall [ted_but_paste], tedit0
@@:
cmp ah,10
jne @f
stdcall but_find, tedit0
call ted_but_find
@@:
cmp ah,11
jne @f
474,23 → 439,23
@@:
cmp ah,13
jne @f
stdcall but_sumb_upper, tedit0
stdcall [ted_but_sumb_upper], tedit0
@@:
cmp ah,14
jne @f
stdcall but_sumb_lover, tedit0
stdcall [ted_but_sumb_lover], tedit0
@@:
cmp ah,15
jne @f
stdcall but_reverse, tedit0
stdcall [ted_but_reverse], tedit0
@@:
cmp ah,16
jne @f
stdcall ted_but_undo, tedit0
stdcall [ted_but_undo], tedit0
@@:
cmp ah,17
jne @f
stdcall ted_but_redo, tedit0
stdcall [ted_but_redo], tedit0
@@:
cmp ah,18
jne @f
511,13 → 476,13
@@:
cmp ah,201
jne @f
stdcall but_FindText, tedit0
stdcall [ted_but_find_next], tedit0
@@:
 
cmp ah,1
jne still
.exit:
stdcall ted_can_save, tedit0
stdcall [ted_can_save], tedit0
cmp al,1
jne @f
stdcall [mb_create],msgbox_8,thread ;message: save changes in file?
526,7 → 491,7
mov ecx,[bmp_icon]
call mem_Free
 
stdcall ted_delete, tedit0
stdcall [ted_delete], tedit0
stdcall dword[tl_data_clear], tree1
mcall -1 ;¢ë室 ¨§ ¯à®£à ¬¬ë
 
536,7 → 501,7
err_ini0 db 0
 
edit1 edit_box 250, 220, 5, 0xffffff, 0xff80, 0xff0000, 0xff, 0x4080, 300, buf_cmd_lin, mouse_dd, 0
edit2 edit_box TE_PANEL_WIDTH-1, 0, 20, 0xffffff, 0xff80, 0xff0000, 0xff, 0x4080, 300, buf_find, mouse_dd, 0
edit2 edit_box TED_PANEL_WIDTH-1, 0, 20, 0xffffff, 0xff80, 0xff0000, 0xff, 0x4080, 300, buf_find, mouse_dd, 0
 
buf_cmd_lin db 302 dup(0)
buf_find db 302 dup(0)