From 989a99d3dc5208c701590c1d806aa2b7afe631a6 Mon Sep 17 00:00:00 2001 From: Andrew Date: Sun, 1 Jun 2025 00:34:47 +0100 Subject: [PATCH] media/log_el: Post-SVN tidy - Fix `t_edit` reliance on `log_el` images; Update ASM include paths. - Note: Line endings standardised from `CRLF` > `LF`, so best to view diffs with whitespace changes hidden. --- programs/other/t_edit/t_edit.asm | 864 ++++++++++++----------- programs/other/t_edit_synt/te_syntax.asm | 784 ++++++++++---------- 2 files changed, 830 insertions(+), 818 deletions(-) diff --git a/programs/other/t_edit/t_edit.asm b/programs/other/t_edit/t_edit.asm index d64cb1154..4568057cd 100644 --- a/programs/other/t_edit/t_edit.asm +++ b/programs/other/t_edit/t_edit.asm @@ -1,429 +1,435 @@ -;Огромная благодарность всем, кто помогал: кодом/советом/дизайном ... - -use32 - org 0 - db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт - dd 1, start, i_end, mem, stacktop, file_name, sys_path - -MAX_COLOR_WORD_LEN equ 40 -maxChars equ 100002 ;(колличество символов в новом документе + 2) -BUF_SIZE equ 4096 ;buffer for copy|paste -maxSyntaxFileSize equ 410000 -TOOLBAR_ICONS_SIZE equ 1200*21 - -include '../../proc32.inc' -include '../../macros.inc' -include '../../KOSfuncs.inc' -include '../../load_img.inc' -include '../../load_lib.mac' -include '../../develop/libraries/box_lib/trunk/box_lib.mac' -include '../../system/skincfg/trunk/kglobals.inc' -include '../../system/skincfg/trunk/unpacker.inc' -include 'lang.inc' - -include 't_data.inc' -include 't_button.inc' -include 't_menu.inc' -include 'strlen.inc' -include 't_draw.inc' ;draw main window functions -include 'wnd_k_words.inc' - -@use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load - -align 4 -icon_tl_sys dd 0 ;указатель на память для хранения системных иконок -run_file_70 FileInfoBlock - -align 4 -start: - mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors - - mcall SF_SYS_MISC,SSF_HEAP_INIT - or eax,eax - jnz @f - call ted_Exit - @@: - - mcall SF_KEYBOARD,SSF_SET_INPUT_MODE,1 ;scan code - mcall SF_SET_EVENTS_MASK,0xC0000027 - - mov esi,file_name - stdcall str_len,esi - mov ecx,eax - mov edi,openfile_path - cld - rep movsb ;копируем имя файла в буфер openfile_path - -load_libraries l_libs_start,load_lib_end - -;проверка на сколько удачно загузились библиотеки -mov ebp,lib0 -.test_lib_open: - cmp dword [ebp+ll_struc_size-4],0 - jz @f - mcall SF_TERMINATE_PROCESS ;exit not correct -@@: - add ebp,ll_struc_size - cmp ebp,load_lib_end - jl .test_lib_open - -;--------------------------------------------------------------------- - stdcall [ted_init], tedit0 - stdcall [tl_data_init], tree1 - option_boxes_set_sys_color sc,opt_grlist1 - init_checkboxes2 check_boxes,check_boxes_end - check_boxes_set_sys_color2 check_boxes,check_boxes_end,sc - -; OpenDialog initialisation - stdcall [OpenDialog_Init],OpenDialog_data - -; kmenu initialisation - call tedit_menu_init - -; init toolbar file - include_image_file 'te_icon.png', bmp_icon,,,6 ;6 для серых кнопок - mov eax,[bmp_icon] - add eax,TOOLBAR_ICONS_SIZE - stdcall img_to_gray, [bmp_icon],eax,(TOOLBAR_ICONS_SIZE)/3 -;--------------------------------------------------------------------- -; внедряем файл с курсорами и линиями - include_image_file '..\..\media\log_el\trunk\tl_sys_16.png', icon_tl_sys - mov eax,dword[icon_tl_sys] - mov dword[tree1.data_img_sys],eax -; внедряем файл с иконками узлов - include_image_file 'tl_nod_16.png', icon_tl_sys - mov eax,dword[icon_tl_sys] - mov dword[tree1.data_img],eax -;------------------------------------------------------------------------------ - copy_path fn_syntax_dir,sys_path,file_name,0 ;берем путь к папке с файлами синтаксиса - xor eax,eax - mov ecx,4096 - mov edi,file_name - repnz scasb - mov byte[edi-2],al ;убираем '/' в конце имени папки (нужно для чтения с CD) - mcall SF_FILE,tree_file_struct - - or ebx,ebx - jz .end_dir_init - mov eax,dir_mem+32+40 - mov ecx,ebx - @@: - cmp byte[eax],'.' ;фильтруем файлы с именами '.' и '..' - je .filter - ;0x10000 ;1*2^16 - где 1 номер иконки с книгой - stdcall [tl_node_add], tree1,0x10000,eax - 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 ini file --- - copy_path ini_name,sys_path,file_name,0 - ;window startup pozition - stdcall [ini_get_int],file_name,ini_sec_window,key_window_l,ini_def_window_l - mov word[wnd_s_pos+2],ax - stdcall [ini_get_int],file_name,ini_sec_window,key_window_w,ini_def_window_w - mov word[wnd_s_pos],ax - stdcall [ini_get_int],file_name,ini_sec_window,key_window_t,ini_def_window_t - mov word[wnd_s_pos+6],ax - stdcall [ini_get_int],file_name,ini_sec_window,key_window_h,ini_def_window_h - mov word[wnd_s_pos+4],ax - ;scrool type - stdcall [ini_get_int],file_name,ini_sec_window,key_scroll_type,ini_def_scroll_type - mov [wScr.type],eax - mov [hScr.type],eax - mov [ws_dir_lbox.type],eax - mov [w_scr_t3.type],eax - ;symbol size - stdcall [ini_get_int],file_name,ini_sec_window,key_symbol_w,ini_def_symbol_w - mov dword[tedit0.rec.width],eax - stdcall [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 - ;font size - stdcall [ini_get_int],file_name,ini_sec_window,key_font_s,ini_def_font_s - shl eax,24 - mov dword[tedit0.font_size],eax - ;кнопки на панели - ini_panel key_but_new, ID_BUT_NEW - ini_panel key_but_open, ID_BUT_OPEN - ini_panel key_but_save, ID_BUT_SAVE - ini_panel key_but_save_as,ID_BUT_SAVE_AS - ini_panel key_but_select, ID_BUT_SELECT - ini_panel key_but_cut, ID_BUT_CUT - ini_panel key_but_copy, ID_BUT_COPY - ini_panel key_but_paste, ID_BUT_PASTE - ini_panel key_but_find, ID_BUT_FIND - ini_panel key_but_replace,ID_BUT_REPLACE - ini_panel key_but_key_words,ID_BUT_KEY_WORDS - ini_panel key_but_upper, ID_BUT_UPPER - ini_panel key_but_lower, ID_BUT_LOWER - ini_panel key_but_reverse,ID_BUT_REVERSE - ini_panel key_but_undo, ID_BUT_UNDO - ini_panel key_but_redo, ID_BUT_REDO - ini_panel key_but_invisible,ID_BUT_INVISIBLE - ini_panel key_but_syntax_list,ID_BUT_SYNTAX_LIST - ini_panel key_but_syntax_mode,ID_BUT_SYNTAX_MODE - ini_panel key_but_convert_1251_866,ID_BUT_CONVERT_1251_866 - ini_panel key_but_convert_866_1251,ID_BUT_CONVERT_866_1251 - ;файловые расширения - xor edx,edx - mov ebx,synt_auto_open - @@: - ;берем имя файла - stdcall [ini_get_str],file_name,ini_sec_options,key_synt_file,ebx,32,ini_def_synt_f - cmp byte[ebx],0 - je @f - inc byte[key_synt_file.numb] - add ebx,32 - ;берем расширения - stdcall [ini_get_str],file_name,ini_sec_options,key_synt_ext,ebx,32,ini_def_synt_f - inc byte[key_synt_ext.numb] - add ebx,32 - inc edx - cmp edx,max_synt_auto_open - jl @b - @@: - -;--- load color option file --- - stdcall open_unpac_synt_file,[fn_col_option] - -;--- get cmd line --- - cmp byte[openfile_path+3],0 ;openfile_path - je @f ;if file names exist - mov esi,openfile_path - stdcall auto_open_syntax,esi - call but_no_msg_OpenFile - @@: - - - -align 16 -red_win: - call draw_window - -align 16 -still: - mcall SF_WAIT_EVENT - cmp dword[exit_code],1 - jne @f - call ted_Exit - jmp still - @@: - - cmp al,1 ;изменилось положение окна - jz red_win - cmp al,2 - jz key - cmp al,3 - jz button - cmp al,6 ;мышь - jne @f - call mouse - @@: - jmp still - -align 16 -mouse: - stdcall [kmainmenu_dispatch_cursorevent], [main_menu] - - mcall SF_MOUSE_GET,SSF_WINDOW_POSITION - cmp word[tedit0.wnd.top],ax - jg .no_edit - shr eax,16 - cmp word[tedit0.wnd.left],ax - jg .no_edit - mcall SF_MOUSE_GET,SSF_BUTTON_EXT - bt eax,24 ;двойной щелчёк левой кнопкой - jnc @f - stdcall [ted_but_select_word], tedit0 - ret - @@: - stdcall [ted_mouse], tedit0 - .no_edit: - - ;проверка боковых панелей - cmp byte[tedit0.panel_id],TED_PANEL_FIND - jne @f - stdcall [edit_box_mouse], edit_find - stdcall [option_box_mouse], opt_grlist1 - stdcall [check_box_mouse], ch1 - @@: - cmp byte[tedit0.panel_id],TED_PANEL_REPLACE - jne @f - stdcall [edit_box_mouse], edit_find - stdcall [edit_box_mouse], edit_replace - stdcall [option_box_mouse], opt_grlist1 - @@: - cmp byte[tedit0.panel_id],TED_PANEL_SYNTAX - jne @f - stdcall [tl_mouse], tree1 - @@: - cmp byte[tedit0.panel_id],TED_PANEL_GOTO - jne @f - stdcall [edit_box_mouse], edit_goto - @@: - ret -;--------------------------------------------------------------------- - -;output: -; ah = symbol -align 16 -proc KeyConvertToASCII uses ebx, table:dword - mov ebx,dword[table] ;convert scan to ascii - shr ax,8 - add bx,ax - mov ah,byte[ebx] - ret -endp - -align 16 -key: - mcall SF_KEYBOARD,SSF_GET_CONTROL_KEYS ;66.3 получить состояние управляющих клавиш - xor esi,esi - mov ecx,1 - test al,3 ;[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 SF_SYSTEM_GET,SSF_KEYBOARD_LAYOUT,,conv_tabl ;26.2 получить раскладку клавиатуры - mcall SF_GET_KEY - stdcall [tl_key], tree1 - - test word[edit_replace.flags],ed_focus ;если не в фокусе, выходим - je @f - cmp ah,0x80 ;if key up - ja still - cmp ah,42 ;[Shift] (left) - je still - cmp ah,54 ;[Shift] (right) - je still - cmp ah,56 ;[Alt] - je still - cmp ah,29 ;[Ctrl] - je still - cmp ah,69 ;[Pause Break] - je still - - stdcall KeyConvertToASCII, conv_tabl - stdcall [edit_box_key], edit_replace - jmp still - @@: - test word[edit_find.flags],ed_focus ;если не в фокусе, выходим - je @f - cmp ah,0x80 ;if key up - ja still - cmp ah,42 ;[Shift] (left) - je still - cmp ah,54 ;[Shift] (right) - je still - cmp ah,56 ;[Alt] - je still - cmp ah,29 ;[Ctrl] - je still - cmp ah,69 ;[Pause Break] - je still - - stdcall KeyConvertToASCII, conv_tabl - stdcall [edit_box_key], edit_find - jmp still - @@: - test word[edit_goto.flags],ed_focus ;если не в фокусе, выходим - je @f - cmp ah,0x80 ;if key up - ja still - cmp ah,42 ;[Shift] (left) - je still - cmp ah,54 ;[Shift] (right) - je still - cmp ah,56 ;[Alt] - je still - cmp ah,29 ;[Ctrl] - je still - cmp ah,69 ;[Pause Break] - je still - - stdcall KeyConvertToASCII, conv_tabl - stdcall [edit_box_key], edit_goto - jmp still - @@: - - stdcall [ted_key], tedit0, conv_tabl,esi - jmp still - -align 4 -edit_replace edit_box TED_PANEL_WIDTH-1, 0, 20, 0xffffff, 0xff80, 0xff0000, 0xff, 0x4080, 300, buf_replace, mouse_dd, 0 -edit_find edit_box TED_PANEL_WIDTH-1, 0, 20, 0xffffff, 0xff80, 0xff0000, 0xff, 0x4080, 300, buf_find, mouse_dd, 0 -edit_goto edit_box TED_PANEL_WIDTH-1, 0, 20, 0xffffff, 0xff80, 0xff0000, 0xff, 0x4080, 10, buf_goto, mouse_dd, 0 - -unpac_mem dd 0 - -;library structures -l_libs_start: - lib0 l_libs lib_name_0, file_name, system_dir_0, import_box_lib - lib1 l_libs lib_name_1, file_name, system_dir_1, import_msgbox_lib - lib2 l_libs lib_name_2, file_name, system_dir_2, import_proclib - lib3 l_libs lib_name_3, file_name, system_dir_3, import_libimg - lib4 l_libs lib_name_4, file_name, system_dir_4, import_libini - lib5 l_libs lib_name_5, file_name, system_dir_5, import_libkmenu -load_lib_end: - -IncludeIGlobals -hed db 'TextEdit ' -i_end: - openfile_path: ;полный путь к файлу с которым идет работа - rb 4096 - dir_mem rb 32+304*count_of_dir_list_files - wnd_s_pos: ;место для настроек стартовой позиции окна - rq 1 - last_open_synt_file rb 32 ;имя последнего подключенного файла синтаксиса - buf rb BUF_SIZE ;буфер для копирования и вставки - buf_find rb 302 ;буфер для поиска текста - buf_replace rb 302 ;буфер для замены текста - buf_goto rb 12 ;буфер для перхода на строку - sc system_colors -IncludeUGlobals - align 16 - procinfo process_information - rb 1024 - thread: - rb 4096 -align 16 - thread_coords: - rb 4096 -align 16 -stacktop: - sys_path: ;путь откуда запустился исполняемый файл - rb 4096 - file_name: ;параметры запуска - rb 4096 - syntax_path: ;имя подключаемого файла синтаксиса - rb 4096 - plugin_path: - rb 4096 - text_work_area: ;путь к файлу, который показывается в окне - rb 4096 - filename_area: ;имя файла для диалога открытия/закрытия - rb 256 - file_info: - rb 40 -mem: +; SPDX-License-Identifier: NOASSERTION +; + +; Text encoded with Code Page 866 - Cyrillic + + +;Огромная благодарность всем, кто помогал: кодом/советом/дизайном ... + +use32 + org 0 + db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт + dd 1, start, i_end, mem, stacktop, file_name, sys_path + +MAX_COLOR_WORD_LEN equ 40 +maxChars equ 100002 ;(колличество символов в новом документе + 2) +BUF_SIZE equ 4096 ;buffer for copy|paste +maxSyntaxFileSize equ 410000 +TOOLBAR_ICONS_SIZE equ 1200*21 + +include '../../proc32.inc' +include '../../macros.inc' +include '../../KOSfuncs.inc' +include '../../load_img.inc' +include '../../load_lib.mac' +include '../../develop/libraries/box_lib/trunk/box_lib.mac' +include '../../system/skincfg/trunk/kglobals.inc' +include '../../system/skincfg/trunk/unpacker.inc' +include 'lang.inc' + +include 't_data.inc' +include 't_button.inc' +include 't_menu.inc' +include 'strlen.inc' +include 't_draw.inc' ;draw main window functions +include 'wnd_k_words.inc' + +@use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load + +align 4 +icon_tl_sys dd 0 ;указатель на память для хранения системных иконок +run_file_70 FileInfoBlock + +align 4 +start: + mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors + + mcall SF_SYS_MISC,SSF_HEAP_INIT + or eax,eax + jnz @f + call ted_Exit + @@: + + mcall SF_KEYBOARD,SSF_SET_INPUT_MODE,1 ;scan code + mcall SF_SET_EVENTS_MASK,0xC0000027 + + mov esi,file_name + stdcall str_len,esi + mov ecx,eax + mov edi,openfile_path + cld + rep movsb ;копируем имя файла в буфер openfile_path + +load_libraries l_libs_start,load_lib_end + +;проверка на сколько удачно загузились библиотеки +mov ebp,lib0 +.test_lib_open: + cmp dword [ebp+ll_struc_size-4],0 + jz @f + mcall SF_TERMINATE_PROCESS ;exit not correct +@@: + add ebp,ll_struc_size + cmp ebp,load_lib_end + jl .test_lib_open + +;--------------------------------------------------------------------- + stdcall [ted_init], tedit0 + stdcall [tl_data_init], tree1 + option_boxes_set_sys_color sc,opt_grlist1 + init_checkboxes2 check_boxes,check_boxes_end + check_boxes_set_sys_color2 check_boxes,check_boxes_end,sc + +; OpenDialog initialisation + stdcall [OpenDialog_Init],OpenDialog_data + +; kmenu initialisation + call tedit_menu_init + +; init toolbar file + include_image_file 'te_icon.png', bmp_icon,,,6 ;6 для серых кнопок + mov eax,[bmp_icon] + add eax,TOOLBAR_ICONS_SIZE + stdcall img_to_gray, [bmp_icon],eax,(TOOLBAR_ICONS_SIZE)/3 +;--------------------------------------------------------------------- +; внедряем файл с курсорами и линиями + include_image_file '..\..\media\log_el\tl_sys_16.png', icon_tl_sys + mov eax,dword[icon_tl_sys] + mov dword[tree1.data_img_sys],eax +; внедряем файл с иконками узлов + include_image_file 'tl_nod_16.png', icon_tl_sys + mov eax,dword[icon_tl_sys] + mov dword[tree1.data_img],eax +;------------------------------------------------------------------------------ + copy_path fn_syntax_dir,sys_path,file_name,0 ;берем путь к папке с файлами синтаксиса + xor eax,eax + mov ecx,4096 + mov edi,file_name + repnz scasb + mov byte[edi-2],al ;убираем '/' в конце имени папки (нужно для чтения с CD) + mcall SF_FILE,tree_file_struct + + or ebx,ebx + jz .end_dir_init + mov eax,dir_mem+32+40 + mov ecx,ebx + @@: + cmp byte[eax],'.' ;фильтруем файлы с именами '.' и '..' + je .filter + ;0x10000 ;1*2^16 - где 1 номер иконки с книгой + stdcall [tl_node_add], tree1,0x10000,eax + 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 ini file --- + copy_path ini_name,sys_path,file_name,0 + ;window startup pozition + stdcall [ini_get_int],file_name,ini_sec_window,key_window_l,ini_def_window_l + mov word[wnd_s_pos+2],ax + stdcall [ini_get_int],file_name,ini_sec_window,key_window_w,ini_def_window_w + mov word[wnd_s_pos],ax + stdcall [ini_get_int],file_name,ini_sec_window,key_window_t,ini_def_window_t + mov word[wnd_s_pos+6],ax + stdcall [ini_get_int],file_name,ini_sec_window,key_window_h,ini_def_window_h + mov word[wnd_s_pos+4],ax + ;scrool type + stdcall [ini_get_int],file_name,ini_sec_window,key_scroll_type,ini_def_scroll_type + mov [wScr.type],eax + mov [hScr.type],eax + mov [ws_dir_lbox.type],eax + mov [w_scr_t3.type],eax + ;symbol size + stdcall [ini_get_int],file_name,ini_sec_window,key_symbol_w,ini_def_symbol_w + mov dword[tedit0.rec.width],eax + stdcall [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 + ;font size + stdcall [ini_get_int],file_name,ini_sec_window,key_font_s,ini_def_font_s + shl eax,24 + mov dword[tedit0.font_size],eax + ;кнопки на панели + ini_panel key_but_new, ID_BUT_NEW + ini_panel key_but_open, ID_BUT_OPEN + ini_panel key_but_save, ID_BUT_SAVE + ini_panel key_but_save_as,ID_BUT_SAVE_AS + ini_panel key_but_select, ID_BUT_SELECT + ini_panel key_but_cut, ID_BUT_CUT + ini_panel key_but_copy, ID_BUT_COPY + ini_panel key_but_paste, ID_BUT_PASTE + ini_panel key_but_find, ID_BUT_FIND + ini_panel key_but_replace,ID_BUT_REPLACE + ini_panel key_but_key_words,ID_BUT_KEY_WORDS + ini_panel key_but_upper, ID_BUT_UPPER + ini_panel key_but_lower, ID_BUT_LOWER + ini_panel key_but_reverse,ID_BUT_REVERSE + ini_panel key_but_undo, ID_BUT_UNDO + ini_panel key_but_redo, ID_BUT_REDO + ini_panel key_but_invisible,ID_BUT_INVISIBLE + ini_panel key_but_syntax_list,ID_BUT_SYNTAX_LIST + ini_panel key_but_syntax_mode,ID_BUT_SYNTAX_MODE + ini_panel key_but_convert_1251_866,ID_BUT_CONVERT_1251_866 + ini_panel key_but_convert_866_1251,ID_BUT_CONVERT_866_1251 + ;файловые расширения + xor edx,edx + mov ebx,synt_auto_open + @@: + ;берем имя файла + stdcall [ini_get_str],file_name,ini_sec_options,key_synt_file,ebx,32,ini_def_synt_f + cmp byte[ebx],0 + je @f + inc byte[key_synt_file.numb] + add ebx,32 + ;берем расширения + stdcall [ini_get_str],file_name,ini_sec_options,key_synt_ext,ebx,32,ini_def_synt_f + inc byte[key_synt_ext.numb] + add ebx,32 + inc edx + cmp edx,max_synt_auto_open + jl @b + @@: + +;--- load color option file --- + stdcall open_unpac_synt_file,[fn_col_option] + +;--- get cmd line --- + cmp byte[openfile_path+3],0 ;openfile_path + je @f ;if file names exist + mov esi,openfile_path + stdcall auto_open_syntax,esi + call but_no_msg_OpenFile + @@: + + + +align 16 +red_win: + call draw_window + +align 16 +still: + mcall SF_WAIT_EVENT + cmp dword[exit_code],1 + jne @f + call ted_Exit + jmp still + @@: + + cmp al,1 ;изменилось положение окна + jz red_win + cmp al,2 + jz key + cmp al,3 + jz button + cmp al,6 ;мышь + jne @f + call mouse + @@: + jmp still + +align 16 +mouse: + stdcall [kmainmenu_dispatch_cursorevent], [main_menu] + + mcall SF_MOUSE_GET,SSF_WINDOW_POSITION + cmp word[tedit0.wnd.top],ax + jg .no_edit + shr eax,16 + cmp word[tedit0.wnd.left],ax + jg .no_edit + mcall SF_MOUSE_GET,SSF_BUTTON_EXT + bt eax,24 ;двойной щелчёк левой кнопкой + jnc @f + stdcall [ted_but_select_word], tedit0 + ret + @@: + stdcall [ted_mouse], tedit0 + .no_edit: + + ;проверка боковых панелей + cmp byte[tedit0.panel_id],TED_PANEL_FIND + jne @f + stdcall [edit_box_mouse], edit_find + stdcall [option_box_mouse], opt_grlist1 + stdcall [check_box_mouse], ch1 + @@: + cmp byte[tedit0.panel_id],TED_PANEL_REPLACE + jne @f + stdcall [edit_box_mouse], edit_find + stdcall [edit_box_mouse], edit_replace + stdcall [option_box_mouse], opt_grlist1 + @@: + cmp byte[tedit0.panel_id],TED_PANEL_SYNTAX + jne @f + stdcall [tl_mouse], tree1 + @@: + cmp byte[tedit0.panel_id],TED_PANEL_GOTO + jne @f + stdcall [edit_box_mouse], edit_goto + @@: + ret +;--------------------------------------------------------------------- + +;output: +; ah = symbol +align 16 +proc KeyConvertToASCII uses ebx, table:dword + mov ebx,dword[table] ;convert scan to ascii + shr ax,8 + add bx,ax + mov ah,byte[ebx] + ret +endp + +align 16 +key: + mcall SF_KEYBOARD,SSF_GET_CONTROL_KEYS ;66.3 получить состояние управляющих клавиш + xor esi,esi + mov ecx,1 + test al,3 ;[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 SF_SYSTEM_GET,SSF_KEYBOARD_LAYOUT,,conv_tabl ;26.2 получить раскладку клавиатуры + mcall SF_GET_KEY + stdcall [tl_key], tree1 + + test word[edit_replace.flags],ed_focus ;если не в фокусе, выходим + je @f + cmp ah,0x80 ;if key up + ja still + cmp ah,42 ;[Shift] (left) + je still + cmp ah,54 ;[Shift] (right) + je still + cmp ah,56 ;[Alt] + je still + cmp ah,29 ;[Ctrl] + je still + cmp ah,69 ;[Pause Break] + je still + + stdcall KeyConvertToASCII, conv_tabl + stdcall [edit_box_key], edit_replace + jmp still + @@: + test word[edit_find.flags],ed_focus ;если не в фокусе, выходим + je @f + cmp ah,0x80 ;if key up + ja still + cmp ah,42 ;[Shift] (left) + je still + cmp ah,54 ;[Shift] (right) + je still + cmp ah,56 ;[Alt] + je still + cmp ah,29 ;[Ctrl] + je still + cmp ah,69 ;[Pause Break] + je still + + stdcall KeyConvertToASCII, conv_tabl + stdcall [edit_box_key], edit_find + jmp still + @@: + test word[edit_goto.flags],ed_focus ;если не в фокусе, выходим + je @f + cmp ah,0x80 ;if key up + ja still + cmp ah,42 ;[Shift] (left) + je still + cmp ah,54 ;[Shift] (right) + je still + cmp ah,56 ;[Alt] + je still + cmp ah,29 ;[Ctrl] + je still + cmp ah,69 ;[Pause Break] + je still + + stdcall KeyConvertToASCII, conv_tabl + stdcall [edit_box_key], edit_goto + jmp still + @@: + + stdcall [ted_key], tedit0, conv_tabl,esi + jmp still + +align 4 +edit_replace edit_box TED_PANEL_WIDTH-1, 0, 20, 0xffffff, 0xff80, 0xff0000, 0xff, 0x4080, 300, buf_replace, mouse_dd, 0 +edit_find edit_box TED_PANEL_WIDTH-1, 0, 20, 0xffffff, 0xff80, 0xff0000, 0xff, 0x4080, 300, buf_find, mouse_dd, 0 +edit_goto edit_box TED_PANEL_WIDTH-1, 0, 20, 0xffffff, 0xff80, 0xff0000, 0xff, 0x4080, 10, buf_goto, mouse_dd, 0 + +unpac_mem dd 0 + +;library structures +l_libs_start: + lib0 l_libs lib_name_0, file_name, system_dir_0, import_box_lib + lib1 l_libs lib_name_1, file_name, system_dir_1, import_msgbox_lib + lib2 l_libs lib_name_2, file_name, system_dir_2, import_proclib + lib3 l_libs lib_name_3, file_name, system_dir_3, import_libimg + lib4 l_libs lib_name_4, file_name, system_dir_4, import_libini + lib5 l_libs lib_name_5, file_name, system_dir_5, import_libkmenu +load_lib_end: + +IncludeIGlobals +hed db 'TextEdit ' +i_end: + openfile_path: ;полный путь к файлу с которым идет работа + rb 4096 + dir_mem rb 32+304*count_of_dir_list_files + wnd_s_pos: ;место для настроек стартовой позиции окна + rq 1 + last_open_synt_file rb 32 ;имя последнего подключенного файла синтаксиса + buf rb BUF_SIZE ;буфер для копирования и вставки + buf_find rb 302 ;буфер для поиска текста + buf_replace rb 302 ;буфер для замены текста + buf_goto rb 12 ;буфер для перхода на строку + sc system_colors +IncludeUGlobals + align 16 + procinfo process_information + rb 1024 + thread: + rb 4096 +align 16 + thread_coords: + rb 4096 +align 16 +stacktop: + sys_path: ;путь откуда запустился исполняемый файл + rb 4096 + file_name: ;параметры запуска + rb 4096 + syntax_path: ;имя подключаемого файла синтаксиса + rb 4096 + plugin_path: + rb 4096 + text_work_area: ;путь к файлу, который показывается в окне + rb 4096 + filename_area: ;имя файла для диалога открытия/закрытия + rb 256 + file_info: + rb 40 +mem: diff --git a/programs/other/t_edit_synt/te_syntax.asm b/programs/other/t_edit_synt/te_syntax.asm index 8a0ed71fc..219cc63bf 100644 --- a/programs/other/t_edit_synt/te_syntax.asm +++ b/programs/other/t_edit_synt/te_syntax.asm @@ -1,389 +1,395 @@ -use32 - org 0 - db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт - 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 -CAPT_PATH_WIDTH equ 50 ;ширина подписи перед текстовым полем - -include '../../macros.inc' -include '../../proc32.inc' -include '../../KOSfuncs.inc' -include '../../load_img.inc' -include '../../load_lib.mac' -include '../../develop/libraries/box_lib/trunk/box_lib.mac' -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.Alloc,mem.Free,mem.ReAlloc,dll.Load - -icon_tl_sys dd 0 ;указатель на память для хранения системных иконок - -align 4 -start: - mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors - - mcall SF_SYS_MISC,SSF_HEAP_INIT - or eax,eax - jz button.exit - - mcall SF_KEYBOARD,SSF_SET_INPUT_MODE,1 ;scan code - mcall SF_SET_EVENTS_MASK,0xC0000027 - - load_libraries l_libs_start,load_lib_end - - ;проверка на сколько удачно загузилась библиотека - cmp dword[lib0+ll_struc_size-4],0 - jz @f - mcall -1 ;exit not correct - @@: - -;--------------------------------------------------------------------- - stdcall [tl_data_init], tree1 - -; читаем файл с курсорами и линиями - 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 файл с иконками узлов - 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 ;берем путь к папке с файлами синтаксиса - mcall SF_FILE,tree_file_struct - - cmp ebx,2 - jg @f - notify_window_run file_name ;сообщение если не удалось открыть файлы - jmp .end_dir_init - @@: - ;cmp ebx,0 - ;jle .end_dir_init - mov eax,dir_mem+32+40 - 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: - - xor eax,eax - inc eax - mov [scrol_w1.type],eax - mov [scrol_h1.type],eax - mov [ws_dir_lbox.type],eax - -;--- load color option file --- -stdcall [ted_init], tedit0 -mov byte[file_name],0 - -align 4 -red_win: - call draw_window - -align 4 -still: - mcall SF_WAIT_EVENT - - cmp al,1 ;изм. положение окна - jz red_win - cmp al,2 - jz key - cmp al,3 - jz button - cmp al,6 - jz mouse - - jmp still - - -align 4 -draw_window: - pushad - mcall SF_REDRAW,SSF_BEGIN_DRAW - - mov edx,[sc.work] - or edx,0x33000000 - mov edi,hed - mcall SF_CREATE_WINDOW,<10,555>,<10,333> - - mcall SF_THREAD_INFO,procinfo,-1 - mov edi,tedit0 ;значение edi нужно для EvSize и ted_wnd_t - call EvSize - - mov esi,[sc.work_button];0xd0 - mcall SF_DEFINE_BUTTON,5*65536+90,195*65536+20,200 - - mov ebx,100*65536+85 - mov ecx,195*65536+20 - mov edx,201 - mov esi,0xd00000 - mcall - - mov ecx,[sc.work_button_text] - or ecx,0x80000000 - mcall SF_DRAW_TEXT,10*65536+200,,txt_load_f - - mov ecx,0xffff00 - or ecx,0x80000000 - mcall ,105*65536+200,,txt_save_f - - mov ecx,[sc.work_text] - or ecx,0x80000000 - mcall ,195*65536+10,,txt_inp_file - - add ebx,20 - mov edx,txt_out_file - int 0x40 - - stdcall [PathShow_draw], PathShow_data_1 - - stdcall [edit_box_draw], edit1 - stdcall [tl_draw], tree1 - - ;scroll 1 - mov [ws_dir_lbox.all_redraw],1 - stdcall [scrollbar_ver_draw],ws_dir_lbox - stdcall [ted_draw], tedit0 - - 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 - -align 4 -mouse: - stdcall [tl_mouse],tree1 - stdcall [edit_box_mouse],edit1 - stdcall [ted_mouse], tedit0 - jmp still - -;output: -; ah = symbol -align 4 -proc KeyConvertToASCII, table:dword - push ebx - mov ebx,dword[table] ;convert scan to ascii - shr ax,8 - add bx,ax - mov ah,byte[ebx] - pop ebx - ret -endp - -align 4 -key: - mcall SF_KEYBOARD,SSF_GET_CONTROL_KEYS ;66.3 получить состояние управляющих клавиш - xor esi,esi - mov ecx,1 - test al,3 ;[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 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 ; если не в фокусе, выходим - je @f - cmp ah,0x80 ;if key up - ja still - cmp ah,42 ;[Shift] (left) - je still - cmp ah,54 ;[Shift] (right) - je still - cmp ah,56 ;[Alt] - je still - cmp ah,29 ;[Ctrl] - je still - cmp ah,69 ;[Pause Break] - je still - - stdcall KeyConvertToASCII, conv_tabl - stdcall [edit_box_key],edit1 - jmp still - @@: - - stdcall [ted_key], tedit0, conv_tabl,esi - jmp still - -align 4 -button: - mcall SF_GET_BUTTON - - cmp ah,200 - jne @f - call but_OpenSyntax - @@: - cmp ah,201 - jne @f - call but_SaveSyntax - @@: - - cmp ah,1 - jne still -.exit: - stdcall mem.Free,[options_file] - stdcall mem.Free,[unpac_mem] - - stdcall [tl_data_clear], tree1 - stdcall [ted_delete], tedit0 - mcall SF_TERMINATE_PROCESS ;выход из программы - -align 4 -but_OpenSyntax: -push eax - stdcall [tl_node_get_data],tree1 - mov [fn_col_option],eax - call InitColText -pop eax - ret - -align 4 -but_SaveSyntax: - stdcall [ted_save_file], tedit0,run_file_70,[edit1.text] - ret - -;description: -; функция вызываемую при нажатии Ctrl+N,O,F,S,H,G -align 4 -proc ted_but_ctrl_all uses eax, opt_key:dword - mov eax,[opt_key] - cmp al,'N' ;Ctrl+N - jne @f - call but_ctrl_n - jmp .end0 - @@: - cmp al,'O' ;Ctrl+O - jne @f - call but_ctrl_o - @@: - ;cmp al,'S' ;Ctrl+S - ;cmp al,'F' ;Ctrl+F - ;cmp al,'G' ;Ctrl+G - ;cmp al,'H' ;Ctrl+H - .end0: - ret -endp - -align 4 -but_ctrl_o: - push eax - call get_wnd_in_focus - or eax,eax - jz @f - stdcall [ted_open_file], eax,str_file_70,[edit1.text] - @@: - pop eax - ret - -;создание нового файла -align 4 -but_ctrl_n: - push eax - call get_wnd_in_focus - or eax,eax - jz @f - stdcall [ted_clear], eax,1 - stdcall [ted_draw], eax - @@: - pop eax - ret - -;определяем какое из окон редактора в фокусе -align 4 -get_wnd_in_focus: - xor eax,eax - cmp dword[el_focus],tedit0 - jne @f - mov eax,tedit0 - @@: - ;cmp dword[el_focus],tedit1 - ;jne @f - ; mov eax,tedit1 - ;@@: - ret - -hed db 'TextEditor syntax file converter 18.12.20',0 ;подпись окна -conv_tabl rb 128 ; таблица для конвертирования scan-кода в ascii-код - -txt_load_f db 'Загр. файл',0 -txt_save_f db 'Сохр. файл',0 -txt_inp_file db 'Исх. файл:',0 -txt_out_file db 'Вых. файл:',0 - -;library structures -l_libs_start: - lib0 l_libs lib_name_0, file_name, system_dir_0, import_box_lib - lib1 l_libs lib_name_1, file_name, system_dir_1, import_libimg -load_lib_end: - -IncludeIGlobals - -align 16 -i_end: -IncludeUGlobals - procinfo process_information - rb 1024 -thread: - rb 1024 -stacktop: - sys_path rb 4096 - file_name rb 4096 - file_name_rez rb 4096 -mem: +; SPDX-License-Identifier: NOASSERTION +; + +; Text encoded with Code Page 866 - Cyrillic + + +use32 + org 0 + db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт + 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 +CAPT_PATH_WIDTH equ 50 ;ширина подписи перед текстовым полем + +include '../../macros.inc' +include '../../proc32.inc' +include '../../KOSfuncs.inc' +include '../../load_img.inc' +include '../../load_lib.mac' +include '../../develop/libraries/box_lib/trunk/box_lib.mac' +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.Alloc,mem.Free,mem.ReAlloc,dll.Load + +icon_tl_sys dd 0 ;указатель на память для хранения системных иконок + +align 4 +start: + mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors + + mcall SF_SYS_MISC,SSF_HEAP_INIT + or eax,eax + jz button.exit + + mcall SF_KEYBOARD,SSF_SET_INPUT_MODE,1 ;scan code + mcall SF_SET_EVENTS_MASK,0xC0000027 + + load_libraries l_libs_start,load_lib_end + + ;проверка на сколько удачно загузилась библиотека + cmp dword[lib0+ll_struc_size-4],0 + jz @f + mcall -1 ;exit not correct + @@: + +;--------------------------------------------------------------------- + stdcall [tl_data_init], tree1 + +; читаем файл с курсорами и линиями + include_image_file '..\..\media\log_el\tl_sys_16.png', icon_tl_sys + mov eax,[icon_tl_sys] + mov [tree1.data_img_sys],eax +;--------------------------------------------------------------------- +; читаем bmp файл с иконками узлов + 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 ;берем путь к папке с файлами синтаксиса + mcall SF_FILE,tree_file_struct + + cmp ebx,2 + jg @f + notify_window_run file_name ;сообщение если не удалось открыть файлы + jmp .end_dir_init + @@: + ;cmp ebx,0 + ;jle .end_dir_init + mov eax,dir_mem+32+40 + 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: + + xor eax,eax + inc eax + mov [scrol_w1.type],eax + mov [scrol_h1.type],eax + mov [ws_dir_lbox.type],eax + +;--- load color option file --- +stdcall [ted_init], tedit0 +mov byte[file_name],0 + +align 4 +red_win: + call draw_window + +align 4 +still: + mcall SF_WAIT_EVENT + + cmp al,1 ;изм. положение окна + jz red_win + cmp al,2 + jz key + cmp al,3 + jz button + cmp al,6 + jz mouse + + jmp still + + +align 4 +draw_window: + pushad + mcall SF_REDRAW,SSF_BEGIN_DRAW + + mov edx,[sc.work] + or edx,0x33000000 + mov edi,hed + mcall SF_CREATE_WINDOW,<10,555>,<10,333> + + mcall SF_THREAD_INFO,procinfo,-1 + mov edi,tedit0 ;значение edi нужно для EvSize и ted_wnd_t + call EvSize + + mov esi,[sc.work_button];0xd0 + mcall SF_DEFINE_BUTTON,5*65536+90,195*65536+20,200 + + mov ebx,100*65536+85 + mov ecx,195*65536+20 + mov edx,201 + mov esi,0xd00000 + mcall + + mov ecx,[sc.work_button_text] + or ecx,0x80000000 + mcall SF_DRAW_TEXT,10*65536+200,,txt_load_f + + mov ecx,0xffff00 + or ecx,0x80000000 + mcall ,105*65536+200,,txt_save_f + + mov ecx,[sc.work_text] + or ecx,0x80000000 + mcall ,195*65536+10,,txt_inp_file + + add ebx,20 + mov edx,txt_out_file + int 0x40 + + stdcall [PathShow_draw], PathShow_data_1 + + stdcall [edit_box_draw], edit1 + stdcall [tl_draw], tree1 + + ;scroll 1 + mov [ws_dir_lbox.all_redraw],1 + stdcall [scrollbar_ver_draw],ws_dir_lbox + stdcall [ted_draw], tedit0 + + 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 + +align 4 +mouse: + stdcall [tl_mouse],tree1 + stdcall [edit_box_mouse],edit1 + stdcall [ted_mouse], tedit0 + jmp still + +;output: +; ah = symbol +align 4 +proc KeyConvertToASCII, table:dword + push ebx + mov ebx,dword[table] ;convert scan to ascii + shr ax,8 + add bx,ax + mov ah,byte[ebx] + pop ebx + ret +endp + +align 4 +key: + mcall SF_KEYBOARD,SSF_GET_CONTROL_KEYS ;66.3 получить состояние управляющих клавиш + xor esi,esi + mov ecx,1 + test al,3 ;[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 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 ; если не в фокусе, выходим + je @f + cmp ah,0x80 ;if key up + ja still + cmp ah,42 ;[Shift] (left) + je still + cmp ah,54 ;[Shift] (right) + je still + cmp ah,56 ;[Alt] + je still + cmp ah,29 ;[Ctrl] + je still + cmp ah,69 ;[Pause Break] + je still + + stdcall KeyConvertToASCII, conv_tabl + stdcall [edit_box_key],edit1 + jmp still + @@: + + stdcall [ted_key], tedit0, conv_tabl,esi + jmp still + +align 4 +button: + mcall SF_GET_BUTTON + + cmp ah,200 + jne @f + call but_OpenSyntax + @@: + cmp ah,201 + jne @f + call but_SaveSyntax + @@: + + cmp ah,1 + jne still +.exit: + stdcall mem.Free,[options_file] + stdcall mem.Free,[unpac_mem] + + stdcall [tl_data_clear], tree1 + stdcall [ted_delete], tedit0 + mcall SF_TERMINATE_PROCESS ;выход из программы + +align 4 +but_OpenSyntax: +push eax + stdcall [tl_node_get_data],tree1 + mov [fn_col_option],eax + call InitColText +pop eax + ret + +align 4 +but_SaveSyntax: + stdcall [ted_save_file], tedit0,run_file_70,[edit1.text] + ret + +;description: +; функция вызываемую при нажатии Ctrl+N,O,F,S,H,G +align 4 +proc ted_but_ctrl_all uses eax, opt_key:dword + mov eax,[opt_key] + cmp al,'N' ;Ctrl+N + jne @f + call but_ctrl_n + jmp .end0 + @@: + cmp al,'O' ;Ctrl+O + jne @f + call but_ctrl_o + @@: + ;cmp al,'S' ;Ctrl+S + ;cmp al,'F' ;Ctrl+F + ;cmp al,'G' ;Ctrl+G + ;cmp al,'H' ;Ctrl+H + .end0: + ret +endp + +align 4 +but_ctrl_o: + push eax + call get_wnd_in_focus + or eax,eax + jz @f + stdcall [ted_open_file], eax,str_file_70,[edit1.text] + @@: + pop eax + ret + +;создание нового файла +align 4 +but_ctrl_n: + push eax + call get_wnd_in_focus + or eax,eax + jz @f + stdcall [ted_clear], eax,1 + stdcall [ted_draw], eax + @@: + pop eax + ret + +;определяем какое из окон редактора в фокусе +align 4 +get_wnd_in_focus: + xor eax,eax + cmp dword[el_focus],tedit0 + jne @f + mov eax,tedit0 + @@: + ;cmp dword[el_focus],tedit1 + ;jne @f + ; mov eax,tedit1 + ;@@: + ret + +hed db 'TextEditor syntax file converter 18.12.20',0 ;подпись окна +conv_tabl rb 128 ; таблица для конвертирования scan-кода в ascii-код + +txt_load_f db 'Загр. файл',0 +txt_save_f db 'Сохр. файл',0 +txt_inp_file db 'Исх. файл:',0 +txt_out_file db 'Вых. файл:',0 + +;library structures +l_libs_start: + lib0 l_libs lib_name_0, file_name, system_dir_0, import_box_lib + lib1 l_libs lib_name_1, file_name, system_dir_1, import_libimg +load_lib_end: + +IncludeIGlobals + +align 16 +i_end: +IncludeUGlobals + procinfo process_information + rb 1024 +thread: + rb 1024 +stacktop: + sys_path rb 4096 + file_name rb 4096 + file_name_rez rb 4096 +mem: