From 3810c9cbc816fce15626c32c193b8288af317f92 Mon Sep 17 00:00:00 2001 From: IgorA Date: Tue, 15 Jan 2019 12:24:51 +0000 Subject: [PATCH] t_edit: fix 2 icons, fix exit function t_edit_synt: update program, clean code git-svn-id: svn://kolibrios.org@7575 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/other/t_edit/t_button.inc | 21 +- programs/other/t_edit/t_edit.asm | 15 +- programs/other/t_edit/wnd_k_words.inc | 36 +++- programs/other/t_edit_synt/build.bat | 2 - programs/other/t_edit_synt/te_data.inc | 47 +---- programs/other/t_edit_synt/te_syntax.asm | 255 ++++++++++------------- programs/other/t_edit_synt/te_work.inc | 237 +++++++++++---------- 7 files changed, 283 insertions(+), 330 deletions(-) diff --git a/programs/other/t_edit/t_button.inc b/programs/other/t_edit/t_button.inc index cf39feae3c..c6de5b4475 100644 --- a/programs/other/t_edit/t_button.inc +++ b/programs/other/t_edit/t_button.inc @@ -163,20 +163,25 @@ button: @@: cmp ah,1 - je .exit + jne @f + call ted_Exit + jmp still + @@: cmp ah,199 - je .exit - + jne still + call ted_Exit jmp still -.exit: + +align 4 +ted_Exit: cmp dword[wnd_k_words_run],0 je @f push ebx ecx mcall SF_SYSTEM, SSF_TERMINATE_THREAD_ID,[wnd_k_words_run] pop ecx ebx - test eax,eax - jnz still + mov dword[wnd_k_words_run],0 + ;test eax,eax @@: cmp dword[exit_code],1 je @f @@ -185,17 +190,17 @@ button: jne @f stdcall [mb_create],msgbox_2,thread ;message: save buf in file? stdcall [mb_setfunctions],msgbox_2E_funct - jmp still + ret @@: stdcall mem.Free,[bmp_icon] cmp dword[unpac_mem],0 je @f stdcall mem.Free,[unpac_mem] @@: - stdcall [ted_delete], tedit0 stdcall [tl_data_clear], tree1 mcall SF_TERMINATE_PROCESS ;выход из программы + ;ret ;input: ; al = код ошибки diff --git a/programs/other/t_edit/t_edit.asm b/programs/other/t_edit/t_edit.asm index 95cad3b6d7..ad5d0c1aff 100644 --- a/programs/other/t_edit/t_edit.asm +++ b/programs/other/t_edit/t_edit.asm @@ -39,7 +39,9 @@ start: mcall SF_SYS_MISC,SSF_HEAP_INIT or eax,eax - jz button.exit + jnz @f + call ted_Exit + @@: mcall SF_KEYBOARD,SSF_SET_INPUT_MODE,1 ;scan code mcall SF_SET_EVENTS_MASK,0xC0000027 @@ -200,7 +202,10 @@ align 16 still: mcall SF_WAIT_EVENT cmp dword[exit_code],1 - je button.exit + jne @f + call ted_Exit + jmp still + @@: cmp al,1 ;изменилось положение окна jz red_win @@ -210,7 +215,7 @@ still: jz button cmp al,6 ;мышь jne @f - jmp mouse + call mouse @@: jmp still @@ -228,7 +233,7 @@ mouse: bt eax,24 ;двойной щелчёк левой кнопкой jnc @f stdcall [ted_but_select_word], tedit0 - jmp still + ret @@: stdcall [ted_mouse], tedit0 .no_edit: @@ -241,7 +246,7 @@ mouse: jne @f stdcall [tl_mouse], tree1 @@: - jmp still + ret ;--------------------------------------------------------------------- ;output: diff --git a/programs/other/t_edit/wnd_k_words.inc b/programs/other/t_edit/wnd_k_words.inc index c2edb2a5a6..9041ac6065 100644 --- a/programs/other/t_edit/wnd_k_words.inc +++ b/programs/other/t_edit/wnd_k_words.inc @@ -27,7 +27,7 @@ pushad mov edi,tedit0 mov edx,ted_key_words_count add dword[tree3.info_max_count],edx ;ставим число узлов, равное колличеству ключевых слов в файле подсветки (+2 на начало и конец списка) - stdcall dword[tl_data_init], tree3 + stdcall [tl_data_init], tree3 mov eax,dword[icon_tl_sys] mov dword[tree3.data_img],eax mov eax,dword[tree1.data_img_sys] @@ -56,13 +56,27 @@ pushad mcall ,,,4 mov ebx,[bmp_icon] - add ebx,7*IMAGE_TOOLBAR_ICON_SIZE + add ebx,(ID_BUT_FIND-ID_BUT_0)*IMAGE_TOOLBAR_ICON_SIZE mcall SF_PUT_IMAGE,,(20 shl 16)+20,(5 shl 16)+5 ;найти sub ebx,2*IMAGE_TOOLBAR_ICON_SIZE mov edx,(30 shl 16)+5 ;копировать int 0x40 + mcall SF_THREAD_INFO,procinfo,-1 + mov eax,[procinfo.box.height] + cmp eax,90 + jge @f + mov eax,90 ;min size + @@: + sub eax,58 + cmp [tree3.box_height],eax + je @f + mov [tree3.box_height],eax + mov word[w_scr_t3.y_size],ax + ;need call tb_scrol_resize + @@: + mov dword[w_scr_t3.all_redraw],1 stdcall [scrollbar_ver_draw], w_scr_t3 stdcall [tl_draw], tree3 @@ -93,7 +107,7 @@ prop_still: .exit: mov dword[tree3.data_img],0 ;чистим указатели на иконки что-бы их не удалил деструктор mov dword[tree3.data_img_sys],0 ;т. к. они еще используються в других элементах - stdcall dword[tl_data_clear], tree3 + stdcall [tl_data_clear], tree3 mov dword[wnd_k_words_run],0 ;обнуляем ID окна mcall SF_TERMINATE_PROCESS @@ -128,7 +142,8 @@ prop_button: mov edi,tedit0 cmp ted_syntax_file,0 je @f - stdcall dword[tl_info_clear], tree3 + stdcall [tl_info_clear], tree3 + and dword[tree3.style], not tl_cursor_pos_limited mov ebx,ted_key_words_data mov ecx,ted_key_words_count @@ -138,21 +153,22 @@ prop_button: test al,al jnz .end_add ;ключевое слово - stdcall dword[tl_node_add], tree3, (1 shl 16), ebx - stdcall dword[tl_cur_next], tree3 + stdcall [tl_node_add], tree3, (1 shl 16), ebx + stdcall [tl_cur_next], tree3 mov edx,[ebx+MAX_COLOR_WORD_LEN] or edx,edx jz .end_add ;справка по ключевому слову add edx,ted_help_text_f1 - stdcall dword[tl_node_add], tree3, 1, edx - stdcall dword[tl_cur_next], tree3 + stdcall [tl_node_add], tree3, 1, edx + stdcall [tl_cur_next], tree3 .end_add: add ebx,MAX_COLOR_WORD_LEN+8 ;sizeof.TexColViv loop .cycle_0 - stdcall dword[tl_cur_beg], tree3 - stdcall dword[tl_draw], tree3 + stdcall [tl_cur_beg], tree3 + or dword[tree3.style], tl_cursor_pos_limited ;ограничиваем движение курсора в пределах списка + stdcall [tl_draw], tree3 jmp .no_select_0 @@: cmp ah,4 diff --git a/programs/other/t_edit_synt/build.bat b/programs/other/t_edit_synt/build.bat index dd980033e6..4b3d245609 100644 --- a/programs/other/t_edit_synt/build.bat +++ b/programs/other/t_edit_synt/build.bat @@ -1,6 +1,4 @@ if not exist bin mkdir bin -if not exist bin\tl_sys_16.png @copy ..\..\media\log_el\trunk\tl_sys_16.png bin\tl_sys_16.png -if not exist bin\tl_nod_16.png @copy ..\t_edit\tl_nod_16.png bin\tl_nod_16.png @fasm.exe -m 16384 te_syntax.asm bin\te_syntax.kex @kpack bin\te_syntax.kex diff --git a/programs/other/t_edit_synt/te_data.inc b/programs/other/t_edit_synt/te_data.inc index cdb4a0ee7d..c3354c6fdf 100644 --- a/programs/other/t_edit_synt/te_data.inc +++ b/programs/other/t_edit_synt/te_data.inc @@ -255,52 +255,13 @@ tedit0: ; .fun_save_err dd 0 ;+238 указатель на функцию вызываемую если сохранение файла закончилось неудачно .increase_size dd 1000 ;+242 число символов на которые будет увечиваться память при нехватке .ptr_free_symb dd ? ;+246 указатель на свободную память, в которую можно добавлять символ (используется внутри элемента для ускорения вставки текста) + .font_size dd 0 ;+250 множитель для размера шрифта ;------------------------------------------------------------------------------ align 4 -scrol_w1: -.x: -.size_x dw 16 ;+0 -.start_x dw 85 ;+2 -.y: -.size_y dw 100 ; +4 -.start_y dw 15 ; +6 -.btn_high dd 15 ; +8 -.type dd 1 ;+12 -.max_area dd 100 ;+16 -rb 4+4 -.bckg_col dd 0xeeeeee ;+28 -.frnt_col dd 0xbbddff ;+32 -.line_col dd 0x808080 ;+36 -.redraw dd 0 ;+40 -.delta dw 0 ;+44 -.delta2 dw 0 ;+46 -.run_x: -rb 2*4+4*6 -.all_redraw dd 0 ;+80 -.ar_offset dd 1 ;+84 -;--------------------------------------------------------------------- +scrol_w1 scrollbar 16,85, 100,15, 15, 100,0,0, 0xeeeeee,0xbbddff,0x808080, 1 + align 4 -scrol_h1: -.x: -.size_x dw 85 ;+0 -.start_x dw 30 ;+2 -.y: -.size_y dw 16 ;+4 -.start_y dw 100 ;+6 -.btn_high dd 15 ;+8 -.type dd 1 ;+12 -.max_area dd 100 ;+16 -rb 4+4 -.bckg_col dd 0xeeeeee ;+28 -.frnt_col dd 0xbbddff ;+32 -.line_col dd 0x808080 ;+36 -.redraw dd 0 ;+40 -.delta dw 0 ;+44 -.delta2 dw 0 ;+46 -.run_x: -rb 2*4+4*6 -.all_redraw dd 0 ;+80 -.ar_offset dd 1 ;+84 +scrol_h1 scrollbar 85,30, 16,100, 15, 100,0,0, 0xeeeeee,0xbbddff,0x808080, 1 ;--------------------------------------------------------------------- PathShow_data_1: .type dd 0 ;+0 diff --git a/programs/other/t_edit_synt/te_syntax.asm b/programs/other/t_edit_synt/te_syntax.asm index 0a3aa116d2..5dafa5f51b 100644 --- a/programs/other/t_edit_synt/te_syntax.asm +++ b/programs/other/t_edit_synt/te_syntax.asm @@ -1,135 +1,77 @@ use32 - org 0x0 + org 0 db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт - dd 0x01 - dd start - dd i_end ; размер приложения - dd mem - dd stacktop - dd file_name - dd sys_path + dd 1, start, i_end, mem, stacktop, file_name, sys_path MAX_COLOR_WORD_LEN equ 40 BUF_SIZE equ 4096 ;buffer for copy|paste -maxSyntaxFileSize equ 310000 CAPT_PATH_WIDTH equ 50 ;ширина подписи перед текстовым полем include '../../macros.inc' include '../../proc32.inc' -include '../../develop/libraries/box_lib/load_lib.mac' +include '../../KOSfuncs.inc' +include '../../load_img.inc' include '../../develop/libraries/box_lib/trunk/box_lib.mac' -include '../../dll.inc' +include '../../system/skincfg/trunk/kglobals.inc' +include '../../system/skincfg/trunk/unpacker.inc' include 'te_data.inc' include 'te_work.inc' ;text work functions @use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load -;Макрос для загрузки изображений с использованием библиотеки libimg.obj -;для использования макроса нужны переменные: -; - run_file_70 FileInfoBlock -; - image_data dd 0 -macro load_image_file path,buf,size -{ - ;path - может быть переменной или строковым параметром - if path eqtype '' ;проверяем задан ли строкой параметр path - jmp @f - local .path_str - .path_str db path ;формируем локальную переменную - db 0 - @@: - ;32 - стандартный адрес по которому должен быть буфер с системным путем - copy_path .path_str,[32],file_name,0 - else - copy_path path,[32],file_name,0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой - end if - - stdcall mem.Alloc, dword size ;выделяем память для изображения - mov [buf],eax - - mov [run_file_70.Function], 0 - mov [run_file_70.Position], 0 - mov [run_file_70.Flags], 0 - mov [run_file_70.Count], dword size - mov [run_file_70.Buffer], eax - mov byte[run_file_70+20], 0 - mov [run_file_70.FileName], file_name - mcall 70,run_file_70 ;загружаем файл изображения - cmp ebx,0xffffffff - je @f - ;определяем вид изображения и переводим его во временный буфер image_data - stdcall dword[img_decode], dword[buf],ebx,0 - mov dword[image_data],eax - ;преобразуем изображение к формату rgb - stdcall dword[img_to_rgb2], dword[image_data],dword[buf] - ;удаляем временный буфер image_data - stdcall dword[img_destroy], dword[image_data] - @@: -} - -image_data dd 0 ;указатель на временную память. для нужен преобразования изображения icon_tl_sys dd 0 ;указатель на память для хранения системных иконок align 4 start: - mcall 48,3,sc,sizeof.system_colors + mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors - mcall 68,11 + mcall SF_SYS_MISC,SSF_HEAP_INIT or eax,eax jz button.exit - mcall 66,1,1 ;scan code - mcall 40,0x27 + mcall SF_KEYBOARD,SSF_SET_INPUT_MODE,1 ;scan code + mcall SF_SET_EVENTS_MASK,0xC0000027 -;------------------------------------------------- - mov ecx,maxSyntaxFileSize - stdcall mem.Alloc,ecx - mov [options_file],eax - mov [options_file_end],eax - add [options_file_end],ecx + load_libraries l_libs_start,load_lib_end - -load_libraries l_libs_start,load_lib_end - -;проверка на сколько удачно загузилась библиотека - cmp dword [lib0+ll_struc_size-4],0 + ;проверка на сколько удачно загузилась библиотека + cmp dword[lib0+ll_struc_size-4],0 jz @f mcall -1 ;exit not correct @@: ;--------------------------------------------------------------------- - stdcall dword[tl_data_init],dword tree1 + stdcall [tl_data_init], tree1 ; читаем файл с курсорами и линиями - load_image_file 'tl_sys_16.png', icon_tl_sys,54+3*256*13 - mov eax,dword[icon_tl_sys] - mov dword[tree1.data_img_sys],eax + include_image_file '..\..\media\log_el\trunk\tl_sys_16.png', icon_tl_sys + mov eax,[icon_tl_sys] + mov [tree1.data_img_sys],eax ;--------------------------------------------------------------------- ; читаем bmp файл с иконками узлов - load_image_file 'tl_nod_16.png', icon_tl_sys,54+3*256*2 - mov eax,dword[icon_tl_sys] - mov dword[tree1.data_img],eax + include_image_file '..\t_edit\tl_nod_16.png', icon_tl_sys + mov eax,[icon_tl_sys] + mov [tree1.data_img],eax ;------------------------------------------------------------------------------ - copy_path fn_syntax_dir,sys_path,file_name,0 ;берем путь к папке с файлами синтаксиса - mov eax,70 - mov ebx,tree_file_struct - int 0x40 + copy_path fn_syntax_dir,sys_path,file_name,0 ;берем путь к папке с файлами синтаксиса + mcall SF_FILE,tree_file_struct -cmp ebx,-1 -je .end_dir_init - - mov eax,dir_mem - add eax,32+4+1+3+4*6+8 -mov ecx,ebx -@@: - cmp byte[eax],'.' ;фильтруем файлы с именами '.' и '..' - je .filter - stdcall dword[tl_node_add],tree1,0x10000,eax ;1*2^16 - где 1 номер иконки с книгой - stdcall dword[tl_cur_next],tree1 - .filter: - add eax,304 - loop @b - stdcall dword[tl_cur_beg],tree1 ;ставим курсор на начало списка -.end_dir_init: + cmp ebx,-1 + je .end_dir_init + mov eax,dir_mem + add eax,32+4+1+3+4*6+8 + mov ecx,ebx + @@: + cmp byte[eax],'.' ;фильтруем файлы с именами '.' и '..' + je .filter + stdcall [tl_node_add],tree1,0x10000,eax ;1*2^16 - где 1 номер иконки с книгой + stdcall [tl_cur_next],tree1 + .filter: + add eax,304 + loop @b + stdcall [tl_cur_beg],tree1 ;ставим курсор на начало списка + or dword[tree1.style], tl_cursor_pos_limited ;ограничиваем движение курсора в пределах списка + .end_dir_init: ;--- load color option file --- stdcall [ted_init], tedit0 @@ -141,7 +83,7 @@ red_win: align 4 still: - mcall 10 + mcall SF_WAIT_EVENT cmp al,1 ;изм. положение окна jz red_win @@ -158,47 +100,37 @@ still: align 4 draw_window: pushad - mcall 12,1 + mcall SF_REDRAW,SSF_BEGIN_DRAW mov edx,[sc.work] or edx,0x33000000 mov edi,hed - mcall 0,<10,555>,<10,333> + mcall SF_CREATE_WINDOW,<10,555>,<10,333> - mcall 9,procinfo,-1 + mcall SF_THREAD_INFO,procinfo,-1 + mov edi,tedit0 ;значение edi нужно для EvSize и ted_wnd_t + call EvSize - mov eax,8 ;кнопка - mov ebx,5*65536+90 - mov ecx,195*65536+20 - mov edx,200 mov esi,[sc.work_button];0xd0 - mcall + mcall SF_DEFINE_BUTTON,5*65536+90,195*65536+20,200 - ;mov eax,8 mov ebx,100*65536+85 mov ecx,195*65536+20 mov edx,201 mov esi,0xd00000 mcall - mov eax,4 ;рисование текста - mov ebx,10*65536+200 mov ecx,[sc.work_button_text] or ecx,0x80000000 - mov edx,txt122 - mcall + mcall SF_DRAW_TEXT,10*65536+200,,txt_load_f - mov ebx,105*65536+200 mov ecx,0xffff00 or ecx,0x80000000 - mov edx,txt148 - mcall + mcall ,105*65536+200,,txt_save_f - mov ebx,195*65536+10 mov ecx,[sc.work_text] or ecx,0x80000000 - mov edx,txt_inp_file - int 0x40 + mcall ,195*65536+10,,txt_inp_file add ebx,20 mov edx,txt_out_file @@ -215,7 +147,37 @@ draw_window: stdcall [scrollbar_ver_draw],dword ws_dir_lbox stdcall [ted_draw], tedit0 - mcall 12,2 + mcall SF_REDRAW,SSF_END_DRAW + popad + ret + +MIN_M_WND_H equ 100 ;минимальная высота главного окна +;input: +; edi = pointer to tedit struct +align 4 +EvSize: + pushad + mov ebx,ted_scr_h + mov esi,ted_scr_w + + m2m ted_wnd_w,[procinfo.client_box.width] ;ставим ширину окна редактора равной ширине всего окна + mov eax,ted_wnd_l + sub ted_wnd_w,eax ;отнимаем отступ слева + movzx eax,word[esi+sb_offs_size_x] + sub ted_wnd_w,eax ;отнимаем ширину верт. скроллинга + + m2m ted_wnd_h,[procinfo.client_box.height] ;ставим высоту окна редактора равной высоте всего окна + cmp ted_wnd_h,MIN_M_WND_H + jg @f + mov ted_wnd_h,MIN_M_WND_H + @@: + + movzx eax,word[ebx+sb_offs_size_y] + sub ted_wnd_h,eax ;отнимаем высоту гориз. скроллинга + mov eax,ted_wnd_t + sub ted_wnd_h,eax ;отнимаем отступ сверху + + stdcall [ted_init_scroll_bars], tedit0,2 popad ret @@ -242,10 +204,10 @@ endp align 4 key: - mcall 66,3 ;66.3 получить состояние управляющих клавиш + mcall SF_KEYBOARD,SSF_GET_CONTROL_KEYS ;66.3 получить состояние управляющих клавиш xor esi,esi mov ecx,1 - test al,0x03 ;[Shift] + test al,3 ;[Shift] jz @f mov cl,2 or esi,KM_SHIFT @@ -264,8 +226,8 @@ key: or esi,KM_NUMLOCK @@: - mcall 26,2,,conv_tabl ;26.2 получить раскладку клавиатуры - mcall 2 + mcall SF_SYSTEM_GET,SSF_KEYBOARD_LAYOUT,,conv_tabl ;26.2 получить раскладку клавиатуры + mcall SF_GET_KEY stdcall [tl_key],tree1 test word [edit1.flags],10b;ed_focus ; если не в фокусе, выходим @@ -283,7 +245,7 @@ key: cmp ah,69 ;[Pause Break] je still - stdcall KeyConvertToASCII, dword conv_tabl + stdcall KeyConvertToASCII, conv_tabl stdcall [edit_box_key],edit1 jmp still @@: @@ -293,33 +255,26 @@ key: align 4 button: -; cmp [menu_active],1 ;если нажали меню, то сначала реакция на меню -; jne @f ;mouse.menu_bar_1 -; mov [menu_active],0 -; jmp still -; @@: + mcall SF_GET_BUTTON - mcall 17 ;получить код нажатой кнопки + cmp ah,200 + jne @f + call but_OpenSyntax + @@: + cmp ah,201 + jne @f + call but_SaveSyntax + @@: - cmp ah,200 - jne @f - call but_OpenSyntax - @@: - cmp ah,201 - jne @f - call but_SaveSyntax - @@: - - cmp ah,1 - jne still + cmp ah,1 + jne still .exit: - ;push eax + stdcall mem.Free,[options_file] + stdcall mem.Free,[unpac_mem] - stdcall mem.Free,[options_file] - - stdcall [tl_data_clear], tree1 - stdcall [ted_delete], tedit0 - mcall -1 ;выход из программы + stdcall [tl_data_clear], tree1 + stdcall [ted_delete], tedit0 + mcall SF_TERMINATE_PROCESS ;выход из программы align 4 but_OpenSyntax: @@ -373,16 +328,14 @@ get_wnd_in_focus: ;@@: ret -hed db 'TextEditor syntax file converter 10.11.15',0 ;подпись окна +hed db 'TextEditor syntax file converter 15.01.19',0 ;подпись окна conv_tabl rb 128 ; таблица для конвертирования scan-кода в ascii-код -txt122 db 'Загр. файл',0 -txt148 db 'Сохр. файл',0 +txt_load_f db 'Загр. файл',0 +txt_save_f db 'Сохр. файл',0 txt_inp_file db 'Исх. файл:',0 txt_out_file db 'Вых. файл:',0 -txt_no_kpack db 'Открываемый файл сжат Kpack-ом.',13,10,'Для работы с файлом распакуйте его используя системную программу Kpack.',13,10,'Работа со сжатыми файлами пока не поддерживается.',0 - head_f_i: head_f_l db 'System error',0 err_message_found_lib_0 db 'Sorry I cannot found library ',39,'box_lib.obj',39,0 @@ -396,9 +349,11 @@ l_libs_start: lib1 l_libs lib_name_1, sys_path, file_name, system_dir_1, err_message_found_lib_1, head_f_l, import_libimg,err_message_import_1, head_f_i load_lib_end: +IncludeIGlobals align 16 i_end: +IncludeUGlobals procinfo process_information rb 1024 thread: diff --git a/programs/other/t_edit_synt/te_work.inc b/programs/other/t_edit_synt/te_work.inc index 8244fb04d7..f73b55a5e1 100644 --- a/programs/other/t_edit_synt/te_work.inc +++ b/programs/other/t_edit_synt/te_work.inc @@ -1,12 +1,3 @@ -struct FileInfoBlock - Function dd ? - Position dd ? - Flags dd ? - Count dd ? - Buffer dd ? - db ? - FileName dd ? -ends struct TexColViv Text rb MAX_COLOR_WORD_LEN ; ёыютю фы  яюфётхЄъш @@ -28,7 +19,8 @@ color_cur_text dd ? color_wnd_text dd ? options_file dd 0 -options_file_end dd 0 +open_file_size dd 0 +unpac_mem dd 0 tex_colors dd 0 tex_help_f1 dd 0 @@ -46,67 +38,91 @@ align 4 InitColText: pushad - mov ebx,dword[fn_col_option] + mov ebx,[fn_col_option] copy_path ebx,fn_syntax_dir,file_name_rez,0 copy_path file_name_rez,sys_path,file_name,0 - mov eax,70 - mov [run_file_70.Function], 0 + ;[fn_col_option] = '*.syn' + ;fn_syntax_dir = 'info/' + ;file_name_rez = 'info/*.syn' + + mov [run_file_70.Function], SSF_GET_INFO mov [run_file_70.Position], 0 mov [run_file_70.Flags], 0 - mov ebx,[options_file_end] - sub ebx,[options_file] - mov [run_file_70.Count], ebx - m2m [run_file_70.Buffer], [options_file] + mov dword[run_file_70.Count], 0 + mov dword[run_file_70.Buffer], open_b mov byte[run_file_70+20], 0 - mov [run_file_70.FileName], file_name - mov ebx,run_file_70 - int 0x40 + mov dword[run_file_70.FileName], file_name + mcall SF_FILE,run_file_70 + mov ecx,dword[open_b+32] ;+32 qword: ЁрчьхЁ Їрщыр т срщЄрї + stdcall mem.ReAlloc,[options_file],ecx + mov [options_file],eax + mov [open_file_size],ecx + + mov [run_file_70.Function], SSF_READ_FILE + mov [run_file_70.Position], 0 + mov [run_file_70.Flags], 0 + mov [run_file_70.Count], ecx + m2m dword[run_file_70.Buffer], dword[options_file] + mov byte[run_file_70+20], 0 + mov dword[run_file_70.FileName], file_name + mcall SF_FILE,run_file_70 ;чруЁєцрхь Їрщы шчюсЁрцхэш▀ + test eax,eax + jnz .no_colors + cmp ebx,0xffffffff + je .no_colors + + mcall SF_SET_CAPTION,1,file_name ;init: count_colors_text, ColWords, ... mov dword[count_colors_text],1 mov dword[ColWords],0 mov dword[tex_help_f1],0 - cmp eax,6 - je @f - cmp eax,0 - je @f - cmp ax,10 - jl .zifra_0_9 - mov al,'?' - sub ax,48 - .zifra_0_9: - add ax,48 - jmp .no_colors - @@: + mov edi,[options_file] + cmp dword[edi],'KPCK' + jne .end_unpack + ;notify_window_run ... + mov ecx,[edi+4] + cmp [open_file_size],ecx + jge @f + ;хёыш фы▀ Ёрёяръютрэюую Їрщыр эх їтрЄрхЄ т√фхыхээющ ярь▀Єш + stdcall mem.ReAlloc,edi,ecx + mov [options_file],eax + mov [open_file_size],ecx + @@: + ;т√фхыхэшх ярь▀Єш фы▀ Ёрёяръютъш Їрщыр + stdcall mem.ReAlloc,[unpac_mem],ecx + mov [unpac_mem],eax + stdcall unpack,[options_file],eax + mov edi,[options_file] + mov esi,[unpac_mem] + mov ecx,[edi+4] + cld + rep movsb + .end_unpack: mov esi,[options_file] - cmp dword[esi],'KPCK' - jne @f - notify_window_run txt_no_kpack ; ёючфрхь юъэю @notify - jmp .no_colors - @@: mov edi,count_colors_text - mov ecx,9*4 - rep movsb + mov ecx,9 + rep movsd mov eax,[options_file] add eax,32 - mov dword[tex_colors],eax + mov [tex_colors],eax - mov eax,dword[count_colors_text] ;init: Col (offset to key words) + mov eax,[count_colors_text] ;init: Col (offset to key words) add eax,8 shl eax,2 add eax,[options_file] - mov dword[Col],eax + mov [Col],eax ;init: tex_help_f1 - mov ecx,dword[ColWords] + mov ecx,[ColWords] imul ecx,sizeof.TexColViv - add ecx,dword[Col] - mov dword[tex_help_f1],ecx + add ecx,[Col] + mov [tex_help_f1],ecx ;ЇюЁьшЁютрэшх ЄхъёЄр т юъэх ЄхъёЄютюую ЁхфръЄюЁр stdcall [ted_clear], tedit0,1 @@ -136,28 +152,27 @@ InitColText: loop @b stdcall print_capt,capt_lbl_wo - mov ecx,dword[ColWords] + mov ecx,[ColWords] mov eax,[Col] xor ebx,ebx - @@: + @@: ;Ўшъы яю яюфётхўштрхь√ь ёыютрь inc ebx stdcall print_word,eax,ebx add eax,sizeof.TexColViv loop @b stdcall print_capt,capt_lbl_f1 - mov ecx,dword[ColWords] + mov ecx,[ColWords] mov eax,[Col] xor ebx,ebx - @@: + @@: ;Ўшъы яю ёяЁртърь ъ яюфёт. ёыютрь inc ebx stdcall print_word_f1,eax,ebx add eax,sizeof.TexColViv loop @b - ; яюфуюЄютър фы  PathShow - push dword PathShow_data_1 - call [PathShow_prepare] + ; яюфуюЄютър фы▀ PathShow + stdcall [PathShow_prepare], PathShow_data_1 call draw_window .no_colors: @@ -209,7 +224,7 @@ endp align 4 proc print_capt, capt:dword pushad - mov esi,dword[capt] + mov esi,[capt] stdcall str_len,esi stdcall [ted_text_add], tedit0,esi,eax,ted_opt_ed_change_time+ted_opt_ed_move_cursor popad @@ -219,63 +234,53 @@ endp align 4 proc print_word, text:dword, index:dword pushad - mov esi,text_buffer - mov byte[esi],0 - stdcall str_cat,esi,capt_beg_word - stdcall str_len,esi - add esi,eax + mov edi,text_buffer + mov byte[edi],0 + stdcall str_cat,edi,capt_beg_word + stdcall str_len,edi + add edi,eax - mov edi,dword[text] - stdcall code_string,edi,esi ;ъюфшЁєхь ёЄЁюъє ё ъы■ўхт√ь ёыютюь - stdcall str_cat,esi,capt_end_word + mov ecx,[text] + stdcall code_string,ecx,edi ;ъюфшЁєхь ёЄЁюъє ё ъы■ўхт√ь ёыютюь + stdcall str_cat,edi,capt_end_word - cmp dword[edi+MAX_COLOR_WORD_LEN],0 ;f1 + cmp dword[ecx+TexColViv.f1],0 je @f - stdcall str_cat,esi,capt_calc_f1 - stdcall str_cat_value,esi,[index] - stdcall str_cat,esi,capt_lbl_f1_use + stdcall str_cat,edi,capt_calc_f1 + stdcall str_cat_value,edi,[index] + stdcall str_cat,edi,capt_lbl_f1_use @@: - mov esi,text_buffer - stdcall str_len,esi ;єчэрхь фышээє тёхщ ёЄЁюъш - stdcall [ted_text_add], tedit0,esi,eax,ted_opt_ed_change_time+ted_opt_ed_move_cursor - -mov ecx,edi -mov edi,text_buffer -mov byte[edi],',' -inc edi -mov byte[edi],0 - xor eax,eax - mov al,byte[ecx+MAX_COLOR_WORD_LEN+4] ;wwo + stdcall str_len,edi + add edi,eax + mov word[edi],',' + inc edi + movzx eax,byte[ecx+TexColViv.flags] stdcall str_cat_value,edi,eax stdcall str_len,edi add edi,eax - mov byte[edi],',' + mov word[edi],',' inc edi - xor eax,eax - mov ax,word[ecx+MAX_COLOR_WORD_LEN+4+1] ;(escc shl 8)+endc - cmp ax,0 ;яЁютхЁ хь хёЄ№ ыш чртхЁ°р■∙шщ ш ¤ъЁрэшэє■∙шщ ёшьтюы - je @f + movzx eax,word[ecx+TexColViv.endc] ;(escc shl 8)+endc + or eax,eax ;яЁютхЁ▀хь хёЄ№ ыш чртхЁ°р■∙шщ ш ¤ъЁрэшэє■∙шщ ёшьтюы + jz @f stdcall str_cat_value,edi,eax stdcall str_len,edi add edi,eax @@: - mov byte[edi],',' + mov word[edi],',' inc edi - xor eax,eax - mov al,byte[ecx+MAX_COLOR_WORD_LEN+4+3] ;color + movzx eax,byte[ecx+TexColViv.color] stdcall str_cat_value,edi,eax stdcall str_len,edi add edi,eax - mov byte[edi],13 - inc edi - mov byte[edi],0 + mov word[edi],13 mov esi,text_buffer stdcall str_len,esi - stdcall [ted_text_add], tedit0,esi,eax,ted_opt_ed_move_cursor + stdcall [ted_text_add], tedit0,esi,eax,ted_opt_ed_change_time+ted_opt_ed_move_cursor popad ret @@ -284,8 +289,8 @@ endp align 4 proc print_word_f1, text:dword, index:dword pushad - mov edi,dword[text] - mov esi,dword[edi+MAX_COLOR_WORD_LEN] ;f1 + mov edi,[text] + mov esi,[edi+TexColViv.f1] cmp esi,0 je @f mov ebx,text_buffer @@ -296,7 +301,7 @@ proc print_word_f1, text:dword, index:dword stdcall str_len,ebx add ebx,eax - add esi,dword[tex_help_f1] + add esi,[tex_help_f1] stdcall code_string,esi,ebx ;ъюфшЁєхь ёЄЁюъє stdcall str_cat,ebx,capt_end_word_f1 @@ -308,13 +313,15 @@ proc print_word_f1, text:dword, index:dword ret endp +;description: +; ъюфшЁютър ёЄЁюъш, чрьхэр эхяхўрЄрхь√ї ёшьтюыют эр ўшёыют√х ъюф√ align 4 proc code_string, text:dword, out_text:dword pushad - mov esi,dword[text] + mov esi,[text] stdcall str_len,esi mov ecx,eax - mov edi,dword[out_text] + mov edi,[out_text] .copy: mov al,byte[esi] @@ -335,7 +342,7 @@ proc code_string, text:dword, out_text:dword add edi,2 and eax,0xff mov dword[edi],0 - call tl_convert_to_str + stdcall convert_int_to_str,4 stdcall str_len,edi add edi,eax mov byte[edi],',' @@ -383,7 +390,7 @@ proc str_cat_value, str1:dword, value:dword stdcall str_len,edi add edi,eax mov eax,[value] - call tl_convert_to_str + stdcall convert_int_to_str,12 popad ret endp @@ -404,29 +411,35 @@ proc str_len, str1:dword endp ;input: -; eax = value -; edi = string buffer +; eax - ўшёыю +; edi - сєЇхЁ фы▀ ёЄЁюъш +; len - фышээр сєЇхЁр +;output: align 4 -tl_convert_to_str: - pushad - stdcall mem_clear,edi,12 +proc convert_int_to_str uses eax ecx edx edi esi, len:dword + mov esi,[len] + add esi,edi + dec esi call .str - popad ret +endp align 4 .str: - mov ecx,0x0a ;чрфрхЄё  ёшёЄхьр ёўшёыхэш  шчьхэ ■Єё  ЁхушёЄЁ√ ebx,eax,ecx,edx тїюфэ√х ярЁрьхЄЁ√ eax - ўшёыю - ;яЁхЁхтюф ўшёыр т ASCII ёЄЁюъє тїюфэ√х фрээ√х ecx=ёшёЄхьр ёўшёыхэ  edi рфЁхё ъєфр чряшё√трЄ№, сєфхь ёЄЁюъє, яЁшўхь ъюэхЎ яхЁхьхээющ - cmp eax,ecx ;ёЁртэшЄ№ хёыш т eax ьхэ№°х ўхь т ecx Єю яхЁхщЄш эр @@-1 Є.х. эр pop eax + mov ecx,10 + cmp eax,ecx jb @f - xor edx,edx ;юўшёЄшЄ№ edx - div ecx ;ЁрчфхышЄ№ - юёЄрЄюъ т edx - push edx ;яюыюцшЄ№ т ёЄхъ - ;dec edi ;ёьх∙хэшх эхюсїюфшьюх фы  чряшёш ё ъюэЎр ёЄЁюъш - call .str ;яхЁхщЄш эр ёрьє ёхс  Є.х. т√чтрЄ№ ёрьє ёхс  ш Єръ фю Єюую ьюьхэЄр яюър т eax эх ёЄрэхЄ ьхэ№°х ўхь т ecx + xor edx,edx + div ecx + push edx + ;dec edi ;ёьх∙хэшх эхюсїюфшьюх фы▀ чряшёш ё ъюэЎр ёЄЁюъш + call .str pop eax - @@: ;cmp al,10 ;яЁютхЁшЄ№ эх ьхэ№°х ыш чэрўхэшх т al ўхь 10 (фы  ёшёЄхь√ ёўшёыхэ  10 фрээр  ъюьрэфр - ыш°эр )) - or al,0x30 ;фрээр  ъюьрэфр ъюЁюўх ўхь фтх т√°х - stosb ;чряшёрЄ№ ¤ыхьхэЄ шч ЁхушёЄЁр al т  ўхъє ярь Єш es:edi + @@: + cmp edi,esi + jge @f + or al,0x30 + stosb + mov byte[edi],0 ;т ъюэхЎ ёЄЁюъш ёЄртшь 0, ўЄю-с√ эх т√ырчшы ьєёюЁ + @@: ret