From 16c8c37422c6ca5d0bdfda427303a7c8f2d96715 Mon Sep 17 00:00:00 2001 From: IgorA Date: Mon, 3 May 2010 15:12:50 +0000 Subject: [PATCH] 1) revised 't_edit' new function 'ted_init_scroll_bars' 2) updated documentation git-svn-id: svn://kolibrios.org@1458 a494cfbc-eb01-0410-851d-a64ba20cac60 --- .../libraries/box_lib/trunk/box_lib.asm | 2 + .../libraries/box_lib/trunk/box_lib.mac | 3 + .../box_lib/trunk/doc/t_edit/t_edit.htm | 228 +++++++- .../libraries/box_lib/trunk/t_edit.mac | 533 ++++++++++-------- programs/other/t_edit/t_button.inc | 2 +- programs/other/t_edit/t_data.inc | 2 + programs/other/t_edit/t_draw.inc | 40 +- programs/other/t_edit/t_edit.asm | 12 +- 8 files changed, 524 insertions(+), 298 deletions(-) diff --git a/programs/develop/libraries/box_lib/trunk/box_lib.asm b/programs/develop/libraries/box_lib/trunk/box_lib.asm index 666efe9fb4..aba274aebc 100644 --- a/programs/develop/libraries/box_lib/trunk/box_lib.asm +++ b/programs/develop/libraries/box_lib/trunk/box_lib.asm @@ -180,6 +180,7 @@ 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_scroll_bars, ted_init_scroll_bars dd sz_ted_init_syntax_file, ted_init_syntax_file dd sz_ted_is_select, ted_is_select dd sz_ted_key, ted_key @@ -276,6 +277,7 @@ 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_scroll_bars db 'ted_init_scroll_bars',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 diff --git a/programs/develop/libraries/box_lib/trunk/box_lib.mac b/programs/develop/libraries/box_lib/trunk/box_lib.mac index c4425d1356..344321b7b0 100644 --- a/programs/develop/libraries/box_lib/trunk/box_lib.mac +++ b/programs/develop/libraries/box_lib/trunk/box_lib.mac @@ -340,6 +340,9 @@ 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_bckg_col equ 28 +sb_offs_frnt_col equ 32 +sb_offs_line_col equ 36 sb_offs_redraw equ 40 sb_offs_delta2 equ 46 sb_offs_all_redraw equ 80 diff --git a/programs/develop/libraries/box_lib/trunk/doc/t_edit/t_edit.htm b/programs/develop/libraries/box_lib/trunk/doc/t_edit/t_edit.htm index c71adc0b62..210941a762 100644 --- a/programs/develop/libraries/box_lib/trunk/doc/t_edit/t_edit.htm +++ b/programs/develop/libraries/box_lib/trunk/doc/t_edit/t_edit.htm @@ -13,7 +13,31 @@

Функции

+

Формат файла подсветки *.syn

Введение

Элемент text_editor позволяет работать с текстовыми файлами, содержит много функция для редактирования текста.

@@ -62,33 +86,184 @@ ends

Функции на экспорт:

ted_but_copy

- -

Функция которая будет вызываться при нажатии на кнопку копирования в буфер или на Ctrl+C.

+

Функция которая будет вызываться при нажатии на кнопку копирования в буфер или на Ctrl+C. Текст копируется в буфер ted_buffer, максимальный размер буфера указывается в ted_buffer_size.

Пример использования:

stdcall [ted_but_copy], tedit0
-

ted_but_cut

-

ted_but_find_next

-

ted_but_paste

-

ted_but_redo

-

ted_but_reverse

-

ted_but_save_file

-

ted_but_select_word

-

ted_but_sumb_lover

-

ted_but_sumb_upper

-

ted_but_undo

-

ted_can_save

-

ted_clear

-

ted_delete

-

ted_draw

-

ted_init

-

ted_init_syntax_file

-

ted_is_select

-

ted_key

-

ted_mouse

-

ted_open_file

-

ted_text_add

-

ted_text_colored

+

ted_but_cut

+

Функция вырезает выделенный текст и копирует его в буфер.

+

Пример использования:

+
stdcall [ted_but_cut], tedit0
+ +

ted_but_find_next

+

Функция для поиска текста. Ищет текст из буфера ted_buffer_find, при нахождении перемещает курсор к найденому тексту и выделяет его.

+

Пример использования:

+
stdcall [ted_but_find_next], tedit0
+ +

ted_but_paste

+

Функция вставляет текст из буфера ted_buffer.

+

Пример использования:

+
stdcall [ted_but_paste], tedit0
+ +

ted_but_redo

+

Повторяет отмененные действия по редактированию текста.

+

Пример использования:

+
stdcall [ted_but_redo], tedit0
+ +

ted_but_reverse

+

Меняет порядок следования символов в выделенном тексте.

+

Пример использования:

+
stdcall [ted_but_reverse], tedit0
+ +

ted_but_save_file

+

Функция для сохранения файла. Принимает 3 параметра:

+

1) структура tedit,

+

2) структура для работы 70-й функции (до вызова функции заполнения не требует),

+

3) строка с путем и именем файла.

+

Пример использования:

+
stdcall [ted_but_save_file], tedit0,run_file_70,[edit1.text]
+ +

ted_but_select_word

+

Функция для выделения ключевого слова под курсором. Если ключевые слова не используются, тогда будет выделен весь текст.

+

Пример использования:

+
stdcall [ted_but_select_word], tedit0
+ +

ted_but_sumb_lover

+

Переводит выделенные символы к нижнему регистру.

+

Пример использования:

+
stdcall [ted_but_sumb_lover], tedit0
+ +

ted_but_sumb_upper

+

Переводит выделенные символы к верхнему регистру.

+

Пример использования:

+
stdcall [ted_but_sumb_upper], tedit0
+ +

ted_but_undo

+

Отменяет действия по редактированию текста. Действия функции ted_but_reverse не отменяются.

+

Пример использования:

+
stdcall [ted_but_undo], tedit0
+ +

ted_can_save

+

Функция которая проверяет были ли не сохраненные изменения в тексте. Результат возвращается в регистр al, если изменения были то возвращает 1 иначе 0.

+

Пример использования:

+
push eax
+	stdcall [ted_can_save], tedit0
+	cmp al,1
+.........
+pop eax
+ +

ted_clear

+

Очистка текста в окне редактора. Принимает 2 параметра:

+

1) структура tedit,

+

2) параметр определяет будет ли очистка памяти полной.

+

Если 2-й параметр равен 1, то очистка будет полной, при 0 нет. Пользователю нужно вызывать функцию с параметром 1, параметр 0 для внутреннего использования.

+

Пример использования:

+
stdcall [ted_clear], tedit0,1
+ +

ted_delete

+

Деструктор элемента, освобождает память занятую элементом.

+

Пример использования:

+
stdcall [ted_delete], tedit0
+ +

ted_draw

+

Перерисовка всего окна редактора, включая дочерние скроллинги.

+

Пример использования:

+
stdcall [ted_draw], tedit0
+ +

ted_init

+

Конструктор элемента, выделяет память необходимую для работы текстового редактора.

+

Пример использования:

+
stdcall [ted_init], tedit0
+ +

ted_init_scroll_bars

+

Устанавливает цвет скроллингов и настраивает их размеры в зависимости от размеров окна. Можно вызывать эту функцию при изменении размеров окна в пользовательской программе. Принимает 2 параметра:

+

1) структура tedit,

+

2) опции, если 1 то изменять цвета скроллингов если 2 то изменять размер, можно давать комбинацию опций с помощью или.

+

Пример использования:

+
stdcall [ted_init_scroll_bars], tedit0,2
+ +

ted_init_syntax_file

+

Функция для загрузки цветов интерфейса и ключевых слов из файла синтаксиса. Принимает 3 параметра:

+

1) структура tedit,

+

2) структура для работы 70-й функции (до вызова функции заполнения не требует),

+

3) строка с путем и именем файла синтаксиса.

