diff --git a/programs/bcc32/include/kos_unpack.inc b/programs/bcc32/include/kos_unpack.inc index 55c6d5772..2361d1bd2 100644 --- a/programs/bcc32/include/kos_unpack.inc +++ b/programs/bcc32/include/kos_unpack.inc @@ -1,7 +1,10 @@ -@@unpack$qqspvt1 equ unpack - -include "..\..\system\skincfg\trunk\kglobals.inc" -include "..\..\system\skincfg\trunk\unpacker.inc" - -IncludeIGlobals -IncludeUGlobals \ No newline at end of file +; SPDX-License-Identifier: NOASSERTION +; + +@@unpack$qqspvt1 equ unpack + +include "..\..\system\skincfg\kglobals.inc" +include "..\..\system\skincfg\unpacker.inc" + +IncludeIGlobals +IncludeUGlobals diff --git a/programs/develop/kol_f_edit/kol_f_edit.asm b/programs/develop/kol_f_edit/kol_f_edit.asm index 63d912a20..a438823b5 100644 --- a/programs/develop/kol_f_edit/kol_f_edit.asm +++ b/programs/develop/kol_f_edit/kol_f_edit.asm @@ -1,1625 +1,1630 @@ -use32 - org 0 - db 'MENUET01' - dd 1,start,i_end,mem,stacktop,buf_cmd_lin,sys_path - -include '../../KOSfuncs.inc' -include '../../macros.inc' -include '../../proc32.inc' -include '../../load_lib.mac' -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 'strlen.inc' -include 'obj_codes.inc' - -@use_library mem.Alloc,mem.Free,mem.ReAlloc, dll.Load - -hed db 'kol_f_edit 29.09.20',0 - -sizeof.TreeList equ 20 ;need for element 'tree_list' - -BUF_STRUCT_SIZE equ 21 -buf2d_data equ dword[edi] ;данные буфера изображения -buf2d_w equ dword[edi+8] ;ширина буфера -buf2d_h equ dword[edi+12] ;высота буфера -buf2d_l equ word[edi+4] ;отступ слева -buf2d_t equ word[edi+6] ;отступ сверху -buf2d_size_lt equ dword[edi+4] ;отступ слева и справа для буфера -buf2d_color equ dword[edi+16] ;цвет фона буфера -buf2d_bits equ byte[edi+20] ;количество бит в 1-й точке изображения - - -MAX_CED_OBJECTS equ 200 -MAX_OPT_FIELDS equ 11 -MAX_OBJ_TYPES equ 17 ;максимальное число объектов -MAX_OBJ_CAPTIONS equ 1000 ;размер дополнительных подписей подписей -WND_CAPT_COLOR equ 0xb0d0ff -BUF_SIZE equ 1000 - -;modif -BIT_MOD_ACI equ 0 ;первоначальные настройки элементов -BIT_MOD_ACM equ 1 ;события от мыши -BIT_MOD_ACD equ 2 ;данные объектов -BIT_MOD_ABU equ 3 ;связывание кнопок -BIT_MOD_WI_CAPT equ 0 ;стиль окна подпись -BIT_MOD_WI_CORD_OTN_CL_OBL equ 1 ;стиль окна координаты относительно клиентской области -BIT_MOD_WI_REDR equ 2 ;стиль окна перерисовка окна -BIT_MOD_WI_GRAD equ 3 ;стиль окна градиент -BIT_MOD_CHE equ 0 ; ch_flag_en - выбран CheckBox -BIT_MOD_CHE_T equ 1 ;сверху -BIT_MOD_CHE_M equ 2 ;по центру -BIT_MOD_CHE_B equ 3 ;снизу -BIT_MOD_TXT_ASCII_0 equ 0 ;текст заканчив. 0 -BIT_MOD_TXT_NO_TRAN equ 1 ;текст прозрачный -BIT_MOD_TXT_CHAR2 equ 2 ;текст 2-м шрифтом -BIT_MOD_EDIT_FOC equ 0 ;EditBox в фокусе -BIT_MOD_EDIT_FIO equ 1 ; -;CPP_MOD_RE_GR equ 1 ;градиентный прямоугольник -BIT_MOD_BUT_NFON equ 0 ;стиль Button не рисовать кнопку -BIT_MOD_BUT_NBORD equ 1 ;стиль Button не рисовать границу -BIT_MOD_IMPORT_FUNCT_COMMENT equ 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 - m2m [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 [img_decode], [buf],ebx,0 - mov [image_data],eax - ;преобразуем изображение к формату rgb - stdcall [img_to_rgb2], [image_data],[buf] - ;удаляем временный буфер image_data - stdcall [img_destroy], [image_data] - @@: -} - -struct FileInfoBlock - Function dd ? - Position dd ? - Flags dd ? - Count dd ? - Buffer dd ? - rezerv db ? - FileName dd ? -ends - -struct object - id dd ? ;идентификатор объекта - txt rb MAX_LEN_OBJ_TXT ;текстовые свойства - lvl db 0 - clo db 0 - typid dd ? ;номер объекта определяющего тип переменной - modif dd ? ;битовые свойства -ends - -struct ObjOpt - dd ? - bl_type db ? - graph db ? - info rb 30 - caption rb MAX_OPT_CAPTION - Col rw MAX_OPT_FIELDS - img rw MAX_OPT_FIELDS ;индексы картинок (в файле 'icon.bmp') - bit_prop dd 0 ;битовые свойства (подписи, названия) - bit_val dd 0 ;битовые свойства (значения, константы) -ends - -SKIN_H equ 22 -SKIN_W1 equ 5 -SKIN_W2 equ 7 -SKIN_W3 equ 23 -fn_skin_1 db 'left.bmp',0 -fn_skin_2 db 'base.bmp',0 -fn_skin_3 db 'oper.bmp',0 -IMAGE_FILE_SKIN1_SIZE equ 3*(SKIN_W1+3)*SKIN_H+54 -IMAGE_FILE_SKIN2_SIZE equ 3*(SKIN_W2+3)*SKIN_H+54 -IMAGE_FILE_SKIN3_SIZE equ 3*(SKIN_W3+3)*SKIN_H+54 - -IMAGE_FILE_FONT1_SIZE equ 96*144*3 ;размер файла с 1-м системным шрифтом - -fn_icon db 'icon.bmp',0 -count_main_icons equ 35 ;число иконок в файле icon.bmp -bmp_icon rb 0x300*count_main_icons - -TREE_ICON_SYS16_BMP_SIZE equ 256*3*11+54 ;размер bmp файла с системными иконками -icon_tl_sys dd 0 ;указатеель на память для хранения системных иконок -icon_font_s1 dd 0 ;указатель на временную память для загрузки шрифта - -fn_syntax db 'asm.syn',0 ;имя загружаемого файла синтаксиса - -;макрос для проверки битового свойства -macro test_bool_prop obj_reg,n_prop -{ - bt dword[obj_reg+u_object.modif-u_object],n_prop -} - -include 'ced_wnd_m.inc' -include 'ced_wnd_prop.inc' ;файл с функциями окна свойств объекта -include 'ced_constr.inc' ;файл с функциями окна конструктора -include 'ced_code_g.inc' ;файл с функциями генерирования кодов - -align 4 -start: - load_libraries l_libs_start,load_lib_end - - ;проверка на сколько удачно загузилась наша либа - mov ebp,lib0 - cmp dword [ebp+ll_struc_size-4],0 - jz @f - mcall -1 ;exit not correct - @@: - mov ebp,lib1 - cmp dword [ebp+ll_struc_size-4],0 - jz @f - mcall -1 ;exit not correct - @@: - mov ebp,lib2 - cmp dword [ebp+ll_struc_size-4],0 - jz @f - mcall -1 ;exit not correct - @@: - mov ebp,lib3 - cmp dword [ebp+ll_struc_size-4],0 - jz @f - mcall -1 ;exit not correct - @@: - - ;задание размеров полей со свойствами - mov eax,prop_edits_top - mov ebx,16+6 ;ширина иконки + отступы - mov edi,edit2 - @@: - mov ed_top,eax ;отступ сверху - mov ed_left,ebx ;отступ слева - add edi,ed_struc_size - add eax,prop_edits_height - cmp edi,prop_wnd_edits_end - jl @b - - stdcall [buf2d_create], buf_fon - - mcall 48,3,sc,sizeof.system_colors - mcall 40,0x27 - - stdcall [tl_data_init], tree1 - stdcall [tl_data_init], tree2 - - copy_path fn_icon,sys_path,file_name,0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой - mov [run_file_70.Function], 0 - mov [run_file_70.Position], 54 - mov [run_file_70.Flags], 0 - mov [run_file_70.Count], 0x300*count_main_icons - mov [run_file_70.Buffer], bmp_icon - mov [run_file_70.rezerv], 0 - mov [run_file_70.FileName], file_name - mcall 70,run_file_70 - - cmp ebx,-1 - mov [err_ini0],1 - je @f ;if open file - mov [err_ini0],0 - mov dword[tree1.data_img],bmp_icon - mov dword[tree2.data_img],bmp_icon - @@: - - ;системные иконки 16*16 для tree_list - load_image_file 'tl_sys_16.png', icon_tl_sys,TREE_ICON_SYS16_BMP_SIZE - ;если изображение не открылось, то в icon_tl_sys будут - ;не инициализированные данные, но ошибки не будет, т. к. буфер нужного размера - mov eax,dword[icon_tl_sys] - mov dword[tree1.data_img_sys],eax - mov dword[tree2.data_img_sys],eax - - ;1-й файл скина - load_image_file fn_skin_1, icon_font_s1,IMAGE_FILE_SKIN1_SIZE - stdcall [buf2d_create_f_img], buf_skin1,[icon_font_s1] ;создаем буфер - stdcall mem.Free,[icon_font_s1] ;освобождаем память - ;2-й файл скина - load_image_file fn_skin_2, icon_font_s1,IMAGE_FILE_SKIN2_SIZE - stdcall [buf2d_create_f_img], buf_skin2,[icon_font_s1] ;создаем буфер - stdcall mem.Free,[icon_font_s1] ;освобождаем память - ;3-й файл скина - load_image_file fn_skin_3, icon_font_s1,IMAGE_FILE_SKIN3_SIZE - stdcall [buf2d_create_f_img], buf_skin3,[icon_font_s1] ;создаем буфер - stdcall mem.Free,[icon_font_s1] ;освобождаем память - - ;символы 1-го системного шрифта - load_image_file 'font6x9.bmp', icon_font_s1,IMAGE_FILE_FONT1_SIZE - stdcall [buf2d_create_f_img], buf_font,[icon_font_s1] ;создаем буфер - stdcall mem.Free,[icon_font_s1] ;освобождаем память - stdcall [buf2d_conv_24_to_8], buf_font,1 ;делаем буфер прозрачности 8 бит - stdcall [buf2d_convert_text_matrix], buf_font - - - copy_path fn_obj_opt,sys_path,fp_obj_opt,0 - ;load options file - mov [run_file_70.Position], 0 - mov [run_file_70.Count], sizeof.ObjOpt*MAX_OBJ_TYPES+MAX_OBJ_CAPTIONS - mov [run_file_70.Buffer], obj_opt - mov [run_file_70.FileName], fp_obj_opt - mcall 70,run_file_70 - - cmp ebx,-1 - mov [err_ini1],1 - je .open_end ;jmp if not open file - mov [err_ini1],0 - - mov eax,obj_opt ;добавляем объекты - @@: - mov ebx,dword[eax] - cmp ebx,0 - je @f - ;xor ecx,ecx ;в ecx будет индекс иконки - mov cx,word[eax+obj_opt.img-obj_opt] - cmp cx,0 - jge .zero - xor cx,cx ;что-бы не глючило с отрицательным индексом - .zero: - shl ecx,16 - stdcall dword[tl_node_add], tree1,ecx,eax ;добавляем название объекта - stdcall dword[tl_cur_next], tree1 ;переносим курсор вниз, что-бы не поменялся порядок - add eax,sizeof.ObjOpt ;переход на следующий объект - jmp @b - @@: - stdcall dword[tl_cur_beg], tree1 ;переносим курсор вверх - - .open_end: - - stdcall [OpenDialog_Init],OpenDialog_data ;подготовка диалога - stdcall [ted_init], tedit0 - copy_path fn_syntax,sys_path,file_name,0 - - ; *** init syntax file *** - ; проверяем размер файла синтаксиса - mov [run_file_70.Function], 5 - mov [run_file_70.Position], 0 - mov [run_file_70.Flags], 0 - mov dword[run_file_70.Count], 0 - mov dword[run_file_70.Buffer], open_b - mov byte[run_file_70+20], 0 - mov dword[run_file_70.FileName], file_name - mcall 70,run_file_70 - cmp eax,0 - jne @f - - mov edi,tedit0 - mov ecx,dword[open_b+32] ;+32 qword: размер файла в байтах - mov ted_syntax_file_size,ecx - - stdcall mem.Alloc,ecx ;выделяем память для файла синтаксиса - mov ted_syntax_file,eax - - ;пробуем открыть файл синтаксиса - call open_unpac_synt_file - jmp .end_0 - @@: - notify_window_run txt_not_syntax_file - .end_0: - - ;get cmd line - cmp [buf_cmd_lin],0 - je @f ;if file names exist - mov esi,buf_cmd_lin - call strlen ;eax=strlen - mov edi,[edit1.text] - mov [edit1.size],eax - mov ecx,eax - rep movsb - call but_open_proj - @@: - - - -align 4 -red_win: - call draw_window - -align 4 -still: - mcall 10 - - cmp al,1 - jne @f - call draw_window - @@: - cmp al,2 - jz key - cmp al,3 - jz button - cmp al,6 - jne @f - call mouse - @@: - - jmp still - -align 4 -draw_window: -pushad - mcall 12,1 - - xor eax,eax - mov ebx,20*65536+670 - mov ecx,20*65536+370 - mov edx,[sc.work] - or edx,0x33000000 - mov edi,hed - int 0x40 - - mov eax,8 ;button 'Open Project' - mov esi,0x80ff - mov ebx,230*65536+18 - mov ecx,5*65536+18 - mov edx,5 - int 0x40 - stdcall draw_icon, 22,231,6 ;22 - open - - ;button 'Save Project' - mov ebx,250*65536+18 - mov ecx,5*65536+18 - mov edx,6 - int 0x40 - stdcall draw_icon, 17,251,6 ;17 - save - - ;button 'Show Constructor' - mov ebx,310*65536+18 - mov ecx,5*65536+18 - mov edx,11 - int 0x40 - stdcall draw_icon, 12,311,6 ;12 - window - - ;button 'Show Code' - mov ebx,330*65536+18 - mov edx,12 - int 0x40 - stdcall draw_icon, 11,331,6 ;11 - text - - ;button 'Update: Code, Constructor' - mov ebx,350*65536+18 - mov edx,13 - int 0x40 - stdcall draw_icon, 32,351,6 ;32 - update - - ;button 'Save Code' - mov ebx,370*65536+18 - mov edx,14 - int 0x40 - stdcall draw_icon, 17,371,6 ;17 - save - - ;button ']P' - mov ebx,390*65536+18 - mov edx,15 - int 0x40 - stdcall draw_icon, 18,391,6 ;18 - знак конца абзаца - - ;button 'Show color text' - mov ebx,410*65536+18 - mov edx,16 - int 0x40 - stdcall draw_icon, 19,411,6 - - ;button 'Add Object' - mov ebx,125*65536+18 - mov ecx,30*65536+18 - mov edx,31 - int 0x40 - stdcall draw_icon, 14,126,31 ;14 - add object - - ;button 'Move Up' - mov ebx,155*65536+18 - mov edx,21 - int 0x40 - stdcall draw_icon, 23,156,31 ;23 - move up - - ;button 'Move Down' - mov ebx,175*65536+18 - mov edx,22 - int 0x40 - stdcall draw_icon, 24,176,31 ;24 - move down - - ;button 'Copy' - mov ebx,195*65536+18 - mov edx,23 - int 0x40 - stdcall draw_icon, 30,196,31 ;30 - copy - - ;button 'Paste' - mov ebx,215*65536+18 - mov edx,24 - int 0x40 - stdcall draw_icon, 31,216,31 ;31 - paste - - ;button 'Property' - mov ebx,235*65536+18 - mov edx,25 - int 0x40 - stdcall draw_icon, 7,236,31 ;7 - property - - ;button 'Undo' - mov ebx,255*65536+18 - mov edx,26 - int 0x40 - stdcall draw_icon, 33,256,31 ;33 - undo - - ;button 'Redo' - mov ebx,275*65536+18 - mov edx,27 - int 0x40 - stdcall draw_icon, 34,276,31 ;34 - redo - -; 10 30 50 70 90 - - cmp [err_opn],1 - jne @f - mcall 4,10*65536+35,0x80ff0000,txtErrOpen - @@: - - stdcall [edit_box_draw], edit1 - stdcall [edit_box_draw], edit_sav - - mov dword[w_scr_t1.all_redraw],1 - ;stdcall [scrollbar_ver_draw], w_scr_t1 - stdcall [tl_draw], tree1 - mov dword[w_scr_t2.all_redraw],1 - ;stdcall [scrollbar_ver_draw], w_scr_t2 - stdcall [tl_draw], tree2 - - cmp byte[show_mode],0 ;условие видимости окна конструктора - jne @f - stdcall [buf2d_draw], buf_fon - @@: - cmp byte[show_mode],1 ;условие видимости текстового окна - jne @f - stdcall [ted_draw], tedit0 - @@: - mcall 12,2 -popad - ret - -align 4 -mouse: - stdcall [edit_box_mouse], edit1 - stdcall [edit_box_mouse], edit_sav - stdcall [tl_mouse], tree1 - stdcall [tl_mouse], tree2 - cmp byte[show_mode],1 ;условие видимости текстового окна - jne @f - stdcall [ted_mouse], tedit0 - @@: - ret - - -align 4 -key: - mcall 2 - stdcall [edit_box_key], edit1 - stdcall [edit_box_key], edit_sav - stdcall [tl_key], tree1 - stdcall [tl_key], tree2 - - jmp still - -align 4 -button: - mcall 17 - cmp ah,5 - jne @f - call but_open_proj - jmp still - @@: - cmp ah,6 - jne @f - call but_save_proj - jmp still - @@: - ;cmp ah,10 - ;jne @f - ;call but_element_change - ;@@: - cmp ah,11 - jne @f - call but_show_constructor - jmp still - @@: - cmp ah,12 - jne @f - call but_show_code - jmp still - @@: - cmp ah,13 - jne @f - call but_update - jmp still - @@: - cmp ah,14 - jne @f - call but_save_asm - jmp still - @@: - cmp ah,15 - jne @f - call but_show_invis - jmp still - @@: - cmp ah,16 - jne @f - call but_show_syntax - jmp still - @@: - cmp ah,21 - jne @f - call but_obj_move_up - jmp still - @@: - cmp ah,22 - jne @f - call but_obj_move_down - jmp still - @@: - cmp ah,23 - jne @f - call but_obj_copy - jmp still - @@: - cmp ah,24 - jne @f - call but_obj_paste - jmp still - @@: - cmp ah,25 - jne @f - call on_file_object_select - jmp still - @@: - cmp ah,26 - jne @f - stdcall [tl_info_undo], tree2 - stdcall [tl_draw], tree2 - jmp still - @@: - cmp ah,27 - jne @f - stdcall [tl_info_redo], tree2 - stdcall [tl_draw], tree2 - jmp still - @@: - cmp ah,31 - jne @f - call on_add_object - jmp still - @@: - cmp ah,1 - jne still -.exit: - stdcall mem.Free,[icon_tl_sys] - mov dword[tree1.data_img],0 - mov dword[tree2.data_img],0 - mov dword[tree1.data_img_sys],0 - mov dword[tree2.data_img_sys],0 - stdcall dword[tl_data_clear], tree1 - stdcall dword[tl_data_clear], tree2 - stdcall [buf2d_delete],buf_fon ;удаляем буфер - stdcall [buf2d_delete],buf_font ;удаляем буфер - stdcall [buf2d_delete],buf_skin1 - stdcall [buf2d_delete],buf_skin2 - stdcall [buf2d_delete],buf_skin3 - stdcall [ted_delete], tedit0 - cmp dword[unpac_mem],0 - je @f - stdcall mem.Free,[unpac_mem] - @@: - mcall -1 - -align 4 -open_file_data dd 0 ;указатель на память для открытия файлов -open_file_size dd 0 ;размер открытого файла - -align 4 -but_open_proj: - copy_path open_dialog_name,communication_area_default_path,file_name,0 - pushad - mov [OpenDialog_data.type],0 - stdcall [OpenDialog_Start],OpenDialog_data - cmp [OpenDialog_data.status],2 - je .open_end - ;код при удачном открытии диалога - - mov [run_file_70.Function], 5 - mov [run_file_70.Position], 0 - mov [run_file_70.Flags], 0 - mov dword[run_file_70.Count], 0 - mov dword[run_file_70.Buffer], open_b - mov byte[run_file_70+20], 0 - mov dword[run_file_70.FileName], openfile_path - mcall 70,run_file_70 - - mov ecx,dword[open_b+32] ;+32 qword: размер файла в байтах - mov [open_file_size],ecx - stdcall mem.ReAlloc,[open_file_data],ecx - mov [open_file_data],eax - - mov [run_file_70.Function], 0 - mov [run_file_70.Position], 0 - mov [run_file_70.Flags], 0 - mov dword[run_file_70.Count], ecx - m2m dword[run_file_70.Buffer], eax - mov byte[run_file_70+20], 0 - mov dword[run_file_70.FileName], openfile_path - mcall 70,run_file_70 ;загружаем файл - cmp ebx,0xffffffff - mov [err_opn],1 - je .open_end ;if open file - mov [err_opn],0 - stdcall [edit_box_set_text], edit1,openfile_path - - stdcall dword[tl_info_clear], tree2 - mov eax,[open_file_data] ;добавляем объекты - @@: - mov ebx,dword[eax] - cmp ebx,0 - je @f - - call find_obj_in_opt ;edi = pointer to ObjOpt struct - - mov cx,word[edi+obj_opt.img-obj_opt] - cmp cx,0 - jge .zero - xor cx,cx ;что-бы не глючило с отрицательным индексом - .zero: - shl ecx,16 ;в ecx индекс иконки - mov cl,byte[eax+u_object.lvl-u_object] ;уровень объекта - - ;tl_node_close_open - не подходит, т.к. действует на узлы имеющие дочерние - mov ch,byte[eax+u_object.clo-u_object] ;закрытый/открытый - - stdcall dword[tl_node_add], tree2,ecx,eax ;добавляем объект - - stdcall dword[tl_cur_next], tree2 ;переносим курсор вниз, что-бы не поменялся порядок - add eax,sizeof.object ;переход на следующий объект - jmp @b - @@: - stdcall dword[tl_cur_beg], tree2 ;переносим курсор вверх - - mov [foc_obj],0 - call draw_constructor - call code_gen - .open_end: - call draw_window ;перерисовка окна идет в любом случае, даже если файл не открылся - popad - ret - -;сохранение файла проэкта на диск -align 4 -but_save_proj: - copy_path open_dialog_name,communication_area_default_path,file_name,0 - pushad - mov [OpenDialog_data.type],1 - stdcall [OpenDialog_Start],OpenDialog_data - cmp [OpenDialog_data.status],2 - je .end_save_file - ;код при удачном открытии диалога - - ;берем размер памяти, необходимой для сохранения файла - xor ecx,ecx - stdcall [tl_node_poi_get_info], tree2,0 - @@: - cmp eax,0 - je @f - inc ecx - stdcall [tl_node_poi_get_next_info], tree2,eax ;переходим к следущему узлу - jmp @b - @@: - ;movzx eax,word[tree2.info_size] - imul ecx,sizeof.object ;eax - add ecx,4 ;метка конца файла - mov [open_file_size],ecx - stdcall mem.ReAlloc,[open_file_data],ecx - mov [open_file_data],eax - - mov edi,[open_file_data] - stdcall [tl_node_poi_get_info], tree2,0 - mov edx,eax - @@: - cmp edx,0 - je @f - stdcall [tl_node_poi_get_data], tree2,edx - mov esi,eax ;получаем данные узла - - mov bl,byte[edx+2] ;bl - уровень объекта - mov byte[esi+u_object.lvl-u_object],bl - mov bl,byte[edx+3] ;bl - открытие/закрытие объекта - mov byte[esi+u_object.clo-u_object],bl - - ;вычисляем новый индекс для типа объекта - mov ebx,[esi+u_object.typid-u_object] ;ebx - тип объекта - ;сохраняем тип объекта - push ebx - imul ebx,sizeof.TreeList - add ebx,[tree2.data_nodes] ;ebx - указатель объект указывающий тип - stdcall get_obj_npp,ebx - mov [esi+u_object.typid-u_object],eax - mov eax,esi - ;копируем объект в память для сохранения - movzx ecx,word[tree2.info_size] - cld - rep movsb - ;восстанавливаем тип объекта - pop dword[eax+u_object.typid-u_object] - - stdcall [tl_node_poi_get_next_info], tree2,edx - mov edx,eax ;переходим к следущему узлу - jmp @b - @@: - mov dword[edi],0 ;метка конца файла - add edi,4 - - stdcall [edit_box_set_text], edit1,openfile_path - mov ecx,[open_file_size] ;ecx - размер сохраняемого файла - mov [run_file_70.Function], 2 - mov [run_file_70.Position], 0 - mov [run_file_70.Flags], 0 - mov [run_file_70.Count], ecx - m2m [run_file_70.Buffer], [open_file_data] - mov [run_file_70.rezerv], 0 - mov dword[run_file_70.FileName], openfile_path - mcall 70,run_file_70 - - .end_save_file: - popad - ret - -;берет номер по порядку по указателю на структуру объекта -;output: -; eax - номер объекта -align 4 -proc get_obj_npp uses ebx ecx, p_obj_str:dword - mov ecx,2 - mov ebx,[p_obj_str] - - stdcall [tl_node_poi_get_info], tree2,0 - @@: - cmp eax,0 - je .no_exist - cmp eax,ebx - je @f - - inc ecx - stdcall [tl_node_poi_get_next_info], tree2,eax ;переходим к следущему узлу - jmp @b - .no_exist: ;когда идет ссылка на не существующий объект - xor ecx,ecx ;обнуляем указатель, что-бы не сохранять в файл мусор - @@: - mov eax,ecx - ret -endp - -;функция для сохранения созданного asm файла -align 4 -but_save_asm: - push edi - mov edi, tedit0 - - stdcall [ted_save_file],edi,run_file_70,[edit_sav.text] - cmp ted_err_save,0 - jne @f - stdcall [mb_create],msgbox_1,thread ;message: Файл был сохранен - @@: - pop edi - ret - -;функция для показа/скрытия невидимых символов -align 4 -but_show_invis: - push edi - mov edi,tedit0 - - xor ted_mode_invis,1 - cmp byte[show_mode],1 ;условие видимости текстового окна - jne @f - stdcall [ted_draw],edi - @@: - pop edi - ret - -; -align 4 -but_show_syntax: - push edi - mov edi,tedit0 - - xor ted_mode_color,1 - cmp byte[show_mode],1 ;условие видимости текстового окна - jne @f - stdcall [ted_draw],edi - @@: - pop edi - ret - -align 4 -ted_save_err_msg: - mov byte[msgbox_0.err],al - stdcall [mb_create],msgbox_0,thread ;message: Can-t save text file! - ret - -;функция вызываемая при нажатии Enter в окне tree2 -;обновляет текстовые поля значениями параметров взятых из объектов -;функция обратная к данной but_element_change -align 4 -on_file_object_select: - cmp byte[prop_wnd_run],0 - jne @f - mov byte[prop_wnd_run],1 - stdcall [tl_node_get_data], tree2 - mov dword[foc_obj],eax - cmp eax,0 - je @f - pushad - ;все действия по настройке элементов управления выполняются в окне со свойствами - mcall 51,1,prop_start,prop_thread - popad - @@: - ;call draw_window - ret - -;функция вызываемая при нажатии Enter в окне tree1 -;добавляет новый объект в окно tree2 -align 4 -on_add_object: -push eax ebx ecx - stdcall [tl_node_get_data], tree1 - cmp eax,0 - je @f - xor ecx,ecx - mov cx,word[eax+obj_opt.img-obj_opt] ;cx - индекс главной иконки добавляемого объекта - - cmp ecx,count_main_icons ;в старших битах ecx будут 0, потому отрицательные числа тоже проверяются - jl .end_0 - ;если иконки нет, по умолчанию берем 0-ю - xor cx,cx - .end_0: - - shl ecx,16 - stdcall mem_clear, u_object,sizeof.object - mov ebx,dword[eax] - mov dword[u_object.id],ebx - stdcall dword[tl_node_add], tree2,ecx,u_object ;добавляем объект - @@: -pop ecx ebx eax - call draw_window - ret - -align 4 -but_ctrl_o: - ret -align 4 -but_ctrl_n: - ret -align 4 -but_ctrl_s: - ret - -;открытие и распаковка файла подсветки синтаксиса -;input: -; ted_syntax_file - буфер для открываемого файла синтаксиса -; ted_syntax_file_size - размер открываемого файла синтаксиса -;output: -; ebx - число прочитанных байт из файла -align 4 -open_unpac_synt_file: -push eax edi esi - mov edi, tedit0 - mov [run_file_70.Function], 0 - mov [run_file_70.Position], 0 - mov [run_file_70.Flags], 0 - mov ecx, ted_syntax_file_size - mov dword[run_file_70.Count], ecx - m2m dword[run_file_70.Buffer], ted_syntax_file - mov byte[run_file_70+20], 0 - mov [run_file_70.FileName], file_name - mcall 70, run_file_70 - cmp ebx,-1 - jne .end_0 - ;если возникли ошибки при открытии файла синтаксиса - mov byte[txt_not_syntax_file.err],'0' - add byte[txt_not_syntax_file.err],al - notify_window_run txt_not_syntax_file ;Can-t open color options file! - jmp @f - .end_0: - - mov eax,ted_syntax_file - cmp dword[eax],'KPCK' - jne .end_unpack - - mov ecx,dword[eax+4] ;ecx - размер файла синтаксиса после распаковки - cmp dword[unpac_mem],0 - jne .end_1 - ;первоначальное выделение временной памяти для распаковки файла - stdcall mem.Alloc,ecx - mov [unpac_mem],eax - mov [unpac_mem_size],ecx - .end_1: - cmp dword[unpac_mem_size],ecx - jge .end_2 - ;если для распакованого файла не хватает временной памяти - stdcall mem.ReAlloc,[unpac_mem],ecx ;заново выделяем временную память - mov [unpac_mem],eax - mov [unpac_mem_size],ecx - .end_2: - - ;распаковка файла во временную память - stdcall unpack,ted_syntax_file,[unpac_mem] - - cmp ted_syntax_file_size,ecx - jge .end_3 - ;если для распакованого файла не хватает памяти - stdcall mem.ReAlloc,ted_syntax_file,ecx ;заново выделяем память - mov ted_syntax_file,eax - mov ted_syntax_file_size,ecx - .end_3: - - ;копирование распакованного файла из временной памяти в память элемента - mov edi,ted_syntax_file - mov esi,[unpac_mem] - cld - rep movsb - - .end_unpack: - ;применение файла подсветки - stdcall [ted_init_syntax_file], tedit0 - @@: -pop esi edi eax - ret - -align 4 -txt_not_syntax_file: - db 'Ошибка при открытии файла с цветовыми настройками! (Код ошибки =' - .err: db '?' - db ')',0 - -align 4 -buf_fon: ;фоновый буфер - dd 0 ;указатель на буфер изображения - dw 310 ;+4 left - dw 50 ;+6 top - dd 340 ;+8 w - dd 280 ;+12 h - dd 0xffffff ;+16 color - db 24 ;+20 bit in pixel - -align 4 -buf_font: ;буфер матрицы со шрифтом - dd 0 ;указатель на буфер изображения - dw 25 ;+4 left - dw 25 ;+6 top - dd 96 ;+8 w - dd 144 ;+12 h - dd 0 ;+16 color - db 24 ;+20 bit in pixel - -align 4 -buf_skin1: - dd 0 ;указатель на буфер изображения - dw 0 ;+4 left - dw 0 ;+6 top - dd SKIN_W1 ;+8 w - dd SKIN_H ;+12 h - dd 0 ;+16 color - db 24 ;+20 bit in pixel -align 4 -buf_skin2: - dd 0 ;указатель на буфер изображения - dw 0 ;+4 left - dw 0 ;+6 top - dd SKIN_W2 ;+8 w - dd SKIN_H ;+12 h - dd 0 ;+16 color - db 24 ;+20 bit in pixel -align 4 -buf_skin3: - dd 0 ;указатель на буфер изображения - dw 0 ;+4 left - dw 0 ;+6 top - dd SKIN_W3 ;+8 w - dd SKIN_H ;+12 h - dd 0 ;+16 color - db 24 ;+20 bit in pixel - -show_mode db 0 ;режим для показа определенного окна -txtErrOpen db 'Не найден файл, проверьте правильность имени',0 -txtErrIni1 db 'Не открылся файл с опциями',0 -err_opn db 0 ;рез. открытия файла проэкта -err_ini0 db 0 ;рез. открытия файла с иконками -err_ini1 db 0 ;рез. открытия файла с опциями -unpac_mem dd 0 -unpac_mem_size dd 0 - -edit1 edit_box 210, 10, 5, 0xffffff, 0xff80, 0xff, 0xff0000, 0x4080, 300, ed_text1, mouse_dd, 0, 7, 7 - -edit2 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text2, mouse_dd, 0 -edit3 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text3, mouse_dd, 0 -edit4 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text4, mouse_dd, 0 -edit5 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text5, mouse_dd, 0 -edit6 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text6, mouse_dd, 0 -edit7 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text7, mouse_dd, 0 -edit8 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text8, mouse_dd, 0 -edit9 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text9, mouse_dd, 0 -edit10 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text10, mouse_dd, 0 -edit11 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text11, mouse_dd, 0 -edit12 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text12, mouse_dd, 0 -prop_wnd_edits_end: ;конец текстовых полей, отвечающих за свойства - -edit_sav edit_box 210, 310, 30, 0xffffff, 0xff80, 0xff, 0xff0000, 0x4080, 300, ed_text_sav, mouse_dd, 0 - - -ed_text1 db '/hd0/1/',0 - rb 295 -ed_text2 rb MAX_LEN_OBJ_TXT+2 -ed_text3 rb MAX_LEN_OBJ_TXT+2 -ed_text4 rb MAX_LEN_OBJ_TXT+2 -ed_text5 rb MAX_LEN_OBJ_TXT+2 -ed_text6 rb MAX_LEN_OBJ_TXT+2 -ed_text7 rb MAX_LEN_OBJ_TXT+2 -ed_text8 rb MAX_LEN_OBJ_TXT+2 -ed_text9 rb MAX_LEN_OBJ_TXT+2 -ed_text10 rb MAX_LEN_OBJ_TXT+2 -ed_text11 rb MAX_LEN_OBJ_TXT+2 -ed_text12 rb MAX_LEN_OBJ_TXT+2 -ed_text_sav rb 302 - -txt_null db 'null',0 -mouse_dd dd ? - -el_focus dd tree1 -;дерево со списком возможных типов объектов -tree1 tree_list sizeof.ObjOpt,20+2, tl_key_no_edit+tl_draw_par_line+tl_list_box_mode,\ - 16,16, 0xffffff,0xb0d0ff,0xd000ff, 5,50,125,280, 0,obj_opt.info-obj_opt,0, el_focus,\ - w_scr_t1,on_add_object -;дерево с объектами в пользовательском файле -tree2 tree_list sizeof.object,MAX_CED_OBJECTS+2, tl_draw_par_line,\ - 16,16, 0xffffff,0xb0d0ff,0xd000ff, 155,50,130,280, 13,u_object.txt-u_object,MAX_LEN_OBJ_TXT, el_focus,\ - w_scr_t2,on_file_object_select - -msgbox_0: - 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_1: - db 1,0 - db ':)',0 - db 'File was saved',0 - db 'Ok',0 - db 0 - -struct TexSelect - x0 dd ? - y0 dd ? - x1 dd ? - y1 dd ? -ends -;------------------------------------------------------------------------------ -align 4 -tedit0: ;структура текстового редактора - .wnd BOX 310,50,325,260 ;+ 0 - .rec BOX 30,13,7,10 ;+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 25002 ;+86 максимальное число символов в одном документе - .count_colors_text dd 1 ;+90 колличество цветов текста - .count_key_words dd 0 ;+94 колличество ключевых слов - .color_cursor dd 0xff0000 ;+98 цвет курсора - .color_wnd_capt dd 0x0080c0 ;+102 цвет полей вокруг окна - .color_wnd_work dd 0x0 ;+106 цвет фона окна - .color_wnd_bord dd 0xffffff ;+110 цвет текста на полях - .color_select dd 0x0000ff ;+114 цвет выделения - .color_cur_text dd 0xffff00 ;+118 цвет символа под курсором - .color_wnd_text dd 0x80ffff ;+122 цвет текста в окне - .syntax_file dd 0 ;+126 указатель на начало файла синтаксиса - .syntax_file_size dd 55*1024 ;+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 scrol_w1 ;+174 вертикальный скроллинг - .scr_h dd scrol_h1 ;+178 горизонтальный скроллинг - .arr_key_pos dd 0 ;+182 указатель на массив позиций ключевых слов - .buffer dd text_buffer ;+186 указатель на буфер копирования/вставки - .buffer_find dd 0 ;+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 but_ctrl_o ;+198 указатель на функцию вызываемую при нажатии Ctrl+O (открытие файла) - .fun_on_key_ctrl_f dd 0 ;+202 ... Ctrl+F (вызова/скрытия панели поиска) - .fun_on_key_ctrl_n dd but_ctrl_n ;+206 ... Ctrl+N (создание нового документа) - .fun_on_key_ctrl_s dd 0 ;+210 ... Ctrl+S - .buffer_size dd BUF_SIZE ;+214 размер буфера копирования/вставки - .fun_find_err dd 0 ;+218 указатель на функцию вызываемую если поиск закончился неудачно - .fun_init_synt_err dd 0 ;+222 указатель на функцию вызываемую при ошибочном открытии файла синтаксиса - .fun_draw_panel_buttons dd 0 ;+226 указатель на функцию рисования панели с кнопками - .fun_draw_panel_find dd 0 ;+230 указатель на функцию рисования панели поиска - .fun_draw_panel_syntax dd 0 ;+234 указатель на функцию рисования панели синтаксиса - .fun_save_err dd ted_save_err_msg ;+238 указатель на функцию вызываемую если сохранение файла закончилось неудачно - .increase_size dd 1000 ;+242 число символов на которые будет увечиваться память при нехватке - .ptr_free_symb dd ? ;+246 указатель на свободную память, в которую можно добавлять символ (используется внутри элемента для ускорения вставки текста) -;------------------------------------------------------------------------------ -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 32 -.all_redraw dd 0 ;+80 -.ar_offset dd 1 ;+84 -;--------------------------------------------------------------------- -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 32 -.all_redraw dd 0 ;+80 -.ar_offset dd 1 ;+84 - - - -align 4 -w_scr_t1: -.size_x dw 16 ;+0 -rb 2+2+2 -.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 0 ;+36 -rb 4+2+2 -.run_x: -rb 32 -.all_redraw dd 0 ;+80 -.ar_offset dd 1 ;+84 - -align 4 -w_scr_t2: -.size_x dw 16 ;+0 -rb 2+2+2 -.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 0 ;+36 -rb 4+2+2 -.run_x: -rb 32 -.all_redraw dd 0 ;+80 -.ar_offset dd 1 ;+84 - -;данные для диалога открытия файлов -align 4 -OpenDialog_data: -.type dd 0 ;0 - открыть, 1 - сохранить, 2 - выбрать дтректорию -.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 '/sys',0 - -communication_area_name: - db 'FFFFFFFF_open_dialog',0 -open_dialog_name: - db 'opendial',0 -communication_area_default_path: - db '/sys/File managers/',0 - -Filter: -dd Filter.end - Filter ;.1 -.1: -db 'CED',0 -db 'ASM',0 -.end: -db 0 - - -data_of_code dd 0 -sc system_colors - -image_data dd 0 ;память для преобразования картинки функциями libimg - -text_buffer db BUF_SIZE dup(0) -fn_obj_opt db 'ob_o.opt',0 -obj_opt ObjOpt - rb sizeof.ObjOpt*(MAX_OBJ_TYPES-1)+MAX_OBJ_CAPTIONS - db 0 ;eof options - -cur_x dd 0 -cur_y dd 0 -foc_obj dd 0 ;объект в фокусе -obj_count_txt_props dd 0 ;количество используемых текстовых свойств -obj_m_win dd 0 ;структура главного окна - - system_dir0 db '/sys/lib/' - lib0_name db 'box_lib.obj',0 - - system_dir1 db '/sys/lib/' - lib1_name db 'proc_lib.obj',0 - - system_dir2 db '/sys/lib/' - lib2_name db 'buf2d.obj',0 - - system_dir3 db '/sys/lib/' - lib3_name db 'libimg.obj',0 - - system_dir4 db '/sys/lib/' - lib4_name db 'msgbox.obj',0 - -align 4 -import_buf2d_lib: - dd sz_lib_init - buf2d_create dd sz_buf2d_create - buf2d_create_f_img dd sz_buf2d_create_f_img - buf2d_clear dd sz_buf2d_clear - buf2d_draw dd sz_buf2d_draw - buf2d_delete dd sz_buf2d_delete - buf2d_line dd sz_buf2d_line - buf2d_rect_by_size dd sz_buf2d_rect_by_size - buf2d_filled_rect_by_size dd sz_buf2d_filled_rect_by_size - ;buf2d_circle dd sz_buf2d_circle - buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2 - buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2 - buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8 - buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32 - buf2d_bit_blt dd sz_buf2d_bit_blt - buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp - buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha - ;buf2d_curve_bezier dd sz_buf2d_curve_bezier - buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix - buf2d_draw_text dd sz_buf2d_draw_text - ;buf2d_crop_color dd sz_buf2d_crop_color - buf2d_offset_h dd sz_buf2d_offset_h -dd 0,0 - sz_lib_init db 'lib_init',0 - sz_buf2d_create db 'buf2d_create',0 - sz_buf2d_create_f_img db 'buf2d_create_f_img',0 - sz_buf2d_clear db 'buf2d_clear',0 - sz_buf2d_draw db 'buf2d_draw',0 - sz_buf2d_delete db 'buf2d_delete',0 - sz_buf2d_line db 'buf2d_line',0 - sz_buf2d_rect_by_size db 'buf2d_rect_by_size',0 ;рисование прямоугольника, 2-я координата задана по размеру - sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0 - ;sz_buf2d_circle db 'buf2d_circle',0 ;рисование окружности - sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0 - sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0 - sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0 - sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0 - sz_buf2d_bit_blt db 'buf2d_bit_blt',0 - sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0 - sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0 - ;sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0 - sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0 - sz_buf2d_draw_text db 'buf2d_draw_text',0 - ;sz_buf2d_crop_color db 'buf2d_crop_color',0 - sz_buf2d_offset_h db 'buf2d_offset_h',0 - -align 4 -import_box_lib: - dd alib_init2 - - 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 - - init_checkbox dd aInit_checkbox - check_box_draw dd aCheck_box_draw - check_box_mouse dd aCheck_box_mouse - - scrollbar_ver_draw dd aScrollbar_ver_draw - scrollbar_hor_draw dd aScrollbar_hor_draw - - 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_node_move_up dd sz_tl_node_move_up - tl_node_move_down dd sz_tl_node_move_down - 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 - tl_node_poi_get_info dd sz_tl_node_poi_get_info - tl_node_poi_get_next_info dd sz_tl_node_poi_get_next_info - tl_node_poi_get_data dd sz_tl_node_poi_get_data - - ted_but_sumb_upper dd sz_ted_but_sumb_upper - ted_but_sumb_lover dd sz_ted_but_sumb_lover - 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 dd sz_ted_but_find - ted_text_colored dd sz_ted_text_colored - ;version_text_edit dd sz_ted_version - -dd 0,0 - - alib_init2 db 'lib_init',0 - - aEdit_box_draw db 'edit_box_draw',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 - - aInit_checkbox db 'init_checkbox2',0 - aCheck_box_draw db 'check_box_draw2',0 - aCheck_box_mouse db 'check_box_mouse2',0 - - aScrollbar_ver_draw db 'scrollbar_v_draw',0 - aScrollbar_hor_draw db 'scrollbar_h_draw',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_node_move_up db 'tl_node_move_up',0 - sz_tl_node_move_down db 'tl_node_move_down',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_tl_node_poi_get_info db 'tl_node_poi_get_info',0 - sz_tl_node_poi_get_next_info db 'tl_node_poi_get_next_info',0 - sz_tl_node_poi_get_data db 'tl_node_poi_get_data',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_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 db 'ted_but_find',0 - sz_ted_text_colored db 'ted_text_colored',0 - ;sz_ted_version db 'version_text_edit',0 - -align 4 -import_proc_lib: - 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_libimg: - dd alib_init1 - img_is_img dd aimg_is_img - img_info dd aimg_info - img_from_file dd aimg_from_file - img_to_file dd aimg_to_file - img_from_rgb dd aimg_from_rgb - img_to_rgb dd aimg_to_rgb - img_to_rgb2 dd aimg_to_rgb2 - img_decode dd aimg_decode - img_encode dd aimg_encode - img_create dd aimg_create - img_destroy dd aimg_destroy - img_destroy_layer dd aimg_destroy_layer - img_count dd aimg_count - img_lock_bits dd aimg_lock_bits - img_unlock_bits dd aimg_unlock_bits - img_flip dd aimg_flip - img_flip_layer dd aimg_flip_layer - img_rotate dd aimg_rotate - img_rotate_layer dd aimg_rotate_layer - img_draw dd aimg_draw - -dd 0,0 - - alib_init1 db 'lib_init',0 - aimg_is_img db 'img_is_img',0 ;определяет по данным, может ли библиотека сделать из них изображение - aimg_info db 'img_info',0 - aimg_from_file db 'img_from_file',0 - aimg_to_file db 'img_to_file',0 - aimg_from_rgb db 'img_from_rgb',0 - aimg_to_rgb db 'img_to_rgb',0 ;преобразование изображения в данные RGB - aimg_to_rgb2 db 'img_to_rgb2',0 - aimg_decode db 'img_decode',0 ;автоматически определяет формат графических данных - aimg_encode db 'img_encode',0 - aimg_create db 'img_create',0 - aimg_destroy db 'img_destroy',0 - aimg_destroy_layer db 'img_destroy_layer',0 - aimg_count db 'img_count',0 - aimg_lock_bits db 'img_lock_bits',0 - aimg_unlock_bits db 'img_unlock_bits',0 - aimg_flip db 'img_flip',0 - aimg_flip_layer db 'img_flip_layer',0 - aimg_rotate db 'img_rotate',0 - aimg_rotate_layer db 'img_rotate_layer',0 - aimg_draw db 'img_draw',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 - -;library structures -l_libs_start: - lib0 l_libs lib0_name, library_path, system_dir0, import_box_lib - lib1 l_libs lib1_name, library_path, system_dir1, import_proc_lib - lib2 l_libs lib2_name, library_path, system_dir2, import_buf2d_lib - lib3 l_libs lib3_name, library_path, system_dir3, import_libimg - lib4 l_libs lib4_name, library_path, system_dir4, import_msgbox_lib -load_lib_end: - - -align 16 -run_file_70 FileInfoBlock -open_b rb 560 - -IncludeIGlobals -i_end: -IncludeUGlobals - procinfo process_information - buf_cmd_lin rb 1024 - file_name rb 1024 ;icon file path - fp_obj_opt rb 1024 ;obj options file patch - rb 1024 - prop_thread: - rb 1024 - thread: ;вверху дочерний стек для окна сообщения - rb 1024 -stacktop: ;вверху стек основной программы - sys_path rb 1024 - library_path rb 1024 - plugin_path rb 4096 - openfile_path rb 4096 - filename_area rb 256 -mem: +; SPDX-License-Identifier: NOASSERTION +; + +; Text encoded with Code Page 866 - Cyrillic + +use32 + org 0 + db 'MENUET01' + dd 1,start,i_end,mem,stacktop,buf_cmd_lin,sys_path + +include '../../KOSfuncs.inc' +include '../../macros.inc' +include '../../proc32.inc' +include '../../load_lib.mac' +include '../../develop/libraries/box_lib/trunk/box_lib.mac' +include '../../dll.inc' +include '../../system/skincfg/kglobals.inc' +include '../../system/skincfg/unpacker.inc' +include 'strlen.inc' +include 'obj_codes.inc' + +@use_library mem.Alloc,mem.Free,mem.ReAlloc, dll.Load + +hed db 'kol_f_edit 29.09.20',0 + +sizeof.TreeList equ 20 ;need for element 'tree_list' + +BUF_STRUCT_SIZE equ 21 +buf2d_data equ dword[edi] ;данные буфера изображения +buf2d_w equ dword[edi+8] ;ширина буфера +buf2d_h equ dword[edi+12] ;высота буфера +buf2d_l equ word[edi+4] ;отступ слева +buf2d_t equ word[edi+6] ;отступ сверху +buf2d_size_lt equ dword[edi+4] ;отступ слева и справа для буфера +buf2d_color equ dword[edi+16] ;цвет фона буфера +buf2d_bits equ byte[edi+20] ;количество бит в 1-й точке изображения + + +MAX_CED_OBJECTS equ 200 +MAX_OPT_FIELDS equ 11 +MAX_OBJ_TYPES equ 17 ;максимальное число объектов +MAX_OBJ_CAPTIONS equ 1000 ;размер дополнительных подписей подписей +WND_CAPT_COLOR equ 0xb0d0ff +BUF_SIZE equ 1000 + +;modif +BIT_MOD_ACI equ 0 ;первоначальные настройки элементов +BIT_MOD_ACM equ 1 ;события от мыши +BIT_MOD_ACD equ 2 ;данные объектов +BIT_MOD_ABU equ 3 ;связывание кнопок +BIT_MOD_WI_CAPT equ 0 ;стиль окна подпись +BIT_MOD_WI_CORD_OTN_CL_OBL equ 1 ;стиль окна координаты относительно клиентской области +BIT_MOD_WI_REDR equ 2 ;стиль окна перерисовка окна +BIT_MOD_WI_GRAD equ 3 ;стиль окна градиент +BIT_MOD_CHE equ 0 ; ch_flag_en - выбран CheckBox +BIT_MOD_CHE_T equ 1 ;сверху +BIT_MOD_CHE_M equ 2 ;по центру +BIT_MOD_CHE_B equ 3 ;снизу +BIT_MOD_TXT_ASCII_0 equ 0 ;текст заканчив. 0 +BIT_MOD_TXT_NO_TRAN equ 1 ;текст прозрачный +BIT_MOD_TXT_CHAR2 equ 2 ;текст 2-м шрифтом +BIT_MOD_EDIT_FOC equ 0 ;EditBox в фокусе +BIT_MOD_EDIT_FIO equ 1 ; +;CPP_MOD_RE_GR equ 1 ;градиентный прямоугольник +BIT_MOD_BUT_NFON equ 0 ;стиль Button не рисовать кнопку +BIT_MOD_BUT_NBORD equ 1 ;стиль Button не рисовать границу +BIT_MOD_IMPORT_FUNCT_COMMENT equ 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 + m2m [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 [img_decode], [buf],ebx,0 + mov [image_data],eax + ;преобразуем изображение к формату rgb + stdcall [img_to_rgb2], [image_data],[buf] + ;удаляем временный буфер image_data + stdcall [img_destroy], [image_data] + @@: +} + +struct FileInfoBlock + Function dd ? + Position dd ? + Flags dd ? + Count dd ? + Buffer dd ? + rezerv db ? + FileName dd ? +ends + +struct object + id dd ? ;идентификатор объекта + txt rb MAX_LEN_OBJ_TXT ;текстовые свойства + lvl db 0 + clo db 0 + typid dd ? ;номер объекта определяющего тип переменной + modif dd ? ;битовые свойства +ends + +struct ObjOpt + dd ? + bl_type db ? + graph db ? + info rb 30 + caption rb MAX_OPT_CAPTION + Col rw MAX_OPT_FIELDS + img rw MAX_OPT_FIELDS ;индексы картинок (в файле 'icon.bmp') + bit_prop dd 0 ;битовые свойства (подписи, названия) + bit_val dd 0 ;битовые свойства (значения, константы) +ends + +SKIN_H equ 22 +SKIN_W1 equ 5 +SKIN_W2 equ 7 +SKIN_W3 equ 23 +fn_skin_1 db 'left.bmp',0 +fn_skin_2 db 'base.bmp',0 +fn_skin_3 db 'oper.bmp',0 +IMAGE_FILE_SKIN1_SIZE equ 3*(SKIN_W1+3)*SKIN_H+54 +IMAGE_FILE_SKIN2_SIZE equ 3*(SKIN_W2+3)*SKIN_H+54 +IMAGE_FILE_SKIN3_SIZE equ 3*(SKIN_W3+3)*SKIN_H+54 + +IMAGE_FILE_FONT1_SIZE equ 96*144*3 ;размер файла с 1-м системным шрифтом + +fn_icon db 'icon.bmp',0 +count_main_icons equ 35 ;число иконок в файле icon.bmp +bmp_icon rb 0x300*count_main_icons + +TREE_ICON_SYS16_BMP_SIZE equ 256*3*11+54 ;размер bmp файла с системными иконками +icon_tl_sys dd 0 ;указатеель на память для хранения системных иконок +icon_font_s1 dd 0 ;указатель на временную память для загрузки шрифта + +fn_syntax db 'asm.syn',0 ;имя загружаемого файла синтаксиса + +;макрос для проверки битового свойства +macro test_bool_prop obj_reg,n_prop +{ + bt dword[obj_reg+u_object.modif-u_object],n_prop +} + +include 'ced_wnd_m.inc' +include 'ced_wnd_prop.inc' ;файл с функциями окна свойств объекта +include 'ced_constr.inc' ;файл с функциями окна конструктора +include 'ced_code_g.inc' ;файл с функциями генерирования кодов + +align 4 +start: + load_libraries l_libs_start,load_lib_end + + ;проверка на сколько удачно загузилась наша либа + mov ebp,lib0 + cmp dword [ebp+ll_struc_size-4],0 + jz @f + mcall -1 ;exit not correct + @@: + mov ebp,lib1 + cmp dword [ebp+ll_struc_size-4],0 + jz @f + mcall -1 ;exit not correct + @@: + mov ebp,lib2 + cmp dword [ebp+ll_struc_size-4],0 + jz @f + mcall -1 ;exit not correct + @@: + mov ebp,lib3 + cmp dword [ebp+ll_struc_size-4],0 + jz @f + mcall -1 ;exit not correct + @@: + + ;задание размеров полей со свойствами + mov eax,prop_edits_top + mov ebx,16+6 ;ширина иконки + отступы + mov edi,edit2 + @@: + mov ed_top,eax ;отступ сверху + mov ed_left,ebx ;отступ слева + add edi,ed_struc_size + add eax,prop_edits_height + cmp edi,prop_wnd_edits_end + jl @b + + stdcall [buf2d_create], buf_fon + + mcall 48,3,sc,sizeof.system_colors + mcall 40,0x27 + + stdcall [tl_data_init], tree1 + stdcall [tl_data_init], tree2 + + copy_path fn_icon,sys_path,file_name,0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой + mov [run_file_70.Function], 0 + mov [run_file_70.Position], 54 + mov [run_file_70.Flags], 0 + mov [run_file_70.Count], 0x300*count_main_icons + mov [run_file_70.Buffer], bmp_icon + mov [run_file_70.rezerv], 0 + mov [run_file_70.FileName], file_name + mcall 70,run_file_70 + + cmp ebx,-1 + mov [err_ini0],1 + je @f ;if open file + mov [err_ini0],0 + mov dword[tree1.data_img],bmp_icon + mov dword[tree2.data_img],bmp_icon + @@: + + ;системные иконки 16*16 для tree_list + load_image_file 'tl_sys_16.png', icon_tl_sys,TREE_ICON_SYS16_BMP_SIZE + ;если изображение не открылось, то в icon_tl_sys будут + ;не инициализированные данные, но ошибки не будет, т. к. буфер нужного размера + mov eax,dword[icon_tl_sys] + mov dword[tree1.data_img_sys],eax + mov dword[tree2.data_img_sys],eax + + ;1-й файл скина + load_image_file fn_skin_1, icon_font_s1,IMAGE_FILE_SKIN1_SIZE + stdcall [buf2d_create_f_img], buf_skin1,[icon_font_s1] ;создаем буфер + stdcall mem.Free,[icon_font_s1] ;освобождаем память + ;2-й файл скина + load_image_file fn_skin_2, icon_font_s1,IMAGE_FILE_SKIN2_SIZE + stdcall [buf2d_create_f_img], buf_skin2,[icon_font_s1] ;создаем буфер + stdcall mem.Free,[icon_font_s1] ;освобождаем память + ;3-й файл скина + load_image_file fn_skin_3, icon_font_s1,IMAGE_FILE_SKIN3_SIZE + stdcall [buf2d_create_f_img], buf_skin3,[icon_font_s1] ;создаем буфер + stdcall mem.Free,[icon_font_s1] ;освобождаем память + + ;символы 1-го системного шрифта + load_image_file 'font6x9.bmp', icon_font_s1,IMAGE_FILE_FONT1_SIZE + stdcall [buf2d_create_f_img], buf_font,[icon_font_s1] ;создаем буфер + stdcall mem.Free,[icon_font_s1] ;освобождаем память + stdcall [buf2d_conv_24_to_8], buf_font,1 ;делаем буфер прозрачности 8 бит + stdcall [buf2d_convert_text_matrix], buf_font + + + copy_path fn_obj_opt,sys_path,fp_obj_opt,0 + ;load options file + mov [run_file_70.Position], 0 + mov [run_file_70.Count], sizeof.ObjOpt*MAX_OBJ_TYPES+MAX_OBJ_CAPTIONS + mov [run_file_70.Buffer], obj_opt + mov [run_file_70.FileName], fp_obj_opt + mcall 70,run_file_70 + + cmp ebx,-1 + mov [err_ini1],1 + je .open_end ;jmp if not open file + mov [err_ini1],0 + + mov eax,obj_opt ;добавляем объекты + @@: + mov ebx,dword[eax] + cmp ebx,0 + je @f + ;xor ecx,ecx ;в ecx будет индекс иконки + mov cx,word[eax+obj_opt.img-obj_opt] + cmp cx,0 + jge .zero + xor cx,cx ;что-бы не глючило с отрицательным индексом + .zero: + shl ecx,16 + stdcall dword[tl_node_add], tree1,ecx,eax ;добавляем название объекта + stdcall dword[tl_cur_next], tree1 ;переносим курсор вниз, что-бы не поменялся порядок + add eax,sizeof.ObjOpt ;переход на следующий объект + jmp @b + @@: + stdcall dword[tl_cur_beg], tree1 ;переносим курсор вверх + + .open_end: + + stdcall [OpenDialog_Init],OpenDialog_data ;подготовка диалога + stdcall [ted_init], tedit0 + copy_path fn_syntax,sys_path,file_name,0 + + ; *** init syntax file *** + ; проверяем размер файла синтаксиса + mov [run_file_70.Function], 5 + mov [run_file_70.Position], 0 + mov [run_file_70.Flags], 0 + mov dword[run_file_70.Count], 0 + mov dword[run_file_70.Buffer], open_b + mov byte[run_file_70+20], 0 + mov dword[run_file_70.FileName], file_name + mcall 70,run_file_70 + cmp eax,0 + jne @f + + mov edi,tedit0 + mov ecx,dword[open_b+32] ;+32 qword: размер файла в байтах + mov ted_syntax_file_size,ecx + + stdcall mem.Alloc,ecx ;выделяем память для файла синтаксиса + mov ted_syntax_file,eax + + ;пробуем открыть файл синтаксиса + call open_unpac_synt_file + jmp .end_0 + @@: + notify_window_run txt_not_syntax_file + .end_0: + + ;get cmd line + cmp [buf_cmd_lin],0 + je @f ;if file names exist + mov esi,buf_cmd_lin + call strlen ;eax=strlen + mov edi,[edit1.text] + mov [edit1.size],eax + mov ecx,eax + rep movsb + call but_open_proj + @@: + + + +align 4 +red_win: + call draw_window + +align 4 +still: + mcall 10 + + cmp al,1 + jne @f + call draw_window + @@: + cmp al,2 + jz key + cmp al,3 + jz button + cmp al,6 + jne @f + call mouse + @@: + + jmp still + +align 4 +draw_window: +pushad + mcall 12,1 + + xor eax,eax + mov ebx,20*65536+670 + mov ecx,20*65536+370 + mov edx,[sc.work] + or edx,0x33000000 + mov edi,hed + int 0x40 + + mov eax,8 ;button 'Open Project' + mov esi,0x80ff + mov ebx,230*65536+18 + mov ecx,5*65536+18 + mov edx,5 + int 0x40 + stdcall draw_icon, 22,231,6 ;22 - open + + ;button 'Save Project' + mov ebx,250*65536+18 + mov ecx,5*65536+18 + mov edx,6 + int 0x40 + stdcall draw_icon, 17,251,6 ;17 - save + + ;button 'Show Constructor' + mov ebx,310*65536+18 + mov ecx,5*65536+18 + mov edx,11 + int 0x40 + stdcall draw_icon, 12,311,6 ;12 - window + + ;button 'Show Code' + mov ebx,330*65536+18 + mov edx,12 + int 0x40 + stdcall draw_icon, 11,331,6 ;11 - text + + ;button 'Update: Code, Constructor' + mov ebx,350*65536+18 + mov edx,13 + int 0x40 + stdcall draw_icon, 32,351,6 ;32 - update + + ;button 'Save Code' + mov ebx,370*65536+18 + mov edx,14 + int 0x40 + stdcall draw_icon, 17,371,6 ;17 - save + + ;button ']P' + mov ebx,390*65536+18 + mov edx,15 + int 0x40 + stdcall draw_icon, 18,391,6 ;18 - знак конца абзаца + + ;button 'Show color text' + mov ebx,410*65536+18 + mov edx,16 + int 0x40 + stdcall draw_icon, 19,411,6 + + ;button 'Add Object' + mov ebx,125*65536+18 + mov ecx,30*65536+18 + mov edx,31 + int 0x40 + stdcall draw_icon, 14,126,31 ;14 - add object + + ;button 'Move Up' + mov ebx,155*65536+18 + mov edx,21 + int 0x40 + stdcall draw_icon, 23,156,31 ;23 - move up + + ;button 'Move Down' + mov ebx,175*65536+18 + mov edx,22 + int 0x40 + stdcall draw_icon, 24,176,31 ;24 - move down + + ;button 'Copy' + mov ebx,195*65536+18 + mov edx,23 + int 0x40 + stdcall draw_icon, 30,196,31 ;30 - copy + + ;button 'Paste' + mov ebx,215*65536+18 + mov edx,24 + int 0x40 + stdcall draw_icon, 31,216,31 ;31 - paste + + ;button 'Property' + mov ebx,235*65536+18 + mov edx,25 + int 0x40 + stdcall draw_icon, 7,236,31 ;7 - property + + ;button 'Undo' + mov ebx,255*65536+18 + mov edx,26 + int 0x40 + stdcall draw_icon, 33,256,31 ;33 - undo + + ;button 'Redo' + mov ebx,275*65536+18 + mov edx,27 + int 0x40 + stdcall draw_icon, 34,276,31 ;34 - redo + +; 10 30 50 70 90 + + cmp [err_opn],1 + jne @f + mcall 4,10*65536+35,0x80ff0000,txtErrOpen + @@: + + stdcall [edit_box_draw], edit1 + stdcall [edit_box_draw], edit_sav + + mov dword[w_scr_t1.all_redraw],1 + ;stdcall [scrollbar_ver_draw], w_scr_t1 + stdcall [tl_draw], tree1 + mov dword[w_scr_t2.all_redraw],1 + ;stdcall [scrollbar_ver_draw], w_scr_t2 + stdcall [tl_draw], tree2 + + cmp byte[show_mode],0 ;условие видимости окна конструктора + jne @f + stdcall [buf2d_draw], buf_fon + @@: + cmp byte[show_mode],1 ;условие видимости текстового окна + jne @f + stdcall [ted_draw], tedit0 + @@: + mcall 12,2 +popad + ret + +align 4 +mouse: + stdcall [edit_box_mouse], edit1 + stdcall [edit_box_mouse], edit_sav + stdcall [tl_mouse], tree1 + stdcall [tl_mouse], tree2 + cmp byte[show_mode],1 ;условие видимости текстового окна + jne @f + stdcall [ted_mouse], tedit0 + @@: + ret + + +align 4 +key: + mcall 2 + stdcall [edit_box_key], edit1 + stdcall [edit_box_key], edit_sav + stdcall [tl_key], tree1 + stdcall [tl_key], tree2 + + jmp still + +align 4 +button: + mcall 17 + cmp ah,5 + jne @f + call but_open_proj + jmp still + @@: + cmp ah,6 + jne @f + call but_save_proj + jmp still + @@: + ;cmp ah,10 + ;jne @f + ;call but_element_change + ;@@: + cmp ah,11 + jne @f + call but_show_constructor + jmp still + @@: + cmp ah,12 + jne @f + call but_show_code + jmp still + @@: + cmp ah,13 + jne @f + call but_update + jmp still + @@: + cmp ah,14 + jne @f + call but_save_asm + jmp still + @@: + cmp ah,15 + jne @f + call but_show_invis + jmp still + @@: + cmp ah,16 + jne @f + call but_show_syntax + jmp still + @@: + cmp ah,21 + jne @f + call but_obj_move_up + jmp still + @@: + cmp ah,22 + jne @f + call but_obj_move_down + jmp still + @@: + cmp ah,23 + jne @f + call but_obj_copy + jmp still + @@: + cmp ah,24 + jne @f + call but_obj_paste + jmp still + @@: + cmp ah,25 + jne @f + call on_file_object_select + jmp still + @@: + cmp ah,26 + jne @f + stdcall [tl_info_undo], tree2 + stdcall [tl_draw], tree2 + jmp still + @@: + cmp ah,27 + jne @f + stdcall [tl_info_redo], tree2 + stdcall [tl_draw], tree2 + jmp still + @@: + cmp ah,31 + jne @f + call on_add_object + jmp still + @@: + cmp ah,1 + jne still +.exit: + stdcall mem.Free,[icon_tl_sys] + mov dword[tree1.data_img],0 + mov dword[tree2.data_img],0 + mov dword[tree1.data_img_sys],0 + mov dword[tree2.data_img_sys],0 + stdcall dword[tl_data_clear], tree1 + stdcall dword[tl_data_clear], tree2 + stdcall [buf2d_delete],buf_fon ;удаляем буфер + stdcall [buf2d_delete],buf_font ;удаляем буфер + stdcall [buf2d_delete],buf_skin1 + stdcall [buf2d_delete],buf_skin2 + stdcall [buf2d_delete],buf_skin3 + stdcall [ted_delete], tedit0 + cmp dword[unpac_mem],0 + je @f + stdcall mem.Free,[unpac_mem] + @@: + mcall -1 + +align 4 +open_file_data dd 0 ;указатель на память для открытия файлов +open_file_size dd 0 ;размер открытого файла + +align 4 +but_open_proj: + copy_path open_dialog_name,communication_area_default_path,file_name,0 + pushad + mov [OpenDialog_data.type],0 + stdcall [OpenDialog_Start],OpenDialog_data + cmp [OpenDialog_data.status],2 + je .open_end + ;код при удачном открытии диалога + + mov [run_file_70.Function], 5 + mov [run_file_70.Position], 0 + mov [run_file_70.Flags], 0 + mov dword[run_file_70.Count], 0 + mov dword[run_file_70.Buffer], open_b + mov byte[run_file_70+20], 0 + mov dword[run_file_70.FileName], openfile_path + mcall 70,run_file_70 + + mov ecx,dword[open_b+32] ;+32 qword: размер файла в байтах + mov [open_file_size],ecx + stdcall mem.ReAlloc,[open_file_data],ecx + mov [open_file_data],eax + + mov [run_file_70.Function], 0 + mov [run_file_70.Position], 0 + mov [run_file_70.Flags], 0 + mov dword[run_file_70.Count], ecx + m2m dword[run_file_70.Buffer], eax + mov byte[run_file_70+20], 0 + mov dword[run_file_70.FileName], openfile_path + mcall 70,run_file_70 ;загружаем файл + cmp ebx,0xffffffff + mov [err_opn],1 + je .open_end ;if open file + mov [err_opn],0 + stdcall [edit_box_set_text], edit1,openfile_path + + stdcall dword[tl_info_clear], tree2 + mov eax,[open_file_data] ;добавляем объекты + @@: + mov ebx,dword[eax] + cmp ebx,0 + je @f + + call find_obj_in_opt ;edi = pointer to ObjOpt struct + + mov cx,word[edi+obj_opt.img-obj_opt] + cmp cx,0 + jge .zero + xor cx,cx ;что-бы не глючило с отрицательным индексом + .zero: + shl ecx,16 ;в ecx индекс иконки + mov cl,byte[eax+u_object.lvl-u_object] ;уровень объекта + + ;tl_node_close_open - не подходит, т.к. действует на узлы имеющие дочерние + mov ch,byte[eax+u_object.clo-u_object] ;закрытый/открытый + + stdcall dword[tl_node_add], tree2,ecx,eax ;добавляем объект + + stdcall dword[tl_cur_next], tree2 ;переносим курсор вниз, что-бы не поменялся порядок + add eax,sizeof.object ;переход на следующий объект + jmp @b + @@: + stdcall dword[tl_cur_beg], tree2 ;переносим курсор вверх + + mov [foc_obj],0 + call draw_constructor + call code_gen + .open_end: + call draw_window ;перерисовка окна идет в любом случае, даже если файл не открылся + popad + ret + +;сохранение файла проэкта на диск +align 4 +but_save_proj: + copy_path open_dialog_name,communication_area_default_path,file_name,0 + pushad + mov [OpenDialog_data.type],1 + stdcall [OpenDialog_Start],OpenDialog_data + cmp [OpenDialog_data.status],2 + je .end_save_file + ;код при удачном открытии диалога + + ;берем размер памяти, необходимой для сохранения файла + xor ecx,ecx + stdcall [tl_node_poi_get_info], tree2,0 + @@: + cmp eax,0 + je @f + inc ecx + stdcall [tl_node_poi_get_next_info], tree2,eax ;переходим к следущему узлу + jmp @b + @@: + ;movzx eax,word[tree2.info_size] + imul ecx,sizeof.object ;eax + add ecx,4 ;метка конца файла + mov [open_file_size],ecx + stdcall mem.ReAlloc,[open_file_data],ecx + mov [open_file_data],eax + + mov edi,[open_file_data] + stdcall [tl_node_poi_get_info], tree2,0 + mov edx,eax + @@: + cmp edx,0 + je @f + stdcall [tl_node_poi_get_data], tree2,edx + mov esi,eax ;получаем данные узла + + mov bl,byte[edx+2] ;bl - уровень объекта + mov byte[esi+u_object.lvl-u_object],bl + mov bl,byte[edx+3] ;bl - открытие/закрытие объекта + mov byte[esi+u_object.clo-u_object],bl + + ;вычисляем новый индекс для типа объекта + mov ebx,[esi+u_object.typid-u_object] ;ebx - тип объекта + ;сохраняем тип объекта + push ebx + imul ebx,sizeof.TreeList + add ebx,[tree2.data_nodes] ;ebx - указатель объект указывающий тип + stdcall get_obj_npp,ebx + mov [esi+u_object.typid-u_object],eax + mov eax,esi + ;копируем объект в память для сохранения + movzx ecx,word[tree2.info_size] + cld + rep movsb + ;восстанавливаем тип объекта + pop dword[eax+u_object.typid-u_object] + + stdcall [tl_node_poi_get_next_info], tree2,edx + mov edx,eax ;переходим к следущему узлу + jmp @b + @@: + mov dword[edi],0 ;метка конца файла + add edi,4 + + stdcall [edit_box_set_text], edit1,openfile_path + mov ecx,[open_file_size] ;ecx - размер сохраняемого файла + mov [run_file_70.Function], 2 + mov [run_file_70.Position], 0 + mov [run_file_70.Flags], 0 + mov [run_file_70.Count], ecx + m2m [run_file_70.Buffer], [open_file_data] + mov [run_file_70.rezerv], 0 + mov dword[run_file_70.FileName], openfile_path + mcall 70,run_file_70 + + .end_save_file: + popad + ret + +;берет номер по порядку по указателю на структуру объекта +;output: +; eax - номер объекта +align 4 +proc get_obj_npp uses ebx ecx, p_obj_str:dword + mov ecx,2 + mov ebx,[p_obj_str] + + stdcall [tl_node_poi_get_info], tree2,0 + @@: + cmp eax,0 + je .no_exist + cmp eax,ebx + je @f + + inc ecx + stdcall [tl_node_poi_get_next_info], tree2,eax ;переходим к следущему узлу + jmp @b + .no_exist: ;когда идет ссылка на не существующий объект + xor ecx,ecx ;обнуляем указатель, что-бы не сохранять в файл мусор + @@: + mov eax,ecx + ret +endp + +;функция для сохранения созданного asm файла +align 4 +but_save_asm: + push edi + mov edi, tedit0 + + stdcall [ted_save_file],edi,run_file_70,[edit_sav.text] + cmp ted_err_save,0 + jne @f + stdcall [mb_create],msgbox_1,thread ;message: Файл был сохранен + @@: + pop edi + ret + +;функция для показа/скрытия невидимых символов +align 4 +but_show_invis: + push edi + mov edi,tedit0 + + xor ted_mode_invis,1 + cmp byte[show_mode],1 ;условие видимости текстового окна + jne @f + stdcall [ted_draw],edi + @@: + pop edi + ret + +; +align 4 +but_show_syntax: + push edi + mov edi,tedit0 + + xor ted_mode_color,1 + cmp byte[show_mode],1 ;условие видимости текстового окна + jne @f + stdcall [ted_draw],edi + @@: + pop edi + ret + +align 4 +ted_save_err_msg: + mov byte[msgbox_0.err],al + stdcall [mb_create],msgbox_0,thread ;message: Can-t save text file! + ret + +;функция вызываемая при нажатии Enter в окне tree2 +;обновляет текстовые поля значениями параметров взятых из объектов +;функция обратная к данной but_element_change +align 4 +on_file_object_select: + cmp byte[prop_wnd_run],0 + jne @f + mov byte[prop_wnd_run],1 + stdcall [tl_node_get_data], tree2 + mov dword[foc_obj],eax + cmp eax,0 + je @f + pushad + ;все действия по настройке элементов управления выполняются в окне со свойствами + mcall 51,1,prop_start,prop_thread + popad + @@: + ;call draw_window + ret + +;функция вызываемая при нажатии Enter в окне tree1 +;добавляет новый объект в окно tree2 +align 4 +on_add_object: +push eax ebx ecx + stdcall [tl_node_get_data], tree1 + cmp eax,0 + je @f + xor ecx,ecx + mov cx,word[eax+obj_opt.img-obj_opt] ;cx - индекс главной иконки добавляемого объекта + + cmp ecx,count_main_icons ;в старших битах ecx будут 0, потому отрицательные числа тоже проверяются + jl .end_0 + ;если иконки нет, по умолчанию берем 0-ю + xor cx,cx + .end_0: + + shl ecx,16 + stdcall mem_clear, u_object,sizeof.object + mov ebx,dword[eax] + mov dword[u_object.id],ebx + stdcall dword[tl_node_add], tree2,ecx,u_object ;добавляем объект + @@: +pop ecx ebx eax + call draw_window + ret + +align 4 +but_ctrl_o: + ret +align 4 +but_ctrl_n: + ret +align 4 +but_ctrl_s: + ret + +;открытие и распаковка файла подсветки синтаксиса +;input: +; ted_syntax_file - буфер для открываемого файла синтаксиса +; ted_syntax_file_size - размер открываемого файла синтаксиса +;output: +; ebx - число прочитанных байт из файла +align 4 +open_unpac_synt_file: +push eax edi esi + mov edi, tedit0 + mov [run_file_70.Function], 0 + mov [run_file_70.Position], 0 + mov [run_file_70.Flags], 0 + mov ecx, ted_syntax_file_size + mov dword[run_file_70.Count], ecx + m2m dword[run_file_70.Buffer], ted_syntax_file + mov byte[run_file_70+20], 0 + mov [run_file_70.FileName], file_name + mcall 70, run_file_70 + cmp ebx,-1 + jne .end_0 + ;если возникли ошибки при открытии файла синтаксиса + mov byte[txt_not_syntax_file.err],'0' + add byte[txt_not_syntax_file.err],al + notify_window_run txt_not_syntax_file ;Can-t open color options file! + jmp @f + .end_0: + + mov eax,ted_syntax_file + cmp dword[eax],'KPCK' + jne .end_unpack + + mov ecx,dword[eax+4] ;ecx - размер файла синтаксиса после распаковки + cmp dword[unpac_mem],0 + jne .end_1 + ;первоначальное выделение временной памяти для распаковки файла + stdcall mem.Alloc,ecx + mov [unpac_mem],eax + mov [unpac_mem_size],ecx + .end_1: + cmp dword[unpac_mem_size],ecx + jge .end_2 + ;если для распакованого файла не хватает временной памяти + stdcall mem.ReAlloc,[unpac_mem],ecx ;заново выделяем временную память + mov [unpac_mem],eax + mov [unpac_mem_size],ecx + .end_2: + + ;распаковка файла во временную память + stdcall unpack,ted_syntax_file,[unpac_mem] + + cmp ted_syntax_file_size,ecx + jge .end_3 + ;если для распакованого файла не хватает памяти + stdcall mem.ReAlloc,ted_syntax_file,ecx ;заново выделяем память + mov ted_syntax_file,eax + mov ted_syntax_file_size,ecx + .end_3: + + ;копирование распакованного файла из временной памяти в память элемента + mov edi,ted_syntax_file + mov esi,[unpac_mem] + cld + rep movsb + + .end_unpack: + ;применение файла подсветки + stdcall [ted_init_syntax_file], tedit0 + @@: +pop esi edi eax + ret + +align 4 +txt_not_syntax_file: + db 'Ошибка при открытии файла с цветовыми настройками! (Код ошибки =' + .err: db '?' + db ')',0 + +align 4 +buf_fon: ;фоновый буфер + dd 0 ;указатель на буфер изображения + dw 310 ;+4 left + dw 50 ;+6 top + dd 340 ;+8 w + dd 280 ;+12 h + dd 0xffffff ;+16 color + db 24 ;+20 bit in pixel + +align 4 +buf_font: ;буфер матрицы со шрифтом + dd 0 ;указатель на буфер изображения + dw 25 ;+4 left + dw 25 ;+6 top + dd 96 ;+8 w + dd 144 ;+12 h + dd 0 ;+16 color + db 24 ;+20 bit in pixel + +align 4 +buf_skin1: + dd 0 ;указатель на буфер изображения + dw 0 ;+4 left + dw 0 ;+6 top + dd SKIN_W1 ;+8 w + dd SKIN_H ;+12 h + dd 0 ;+16 color + db 24 ;+20 bit in pixel +align 4 +buf_skin2: + dd 0 ;указатель на буфер изображения + dw 0 ;+4 left + dw 0 ;+6 top + dd SKIN_W2 ;+8 w + dd SKIN_H ;+12 h + dd 0 ;+16 color + db 24 ;+20 bit in pixel +align 4 +buf_skin3: + dd 0 ;указатель на буфер изображения + dw 0 ;+4 left + dw 0 ;+6 top + dd SKIN_W3 ;+8 w + dd SKIN_H ;+12 h + dd 0 ;+16 color + db 24 ;+20 bit in pixel + +show_mode db 0 ;режим для показа определенного окна +txtErrOpen db 'Не найден файл, проверьте правильность имени',0 +txtErrIni1 db 'Не открылся файл с опциями',0 +err_opn db 0 ;рез. открытия файла проэкта +err_ini0 db 0 ;рез. открытия файла с иконками +err_ini1 db 0 ;рез. открытия файла с опциями +unpac_mem dd 0 +unpac_mem_size dd 0 + +edit1 edit_box 210, 10, 5, 0xffffff, 0xff80, 0xff, 0xff0000, 0x4080, 300, ed_text1, mouse_dd, 0, 7, 7 + +edit2 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text2, mouse_dd, 0 +edit3 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text3, mouse_dd, 0 +edit4 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text4, mouse_dd, 0 +edit5 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text5, mouse_dd, 0 +edit6 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text6, mouse_dd, 0 +edit7 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text7, mouse_dd, 0 +edit8 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text8, mouse_dd, 0 +edit9 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text9, mouse_dd, 0 +edit10 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text10, mouse_dd, 0 +edit11 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text11, mouse_dd, 0 +edit12 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text12, mouse_dd, 0 +prop_wnd_edits_end: ;конец текстовых полей, отвечающих за свойства + +edit_sav edit_box 210, 310, 30, 0xffffff, 0xff80, 0xff, 0xff0000, 0x4080, 300, ed_text_sav, mouse_dd, 0 + + +ed_text1 db '/hd0/1/',0 + rb 295 +ed_text2 rb MAX_LEN_OBJ_TXT+2 +ed_text3 rb MAX_LEN_OBJ_TXT+2 +ed_text4 rb MAX_LEN_OBJ_TXT+2 +ed_text5 rb MAX_LEN_OBJ_TXT+2 +ed_text6 rb MAX_LEN_OBJ_TXT+2 +ed_text7 rb MAX_LEN_OBJ_TXT+2 +ed_text8 rb MAX_LEN_OBJ_TXT+2 +ed_text9 rb MAX_LEN_OBJ_TXT+2 +ed_text10 rb MAX_LEN_OBJ_TXT+2 +ed_text11 rb MAX_LEN_OBJ_TXT+2 +ed_text12 rb MAX_LEN_OBJ_TXT+2 +ed_text_sav rb 302 + +txt_null db 'null',0 +mouse_dd dd ? + +el_focus dd tree1 +;дерево со списком возможных типов объектов +tree1 tree_list sizeof.ObjOpt,20+2, tl_key_no_edit+tl_draw_par_line+tl_list_box_mode,\ + 16,16, 0xffffff,0xb0d0ff,0xd000ff, 5,50,125,280, 0,obj_opt.info-obj_opt,0, el_focus,\ + w_scr_t1,on_add_object +;дерево с объектами в пользовательском файле +tree2 tree_list sizeof.object,MAX_CED_OBJECTS+2, tl_draw_par_line,\ + 16,16, 0xffffff,0xb0d0ff,0xd000ff, 155,50,130,280, 13,u_object.txt-u_object,MAX_LEN_OBJ_TXT, el_focus,\ + w_scr_t2,on_file_object_select + +msgbox_0: + 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_1: + db 1,0 + db ':)',0 + db 'File was saved',0 + db 'Ok',0 + db 0 + +struct TexSelect + x0 dd ? + y0 dd ? + x1 dd ? + y1 dd ? +ends +;------------------------------------------------------------------------------ +align 4 +tedit0: ;структура текстового редактора + .wnd BOX 310,50,325,260 ;+ 0 + .rec BOX 30,13,7,10 ;+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 25002 ;+86 максимальное число символов в одном документе + .count_colors_text dd 1 ;+90 колличество цветов текста + .count_key_words dd 0 ;+94 колличество ключевых слов + .color_cursor dd 0xff0000 ;+98 цвет курсора + .color_wnd_capt dd 0x0080c0 ;+102 цвет полей вокруг окна + .color_wnd_work dd 0x0 ;+106 цвет фона окна + .color_wnd_bord dd 0xffffff ;+110 цвет текста на полях + .color_select dd 0x0000ff ;+114 цвет выделения + .color_cur_text dd 0xffff00 ;+118 цвет символа под курсором + .color_wnd_text dd 0x80ffff ;+122 цвет текста в окне + .syntax_file dd 0 ;+126 указатель на начало файла синтаксиса + .syntax_file_size dd 55*1024 ;+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 scrol_w1 ;+174 вертикальный скроллинг + .scr_h dd scrol_h1 ;+178 горизонтальный скроллинг + .arr_key_pos dd 0 ;+182 указатель на массив позиций ключевых слов + .buffer dd text_buffer ;+186 указатель на буфер копирования/вставки + .buffer_find dd 0 ;+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 but_ctrl_o ;+198 указатель на функцию вызываемую при нажатии Ctrl+O (открытие файла) + .fun_on_key_ctrl_f dd 0 ;+202 ... Ctrl+F (вызова/скрытия панели поиска) + .fun_on_key_ctrl_n dd but_ctrl_n ;+206 ... Ctrl+N (создание нового документа) + .fun_on_key_ctrl_s dd 0 ;+210 ... Ctrl+S + .buffer_size dd BUF_SIZE ;+214 размер буфера копирования/вставки + .fun_find_err dd 0 ;+218 указатель на функцию вызываемую если поиск закончился неудачно + .fun_init_synt_err dd 0 ;+222 указатель на функцию вызываемую при ошибочном открытии файла синтаксиса + .fun_draw_panel_buttons dd 0 ;+226 указатель на функцию рисования панели с кнопками + .fun_draw_panel_find dd 0 ;+230 указатель на функцию рисования панели поиска + .fun_draw_panel_syntax dd 0 ;+234 указатель на функцию рисования панели синтаксиса + .fun_save_err dd ted_save_err_msg ;+238 указатель на функцию вызываемую если сохранение файла закончилось неудачно + .increase_size dd 1000 ;+242 число символов на которые будет увечиваться память при нехватке + .ptr_free_symb dd ? ;+246 указатель на свободную память, в которую можно добавлять символ (используется внутри элемента для ускорения вставки текста) +;------------------------------------------------------------------------------ +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 32 +.all_redraw dd 0 ;+80 +.ar_offset dd 1 ;+84 +;--------------------------------------------------------------------- +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 32 +.all_redraw dd 0 ;+80 +.ar_offset dd 1 ;+84 + + + +align 4 +w_scr_t1: +.size_x dw 16 ;+0 +rb 2+2+2 +.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 0 ;+36 +rb 4+2+2 +.run_x: +rb 32 +.all_redraw dd 0 ;+80 +.ar_offset dd 1 ;+84 + +align 4 +w_scr_t2: +.size_x dw 16 ;+0 +rb 2+2+2 +.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 0 ;+36 +rb 4+2+2 +.run_x: +rb 32 +.all_redraw dd 0 ;+80 +.ar_offset dd 1 ;+84 + +;данные для диалога открытия файлов +align 4 +OpenDialog_data: +.type dd 0 ;0 - открыть, 1 - сохранить, 2 - выбрать дтректорию +.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 '/sys',0 + +communication_area_name: + db 'FFFFFFFF_open_dialog',0 +open_dialog_name: + db 'opendial',0 +communication_area_default_path: + db '/sys/File managers/',0 + +Filter: +dd Filter.end - Filter ;.1 +.1: +db 'CED',0 +db 'ASM',0 +.end: +db 0 + + +data_of_code dd 0 +sc system_colors + +image_data dd 0 ;память для преобразования картинки функциями libimg + +text_buffer db BUF_SIZE dup(0) +fn_obj_opt db 'ob_o.opt',0 +obj_opt ObjOpt + rb sizeof.ObjOpt*(MAX_OBJ_TYPES-1)+MAX_OBJ_CAPTIONS + db 0 ;eof options + +cur_x dd 0 +cur_y dd 0 +foc_obj dd 0 ;объект в фокусе +obj_count_txt_props dd 0 ;количество используемых текстовых свойств +obj_m_win dd 0 ;структура главного окна + + system_dir0 db '/sys/lib/' + lib0_name db 'box_lib.obj',0 + + system_dir1 db '/sys/lib/' + lib1_name db 'proc_lib.obj',0 + + system_dir2 db '/sys/lib/' + lib2_name db 'buf2d.obj',0 + + system_dir3 db '/sys/lib/' + lib3_name db 'libimg.obj',0 + + system_dir4 db '/sys/lib/' + lib4_name db 'msgbox.obj',0 + +align 4 +import_buf2d_lib: + dd sz_lib_init + buf2d_create dd sz_buf2d_create + buf2d_create_f_img dd sz_buf2d_create_f_img + buf2d_clear dd sz_buf2d_clear + buf2d_draw dd sz_buf2d_draw + buf2d_delete dd sz_buf2d_delete + buf2d_line dd sz_buf2d_line + buf2d_rect_by_size dd sz_buf2d_rect_by_size + buf2d_filled_rect_by_size dd sz_buf2d_filled_rect_by_size + ;buf2d_circle dd sz_buf2d_circle + buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2 + buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2 + buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8 + buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32 + buf2d_bit_blt dd sz_buf2d_bit_blt + buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp + buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha + ;buf2d_curve_bezier dd sz_buf2d_curve_bezier + buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix + buf2d_draw_text dd sz_buf2d_draw_text + ;buf2d_crop_color dd sz_buf2d_crop_color + buf2d_offset_h dd sz_buf2d_offset_h +dd 0,0 + sz_lib_init db 'lib_init',0 + sz_buf2d_create db 'buf2d_create',0 + sz_buf2d_create_f_img db 'buf2d_create_f_img',0 + sz_buf2d_clear db 'buf2d_clear',0 + sz_buf2d_draw db 'buf2d_draw',0 + sz_buf2d_delete db 'buf2d_delete',0 + sz_buf2d_line db 'buf2d_line',0 + sz_buf2d_rect_by_size db 'buf2d_rect_by_size',0 ;рисование прямоугольника, 2-я координата задана по размеру + sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0 + ;sz_buf2d_circle db 'buf2d_circle',0 ;рисование окружности + sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0 + sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0 + sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0 + sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0 + sz_buf2d_bit_blt db 'buf2d_bit_blt',0 + sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0 + sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0 + ;sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0 + sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0 + sz_buf2d_draw_text db 'buf2d_draw_text',0 + ;sz_buf2d_crop_color db 'buf2d_crop_color',0 + sz_buf2d_offset_h db 'buf2d_offset_h',0 + +align 4 +import_box_lib: + dd alib_init2 + + 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 + + init_checkbox dd aInit_checkbox + check_box_draw dd aCheck_box_draw + check_box_mouse dd aCheck_box_mouse + + scrollbar_ver_draw dd aScrollbar_ver_draw + scrollbar_hor_draw dd aScrollbar_hor_draw + + 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_node_move_up dd sz_tl_node_move_up + tl_node_move_down dd sz_tl_node_move_down + 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 + tl_node_poi_get_info dd sz_tl_node_poi_get_info + tl_node_poi_get_next_info dd sz_tl_node_poi_get_next_info + tl_node_poi_get_data dd sz_tl_node_poi_get_data + + ted_but_sumb_upper dd sz_ted_but_sumb_upper + ted_but_sumb_lover dd sz_ted_but_sumb_lover + 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 dd sz_ted_but_find + ted_text_colored dd sz_ted_text_colored + ;version_text_edit dd sz_ted_version + +dd 0,0 + + alib_init2 db 'lib_init',0 + + aEdit_box_draw db 'edit_box_draw',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 + + aInit_checkbox db 'init_checkbox2',0 + aCheck_box_draw db 'check_box_draw2',0 + aCheck_box_mouse db 'check_box_mouse2',0 + + aScrollbar_ver_draw db 'scrollbar_v_draw',0 + aScrollbar_hor_draw db 'scrollbar_h_draw',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_node_move_up db 'tl_node_move_up',0 + sz_tl_node_move_down db 'tl_node_move_down',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_tl_node_poi_get_info db 'tl_node_poi_get_info',0 + sz_tl_node_poi_get_next_info db 'tl_node_poi_get_next_info',0 + sz_tl_node_poi_get_data db 'tl_node_poi_get_data',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_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 db 'ted_but_find',0 + sz_ted_text_colored db 'ted_text_colored',0 + ;sz_ted_version db 'version_text_edit',0 + +align 4 +import_proc_lib: + 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_libimg: + dd alib_init1 + img_is_img dd aimg_is_img + img_info dd aimg_info + img_from_file dd aimg_from_file + img_to_file dd aimg_to_file + img_from_rgb dd aimg_from_rgb + img_to_rgb dd aimg_to_rgb + img_to_rgb2 dd aimg_to_rgb2 + img_decode dd aimg_decode + img_encode dd aimg_encode + img_create dd aimg_create + img_destroy dd aimg_destroy + img_destroy_layer dd aimg_destroy_layer + img_count dd aimg_count + img_lock_bits dd aimg_lock_bits + img_unlock_bits dd aimg_unlock_bits + img_flip dd aimg_flip + img_flip_layer dd aimg_flip_layer + img_rotate dd aimg_rotate + img_rotate_layer dd aimg_rotate_layer + img_draw dd aimg_draw + +dd 0,0 + + alib_init1 db 'lib_init',0 + aimg_is_img db 'img_is_img',0 ;определяет по данным, может ли библиотека сделать из них изображение + aimg_info db 'img_info',0 + aimg_from_file db 'img_from_file',0 + aimg_to_file db 'img_to_file',0 + aimg_from_rgb db 'img_from_rgb',0 + aimg_to_rgb db 'img_to_rgb',0 ;преобразование изображения в данные RGB + aimg_to_rgb2 db 'img_to_rgb2',0 + aimg_decode db 'img_decode',0 ;автоматически определяет формат графических данных + aimg_encode db 'img_encode',0 + aimg_create db 'img_create',0 + aimg_destroy db 'img_destroy',0 + aimg_destroy_layer db 'img_destroy_layer',0 + aimg_count db 'img_count',0 + aimg_lock_bits db 'img_lock_bits',0 + aimg_unlock_bits db 'img_unlock_bits',0 + aimg_flip db 'img_flip',0 + aimg_flip_layer db 'img_flip_layer',0 + aimg_rotate db 'img_rotate',0 + aimg_rotate_layer db 'img_rotate_layer',0 + aimg_draw db 'img_draw',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 + +;library structures +l_libs_start: + lib0 l_libs lib0_name, library_path, system_dir0, import_box_lib + lib1 l_libs lib1_name, library_path, system_dir1, import_proc_lib + lib2 l_libs lib2_name, library_path, system_dir2, import_buf2d_lib + lib3 l_libs lib3_name, library_path, system_dir3, import_libimg + lib4 l_libs lib4_name, library_path, system_dir4, import_msgbox_lib +load_lib_end: + + +align 16 +run_file_70 FileInfoBlock +open_b rb 560 + +IncludeIGlobals +i_end: +IncludeUGlobals + procinfo process_information + buf_cmd_lin rb 1024 + file_name rb 1024 ;icon file path + fp_obj_opt rb 1024 ;obj options file patch + rb 1024 + prop_thread: + rb 1024 + thread: ;вверху дочерний стек для окна сообщения + rb 1024 +stacktop: ;вверху стек основной программы + sys_path rb 1024 + library_path rb 1024 + plugin_path rb 4096 + openfile_path rb 4096 + filename_area rb 256 +mem: diff --git a/programs/develop/libraries/box_lib/trunk/box_lib.asm b/programs/develop/libraries/box_lib/trunk/box_lib.asm index 265fe11fa..95c13c051 100644 --- a/programs/develop/libraries/box_lib/trunk/box_lib.asm +++ b/programs/develop/libraries/box_lib/trunk/box_lib.asm @@ -1,410 +1,416 @@ -;***************************************************************************** -; Box_Lib - library of graphical components -; Copyright (C) KolibriOS team 2008-2020. All rights reserved. -; -; Authors: -; Alexey Teplov aka -; Marat Zakiyanov aka Mario79, aka Mario -; Evtikhov Maxim aka Maxxxx32 -; Eugene Grechnikov aka Diamond -; hidnplayr -; Igor Afanasiev aka IgorA -;***************************************************************************** - -format MS COFF - -public EXPORTS - -section '.flat' code readable align 16 -include '../../../../macros.inc' -include '../../../../proc32.inc' -include '../../../../KOSfuncs.inc' -include 'box_lib.mac' ;macro which should make life easier :) -;include '../../../../debug.inc' -include 'keys.inc' -include '../../../../system/skincfg/trunk/kglobals.inc' -include '../../../../system/skincfg/trunk/unpacker.inc' - -;----------------------------------------------------------------------------- -mem.alloc dd ? ;ЇєэъЎш  фы  т√фхыхэш  ярь Єш -mem.free dd ? ;ЇєэъЎш  фы  юётюсюцфхэш  ярь Єш -mem.realloc dd ? ;ЇєэъЎш  фы  яхЁхЁрёяЁхфхыхэш  ярь Єш -dll.load dd ? - -;---------------------------------------------------- -include 'editbox.asm' ;editbox -include 'checkbox.asm' ;checkbox -include 'optionbox.asm' ;optionbox -include 'scrollbar.asm' ;scrollbar -include 'd_button.asm' ;dinamic_button -include 'menubar.asm' ;menubar -include 'filebrowser.asm' ;filebrowser -include 'tree_list.asm' ;tree_list, list_box -include 'pathshow.asm' ;pathshow -include 't_edit.asm' ;text_editor -include 'frame.asm' ;frame -include 'progressbar.asm' ;progressbar -include 'tooltip.asm' ;tooltip -;-------------------------------------------------- - -;input: -; eax = єърчрЄхы№ эр ЇєэъЎш■ т√фхыхэш  ярь Єш -; ebx = ... юётюсюцфхэш  ярь Єш -; ecx = ... яхЁхЁрёяЁхфхыхэш  ярь Єш -; edx = ... чруЁєчъш сшсышюЄхъш (яюър эх шёяюы№чєхЄё ) -align 16 -lib_init: - mov [mem.alloc], eax - mov [mem.free], ebx - mov [mem.realloc], ecx - mov [dll.load], edx -ret - - -align 4 -proc draw_edge uses eax ebx ecx edx edi esi, box_l:dword, box_t:dword, box_w:dword, box_h:dword,\ - col_0:dword, col_1:dword, col_2:dword - - mov esi,[col_1] - and esi,111111101111111011111110b - - mov eax,SF_DRAW_RECT - ;bottom line - mov edx,[col_2] - mov ebx,[box_l] - shl ebx,16 - add ebx,[box_w] - inc ebx ;фы  чрыштъш фшруюэры№э√ї яшъёхыхщ - mov ecx,[box_t] - add ecx,[box_h] - shl ecx,16 - inc ecx - - mov edi,3 ;for cycle - @@: - ;calculate colors - and edx,111111101111111011111110b - add edx,esi - shr edx,1 - ;line move up and ->...<- - sub ecx,1 shl 16 ;move up - add ebx,1 shl 16 ;->... - sub ebx,2 ;...<- - ;draw line - int 0x40 - dec edi - jnz @b - - ;right line - mov edx,[col_2] - mov ebx,[box_l] - add ebx,[box_w] - shl ebx,16 - inc ebx - mov ecx,[box_t] - shl ecx,16 - add ecx,[box_h] - - mov edi,3 ;for cycle - @@: - ;calculate colors - and edx,111111101111111011111110b - add edx,esi - shr edx,1 - ;line move left and ... - sub ebx,1 shl 16 ;move left - add ecx,1 shl 16 - sub ecx,2 - ;draw line - int 0x40 - dec edi - jnz @b - - ;top line - mov edx,[col_0] - mov ebx,[box_l] - shl ebx,16 - add ebx,[box_w] - mov ecx,[box_t] - shl ecx,16 - inc ecx - - mov edi,3 ;for cycle - @@: - ;calculate colors - and edx,111111101111111011111110b - add edx,esi - shr edx,1 - ;line move down and ->...<- - add ecx,1 shl 16 ;move down - add ebx,1 shl 16 ;->... - sub ebx,2 ;...<- - ;draw line - int 0x40 - dec edi - jnz @b - - ;left line - mov edx,[col_0] - mov ebx,[box_l] - shl ebx,16 - inc ebx - mov ecx,[box_t] - shl ecx,16 - add ecx,[box_h] - - mov edi,3 ;for cycle - @@: - ;calculate colors - and edx,111111101111111011111110b - add edx,esi - shr edx,1 - ;line move left and ... - add ebx,1 shl 16 ;move left - add ecx,1 shl 16 - sub ecx,2 - ;draw line - int 0x40 - dec edi - jnz @b - - ret -endp - - -;фы  ЁрсюЄ√ ё KPCK -IncludeIGlobals -IncludeUGlobals - -align 16 -EXPORTS: - - -dd sz_init, lib_init -dd sz_version, 0x00000001 - -dd sz_edit_box, edit_box_draw ;old function name -dd sz_edit_box_draw, edit_box_draw -dd sz_edit_box_key, edit_box_key -dd sz_edit_box_key_safe, edit_box_key_safe -dd sz_edit_box_mouse, edit_box_mouse -dd sz_edit_box_set_text, edit_box_set_text -dd szVersion_ed, 0x00000001 - -dd sz_init_checkbox, init_checkbox -dd sz_check_box_draw, check_box_draw -dd sz_check_box_mouse, check_box_mouse -dd szVersion_ch2, 0x00000002 - -dd sz_option_box_draw, option_box_draw -dd sz_option_box_mouse, option_box_mouse -dd szVersion_op, 0x00000001 - -dd sz_Scrollbar_ver_draw, scroll_bar_vertical.draw -dd sz_Scrollbar_ver_mouse, scroll_bar_vertical.mouse -dd sz_Scrollbar_hor_draw, scroll_bar_horizontal.draw -dd sz_Scrollbar_hor_mouse, scroll_bar_horizontal.mouse -dd szVersion_scrollbar, 0x00010001 - -dd sz_Dbutton_draw, dinamic_button.draw -dd sz_Dbutton_mouse, dinamic_button.mouse -dd szVersion_dbutton, 0x00010001 - -dd sz_Menu_bar_draw, menu_bar.draw -dd sz_Menu_bar_mouse, menu_bar.mouse -dd sz_Menu_bar_activate, menu_bar.activate -dd szVersion_menu_bar, 0x00010002 - -dd sz_FileBrowser_draw, fb_draw_panel -dd sz_FileBrowser_mouse, fb_mouse -dd sz_FileBrowser_key, fb_key -dd szVersion_FileBrowser, 0x00010001 - -dd sz_tl_data_init, tl_data_init -dd sz_tl_data_clear, tl_data_clear -dd sz_tl_info_clear, tl_info_clear -dd sz_tl_key, tl_key -dd sz_tl_mouse, tl_mouse -dd sz_tl_draw, tl_draw -dd sz_tl_info_undo, tl_info_undo -dd sz_tl_info_redo, tl_info_redo -dd sz_tl_node_add, tl_node_add -dd sz_tl_node_set_data, tl_node_set_data -dd sz_tl_node_get_data, tl_node_get_data -dd sz_tl_node_delete, tl_node_delete -dd sz_tl_cur_beg, tl_cur_beg -dd sz_tl_cur_next, tl_cur_next -dd sz_tl_cur_perv, tl_cur_perv -dd sz_tl_node_close_open, tl_node_close_open -dd sz_tl_node_lev_inc, tl_node_lev_inc -dd sz_tl_node_lev_dec, tl_node_lev_dec -dd sz_tl_node_move_up, tl_node_move_up -dd sz_tl_node_move_down, tl_node_move_down -dd sz_tl_node_poi_get_info, tl_node_poi_get_info -dd sz_tl_node_poi_get_next_info, tl_node_poi_get_next_info -dd sz_tl_node_poi_get_data, tl_node_poi_get_data -dd sz_tl_save_mem, tl_save_mem -dd sz_tl_load_mem, tl_load_mem -dd sz_tl_get_mem_size, tl_get_mem_size -dd sz_tl_version_tree_list, 0x00000001 - -dd sz_PathShow_prepare, path_show.prepare -dd sz_PathShow_draw, path_show.draw -dd szVersion_path_show, 0x00010001 - -dd sz_ted_but_sumb_upper, ted_but_sumb_upper -dd sz_ted_but_sumb_lover, ted_but_sumb_lover -dd sz_ted_but_convert_by_table, ted_but_convert_by_table -dd sz_ted_can_save, ted_can_save -dd sz_ted_clear, ted_clear -dd sz_ted_delete, ted_delete -dd sz_ted_draw, ted_draw -dd sz_ted_init, ted_init -dd sz_ted_init_scroll_bars, ted_init_scroll_bars -dd sz_ted_init_syntax_file, ted_init_syntax_file -dd sz_ted_is_select, ted_is_select -dd sz_ted_key, ted_key -dd sz_ted_mouse, ted_mouse -dd sz_ted_open_file, ted_open_file -dd sz_ted_save_file, ted_save_file -dd sz_ted_text_add, ted_text_add -dd sz_ted_but_select_word, ted_but_select_word -dd sz_ted_but_cut, ted_but_cut -dd sz_ted_but_copy, ted_but_copy -dd sz_ted_but_paste, ted_but_paste -dd sz_ted_but_undo, ted_but_undo -dd sz_ted_but_redo, ted_but_redo -dd sz_ted_but_reverse, ted_but_reverse -dd sz_ted_but_find, ted_but_find -dd sz_ted_but_replace, ted_but_replace -dd sz_ted_text_colored, ted_text_colored -dd sz_ted_go_to_position, ted_go_to_position -dd sz_ted_version, 6 - -dd sz_Frame_draw, frame.draw -dd szVersion_frame, 0x00010001 - -dd sz_progressbar_draw, progressbar_draw -dd sz_progressbar_progress, progressbar_progress - -dd sz_tooltip_init, tooltip_init -dd sz_tooltip_delete, tooltip_delete -dd sz_tooltip_test_show, tooltip_test_show -dd sz_tooltip_mouse, tooltip_mouse -dd sz_get_font_size, get_font_size - -dd 0,0 - - -sz_init db 'lib_init',0 -sz_version db 'version',0 - -sz_edit_box db 'edit_box',0 -sz_edit_box_draw db 'edit_box_draw',0 -sz_edit_box_key db 'edit_box_key',0 -sz_edit_box_key_safe db 'edit_box_key_safe',0 -sz_edit_box_mouse db 'edit_box_mouse',0 -sz_edit_box_set_text db 'edit_box_set_text',0 -szVersion_ed db 'version_ed',0 - -sz_init_checkbox db 'init_checkbox2',0 -sz_check_box_draw db 'check_box_draw2',0 -sz_check_box_mouse db 'check_box_mouse2',0 -szVersion_ch2 db 'version_ch2',0 - -sz_option_box_draw db 'option_box_draw',0 -sz_option_box_mouse db 'option_box_mouse',0 -szVersion_op db 'version_op',0 - -sz_Scrollbar_ver_draw db 'scrollbar_v_draw',0 -sz_Scrollbar_ver_mouse db 'scrollbar_v_mouse',0 -sz_Scrollbar_hor_draw db 'scrollbar_h_draw',0 -sz_Scrollbar_hor_mouse db 'scrollbar_h_mouse',0 -szVersion_scrollbar db 'version_scrollbar',0 - -sz_Dbutton_draw db 'dbutton_draw',0 -sz_Dbutton_mouse db 'dbutton_mouse',0 -szVersion_dbutton db 'version_dbutton',0 - -sz_Menu_bar_draw db 'menu_bar_draw',0 -sz_Menu_bar_mouse db 'menu_bar_mouse',0 -sz_Menu_bar_activate db 'menu_bar_activate',0 -szVersion_menu_bar db 'version_menu_bar',0 - -sz_FileBrowser_draw db 'FileBrowser_draw',0 -sz_FileBrowser_mouse db 'FileBrowser_mouse',0 -sz_FileBrowser_key db 'FileBrowser_key',0 -szVersion_FileBrowser db 'version_FileBrowser',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_tl_node_move_up db 'tl_node_move_up',0 -sz_tl_node_move_down db 'tl_node_move_down',0 -sz_tl_node_poi_get_info db 'tl_node_poi_get_info',0 -sz_tl_node_poi_get_next_info db 'tl_node_poi_get_next_info',0 -sz_tl_node_poi_get_data db 'tl_node_poi_get_data',0 -sz_tl_save_mem db 'tl_save_mem',0 -sz_tl_load_mem db 'tl_load_mem',0 -sz_tl_get_mem_size db 'tl_get_mem_size',0 -sz_tl_version_tree_list db 'version_tree_list',0 - -sz_PathShow_prepare db 'PathShow_prepare',0 -sz_PathShow_draw db 'PathShow_draw',0 -szVersion_path_show db 'version_PathShow',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 db 'ted_but_find',0 -sz_ted_but_replace db 'ted_but_replace',0 -sz_ted_text_colored db 'ted_text_colored',0 -sz_ted_go_to_position db 'ted_go_to_position',0 -sz_ted_version db 'version_text_edit',0 - -sz_Frame_draw db 'frame_draw',0 -szVersion_frame db 'version_frame',0 - -sz_progressbar_draw db 'progressbar_draw', 0 -sz_progressbar_progress db 'progressbar_progress', 0 - -sz_tooltip_init db 'tooltip_init', 0 -sz_tooltip_delete db 'tooltip_delete', 0 -sz_tooltip_test_show db 'tooltip_test_show', 0 -sz_tooltip_mouse db 'tooltip_mouse', 0 -sz_get_font_size db 'get_font_size', 0 +; SPDX-License-Identifier: NOASSERTION +; + +; Text encoded with Code Page Windows 1251 - Cyrillic + + +;***************************************************************************** +; Box_Lib - library of graphical components +; Copyright (C) KolibriOS team 2008-2020. All rights reserved. +; +; Authors: +; Alexey Teplov aka +; Marat Zakiyanov aka Mario79, aka Mario +; Evtikhov Maxim aka Maxxxx32 +; Eugene Grechnikov aka Diamond +; hidnplayr +; Igor Afanasiev aka IgorA +;***************************************************************************** + +format MS COFF + +public EXPORTS + +section '.flat' code readable align 16 +include '../../../../macros.inc' +include '../../../../proc32.inc' +include '../../../../KOSfuncs.inc' +include 'box_lib.mac' ;macro which should make life easier :) +;include '../../../../debug.inc' +include 'keys.inc' +include '../../../../system/skincfg/kglobals.inc' +include '../../../../system/skincfg/unpacker.inc' + +;----------------------------------------------------------------------------- +mem.alloc dd ? ;ЇєэъЎш  фы  т√фхыхэш  ярь Єш +mem.free dd ? ;ЇєэъЎш  фы  юётюсюцфхэш  ярь Єш +mem.realloc dd ? ;ЇєэъЎш  фы  яхЁхЁрёяЁхфхыхэш  ярь Єш +dll.load dd ? + +;---------------------------------------------------- +include 'editbox.asm' ;editbox +include 'checkbox.asm' ;checkbox +include 'optionbox.asm' ;optionbox +include 'scrollbar.asm' ;scrollbar +include 'd_button.asm' ;dinamic_button +include 'menubar.asm' ;menubar +include 'filebrowser.asm' ;filebrowser +include 'tree_list.asm' ;tree_list, list_box +include 'pathshow.asm' ;pathshow +include 't_edit.asm' ;text_editor +include 'frame.asm' ;frame +include 'progressbar.asm' ;progressbar +include 'tooltip.asm' ;tooltip +;-------------------------------------------------- + +;input: +; eax = єърчрЄхы№ эр ЇєэъЎш■ т√фхыхэш  ярь Єш +; ebx = ... юётюсюцфхэш  ярь Єш +; ecx = ... яхЁхЁрёяЁхфхыхэш  ярь Єш +; edx = ... чруЁєчъш сшсышюЄхъш (яюър эх шёяюы№чєхЄё ) +align 16 +lib_init: + mov [mem.alloc], eax + mov [mem.free], ebx + mov [mem.realloc], ecx + mov [dll.load], edx +ret + + +align 4 +proc draw_edge uses eax ebx ecx edx edi esi, box_l:dword, box_t:dword, box_w:dword, box_h:dword,\ + col_0:dword, col_1:dword, col_2:dword + + mov esi,[col_1] + and esi,111111101111111011111110b + + mov eax,SF_DRAW_RECT + ;bottom line + mov edx,[col_2] + mov ebx,[box_l] + shl ebx,16 + add ebx,[box_w] + inc ebx ;фы  чрыштъш фшруюэры№э√ї яшъёхыхщ + mov ecx,[box_t] + add ecx,[box_h] + shl ecx,16 + inc ecx + + mov edi,3 ;for cycle + @@: + ;calculate colors + and edx,111111101111111011111110b + add edx,esi + shr edx,1 + ;line move up and ->...<- + sub ecx,1 shl 16 ;move up + add ebx,1 shl 16 ;->... + sub ebx,2 ;...<- + ;draw line + int 0x40 + dec edi + jnz @b + + ;right line + mov edx,[col_2] + mov ebx,[box_l] + add ebx,[box_w] + shl ebx,16 + inc ebx + mov ecx,[box_t] + shl ecx,16 + add ecx,[box_h] + + mov edi,3 ;for cycle + @@: + ;calculate colors + and edx,111111101111111011111110b + add edx,esi + shr edx,1 + ;line move left and ... + sub ebx,1 shl 16 ;move left + add ecx,1 shl 16 + sub ecx,2 + ;draw line + int 0x40 + dec edi + jnz @b + + ;top line + mov edx,[col_0] + mov ebx,[box_l] + shl ebx,16 + add ebx,[box_w] + mov ecx,[box_t] + shl ecx,16 + inc ecx + + mov edi,3 ;for cycle + @@: + ;calculate colors + and edx,111111101111111011111110b + add edx,esi + shr edx,1 + ;line move down and ->...<- + add ecx,1 shl 16 ;move down + add ebx,1 shl 16 ;->... + sub ebx,2 ;...<- + ;draw line + int 0x40 + dec edi + jnz @b + + ;left line + mov edx,[col_0] + mov ebx,[box_l] + shl ebx,16 + inc ebx + mov ecx,[box_t] + shl ecx,16 + add ecx,[box_h] + + mov edi,3 ;for cycle + @@: + ;calculate colors + and edx,111111101111111011111110b + add edx,esi + shr edx,1 + ;line move left and ... + add ebx,1 shl 16 ;move left + add ecx,1 shl 16 + sub ecx,2 + ;draw line + int 0x40 + dec edi + jnz @b + + ret +endp + + +;фы  ЁрсюЄ√ ё KPCK +IncludeIGlobals +IncludeUGlobals + +align 16 +EXPORTS: + + +dd sz_init, lib_init +dd sz_version, 0x00000001 + +dd sz_edit_box, edit_box_draw ;old function name +dd sz_edit_box_draw, edit_box_draw +dd sz_edit_box_key, edit_box_key +dd sz_edit_box_key_safe, edit_box_key_safe +dd sz_edit_box_mouse, edit_box_mouse +dd sz_edit_box_set_text, edit_box_set_text +dd szVersion_ed, 0x00000001 + +dd sz_init_checkbox, init_checkbox +dd sz_check_box_draw, check_box_draw +dd sz_check_box_mouse, check_box_mouse +dd szVersion_ch2, 0x00000002 + +dd sz_option_box_draw, option_box_draw +dd sz_option_box_mouse, option_box_mouse +dd szVersion_op, 0x00000001 + +dd sz_Scrollbar_ver_draw, scroll_bar_vertical.draw +dd sz_Scrollbar_ver_mouse, scroll_bar_vertical.mouse +dd sz_Scrollbar_hor_draw, scroll_bar_horizontal.draw +dd sz_Scrollbar_hor_mouse, scroll_bar_horizontal.mouse +dd szVersion_scrollbar, 0x00010001 + +dd sz_Dbutton_draw, dinamic_button.draw +dd sz_Dbutton_mouse, dinamic_button.mouse +dd szVersion_dbutton, 0x00010001 + +dd sz_Menu_bar_draw, menu_bar.draw +dd sz_Menu_bar_mouse, menu_bar.mouse +dd sz_Menu_bar_activate, menu_bar.activate +dd szVersion_menu_bar, 0x00010002 + +dd sz_FileBrowser_draw, fb_draw_panel +dd sz_FileBrowser_mouse, fb_mouse +dd sz_FileBrowser_key, fb_key +dd szVersion_FileBrowser, 0x00010001 + +dd sz_tl_data_init, tl_data_init +dd sz_tl_data_clear, tl_data_clear +dd sz_tl_info_clear, tl_info_clear +dd sz_tl_key, tl_key +dd sz_tl_mouse, tl_mouse +dd sz_tl_draw, tl_draw +dd sz_tl_info_undo, tl_info_undo +dd sz_tl_info_redo, tl_info_redo +dd sz_tl_node_add, tl_node_add +dd sz_tl_node_set_data, tl_node_set_data +dd sz_tl_node_get_data, tl_node_get_data +dd sz_tl_node_delete, tl_node_delete +dd sz_tl_cur_beg, tl_cur_beg +dd sz_tl_cur_next, tl_cur_next +dd sz_tl_cur_perv, tl_cur_perv +dd sz_tl_node_close_open, tl_node_close_open +dd sz_tl_node_lev_inc, tl_node_lev_inc +dd sz_tl_node_lev_dec, tl_node_lev_dec +dd sz_tl_node_move_up, tl_node_move_up +dd sz_tl_node_move_down, tl_node_move_down +dd sz_tl_node_poi_get_info, tl_node_poi_get_info +dd sz_tl_node_poi_get_next_info, tl_node_poi_get_next_info +dd sz_tl_node_poi_get_data, tl_node_poi_get_data +dd sz_tl_save_mem, tl_save_mem +dd sz_tl_load_mem, tl_load_mem +dd sz_tl_get_mem_size, tl_get_mem_size +dd sz_tl_version_tree_list, 0x00000001 + +dd sz_PathShow_prepare, path_show.prepare +dd sz_PathShow_draw, path_show.draw +dd szVersion_path_show, 0x00010001 + +dd sz_ted_but_sumb_upper, ted_but_sumb_upper +dd sz_ted_but_sumb_lover, ted_but_sumb_lover +dd sz_ted_but_convert_by_table, ted_but_convert_by_table +dd sz_ted_can_save, ted_can_save +dd sz_ted_clear, ted_clear +dd sz_ted_delete, ted_delete +dd sz_ted_draw, ted_draw +dd sz_ted_init, ted_init +dd sz_ted_init_scroll_bars, ted_init_scroll_bars +dd sz_ted_init_syntax_file, ted_init_syntax_file +dd sz_ted_is_select, ted_is_select +dd sz_ted_key, ted_key +dd sz_ted_mouse, ted_mouse +dd sz_ted_open_file, ted_open_file +dd sz_ted_save_file, ted_save_file +dd sz_ted_text_add, ted_text_add +dd sz_ted_but_select_word, ted_but_select_word +dd sz_ted_but_cut, ted_but_cut +dd sz_ted_but_copy, ted_but_copy +dd sz_ted_but_paste, ted_but_paste +dd sz_ted_but_undo, ted_but_undo +dd sz_ted_but_redo, ted_but_redo +dd sz_ted_but_reverse, ted_but_reverse +dd sz_ted_but_find, ted_but_find +dd sz_ted_but_replace, ted_but_replace +dd sz_ted_text_colored, ted_text_colored +dd sz_ted_go_to_position, ted_go_to_position +dd sz_ted_version, 6 + +dd sz_Frame_draw, frame.draw +dd szVersion_frame, 0x00010001 + +dd sz_progressbar_draw, progressbar_draw +dd sz_progressbar_progress, progressbar_progress + +dd sz_tooltip_init, tooltip_init +dd sz_tooltip_delete, tooltip_delete +dd sz_tooltip_test_show, tooltip_test_show +dd sz_tooltip_mouse, tooltip_mouse +dd sz_get_font_size, get_font_size + +dd 0,0 + + +sz_init db 'lib_init',0 +sz_version db 'version',0 + +sz_edit_box db 'edit_box',0 +sz_edit_box_draw db 'edit_box_draw',0 +sz_edit_box_key db 'edit_box_key',0 +sz_edit_box_key_safe db 'edit_box_key_safe',0 +sz_edit_box_mouse db 'edit_box_mouse',0 +sz_edit_box_set_text db 'edit_box_set_text',0 +szVersion_ed db 'version_ed',0 + +sz_init_checkbox db 'init_checkbox2',0 +sz_check_box_draw db 'check_box_draw2',0 +sz_check_box_mouse db 'check_box_mouse2',0 +szVersion_ch2 db 'version_ch2',0 + +sz_option_box_draw db 'option_box_draw',0 +sz_option_box_mouse db 'option_box_mouse',0 +szVersion_op db 'version_op',0 + +sz_Scrollbar_ver_draw db 'scrollbar_v_draw',0 +sz_Scrollbar_ver_mouse db 'scrollbar_v_mouse',0 +sz_Scrollbar_hor_draw db 'scrollbar_h_draw',0 +sz_Scrollbar_hor_mouse db 'scrollbar_h_mouse',0 +szVersion_scrollbar db 'version_scrollbar',0 + +sz_Dbutton_draw db 'dbutton_draw',0 +sz_Dbutton_mouse db 'dbutton_mouse',0 +szVersion_dbutton db 'version_dbutton',0 + +sz_Menu_bar_draw db 'menu_bar_draw',0 +sz_Menu_bar_mouse db 'menu_bar_mouse',0 +sz_Menu_bar_activate db 'menu_bar_activate',0 +szVersion_menu_bar db 'version_menu_bar',0 + +sz_FileBrowser_draw db 'FileBrowser_draw',0 +sz_FileBrowser_mouse db 'FileBrowser_mouse',0 +sz_FileBrowser_key db 'FileBrowser_key',0 +szVersion_FileBrowser db 'version_FileBrowser',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_tl_node_move_up db 'tl_node_move_up',0 +sz_tl_node_move_down db 'tl_node_move_down',0 +sz_tl_node_poi_get_info db 'tl_node_poi_get_info',0 +sz_tl_node_poi_get_next_info db 'tl_node_poi_get_next_info',0 +sz_tl_node_poi_get_data db 'tl_node_poi_get_data',0 +sz_tl_save_mem db 'tl_save_mem',0 +sz_tl_load_mem db 'tl_load_mem',0 +sz_tl_get_mem_size db 'tl_get_mem_size',0 +sz_tl_version_tree_list db 'version_tree_list',0 + +sz_PathShow_prepare db 'PathShow_prepare',0 +sz_PathShow_draw db 'PathShow_draw',0 +szVersion_path_show db 'version_PathShow',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 db 'ted_but_find',0 +sz_ted_but_replace db 'ted_but_replace',0 +sz_ted_text_colored db 'ted_text_colored',0 +sz_ted_go_to_position db 'ted_go_to_position',0 +sz_ted_version db 'version_text_edit',0 + +sz_Frame_draw db 'frame_draw',0 +szVersion_frame db 'version_frame',0 + +sz_progressbar_draw db 'progressbar_draw', 0 +sz_progressbar_progress db 'progressbar_progress', 0 + +sz_tooltip_init db 'tooltip_init', 0 +sz_tooltip_delete db 'tooltip_delete', 0 +sz_tooltip_test_show db 'tooltip_test_show', 0 +sz_tooltip_mouse db 'tooltip_mouse', 0 +sz_get_font_size db 'get_font_size', 0 diff --git a/programs/other/t_edit/t_edit.asm b/programs/other/t_edit/t_edit.asm index d64cb1154..b130f55f9 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/kglobals.inc' +include '../../system/skincfg/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: diff --git a/programs/other/t_edit_synt/te_syntax.asm b/programs/other/t_edit_synt/te_syntax.asm index 8a0ed71fc..1e8aaacb0 100644 --- a/programs/other/t_edit_synt/te_syntax.asm +++ b/programs/other/t_edit_synt/te_syntax.asm @@ -1,389 +1,394 @@ -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/kglobals.inc' +include '../../system/skincfg/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: