From f751f0881f3e18bc730dfef5eb9541ab3e9b324f Mon Sep 17 00:00:00 2001
From: IgorA Программа для работы с текстовыми файлами.
Лицензия свободная.TextEditor версия от 29.12.2009
+TextEditor версия от 22.04.2010
О программе
Действия | TinyPad | TextEditor | Комментарий |
---|---|---|---|
Действия | TinyPad | TextEditor | |
Работа с несколькими документами | -есть | нет | пока не планирую сделать | есть | нет (возможно скоро будет) |
Поддержка кодировок KOI8M, OEM | -есть | нет | хотелось-бы сделать | есть | нет |
Подсветка синтаксиса | подсветка заранее зашита в программу | подсветка берется из файлов, которые может указать пользователь. Также есть возможность получать справку по подсвечиваемым словам (если она есть в файлах подсветки, навести курсор на слово и нажать F1). | |
Многократная отмена/повтор действий | diff --git a/programs/other/t_edit/t_button.inc b/programs/other/t_edit/t_button.inc index f616c95e7..23c77d613 100644 --- a/programs/other/t_edit/t_button.inc +++ b/programs/other/t_edit/t_button.inc @@ -1,16 +1,14 @@ +align 4 but_NewFile: push eax ebx - call CanSave + stdcall ted_can_save, tedit0 cmp al,1 jne @f - push thread - push msgbox_2 - call [mb_create] ;message: save changes in file? + stdcall [mb_create],msgbox_2,thread ;message: save changes in file? ;mov eax,5 ;mov ebx,50 ;int 0x40 - push msgbox_2_funct - call [mb_setfunctions] + stdcall [mb_setfunctions],msgbox_2_funct jmp .ret_f @@: call On_NewFile @@ -18,48 +16,59 @@ but_NewFile: pop ebx eax ret +align 4 On_NewFile: - push eax - mov al,1 - call Clear + stdcall ted_clear, tedit0,1 call draw_but_toolbar stdcall draw_main_win, tedit0 - pop eax ret +align 4 On_SaveAndNewFile: - call but_SaveFile - cmp byte[err_sav],0 + push edi + mov edi, tedit0 + + stdcall but_SaveFile,edi + cmp ted_err_save,0 jne @f call On_NewFile @@: + pop edi ret +align 4 +but_no_msg_OpenFile: ;дгЄжЁп ®вЄалвЁп д ©« зҐаҐ§ ЎҐ§ ®Є® б®®ЎйҐЁп + stdcall ted_on_open_file, tedit0 + ret + + +;дгЄжЁп ®вЄалвЁп д ©« б ў®§¬®¦л¬ ®Є®¬ б®®ЎйҐЁп (® ў®§¬®¦®бвЁ ®в¬ҐЁвм ®вЄалвЁҐ) +align 4 but_OpenFile: push eax - call CanSave + stdcall ted_can_save, tedit0 cmp al,1 jne @f - push thread - push msgbox_5 - call [mb_create] ;message: save changes in file? - push msgbox_5_funct - call [mb_setfunctions] + stdcall [mb_create],msgbox_5,thread ;message: save changes in file? + stdcall [mb_setfunctions],msgbox_5_funct jmp .ret_f @@: - call On_OpenFile + stdcall ted_on_open_file, tedit0 .ret_f: pop eax ret -On_OpenFile: - push eax ebx +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], [tex] + m2m [run_file_70.param4], ted_tex mov [run_file_70.rezerv], 0 push dword[edit1.text] pop dword[run_file_70.name] @@ -78,42 +87,42 @@ On_OpenFile: add ax,48 mov byte[msgbox_4.err],al - push thread - push msgbox_4 - call [mb_create] ;message: Can-t open text file! + stdcall [mb_create],msgbox_4,thread ;message: Can-t open text file! jmp .ret_f @@: cmp ebx,-1 je .ret_f ;if open file call OpenFile - call draw_but_toolbar - stdcall draw_main_win, tedit0 cmp ebx,maxChars-2 jl .ret_f - push thread - push msgbox_1 - call [mb_create] + stdcall [mb_create],msgbox_1,thread .ret_f: - pop ebx eax + pop edi ebx eax ret +endp -but_SaveFile: - push eax ebx ecx edx - call CanSave + +align 4 +proc but_SaveFile, edit:dword + pushad + + stdcall ted_can_save,edi cmp al,0 je .no_save - mov ecx,maxChars + mov edi,dword[edit] + + mov ecx,maxChars call mem_Alloc push eax - mov edx,[tex] + mov edx,ted_tex xor ecx,ecx @@: call IteratNext - cmp edx,[tex_1] - jle @f ;edx = [tex] or edx = [tex]+sizeof.symbol + 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 @@ -137,7 +146,7 @@ but_SaveFile: mov ebx,run_file_70 int 0x40 - mov [err_sav],al + mov ted_err_save,ax cmp eax,0 je .no_msg @@ -151,22 +160,25 @@ but_SaveFile: add ax,48 mov byte[msgbox_6.err],al - push thread - push msgbox_6 - call [mb_create] ;message: Can-t save text file! + stdcall [mb_create],msgbox_6,thread ;message: Can-t save text file! jmp @f .no_msg: - m2m [ls_tim],[ch_tim] + m2m ted_tim_ls,ted_tim_ch @@: pop ecx call mem_Free .no_save: - pop edx ecx ebx eax + popad ret +endp + + +align 4 +proc but_FindText, edit:dword + pushad + mov edi,dword[edit] -but_FindText: - push eax ebx ecx edx edi call GetPos mov eax,[edit2.text] mov bl,byte[eax] @@ -176,7 +188,7 @@ but_FindText: je @f ; find call IteratNext - cmp edx,[tex_1] + cmp edx,ted_tex_1 jle @f jmp @b @@: @@ -184,37 +196,43 @@ but_FindText: je @f call GetTexCoords inc ebx ;move cursor right - mov [sel.x1],ebx - mov [sel.y1],eax + mov ted_sel_x1,ebx + mov ted_sel_y1,eax mov edx,eax mov ecx,ebx call GoToPos - mov edx,edi + mov edx,esi ;esi Ўл«® гбв ®ў«Ґ® ў GetFindRezult call GetTexCoords - mov [sel.x0],ebx - mov [sel.y0],eax - stdcall draw_main_win, tedit0 + mov ted_sel_x0,ebx + mov ted_sel_y0,eax + stdcall draw_main_win,edi jmp .end_find @@: - push thread - push msgbox_7 - call [mb_create] ;message: Can not find text + stdcall [mb_create],msgbox_7,thread ;message: Can not find text .end_find: - pop edi edx ecx ebx eax + 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) -; edi - first symbol pointer +; esi - first symbol pointer +;description: +; ”гЄжЁп Їа®ўҐапҐв б®ўЇ ¤ Ґв «Ё ⥪бв ў ЎгдҐаҐ eax +; б ⥪б⮬ । Єв®а Ї® гЄ § ⥫о edx. +; ‘в ¤ авлҐ дгЄжЁЁ ( Їа. strcmp) вгв Ґ Ї®¤®©¤гв, Ї®в®¬г зв® +; ў Ї ¬п⨠। Єв®а ⥪бв ᮤҐа¦Ёвбп Ґ ў ўЁ¤Ґ ascii бва®Є. +align 4 GetFindRezult: push eax mov bh,1 - mov edi,edx ;copy edx + mov esi,edx ;copy edx @@: cmp byte[edx],bl jne .no_text @@ -225,95 +243,108 @@ GetFindRezult: je @f ;end of find text call IteratNext ;*** get next symbol (in editor text) *** - cmp edx,[tex_1] + cmp edx,ted_tex_1 jle @f ;end of editor text jmp @b .no_text: xor bh,bh - mov edx,edi ;restore edx + mov edx,esi ;restore edx @@: pop eax mov bl,byte[eax] ;restore bl ret -but_OpenSyntax: - cmp byte[panel_id],TE_PANEL_SYNTAX - jne @f - stdcall dword[tl_node_get_data], dword tree1 - pop dword[fn_col_option] - call InitColText - call CmColored - stdcall draw_main_win, tedit0 - @@: - ret +align 4 +proc ted_but_open_syntax, edit:dword + push edi + mov edi,dword[edit] -but_select_word: - push eax ebx ecx edx + cmp ted_panel_id,TE_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 + @@: + pop edi + ret +endp + +align 4 +proc ted_but_select_word, edit:dword + pushad + mov edi,dword[edit] call GetPos push edx call ItPervColorTag - cmp edx,[tex_1] + cmp edx,ted_tex_1 jle @f call GetTexCoords - mov [sel.x0],ebx - mov [sel.y0],eax + mov ted_sel_x0,ebx + mov ted_sel_y0,eax @@: pop edx call ItNextColorTag - cmp edx,[tex_1] + cmp edx,ted_tex_1 jle @f call GetTexCoords - mov [sel.x1],ebx - mov [sel.y1],eax + mov ted_sel_x1,ebx + mov ted_sel_y1,eax @@: - pop edx ecx ebx eax - call draw_but_toolbar - stdcall draw_main_win, tedit0 - jmp still -but_cut: - call but_Copy - call SetUndo - push bx - mov bl,1 - call SelTextDel - pop bx + call draw_but_toolbar + stdcall draw_main_win,edi + popad + ret +endp + +align 4 +proc ted_but_cut, edit:dword + push edi + mov edi,dword[edit] + + 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, tedit0 + stdcall draw_main_win,edi @@: - jmp still + pop edi + ret +endp ;output: ; al = 1 if copy text -but_Copy: - push ax - stdcall IsSel, tedit0 - cmp al,0 - jne @f - pop ax - ret ;if not selected text - @@: - call SelNormalize +align 4 +proc ted_but_copy, edit:dword + pushad + mov edi,dword[edit] - push ebx ecx edx esi - mov esi,[seln.x1] - mov ecx,[seln.y1] + 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,[seln.x0] - mov ecx,[seln.y0] + mov esi,ted_seln_x0 + mov ecx,ted_seln_y0 call GetPosByParam mov esi,ebx xor ecx,ecx mov ebx,buf - ;mov edx,[tex] + ;mov edx,ted_tex @@: - cmp edx,[tex_1] ;end of file + cmp edx,ted_tex_1 ;end of file jle @f cmp edx,esi ;end of select je @f @@ -332,42 +363,52 @@ but_Copy: mov byte[ebx],0 cmp ecx,0 - je @f + je .end_f call draw_but_toolbar - stdcall draw_bufer, tedit0 - @@: - pop esi edx ecx ebx ax + 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] -but_paste: - push eax bx esi edi mov esi,buf call strlen cmp eax,1 jl @f - call SetUndo + stdcall ted_set_undo,edi mov esi,eax - mov bx,0x0101 - call SelTextDel - mov edi,buf - call TextAdd + 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, tedit0 + stdcall draw_main_win,edi @@: - pop edi esi bx eax - jmp still + pop edi esi ebx eax + ret +endp +align 4 proc but_find, edit:dword ;ўл§®ў/бЄалвЁҐ Ї Ґ«Ё Ї®ЁбЄ push edi - mov edi,[edit] + mov edi,dword[edit] - cmp byte[panel_id],TE_PANEL_NULL + cmp ted_panel_id,TE_PANEL_NULL je @f - mov byte[panel_id],TE_PANEL_NULL + mov ted_panel_id,TE_PANEL_NULL mov ted_wnd_l,0 jmp .e_if @@: - mov byte[panel_id],TE_PANEL_FIND + mov ted_panel_id,TE_PANEL_FIND mov ted_wnd_l,TE_PANEL_WIDTH .e_if: stdcall EvSize,edi @@ -376,51 +417,64 @@ proc but_find, edit:dword ; ret endp +align 4 but_replace: - jmp still + ret +align 4 but_find_key_w: - jmp still + ret + +align 4 +proc but_sumb_upper, edit:dword + push edi esi + mov edi,dword[edit] -but_sumb_upper: - push edi mov [conv_table],EvUpper call ConvertSelText - cmp edi,0 + cmp esi,0 je @f - stdcall draw_main_win, tedit0 + stdcall draw_main_win,edi @@: - pop edi - jmp still + pop esi edi + ret +endp + +align 4 +proc but_sumb_lover, edit:dword + push edi esi + mov edi,dword[edit] -but_sumb_lover: - push edi mov [conv_table],EvLover call ConvertSelText - cmp edi,0 + cmp esi,0 je @f - stdcall draw_main_win, tedit0 + stdcall draw_main_win,edi @@: - pop edi - jmp still + pop esi edi + ret +endp -but_reverse: - push eax ebx - stdcall IsSel, tedit0 +align 4 +proc but_reverse, edit:dword + push eax ebx edi + mov edi,dword[edit] + + stdcall IsSel,edi cmp al,0 je @f - call SelNormalize + stdcall SelNormalize,edi push esi ecx edx - mov esi,[seln.x0] - mov ecx,[seln.y0] + mov esi,ted_seln_x0 + mov ecx,ted_seln_y0 call GetPosByParam mov eax,edx - mov esi,[seln.x1] + mov esi,ted_seln_x1 cmp esi,0 je .beg_str dec esi .beg_str: - mov ecx,[seln.y1] + mov ecx,ted_seln_y1 call GetPosByParam ;call GetTexPervPos mov ebx,edx @@ -429,95 +483,101 @@ but_reverse: ;je @f call Revers @@: - pop ebx eax - stdcall draw_main_win, tedit0 - jmp still - -but_undo: - mov eax,[tim_Undo] - cmp [ch_tim],eax - jbe still - inc [tim_Undo] - ;call CmColored - jmp red_win - -but_redo: - cmp [tim_Undo],1 - jb still - dec [tim_Undo] - ;call CmColored - jmp red_win - - -but_sumb_invis: - xor [invis],1 - jmp red_win - -but_k_words_show: - xor byte[mode_colored],1 - cmp byte[mode_colored],0 - je red_win - call CmColored - -; push eax ebx ecx esi edi -; mov eax,dword[cur_x] -; ColToIndexOffset eax,edx -; mov eax,4 -; mov ebx,50*65536+75 -; mov ecx,0x40ffffff -; mov edi,0x404040 -; mov esi,10 -; int 0x40 -; -; mov eax,47 -; mov ecx,250 -; mov esi,0xffff80 -; mov edx,50*65536+80 -; mov esi,FkPos;[keyW] -; @@: -; mov ebx,0x30001 -; cmp dx,300 -; jl .no_br -; mov dx,80 -; add edx,0x200000 -; .no_br: -; add dx,10 -; push ecx esi -; mov ecx,esi -; cmp dword[ecx],-1 -; jne .no_minus -; mov ebx,0x10000 -; mov ecx,1 -; .no_minus: -; mov esi,0xffff00 -; int 0x40 -; pop esi ecx -; add esi,4 -; loop @b -; pop edi esi ecx ebx eax - jmp red_win - -but_CtrlHome: - mov [cur_x],0 - mov [cur_y],0 - mov [wScr.position],0 - mov [hScr.position],0 - - call draw_but_toolbar - stdcall draw_main_win, tedit0 + 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] + + xor ted_mode_invis,1 + call draw_but_toolbar + stdcall draw_main_win,edi + pop edi + ret +endp + +align 4 +proc but_k_words_show, edit:dword + push edi + mov edi,dword[edit] + + xor ted_mode_color,1 + cmp ted_mode_color,0 + je @f + call CmColored + @@: + call draw_but_toolbar + stdcall draw_main_win,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 byte[panel_id],TE_PANEL_NULL + cmp ted_panel_id,TE_PANEL_NULL je @f - mov byte[panel_id],TE_PANEL_NULL + mov ted_panel_id,TE_PANEL_NULL mov ted_wnd_l,0 jmp .e_if @@: - mov byte[panel_id],TE_PANEL_SYNTAX + mov ted_panel_id,TE_PANEL_SYNTAX mov ted_wnd_l,TE_PANEL_WIDTH .e_if: stdcall EvSize,edi @@ -526,11 +586,15 @@ proc but_synt_show, edit:dword ret endp -sel_KeyUp: - cmp [dragk],1 +align 4 +proc ted_sel_key_up, edit:dword + push edi + mov edi,dword[edit] + + cmp ted_drag_k,1 je @f - call SelStart - mov [dragk],1 + stdcall SelStart,edi + mov ted_drag_k,1 @@: push dx call CurMoveUp @@ -539,15 +603,21 @@ sel_KeyUp: call OnInitialUpdate @@: pop dx - call SelMove - stdcall draw_main_win, tedit0 + stdcall SelMove,edi + stdcall draw_main_win,edi + pop edi ret +endp -sel_KeyDown: - cmp [dragk],1 +align 4 +proc ted_sel_key_down, edit:dword + push edi + mov edi,dword[edit] + + cmp ted_drag_k,1 je @f - call SelStart - mov [dragk],1 + stdcall SelStart,edi + mov ted_drag_k,1 @@: push dx call CurMoveDown @@ -556,54 +626,68 @@ sel_KeyDown: call OnInitialUpdate @@: pop dx - call SelMove - stdcall draw_main_win, tedit0 + stdcall SelMove,edi + stdcall draw_main_win,edi + pop edi ret +endp -sel_KeyLeft: - cmp [dragk],1 +align 4 +proc ted_sel_key_left, edit:dword + push edi + mov edi,dword[edit] + + cmp ted_drag_k,1 je @f - call SelStart + stdcall SelStart,edi @@: push dx call CurMoveLeft - call SelMove - cmp [dragk],1 + stdcall SelMove,edi + cmp ted_drag_k,1 je @f - mov [dragk],1 + mov ted_drag_k,1 mov dl,8 @@: cmp dl,8 jne @f call OnInitialUpdate - stdcall draw_main_win, tedit0 + stdcall draw_main_win,edi jmp .end_f @@: - stdcall draw_cur_line, tedit0 + stdcall draw_cur_line,edi .end_f: pop dx + pop edi ret +endp -sel_KeyRight: - cmp [dragk],1 +align 4 +proc ted_sel_key_right, edit:dword + push edi + mov edi,dword[edit] + + cmp ted_drag_k,1 je @f - call SelStart + stdcall SelStart,edi @@: push dx call CurMoveRight - call SelMove - cmp [dragk],1 + stdcall SelMove,edi + cmp ted_drag_k,1 je @f - mov [dragk],1 + mov ted_drag_k,1 mov dl,8 @@: cmp dl,8 jne @f call OnInitialUpdate - stdcall draw_main_win, tedit0 + stdcall draw_main_win,edi jmp .end_f @@: - stdcall draw_cur_line, tedit0 + stdcall draw_cur_line,edi .end_f: pop dx - ret \ No newline at end of file + pop edi + ret +endp diff --git a/programs/other/t_edit/t_data.inc b/programs/other/t_edit/t_data.inc index 51a5c3089..169ade0d9 100644 --- a/programs/other/t_edit/t_data.inc +++ b/programs/other/t_edit/t_data.inc @@ -300,17 +300,116 @@ 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 .rec BOX 30,23,7,10 ;+16 - .dragm db 0 ;+32 ўл¤Ґ«ҐЁҐ ®в ¬лиЁ - dragk db 0 ;+33 ўл¤Ґ«ҐЁҐ ®в Є« ўЁ вгал - sel TexSelect 0,0,0,0 ;+34 бвагЄвга ўл¤Ґ«ҐЁп - seln TexSelect ;+50 ¤®Ї®«ЁвҐ«м п бвагЄвга ўл¤Ґ«ҐЁп + .drag_m db 0 ;+32 ўл¤Ґ«ҐЁҐ ®в ¬лиЁ + .drag_k db 0 ;+33 ўл¤Ґ«ҐЁҐ ®в Є« ўЁ вгал + .sel TexSelect 0,0,0,0 ;+34 бвагЄвга ўл¤Ґ«ҐЁп + .seln TexSelect ;+50 ¤®Ї®«ЁвҐ«м п бвагЄвга ўл¤Ґ«ҐЁп + .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 +; \/ Ґ а §алў вм б«Ґ¤гойЁҐ ЇҐаҐ¬ҐлҐ: + .count_colors_text dd 1 ;+90 Є®««ЁзҐбвў® 梥⮢ ⥪бв + .count_key_words dd 0 ;+94 Є®««ЁзҐбвў® Є«о祢ле б«®ў + .color_cursor dd 0x808080 ;+98 梥⠪габ®а + .color_wnd_capt dd 0x80 ;+102 梥⠯®«Ґ© ў®ЄагЈ ®Є + .color_wnd_work dd 0x0 ;+106 梥в д® ®Є + .color_wnd_bord dd 0xd0d0d0 ;+110 梥в ⥪бв Ї®«пе + .color_select dd 0x208080 ;+114 梥⠢뤥«ҐЁп + .color_cur_text dd 0xff0000 ;+118 梥в бЁ¬ў®« Ї®¤ Єгаб®а®¬ + .color_wnd_text dd 0xffff00 ;+122 梥в ⥪бв ў ®ЄҐ +; /\ ¤агЈЁҐ, Ё¤гйЁҐ Ё¦Ґ ¬®¦® а §алў вм. + .syntax_file dd 0 ;+126 гЄ § ⥫м з «® д ©« бЁв ЄбЁб + .syntax_file_end dd 0 ;+130 гЄ § вҐ«м Є®Ґж д ©« бЁв ЄбЁб + .text_colors dd 0 ;+134 гЄ § вҐ«м ¬ ббЁў 梥⮢ ⥪бв + .help_text_f1 dd 0 ;+138 гЄ § ⥫м ⥪бв бЇа ўЄЁ (Ї® ¦ вЁЁ F1) + .help_id dd -1 ;+142 Ё¤ҐвЁдЁЄ в®а ¤«п бЇа ўЄЁ + .key_words_data dd 0 ;+146 гЄ § ⥫м бвагЄвгал Є«о祢ле б«®ў TexColViv + .tim_ch dd ? ;+150 Є®«ЁзҐбвў® Ё§¬ҐҐЁ© ў д ©«Ґ + .tim_undo dd ? ;+154 Є®«ЁзҐбвў® ®в¬ҐҐле ¤Ґ©бвўЁ© + .tim_ls dd ? ;+158 ўаҐ¬п Ї®б«Ґ¤ҐЈ® б®еа ҐЁп + .tim_co dd ? ;+162 ўаҐ¬п Ї®б«Ґ¤Ґ© 梥⮢®© а §¬ҐвЄЁ + .el_focus dd el_focus ;+166 гЄ § вҐ«м ЇҐаҐ¬Ґго н«Ґ¬Ґв ў д®Єгᥠ+ .err_save dw 0 ;+170 ®иЁЎЄ б®еа ҐЁп д ©« + .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 ®¬Ґа ®вЄалв®© Ї Ґ«Ё ;------------------------------------------------------------------------------ +FkPos: rd 256 +conv_tabl rb 128 ; в Ў«Ёж ¤«п Є®ўҐавЁа®ў Ёп scan-Є®¤ ў ascii-Є®¤ + + 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,\ @@ -392,8 +491,7 @@ msgbox_5: db 'Ћв¬Ґ ',0 db 0 msgbox_5_funct: -; dd but_SaveFile - dd On_OpenFile + dd but_no_msg_OpenFile dd 0 msgbox_6: @@ -497,8 +595,7 @@ msgbox_5: db 'Cancel',0 db 0 msgbox_5_funct: -; dd but_SaveFile - dd On_OpenFile + dd but_no_msg_OpenFile dd 0 msgbox_6: diff --git a/programs/other/t_edit/t_draw.inc b/programs/other/t_edit/t_draw.inc index a006004c4..7cef38da2 100644 --- a/programs/other/t_edit/t_draw.inc +++ b/programs/other/t_edit/t_draw.inc @@ -1,3 +1,4 @@ +align 4 proc mouse_wnd_main, edit:dword push eax ebx ecx edi mcall 37,2 ;get mouse buttons @@ -49,6 +50,7 @@ endp ; edi -> указатель на структуру tedit ;description: ; функция вызывется при нажатии кнопкой мыши и попадении курсором в окно редактора +align 4 wnd_main_click: push ecx edx @@ -67,7 +69,7 @@ wnd_main_click: mov eax,[hScr.cur_area] @@: ;dec eax - mov [cur_x],eax + mov ted_cur_x,eax pop eax push eax @@ -84,20 +86,21 @@ wnd_main_click: mov eax,[wScr.cur_area] @@: dec eax - mov [cur_y],eax + mov ted_cur_y,eax pop eax cmp ted_drag_m,0 je @f - call SelMove + stdcall SelMove,edi jmp .sel_move @@: mov ted_drag_m,1 - call SelStart + stdcall SelStart,edi .sel_move: pop edx ecx ret +align 4 wnd_main_mouse_scroll: push eax ebx mcall 37,7 @@ -122,9 +125,11 @@ wnd_main_mouse_scroll: pop ebx eax ret -draw_but_toolbar: +align 4 +draw_but_toolbar: ;внешняя функция для рисования панели инструментов + push ebx ecx edx edi + mov edi,tedit0 - push ebx ecx edx mov ecx,0x40000000 ; mov edx,5*65536+25 mov edx,85*65536+2 @@ -135,7 +140,7 @@ draw_but_toolbar: mov edx,110*65536+2 call draw_but_icon -call CanSave +stdcall ted_can_save,edi cmp al,1 je @f and ecx,0xffff @@ -150,7 +155,7 @@ or ecx,0x40000000 mov edx,85*65536+25 call draw_but_icon -stdcall IsSel, tedit0 +stdcall IsSel,edi cmp al,0 jne @f and ecx,0xffff @@ -197,8 +202,8 @@ or ecx,0x40000000 mov edx,235*65536+25 call draw_but_icon -mov ebx,[tim_Undo] -cmp [ch_tim],ebx +mov ebx,ted_tim_undo +cmp ted_tim_ch,ebx jg @f and ecx,0xffff @@: @@ -207,7 +212,7 @@ and ecx,0xffff call draw_but_icon or ecx,0x40000000 -cmp [tim_Undo],1 +cmp ted_tim_undo,1 jge @f and ecx,0xffff @@: @@ -228,11 +233,12 @@ or ecx,0x40000000 mov edx,450*65536+25 call draw_but_icon - pop edx ecx ebx + 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] @@ -265,7 +271,7 @@ proc clear_line_before_draw, edit:dword, coords:dword, clear_o:dword, numb_lin:d sub ebx,ted_rec_l xor cx,cx add ecx,ted_rec_h - mov edx,[WND_WORK_COLOR] + mov edx,ted_color_wnd_work cmp dword[clear_o],0 je .pusto @@ -278,11 +284,11 @@ proc clear_line_before_draw, edit:dword, coords:dword, clear_o:dword, numb_lin:d stdcall IsSel,edi cmp al,0 je @f - cmp [seln.y0],esi + cmp ted_seln_y0,esi jg @f - cmp [seln.y1],esi + cmp ted_seln_y1,esi jl @f - mov edx,[SELECT_COLOR] ;draw selected line + mov edx,ted_color_select ;draw selected line @@: mov eax,13 ;rect @@ -295,10 +301,10 @@ proc clear_line_before_draw, edit:dword, coords:dword, clear_o:dword, numb_lin:d mov al,13 ;rect xor cx,cx add ecx,ted_rec_h - cmp [seln.y0],esi + cmp ted_seln_y0,esi jne @f push bx - mov edx,[seln.x0] ; верхняя полоса (затирает слева) + mov edx,ted_seln_x0 ; верхняя полоса (затирает слева) cmp edx,[hScr.position] jle .in_wnd sub edx,[hScr.position] @@ -308,13 +314,13 @@ proc clear_line_before_draw, edit:dword, coords:dword, clear_o:dword, numb_lin:d .in_wnd: mov bx,0 .no_wnd: - mov edx,[WND_WORK_COLOR] + mov edx,ted_color_wnd_work int 0x40 pop bx @@: - cmp [seln.y1],esi + cmp ted_seln_y1,esi jne @f - mov edx,[seln.x1] ; нижняя полоса (затирает справа) + mov edx,ted_seln_x1 ; нижняя полоса (затирает справа) cmp edx,[hScr.position] jle .in_wnd2 sub edx,[hScr.position] @@ -324,7 +330,7 @@ proc clear_line_before_draw, edit:dword, coords:dword, clear_o:dword, numb_lin:d add ebx,edx .in_wnd2: - mov edx,[WND_WORK_COLOR] + mov edx,ted_color_wnd_work int 0x40 @@: @@ -333,7 +339,7 @@ proc clear_line_before_draw, edit:dword, coords:dword, clear_o:dword, numb_lin:d ret endp - +align 4 proc draw_main_win, edit:dword locals line_num dd ? @@ -342,9 +348,8 @@ proc draw_main_win, edit:dword mov edi,dword[edit] mov eax,4 ;draw text - mov ecx,[tex_colors] - push dword[ecx] - pop ecx + mov ecx,ted_text_colors + mov ecx,dword[ecx] mov ebx,ted_wnd_l add ebx,ted_rec_l @@ -353,22 +358,22 @@ proc draw_main_win, edit:dword add ebx,ted_rec_t add ebx,0x10001 ;добавляем отступы для выравнивания буквы по центру - call SelNormalize ;need before draw select + stdcall SelNormalize,edi ;need before draw select mov esi,[wScr.position] mov dword[line_num],esi - stdcall clear_line_before_draw, tedit0,ebx,1,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,[tex_1] + cmp edx,ted_tex_1 jle .no_draw_text ; *** цветовая разметка - cmp byte[mode_colored],0 + cmp ted_mode_color,0 je .no_col_change cmp byte[edx+1],0 je .no_col_change @@ -377,10 +382,11 @@ proc draw_main_win, edit:dword cmp byte [edx],13 jne .no_13 - cmp [invis],1 + cmp ted_mode_invis,1 jne .no_invis push edx - mov edx,symbol_new_line + mov edx,edi + add edx,ted_offs_symbol_new_line int 0x40 pop edx .no_invis: @@ -391,7 +397,7 @@ proc draw_main_win, edit:dword cmp bx,ax jg .no_draw_text mov eax,4 - ;optimized output /\ + ;optimized output /\ and ebx,0xffff ror ebx,16 add ebx,ted_wnd_l @@ -399,7 +405,7 @@ proc draw_main_win, edit:dword inc ebx ror ebx,16 inc dword[line_num] ;increment line number - stdcall clear_line_before_draw, tedit0,ebx,1,dword[line_num] + stdcall clear_line_before_draw,edi,ebx,1,dword[line_num] call OptDrawLineLeft jmp @b .no_13: @@ -418,9 +424,9 @@ proc draw_main_win, edit:dword jmp @b .no_draw_text: - stdcall clear_line_before_draw, tedit0,ebx,0,dword[line_num] - stdcall draw_line_numbers, tedit0 - stdcall draw_main_cursor, tedit0 + 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 @@ -472,11 +478,12 @@ endp ;txtBDn db 25 ;txtBRi db 26 ;txtBLe db 27 +align 4 proc draw_panel_find, edit:dword push edi mov edi,dword[edit] - cmp byte[panel_id],TE_PANEL_FIND ;if not panel + cmp ted_panel_id,TE_PANEL_FIND ;if not panel jne @f push eax ebx ecx edx @@ -496,8 +503,7 @@ proc draw_panel_find, edit:dword mov edx,txtFindCapt int 0x40 - push dword edit2 - call [edit_box_draw] + stdcall [edit_box_draw], dword edit2 mov eax,13 ;рисование прямоугольника mov ebx,TE_PANEL_WIDTH @@ -542,11 +548,13 @@ proc draw_panel_find, edit:dword ret endp + +align 4 proc draw_panel_syntax, edit:dword push edi mov edi,dword[edit] - cmp byte[panel_id],TE_PANEL_SYNTAX ;if not panel + cmp ted_panel_id,TE_PANEL_SYNTAX ;if not panel jne @f push eax ebx ecx edx @@ -558,7 +566,7 @@ proc draw_panel_syntax, edit:dword mov edx,[sc.work] int 0x40 ;рисование верхнего фонового прямоугольника - stdcall dword[tl_draw], dword tree1 + stdcall dword[tl_draw], tree1 mov [ws_dir_lbox.all_redraw],1 ;для полной перерисовки дочернего скроллинга stdcall dword[scrollbar_ver_draw], dword ws_dir_lbox @@ -613,6 +621,8 @@ proc draw_panel_syntax, edit:dword ret endp + +align 4 proc draw_cur_line, edit:dword pushad mov edi,dword[edit] @@ -620,33 +630,33 @@ proc draw_cur_line, edit:dword mov ebx,ted_wnd_l add ebx,ted_rec_l shl ebx,16 - mov eax,[cur_y] + 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 SelNormalize ;need before draw select - mov ecx,[cur_y] + 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 [gpOpt],2 + 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,[tex_1] + cmp edx,ted_tex_1 jle .no_draw_text ; *** цветовая разметка - cmp byte[mode_colored],0 + cmp ted_mode_color,0 je .no_col_change cmp byte[edx+1],0 je .no_col_change @@ -656,10 +666,11 @@ proc draw_cur_line, edit:dword mov eax,4 ;draw text cmp byte [edx],13 jne .no_13 - cmp [invis],1 + cmp ted_mode_invis,1 jne .no_draw_text push edx - mov edx,symbol_new_line + mov edx,edi + add edx,ted_offs_symbol_new_line int 0x40 pop edx jmp .no_draw_text @@ -677,7 +688,7 @@ proc draw_cur_line, edit:dword jmp @b .no_draw_text: - stdcall draw_main_cursor, tedit0 + stdcall draw_main_cursor,edi popad ret endp @@ -685,6 +696,7 @@ 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 mov edi,dword[edit] @@ -759,23 +771,28 @@ proc EvSize, edit:dword 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,[tex] + mov edx,ted_tex xor ecx,ecx @@: cmp ecx,[wScr.position] je @f call IteratNext - cmp edx,[tex_1] + cmp edx,ted_tex_1 jle @f cmp byte [edx],13 jne @b @@ -799,23 +816,27 @@ GetFirstVisiblePos: ;input: ; edx = pointer to symbol +; edi = pointer to tedit struct ;output: -; edx = pointer to first left symbol -OptDrawLineLeft: - push ecx - mov ecx,[hScr.position] - cmp ecx,0 +; 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,[tex] + cmp edx,ted_tex jne @f call IteratNext jmp .beg_cycle @@: - cmp ecx,0 + cmp ebx,0 je @f cmp byte[edx],13 @@ -823,33 +844,50 @@ OptDrawLineLeft: call IteratNext .beg_cycle: @@: - cmp edx,[tex_1] + cmp edx,ted_tex_1 jle @f cmp byte[edx],13 je @f - cmp ecx,0 + 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 ecx + dec ebx jmp @b @@: mov edx,eax pop eax .ret_f: - pop ecx call GetSymbColor + pop ebx ret +endp ;input: ; edx = pointer to symbol +; edi = pointer to tedit struct ;output: ; edx = pointer to 13 symbol -OptDrawLineRight: +align 4 +proc OptDrawLineRight push eax mov eax,edx @@: - cmp edx,[tex_1] + cmp edx,ted_tex_1 jle @f cmp byte[edx],13 je @f @@ -858,10 +896,13 @@ OptDrawLineRight: jmp @b @@: mov edx,eax ;perv sumbol - pop eax call GetSymbColor - ret + pop eax + ret +endp + +align 4 proc draw_main_cursor, edit:dword pushad mov edi,dword[edit] @@ -869,11 +910,11 @@ proc draw_main_cursor, edit:dword mov eax,13 ;draw cursor mov ecx,ted_wnd_t ;calc rect -> y0,y1 add ecx,ted_rec_t - mov edx,[cur_y] + mov edx,ted_cur_y imul edx,ted_rec_h add ecx,edx - cmp [curMod],1 ;проверка режима работы курсора (обычный или вставка) + cmp ted_cur_ins,1 ;проверка режима работы курсора (обычный или вставка) jne @f mov edx,ted_rec_h inc edx ;1->1, 3->2, 5->3, ... @@ -882,38 +923,38 @@ proc draw_main_cursor, edit:dword @@: shl ecx,16 add ecx,ted_rec_h - cmp [curMod],1 + 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,[cur_x] + mov edx,ted_cur_x imul edx,ted_rec_w add ebx,edx shl ebx,16 add ebx,ted_rec_w - mov edx,[CURSOR_COLOR] + mov edx,ted_color_cursor int 0x40 ;вывод курсора call GetPos - cmp [gpOpt],2 + 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 [curMod],1 + 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,[CUR_TEXT_COLOR] + mov ecx,ted_color_cur_text call ConvertInvisSymb int 0x40 @@: @@ -924,7 +965,7 @@ proc draw_main_cursor, edit:dword shl ebx,16 add ebx,ted_wnd_t add ebx,3 - mov ecx,[WND_BORD_COLOR] + mov ecx,ted_color_wnd_bord or ecx,0x80000000 mov edx,txtRow int 0x40 ;вывод подписи 'Строка' @@ -933,7 +974,7 @@ proc draw_main_cursor, edit:dword mov edx,txtCol int 0x40 ;вывод подписи 'Знак' - cmp [tim_Undo],0 + cmp ted_tim_undo,0 je @f add ebx,0x500000 mov edx,txtOtm @@ -941,11 +982,11 @@ proc draw_main_cursor, edit:dword sub ebx,0x500000 @@: - stdcall draw_bufer, edi - stdcall draw_help_f1, edi + stdcall draw_bufer,edi + stdcall draw_help_f1 mov eax,47 ;draw cursor coords - mov esi,[WND_BORD_COLOR] + mov esi,ted_color_wnd_bord or esi,0x40000000 mov edx,ebx @@ -954,23 +995,28 @@ proc draw_main_cursor, edit:dword ror edx,16 ;add edx,3 mov ebx,0x40000 ;Row=... - mov ecx,[cur_y] + mov ecx,ted_cur_y inc ecx add ecx,[wScr.position] -; edi <> tedit ---------------------------------------------------------------- - mov edi,[WND_WORK_COLOR] - int 0x40 + +push edi + mov edi,ted_color_wnd_work + int 0x40 ;вывод числа текущей строки +pop edi ;mov ebx,0x40000 ;Col=... - mov ecx,[cur_x] + mov ecx,ted_cur_x inc ecx add ecx,[hScr.position] add edx,0x500000 - int 0x40 +push edi + mov edi,ted_color_wnd_work + int 0x40 ;вывод числа знаков +pop edi - cmp [tim_Undo],0 + cmp ted_tim_undo,0 je @f - mov ecx,[tim_Undo] + mov ecx,ted_tim_undo add edx,0x500000 int 0x40 @@: @@ -979,6 +1025,7 @@ proc draw_main_cursor, edit:dword ret endp +align 4 proc draw_bufer, edit:dword pushad mov edi,dword[edit] @@ -991,9 +1038,9 @@ proc draw_bufer, edit:dword shl ebx,16 add ebx,ted_wnd_t add ebx,3 - mov ecx,[WND_BORD_COLOR] + mov ecx,ted_color_wnd_bord or ecx,0x40000000 - mov edi,[WND_WORK_COLOR] + mov edi,ted_color_wnd_work mov edx,txtBuf mov esi,buf @@ -1020,9 +1067,11 @@ end if ret endp -proc draw_help_f1, edit:dword +;input: +; edi = pointer to tedit struct +align 4 +proc draw_help_f1 pushad - mov edi,dword[edit] mov eax,13 ;clear place before draw help mov ebx,ted_wnd_l @@ -1034,12 +1083,12 @@ proc draw_help_f1, edit:dword add ecx,13 shl ecx,16 add ecx,ted_rec_h - mov edx,[WND_CAPT_COLOR] + mov edx,ted_color_wnd_capt int 0x40 - cmp [help_id],-1 + cmp ted_help_id,-1 je @f - mov eax,[help_id] + mov eax,ted_help_id ColToIndexOffset eax,edx ;SetCoordinates @@ -1053,24 +1102,23 @@ proc draw_help_f1, edit:dword xor eax,eax mov al,byte[edx+MAX_COLOR_WORD_LEN+6] shl ax,2 - mov ecx,[tex_colors] + mov ecx,ted_text_colors add ecx,eax - push dword[ecx] - pop ecx + mov ecx,dword[ecx] or ecx,0xc0000000 ;SetTextStyles - mov edi,[WND_WORK_COLOR] -; edi <> edit ----------------------------------------------------------------- - mov eax,4 - int 0x40 + mov esi,edi + mov edi,ted_color_wnd_work + mov eax,4 + int 0x40 + mov edi,esi ;*** draw help string *** - mov ecx,[WND_BORD_COLOR] + mov ecx,ted_color_wnd_bord or ecx,0x80000000 - mov edi,dword[edx+MAX_COLOR_WORD_LEN] - cmp edi,0 + mov edx,dword[edx+MAX_COLOR_WORD_LEN] + cmp edx,0 je @f - add edi,dword[tex_help_f1] - mov edx,edi + add edx,ted_help_text_f1 add ebx,0x500000 int 0x40 @@: @@ -1078,6 +1126,7 @@ proc draw_help_f1, edit:dword ret endp +align 4 proc draw_line_numbers, edit:dword pushad mov edi,dword[edit] @@ -1088,12 +1137,12 @@ proc draw_line_numbers, edit:dword shl ebx,16 add ebx,ted_wnd_w ; sub ebx,ted_rec_l - mov edx,[WND_WORK_COLOR] + mov edx,ted_color_wnd_work mov ecx,ted_wnd_t shl ecx,16 add ecx,ted_rec_t mov eax,13 - mov edx,[WND_CAPT_COLOR] + mov edx,ted_color_wnd_capt int 0x40 ;line numbers @@ -1117,12 +1166,12 @@ push ebx ecx edx mov cx,dx rol ecx,16 mov eax,13 - mov edx,[WND_CAPT_COLOR] + mov edx,ted_color_wnd_capt int 0x40 ;рисуем прямоугольник под номером строки pop edx ecx ebx mov eax,47 - mov esi,[WND_BORD_COLOR] + mov esi,ted_color_wnd_bord int 0x40 ;рисуем номер строки inc ecx add edx,ted_rec_h @@ -1140,6 +1189,7 @@ pop edx ecx ebx endp ;this function need to optimize output +align 4 proc draw_cursor_sumb, edit:dword push eax ecx edx edi mov edi,dword[edit] @@ -1147,7 +1197,7 @@ proc draw_cursor_sumb, edit:dword mov eax,13 ;rect mov ebx,ted_wnd_l add ebx,ted_rec_l - mov edx,[cur_x] + mov edx,ted_cur_x imul edx,ted_rec_w add ebx,edx shl ebx,16 @@ -1155,51 +1205,51 @@ proc draw_cursor_sumb, edit:dword mov ecx,ted_wnd_t ;calc rect -> y0,y1 add ecx,ted_rec_t - mov edx,[cur_y] + mov edx,ted_cur_y imul edx,ted_rec_h add ecx,edx shl ecx,16 add ecx,ted_rec_h - mov edx,[WND_WORK_COLOR] + mov edx,ted_color_wnd_work push ecx - call SelNormalize + stdcall SelNormalize,edi mov ecx,[wScr.position] - sub [seln.y0],ecx - sub [seln.y1],ecx + sub ted_seln_y0,ecx + sub ted_seln_y1,ecx - mov ecx,[cur_y] - cmp ecx,[seln.y0] + mov ecx,ted_cur_y + cmp ecx,ted_seln_y0 jl .no_cur_sel - cmp ecx,[seln.y1] + cmp ecx,ted_seln_y1 jg .no_cur_sel - mov edx,[SELECT_COLOR] + mov edx,ted_color_select - cmp ecx,[seln.y0] + cmp ecx,ted_seln_y0 jne @f - mov ecx,[cur_x] + mov ecx,ted_cur_x add ecx,[hScr.position] - cmp ecx,[seln.x0] + cmp ecx,ted_seln_x0 jge @f - mov edx,[WND_WORK_COLOR] + mov edx,ted_color_wnd_work @@: - mov ecx,[cur_y] - cmp ecx,[seln.y1] + mov ecx,ted_cur_y + cmp ecx,ted_seln_y1 jne .no_cur_sel - mov ecx,[cur_x] + mov ecx,ted_cur_x add ecx,[hScr.position] - cmp ecx,[seln.x1] + cmp ecx,ted_seln_x1 jl .no_cur_sel - mov edx,[WND_WORK_COLOR] + mov edx,ted_color_wnd_work .no_cur_sel: pop ecx int 0x40 call GetPos - cmp [gpOpt],2 + cmp ted_gp_opt,2 jne @f push esi mov eax,4 ;draw text @@ -1207,7 +1257,6 @@ proc draw_cursor_sumb, edit:dword ror ecx,16 mov bx,cx add ebx,0x10001 - ;mov ecx,[WND_TEXT_COLOR] call GetSymbColor call ConvertInvisSymb int 0x40 @@ -1220,49 +1269,51 @@ endp ;input: -; edx = pointer to text +; edx -> pointer to text +; edi -> указатель на структуру tedit ;output: ; ecx = color -; if mode_colored=0 then ecx=WND_TEXT_COLOR +; if ted_mode_color=0 then ecx=ted_color_wnd_text +align 4 GetSymbColor: - mov ecx,[WND_TEXT_COLOR] + mov ecx,ted_color_wnd_text ;задаем цвет текста по умолчанию push eax edx - cmp byte[mode_colored],0 + cmp ted_mode_color,0 je .exit jmp .on_first @@: call IteratPerv - cmp edx,[tex_1] + cmp edx,ted_tex_1 jle .exit .on_first: xor eax,eax mov al,byte[edx+1] - cmp al,0 + cmp al,0 ;если al=0 то цвет не меняется je @b - ;cmp al,0xff - ;je .exit - cmp eax,[ColColor] + cmp eax,ted_colors_text_count jge .exit - shl ax,2 ;*4 - mov ecx,[tex_colors] + shl ax,2 ;умножаем индекс цвета на 4 байта + mov ecx,ted_text_colors ;прибавляем смещение 1-го цвета add ecx,eax - push dword[ecx] - pop ecx + mov ecx,dword[ecx] ;устанавливаем текущий цвет текста по смещению .exit: pop edx eax ret ;input: ; edx = pointer to text +; edi = pointer to tedit struct +align 4 ConvertInvisSymb: - cmp [invis],1 + cmp ted_mode_invis,1 jne @f cmp byte [edx],13 jne @f - mov edx,symbol_new_line + mov edx,edi + add edx,ted_offs_symbol_new_line @@: ret @@ -1270,6 +1321,7 @@ ConvertInvisSymb: ; ecx = 0x4000____ ; cx = icon index ; edx = x*2^16+y +align 4 draw_but_icon: push eax ebx diff --git a/programs/other/t_edit/t_edit.asm b/programs/other/t_edit/t_edit.asm index bbe22e201..8530e2346 100644 --- a/programs/other/t_edit/t_edit.asm +++ b/programs/other/t_edit/t_edit.asm @@ -33,12 +33,9 @@ include 't_button.inc' @use_library +align 4 start: - mov eax,48 - mov ebx,3 - mov ecx,sc - mov edx,sizeof.system_colors - mcall + mcall 48,3,sc,sizeof.system_colors m2m [wScr.bckg_col],[sc.work] m2m [wScr.frnt_col],[sc.work_button] @@ -55,39 +52,37 @@ start: mcall 66,1,1 ;scan code ;mcall 26,2,1,conv_tabl - - mov ecx,sizeof.symbol*maxChars - call mem_Alloc - mov [tex],eax - mov [tex_1],eax - add [tex_1],sizeof.symbol - mov [tex_end],eax - add [tex_end],sizeof.symbol*maxChars - mcall 40,0x27 - call Clear - -;------------------------------------------------- - mov ecx,maxColWords*sizeof.TexColViv+40 - ;add ecx,40 - call mem_Alloc - mov [options_file],eax - mov [options_file_end],eax - add [options_file_end],maxColWords*sizeof.TexColViv - add [options_file_end],40 - -;------------------------------------------------- -; init bmp file - mov ecx,1200*18 - call mem_Alloc - mov [bmp_icon],eax - mov esi,file_name call strlen mov ecx,eax mov edi,buf_cmd_lin - rep movsb + rep movsb ;Є®ЇЁа㥬 Ё¬п д ©« ў ЎгдҐа edit1 + +load_libraries l_libs_start,load_lib_end + +;Їа®ўҐаЄ бЄ®«мЄ® г¤ з® § Јг§Ё« бм и «ЁЎ + mov ebp,lib0 + cmp dword [ebp+ll_struc_size-4],0 + jz @f + mcall -1 ;exit not correct +@@: + mov ebp,lib1 ; + cmp dword [ebp+ll_struc_size-4],0 + jz @f + mcall -1 ;exit not correct +@@: + +;--------------------------------------------------------------------- + stdcall ted_init, tedit0 + stdcall dword[tl_data_init], tree1 +;--------------------------------------------------------------------- + +; init bmp file + mov ecx,1200*18 + call mem_Alloc + mov [bmp_icon],eax copy_path fn_icon,sys_path,file_name,0x0 @@ -108,24 +103,6 @@ start: mov [err_ini0],0 @@: -load_libraries l_libs_start,load_lib_end - -;Їа®ўҐаЄ бЄ®«мЄ® г¤ з® § Јг§Ё« бм и «ЁЎ - mov ebp,lib0 - cmp dword [ebp+ll_struc_size-4],0 - jz @f - mcall -1 ;exit not correct -@@: - mov ebp,lib1 ; - cmp dword [ebp+ll_struc_size-4],0 - jz @f - mcall -1 ;exit not correct -@@: - - -;--------------------------------------------------------------------- - push dword tree1 - call dword[tl_data_init] ;--------------------------------------------------------------------- ; зЁв Ґ¬ bmp д ©« б Єгаб®а ¬Ё Ё «ЁЁп¬Ё copy_path fn_icon_tl_sys,sys_path,file_name,0x0 @@ -187,26 +164,17 @@ mov ecx,ebx @@: cmp byte[eax],'.' ;дЁ«мва㥬 д ©«л б Ё¬Ґ ¬Ё '.' Ё '..' je .filter - push dword tree1 - push dword 0x10000 ;1*2^16 - Ј¤Ґ 1 ®¬Ґа ЁЄ®ЄЁ б ЄЁЈ®© - push dword eax - call dword[tl_node_add] + ;0x10000 ;1*2^16 - Ј¤Ґ 1 ®¬Ґа ЁЄ®ЄЁ б ЄЁЈ®© + stdcall dword[tl_node_add], eax,0x10000, tree1 - push dword tree1 - call dword[tl_cur_next] + stdcall dword[tl_cur_next], tree1 .filter: add eax,304 loop @b .end_dir_init: -; push dword tree1 -; push dword 0 -; push dword file_name -; call dword[tl_node_add] - - ;--- load color option file --- - call InitColText + stdcall InitColText, tedit0 ;--- get cmd line --- cmp byte[buf_cmd_lin+3],0 ;buf_cmd_lin @@ -214,10 +182,10 @@ mov ecx,ebx mov esi,buf_cmd_lin call strlen ;eax=strlen mov [edit1.size],eax - call but_OpenFile + call but_no_msg_OpenFile @@: - +align 4 red_win: mcall 12,1 @@ -271,6 +239,7 @@ red_win: mcall 12,2 +align 4 still: mov eax,10 mcall @@ -287,7 +256,7 @@ still: jmp still - +align 4 mouse: stdcall [edit_box_mouse], dword edit1 @@ -336,15 +305,13 @@ mouse: stdcall mouse_wnd_main, tedit0 - cmp byte[panel_id],TE_PANEL_FIND ;if not panel + cmp byte[tedit0.panel_id],TE_PANEL_FIND ;if not panel jne @f - push dword edit2 - call [edit_box_mouse] + stdcall [edit_box_mouse], dword edit2 @@: - cmp byte[panel_id],TE_PANEL_SYNTAX ;if not panel + cmp byte[tedit0.panel_id],TE_PANEL_SYNTAX ;if not panel jne .menu_bar_1 ;@f - push dword tree1 - call [tl_mouse] + stdcall [tl_mouse], tree1 ;----------------------------------------------- .menu_bar_1: mov [menu_data_1.get_mouse_flag],1 @@ -357,7 +324,7 @@ mouse: je button.exit cmp [menu_data_1.cursor_out],dword 3 jne @f - call but_SaveFile + stdcall but_SaveFile, tedit0 @@: cmp [menu_data_1.cursor_out],dword 2 jne @f @@ -373,21 +340,28 @@ mouse: jmp still ;--------------------------------------------------------------------- -KeyConvertToASCII: - mov ebx,conv_tabl ;convert scan to ascii +;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 key: - mov ecx,1 - mcall 66,3 + mcall 66,3 ;66.3 Ї®«гзЁвм б®бв®пЁҐ гЇа ў«пойЁе Є« ўЁи xor ebx,ebx + mov ecx,1 test al,0x03 ;[Shift] jz @f - inc cl + mov cl,2 or ebx,KM_SHIFT @@: test al,0x0c ;[Ctrl] @@ -396,19 +370,16 @@ key: @@: test al,0x30 ;[Alt] jz @f + mov cl,3 or ebx,KM_ALT @@: test al,0x80 ;[NumLock] jz @f or ebx,KM_NUMLOCK @@: - - mov [keyUpr],ebx - mcall 26,2,,conv_tabl - mcall 2 - -; push dword tree1 ;??? -; call [tl_key] ;??? + mcall 26,2,,conv_tabl ;26.2 Ї®«гзЁвм а бЄ« ¤Єг Є« ўЁ вгал + mcall 2 ;Ї®«гз Ґ¬ Є®¤ ¦ в®© Є« ўЁиЁ + ;stdcall [tl_key], tree1 ;??? test word [edit1.flags],10b;ed_focus ; Ґб«Ё Ґ ў д®ЄгбҐ, ўл室Ё¬ je @f @@ -424,13 +395,9 @@ key: je still cmp ah,69 ;[Pause Break] je still -; cmp [keyUpr],0 -; jne still - call KeyConvertToASCII - - push dword edit1 - call [edit_box_key] + stdcall KeyConvertToASCII, dword conv_tabl + stdcall [edit_box_key], dword edit1 jmp still @@: @@ -448,281 +415,13 @@ key: je still cmp ah,69 ;[Pause Break] je still -; cmp [keyUpr],0 -; jne still - call KeyConvertToASCII + stdcall KeyConvertToASCII, dword conv_tabl stdcall [edit_box_key], dword edit2 jmp still @@: - cmp ah,KEY_F1 ;[F1] - jne @f - call ShowHelpF1 - jmp still - @@: - cmp ah,KEY_F3 ;[F3] - jne @f - call but_FindText - jmp still - @@: - - test [keyUpr],KM_CTRL ;Ctrl+... - jz .key_Ctrl - - cmp ah,24 ;Ctrl+O - jne @f - call but_OpenFile - @@: - cmp ah,33 ;Ctrl+F - jne @f - cmp byte[panel_id],TE_PANEL_FIND - je @f - stdcall but_find, tedit0 - @@: - cmp ah,44 ;Ctrl+Z - je but_undo - cmp ah,46 ;Ctrl+C - jne @f - call but_Copy - @@: - cmp ah,47 ;Ctrl+V - je but_paste - cmp ah,49 ;Ctrl+N - jne @f - call but_NewFile - @@: - cmp ah,199 ;Ctrl+Home - jne @f - call but_CtrlHome - @@: - ;jmp still - .key_Ctrl: - - test [keyUpr],KM_SHIFT ;Shift+... - jz .key_Shift - cmp ah,72 ;Shift+Up - jne @f - call sel_KeyUp - @@: - cmp ah,75 ;Shift+Left - jne @f - call sel_KeyLeft - @@: - cmp ah,77 ;Shift+Right - jne @f - call sel_KeyRight - @@: - cmp ah,80 ;Shift+Down - jne @f - call sel_KeyDown - @@: - ;mov [dragk],1 ; зЁ Ґ¬ ўл¤Ґ«ҐЁҐ ®в Є« ўЁ вгал - jmp .key_MoveCur - .key_Shift: -;------------------------------------------------- - cmp ah,72 ;178 ;Up - jne @f - push dx - stdcall draw_cursor_sumb, tedit0 - call CurMoveUp - cmp dl,8 - jne .no_red_0 - call OnInitialUpdate - stdcall draw_main_win, tedit0 - pop dx - jmp @f - .no_red_0: - stdcall draw_main_cursor, tedit0 - pop dx - mov [dragk],0 ;§ Є зЁў Ґ¬ ўл¤Ґ«ҐЁҐ ®в Є« ўЁ вгал - @@: - cmp ah,80 ;177 ;Down - jne @f - push dx - stdcall draw_cursor_sumb, tedit0 - call CurMoveDown - cmp dl,8 - jne .no_red_1 - call OnInitialUpdate - stdcall draw_main_win, tedit0 - pop dx - jmp @f - .no_red_1: - stdcall draw_main_cursor, tedit0 - pop dx - mov [dragk],0 ;§ Є зЁў Ґ¬ ўл¤Ґ«ҐЁҐ ®в Є« ўЁ вгал - @@: - cmp ah,75 ;176 ;Left - jne @f - push dx - stdcall draw_cursor_sumb, tedit0 - call CurMoveLeft - cmp dl,8 - jne .no_red_2 - call OnInitialUpdate - stdcall draw_main_win, tedit0 - pop dx - jmp @f - .no_red_2: - stdcall draw_main_cursor, tedit0 - pop dx - mov [dragk],0 ;§ Є зЁў Ґ¬ ўл¤Ґ«ҐЁҐ ®в Є« ўЁ вгал - @@: - cmp ah,77 ;179 ;Right - jne @f - push dx - stdcall draw_cursor_sumb, tedit0 - call CurMoveRight - cmp dl,8 - jne .no_red_3 - call OnInitialUpdate - stdcall draw_main_win, tedit0 - pop dx - jmp @f - .no_red_3: - stdcall draw_main_cursor, tedit0 - pop dx - mov [dragk],0 ;§ Є зЁў Ґ¬ ўл¤Ґ«ҐЁҐ ®в Є« ўЁ вгал - @@: - cmp ah,71 ;180 ;Home - jne @f - push dx - stdcall draw_cursor_sumb, tedit0 - call CurMoveX_FirstChar - cmp dl,8 - jne .no_red_4 - call OnInitialUpdate - stdcall draw_main_win, tedit0 - pop dx - jmp @f - .no_red_4: - stdcall draw_main_cursor, tedit0 - pop dx - mov [dragk],0 ;§ Є зЁў Ґ¬ ўл¤Ґ«ҐЁҐ ®в Є« ўЁ вгал - @@: - cmp ah,79 ;181 ;End - jne @f - push dx - stdcall draw_cursor_sumb, tedit0 - call CurMoveX_LastChar - cmp dl,8 - jne .no_red_5 - call OnInitialUpdate - stdcall draw_main_win, tedit0 - pop dx - jmp @f - .no_red_5: - stdcall draw_main_cursor, tedit0 - pop dx - mov [dragk],0 ;§ Є зЁў Ґ¬ ўл¤Ґ«ҐЁҐ ®в Є« ўЁ вгал - @@: - cmp ah,73 ;184 ;PageUp - jne @f - push dx - call CurMovePageUp - cmp dl,0 - pop dx - je @f - call OnInitialUpdate - stdcall draw_main_win, tedit0 - @@: - cmp ah,81 ;183 ;PageDown - jne @f - push dx - call CurMovePageDown - cmp dl,0 - pop dx - je @f - call OnInitialUpdate - stdcall draw_main_win, tedit0 - mov [dragk],0 ;§ Є зЁў Ґ¬ ўл¤Ґ«ҐЁҐ ®в Є« ўЁ вгал - @@: -;------------------------------------------------- - cmp [keyUpr],0 - jne still - .key_MoveCur: - - cmp ah,69 ;[Pause Break] - je still - cmp ah,120 ;[Fn] - je still - cmp ah,0x80 ;if key up - ja still - call KeyConvertToASCII - - ;mov [dragk],0 ;§ Є зЁў Ґ¬ ўл¤Ґ«ҐЁҐ ®в Є« ўЁ вгал - - push ebx - xor ebx,ebx - mov bl,ah - add ebx,EvChar ;add char to text - cmp byte [ebx],1 - jne @f - push esi edi - call SetUndo - mov bx,0x0101 - call SelTextDel - mov esi,1 - mov byte [key_new],ah - mov edi,dword key_new - cmp [curMod],1 - je .no_ins_mod - call TextDel - xor bl,1 - .no_ins_mod: - call TextAdd - call draw_but_toolbar - cmp byte [key_new],13 - jne .dr_m_win - stdcall draw_main_win, tedit0 - jmp .dr_cur_l - .dr_m_win: - stdcall draw_cur_line, tedit0 - .dr_cur_l: - pop edi esi - @@: - pop ebx - - cmp ah,8 ;[<-] - jne @f - push ax bx - call SetUndo - - mov bx,0x0001 - call SelTextDel - cmp al,1 - je .del_one_b - call TextDel - .del_one_b: - call draw_but_toolbar - stdcall draw_main_win, tedit0 - pop bx ax - @@: - - cmp ah,182 ;Delete - jne @f - push ax bx - call SetUndo - - mov bx,0x0101 - call SelTextDel - cmp al,1 - je .del_one_d - call TextDel - .del_one_d: - call draw_but_toolbar - stdcall draw_main_win, tedit0 - pop bx ax - @@: - - cmp ah,185 ;Ins - jne @f - stdcall draw_cursor_sumb, tedit0 - xor [curMod],1 - stdcall draw_main_cursor, tedit0 - @@: - + stdcall ted_key, tedit0, conv_tabl jmp still button: @@ -743,40 +442,64 @@ button: @@: cmp ah,5 jne @f - call but_SaveFile + stdcall but_SaveFile, tedit0 @@: cmp ah,6 - jz but_select_word + jne @f + stdcall ted_but_select_word, tedit0 + @@: cmp ah,7 - jz but_cut + jne @f + stdcall ted_but_cut, tedit0 + @@: cmp ah,8 jne @f - call but_Copy + stdcall ted_but_copy, tedit0 @@: cmp ah,9 - jz but_paste + jne @f + stdcall ted_but_paste, tedit0 + @@: cmp ah,10 jne @f stdcall but_find, tedit0 @@: cmp ah,11 - jz but_replace + jne @f + call but_replace + @@: cmp ah,12 - jz but_find_key_w + jne @f + call but_find_key_w + @@: cmp ah,13 - jz but_sumb_upper + jne @f + stdcall but_sumb_upper, tedit0 + @@: cmp ah,14 - jz but_sumb_lover + jne @f + stdcall but_sumb_lover, tedit0 + @@: cmp ah,15 - jz but_reverse + jne @f + stdcall but_reverse, tedit0 + @@: cmp ah,16 - jz but_undo + jne @f + stdcall ted_but_undo, tedit0 + @@: cmp ah,17 - jz but_redo + jne @f + stdcall ted_but_redo, tedit0 + @@: cmp ah,18 - jz but_sumb_invis + jne @f + stdcall but_sumb_invis, tedit0 + @@: cmp ah,19 - jz but_k_words_show + jne @f + stdcall but_k_words_show, tedit0 + @@: cmp ah,20 jne @f stdcall but_synt_show, tedit0 @@ -784,33 +507,27 @@ button: cmp ah,200 jne @f - call but_OpenSyntax + stdcall ted_but_open_syntax, tedit0 @@: cmp ah,201 jne @f - call but_FindText + stdcall but_FindText, tedit0 @@: cmp ah,1 jne still .exit: - ;push eax - call CanSave + stdcall ted_can_save, tedit0 cmp al,1 jne @f - push thread - push msgbox_8 - call [mb_create] ;message: save changes in file? + stdcall [mb_create],msgbox_8,thread ;message: save changes in file? jmp still @@: - mov ecx,[tex] - call mem_Free mov ecx,[bmp_icon] call mem_Free - mov ecx,[options_file] - call mem_Free - push dword tree1 - call dword[tl_data_clear] + + stdcall ted_delete, tedit0 + stdcall dword[tl_data_clear], tree1 mcall -1 ;ўл室 Ё§ Їа®Ја ¬¬л diff --git a/programs/other/t_edit/t_work.inc b/programs/other/t_edit/t_work.inc index d45e23c51..078489a9d 100644 --- a/programs/other/t_edit/t_work.inc +++ b/programs/other/t_edit/t_work.inc @@ -25,50 +25,8 @@ struct symbol td dd ? ; +14 врем. удаления ends -ColColor dd 1 -ColWords dd 0 -CURSOR_COLOR dd 0x808080 -WND_CAPT_COLOR dd 0x80 -WND_WORK_COLOR dd 0x0 -WND_BORD_COLOR dd 0xd0d0d0 -SELECT_COLOR dd 0x208080 -CUR_TEXT_COLOR dd 0xff0000 -WND_TEXT_COLOR dd 0xffff00 -options_file dd 0 -options_file_end dd 0 -tex_colors dd 0 -tex_help_f1 dd 0 - -FkPos: rd 256 -Col dd 0 ;указатель на структуры ключевых слов TexColViv - -conv_tabl rb 128 ; таблица для конвертирования scan-кода в ascii-код -keyUpr dd 0 - -err_sav db 0 ;ошибка сохранения файла -panel_id db 0 ;номер открытой панели - -ch_tim dd ? ; количество изменений в файле -ls_tim dd ? ; время последнего сохранения -co_tim dd ? ; время последней цветовой разметки -tim_Undo dd ? ; количество отмененных действий -gpOpt db 0 -mode_colored db 1 ; режим выделения слов цветом (0-выкл. 1-вкл.) - -key_new db 0 ; символ, который будет добавлятся с клавиатуры -tex dd 0 ;text memory pointer -tex_1 dd 0 ;text first symbol pointer -tex_end dd 0 ;text end memory pointer - -curMod db 1 -cur_x dd 0 -cur_y dd 0 -invis db 0 ;режим показа непечатаемых символов -symbol_new_line db 20 ;символ завершения строки -help_id dd -1 ;идентификатор для справки - -hed db 'TextEditor 15.04.10',0 ;подпись окна +hed db 'TextEditor 22.04.10',0 ;подпись окна sc system_colors fn_icon db 'te_icon.bmp',0 @@ -77,32 +35,338 @@ run_file_70 f70 ;input: +; edi = pointer to tedit struct ; reg = index ;output: ; reg = pointer to 'tex' struct macro ConvertIndexToPointer reg { imul reg,sizeof.symbol - add reg,[tex] + add reg,ted_tex } +align 4 +proc ted_init, edit:dword + push eax ecx edi + mov edi,dword[edit] + + mov ecx,sizeof.symbol*maxChars + call mem_Alloc ;выделяем память + mov ted_tex,eax + mov ted_tex_1,eax + add ted_tex_1,sizeof.symbol + mov ted_tex_end,eax + add ted_tex_end,sizeof.symbol*maxChars + + stdcall ted_clear, edi,1 + +;------------------------------------------------- + mov ecx,maxColWords*sizeof.TexColViv+40 + ;add ecx,40 + call mem_Alloc + mov ted_syntax_file,eax + mov ted_syntax_file_end,eax + add ted_syntax_file_end,ecx + + 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_syntax_file + call mem_Free + + pop edi ecx + ret +endp + + +;input: +; eax = key kodes +; ebx = key control +align 4 +proc ted_key, edit:dword, table:dword + pushad + mov edi,dword[edit] + + 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 but_FindText,edi + jmp .end_key_fun + @@: + + test ebx,KM_CTRL ;Ctrl+... + jz .key_Ctrl + + cmp ah,24 ;Ctrl+O + jne @f + call but_OpenFile + @@: + cmp ah,33 ;Ctrl+F + jne @f + cmp ted_panel_id,TE_PANEL_FIND + je @f + stdcall but_find,edi + @@: + 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 + call but_NewFile + @@: + cmp ah,199 ;Ctrl+Home + jne @f + call but_CtrlHome + @@: + ;jmp .end_key_fun + .key_Ctrl: + + test ebx,KM_SHIFT ;Shift+... + jz .key_Shift + cmp ah,72 ;Shift+Up + jne @f + stdcall ted_sel_key_up,edi + @@: + cmp ah,75 ;Shift+Left + jne @f + stdcall ted_sel_key_left,edi + @@: + cmp ah,77 ;Shift+Right + jne @f + stdcall ted_sel_key_right,edi + @@: + cmp ah,80 ;Shift+Down + jne @f + stdcall ted_sel_key_down,edi + @@: + ;mov ted_drag_k,1 ;начинаем выделение от клавиатуры + jmp .key_MoveCur + .key_Shift: +;------------------------------------------------- + cmp ah,72 ;178 ;Up + jne @f + stdcall draw_cursor_sumb,edi + call CurMoveUp + cmp dl,8 + jne .no_red_0 + call OnInitialUpdate + stdcall draw_main_win,edi + jmp @f + .no_red_0: + stdcall draw_main_cursor,edi + mov ted_drag_k,0 ;заканчиваем выделение от клавиатуры + @@: + cmp ah,80 ;177 ;Down + jne @f + stdcall draw_cursor_sumb,edi + call CurMoveDown + cmp dl,8 + jne .no_red_1 + call OnInitialUpdate + stdcall draw_main_win,edi + jmp @f + .no_red_1: + stdcall draw_main_cursor,edi + mov ted_drag_k,0 ;заканчиваем выделение от клавиатуры + @@: + cmp ah,75 ;176 ;Left + jne @f + stdcall draw_cursor_sumb,edi + call CurMoveLeft + cmp dl,8 + jne .no_red_2 + call OnInitialUpdate + stdcall draw_main_win,edi + jmp @f + .no_red_2: + stdcall draw_main_cursor,edi + mov ted_drag_k,0 ;заканчиваем выделение от клавиатуры + @@: + cmp ah,77 ;179 ;Right + jne @f + stdcall draw_cursor_sumb,edi + call CurMoveRight + cmp dl,8 + jne .no_red_3 + call OnInitialUpdate + stdcall draw_main_win,edi + jmp @f + .no_red_3: + stdcall draw_main_cursor,edi + mov ted_drag_k,0 ;заканчиваем выделение от клавиатуры + @@: + cmp ah,71 ;180 ;Home + jne @f + stdcall draw_cursor_sumb,edi + call CurMoveX_FirstChar + cmp dl,8 + jne .no_red_4 + call OnInitialUpdate + stdcall draw_main_win,edi + jmp @f + .no_red_4: + stdcall draw_main_cursor,edi + mov ted_drag_k,0 ;заканчиваем выделение от клавиатуры + @@: + cmp ah,79 ;181 ;End + jne @f + stdcall draw_cursor_sumb,edi + call CurMoveX_LastChar + cmp dl,8 + jne .no_red_5 + call OnInitialUpdate + stdcall draw_main_win,edi + jmp @f + .no_red_5: + stdcall draw_main_cursor,edi + mov ted_drag_k,0 ;заканчиваем выделение от клавиатуры + @@: + cmp ah,73 ;184 ;PageUp + jne @f + call CurMovePageUp + cmp dl,0 + je @f + call OnInitialUpdate + stdcall draw_main_win,edi + @@: + cmp ah,81 ;183 ;PageDown + jne @f + call CurMovePageDown + cmp dl,0 + je @f + call OnInitialUpdate + stdcall draw_main_win,edi + mov ted_drag_k,0 ;заканчиваем выделение от клавиатуры + @@: +;------------------------------------------------- +; cmp ebx,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 ;заканчиваем выделение от клавиатуры + + xor edx,edx + mov dl,ah + add edx,EvChar ;add char to text + cmp byte [edx],1 + jne @f + mov ted_key_new,ah + stdcall ted_set_undo,edi + mov edx,ted_opt_ed_change_time+ted_opt_ed_move_cursor + stdcall SelTextDel,edx + cmp al,1 + jne .del + mov edx,ted_opt_ed_move_cursor + .del: + cmp ted_cur_ins,1 + je .no_ins_mod + stdcall TextDel,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 ;добавляем символ введенный с клавиатуры + call draw_but_toolbar + cmp ted_key_new,13 + jne .dr_m_win + stdcall draw_main_win,edi + jmp .dr_cur_l + .dr_m_win: + stdcall draw_cur_line,edi + .dr_cur_l: + @@: + + cmp ah,8 ;[<-] + jne @f + stdcall ted_set_undo,edi + stdcall SelTextDel,ted_opt_ed_change_time + cmp al,1 + je .del_one_b + stdcall TextDel,edi,ted_opt_ed_change_time+ted_opt_ed_move_cursor + .del_one_b: + call draw_but_toolbar + stdcall draw_main_win,edi + jmp .end_key_fun + @@: + + cmp ah,182 ;Delete + jne @f + stdcall ted_set_undo,edi + stdcall SelTextDel,ted_opt_ed_change_time + cmp al,1 + je .del_one_d + stdcall TextDel,edi,ted_opt_ed_change_time + .del_one_d: + call draw_but_toolbar + stdcall draw_main_win,edi + jmp .end_key_fun + @@: + + cmp ah,185 ;Ins + jne @f + stdcall draw_cursor_sumb,edi + xor ted_cur_ins,1 + stdcall draw_main_cursor,edi + @@: + + .end_key_fun: + popad + ret +endp ;output: ; al = 1 - can save -CanSave: - push ecx - mov ecx,[ch_tim] - sub ecx,[tim_Undo] +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 [ls_tim],ecx + cmp ted_tim_ls,ecx jne @f dec al @@: - pop ecx + pop edi ecx ret - +endp ;output: ; al = 1 - selected +align 4 proc IsSel, edit:dword push ebx edi mov edi,dword[edit] @@ -110,11 +374,11 @@ proc IsSel, edit:dword cmp ted_drag_m,1 je @f mov al,1 - mov ebx,[sel.x0] - cmp ebx,[sel.x1] + mov ebx,ted_sel_x0 + cmp ebx,ted_sel_x1 jne @f - mov ebx,[sel.y0] - cmp ebx,[sel.y1] + mov ebx,ted_sel_y0 + cmp ebx,ted_sel_y1 jne @f xor al,al @@: @@ -122,80 +386,97 @@ proc IsSel, edit:dword ret endp -SelNormalize: +align 4 +proc SelNormalize, edit:dword push ecx esi edi - mov esi,sel - mov edi,seln + mov edi,dword[edit] + mov esi,edi + add esi,ted_offs_sel + add edi,ted_offs_seln mov ecx,sizeof.TexSelect rep movsb + mov edi,dword[edit] + jmp @f .swp_f: - mov ecx,[seln.x0] - m2m [seln.x0],[seln.x1] - mov [seln.x1],ecx + mov ecx,ted_seln_x0 + m2m ted_seln_x0,ted_seln_x1 + mov ted_seln_x1,ecx - mov ecx,[seln.y0] - cmp ecx,[seln.y1] ;(sel.y0>sel.y1) + mov ecx,ted_seln_y0 + cmp ecx,ted_seln_y1 ;(sel_y0>sel_y1) jle .end_f - m2m [seln.y0],[seln.y1] - mov [seln.y1],ecx + m2m ted_seln_y0,ted_seln_y1 + mov ted_seln_y1,ecx jmp .end_f @@: - mov ecx,[seln.y0] - cmp ecx,[seln.y1] ;(sel.y0>sel.y1) + mov ecx,ted_seln_y0 + cmp ecx,ted_seln_y1 ;(sel_y0>sel_y1) jg .swp_f - cmp ecx,[seln.y1] ;(sel.y0==sel.y1) + cmp ecx,ted_seln_y1 ;(sel_y0==sel_y1) jne .end_f - mov ecx,[seln.x0] - cmp ecx,[seln.x1] ;(sel.x0>sel.x1) + mov ecx,ted_seln_x0 + cmp ecx,ted_seln_x1 ;(sel_x0>sel_x1) jg .swp_f .end_f: pop edi esi ecx ret - -SelStart: - push ecx - mov ecx,[cur_x] - add ecx,[hScr.position] - mov [sel.x0],ecx - mov [sel.x1],ecx - - mov ecx,[cur_y] - add ecx,[wScr.position] - mov [sel.y0],ecx - mov [sel.y1],ecx - pop ecx - ret +endp align 4 -SelMove: - push ecx - mov ecx,[cur_x] - add ecx,[hScr.position] - mov [sel.x1],ecx +proc SelStart, edit:dword + push ecx edi + mov edi,dword[edit] - mov ecx,[cur_y] + mov ecx,ted_cur_x + add ecx,[hScr.position] + mov ted_sel_x0,ecx + mov ted_sel_x1,ecx + + mov ecx,ted_cur_y add ecx,[wScr.position] - mov [sel.y1],ecx - pop ecx + mov ted_sel_y0,ecx + mov ted_sel_y1,ecx + pop edi ecx + ret +endp + +align 4 +proc SelMove, edit:dword + push ecx edi + mov edi,dword[edit] + + mov ecx,ted_cur_x + add ecx,[hScr.position] + mov ted_sel_x1,ecx + + mov ecx,ted_cur_y + add ecx,[wScr.position] + mov ted_sel_y1,ecx + pop edi ecx call draw_but_toolbar ;redraw toolbar (need to button Copy) ret +endp ;input: -; al = 1 - clear all memory -Clear: - mov [cur_x],0 - mov [cur_y],0 - mov [ch_tim],0 - mov [ls_tim],0 - mov [co_tim],0 - mov [tim_Undo],0 - mov [help_id],-1 +; cl_al_mem = 1 - clear all memory +align 4 +proc ted_clear, edit:dword, cl_al_mem:dword + push 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 [wScr.position],0 mov [wScr.max_area],100 @@ -203,42 +484,44 @@ Clear: mov [hScr.position],0 mov [hScr.max_area],100 - mov [sel.x0],0 - mov [sel.y0],0 - mov [sel.x1],0 - mov [sel.y1],0 + mov ted_sel_x0,0 + mov ted_sel_y0,0 + mov ted_sel_x1,0 + mov ted_sel_y1,0 - cmp al,0 + cmp dword[cl_al_mem],0 je .exit push ecx edx mov ecx,sizeof.symbol*maxChars - mov edx,[tex] + mov edx,ted_tex @@: mov byte [edx],0 inc edx loop @b - mov edx,[tex] + mov edx,ted_tex mov dword [edx+6],1 pop edx ecx .exit: + pop edi ret +endp - -;--- out_reg = Col[keyw[ind_reg]].Text[0] --- +;--- out_reg = Col[ind_reg].Text[0] --- macro ColToIndexOffset ind_reg,out_reg { mov out_reg,ind_reg imul out_reg,sizeof.TexColViv - add out_reg,[Col] + add out_reg,ted_key_words_data } +align 4 +proc InitColText, edit:dword + pushad + mov edi,dword[edit] -InitColText: - push eax ebx ecx esi edi - - mov ebx,dword[fn_col_option] + 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 @@ -246,27 +529,27 @@ InitColText: mov [run_file_70.func_n], 0 mov [run_file_70.param1], 0 mov [run_file_70.param2], 0 - mov ebx,[options_file_end] - sub ebx,[options_file] + mov ebx,ted_syntax_file_end + sub ebx,ted_syntax_file mov [run_file_70.param3], ebx - m2m [run_file_70.param4], [options_file] + m2m [run_file_70.param4], ted_syntax_file mov [run_file_70.rezerv], 0 mov [run_file_70.name], file_name mov ebx,run_file_70 int 0x40 mov ecx,0x100 - mov edi,FkPos + mov edx,FkPos @@: - mov dword[edi],-1 - add edi,4 + mov dword[edx],-1 + add edx,4 loop @b - ;init: ColColor, ColWords, ... - mov dword[ColColor],1 - mov dword[ColWords],0 - mov dword[tex_help_f1],0 - mov [help_id],-1 ;идентификатор слова для справки + ;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 @@ -280,33 +563,33 @@ InitColText: add ax,48 mov byte[msgbox_3.err],al - push thread - push msgbox_3 - call [mb_create] ;message: Can-t open color options file! + stdcall [mb_create],msgbox_3,thread ;message: Can-t open color options file! jmp .no_colors @@: - mov esi,[options_file] - mov edi,ColColor + 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,[options_file] + mov eax,ted_syntax_file add eax,32 - mov dword[tex_colors],eax + mov ted_text_colors,eax - mov eax,dword[ColColor] ;init: Col (offset to key words) + mov eax,ted_colors_text_count ;init: count_colors_text (offset to key words) add eax,8 shl eax,2 - add eax,[options_file] - mov dword[Col],eax + add eax,ted_syntax_file + mov ted_key_words_data,eax - mov ecx,dword[ColWords] ;init: FkPos (first key positions) + mov ecx,ted_key_words_count ;init: FkPos (first key positions) xor eax,eax @@: - ColToIndexOffset eax,edi + ColToIndexOffset eax,edx xor ebx,ebx - mov bl,byte[edi] + mov bl,byte[edx] shl bx,2 mov esi,FkPos add esi,ebx @@ -317,31 +600,32 @@ InitColText: inc eax loop @b - ;init: tex_help_f1 - mov ecx,dword[ColWords] + ;init: ted_help_text_f1 + mov ecx,ted_key_words_count imul ecx,sizeof.TexColViv - add ecx,dword[Col] - mov dword[tex_help_f1],ecx + add ecx,ted_key_words_data + mov ted_help_text_f1,ecx .no_colors: - pop edi esi ecx ebx eax + popad ret - +endp ;input: ; ebx = file size -OpenFile: +; edi = pointer to tedit struct +align 4 +proc OpenFile push eax ;destination push ecx ;for cycle push edx ;source - xor al,al - call Clear + stdcall ted_clear,edi,0 ;чистим не всю память, потому что ниже будем ее заполнять новыми даными mov eax,ebx mov ecx,ebx add eax,2 ConvertIndexToPointer eax - mov edx,[tex] + mov edx,ted_tex add edx,ebx push ebx @@: @@ -366,7 +650,7 @@ OpenFile: add eax,2 mov dword [eax],0 ; first sumbol 'perv=0' - mov edx,[tex] + mov edx,ted_tex ; begining sumbol 'perv=0' 'next=2' mov dword [edx+2],0 mov dword [edx+6],2 @@ -379,12 +663,12 @@ OpenFile: mov edx,ebx inc edx ;2 = rezerv sumbols imul edx,sizeof.symbol - add edx,[tex] + 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,[tex_end] + cmp edx,ted_tex_end jge @f mov dword[edx+10],0 mov dword[edx+14],0 @@ -399,20 +683,26 @@ OpenFile: mov [wScr.max_area],eax ; mov [wScr.redraw],1 pop edx ecx eax + call CmColored + call draw_but_toolbar + stdcall draw_main_win,edi ret +endp ;input: ; edx = pointer to symbol struct +; edi = pointer to tedit struct ;output: ; edx = pointer to 'perv' visible symbol struct +align 4 IteratPerv: - cmp [tim_Undo],0 + cmp ted_tim_undo,0 je .else push ebx @@: call GetTexPervPos - cmp edx,[tex] + cmp edx,ted_tex je @f call SymbNotVis cmp bl,1 @@ -424,7 +714,7 @@ IteratPerv: ret .else: call GetTexPervPos - cmp edx,[tex] + cmp edx,ted_tex je .endif cmp dword [edx+14],0 jne .else @@ -436,15 +726,17 @@ IteratPerv: ;input: ; edx = pointer to symbol struct +; edi = pointer to tedit struct ;output: ; edx = pointer to 'next' visible symbol struct +align 4 IteratNext: - cmp [tim_Undo],0 + cmp ted_tim_undo,0 je .else push ebx @@: call GetTexNextPos - cmp edx,[tex_1] + cmp edx,ted_tex_1 jle @f call SymbNotVis cmp bl,1 @@ -456,7 +748,7 @@ IteratNext: ret .else: call GetTexNextPos - cmp edx,[tex_1] + cmp edx,ted_tex_1 jle .endif cmp dword [edx+14],0 jne .else @@ -466,13 +758,15 @@ IteratNext: ret ;input: -; edx = pointer to symbol struct ; bl = symbol end of select +; edx = pointer to symbol struct +; edi = pointer to tedit struct +align 4 ItPoNextUc: @@: cmp bl,byte[edx] je @f - cmp edx,[tex_1] + cmp edx,ted_tex_1 jle @f call IteratNext jmp @b @@ -482,12 +776,14 @@ ItPoNextUc: ;input: ; edx = pointer to symbol struct +; edi = pointer to tedit struct +align 4 ItPervColorTag: @@: cmp byte[edx+1],0 jne @f call IteratPerv - cmp edx,[tex_1] + cmp edx,ted_tex_1 jle @f jmp @b @@: @@ -495,12 +791,14 @@ ItPervColorTag: ;input: ; edx = pointer to symbol struct +; edi = pointer to tedit struct +align 4 ItNextColorTag: @@: call IteratNext cmp byte[edx+1],0 jne @f - cmp edx,[tex_1] + cmp edx,ted_tex_1 jle @f jmp @b @@: @@ -509,9 +807,11 @@ ItNextColorTag: ;input: ; edx = pointer to symbol struct +; edi = pointer to tedit struct ;output: ; bl = 1 if sumbol not visible -; (tex[i].td+tim_Undo<=ch_tim && tex[i].td) || (tex[i].tc>ch_tim-tim_Undo) +; (tex[i].td+ted_tim_undo<=ted_tim_ch && tex[i].td) || (tex[i].tc>ted_tim_ch-ted_tim_undo) +align 4 SymbNotVis: push eax @@ -520,16 +820,16 @@ SymbNotVis: cmp dword [edx+14],0 je @f mov eax,[edx+14] ;eax=tex[i].td - add eax,[tim_Undo] - cmp eax,[ch_tim] + add eax,ted_tim_undo + cmp eax,ted_tim_ch jg @f mov bl,1 pop eax ret @@: - mov eax,[ch_tim] - sub eax,[tim_Undo] + mov eax,ted_tim_ch + sub eax,ted_tim_undo cmp [edx+10],eax jle @f or bl,1 @@ -540,87 +840,96 @@ SymbNotVis: ;input: -; bh = 1 - move cursor after text add -; bl = 1 - change time when text add -; esi = add text len -; edi = pointer to text string -TextAdd: - push ebp - mov ebp,esp - sub esp,4*2 - - push eax ;po_t - push ecx edx edi +; 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 GetPos call GetTexPervPos call GetTexArrIndex ;eax=po_t - mov dword[ebp-4],0 ;count new spaces - cmp [gpOpt],2 + mov dword[new_spc],0 + cmp ted_gp_opt,2 je @f - push eax ebx ;c_sp=cur[cn].x+Scroller->XPos-StrLen(cur[cn].y+Scroller->YPos); - mov eax,[cur_x] + push eax ;c_sp=cur[cn].x+Scroller->XPos-StrLen(cur[cn].y+Scroller->YPos); + mov eax,ted_cur_x add eax,[hScr.position] - mov dword[ebp-4],eax + mov dword[new_spc],eax - mov eax,[cur_y] + mov eax,ted_cur_y add eax,[wScr.position] - call StrLen - sub dword[ebp-4],ebx - pop ebx eax + call ted_strlen ;ebx = line len + sub dword[new_spc],ebx + pop eax @@: - mov dword[ebp-8],0 ;count new lines - cmp [gpOpt],0 + mov ebx,dword[t_len] + + mov dword[new_lin],0 + cmp ted_gp_opt,0 jne @f push eax - mov eax,[cur_y] + mov eax,ted_cur_y add eax,[wScr.position] inc eax - mov dword[ebp-8],eax + mov dword[new_lin],eax call GetNumLines - sub dword[ebp-8],eax + sub dword[new_lin],eax pop eax @@: mov edx,sizeof.symbol shl edx,1 - add edx,[tex] + add edx,ted_tex @@: ;for(i=2;i