+

Пример использования:

+
stdcall [ted_init_syntax_file], tedit0,run_file_70,file_name
+ +

ted_is_select

+

Определяет есть в окне редактора выделенный текст. Если есть в регистр al записывается 1 иначе 0. Функция необходима для создания панелей инстрементов, в которых в зависимости от выделения будут доступны или заблокированы определенные кнопки (действия). Например кнопку для копирования в буфер можно заблокировать если нет выбранного текста.

+

Пример использования:

+
push eax edi
+	mov edi,tedit0
+	call [ted_is_select]
+	cmp al,0
+.........
+pop edi eax
+ +

ted_key

+

Функция вызываемая для реакции на клавиатуру. В регистре eax должен быть код нажатой клавиши. Принимает 3 параметра:

+

1) структура tedit,

+

2) таблица для конвертации scan кодов в ascii,

+

3) управляющие символы.

+

Пример использования:

+
mcall 66,3 ;66.3 получить состояние управляющих клавиш
+xor esi,esi
+mov ecx,1
+test al,0x03 ;[Shift]
+jz @f
+	mov cl,2
+	or esi,KM_SHIFT
+@@:
+test al,0x0c ;[Ctrl]
+jz @f
+	or esi,KM_CTRL
+@@:
+test al,0x30 ;[Alt]
+jz @f
+mov cl,3
+	or esi,KM_ALT
+@@:
+test al,0x80 ;[NumLock]
+jz @f
+	or esi,KM_NUMLOCK
+@@:
+
+mcall 26,2,,conv_tabl ;26.2 получить раскладку клавиатуры
+mcall 2 ;получаем код нажатой клавиши
+stdcall [ted_key], tedit0, conv_tabl,esi
+ +

ted_mouse

+

Функция на перемещение или нажатие мыши.

+

Пример использования:

+
stdcall [ted_mouse], tedit0
+ +

ted_open_file

+

Функция для открытия файла. Принимает 3 параметра:

+

1) структура tedit,

+

2) структура для работы 70-й функции (до вызова функции заполнения не требует),

+

3) строка с путем и именем файла.

+

Пример использования:

+
stdcall [ted_open_file], tedit0,run_file_70,[edit1.text]
+ +

ted_text_add

+

Функция для добавления текста. Принимает 4 параметра:

+

1) структура tedit,

+

2) указатель на буфер с текстом,

+

3) длина текста,

+

4) опции вставки.

+

Пример использования:

+
mov ebx,ted_opt_ed_change_time+ted_opt_ed_move_cursor
+stdcall [ted_text_add], tedit0,ted_buffer,30,ebx
+

ted_opt_ed_change_time - фиксировать изменения документа, что-бы их можно было отменить. Например если нужно сделать несколько изменений текста, которые будут отменяться за один раз, то 1-е изменение идет с этой константой а остальные нет.

+

ted_opt_ed_move_cursor - константа которая определяет сдвиг курсора после добавления текста.

+ +

ted_text_colored

+

Функция для разметки текста цветом. Обычно вызывается внутри самой библиотеки, при изменениях текста. В некоторых случаях может понадобиться вызвать принудительно из внешней программы.

+

Пример использования:

+
push edi
+	mov edi,tedit0
+	call [ted_text_colored]
+pop edi

Внутренние функции:

ted_get_text_perv_pos - переход на предыдущий символ в цепи (через указатель 'perv')

@@ -106,8 +281,7 @@ ends

ted_go_to_pos - переставляет курсор в указанную позицию, если указанная позиция находится вне экрана, то также переставляются скролинги (ecx->коорд. x, знак; edx->коорд. y, строка)

- -

Формат файла подсветки *.syn

+

Формат файла подсветки *.syn

@@ -132,7 +306,7 @@ ends
-

Документация обновлялась последний раз 29.04.10.

+

Документация обновлялась последний раз 03.05.10.

