From 04752bcd9c5ec72e99a06178c9b1e286964895f7 Mon Sep 17 00:00:00 2001 From: IgorA Date: Fri, 19 Feb 2016 16:00:48 +0000 Subject: [PATCH] 't_edit' use font size git-svn-id: svn://kolibrios.org@6256 a494cfbc-eb01-0410-851d-a64ba20cac60 --- .../libraries/box_lib/trunk/box_lib.asm | 11 +- .../libraries/box_lib/trunk/box_lib.mac | 1 + .../libraries/box_lib/trunk/t_edit.mac | 526 +++++++++--------- programs/other/t_edit/t_data.inc | 2 +- programs/other/t_edit/t_edit.asm | 22 +- programs/other/t_edit/t_edit.ini | 5 +- 6 files changed, 280 insertions(+), 287 deletions(-) diff --git a/programs/develop/libraries/box_lib/trunk/box_lib.asm b/programs/develop/libraries/box_lib/trunk/box_lib.asm index 91d9b8f82a..63f574c506 100644 --- a/programs/develop/libraries/box_lib/trunk/box_lib.asm +++ b/programs/develop/libraries/box_lib/trunk/box_lib.asm @@ -1,6 +1,6 @@ ;***************************************************************************** ; Box_Lib - library of graphical components -; Copyright (C) KolibriOS team 2008-2013. All rights reserved. +; Copyright (C) KolibriOS team 2008-2016. All rights reserved. ; ; Authors: ; Alexey Teplov aka @@ -18,6 +18,7 @@ public EXPORTS section '.flat' code readable align 16 include '../../../../macros.inc' include '../../../../proc32.inc' +include '../../../../KOSfuncs.inc' include 'bl_sys.mac' include 'box_lib.mac' ;macro which should make life easier :) ;include '../../../../debug.inc' @@ -337,12 +338,12 @@ dd sz_ted_but_redo, ted_but_redo dd sz_ted_but_reverse, ted_but_reverse dd sz_ted_but_find_next, ted_but_find_next dd sz_ted_text_colored, ted_text_colored -dd sz_ted_version, 0x00000004 +dd sz_ted_version, 0x00000005 dd sz_Frame_draw, frame.draw dd szVersion_frame, 0x00010001 -dd sz_progressbar_draw, progressbar_draw +dd sz_progressbar_draw, progressbar_draw dd sz_progressbar_progress, progressbar_progress dd 0,0 @@ -446,7 +447,7 @@ sz_ted_text_colored db 'ted_text_colored',0 sz_ted_version db 'version_text_edit',0 sz_Frame_draw db 'frame_draw',0 -szVersion_frame db 'version_frame',0 +szVersion_frame db 'version_frame',0 -sz_progressbar_draw db 'progressbar_draw', 0 +sz_progressbar_draw db 'progressbar_draw', 0 sz_progressbar_progress db 'progressbar_progress', 0 \ No newline at end of file diff --git a/programs/develop/libraries/box_lib/trunk/box_lib.mac b/programs/develop/libraries/box_lib/trunk/box_lib.mac index 6f5454229c..0c7f7d725e 100644 --- a/programs/develop/libraries/box_lib/trunk/box_lib.mac +++ b/programs/develop/libraries/box_lib/trunk/box_lib.mac @@ -426,6 +426,7 @@ ted_fun_draw_panel_syntax equ dword[edi+234] ;ука ted_fun_save_err equ dword[edi+238] ;указатель на функцию вызываемую если сохранение файла закончилось неудачно ted_increase_size equ dword[edi+242] ;число символов на которые будет увечиваться память при нехватке ted_ptr_free_symb equ dword[edi+246] ;указатель на свободную память, в которую можно добавлять символ (используется внутри элемента для ускорения вставки текста) +ted_font_size equ dword[edi+250] ;множитель для размера шрифта (при изменении нужно также изменять параметры ted_rec_w, ted_rec_h) ;------------------------------------------------------------------------------ ted_opt_ed_move_cursor equ 1 ;двигать курсор после добавления текста ted_opt_ed_change_time equ 2 ;добавлять изменения при редактировании текста diff --git a/programs/develop/libraries/box_lib/trunk/t_edit.mac b/programs/develop/libraries/box_lib/trunk/t_edit.mac index 0bd7a44c20..252f40a8d7 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 -; файл последний раз изменялся 21.01.2016 IgorA +; файл последний раз изменялся 19.02.2016 IgorA ; на код применена GPL2 лицензия ;input: @@ -169,7 +169,7 @@ proc ted_init_scroll_bars, edit:dword, opt:dword 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 eax,ted_wnd_h ;calculate lines in page mov edx,ted_wnd_t add edx,eax mov word[ebx+sb_offs_start_y],dx ;выставляем верхний отступ гориз. скроллинга @@ -1254,43 +1254,43 @@ endp ; ecx = position to inserted cell align 4 ted_char_add: + .loop_b: + cmp ecx,ted_tex_end + jge .end_f + cmp dword[ecx+10],0 + jne @f + cmp dword[ecx+14],0 + je .loop_e + @@: + add ecx,sizeof.symbol + jmp .loop_b +align 4 + .loop_e: - .loop_b: - cmp ecx,ted_tex_end - jge .end_f - cmp dword[ecx+10],0 - jne @f - cmp dword[ecx+14],0 - je .loop_e - @@: - add ecx,sizeof.symbol - jmp .loop_b - .loop_e: + push eax ebx + mov eax,ted_tim_ch + mov dword[ecx+10],eax + mov ax,si + mov byte[ecx],al - push eax ebx - mov eax,ted_tim_ch - mov dword[ecx+10],eax - mov ax,si - mov byte[ecx],al + call ted_get_text_arr_index ; *** eax=pos *** + mov [ecx+2],eax ;tex[i].perv=pos; + m2m dword[ecx+6],dword[edx+6] ;tex[i].next=tex[pos].next; - call ted_get_text_arr_index ; *** eax=pos *** - mov [ecx+2],eax ;tex[i].perv=pos; - m2m dword[ecx+6],dword[edx+6] ;tex[i].next=tex[pos].next; + push edx + mov edx,ecx + call ted_get_text_arr_index ; *** eax=i *** + pop edx - push edx - mov edx,ecx - call ted_get_text_arr_index ; *** eax=i *** - pop edx + mov [edx+6],eax ;tex[pos].next=i; // ссылки перенаправляем + mov ebx,[ecx+6] + ConvertIndexToPointer ebx + mov [ebx+2],eax ;tex[tex[i].next].perv=i; // ... + pop ebx eax - mov [edx+6],eax ;tex[pos].next=i; // ссылки перенаправляем - mov ebx,[ecx+6] - ConvertIndexToPointer ebx - mov [ebx+2],eax ;tex[tex[i].next].perv=i; // ... - pop ebx eax - - .end_f: - call ted_text_colored - ret + .end_f: + call ted_text_colored + ret ;description: ; функция для смены кодировок @@ -1397,31 +1397,29 @@ endp ; bl = 0 - no delete ; bl = 1 - delete align 4 -proc ted_text_del, edit:dword, del_opt:dword - push cx edx edi - mov edi,dword[edit] - mov ebx,dword[del_opt] +proc ted_text_del uses ecx edx edi, edit:dword, del_opt:dword + mov edi,dword[edit] + mov ebx,dword[del_opt] - xor cl,cl - test ebx,ted_opt_ed_move_cursor - jz @f - call ted_cur_move_left - cmp dl,0 - je .no_del - @@: - call ted_get_pos_by_cursor - cmp ted_gp_opt,1 - je .no_del - test ebx,ted_opt_ed_change_time - jz @f - inc ted_tim_ch - @@: - m2m dword [edx+14], ted_tim_ch - mov cl,1 - .no_del: - mov bl,cl - pop edi edx cx - ret + xor cl,cl + test ebx,ted_opt_ed_move_cursor + jz @f + call ted_cur_move_left + cmp dl,0 + je .no_del + @@: + call ted_get_pos_by_cursor + cmp ted_gp_opt,1 + je .no_del + test ebx,ted_opt_ed_change_time + jz @f + inc ted_tim_ch + @@: + m2m dword[edx+14], ted_tim_ch + mov cl,1 + .no_del: + mov bl,cl + ret endp ;input: @@ -1435,7 +1433,6 @@ proc ted_sel_text_del uses ebx ecx edx esi, del_opt:dword call ted_is_select cmp al,0 je .end_f - call ted_sel_normalize mov esi,ted_seln_x1 @@ -1461,6 +1458,7 @@ proc ted_sel_text_del uses ebx ecx edx esi, del_opt:dword and dword[del_opt],esi ;n_tim=false; call ted_iterat_next jmp @b +align 4 @@: test dword[del_opt],ted_opt_ed_change_time jz @f @@ -2985,79 +2983,74 @@ endp ; this function need to optimize output align 4 proc ted_draw_cursor_sumb - pushad +pushad + mov eax,SF_DRAW_RECT + mov ebx,ted_wnd_l + add ebx,ted_rec_l + mov edx,ted_cur_x + imul edx,ted_rec_w + add ebx,edx + shl ebx,16 + add ebx,ted_rec_w - mov eax,13 ;rect - mov ebx,ted_wnd_l - add ebx,ted_rec_l - mov edx,ted_cur_x - imul edx,ted_rec_w - add ebx,edx - shl ebx,16 - add ebx,ted_rec_w + mov ecx,ted_wnd_t ;calc rect -> y0,y1 + add ecx,ted_rec_t + mov edx,ted_cur_y + imul edx,ted_rec_h + add ecx,edx + shl ecx,16 + add ecx,ted_rec_h - mov ecx,ted_wnd_t ;calc rect -> y0,y1 - add ecx,ted_rec_t - mov edx,ted_cur_y - imul edx,ted_rec_h - add ecx,edx - shl ecx,16 - add ecx,ted_rec_h + mov edx,ted_color_wnd_work + push ecx + call ted_sel_normalize - mov edx,ted_color_wnd_work - push ecx - call ted_sel_normalize + mov esi,ted_scr_w + mov ecx,dword[esi+sb_offs_position] + sub ted_seln_y0,ecx + sub ted_seln_y1,ecx - mov esi,ted_scr_w - mov ecx,dword[esi+sb_offs_position] - sub ted_seln_y0,ecx - sub ted_seln_y1,ecx - - mov ecx,ted_cur_y - cmp ecx,ted_seln_y0 - jl .no_cur_sel - cmp ecx,ted_seln_y1 - jg .no_cur_sel - mov edx,ted_color_select ;меняем цвет фона на цвет выделения + mov ecx,ted_cur_y + cmp ecx,ted_seln_y0 + jl .no_cur_sel + cmp ecx,ted_seln_y1 + jg .no_cur_sel + mov edx,ted_color_select ;меняем цвет фона на цвет выделения - mov esi,ted_scr_h - cmp ecx,ted_seln_y0 - jne @f - mov ecx,ted_cur_x - add ecx,dword[esi+sb_offs_position] - cmp ecx,ted_seln_x0 - jge @f - mov edx,ted_color_wnd_work - @@: + mov esi,ted_scr_h + cmp ecx,ted_seln_y0 + jne @f + mov ecx,ted_cur_x + add ecx,dword[esi+sb_offs_position] + cmp ecx,ted_seln_x0 + jge @f + mov edx,ted_color_wnd_work + @@: + mov ecx,ted_cur_y + cmp ecx,ted_seln_y1 + jne .no_cur_sel + mov ecx,ted_cur_x + add ecx,dword[esi+sb_offs_position] + cmp ecx,ted_seln_x1 + jl .no_cur_sel + mov edx,ted_color_wnd_work + .no_cur_sel: + pop ecx + int 0x40 ;рисование прямоугольника - mov ecx,ted_cur_y - cmp ecx,ted_seln_y1 - jne .no_cur_sel - mov ecx,ted_cur_x - add ecx,dword[esi+sb_offs_position] - cmp ecx,ted_seln_x1 - jl .no_cur_sel - mov edx,ted_color_wnd_work - - .no_cur_sel: - pop ecx - int 0x40 ;рисование прямоугольника - - call ted_get_pos_by_cursor ;берем позицию символа - cmp ted_gp_opt,2 - jne @f - mov eax,4 - mov esi,1 - ror ecx,16 - mov bx,cx - add ebx,0x10001 - call ted_get_symb_color - call ted_convert_invis_symb - int 0x40 ;рисование символа - @@: - - popad - ret + call ted_get_pos_by_cursor ;берем позицию символа + cmp ted_gp_opt,2 + jne @f + mov esi,1 + ror ecx,16 + mov bx,cx + add ebx,0x10001 + call ted_get_symb_color + call ted_convert_invis_symb + mcall SF_DRAW_TEXT ;рисование символа + @@: +popad + ret endp ;input: @@ -3068,32 +3061,33 @@ endp ; if ted_mode_color=0 then ecx=ted_color_wnd_text align 4 ted_get_symb_color: - mov ecx,ted_color_wnd_text ;задаем цвет текста по умолчанию + mov ecx,ted_color_wnd_text ;задаем цвет текста по умолчанию - push eax edx - cmp ted_mode_color,0 - je .exit - jmp .on_first - @@: - call ted_iterat_perv - cmp edx,ted_tex_1 - jle .exit - .on_first: - xor eax,eax - mov al,byte[edx+1] - cmp al,0 ;если al=0 то цвет не меняется - je @b + push eax edx + cmp ted_mode_color,0 + je .exit + jmp .on_first + @@: + call ted_iterat_perv + cmp edx,ted_tex_1 + jle .exit + .on_first: + xor eax,eax + mov al,byte[edx+1] + or al,al ;если al=0 то цвет не меняется + jz @b - cmp eax,ted_colors_text_count - jge .exit + cmp eax,ted_colors_text_count + jge .exit - shl ax,2 ;умножаем индекс цвета на 4 байта - mov ecx,ted_text_colors ;прибавляем смещение 1-го цвета - add ecx,eax - mov ecx,dword[ecx] ;устанавливаем текущий цвет текста по смещению - .exit: - pop edx eax - ret + shl ax,2 ;умножаем индекс цвета на 4 байта + mov ecx,ted_text_colors ;прибавляем смещение 1-го цвета + add ecx,eax + mov ecx,dword[ecx] ;устанавливаем текущий цвет текста по смещению + .exit: + or ecx,ted_font_size + pop edx eax + ret ;input: ; edx = pointer to text @@ -3136,7 +3130,7 @@ proc ted_draw, edit:dword pushad mov edi,dword[edit] - mov eax,4 ;draw text + mov eax,SF_DRAW_TEXT mov ecx,ted_text_colors mov ecx,dword[ecx] @@ -3186,7 +3180,7 @@ proc ted_draw, edit:dword add eax,ted_wnd_t cmp bx,ax jg .no_draw_text - mov eax,4 + mov eax,SF_DRAW_TEXT ;optimized output /\ and ebx,0xffff ror ebx,16 @@ -3198,6 +3192,7 @@ proc ted_draw, edit:dword stdcall ted_clear_line_before_draw,edi,ebx,1,dword[line_num] call ted_opt_draw_line_left jmp @b +align 4 .no_13: int 0x40 @@ -3246,7 +3241,7 @@ proc ted_draw, edit:dword shl ecx,16 mov cx,word[eax+sb_offs_size_y] inc cx - mcall 13,,,ted_color_wnd_capt ;[sc.work] + mcall SF_DRAW_RECT,,,ted_color_wnd_capt ;[sc.work] ;right-bottom square mov ebx,ted_wnd_l @@ -3274,7 +3269,7 @@ align 4 proc ted_draw_main_cursor pushad - mov eax,13 ;draw cursor + mov eax,SF_DRAW_RECT ;draw cursor mov ecx,ted_wnd_t ;calc rect -> y0,y1 add ecx,ted_rec_t mov edx,ted_cur_y @@ -3309,7 +3304,6 @@ proc ted_draw_main_cursor call ted_get_pos_by_cursor cmp ted_gp_opt,2 jne @f - mov eax,4 ;draw text mov esi,1 ror ecx,16 mov bx,cx @@ -3322,11 +3316,11 @@ proc ted_draw_main_cursor sub bx,cx .no_up_tetx: mov ecx,ted_color_cur_text + or ecx,ted_font_size call ted_convert_invis_symb - int 0x40 + mcall SF_DRAW_TEXT @@: - mov eax,4 mov ebx,ted_wnd_l add ebx,ted_rec_l shl ebx,16 @@ -3335,7 +3329,7 @@ proc ted_draw_main_cursor mov ecx,ted_color_wnd_bord or ecx,0x80000000 lea edx,[txtRow] - int 0x40 ;вывод подписи 'Строка' + mcall SF_DRAW_TEXT ;вывод подписи 'Строка' add ebx,0x500000 lea edx,[txtCol] @@ -3427,17 +3421,15 @@ proc ted_draw_buffer mov eax,20 ;обрезка подписи до 20 символов .crop_buf: mov esi,eax - mov eax,4 - int 0x40 ;вывод содержимого буфера + mcall SF_DRAW_TEXT ;вывод содержимого буфера sub ebx,50 shl 16 lea edx,[txtBuf] mov esi,edx call tl_strlen mov esi,eax - mov eax,4 xor ecx,0x40000000 ;убираем цвет фона - int 0x40 ;вывод подписи для буфера + mcall SF_DRAW_TEXT ;вывод подписи для буфера @@: popad ret @@ -3459,8 +3451,8 @@ proc ted_draw_help_f1 mov ecx,ted_wnd_t add ecx,13 shl ecx,16 - add ecx,ted_rec_h - mcall 13,,,ted_color_wnd_capt + add ecx,9 ;9 - высота 0-го шрифта, ставить ted_rec_h пока еще рано + mcall SF_DRAW_RECT,,,ted_color_wnd_capt cmp ted_help_id,-1 je @f @@ -3483,7 +3475,7 @@ proc ted_draw_help_f1 mov ecx,dword[ecx] or ecx,0xc0000000 ;SetTextStyles mov esi,edi - mcall 4,,,,,ted_color_wnd_work + mcall SF_DRAW_TEXT,,,,,ted_color_wnd_work mov edi,esi mov esi,edx @@ -3500,7 +3492,7 @@ proc ted_draw_help_f1 imul eax,6 ;ширина символа в сист. шрифте shl eax,16 add ebx,eax - mcall 4 + mcall SF_DRAW_TEXT @@: popad ret @@ -3510,64 +3502,61 @@ endp ; edi = pointer to tedit struct align 4 proc ted_draw_line_numbers - pushad - - ;top panel with caption - mov ebx,ted_wnd_l +pushad + ;top panel with caption + mov ebx,ted_wnd_l ; add ebx,ted_rec_l - shl ebx,16 - add ebx,ted_wnd_w + shl ebx,16 + add ebx,ted_wnd_w ; sub ebx,ted_rec_l - mov edx,ted_color_wnd_work - mov ecx,ted_wnd_t - shl ecx,16 - add ecx,ted_rec_t - mov eax,13 - mov edx,ted_color_wnd_capt - int 0x40 + mov edx,ted_color_wnd_work + mov ecx,ted_wnd_t + shl ecx,16 + add ecx,ted_rec_t + mov edx,ted_color_wnd_capt + mcall SF_DRAW_RECT - ;line numbers - mov ebx,0x40000 ;format - mov ecx,ted_scr_w - mov ecx,dword[ecx+sb_offs_position] - inc ecx - mov edx,3 - add edx,ted_wnd_l - rol edx,16 - add edx,ted_wnd_t - add edx,ted_rec_t - @@: + ;line numbers + mov ebx,0x40000 ;format + mov ecx,ted_scr_w + mov ecx,dword[ecx+sb_offs_position] + inc ecx + mov edx,3 + add edx,ted_wnd_l + rol edx,16 + add edx,ted_wnd_t + add edx,ted_rec_t + @@: push ebx ecx edx - ;left panel with numbers - mov ebx,ted_wnd_l - shl ebx,16 - add ebx,ted_rec_l - mov ecx,ted_rec_h - rol ecx,16 - mov cx,dx - rol ecx,16 - mov eax,13 - mov edx,ted_color_wnd_capt - int 0x40 ;рисуем прямоугольник под номером строки + ;left panel with numbers + mov ebx,ted_wnd_l + shl ebx,16 + add ebx,ted_rec_l + mov ecx,ted_rec_h + rol ecx,16 + mov cx,dx + rol ecx,16 + mov edx,ted_color_wnd_capt + mcall SF_DRAW_RECT ;рисуем прямоугольник под номером строки pop edx ecx ebx - mov eax,47 - mov esi,ted_color_wnd_bord - int 0x40 ;рисуем номер строки - inc ecx - add edx,ted_rec_h - sub edx,ted_wnd_t - mov esi,edx - and esi,0xffff - cmp esi,ted_wnd_h - jge @f - add edx,ted_wnd_t - jmp @b - @@: - - popad - ret + mov eax,47 + mov esi,ted_color_wnd_bord + int 0x40 ;рисуем номер строки + inc ecx + add edx,ted_rec_h + sub edx,ted_wnd_t + mov esi,edx + and esi,0xffff + cmp esi,ted_wnd_h + jge @f + add edx,ted_wnd_t + jmp @b +align 4 + @@: +popad + ret endp ;output: @@ -3611,7 +3600,7 @@ proc ted_draw_cur_line, edit:dword cmp ted_gp_opt,2 jne .no_draw_text -; mov eax,4 ;draw text +; mov eax,SF_DRAW_TEXT call ted_get_symb_color mov esi,1 ;draw 1 symbol @@: @@ -3627,7 +3616,7 @@ proc ted_draw_cur_line, edit:dword call ted_get_symb_color .no_col_change: - mov eax,4 ;draw text + mov eax,SF_DRAW_TEXT cmp byte [edx],13 jne .no_13 cmp ted_mode_invis,1 @@ -3753,14 +3742,13 @@ proc ted_clear_line_before_draw, edit:dword, coords:dword, clear_o:dword, numb_l mov edx,ted_color_select ;draw selected line .no_select: - mov eax,13 ;rect - int 0x40 ;закраска полной строки цветом фона или цветом выделения + mcall SF_DRAW_RECT ;закраска полной строки цветом фона или цветом выделения call ted_is_select - cmp al,0 - je .no_clear + or al,al + jz .no_clear - mov al,13 ;rect + mov al,SF_DRAW_RECT xor cx,cx add ecx,ted_rec_h cmp ted_seln_y0,esi @@ -3823,10 +3811,11 @@ ted_get_first_visible_pos: call ted_iterat_next cmp edx,ted_tex_1 jle @f - cmp byte [edx],13 + cmp byte[edx],13 jne @b inc ecx jmp @b +align 4 @@: cmp ecx,dword[eax+sb_offs_position] @@ -3850,61 +3839,59 @@ ted_get_first_visible_pos: ;description: ; функция нужна для оптимизации вывода текста align 4 -proc ted_opt_draw_line_left - push ebx +proc ted_opt_draw_line_left uses ebx + mov ebx,ted_scr_h + mov ebx,dword[ebx+sb_offs_position] + or ebx,ebx + jz .ret_f + push eax + mov eax,edx - mov ebx,ted_scr_h - mov ebx,dword[ebx+sb_offs_position] - cmp ebx,0 - je .ret_f - push eax - mov eax,edx + cmp edx,ted_tex + jne @f + call ted_iterat_next + jmp .beg_cycle + @@: - cmp edx,ted_tex - jne @f - call ted_iterat_next - jmp .beg_cycle - @@: + or ebx,ebx + jz @f - cmp ebx,0 - je @f - - cmp byte[edx],13 - jne @f - call ted_iterat_next - .beg_cycle: - @@: - cmp edx,ted_tex_1 - jle @f - cmp byte[edx],13 - je @f - cmp ebx,0 - je @f + cmp byte[edx],13 + jne @f + call ted_iterat_next + .beg_cycle: + @@: + cmp edx,ted_tex_1 + jle @f + cmp byte[edx],13 + je @f + or ebx,ebx + jz @f ;-------------------------------------- xor eax,eax ;eax будет меняться mov al,byte[edx+1] -cmp al,0 -je .no_color +or al,al +jz .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] + xor ecx,ecx + mov cl,byte[edx+1] + shl cx,2 + add ecx,ted_text_colors + mov ecx,dword[ecx] .no_color: ;-------------------------------------- - mov eax,edx - call ted_iterat_next - dec ebx - jmp @b - @@: - mov edx,eax - pop eax - .ret_f: - call ted_get_symb_color - pop ebx - ret + mov eax,edx + call ted_iterat_next + dec ebx + jmp @b +align 4 + @@: + mov edx,eax + pop eax + .ret_f: + call ted_get_symb_color + ret endp ;input: @@ -4038,7 +4025,6 @@ ted_wnd_main_click: push eax shr eax,16 - and eax,0xffff sub eax,ted_wnd_l sub eax,ted_rec_l diff --git a/programs/other/t_edit/t_data.inc b/programs/other/t_edit/t_data.inc index 76c1a12ad0..7fb2d0df20 100644 --- a/programs/other/t_edit/t_data.inc +++ b/programs/other/t_edit/t_data.inc @@ -1 +1 @@ -fn_col_option dd def_col_file fn_syntax_dir db 'info/',0 def_col_file db 'default.syn',0 exit_code dd 0 ;переменная используемая для выхода из программы ;значения задаваемые по умолчанию, без ini файла ini_def_window_t equ 20 ini_def_window_l equ 200 ini_def_window_w equ 570 ini_def_window_h equ 470 ini_def_symbol_w equ 7 ini_def_symbol_h equ 10 ini_def_scroll_type equ 0 ;описание параматров для ini файла ini_name db 't_edit.ini',0 ini_sec_window db 'Window',0 key_window_t db 't',0 key_window_l db 'l',0 key_window_w db 'w',0 key_window_h db 'h',0 key_symbol_w db 'symbol_w',0 key_symbol_h db 'symbol_h',0 key_scroll_type db 'scroll_type',0 ini_sec_options db 'Options',0 key_synt_file: db 'syntax_' .numb: db '0',0 key_synt_ext: db 'ext_' .numb: db '0',0 ini_def_synt_f db 0 align 4 max_synt_auto_open equ 10 synt_auto_open: rb 64*max_synt_auto_open db 0 system_dir_0 db '/sys/lib/' lib_name_0 db 'box_lib.obj',0 system_dir_1 db '/sys/lib/' lib_name_1 db 'msgbox.obj',0 system_dir_2 db '/sys/lib/' lib_name_2 db 'proc_lib.obj',0 system_dir_3 db '/sys/lib/' lib_name_3 db 'libimg.obj',0 system_dir_4 db '/sys/lib/' lib_name_4 db 'libini.obj',0 system_dir_5 db '/sys/lib/' lib_name_5 db 'kmenu.obj',0 ;--------------------------------------------------------------------- align 4 import_box_lib: dd alib_init0 ;функция запускается макросом 1 раз при подключении бибилиотеки, потому в программе метка на нее не нужна edit_box_draw dd aEdit_box_draw edit_box_key dd aEdit_box_key edit_box_mouse dd aEdit_box_mouse ;edit_box_set_text dd aEdit_box_set_text ;version_ed dd aVersion_ed scrollbar_ver_draw dd aScrollbar_ver_draw scrollbar_ver_mouse dd aScrollbar_ver_mouse scrollbar_hor_draw dd aScrollbar_hor_draw scrollbar_hor_mouse dd aScrollbar_hor_mouse ;version_scrollbar dd aVersion_scrollbar tl_data_init dd sz_tl_data_init tl_data_clear dd sz_tl_data_clear tl_info_clear dd sz_tl_info_clear tl_key dd sz_tl_key tl_mouse dd sz_tl_mouse tl_draw dd sz_tl_draw tl_info_undo dd sz_tl_info_undo tl_info_redo dd sz_tl_info_redo tl_node_add dd sz_tl_node_add tl_node_set_data dd sz_tl_node_set_data tl_node_get_data dd sz_tl_node_get_data tl_node_delete dd sz_tl_node_delete tl_cur_beg dd sz_tl_cur_beg tl_cur_next dd sz_tl_cur_next tl_cur_perv dd sz_tl_cur_perv ;tl_node_close_open dd sz_tl_node_close_open tl_node_lev_inc dd sz_tl_node_lev_inc tl_node_lev_dec dd sz_tl_node_lev_dec ted_but_sumb_upper dd sz_ted_but_sumb_upper ted_but_sumb_lover dd sz_ted_but_sumb_lover ted_but_convert_by_table dd sz_ted_but_convert_by_table ted_can_save dd sz_ted_can_save ted_clear dd sz_ted_clear ted_delete dd sz_ted_delete ted_draw dd sz_ted_draw ted_init dd sz_ted_init ted_init_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 ted_mouse dd sz_ted_mouse ted_open_file dd sz_ted_open_file ted_save_file dd sz_ted_save_file ted_text_add dd sz_ted_text_add ted_but_select_word dd sz_ted_but_select_word ted_but_cut dd sz_ted_but_cut ted_but_copy dd sz_ted_but_copy ted_but_paste dd sz_ted_but_paste ted_but_undo dd sz_ted_but_undo ted_but_redo dd sz_ted_but_redo ted_but_reverse dd sz_ted_but_reverse ted_but_find_next dd sz_ted_but_find_next ted_text_colored dd sz_ted_text_colored version_text_edit dd sz_ted_version dd 0,0 alib_init0 db 'lib_init',0 aEdit_box_draw db 'edit_box',0 aEdit_box_key db 'edit_box_key',0 aEdit_box_mouse db 'edit_box_mouse',0 ;aEdit_box_set_text db 'edit_box_set_text',0 ;aVersion_ed db 'version_ed',0 aScrollbar_ver_draw db 'scrollbar_v_draw',0 aScrollbar_ver_mouse db 'scrollbar_v_mouse',0 aScrollbar_hor_draw db 'scrollbar_h_draw',0 aScrollbar_hor_mouse db 'scrollbar_h_mouse',0 ;aVersion_scrollbar db 'version_scrollbar',0 sz_tl_data_init db 'tl_data_init',0 sz_tl_data_clear db 'tl_data_clear',0 sz_tl_info_clear db 'tl_info_clear',0 sz_tl_key db 'tl_key',0 sz_tl_mouse db 'tl_mouse',0 sz_tl_draw db 'tl_draw',0 sz_tl_info_undo db 'tl_info_undo',0 sz_tl_info_redo db 'tl_info_redo',0 sz_tl_node_add db 'tl_node_add',0 sz_tl_node_set_data db 'tl_node_set_data',0 sz_tl_node_get_data db 'tl_node_get_data',0 sz_tl_node_delete db 'tl_node_delete',0 sz_tl_cur_beg db 'tl_cur_beg',0 sz_tl_cur_next db 'tl_cur_next',0 sz_tl_cur_perv db 'tl_cur_perv',0 ;sz_tl_node_close_open db 'tl_node_close_open',0 sz_tl_node_lev_inc db 'tl_node_lev_inc',0 sz_tl_node_lev_dec db 'tl_node_lev_dec',0 sz_ted_but_sumb_upper db 'ted_but_sumb_upper',0 sz_ted_but_sumb_lover db 'ted_but_sumb_lover',0 sz_ted_but_convert_by_table db 'ted_but_convert_by_table',0 sz_ted_can_save db 'ted_can_save',0 sz_ted_clear db 'ted_clear',0 sz_ted_delete db 'ted_delete',0 sz_ted_draw db 'ted_draw',0 sz_ted_init db 'ted_init',0 sz_ted_init_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 sz_ted_mouse db 'ted_mouse',0 sz_ted_open_file db 'ted_open_file',0 sz_ted_save_file db 'ted_save_file',0 sz_ted_text_add db 'ted_text_add',0 sz_ted_but_select_word db 'ted_but_select_word',0 sz_ted_but_cut db 'ted_but_cut',0 sz_ted_but_copy db 'ted_but_copy',0 sz_ted_but_paste db 'ted_but_paste',0 sz_ted_but_undo db 'ted_but_undo',0 sz_ted_but_redo db 'ted_but_redo',0 sz_ted_but_reverse db 'ted_but_reverse',0 sz_ted_but_find_next db 'ted_but_find_next',0 sz_ted_text_colored db 'ted_text_colored',0 sz_ted_version db 'version_text_edit',0 align 4 import_proclib: OpenDialog_Init dd aOpenDialog_Init OpenDialog_Start dd aOpenDialog_Start dd 0,0 aOpenDialog_Init db 'OpenDialog_init',0 aOpenDialog_Start db 'OpenDialog_start',0 align 4 import_msgbox_lib: mb_create dd amb_create mb_reinit dd amb_reinit mb_setfunctions dd amb_setfunctions dd 0,0 amb_create db 'mb_create',0 amb_reinit db 'mb_reinit',0 amb_setfunctions db 'mb_setfunctions',0 align 4 import_libimg: dd alib_init1 img_to_rgb2 dd aimg_to_rgb2 img_decode dd aimg_decode img_destroy dd aimg_destroy dd 0,0 alib_init1 db 'lib_init',0 aimg_to_rgb2 db 'img_to_rgb2',0 aimg_decode db 'img_decode',0 ;автоматически определяет формат графических данных aimg_destroy db 'img_destroy',0 align 4 import_libini: dd alib_init2 ini_get_str dd aini_get_str ini_get_int dd aini_get_int ini_get_color dd aini_get_color dd 0,0 alib_init2 db 'lib_init',0 aini_get_str db 'ini_get_str',0 aini_get_int db 'ini_get_int',0 aini_get_color db 'ini_get_color',0 align 4 import_libkmenu: kmenu_init dd akmenu_init kmainmenu_draw dd akmainmenu_draw kmainmenu_dispatch_cursorevent dd akmainmenu_dispatch_cursorevent ksubmenu_new dd aksubmenu_new ksubmenu_delete dd aksubmenu_delete ksubmenu_draw dd aksubmenu_draw ksubmenu_add dd aksubmenu_add kmenuitem_new dd akmenuitem_new kmenuitem_delete dd akmenuitem_delete kmenuitem_draw dd akmenuitem_draw dd 0,0 akmenu_init db 'kmenu_init',0 akmainmenu_draw db 'kmainmenu_draw',0 akmainmenu_dispatch_cursorevent db 'kmainmenu_dispatch_cursorevent',0 aksubmenu_new db 'ksubmenu_new',0 aksubmenu_delete db 'ksubmenu_delete',0 aksubmenu_draw db 'ksubmenu_draw',0 aksubmenu_add db 'ksubmenu_add',0 akmenuitem_new db 'kmenuitem_new',0 akmenuitem_delete db 'kmenuitem_delete',0 akmenuitem_draw db 'kmenuitem_draw',0 ;--------------------------------------------------------------------- align 4 wScr scrollbar 16,50, 300,50, 15, 100,30,0, 0,0,0, 1 align 4 hScr scrollbar 150,0, 16,50, 15, 100,30,0, 0,0,0, 1 ;дочерний скроллинг для элемента ListBox align 4 ws_dir_lbox scrollbar 16,0, 30,70, 15, 100,30,0, 0,0,0, 1 ;--------------------------------------------------------------------- align 4 OpenDialog_data: .type dd 0 .procinfo dd procinfo ;+4 .com_area_name dd communication_area_name ;+8 .com_area dd 0 ;+12 .opendir_path dd plugin_path ;+16 .dir_default_path dd default_dir ;+20 .start_path dd file_name ;+24 путь к диалогу открытия файлов .draw_window dd draw_window ;+28 .status dd 0 ;+32 .openfile_path dd openfile_path ;+36 путь к открываемому файлу .filename_area dd filename_area ;+40 .filter_area dd Filter .x: .x_size dw 420 ;+48 ; Window X size .x_start dw 10 ;+50 ; Window X position .y: .y_size dw 320 ;+52 ; Window y size .y_start dw 10 ;+54 ; Window Y position default_dir db '/rd/1',0 ;директория по умолчанию communication_area_name: db 'FFFFFFFF_open_dialog',0 open_dialog_name: db 'opendial',0 communication_area_default_path: db '/rd/1/File managers/',0 Filter: dd Filter.end - Filter.1 .1: db 'ASM',0 db 'CPP',0 db 'INC',0 db 'MAC',0 db 'INI',0 db 'TXT',0 db 'H',0 db 'C',0 db 'HTM',0 db 'HTML',0 db 'PY',0 db 'SH',0 db 'BAT',0 db 'LUA',0 db 'INF',0 db 'LOG',0 db 'DBG',0 db 'DAT',0 .end: db 0 TED_PANEL_NULL equ 0 ;нет открытой панели TED_PANEL_FIND equ 1 ;панель поиска TED_PANEL_SYNTAX equ 2 ;панель выбора файлов подсветки TED_PANEL_WIDTH equ 150 ;ширина панели count_of_dir_list_files equ 15 ;максимальное число файлов синтаксиса показываемых в окне элемента tree1 ;------------------------------------------------------------------------------ struct TexSelect x0 dd ? y0 dd ? x1 dd ? y1 dd ? ends ;------------------------------------------------------------------------------ align 4 tedit0: ;структура текстового редактора .wnd BOX 0,50,440,150 ;+ 0 .rec BOX 30,23,ini_def_symbol_w,ini_def_symbol_h ;+16 .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 координата x курсора .cur_y dd 0 ;+82 координата y курсора .max_chars dd maxChars ;+86 максимальное число символов в одном документе .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_size dd maxSyntaxFileSize ;+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 db 0 ;+170 ошибка сохранения файла .panel_id db 0 ;+171 номер открытой панели .key_new db 0 ;+172 символ, который будет добавлятся с клавиатуры .symbol_new_line db 20 ;+173 символ завершения строки .scr_w dd wScr ;+174 вертикальный скроллинг .scr_h dd hScr ;+178 горизонтальный скроллинг .arr_key_pos dd 0 ;+182 указатель на массив позиций ключевых слов .buffer dd buf ;+186 указатель на буфер копирования/вставки .buffer_find dd buf_find ;+190 указатель на буфер для поиска .cur_ins db 1 ;+194 режим работы курсора (обычный или замена) .mode_color db 1 ;+195 режим выделения слов цветом (0-выкл. 1-вкл.) .mode_invis db 0 ;+196 режим показа непечатаемых символов .gp_opt db 0 ;+197 опции возвращаемые функцией ted_get_pos_by_cursor .fun_on_key_ctrl_o dd ted_but_open_file ;+198 указатель на функцию вызываемую при нажатии Ctrl+O (открытие файла) .fun_on_key_ctrl_f dd ted_but_find ;+202 ... Ctrl+F (вызова/скрытия панели поиска) .fun_on_key_ctrl_n dd ted_but_new_file ;+206 ... Ctrl+N (создание нового документа) .fun_on_key_ctrl_s dd ted_but_save_file ;+210 ... Ctrl+S .buffer_size dd BUF_SIZE ;+214 размер буфера копирования/вставки .fun_find_err dd ted_on_find_err ;+218 указатель на функцию вызываемую если поиск закончился неудачно .fun_init_synt_err dd 0 ;+222 .fun_draw_panel_buttons dd draw_but_toolbar ;+226 указатель на функцию рисования панели с кнопками .fun_draw_panel_find dd draw_panel_find ;+230 указатель на функцию рисования панели поиска .fun_draw_panel_syntax dd draw_panel_syntax ;+234 указатель на функцию рисования панели синтаксиса .fun_save_err dd ted_save_err_msg ;+238 указатель на функцию вызываемую если сохранение файла закончилось неудачно .increase_size dd 200 ;+242 число символов на которые будет увечиваться память при нехватке .ptr_free_symb dd ? ;+246 используется внутри элемента для ускорения вставки текста ;------------------------------------------------------------------------------ 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,\ 16,16, 0x8080ff,0x0000ff,0xffffff, 0,70,TED_PANEL_WIDTH-17,120, 0,0,0, el_focus,\ ws_dir_lbox,0 ;dir_list memory tree_file_struct: dd 1 dd 0,0,count_of_dir_list_files dd dir_mem db 0 dd file_name ;sys_path if lang eq ru msgbox_1: dw 0 db 'Внимание',0 ;+2 = +MB_TEXT_OFFSET db 'Файл большой, потому открыт не весь.',13 db ' 1. При его сохранении будут потеряны "не открывшиеся" символы.',13 db ' 2. В документ нельзя добавлять текст, т. к. память занята.',0 db 'Я понял(а)',0 ;button1 db 0 msgbox_2: db 3,0 db 'Внимание',0 db 'Сохранить изменения в файле?',0 db 'Сохранить',0 db 'Не сохранять',0 db 'Отмена',0 db 0 msgbox_3: db 1,0 db 'Внимание',0 db 'Ошибка при открытии файла с цветовыми настройками!',13,\ 'Потому выделение слов цветом не возможно.',13,\ ' (код ошибки =' .err: db '?' db ')',0 db 'Закрыть',0 db 0 msgbox_4: db 1,0 db 'Внимание',0 db 'Ошибка при открытии файла!',13,\ 'Возможно имя файла введено не правильно.',13,\ ' (код ошибки =' .err: db '?' db ')',0 db 'Закрыть',0 db 0 msgbox_6: db 1,0 db 'Внимание',0 db 'Ошибка при сохранении файла!',13,\ 'Возможно имя файла введено не правильно.',13,\ ' (код ошибки =' .err: db '?' db ')',0 db 'Закрыть',0 db 0 msgbox_7: db 1,0 db 'Текст не найден',0 db 'Достигнут конец документа.',13,\ 'Попробуйте перейти в начало документа',13,\ 'или изменить запрос и повторить поиск.',0 db 'Закрыть',0 db 0 msgbox_9: db 3,0 db 'Внимание',0 db 'Не открылся ',39,'диалог открытия файла',39,'.',13 .fdp: rb 100 db 0 db 'Закрыть',0 db 0 txtFindCapt db 'Поиск',0 txtFindNext db 'Найти далее',0 txtFormatCapt db 'Формат',0 txtFormatApply db 'Применить',0 else msgbox_1: dw 0 db 'Warning',0 ;+2 = +MB_TEXT_OFFSET db 'File is large, because not all open.',13 db ' 1. If you save it will lose "not opened" characters.',13 db ' 2. The document can not add text, because the memory is busy.',0 db 'Ok',0 ;button1 db 0 msgbox_2: db 3,0 db 'Warning',0 db 'Save changes to the file?',0 db 'Save',0 db 'Discard',0 db 'Cancel',0 db 0 msgbox_3: db 1,0 db 'Warning',0 db 'Error opening the file with the color settings!',13,\ 'Because color selection of words is not possible.',13,\ ' (error code =' .err: db '?' db ')',0 db 'Close',0 db 0 msgbox_4: db 1,0 db 'Warning',0 db 'Error opening file!',13,\ 'Maybe the file name is not entered correctly.',13,\ ' (error code =' .err: db '?' db ')',0 db 'Close',0 db 0 msgbox_6: db 1,0 db 'Warning',0 db 'Error saving file!',13,\ 'Maybe the file name is not entered correctly.',13,\ ' (error code =' .err: db '?' db ')',0 db 'Close',0 db 0 msgbox_7: db 1,0 db 'Text not found.',0 db 'Reached end of the document.',13,\ 'Try to go to the beginning of the document',13,\ 'or change the query and search again.',0 db 'Close',0 db 0 msgbox_9: db 3,0 db 'Warning',0 db 'Error run ',39,'open file dialog',39,'.',13 .fdp: rb 100 db 0 db 'Close',0 db 0 txtFindCapt db 'Search',0 txtFindNext db 'Find next',0 txtFormatCapt db 'Format',0 txtFormatApply db 'Apply',0 end if ;функции для кнопок в сообщениях msgbox_2N_funct: dd On_SaveAndNewFile dd On_NewFile dd 0 msgbox_2O_funct: dd On_SaveAndOpenFile dd ted_but_open_file.no_msg dd 0 msgbox_2E_funct: dd On_SaveAndExit dd On_Exit dd 0 KM_SHIFT equ 0x00010000 KM_CTRL equ 0x00020000 KM_ALT equ 0x00040000 KM_NUMLOCK equ 0x00080000 ; KEY CODES KEY_F1 equ 0x0000003B KEY_F2 equ 0x0000003C KEY_F3 equ 0x0000003D \ No newline at end of file +fn_col_option dd def_col_file fn_syntax_dir db 'info/',0 def_col_file db 'default.syn',0 exit_code dd 0 ;переменная используемая для выхода из программы ;значения задаваемые по умолчанию, без ini файла ini_def_window_t equ 20 ini_def_window_l equ 200 ini_def_window_w equ 570 ini_def_window_h equ 470 ini_def_symbol_w equ 7 ini_def_symbol_h equ 10 ini_def_font_s equ 0 ini_def_scroll_type equ 0 ;описание параматров для ini файла ini_name db 't_edit.ini',0 ini_sec_window db 'Window',0 key_window_t db 't',0 key_window_l db 'l',0 key_window_w db 'w',0 key_window_h db 'h',0 key_symbol_w db 'symbol_w',0 key_symbol_h db 'symbol_h',0 key_font_s db 'font_s',0 key_scroll_type db 'scroll_type',0 ini_sec_options db 'Options',0 key_synt_file: db 'syntax_' .numb: db '0',0 key_synt_ext: db 'ext_' .numb: db '0',0 ini_def_synt_f db 0 align 4 max_synt_auto_open equ 10 synt_auto_open: rb 64*max_synt_auto_open db 0 system_dir_0 db '/sys/lib/' lib_name_0 db 'box_lib.obj',0 system_dir_1 db '/sys/lib/' lib_name_1 db 'msgbox.obj',0 system_dir_2 db '/sys/lib/' lib_name_2 db 'proc_lib.obj',0 system_dir_3 db '/sys/lib/' lib_name_3 db 'libimg.obj',0 system_dir_4 db '/sys/lib/' lib_name_4 db 'libini.obj',0 system_dir_5 db '/sys/lib/' lib_name_5 db 'kmenu.obj',0 ;--------------------------------------------------------------------- align 4 import_box_lib: dd alib_init0 ;функция запускается макросом 1 раз при подключении бибилиотеки, потому в программе метка на нее не нужна edit_box_draw dd aEdit_box_draw edit_box_key dd aEdit_box_key edit_box_mouse dd aEdit_box_mouse ;edit_box_set_text dd aEdit_box_set_text ;version_ed dd aVersion_ed scrollbar_ver_draw dd aScrollbar_ver_draw scrollbar_ver_mouse dd aScrollbar_ver_mouse scrollbar_hor_draw dd aScrollbar_hor_draw scrollbar_hor_mouse dd aScrollbar_hor_mouse ;version_scrollbar dd aVersion_scrollbar tl_data_init dd sz_tl_data_init tl_data_clear dd sz_tl_data_clear tl_info_clear dd sz_tl_info_clear tl_key dd sz_tl_key tl_mouse dd sz_tl_mouse tl_draw dd sz_tl_draw tl_info_undo dd sz_tl_info_undo tl_info_redo dd sz_tl_info_redo tl_node_add dd sz_tl_node_add tl_node_set_data dd sz_tl_node_set_data tl_node_get_data dd sz_tl_node_get_data tl_node_delete dd sz_tl_node_delete tl_cur_beg dd sz_tl_cur_beg tl_cur_next dd sz_tl_cur_next tl_cur_perv dd sz_tl_cur_perv ;tl_node_close_open dd sz_tl_node_close_open tl_node_lev_inc dd sz_tl_node_lev_inc tl_node_lev_dec dd sz_tl_node_lev_dec ted_but_sumb_upper dd sz_ted_but_sumb_upper ted_but_sumb_lover dd sz_ted_but_sumb_lover ted_but_convert_by_table dd sz_ted_but_convert_by_table ted_can_save dd sz_ted_can_save ted_clear dd sz_ted_clear ted_delete dd sz_ted_delete ted_draw dd sz_ted_draw ted_init dd sz_ted_init ted_init_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 ted_mouse dd sz_ted_mouse ted_open_file dd sz_ted_open_file ted_save_file dd sz_ted_save_file ted_text_add dd sz_ted_text_add ted_but_select_word dd sz_ted_but_select_word ted_but_cut dd sz_ted_but_cut ted_but_copy dd sz_ted_but_copy ted_but_paste dd sz_ted_but_paste ted_but_undo dd sz_ted_but_undo ted_but_redo dd sz_ted_but_redo ted_but_reverse dd sz_ted_but_reverse ted_but_find_next dd sz_ted_but_find_next ted_text_colored dd sz_ted_text_colored version_text_edit dd sz_ted_version dd 0,0 alib_init0 db 'lib_init',0 aEdit_box_draw db 'edit_box',0 aEdit_box_key db 'edit_box_key',0 aEdit_box_mouse db 'edit_box_mouse',0 ;aEdit_box_set_text db 'edit_box_set_text',0 ;aVersion_ed db 'version_ed',0 aScrollbar_ver_draw db 'scrollbar_v_draw',0 aScrollbar_ver_mouse db 'scrollbar_v_mouse',0 aScrollbar_hor_draw db 'scrollbar_h_draw',0 aScrollbar_hor_mouse db 'scrollbar_h_mouse',0 ;aVersion_scrollbar db 'version_scrollbar',0 sz_tl_data_init db 'tl_data_init',0 sz_tl_data_clear db 'tl_data_clear',0 sz_tl_info_clear db 'tl_info_clear',0 sz_tl_key db 'tl_key',0 sz_tl_mouse db 'tl_mouse',0 sz_tl_draw db 'tl_draw',0 sz_tl_info_undo db 'tl_info_undo',0 sz_tl_info_redo db 'tl_info_redo',0 sz_tl_node_add db 'tl_node_add',0 sz_tl_node_set_data db 'tl_node_set_data',0 sz_tl_node_get_data db 'tl_node_get_data',0 sz_tl_node_delete db 'tl_node_delete',0 sz_tl_cur_beg db 'tl_cur_beg',0 sz_tl_cur_next db 'tl_cur_next',0 sz_tl_cur_perv db 'tl_cur_perv',0 ;sz_tl_node_close_open db 'tl_node_close_open',0 sz_tl_node_lev_inc db 'tl_node_lev_inc',0 sz_tl_node_lev_dec db 'tl_node_lev_dec',0 sz_ted_but_sumb_upper db 'ted_but_sumb_upper',0 sz_ted_but_sumb_lover db 'ted_but_sumb_lover',0 sz_ted_but_convert_by_table db 'ted_but_convert_by_table',0 sz_ted_can_save db 'ted_can_save',0 sz_ted_clear db 'ted_clear',0 sz_ted_delete db 'ted_delete',0 sz_ted_draw db 'ted_draw',0 sz_ted_init db 'ted_init',0 sz_ted_init_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 sz_ted_mouse db 'ted_mouse',0 sz_ted_open_file db 'ted_open_file',0 sz_ted_save_file db 'ted_save_file',0 sz_ted_text_add db 'ted_text_add',0 sz_ted_but_select_word db 'ted_but_select_word',0 sz_ted_but_cut db 'ted_but_cut',0 sz_ted_but_copy db 'ted_but_copy',0 sz_ted_but_paste db 'ted_but_paste',0 sz_ted_but_undo db 'ted_but_undo',0 sz_ted_but_redo db 'ted_but_redo',0 sz_ted_but_reverse db 'ted_but_reverse',0 sz_ted_but_find_next db 'ted_but_find_next',0 sz_ted_text_colored db 'ted_text_colored',0 sz_ted_version db 'version_text_edit',0 align 4 import_proclib: OpenDialog_Init dd aOpenDialog_Init OpenDialog_Start dd aOpenDialog_Start dd 0,0 aOpenDialog_Init db 'OpenDialog_init',0 aOpenDialog_Start db 'OpenDialog_start',0 align 4 import_msgbox_lib: mb_create dd amb_create mb_reinit dd amb_reinit mb_setfunctions dd amb_setfunctions dd 0,0 amb_create db 'mb_create',0 amb_reinit db 'mb_reinit',0 amb_setfunctions db 'mb_setfunctions',0 align 4 import_libimg: dd alib_init1 img_to_rgb2 dd aimg_to_rgb2 img_decode dd aimg_decode img_destroy dd aimg_destroy dd 0,0 alib_init1 db 'lib_init',0 aimg_to_rgb2 db 'img_to_rgb2',0 aimg_decode db 'img_decode',0 ;автоматически определяет формат графических данных aimg_destroy db 'img_destroy',0 align 4 import_libini: dd alib_init2 ini_get_str dd aini_get_str ini_get_int dd aini_get_int ini_get_color dd aini_get_color dd 0,0 alib_init2 db 'lib_init',0 aini_get_str db 'ini_get_str',0 aini_get_int db 'ini_get_int',0 aini_get_color db 'ini_get_color',0 align 4 import_libkmenu: kmenu_init dd akmenu_init kmainmenu_draw dd akmainmenu_draw kmainmenu_dispatch_cursorevent dd akmainmenu_dispatch_cursorevent ksubmenu_new dd aksubmenu_new ksubmenu_delete dd aksubmenu_delete ksubmenu_draw dd aksubmenu_draw ksubmenu_add dd aksubmenu_add kmenuitem_new dd akmenuitem_new kmenuitem_delete dd akmenuitem_delete kmenuitem_draw dd akmenuitem_draw dd 0,0 akmenu_init db 'kmenu_init',0 akmainmenu_draw db 'kmainmenu_draw',0 akmainmenu_dispatch_cursorevent db 'kmainmenu_dispatch_cursorevent',0 aksubmenu_new db 'ksubmenu_new',0 aksubmenu_delete db 'ksubmenu_delete',0 aksubmenu_draw db 'ksubmenu_draw',0 aksubmenu_add db 'ksubmenu_add',0 akmenuitem_new db 'kmenuitem_new',0 akmenuitem_delete db 'kmenuitem_delete',0 akmenuitem_draw db 'kmenuitem_draw',0 ;--------------------------------------------------------------------- align 4 wScr scrollbar 16,50, 300,50, 15, 100,30,0, 0,0,0, 1 align 4 hScr scrollbar 150,0, 16,50, 15, 100,30,0, 0,0,0, 1 ;дочерний скроллинг для элемента ListBox align 4 ws_dir_lbox scrollbar 16,0, 30,70, 15, 100,30,0, 0,0,0, 1 ;--------------------------------------------------------------------- align 4 OpenDialog_data: .type dd 0 .procinfo dd procinfo ;+4 .com_area_name dd communication_area_name ;+8 .com_area dd 0 ;+12 .opendir_path dd plugin_path ;+16 .dir_default_path dd default_dir ;+20 .start_path dd file_name ;+24 путь к диалогу открытия файлов .draw_window dd draw_window ;+28 .status dd 0 ;+32 .openfile_path dd openfile_path ;+36 путь к открываемому файлу .filename_area dd filename_area ;+40 .filter_area dd Filter .x: .x_size dw 420 ;+48 ; Window X size .x_start dw 10 ;+50 ; Window X position .y: .y_size dw 320 ;+52 ; Window y size .y_start dw 10 ;+54 ; Window Y position default_dir db '/rd/1',0 ;директория по умолчанию communication_area_name: db 'FFFFFFFF_open_dialog',0 open_dialog_name: db 'opendial',0 communication_area_default_path: db '/rd/1/File managers/',0 Filter: dd Filter.end - Filter.1 .1: db 'ASM',0 db 'CPP',0 db 'INC',0 db 'MAC',0 db 'INI',0 db 'TXT',0 db 'H',0 db 'C',0 db 'HTM',0 db 'HTML',0 db 'PY',0 db 'SH',0 db 'BAT',0 db 'LUA',0 db 'INF',0 db 'LOG',0 db 'DBG',0 db 'DAT',0 .end: db 0 TED_PANEL_NULL equ 0 ;нет открытой панели TED_PANEL_FIND equ 1 ;панель поиска TED_PANEL_SYNTAX equ 2 ;панель выбора файлов подсветки TED_PANEL_WIDTH equ 150 ;ширина панели count_of_dir_list_files equ 15 ;максимальное число файлов синтаксиса показываемых в окне элемента tree1 ;------------------------------------------------------------------------------ struct TexSelect x0 dd ? y0 dd ? x1 dd ? y1 dd ? ends ;------------------------------------------------------------------------------ align 4 tedit0: ;структура текстового редактора .wnd BOX 0,50,440,150 ;+ 0 .rec BOX 30,25,ini_def_symbol_w,ini_def_symbol_h ;+16 .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 координата x курсора .cur_y dd 0 ;+82 координата y курсора .max_chars dd maxChars ;+86 максимальное число символов в одном документе .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_size dd maxSyntaxFileSize ;+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 db 0 ;+170 ошибка сохранения файла .panel_id db 0 ;+171 номер открытой панели .key_new db 0 ;+172 символ, который будет добавлятся с клавиатуры .symbol_new_line db 20 ;+173 символ завершения строки .scr_w dd wScr ;+174 вертикальный скроллинг .scr_h dd hScr ;+178 горизонтальный скроллинг .arr_key_pos dd 0 ;+182 указатель на массив позиций ключевых слов .buffer dd buf ;+186 указатель на буфер копирования/вставки .buffer_find dd buf_find ;+190 указатель на буфер для поиска .cur_ins db 1 ;+194 режим работы курсора (обычный или замена) .mode_color db 1 ;+195 режим выделения слов цветом (0-выкл. 1-вкл.) .mode_invis db 0 ;+196 режим показа непечатаемых символов .gp_opt db 0 ;+197 опции возвращаемые функцией ted_get_pos_by_cursor .fun_on_key_ctrl_o dd ted_but_open_file ;+198 указатель на функцию вызываемую при нажатии Ctrl+O (открытие файла) .fun_on_key_ctrl_f dd ted_but_find ;+202 ... Ctrl+F (вызова/скрытия панели поиска) .fun_on_key_ctrl_n dd ted_but_new_file ;+206 ... Ctrl+N (создание нового документа) .fun_on_key_ctrl_s dd ted_but_save_file ;+210 ... Ctrl+S .buffer_size dd BUF_SIZE ;+214 размер буфера копирования/вставки .fun_find_err dd ted_on_find_err ;+218 указатель на функцию вызываемую если поиск закончился неудачно .fun_init_synt_err dd 0 ;+222 .fun_draw_panel_buttons dd draw_but_toolbar ;+226 указатель на функцию рисования панели с кнопками .fun_draw_panel_find dd draw_panel_find ;+230 указатель на функцию рисования панели поиска .fun_draw_panel_syntax dd draw_panel_syntax ;+234 указатель на функцию рисования панели синтаксиса .fun_save_err dd ted_save_err_msg ;+238 указатель на функцию вызываемую если сохранение файла закончилось неудачно .increase_size dd 200 ;+242 число символов на которые будет увечиваться память при нехватке .ptr_free_symb dd ? ;+246 используется внутри элемента для ускорения вставки текста .font_size dd 0 ;+250 множитель для размера шрифта ;------------------------------------------------------------------------------ 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,\ 16,16, 0x8080ff,0x0000ff,0xffffff, 0,70,TED_PANEL_WIDTH-17,120, 0,0,0, el_focus,\ ws_dir_lbox,0 ;dir_list memory tree_file_struct: dd 1 dd 0,0,count_of_dir_list_files dd dir_mem db 0 dd file_name ;sys_path if lang eq ru msgbox_1: dw 0 db 'Внимание',0 ;+2 = +MB_TEXT_OFFSET db 'Файл большой, потому открыт не весь.',13 db ' 1. При его сохранении будут потеряны "не открывшиеся" символы.',13 db ' 2. В документ нельзя добавлять текст, т. к. память занята.',0 db 'Я понял(а)',0 ;button1 db 0 msgbox_2: db 3,0 db 'Внимание',0 db 'Сохранить изменения в файле?',0 db 'Сохранить',0 db 'Не сохранять',0 db 'Отмена',0 db 0 msgbox_3: db 1,0 db 'Внимание',0 db 'Ошибка при открытии файла с цветовыми настройками!',13,\ 'Потому выделение слов цветом не возможно.',13,\ ' (код ошибки =' .err: db '?' db ')',0 db 'Закрыть',0 db 0 msgbox_4: db 1,0 db 'Внимание',0 db 'Ошибка при открытии файла!',13,\ 'Возможно имя файла введено не правильно.',13,\ ' (код ошибки =' .err: db '?' db ')',0 db 'Закрыть',0 db 0 msgbox_6: db 1,0 db 'Внимание',0 db 'Ошибка при сохранении файла!',13,\ 'Возможно имя файла введено не правильно.',13,\ ' (код ошибки =' .err: db '?' db ')',0 db 'Закрыть',0 db 0 msgbox_7: db 1,0 db 'Текст не найден',0 db 'Достигнут конец документа.',13,\ 'Попробуйте перейти в начало документа',13,\ 'или изменить запрос и повторить поиск.',0 db 'Закрыть',0 db 0 msgbox_9: db 3,0 db 'Внимание',0 db 'Не открылся ',39,'диалог открытия файла',39,'.',13 .fdp: rb 100 db 0 db 'Закрыть',0 db 0 txtFindCapt db 'Поиск',0 txtFindNext db 'Найти далее',0 txtFormatCapt db 'Формат',0 txtFormatApply db 'Применить',0 else msgbox_1: dw 0 db 'Warning',0 ;+2 = +MB_TEXT_OFFSET db 'File is large, because not all open.',13 db ' 1. If you save it will lose "not opened" characters.',13 db ' 2. The document can not add text, because the memory is busy.',0 db 'Ok',0 ;button1 db 0 msgbox_2: db 3,0 db 'Warning',0 db 'Save changes to the file?',0 db 'Save',0 db 'Discard',0 db 'Cancel',0 db 0 msgbox_3: db 1,0 db 'Warning',0 db 'Error opening the file with the color settings!',13,\ 'Because color selection of words is not possible.',13,\ ' (error code =' .err: db '?' db ')',0 db 'Close',0 db 0 msgbox_4: db 1,0 db 'Warning',0 db 'Error opening file!',13,\ 'Maybe the file name is not entered correctly.',13,\ ' (error code =' .err: db '?' db ')',0 db 'Close',0 db 0 msgbox_6: db 1,0 db 'Warning',0 db 'Error saving file!',13,\ 'Maybe the file name is not entered correctly.',13,\ ' (error code =' .err: db '?' db ')',0 db 'Close',0 db 0 msgbox_7: db 1,0 db 'Text not found.',0 db 'Reached end of the document.',13,\ 'Try to go to the beginning of the document',13,\ 'or change the query and search again.',0 db 'Close',0 db 0 msgbox_9: db 3,0 db 'Warning',0 db 'Error run ',39,'open file dialog',39,'.',13 .fdp: rb 100 db 0 db 'Close',0 db 0 txtFindCapt db 'Search',0 txtFindNext db 'Find next',0 txtFormatCapt db 'Format',0 txtFormatApply db 'Apply',0 end if ;функции для кнопок в сообщениях msgbox_2N_funct: dd On_SaveAndNewFile dd On_NewFile dd 0 msgbox_2O_funct: dd On_SaveAndOpenFile dd ted_but_open_file.no_msg dd 0 msgbox_2E_funct: dd On_SaveAndExit dd On_Exit dd 0 KM_SHIFT equ 0x00010000 KM_CTRL equ 0x00020000 KM_ALT equ 0x00040000 KM_NUMLOCK equ 0x00080000 ; KEY CODES KEY_F1 equ 0x0000003B KEY_F2 equ 0x0000003C KEY_F3 equ 0x0000003D \ No newline at end of file diff --git a/programs/other/t_edit/t_edit.asm b/programs/other/t_edit/t_edit.asm index f2d9c9c05f..3806319da4 100644 --- a/programs/other/t_edit/t_edit.asm +++ b/programs/other/t_edit/t_edit.asm @@ -3,12 +3,10 @@ use32 org 0x0 db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт - dd 1, start, i_end, mem, stacktop - dd file_name ; command line - dd sys_path + dd 1, start, i_end, mem, stacktop, file_name, sys_path MAX_COLOR_WORD_LEN equ 40 -maxChars equ 100002 ;(...+2) +maxChars equ 100002 ;(колличество символов в новом документе + 2) BUF_SIZE equ 4096 ;buffer for copy|paste maxSyntaxFileSize equ 410000 TOOLBAR_ICONS_SIZE equ 1200*20 @@ -31,7 +29,9 @@ include 'wnd_k_words.inc' @use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load +align 4 icon_tl_sys dd 0 ;указатель на память для хранения системных иконок +run_file_70 FileInfoBlock align 4 start: @@ -201,8 +201,12 @@ mov ebp,lib0 mov dword[tedit0.rec.width],eax stdcall dword[ini_get_int],file_name,ini_sec_window,key_symbol_h,ini_def_symbol_h mov dword[tedit0.rec.height],eax - lea eax,[eax+eax*2] - mov dword[tedit0.rec.top],eax + ;lea eax,[eax+eax*2] + ;mov dword[tedit0.rec.top],eax + ;font size + stdcall dword[ini_get_int],file_name,ini_sec_window,key_font_s,ini_def_font_s + shl eax,24 + mov dword[tedit0.font_size],eax ;файловые расширения xor edx,edx mov ebx,synt_auto_open @@ -578,17 +582,17 @@ i_end: last_open_synt_file rb 32 ;имя последнего подключенного файла синтаксиса buf rb BUF_SIZE ;буфер для копирования и вставки buf_find rb 302 ;буфер для поиска текста - run_file_70 FileInfoBlock sc system_colors - rb sizeof.system_colors IncludeUGlobals align 16 procinfo process_information rb 1024 thread: - rb 1024 + rb 4096 +align 16 thread_coords: rb 4096 +align 16 stacktop: sys_path: ;путь откуда запустился исполняемый файл rb 4096 diff --git a/programs/other/t_edit/t_edit.ini b/programs/other/t_edit/t_edit.ini index e4021e640c..9860159017 100644 --- a/programs/other/t_edit/t_edit.ini +++ b/programs/other/t_edit/t_edit.ini @@ -3,8 +3,9 @@ t=20 l=200 w=570 h=490 -symbol_w=7 -symbol_h=11 +symbol_w=14 +symbol_h=20 +font_s=1 scroll_type=0 [Options] syntax_0=asm.syn