\ No newline at end of file diff --git a/programs/develop/libraries/box_lib/trunk/t_edit.mac b/programs/develop/libraries/box_lib/trunk/t_edit.mac index c1f82f77bb..aa228fdeda 100644 --- a/programs/develop/libraries/box_lib/trunk/t_edit.mac +++ b/programs/develop/libraries/box_lib/trunk/t_edit.mac @@ -1,6 +1,6 @@ ; ¬ Єа®б ¤«п бЁб⥬­®© ЎЁЎ«Ё®вҐЄЁ box_lib.obj ; н«Ґ¬Ґ­в TextEditor ¤«п Kolibri OS -; д ©« Ї®б«Ґ¤­Ё© а § Ё§¬Ґ­п«бп 29.04.2010 IgorA +; д ©« Ї®б«Ґ¤­Ё© а § Ё§¬Ґ­п«бп 03.05.2010 IgorA ; ­  Є®¤ ЇаЁ¬Ґ­Ґ­  GPL2 «ЁжҐ­§Ёп ;input: @@ -54,6 +54,8 @@ struct symbol ends ;------------------------------------------------------------------------------ +ted_symbol_tab db 26 + if lang eq ru txtFindCapt db 'Џ®ЁбЄ',0 @@ -80,7 +82,7 @@ end if ;------ align 4 -EvChar db 0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 +EvChar db 0,0,0,0,0,0,0,0,0,1,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 @@ -146,30 +148,95 @@ KEY_F3 equ 0x0000003D align 4 proc ted_init, edit:dword - push eax ecx edi - mov edi,dword[edit] + 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 + 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 + 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 + 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 + stdcall ted_init_scroll_bars,edi,3 + pop edi ecx eax + ret +endp + +MIN_W_SCRL_ARE equ 3 ;¬Ё­Ё¬ «м­ п ®в®Ўа ¦ Ґ¬ п ®Ў« бвм ¤«п ўҐав. бЄа®««Ё­Ј  +MIN_H_SCRL_ARE equ 3 ;¬Ё­Ё¬ «м­ п ®в®Ўа ¦ Ґ¬ п ®Ў« бвм ¤«п Ј®аЁ§. бЄа®««Ё­Ј  +;input: +; opt = 1 - ¬Ґ­пвм 梥в бЄа®««Ё­Ј®ў, 2 - ¬Ґ­пвм ў­Ґи­ЁҐ а §¬Ґал +align 4 +proc ted_init_scroll_bars, edit:dword, opt:dword + pushad + mov esi,ted_scr_w + mov ebx,ted_scr_h + bt dword[opt],0 + jae @f + mov ecx,ted_color_wnd_work + mov dword[esi+sb_offs_bckg_col],ecx + mov dword[ebx+sb_offs_bckg_col],ecx + mov ecx,ted_color_wnd_capt + mov dword[esi+sb_offs_frnt_col],ecx + mov dword[ebx+sb_offs_frnt_col],ecx + mov ecx,ted_color_wnd_bord + mov dword[esi+sb_offs_line_col],ecx + mov dword[ebx+sb_offs_line_col],ecx + @@: + bt dword[opt],1 + jae .no_size + mov edx,ted_wnd_l + add edx,ted_rec_l + mov word[ebx+sb_offs_start_x],dx ;ўлбв ў«пҐ¬ «Ґўл© ®вбвгЇ Ј®аЁ§. бЄа®««Ё­Ј  + mov eax,ted_wnd_h ;calculate lines in page + mov edx,ted_wnd_t + add edx,eax + mov word[ebx+sb_offs_start_y],dx ;ўлбв ў«пҐ¬ ўҐае­Ё© ®вбвгЇ Ј®аЁ§. бЄа®««Ё­Ј  + sub eax,ted_rec_t + xor edx,edx + mov ecx,ted_rec_h + div ecx + cmp eax,MIN_W_SCRL_ARE + jg @f + mov eax,MIN_W_SCRL_ARE + @@: + mov dword[esi+sb_offs_cur_area],eax + + mov eax,ted_wnd_w ;calculate cols in page + mov edx,ted_wnd_l ;«Ґўл© ®вбвгЇ ®Є­  + add edx,eax ;¤®Ў ў«пҐ¬ иЁаЁ­г ®Є­  + mov word[esi+sb_offs_start_x],dx ;ўлбв ў«пҐ¬ «Ґўл© ®вбвгЇ ўҐав. бЄа®««Ё­Ј  + mov edx,ted_wnd_t + mov word[esi+sb_offs_start_y],dx ;ўлбв ў«пҐ¬ ўҐае­Ё© ®вбвгЇ ўҐав. бЄа®««Ё­Ј  + mov edx,ted_wnd_h + mov word[esi+sb_offs_size_y],dx ;ўлбв ў«пҐ¬ ўлб®вг ўҐав. бЄа®««Ё­Ј  + sub eax,ted_rec_l + mov word[ebx+sb_offs_size_x],ax ;ўлбв ў«пҐ¬ иЁаЁ­г Ј®аЁ§. бЄа®««Ё­Ј  + xor edx,edx + mov ecx,ted_rec_w + div ecx + cmp eax,MIN_H_SCRL_ARE + jg @f + mov eax,MIN_H_SCRL_ARE + @@: + dec eax + mov dword[ebx+sb_offs_cur_area],eax ;гбв ­ ў«Ёў Ґ¬ зЁб«® бЁ¬ў®«®ў, Є®в®алҐ ў« §пв ў нЄа ­ ¤«п Ј®аЁ§. бЄа®««Ё­Ј  + .no_size: + popad + ret endp align 4 @@ -193,6 +260,9 @@ align 4 proc ted_key, edit:dword, table:dword, control:dword pushad mov edi,dword[edit] + mov esi,ted_el_focus + cmp dword[esi],edi + jne .end_key_fun ;н«Ґ¬Ґ­в ­Ґ ў д®Єгᥠўл室Ё¬ Ё§ дг­ЄжЁЁ mov esi,dword[control] cmp ah,KEY_F1 ;[F1] @@ -214,6 +284,12 @@ proc ted_key, edit:dword, table:dword, control:dword je @f call ted_fun_on_key_ctrl_o @@: + cmp ah,31 ;Ctrl+S + jne @f + cmp ted_fun_on_key_ctrl_s,0 + je @f + call ted_fun_on_key_ctrl_s + @@: cmp ah,33 ;Ctrl+F jne @f cmp ted_panel_id,TED_PANEL_FIND @@ -247,41 +323,41 @@ proc ted_key, edit:dword, table:dword, control:dword 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: + 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,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 @@ -365,8 +441,8 @@ proc ted_key, edit:dword, table:dword, control:dword mov ted_drag_k,0 ;§ Є ­зЁў Ґ¬ ўл¤Ґ«Ґ­ЁҐ ®в Є« ўЁ вгал @@: ;------------------------------------------------- -; cmp esi,0 -; jne .end_key_fun +; cmp esi,0 +; jne .end_key_fun .key_MoveCur: cmp ah,69 ;[Pause Break] @@ -607,11 +683,11 @@ proc ted_clear, edit:dword, cl_al_mem:dword 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_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 dword[ecx+sb_offs_max_area],100 ;зЁб«® бЁ¬ў®«®ў ўЁ¤Ё¬ле ў ­®ў®¬ ¤®Єг¬Ґ­вҐ mov ted_sel_x0,0 mov ted_sel_y0,0 @@ -724,6 +800,7 @@ proc ted_init_syntax_file, edit:dword, file:dword, f_name:dword add ecx,ted_key_words_data mov ted_help_text_f1,ecx + stdcall ted_init_scroll_bars,edi,1 ;¬Ґ­пҐ¬ жўҐв  бЄа®««Ё­Ј®ў .no_colors: popad ret @@ -2805,14 +2882,19 @@ ted_get_symb_color: ; ”г­ЄжЁп ЇаҐ®Ўа §гҐв ­ҐўЁ¤Ё¬лҐ бЁ¬ў®«л ў ЇҐз в Ґ¬лҐ ­  нЄа ­Ґ 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 + cmp ted_mode_invis,1 + jne .end_f + cmp byte[edx],9 + jne @f + lea edx,[ted_symbol_tab] + @@: + cmp byte[edx],13 + jne @f + mov edx,edi + add edx,ted_offs_symbol_new_line + @@: + .end_f: + ret ;input: ; edi = pointer to tedit struct @@ -2828,93 +2910,93 @@ ted_scroll_set_redraw: align 4 proc ted_draw, edit:dword - locals - line_num dd ? - endl - pushad - mov edi,dword[edit] + 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 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 ;¤®Ў ў«пҐ¬ ®вбвгЇл ¤«п ўла ў­Ёў ­Ёп ЎгЄўл Ї® 業ваг + 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 + 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 + 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 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: + 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: + 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 + 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 @@ -3086,7 +3168,8 @@ pop edi je @f mov ecx,ted_tim_undo add edx,0x500000 - int 0x40 + mov edi,ted_color_wnd_work ;Ї®авЁ¬ ॣЁбва edi, ­® ў Є®­жҐ дг­ЄжЁЁ н⮠㦥 ­Ґ ў ¦­® + int 0x40 ;ўлў®¤ зЁб«  ®в¬Ґ­Ґ­­ле ¤Ґ©бвўЁ© @@: popad @@ -3101,9 +3184,12 @@ proc ted_draw_buffer mov eax,ted_buffer cmp byte[eax],0 ;ᬮваЁ¬ 1-© бЁ¬ў®« Ё§ ЎгдҐа  je @f - mov ebx,ted_wnd_l - add ebx,ted_rec_l + mov ebx,ted_rec_l add bx,300 + cmp ebx,ted_wnd_w ;ба ў­Ёў Ґ¬ Є®®а¤Ё­ вг ¤«п ўлў®¤ ⥪бв  + jge @f ;Ї®¤ЇЁбм ­Ґ ў« §Ёв ў ®Є­® + + add ebx,ted_wnd_l shl ebx,16 add ebx,ted_wnd_t add ebx,3 @@ -3141,59 +3227,60 @@ endp ; edi = pointer to tedit struct align 4 proc ted_draw_help_f1 - pushad + pushad + cmp ted_rec_t,13 ;¬Ё­Ё¬ «м­ п ўлб®в  ¤«п аЁб®ў ­Ёп бЇа ўЄЁ + jle @f + 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 - 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 - 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 - ;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 - ;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 + ;*** 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: @@ -3698,7 +3785,11 @@ proc ted_mouse, edit:dword call ted_wnd_main_click jmp .no_in_wnd @@: - call ted_wnd_main_mouse_scroll + mov edx,ted_el_focus + cmp dword[edx],edi + jne @f + call ted_wnd_main_mouse_scroll ;ᬮваЁ¬ ­  Їа®ЄагвЄг Є®«Ґб  ¬лиЁ + @@: cmp ted_drag_m,0 je .no_in_wnd mov ted_drag_m,0 @@ -3718,7 +3809,9 @@ endp ; дг­ЄжЁп ўл§лўҐвбп ЇаЁ ­ ¦ вЁЁ Є­®ЇЄ®© ¬лиЁ Ё Ї®Ї ¤Ґ­ЁЁ Єгаб®а®¬ ў ®Є­® । Єв®а  align 4 ted_wnd_main_click: - push ebx ecx edx + push ebx ecx edx + mov ebx,ted_el_focus + mov dword[ebx],edi ;бв ўЁ¬ д®Єгб push eax shr eax,16 @@ -3757,23 +3850,23 @@ ted_wnd_main_click: 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 + 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 + mcall 37,7 ;Їа®ЄагвЄ  Є®«Ґб  ¬лиЁ cmp ax,0 je .no_scroll mov ecx,ted_scr_w @@ -3782,16 +3875,16 @@ ted_wnd_main_mouse_scroll: btr ax,15 jae @f or eax,0xffff8000 - @@: - add dword[ecx+sb_offs_position],eax + @@: + 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 + 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 diff --git a/programs/other/t_edit/t_button.inc b/programs/other/t_edit/t_button.inc index 5cfd28d91c..217a5770af 100644 --- a/programs/other/t_edit/t_button.inc +++ b/programs/other/t_edit/t_button.inc @@ -26,7 +26,7 @@ struct symbol ends -hed db 'TextEditor 29.04.10',0 ;Ї®¤ЇЁбм ®Є­  +hed db 'TextEditor 03.05.10',0 ;Ї®¤ЇЁбм ®Є­  sc system_colors fn_icon db 'te_icon.bmp',0 diff --git a/programs/other/t_edit/t_data.inc b/programs/other/t_edit/t_data.inc index 9ba44abf93..a5706508d3 100644 --- a/programs/other/t_edit/t_data.inc +++ b/programs/other/t_edit/t_data.inc @@ -81,6 +81,7 @@ 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_scroll_bars dd sz_ted_init_scroll_bars ted_init_syntax_file dd sz_ted_init_syntax_file ted_is_select dd sz_ted_is_select ted_key dd sz_ted_key @@ -154,6 +155,7 @@ 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_scroll_bars db 'ted_init_scroll_bars',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 diff --git a/programs/other/t_edit/t_draw.inc b/programs/other/t_edit/t_draw.inc index 1236fced52..a1276281b7 100644 --- a/programs/other/t_edit/t_draw.inc +++ b/programs/other/t_edit/t_draw.inc @@ -261,8 +261,6 @@ proc draw_panel_syntax 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 pushad @@ -286,46 +284,10 @@ proc EvSize, edit:dword mov ax,word[ebx+sb_offs_size_y] and eax,0xffff sub ted_wnd_h,eax ;отнимаем высоту гориз. скроллинга - mov eax,ted_wnd_h ;eax = высота окна - высота гориз. скроллинга - mov word[ebx+sb_offs_start_y],ax ;передвигаем гориз. скроллинг mov eax,ted_wnd_t sub ted_wnd_h,eax ;отнимаем отступ сверху - mov eax,ted_wnd_w - mov ecx,ted_wnd_l - add eax,ecx - mov word[esi+sb_offs_start_x],ax ;передвигаем верт. скроллинг - mov eax,ted_wnd_h - mov word[esi+sb_offs_size_y],ax ;задаем высоту верт. скроллинга - - add ecx,ted_rec_l ;ecx=ted_wnd_l+ted_rec_l - mov word[ebx+sb_offs_start_x],cx ;сдвигаем гориз. скроллинг по размеру левого отступа для цифр - mov eax,ted_wnd_w - sub eax,ted_rec_l - mov word[ebx+sb_offs_size_x],ax ;задаем ширину гориз. скроллинга - - mov eax,ted_wnd_h ;calculate lines in page - sub eax,ted_rec_t - xor edx,edx - mov ecx,ted_rec_h - div ecx - cmp eax,MIN_W_SCRL_ARE - jg @f - mov eax,MIN_W_SCRL_ARE - @@: - mov dword[esi+sb_offs_cur_area],eax - - mov eax,ted_wnd_w ;calculate cols in page - sub eax,ted_rec_l - xor edx,edx - mov ecx,ted_rec_w - div ecx - cmp eax,MIN_H_SCRL_ARE - jg @f - mov eax,MIN_H_SCRL_ARE - @@: - dec eax ; ??? - mov dword[ebx+sb_offs_cur_area],eax + stdcall [ted_init_scroll_bars], tedit0,2 mov eax,ted_wnd_t mov edi,dword tree1 diff --git a/programs/other/t_edit/t_edit.asm b/programs/other/t_edit/t_edit.asm index 9271d5b963..e42f10c4ef 100644 --- a/programs/other/t_edit/t_edit.asm +++ b/programs/other/t_edit/t_edit.asm @@ -36,16 +36,6 @@ align 4 start: mcall 48,3,sc,sizeof.system_colors - 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 - mcall 68,11 or eax,eax jz button.exit @@ -343,7 +333,7 @@ key: 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
ЭлементРазмер (байт)
Количество цветов текста