diff --git a/programs/develop/info3ds/data.inc b/programs/develop/info3ds/data.inc index bb15d891d7..48bd0f6e1f 100644 --- a/programs/develop/info3ds/data.inc +++ b/programs/develop/info3ds/data.inc @@ -1,7 +1,7 @@ if lang eq ru -capt db 'info 3ds версия 05.11.15',0 ;подпись окна +capt db 'info 3ds версия 10.11.15',0 ;подпись окна else -capt db 'info 3ds version 05.11.15',0 ;window caption +capt db 'info 3ds version 10.11.15',0 ;window caption end if MAX_FILE_LEVEL equ 20 ;максимальный уровень вложенности блоков для анализа diff --git a/programs/develop/info3ds/info3ds.asm b/programs/develop/info3ds/info3ds.asm index 8f2f136b62..a6c041cd5e 100644 --- a/programs/develop/info3ds/info3ds.asm +++ b/programs/develop/info3ds/info3ds.asm @@ -66,16 +66,14 @@ macro load_image_file path,buf,size { ; stdcall mem.Alloc, dword size ;выделяем память для изображения mov [buf],eax - mov eax,70 ;70-я функция работа с файлами 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], [buf] + m2m [run_file_70.Buffer], eax mov byte[run_file_70+20], 0 mov [run_file_70.FileName], file_name - mov ebx,run_file_70 - int 0x40 ;загружаем файл изображения + mcall 70,run_file_70 ;загружаем файл изображения cmp ebx,0xffffffff je @f ;определяем вид изображения и переводим его во временный буфер image_data @@ -122,24 +120,23 @@ align 4 start: load_libraries l_libs_start,l_libs_end ;проверка на сколько удачно загузились библиотеки - mov ebp,lib_0 - cmp dword [ebp+ll_struc_size-4],0 - jz @f - mov ebp,lib_1 - cmp dword [ebp+ll_struc_size-4],0 - jz @f - mov ebp,lib_2 - cmp dword [ebp+ll_struc_size-4],0 - jz @f - mov ebp,lib_3 - cmp dword [ebp+ll_struc_size-4],0 - jz @f - mcall -1 ;exit not correct + cmp dword [lib_0+ll_struc_size-4],0 + jnz @f + cmp dword [lib_1+ll_struc_size-4],0 + jnz @f + cmp dword [lib_2+ll_struc_size-4],0 + jnz @f + cmp dword [lib_3+ll_struc_size-4],0 + jnz @f + jmp .lib @@: + mcall -1 ;exit not correct + .lib: mcall 48,3,sc,sizeof.system_colors mcall 40,0x27 stdcall [OpenDialog_Init],OpenDialog_data ;подготовка диалога + mov dword[w_scr_t1.type],1 stdcall dword[tl_data_init], tree1 ;системные иконки 16*16 для tree_list load_image_file 'tl_sys_16.png', icon_tl_sys,TREE_ICON_SYS16_BMP_SIZE @@ -221,9 +218,9 @@ end if ; stdcall [tl_node_get_data],tree1 - pop ebx - cmp ebx,0 + cmp eax,0 je @f + mov ebx,eax mov eax,dword[ebx] ;получаем значение сдвига выбранного блока относительно начала файла mov ecx,dword[ebx+4] ;размер блока stdcall hex_in_str, txt_3ds_offs.dig, eax,8 @@ -350,16 +347,12 @@ pushad sub eax,41 mov dword[tree1.box_width],eax add ax,word[tree1.box_left] - mov word[w_scr_t1.start_x],ax + mov word[w_scr_t1+sb_offs_start_x],ax add ax,16+5 mov word[buf_0.l],ax - mov eax,8 - mov ebx,(5 shl 16)+20 - mov ecx,(5 shl 16)+20 - mov edx,3 mov esi,[sc.work_button] - int 0x40 + mcall 8,(5 shl 16)+20,(5 shl 16)+20,3 mov ebx,(30 shl 16)+20 mov edx,4 @@ -372,19 +365,10 @@ pushad int 0x40 @@: - mov ebx,(85 shl 16)+20 - mov edx,6 ;окно с координатами - int 0x40 + mcall ,(85 shl 16)+20,,6 ;окно с координатами + mcall ,(110 shl 16)+20,,7 ;удаление блока - mov ebx,(110 shl 16)+20 - mov edx,7 ;удаление блока - int 0x40 - - mov eax,7 - mov ebx,[image_data_toolbar] - mov ecx,(16 shl 16)+16 - mov edx,(7 shl 16)+7 ;new - int 0x40 + mcall 7,[image_data_toolbar],(16 shl 16)+16,(7 shl 16)+7 ;new add ebx,IMAGE_TOOLBAR_ICON_SIZE mov edx,(32 shl 16)+7 ;open @@ -456,7 +440,7 @@ button: .exit: mov dword[tree1.data_img],0 mov dword[tree1.data_img_sys],0 - stdcall dword[tl_data_clear], tree1 + stdcall [tl_data_clear], tree1 stdcall [buf2d_delete],buf_0 stdcall [buf2d_delete],buf_1 ;удаляем буфер stdcall mem.Free,[image_data_toolbar] @@ -795,7 +779,7 @@ proc add_3ds_object, icon:dword,level:dword,size_bl:dword,info_bl:dword rep movsb mov byte[buffer+size_one_list-1],0 ;0 - символ конеца строки .no_capt: - stdcall [tl_node_add], buffer, ebx, tree1 + stdcall [tl_node_add], tree1, ebx, buffer stdcall [tl_cur_next], tree1 if debug stdcall print_err,sz_add_3ds_object,buffer+list_offs_text @@ -907,42 +891,40 @@ align 4 but_delete_chunk: pushad stdcall [tl_node_get_data],tree1 - pop ebx - cmp ebx,0 + cmp eax,0 je .end_f - cmp byte[ebx+list_offs_chunk_del],0 ;если блок защищен от удаления + cmp byte[eax+list_offs_chunk_del],0 ;если блок защищен от удаления jne .notify ;(1) копирование нижней части файла - mov edx,dword[ebx+4] ;размер блока + mov edx,dword[eax+4] ;размер блока sub [open_file_size],edx ;изменение размеров файла mov ecx,[open_file_size] - mov eax,dword[ebx] ;получаем значение сдвига выбранного блока относительно начала файла - sub ecx,eax ;ecx - размер нижней сдвигаемой части файла - add eax,dword[open_file_lif] ;получаем значение сдвига в памяти - mov edi,eax - mov esi,eax + mov ebx,dword[eax] ;получаем значение сдвига выбранного блока относительно начала файла + sub ecx,ebx ;ecx - размер нижней сдвигаемой части файла + add ebx,dword[open_file_lif] ;получаем значение сдвига в памяти + mov edi,ebx + mov esi,ebx add esi,edx - mov al,byte[ebx+list_offs_chunk_lev] ;берем уровень текущего узла + mov bl,byte[eax+list_offs_chunk_lev] ;берем уровень текущего узла rep movsb mov byte[can_save],1 ;(2) изменение размеров родительских блоков - cmp al,0 + cmp bl,0 je .end_2 .cycle_2: stdcall [tl_cur_perv], tree1 stdcall [tl_node_get_data],tree1 - pop ebx - cmp ebx,0 + cmp eax,0 je .end_2 - cmp byte[ebx+list_offs_chunk_lev],al + cmp byte[eax+list_offs_chunk_lev],bl jge .cycle_2 - mov al,byte[ebx+list_offs_chunk_lev] - mov ecx,[ebx] + mov bl,byte[eax+list_offs_chunk_lev] + mov ecx,[eax] add ecx,[open_file_lif] sub dword[ecx+2],edx - cmp al,0 ;если самый верхний узел, то al=0 + cmp bl,0 ;если самый верхний узел, то bl=0 jne .cycle_2 .end_2: @@ -1284,14 +1266,11 @@ import_box_lib: sz_tl_node_poi_get_data db 'tl_node_poi_get_data',0 - +align 4 mouse_dd dd 0x0 sc system_colors last_time dd 0 -align 16 -procinfo process_information - align 4 buf_0: dd 0 ;указатель на буфер изображения .l: dw 205 ;+4 left @@ -1311,32 +1290,18 @@ buf_1: dd 0 ;+16 color db 24 ;+20 bit in pixel +align 4 el_focus dd tree1 tree1 tree_list size_one_list,300+2, tl_key_no_edit+tl_draw_par_line,\ 16,16, 0xffffff,0xb0d0ff,0xd000ff, 5,35,195-16,250, 16,list_offs_text,0, el_focus,\ w_scr_t1,0 align 4 -w_scr_t1: -.size_x dw 16 ;+0 -.start_x dw 0 -rb 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 2+2+2+2+4+4+4+4+4+4 -.all_redraw dd 0 ;+80 -.ar_offset dd 1 ;+84 +w_scr_t1 scrollbar 16,0, 3,0, 15, 100, 0,0, 0xeeeeee, 0xbbddff, 0, 1 - -align 4 +align 16 i_end: + procinfo process_information rb 1024 thread_coords: rb 1024 diff --git a/programs/develop/info3ds/info_wnd_coords.inc b/programs/develop/info3ds/info_wnd_coords.inc index 5f489fa574..61c64c5e17 100644 --- a/programs/develop/info3ds/info_wnd_coords.inc +++ b/programs/develop/info3ds/info_wnd_coords.inc @@ -30,12 +30,11 @@ pushad inc byte[prop_wnd_run] stdcall [tl_node_get_data],tree1 - pop ebx xor edx,edx mov dword[capt_p],txt_q - cmp ebx,0 + cmp eax,0 je .no_points - mov ebx,dword[ebx] ;получаем значение сдвига выбранного блока + mov ebx,dword[eax] ;получаем значение сдвига выбранного блока add ebx,dword[open_file_lif] cmp word[ebx],CHUNK_VERTLIST @@ -94,7 +93,7 @@ pushad stdcall str_cat, obj_point.text,esi stdcall str_cat, obj_point.text,Data_String loop @b - stdcall dword[tl_node_add], obj_point, (ID_ICON_DATA shl 16), tree3 + stdcall dword[tl_node_add], tree3,(ID_ICON_DATA shl 16),obj_point stdcall dword[tl_cur_next], tree3 dec edx cmp edx,0 @@ -207,12 +206,11 @@ prop_button: cmp ah,3 jne @f ;загрузка координат в editbox-ы - push ebx + push eax ebx stdcall [tl_node_get_data],tree3 - pop ebx - cmp ebx,0 + cmp eax,0 je .no_select_0 - mov ebx,[ebx] + mov ebx,[eax] mov word[NumberSymbolsAD],8 finit fld dword[ebx] @@ -231,16 +229,16 @@ prop_button: stdcall [edit_box_draw], edit2 stdcall [edit_box_draw], edit3 .no_select_0: - pop ebx + pop ebx eax + jmp prop_still @@: cmp ah,4 jne @f - push ebx ecx esi edi + push eax ebx ecx edi esi stdcall [tl_node_get_data],tree3 - pop ebx - cmp ebx,0 + cmp eax,0 je .no_select_1 - mov ebx,[ebx] + mov ebx,[eax] finit mov esi,string1 @@ -291,12 +289,13 @@ prop_button: stdcall str_cat, obj_point.text,esi stdcall str_cat, obj_point.text,Data_String loop .coord - stdcall dword[tl_node_set_data], obj_point, tree3 + stdcall dword[tl_node_set_data], tree3,obj_point stdcall dword[tl_draw], tree3 mov byte[can_save],1 ;для показа кнопки 'Сохранить' mov dword[offs_last_timer],0 ;для обновления блока в таймере .no_select_1: - pop edi esi ecx ebx + pop esi edi ecx ebx eax + jmp prop_still @@: cmp ah,1 diff --git a/programs/develop/libraries/box_lib/trunk/box_lib.mac b/programs/develop/libraries/box_lib/trunk/box_lib.mac index d60715c322..6f5454229c 100644 --- a/programs/develop/libraries/box_lib/trunk/box_lib.mac +++ b/programs/develop/libraries/box_lib/trunk/box_lib.mac @@ -283,66 +283,59 @@ macro option_boxes_set_sys_color color_table,group struc tree_list info_size,info_max_count,style, img_cx,img_cy,\ col_bkg,col_zag,col_txt, box_l,box_t,box_w,box_h, capt_cy,info_capt_offs,\ - info_capt_len,el_focus, p_scrol,on_press { - .data_info dd 0 - .info_size dw info_size - .info_max_count dd info_max_count - .style dd style - .data_nodes dd 0 - .data_img dd 0 - .img_cx dw img_cx - .img_cy dw img_cy - .data_img_sys dd 0 - .ch_tim dd 0 - .ls_tim dd 0 - .tim_undo dd 0 - .cur_pos dd 0 - .col_bkg dd col_bkg - .col_zag dd col_zag - .col_txt dd col_txt - .box_left dd box_l - .box_top dd box_t - .box_width dd box_w - .box_height dd box_h - .capt_cy dw capt_cy - .info_capt_offs dw info_capt_offs - .info_capt_len dw info_capt_len - .el_focus dd el_focus - .p_scrol dd p_scrol - rb 4 - .on_activate dd 0 - .on_press dd on_press + info_capt_len,el_focus, p_scroll,on_press { +.box_left dd box_l +.box_top dd box_t +.box_width dd box_w +.box_height dd box_h +.data_info dd 0 +.info_size dw info_size +.info_max_count dd info_max_count +.style dd style +.data_nodes dd 0 +.data_img dd 0 +.img_cx dw img_cx +.img_cy dw img_cy +.data_img_sys dd 0 +.ch_tim dd 0 +.tim_undo dd 0 +.cur_pos dd 0 +.col_bkg dd col_bkg +.col_zag dd col_zag +.col_txt dd col_txt +.capt_cy dw capt_cy +.info_capt_offs dw info_capt_offs +.info_capt_len dw info_capt_len +.el_focus dd el_focus +.p_scroll dd p_scroll +.on_press dd on_press } -tl_data_info equ dword[edi] ;указатель на основные даные -tl_info_size equ word[edi +4] ;размер данных выделяемых для каждого узла (пользовательськие данные + текст для подписи) -tl_info_max_count equ dword[edi+6] ;максимальное количество узлов, которые можно добавить в элемент -tl_style equ dword[edi+10] ;стили элемента -tl_data_nodes equ dword[edi+14] ;указатель на структуры узлов -tl_data_img equ dword[edi+18] ;указатель на изображения с иконками узлов -tl_img_cx equ word[edi+22] ;ширина иконок -tl_img_cy equ word[edi+24] ;высота иконок -tl_data_img_sys equ dword[edi+26] ;указатель на системные изображения (стрелки, плюсики) -tl_ch_tim equ dword[edi+30] ;количество изменений в файле -tl_tim_undo equ dword[edi+38] ;количество отмененных действий -tl_cur_pos equ dword[edi+42] ;позиция курсора -tl_col_bkg equ dword[edi+46] ;цвет фона -tl_col_zag equ dword[edi+50] ;цвет заголовка -tl_col_txt equ dword[edi+54] ;цвет текста -tl_box_left equ dword[edi+58] -tl_box_top equ dword[edi+62] -tl_box_width equ dword[edi+66] -tl_box_height equ dword[edi+70] -tl_capt_cy equ word[edi+74] ;высота подписи -tl_info_capt_offs equ word[edi+76] ;сдвиг для начала текста (подписи узла) -tl_info_capt_len equ word[edi+78] ;длинна текста подписи узла (если = 0 то до конца структуры) -tl_el_focus equ dword[edi+80] ;указатель на структуру элемента в фокусе -tl_p_scrol equ dword[edi+84] ;указатель на структуру скроллинга -tl_on_press equ dword[edi+96] ;указатель на функцию, которая вызывается при нажатии Enter - -;data_info dd ? ;+ 0 указатель на основные даные -;ls_tim dd ? ;+34 время последнего сохранения -;on_activate dd ? ;+92 указатель на функцию при активировании узла +tl_box_left equ dword[edi] +tl_box_top equ dword[edi+ 4] +tl_box_width equ dword[edi+ 8] +tl_box_height equ dword[edi+12] +tl_data_info equ dword[edi+16] ;указатель на основные даные +tl_info_size equ word[edi+20] ;размер данных выделяемых для каждого узла (пользовательськие данные + текст для подписи) +tl_info_max_count equ dword[edi+22] ;максимальное количество узлов, которые можно добавить в элемент +tl_style equ dword[edi+26] ;стили элемента +tl_data_nodes equ dword[edi+30] ;указатель на структуры узлов +tl_data_img equ dword[edi+34] ;указатель на изображения с иконками узлов +tl_img_cx equ word[edi+38] ;ширина иконок +tl_img_cy equ word[edi+40] ;высота иконок +tl_data_img_sys equ dword[edi+42] ;указатель на системные изображения (стрелки, плюсики) +tl_ch_tim equ dword[edi+46] ;количество изменений в файле +tl_tim_undo equ dword[edi+50] ;количество отмененных действий +tl_cur_pos equ dword[edi+54] ;позиция курсора +tl_col_bkg equ dword[edi+58] ;цвет фона +tl_col_zag equ dword[edi+62] ;цвет заголовка +tl_col_txt equ dword[edi+66] ;цвет текста +tl_capt_cy equ word[edi+70] ;высота подписи +tl_info_capt_offs equ word[edi+72] ;сдвиг для начала текста (подписи узла) +tl_info_capt_len equ word[edi+74] ;длинна текста подписи узла (если = 0 то до конца структуры) +tl_el_focus equ dword[edi+76] ;указатель на структуру элемента в фокусе +tl_p_scroll equ dword[edi+80] ;указатель на структуру скроллинга +tl_on_press equ dword[edi+84] ;указатель на функцию, которая вызывается при нажатии Enter ;константы стиля tl_key_no_edit equ 1b ;элемент нельзя редактировать на клавиатуре (изменять уровни, удалять) @@ -355,7 +348,7 @@ tl_err_load_caption equ 1b ; tl_err_load_info_size equ 100b ;не совпадает размер информационной структуры при открытии tl_load_mode_add equ 0x20000 ;опция считывания в режиме добавления информации tl_save_load_heder_size equ 26 ;размер заголовка для записи/чтения элементов -tl_offs_box equ 58 ;начало BOX структуры для tree_list +tl_offs_box equ 0 ;начало BOX структуры для tree_list ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Basic macros for use TextEditor ; diff --git a/programs/develop/libraries/box_lib/trunk/doc/tree_list/info_treelist.htm b/programs/develop/libraries/box_lib/trunk/doc/tree_list/info_treelist.htm index 8a14a8473b..b1c62df84f 100644 --- a/programs/develop/libraries/box_lib/trunk/doc/tree_list/info_treelist.htm +++ b/programs/develop/libraries/box_lib/trunk/doc/tree_list/info_treelist.htm @@ -76,10 +76,7 @@

tl_node_add

─юсрты хЄ єчхы, т яючшЎш■ єърчрээє■ ъєЁёюЁюь. ╧ЁшьхЁ фюсртыхэш  єчыр:

-
	push dword tree1
-	push dword 0x10002
-	push dword data_buffer
-	call dword[tl_node_add]
+
	stdcall dword[tl_node_add], tree1,0x10002,data_buffer

уфх: tree1 - ёЄЁєъЄєЁр tree_list; 0x10002 - ярЁрьхЄЁ√ єчыр (ёЄрЁ°шх срщЄ√ 0x0001 - шэфхъё шъюэъш, юЄюсЁрцрхьющ тючых єчыр; ьхэ№°шщ срщЄ 0x02 - єЁютхэ№ тыюцхэюёЄш єчыр); data_buffer - єърчрЄхы№ эр ф√ээ√х, фюсрты хь√х т єчхы.

@@ -89,8 +86,7 @@

tl_node_get_data

┴хЁхЄ єърчрЄхы№ эр фрээ√х (яюы№чютрЄхы№ёъшх ш яюфяшё№) шч єчыр яюф ъєЁёюЁюь.

╧ЁшьхЁ 1:

-
	stdcall [tl_node_get_data], tree1
-	pop eax
+
	stdcall [tl_node_get_data], tree1

уфх: tree1 - ёЄЁєъЄєЁр tree_list; eax - єърчрЄхы№ эр ф√ээ√х єчыр.

@@ -98,14 +94,14 @@
	NODE_SIZE equ 200
 	node_data rb NODE_SIZE
 .........
-push ecx esi edi
+push eax ecx esi edi
 	stdcall [tl_node_get_data], tree1
-	pop esi
+	mov esi,eax
 	mov edi,node_data
 	mov ecx,NODE_SIZE
 	cld
 	rep movsb
-pop edi esi ecx
+pop edi esi ecx eax

уфх: tree1 - ёЄЁєъЄєЁр tree_list; NODE_SIZE - ЁрчьхЁ ф√ээ√ї єчыр; node_data - ъюяш  эр ф√ээ√ї єчыр.

@@ -146,34 +142,25 @@ pop edi esi ecx

tl_node_poi_get_info

┴хЁхЄ тэєЄЁхээшщ єърчрЄхы№ эр ёЄЁєъЄєЁє юяшё√тр■∙є■ єчхы. ╧ЁшьхЁ шёяюы№чютрэш  ЇєэъЎшш:

-
	push dword tree1
-	push dword 0
-	call dword[tl_node_poi_get_info]
-	pop esi
+
	stdcall dword[tl_node_poi_get_info], tree1, 0

уфх: tree1 - ёЄЁєъЄєЁр tree_list; 0 - яючшЎш  єчыр, ё ъюЄюЁюую схЁхЄё  єърчрЄхы№; -esi - єърчрЄхы№ эр ёЄЁєъЄєЁє юяшё√тр■∙є■ єчхы.

+eax - єърчрЄхы№ эр ёЄЁєъЄєЁє юяшё√тр■∙є■ єчхы.

╟рьхўрэшх. ┼ёыш єчхы ё єърчрээ√ь шэфхъёюь эх эрщфхэ, т єърчрЄхых тючтЁр∙рхЄё  0.

tl_node_poi_get_next_info

┴хЁхЄ єърчрЄхы№ эр ёыхфє■∙шщ ¤ыхьхэЄ т Ўхяш, схч єўхЄр юЄъЁ√Єш /чръЁ√Єш  фюўхЁэшї єчыют. ╧ЁшьхЁ шёяюы№чютрэш  ЇєэъЎшш:

-
	push tree1
-	push esi
-	call dword[tl_node_poi_get_next_info]
-	pop esi ;яхЁхїюфшь ъ ёыхфє∙хьє єчыє
+
	stdcall dword[tl_node_poi_get_next_info], tree1, eax

уфх: tree1 - ёЄЁєъЄєЁр tree_list; -esi - фю т√чютр ЇєэъЎшш єърчрЄхы№ эр ёЄЁєъЄєЁє юяшё√тр■∙є■ єчхы, яюёых т√чютр єърчрЄхы№ эр ёЄЁєъЄєЁє юяшё√тр■∙є■ ёыхфє∙шщ єчхы т Ўхяш.

+eax - фю т√чютр ЇєэъЎшш єърчрЄхы№ эр ёЄЁєъЄєЁє юяшё√тр■∙є■ єчхы, яюёых т√чютр єърчрЄхы№ эр ёЄЁєъЄєЁє юяшё√тр■∙є■ ёыхфє∙шщ єчхы т Ўхяш.

╟рьхўрэшх. ┼ёыш ёыхфє∙шщ єчхы эх эрщфхэ, т єърчрЄхых тючтЁр∙рхЄё  0.

tl_node_poi_get_data

┴хЁхЄ єърчрЄхы№ эр фрээ√х (яюы№чютрЄхы№ёъшх ш яюфяшё№) шч єчыр єърчрээюую т єърчрЄхых. ╧ЁшьхЁ шёяюы№чютрэш  ЇєэъЎшш:

-
	push dword tree1
-	push dword esi
-	call dword[tl_node_poi_get_data]
-	pop eax ;яюыєўрхь фрээ√х єчыр
+
	stdcall dword[tl_node_poi_get_data], tree1,esi

уфх: tree1 - ёЄЁєъЄєЁр tree_list; esi - єърчрЄхы№ эр ёЄЁєъЄєЁє юяшё√тр■∙є■ єчхы; -eax - єърчрЄхы№ эр фрээ√х єчыр, юяшёррэюую т esi.

+eax - єърчрЄхы№ эр фрээ√х єчыр, юяшёрээюую т esi.

╙ърчрЄхы№, тючтЁр∙рхь√щ ЇєэъЎшхщ tl_node_poi_get_data рэрыюушўхэ єърчрЄхы■ тючтЁр∙рхьюьє ЇєэъЎшхщ tl_node_get_data. ╬Єышўшх ЇєэъЎшщ т Єюь, ўЄю tl_node_poi_get_data ЁрсюЄрхЄ схч чрфхщёЄтютрэш  ъєЁёюЁр. ╘єэъЎш ьш tl_node_poi_get_info, tl_node_poi_get_next_info ш tl_node_poi_get_data ьюцэю ёўшЄ√трЄ№ шэЇюЁьрЎш■ ю єчырї ¤ыхьхэЄр, яЁш ¤Єюь эх ьхэ   Єхъє∙хую яюыюцхэш  ъєЁёюЁр. ╥. х. ьюцэю юЁурэшчютрЄ№ фюёЄєя ъ фрэ√ь ¤ыхьхэЄр т "Їюэютюь Ёхцшьх".

tl_save_mem

@@ -181,12 +168,7 @@ pop edi esi ecx
	MEM_SIZE equ 5000
 	node_data rb MEM_SIZE
 .........
-	push dword tree1
-	push dword 0
-	push dword node_data
-	push dword MEM_SIZE
-	call dword[tl_save_mem]
-	pop eax
+ stdcall dword[tl_save_mem], tree1, 0, node_data, MEM_SIZE

уфх: tree1 - ёЄЁєъЄєЁр tree_list; 0 - юяЎш  ёюїЁрэхэш  т эрўрыю сыюър ярь Єш (хёыш = 1, Єю фюсрты хЄ ¤ыхьхэЄ яюёых фЁєушї ёюїЁрэхээ√ї Ёрэхх); node_data - єърчрЄхы№ эр сыюъ ярь Єш; @@ -198,12 +180,7 @@ pop edi esi ecx

	MEM_SIZE equ 5000
 	node_data rb MEM_SIZE
 .........
-	push dword tree1
-	push dword 0
-	push dword node_data
-	push dword MEM_SIZE
-	call dword[tl_load_mem]
-	pop eax
+ stdcall dword[tl_load_mem], tree1, 0, node_data, MEM_SIZE

уфх: tree1 - ёЄЁєъЄєЁр tree_list; 0 - шэфхъё ёўшЄ√трхьюую ¤ыхьхэЄр; node_data - єърчрЄхы№ эр сыюъ ярь Єш; @@ -217,11 +194,11 @@ pop edi esi ecx node_data rb MEM_SIZE ......... ;ёюїЁрэ хь фрээ√х т 'node_data' - stdcall dword[tl_save_mem], MEM_SIZE, node_data, 0, tree1 + stdcall dword[tl_save_mem], tree1, 0, node_data, MEM_SIZE pop eax ;ъюф ю°шсъш ......... ;яюыєўрхь ЁрчьхЁ фрээ√ї т 'node_data' - stdcall dword[tl_get_mem_size], node_data, tree1 + stdcall dword[tl_get_mem_size], tree1, node_data pop ecx ;ЁрчьхЁ фрээ√ї, фюыцхэ с√Є№ <= MEM_SIZE

version_tree_list

@@ -230,36 +207,33 @@ pop edi esi ecx

╤ЄЁєъЄєЁр tree_list

struc tree_list info_size,info_max_count,style, img_cx,img_cy,\
 	col_bkg,col_zag,col_txt, box_l,box_t,box_w,box_h, capt_cy,info_capt_offs,\
-	info_capt_len,el_focus, p_scrol,on_press
+	info_capt_len,el_focus, p_scroll,on_press
 {
-  .data_info  dd 0
-  .info_size  dw info_size
-  .info_max_count dd info_max_count
-  .style      dd style
-  .data_nodes dd 0
-  .data_img   dd 0
-  .img_cx     dw img_cx
-  .img_cy     dw img_cy
-  .data_img_sys dd 0
-  .ch_tim     dd 0
-  .ls_tim     dd 0
-  .tim_undo   dd 0
-  .cur_pos    dd 0
-  .col_bkg    dd col_bkg
-  .col_zag    dd col_zag
-  .col_txt    dd col_txt
-  .box_left   dd box_l
-  .box_top    dd box_t
-  .box_width  dd box_w
-  .box_height dd box_h
-  .capt_cy    dw capt_cy
-  .info_capt_offs dw info_capt_offs
-  .info_capt_len  dw info_capt_len
-  .el_focus    dd el_focus
-  .p_scrol     dd p_scrol
-  rb 4
-  .on_activate dd 0
-  .on_press    dd on_press
+.box_left    dd box_l
+.box_top     dd box_t
+.box_width   dd box_w
+.box_height  dd box_h
+.data_info   dd 0
+.info_size   dw info_size
+.info_max_count dd info_max_count
+.style       dd style
+.data_nodes  dd 0
+.data_img    dd 0
+.img_cx      dw img_cx
+.img_cy      dw img_cy
+.data_img_sys dd 0
+.ch_tim      dd 0
+.tim_undo    dd 0
+.cur_pos     dd 0
+.col_bkg     dd col_bkg
+.col_zag     dd col_zag
+.col_txt     dd col_txt
+.capt_cy     dw capt_cy
+.info_capt_offs dw info_capt_offs
+.info_capt_len dw info_capt_len
+.el_focus    dd el_focus
+.p_scroll    dd p_scroll
+.on_press    dd on_press
 }

info_size - ъюышўхёЄтю срщЄ, ъюЄюЁюх сєфхЄ т√фхыхэю фы  ърцфюую єчыр. ╫рёЄ№ ¤Єющ ярь Єш яюы№чютрЄхы№ ьюцхЄ шёяюы№чютрЄ№ фы  ётюшї Ўхыхщ (ЁхуєышЁєхЄё  ўхЁхч info_capt_offs ш info_capt_len ёь. Ёшё. 2) р юёЄры№эр  ўрёЄ№ сєфхЄ шёяюы№чютрэр ъръ яюфяшё№ єчыр.

info_max_count - ьръёшьры№эюх ъюышўхёЄтю єчыют, ъюЄюЁ√х ьюцэю фюсртшЄ№ т ¤ыхьхэЄ.

@@ -274,7 +248,7 @@ pop edi esi ecx

col_txt - ЎтхЄ ЄхъёЄр.

capt_cy - т√ёюЄр ёЄЁюъш фы  яюфяшёш ттхЁїє ¤ыхьхэЄр, хёыш ьхэ№°х 9 яюфяшё№ эх т√тюфшЄё .

info_capt_len - фышээр ЄхъёЄр фы  яюфяшёш. ┼ёыш Ёртэю 0, Єю фышээр ёўшЄрхЄё  Єръ: info_size - info_capt_offs.

-

p_scrol - єърчрЄхы№ эр ёЄЁєъЄєЁє ёъЁюыышэур, ёт чрээюую ё фрээ√ь ¤ыхьхэЄюь.

+

p_scroll - єърчрЄхы№ эр ёЄЁєъЄєЁє ёъЁюыышэур, ёт чрээюую ё фрээ√ь ¤ыхьхэЄюь.

on_press - єърчрЄхы№ эр ЇєэъЎш■, ъюЄюЁр  сєфхЄ т√чтрэр яЁш эрцрЄшш [Enter]. ┼ёыш єърчрЄхы№ Ёртхэ 0 Єю эшўхую эх сєфхЄ т√ч√трЄ№ё .

@@ -294,6 +268,6 @@ pop edi esi ecx

╤Єшы№ эх юЄюсЁрцрхЄ єЁютэш (ъръ т ListBox тёх єчы√ юфэюую єЁютэ ).


-

─юъєьхэЄрЎш  юсэюты ырё№ яюёыхфэшщ Ёрч 30.09.10.

+

─юъєьхэЄрЎш  юсэюты ырё№ яюёыхфэшщ Ёрч 10.11.15.

\ No newline at end of file diff --git a/programs/develop/libraries/box_lib/trunk/tree_list.mac b/programs/develop/libraries/box_lib/trunk/tree_list.mac index 0e84696677..141fa428f3 100644 --- a/programs/develop/libraries/box_lib/trunk/tree_list.mac +++ b/programs/develop/libraries/box_lib/trunk/tree_list.mac @@ -1,24 +1,24 @@ -; ьръЁюё фы  ёшёЄхьэющ сшсышюЄхъш box_lib.obj -; ¤ыхьхэЄ TreeList фы  Kolibri OS -; Їрщы яюёыхфэшщ Ёрч шчьхэ ыё  04.11.2015 IgorA -; эр ъюф яЁшьхэхэр GPL2 ышЎхэчш  +; макрос для системной библиотеки box_lib.obj +; элемент TreeList для Kolibri OS +; файл последний раз изменялся 10.11.2015 IgorA +; на код применена GPL2 лицензия sizeof.TreeList equ 20 ;struct TreeList -; type dw ? ;+ 0 Єшя ¤ыхьхэЄр, шыш шэфхъё шъюэъш фы  єчыр -; lev db ? ;+ 2 єЁютхэ№ ¤ыхьхэЄр -; clo db ? ;+ 3 Їыру чръЁ√Єш , шыш юЄъЁ√Єш  (шьххЄ ёь√ёы фы  ЁюфшЄхы№ёъюую єчыр) -; perv dd ? ;+ 4 шэфхъё яЁхф√фє∙хую ¤ыхьхэЄр -; next dd ? ;+ 8 шэфхъё яюёыхфє■∙хую ¤ыхьхэЄр -; tc dd ? ;+12 тЁхь. ёючфрэш  -; td dd ? ;+16 тЁхь. єфрыхэш  +; type dw ? ;+ 0 тип элемента, или индекс иконки для узла +; lev db ? ;+ 2 уровень элемента +; clo db ? ;+ 3 флаг закрытия, или открытия (имеет смысл для родительского узла) +; perv dd ? ;+ 4 индекс предыдущего элемента +; next dd ? ;+ 8 индекс последующего элемента +; tc dd ? ;+12 врем. создания +; td dd ? ;+16 врем. удаления ;ends macro use_tree_list { -;т√фхыэшх ярь Єш фы  ёЄЁєъЄєЁ ёяшёър ш юёэютэющ шэЇюЁьрЎшш (ъюэёЄЁєъЄюЁ) +;выделние памяти для структур списка и основной информации (конструктор) align 4 proc tl_data_init uses eax ecx edi, tlist:dword mov edi,dword[tlist] @@ -27,29 +27,29 @@ proc tl_data_init uses eax ecx edi, tlist:dword mov cx,tl_info_size imul ecx,tl_info_max_count invoke mem.alloc,ecx - mov tl_data_info,eax ;ъюяшЁєхь єърчрЄхы№ эр яюыєўхэє■ ярь Є№ т ёЄЁєъЄєЁє - mov tl_data_img,0 ;юсэєы хь єърчрЄхы№ 'data_img' - mov tl_data_img_sys,0 ;юсэєы хь єърчрЄхы№ 'data_img_sys' + mov tl_data_info,eax ;копируем указатель на полученую память в структуру + mov tl_data_img,0 ;обнуляем указатель 'data_img' + mov tl_data_img_sys,0 ;обнуляем указатель 'data_img_sys' mov ecx,sizeof.TreeList imul ecx,tl_info_max_count invoke mem.alloc,ecx - mov tl_data_nodes,eax ;ъюяшЁєхь єърчрЄхы№ эр яюыєўхэє■ ярь Є№ т ёЄЁєъЄєЁє + mov tl_data_nodes,eax ;копируем указатель на полученую память в структуру stdcall tl_info_clear, edi - ;эрёЄЁющъш фюўхЁэхую ёъЁюыышэур - cmp tl_p_scrol,0 + ;настройки дочернего скроллинга + cmp tl_p_scroll,0 je @f - mov eax,tl_p_scrol - ;*** ЎтхЄют√х эрёЄЁющъш *** + mov eax,tl_p_scroll + ;*** цветовые настройки *** mov ecx,tl_col_bkg mov dword[eax+sb_offs_bckg_col],ecx mov ecx,tl_col_zag mov dword[eax+sb_offs_frnt_col],ecx mov ecx,tl_col_txt mov dword[eax+sb_offs_line_col],ecx - ;*** эрёЄЁющъш ЁрчьхЁют *** + ;*** настройки размеров *** mov ecx,tl_box_left add ecx,tl_box_width mov word[eax+2],cx @@ -61,65 +61,64 @@ proc tl_data_init uses eax ecx edi, tlist:dword ret endp -;юўшёЄър ярь Єш ¤ыхьхэЄр (фхёЄЁєъЄюЁ) +;очистка памяти элемента (деструктор) align 4 proc tl_data_clear uses edi, tlist:dword ;uses eax ??? mov edi,dword[tlist] cmp tl_data_img,0 je @f - invoke mem.free,tl_data_img ;ўшёЄър ёшёЄхьэ√ї шъюэюъ + invoke mem.free,tl_data_img ;чистка системных иконок @@: cmp tl_data_img_sys,0 je @f - invoke mem.free,tl_data_img_sys ;ўшёЄър ёшёЄхьэ√ї шъюэюъ + invoke mem.free,tl_data_img_sys ;чистка системных иконок @@: invoke mem.free,tl_data_info invoke mem.free,tl_data_nodes ret endp -;юўшёЄър ёяшёър (шэЇюЁьрЎшш) +;очистка списка (информации) align 4 proc tl_info_clear uses eax ecx edi, tlist:dword mov edi,dword[tlist] mov tl_ch_tim,0 - mov dword[edi+34],0 ;ls_tim mov tl_tim_undo,0 mov tl_cur_pos,0 mov ecx,sizeof.TreeList imul ecx,tl_info_max_count mov eax,tl_data_nodes @@: - mov byte[eax],0 ;ўшёЄшь єчы√ 0-ьш + mov byte[eax],0 ;чистим узлы 0-ми inc eax loop @b - mov eax,tl_data_nodes ;єърчрЄхы№ эр 0-щ єчхы - mov dword[eax+8],1 ;єърчрЄхы№ next т 0-ь єчых яЁшЁртэштрхь ъ 1 + mov eax,tl_data_nodes ;указатель на 0-й узел + mov dword[eax+8],1 ;указатель next в 0-м узле приравниваем к 1 - cmp tl_p_scrol,0 ;юсЁрсюЄър ёъЁюыышэур + cmp tl_p_scroll,0 ;обработка скроллинга je @f - mov eax,tl_p_scrol + mov eax,tl_p_scroll mov dword[eax+sb_offs_position],0 call tb_scrol_resize @@: ret endp -;ЁхръЎш  эр ъыртшрЄєЁє +;реакция на клавиатуру align 4 proc tl_key uses ebx ecx edi, tlist:dword mov edi,dword[tlist] mov ebx,tl_el_focus cmp dword[ebx],edi - jne .no_focus ;¤ыхьхэЄ эх т Їюъєёх + jne .no_focus ;элемент не в фокусе push eax - mcall 66,2 ;яюыєўшЄ№ Ёхцшь ттюфр ё ъыртшрЄєЁ√ + mcall 66,2 ;получить режим ввода с клавиатуры lea ecx,[tl_key_scan] - cmp eax,1 ;1 = ёърэъюф√ + cmp eax,1 ;1 = сканкоды je @f lea ecx,[tl_key_ascii] @@: @@ -179,33 +178,33 @@ proc tl_key uses ebx ecx edi, tlist:dword ret endp -;ЁхръЎш  эр ь√°№ +;реакция на мышь align 4 proc tl_mouse, tlist:dword pushad mov edi,dword[tlist] - mcall 37,1 ;ъююЁфшэрЄ√ ь√°ш юЄэюёшЄхы№эю юъэр + mcall 37,1 ;координаты мыши относительно окна mov ebx,tl_box_left shl ebx,16 - cmp eax,ebx ;ыхтр  уЁрэшЎр юъэр - jl .no_in_wnd ;.test_scroll эх яЁшьхэ хь + cmp eax,ebx ;левая граница окна + jl .no_in_wnd ;.test_scroll не применяем shr ebx,16 add ebx,tl_box_width shl ebx,16 - cmp eax,ebx ;яЁртр  уЁрэшЎр юъэр + cmp eax,ebx ;правая граница окна jg .test_scroll mov ebx,tl_box_top add ebx,tl_box_height - cmp ax,bx ;эшцэ   уЁрэшЎр юъэр + cmp ax,bx ;нижняя граница окна jg .test_scroll sub ebx,tl_box_height add bx,tl_capt_cy - cmp ax,bx ;тхЁїэ   уЁрэшЎр юъэр + т√ёюЄр яюфяшёш + cmp ax,bx ;верхняя граница окна + высота подписи jl .test_scroll push eax ebx @@ -229,25 +228,25 @@ proc tl_mouse, tlist:dword xor ecx,ecx mov cx,tl_img_cy div ecx - cmp tl_p_scrol,0 ;єўшЄ√трхь ёъЁюыышэу + cmp tl_p_scroll,0 ;учитываем скроллинг je @f - mov edx,tl_p_scrol - add eax,dword[edx+sb_offs_position] ;фюсрты хь ёъЁюыышэу эр тхЁїє + mov edx,tl_p_scroll + add eax,dword[edx+sb_offs_position] ;добавляем скроллинг на верху @@: mov ecx,eax call tl_get_node_count ;eax = node count cmp eax,ecx jl @f - mov eax,ecx ;хёыш ъєЁёюЁ эх т√°хы чр яЁхфхы√ єчыют, тюёёЄрэртыштрхь ёЄрЁюх чэрўхэшх eax + mov eax,ecx ;если курсор не вышел за пределы узлов, восстанавливаем старое значение eax @@: - cmp eax,tl_cur_pos ;хёыш эютюх чэрўхэшх ъєЁёюЁр ёютярыю ё яЁхф√фє∙шь - je @f ;Єю эх ёЄшЁрхь ъєЁёюЁ + cmp eax,tl_cur_pos ;если новое значение курсора совпало с предыдущим + je @f ;то не стираем курсор push esi mov esi,tl_box_top add esi,tl_box_height ;esi = coord bottom border - call tl_draw_null_cursor ;ёЄшЁрхь ъєЁёюЁ + call tl_draw_null_cursor ;стираем курсор pop esi @@: @@ -256,15 +255,15 @@ proc tl_mouse, tlist:dword ; if '+' or '-' press call tl_get_cur_node_index ;eax = node index cmp eax,2 - jl .no_open_close ;ъєЁёюЁ ёЄюшЄ эр яєёЄюь ьхёЄх, схч єчыют + jl .no_open_close ;курсор стоит на пустом месте, без узлов imul eax,sizeof.TreeList add eax,tl_data_nodes xor bx,bx - mov bl,byte[eax+2] ;+2 lev ёюїЁрэ хь єЁютхэ№ Єхъє∙хую єчыр - inc bx ;+ яюых фы  ъєЁёюЁр + mov bl,byte[eax+2] ;+2 lev сохраняем уровень текущего узла + inc bx ;+ поле для курсора cmp si,tl_img_cx - jl .no_open_close ;ь√°хщ яюярыш эр ыхтюх яюых фы  ъєЁёюЁр, уфх Єюўэю эхЄ '+' ш '-' + jl .no_open_close ;мышей попали на левое поле для курсора, где точно нет '+' и '-' mov eax,esi xor edx,edx xor ecx,ecx @@ -279,52 +278,52 @@ proc tl_mouse, tlist:dword mov esi,tl_box_top add esi,tl_box_height ;esi = coord bottom border - call tl_draw_cursor ;яхЁхЁшёютър ъєЁёюЁр + call tl_draw_cursor ;перерисовка курсора call tl_draw_caption_cur_pos jmp .no_draw ;--- mouse event for children scrollbar ---------------------------------------- .test_scroll: - mov edx,tl_p_scrol + mov edx,tl_p_scroll cmp edx,0 - je .no_in_wnd ;яюы№чютрЄхы№ эх ёючфры фюўхЁэхую ёъЁюыышэур + je .no_in_wnd ;пользователь не создал дочернего скроллинга shr ebx,16 add bx,word[edx] ;+0 .size_x shl ebx,16 - cmp eax,ebx ;яЁртр  уЁрэшЎр юъэр + cmp eax,ebx ;правая граница окна jg .no_in_wnd mov eax,dword[edx+sb_offs_max_area] cmp eax,dword[edx+sb_offs_cur_area] - jbe .no_in_wnd ;тёх єчы√ яюярфр■Є т юъэю ёъЁюыышэур + jbe .no_in_wnd ;все узлы попадают в окно скроллинга stdcall scroll_bar_vertical.mouse, edx ;scrollbar_ver_mouse cmp dword[edx+sb_offs_redraw],0 je @f mov dword[edx+sb_offs_redraw],0 - stdcall tl_draw, edi ;яЁюшчю°ыш шчьхэхэш  ёъЁюыышэур + stdcall tl_draw, edi ;произошли изменения скроллинга @@: cmp dword[edx+sb_offs_delta2],0 - jne .no_draw ;яюярыш эр ёъЁюыышэу - эх ёэшьрхь Їюъєё ё TreeList + jne .no_draw ;попали на скроллинг - не снимаем фокус с TreeList ;------------------------------------------------------------------------------- - .no_in_wnd: ;эх яюярыш т юъэю - яюЄхЁ  Їюъєёр (яЁш єёыютшш ўЄю Їюъєё с√ы эр фрээюь ¤хыхьхэЄх) - mcall 37,2 ;яЁютхЁ хь эрцрЄюёЄ№ ы■с√ї ъэюяюъ - cmp eax,0 ;эшўхую эх эрцрыш eax=0 + .no_in_wnd: ;не попали в окно - потеря фокуса (при условии что фокус был на данном эелементе) + mcall 37,2 ;проверяем нажатость любых кнопок + cmp eax,0 ;ничего не нажали eax=0 je .no_draw mov ebx,tl_el_focus cmp dword[ebx],edi - jne .no_draw ;¤ыхьхэЄ эх т Їюъєёх + jne .no_draw ;элемент не в фокусе mov dword[ebx],0 ;reset focus mov esi,tl_box_top add esi,tl_box_height ;esi = coord bottom border - call tl_draw_cursor ;Ёшёєхь ъєЁёюЁ ё яюЄхЁ э√ь Їюъєёюь + call tl_draw_cursor ;рисуем курсор с потеряным фокусом .no_draw: popad ret endp -;юЄьхэр фхщёЄтш  +;отмена действия align 4 proc tl_info_undo uses eax edi, tlist:dword mov edi,dword[tlist] @@ -332,25 +331,25 @@ proc tl_info_undo uses eax edi, tlist:dword cmp tl_ch_tim,eax jbe @f inc tl_tim_undo - call tb_scrol_resize ;юсЁрсюЄър ёъЁюыышэур + call tb_scrol_resize ;обработка скроллинга @@: ret endp -;яютЄюЁ фхщёЄтш  +;повтор действия align 4 proc tl_info_redo uses edi, tlist:dword mov edi,dword[tlist] cmp tl_tim_undo,1 jl @f dec tl_tim_undo - call tb_scrol_resize ;юсЁрсюЄър ёъЁюыышэур + call tb_scrol_resize ;обработка скроллинга @@: ret endp -;єфрыхэшх юЄьхэхээ√ї фхщёЄтшщ -;тэєЄЁхээ   ЇєэъЎш , эх фы  ¤ъёяюЁЄр +;удаление отмененных действий +;внутренняя функция, не для экспорта align 4 tl_info_set_undo: cmp tl_tim_undo,1 @@ -364,14 +363,10 @@ tl_info_set_undo: mov eax,tl_tim_undo sub tl_ch_tim,eax ;ch_tim-=tim_undo; mov eax,tl_ch_tim - cmp [edi+34],eax ;if(ls_tim>ch_tim) - jle @f - mov dword[edi+34],0 ;ls_tim=0 - @@: cmp edx,ecx jle @f - ;if(node[i].tc>ch_tim){ // хёыш ёючфрэшх ёшьтюыр с√ыю юЄьхэхэю + ;if(node[i].tc>ch_tim){ // если создание символа было отменено cmp dword[edx+12],eax jle .no_u1 mov dword[edx+12],0 @@ -391,7 +386,7 @@ tl_info_set_undo: .no_u1: - ;else if(node[i].td>ch_tim) node[i].td=0; // хёыш єфрыхэшх ёшьтюыр с√ыю юЄьхэхэю + ;else if(node[i].td>ch_tim) node[i].td=0; // если удаление символа было отменено cmp dword[edx+16],eax jle .no_u2 mov dword[edx+16],0 @@ -411,7 +406,7 @@ tl_info_set_undo: ret -;т√тюф ёяшёър эр ¤ъЁрэ +;вывод списка на экран align 4 proc tl_draw, tlist:dword pushad @@ -473,11 +468,11 @@ proc tl_draw, tlist:dword mov ecx,edx add ecx,sizeof.TreeList - ;*** яЁюяєёъ єчыют, ъюЄюЁ√х яЁюьюЄрэ√ ёъЁюыышэуюь *** - cmp tl_p_scrol,0 ;хёыш хёЄ№ єърчрЄхы№ эр ёъЁюыышэу + ;*** пропуск узлов, которые промотаны скроллингом *** + cmp tl_p_scroll,0 ;если есть указатель на скроллинг je .end_c1 - mov esi,tl_p_scrol - cmp dword[esi+sb_offs_position],0 ;хёыш ёъЁюыышэу эр тхЁїє, т√їюфшь + mov esi,tl_p_scroll + cmp dword[esi+sb_offs_position],0 ;если скроллинг на верху, выходим je .end_c1 @@: call tl_iterat_next @@ -503,9 +498,9 @@ proc tl_draw, tlist:dword call tl_draw_cursor - mov edi,tl_p_scrol ;Ёшёєхь фюўхЁэшщ ёъЁюыышэу - cmp edi,0 ;фы  Єюую ўЄю-с√ хую эх яЁш°ыюё№ ЁшёютрЄ№ т яюы№чютрЄхы№ёъющ яЁюуЁрььх - je .end_draw ;хёыш эхЄ ёъЁюыышэур т√їюфшь + mov edi,tl_p_scroll ;рисуем дочерний скроллинг + cmp edi,0 ;для того что-бы его не пришлось рисовать в пользовательской программе + je .end_draw ;если нет скроллинга выходим stdcall scroll_bar_vertical.draw, edi .end_draw: @@ -513,7 +508,7 @@ proc tl_draw, tlist:dword ret endp -;яхЁхїюф эр ёыхфє∙шщ тшфшь√щ єчхы (яЁюяєёър  чръЁ√Є√х) +;переход на следущий видимый узел (пропуская закрытые) ;input: ; ecx = pointer to 1 node struct ; edx = pointer to some node struct @@ -537,10 +532,10 @@ tl_iterat_next: call tl_move_next cmp edx,ecx jle @f - call tl_node_not_vis ;яЁюяєёъ єфрыхээ√ї ш юЄьхэхээ√ї + call tl_node_not_vis ;пропуск удаленных и отмененных cmp al,1 je .beg0 - cmp bl,byte[edx+2] ;яЁюяєёъ чръЁ√Є√ї + cmp bl,byte[edx+2] ;пропуск закрытых jl .beg0 @@: pop eax @@ -551,15 +546,15 @@ tl_iterat_next: call tl_move_next cmp edx,ecx jle .endif - cmp dword[edx+16],0 ;td = 'time delete' -> яЁюяєёъ єфрыхээ√ї + cmp dword[edx+16],0 ;td = 'time delete' -> пропуск удаленных jne .else - cmp bl,byte[edx+2] ;яЁюяєёъ чръЁ√Є√ї + cmp bl,byte[edx+2] ;пропуск закрытых jl .else .endif: pop bx ret -;яхЁхїюф эр ёыхфє∙шщ тшфшь√щ єчхы (ш эр чръЁ√Є√х Єюцх) +;переход на следущий видимый узел (и на закрытые тоже) ;input: ; ecx = pointer to 1 node struct ; edx = pointer to some node struct @@ -591,7 +586,7 @@ tl_iterat_next_all: .endif: ret -;яхЁхїюф эр яЁхф√фє∙шщ тшфшь√щ єчхы (яЁюяєёър  чръЁ√Є√х) +;переход на предыдущий видимый узел (пропуская закрытые) ;input: ; ecx = pointer to 1 node struct ; edx = pointer to some node struct @@ -606,7 +601,7 @@ tl_iterat_perv: call tl_move_perv cmp edx,ecx jle @f - call tl_node_not_vis ;яЁюяєёъ єфрыхээ√ї ш юЄьхэхээ√ї + call tl_node_not_vis ;пропуск удаленных и отмененных cmp al,1 je .beg0 @@ -614,7 +609,7 @@ tl_iterat_perv: call tl_move_perv cmp edx,ecx jle @f - cmp dword[edx+16],0 ;td = 'time delete' -> яЁюяєёъ єфрыхээ√ї + cmp dword[edx+16],0 ;td = 'time delete' -> пропуск удаленных jne .beg1 @@: @@ -622,7 +617,7 @@ tl_iterat_perv: pop eax ret -;эрїюфшЄ ЁюфшЄхы№ёъшщ чръЁ√Є√щ єчхы ьръёшьры№эюую єЁютэ  +;находит родительский закрытый узел максимального уровня ;input: ; edx = pointer to some node struct ; edi = pointer to 'TreeList' struct @@ -634,7 +629,7 @@ proc tl_move_max_clo_par uses eax ebx xor ebx,ebx .beg: call tl_move_par - cmp byte[edx+3],1 ;ЁюфшЄхы№ёъшщ єчхы чръЁ√Є ? + cmp byte[edx+3],1 ;родительский узел закрыт ? jne @f mov eax,edx @@: @@ -654,10 +649,10 @@ endp ; edx = pointer to next node struct align 4 tl_move_next: - mov edx,dword[edx+8] - imul edx,sizeof.TreeList - add edx,tl_data_nodes - ret + mov edx,dword[edx+8] + imul edx,sizeof.TreeList + add edx,tl_data_nodes + ret ;input: ; edx = pointer to some node struct @@ -666,12 +661,12 @@ tl_move_next: ; edx = pointer to perv node struct align 4 tl_move_perv: - mov edx,dword[edx+4] - imul edx,sizeof.TreeList - add edx,tl_data_nodes - ret + mov edx,dword[edx+4] + imul edx,sizeof.TreeList + add edx,tl_data_nodes + ret -;яхЁхфтшурхьё  эр ЁюфшЄхы№ёъшщ єчхы, хёыш Єръюую эхЄ, Єю юёЄрты хь ёЄрЁюх чэрўхэшх єърчрЄхы  +;передвигаемся на родительский узел, если такого нет, то оставляем старое значение указателя ;input: ; ecx = ; edx = pointer to some node struct @@ -681,19 +676,19 @@ tl_move_perv: align 4 tl_move_par: cmp byte[edx+2],0 - je .end_f ;єчхы 0-ую єЁютэ  эх ьюцхЄ с√Є№ фюўхЁэшь + je .end_f ;узел 0-го уровня не может быть дочерним push eax ebx esi mov esi,edx ;copy node pointer (edx) mov bl,byte[edx+2] @@: call tl_move_perv cmp edx,ecx - jle @f ;тёх т√°х ёЄю ∙шх єчы√ эх ЁюфшЄхы№ёъшх - call tl_node_not_vis ;яЁюяєёъ єфрыхээ√ї ш юЄьхэхээ√ї + jle @f ;все выше стоящие узлы не родительские + call tl_node_not_vis ;пропуск удаленных и отмененных cmp al,1 je @b cmp byte[edx+2],bl - jl .end_0 ;єфрўэю эр°ыш ЁюфшЄхы№ёъшщ єчхы + jl .end_0 ;удачно нашли родительский узел jmp @b @@: mov esi,ebx ;restore node pointer @@ -702,7 +697,7 @@ tl_move_par: .end_f: ret -;яЁютхЁ хЄ тшфшь√щ ыш єърчрээ√щ єчхы ё єўхЄюь: фюсртыхэшщ, єфрыхэшщ, юЄьхэ фхщёЄтшщ +;проверяет видимый ли указанный узел с учетом: добавлений, удалений, отмен действий ;input: ; edx = pointer to symbol struct ; edi = pointer to 'TreeList' struct @@ -731,7 +726,7 @@ tl_node_not_vis: xor al,al ret -;Ёшёєхь ъєЁёюЁ эр ¤ъЁрэх +;рисуем курсор на экране ;input: ; edi = pointer to TreeInfo struct ; esi = coord bottom border @@ -739,9 +734,9 @@ align 4 proc tl_draw_cursor uses eax ebx ecx edx esi call tl_get_display_cur_pos ;eax = cursor pos in screen cmp eax,0 - jl .end_f ;ъєЁёюЁ эрїюфшЄё  т√°х юъэр, т юсырёЄш яЁюъЁєўхээющ ёъЁюыышэуюь + jl .end_f ;курсор находится выше окна, в области прокрученной скроллингом - cmp tl_data_img_sys,0 ;ёьюЄЁшь хёЄ№ ыш єърчрЄхы№ эр ърЁЄшэъє ёшёЄхьэ√ї шъюэюъ + cmp tl_data_img_sys,0 ;смотрим есть ли указатель на картинку системных иконок jne @f mov ebx,tl_box_left shl ebx,16 @@ -753,7 +748,7 @@ proc tl_draw_cursor uses eax ebx ecx edx esi add cx,tl_capt_cy ;crop image if on the border - cmp esi,ecx ;хёыш ъєЁёюЁ тэшчє ш хую тююс∙х эх тшфэю + cmp esi,ecx ;если курсор внизу и его вообще не видно jl .end_f sub esi,ecx @@ -761,11 +756,11 @@ proc tl_draw_cursor uses eax ebx ecx edx esi mov cx,tl_img_cy cmp si,tl_img_cy jge .crop0 - mov cx,si ;хёыш ъєЁёюЁ тшфхэ ўрёЄшўэю (яюяры эр эшцэ■■ уЁрэшЎє) + mov cx,si ;если курсор виден частично (попал на нижнюю границу) .crop0: mov edx,tl_col_txt - mcall 13 ;Ёшёєхь яЁюёЄющ яЁ ьюєуюы№эшъ, Є.ъ. эхЄ ёшёЄхьэ√ї шъюэюъ + mcall 13 ;рисуем простой прямоугольник, т.к. нет системных иконок jmp .end_f @@: mov ebx,tl_data_img_sys @@ -776,10 +771,10 @@ proc tl_draw_cursor uses eax ebx ecx edx esi add edx,tl_box_top add dx,tl_capt_cy - mov ecx,tl_el_focus ;яЁютхЁ хь т Їюъєёх ¤ыхьхэЄ шыш эхЄ + mov ecx,tl_el_focus ;проверяем в фокусе элемент или нет cmp dword[ecx],edi je .focus - ;хёыш эх т Їюъєёх ёфтшурхь ъююЁфшэрЄ√ эр шъюэъє эх ръЄштэюую ъєЁёюЁр + ;если не в фокусе сдвигаем координаты на иконку не активного курсора xor eax,eax xor ecx,ecx mov cx,tl_img_cx @@ -794,21 +789,21 @@ proc tl_draw_cursor uses eax ebx ecx edx esi mov cx,tl_img_cy ;crop image if on the border - cmp si,dx ;хёыш ъєЁёюЁ тэшчє ш хую тююс∙х эх тшфэю + cmp si,dx ;если курсор внизу и его вообще не видно jl .end_f sub si,dx cmp si,tl_img_cy jge .crop1 - mov cx,si ;хёыш ъєЁёюЁ тшфхэ ўрёЄшўэю (яюяры эр эшцэ■■ уЁрэшЎє) + mov cx,si ;если курсор виден частично (попал на нижнюю границу) .crop1: - mcall 7 ;Ёшёєхь шъюэъє ъєЁёюЁр + mcall 7 ;рисуем иконку курсора .end_f: ret endp -;ёЄшЁрхь ъєЁёюЁ эр ¤ъЁрэх +;стираем курсор на экране ;input: ; edi = pointer to TreeInfo struct ; esi = coord bottom border @@ -816,7 +811,7 @@ align 4 proc tl_draw_null_cursor uses eax ebx ecx edx esi call tl_get_display_cur_pos ;eax = cursor pos in screen cmp eax,0 - jl .end_f ;ъєЁёюЁ эрїюфшЄё  т√°х юъэр, т юсырёЄш яЁюъЁєўхээющ ёъЁюыышэуюь + jl .end_f ;курсор находится выше окна, в области прокрученной скроллингом mov ebx,tl_box_left shl ebx,16 @@ -828,7 +823,7 @@ proc tl_draw_null_cursor uses eax ebx ecx edx esi add cx,tl_capt_cy ;crop image if on the border - cmp esi,ecx ;хёыш ъєЁёюЁ тэшчє ш хую тююс∙х эх тшфэю + cmp esi,ecx ;если курсор внизу и его вообще не видно jl .end_f sub esi,ecx @@ -836,17 +831,17 @@ proc tl_draw_null_cursor uses eax ebx ecx edx esi mov cx,tl_img_cy cmp si,tl_img_cy jge @f - mov cx,si ;хёыш ъєЁёюЁ тшфхэ ўрёЄшўэю (яюяры эр эшцэ■■ уЁрэшЎє) + mov cx,si ;если курсор виден частично (попал на нижнюю границу) @@: mov edx,tl_col_bkg - mcall 13 ;Ёшёєхь яЁюёЄющ яЁ ьюєуюы№эшъ ё Їюэют√ь ЎтхЄюь + mcall 13 ;рисуем простой прямоугольник с фоновым цветом .end_f: ret endp -;схЁхЄ яючшЎш■ ъєЁёюЁр, юЄэюёшЄхы№эю ¤ъЁрэр +;берет позицию курсора, относительно экрана ;input: ; edi = pointer to TreeInfo struct ;output: @@ -854,17 +849,17 @@ endp align 4 tl_get_display_cur_pos: mov eax,tl_cur_pos - cmp tl_p_scrol,0 + cmp tl_p_scroll,0 je @f push ebx - mov ebx,tl_p_scrol + mov ebx,tl_p_scroll mov ebx,dword[ebx+sb_offs_position] - sub eax,ebx ;юЄэшьрхь яючшЎш■ ёъЁюыышэур + sub eax,ebx ;отнимаем позицию скроллинга pop ebx @@: ret -;ЁшёєхЄ єчхы ё: ърЁЄшэъющ, яюфяшё№■, шъюэъющ юЄъЁ√Єш /чръЁ√Єш  ш ышэш ьш ъ ЁюфшЄ. єчыє +;рисует узел с: картинкой, подписью, иконкой открытия/закрытия и линиями к родит. узлу ;input: ; eax = node position ; edx = pointer to some node struct @@ -872,11 +867,11 @@ tl_get_display_cur_pos: ; esi = coord of bottom border align 4 proc tl_draw_node uses eax ebx ecx edx esi - mov ebx,1 ;1 - ьхёЄю яюф ъєЁёюЁ + mov ebx,1 ;1 - место под курсор bt tl_style,2 ;tl_list_box_mode jc @f - inc ebx ;+1 - ьхёЄю яюф чэръ +,- - add bl,byte[edx+2] ;фюсрты хь єЁютхэ№ ¤ыхьхэЄр фы  хую єўхЄр т ыхтюь юЄёЄєях шъюэъш + inc ebx ;+1 - место под знак +,- + add bl,byte[edx+2] ;добавляем уровень элемента для его учета в левом отступе иконки @@: imul bx,tl_img_cx add ebx,tl_box_left @@ -890,7 +885,7 @@ proc tl_draw_node uses eax ebx ecx edx esi add cx,tl_capt_cy ;crop image if on the border - cmp esi,ecx ;хёыш єчхы тэшчє ш хую тююс∙х эх тшфэю + cmp esi,ecx ;если узел внизу и его вообще не видно jl .end_draw sub esi,ecx @@ -898,8 +893,8 @@ proc tl_draw_node uses eax ebx ecx edx esi mov cx,tl_img_cy cmp si,tl_img_cy jge @f - mov cx,si ;хёыш єчхы тшфхэ ўрёЄшўэю (яюяры эр эшцэ■■ уЁрэшЎє) - jmp .crop ;яЁюяєёърхь Ёшёютрэшх эрфяшёш, ъюЄюЁр  ёъюЁхх тёхую Єюцх т√ыхчхЄ чр эшцэ■■ уЁрэшЎє + mov cx,si ;если узел виден частично (попал на нижнюю границу) + jmp .crop ;пропускаем рисование надписи, которая скорее всего тоже вылезет за нижнюю границу @@: call tl_draw_node_caption .crop: @@ -941,18 +936,18 @@ proc tl_draw_node uses eax ebx ecx edx esi dec ah .close: - call tl_draw_node_icon_opn_clo ;Ёшёютрэшх шъюэъш юЄъЁ√Єюую шыш чръЁ√Єюую єчыр + call tl_draw_node_icon_opn_clo ;рисование иконки открытого или закрытого узла bt tl_style,1 jae .end_draw - call tl_draw_node_icon_par_lin ;Ёшёютрэшх ышэшш ъ ЁюфшЄхы№ёъюьє ¤ыхьхэЄє - call tl_draw_node_icon_par_lin_up ;Ёшёютрэшх тхЁЄшъры№эющ ышэшш ъ ЁюфшЄхы№ёъюьє ¤ыхьхэЄє + call tl_draw_node_icon_par_lin ;рисование линии к родительскому элементу + call tl_draw_node_icon_par_lin_up ;рисование вертикальной линии к родительскому элементу .end_draw: ret endp -;ЁшёєхЄ шъюэъш юЄъЁ√Єюую шыш чръЁ√Єюую єчыр (юс√ўэю + шыш -) +;рисует иконки открытого или закрытого узла (обычно + или -) ;input: -; al = єЁютхэ№ ¤ыхьхэЄр +; al = уровень элемента ; ecx = pointer to 1 node struct ; edx = pointer to some node struct ;... @@ -992,9 +987,9 @@ proc tl_draw_node_icon_opn_clo uses eax ebx ecx edx esi ret endp -;Ёшёютрэшх ышэшш ъ ЁюфшЄхы№ёъюьє ¤ыхьхэЄє +;рисование линии к родительскому элементу ;input: -; al = єЁютхэ№ ¤ыхьхэЄр +; al = уровень элемента ; ecx = pointer to 1 node struct ; edx = pointer to some node struct ;... @@ -1051,7 +1046,7 @@ tl_draw_node_icon_par_lin: ;input: -; al = єЁютхэ№ ¤ыхьхэЄр +; al = уровень элемента ; ecx = pointer to 1 node struct ; edx = pointer to some node struct ; edi = pointer to 'TreeList' struct @@ -1064,19 +1059,19 @@ tl_draw_node_icon_par_lin_up: cmp al,0 je @f - xor esi,esi ;т si сєфхь эрёўшЄ√трЄ№ ъюы-тю шъюэюъ, эєцэ√ї фы  яЁюЁшёютъш ышэшш -;--- Ўшъы фы  т√ўшёыхэш  ъюыышўхёЄтр тхЁЄшъры№э√ї ышэшщ --- + xor esi,esi ;в si будем насчитывать кол-во иконок, нужных для прорисовки линии +;--- цикл для вычисления колличества вертикальных линий --- .cycle0: call tl_iterat_perv ;get perv visible item cmp edx,ecx jle .cycle1 ;if begin of list cmp byte[edx+2],al - jle .cycle0end ;єЁютхэ№ тхЁїэхую ¤ыхьхэЄр эх ЄЁхсєхЄ яЁюЁшёютъш + jle .cycle0end ;уровень верхнего элемента не требует прорисовки inc si jmp .cycle0 .cycle0end: - cmp si,0 ;si = ъюы-тю шъюэюъ ышэшш ъюЄюЁ√х эєцэю эрЁшёютрЄ№ ётхЁїє + cmp si,0 ;si = кол-во иконок линии которые нужно нарисовать сверху je @f shl esi,16 @@ -1099,17 +1094,17 @@ tl_draw_node_icon_par_lin_up: add ebx,tl_data_img_sys add esi,tl_box_top - add si,tl_capt_cy ;si = тхЁїэ   уЁрэшЎр юъэр + add si,tl_capt_cy ;si = верхняя граница окна mov eax,7 -;--- Ўшъы фы  Ёшёютрэш  тхЁЄшъры№эющ ышэшш --- +;--- цикл для рисования вертикальной линии --- .cycle1: - sub dx,tl_img_cy ;яюфэшьрхь ъююЁфшэрЄє y ттхЁї + sub dx,tl_img_cy ;поднимаем координату y вверх cmp dx,si jl @f cmp esi,0x10000 jl @f int 0x40 ;draw line icon - sub esi,0x10000 ;єьхэ№°рхь ёўхЄўшъ шъюэюъ + sub esi,0x10000 ;уменьшаем счетчик иконок jmp .cycle1 @@: pop esi @@ -1134,8 +1129,8 @@ tl_get_rows_count: ;input: ; eax = node position -; ebx = [ъююЁфшэрЄр яю юёш x]*65536 + [img_cx] -; ecx = [ъююЁфшэрЄр яю юёш y]*65536 + [img_cy] +; ebx = [координата по оси x]*65536 + [img_cx] +; ecx = [координата по оси y]*65536 + [img_cy] ; edx = pointer to some node struct ; edi = pointer to TreeInfo struct align 4 @@ -1156,16 +1151,16 @@ tl_draw_node_caption: mov edx,esi shr ebx,16 - add bx,tl_img_cx ;ёфтшурхь эрфяшё№ яю уюЁшчюэЄрыш ---> - add bx,3 ;юЄёЄєя + add bx,tl_img_cx ;сдвигаем надпись по горизонтали ---> + add bx,3 ;отступ ;bx = coord. x call tl_strlen ;eax = strlen call tl_get_draw_text_len mov cx,bx ror ecx,16 mov ebx,ecx - add bx,tl_img_cy ;т√Ёртэштшэшх яю эшцэхщ уЁрэшЎх шъюэъш - sub bx,9 ;юЄэшьрхь т√ёюЄє ЄхъёЄр + add bx,tl_img_cy ;выравнивиние по нижней границе иконки + sub bx,9 ;отнимаем высоту текста mov ecx,tl_col_txt and ecx,0xffffff ; or ecx,0x80000000 ;text is ASCIIZ @@ -1182,20 +1177,20 @@ tl_draw_node_caption: align 4 tl_get_draw_text_len: push eax ecx edx - mov esi,eax ;схЁхь фышээє ёЄЁюъш + mov esi,eax ;берем длинну строки mov eax,tl_box_left add eax,tl_box_width cmp eax,ebx - jle .text_null ;хёыш яюфяшё№ яюыэюёЄ№■ тё  чр ¤ъЁрэюь + jle .text_null ;если подпись полностью вся за экраном sub eax,ebx xor edx,edx - mov ecx,6 ;°шЁшэр ёшёЄхьэюую °ЁшЇЄр - div ecx ;ёьюЄЁшь ёъюы№ъю ёшьтюыют ьюцхЄ яюьхёЄшЄ№ё  эр ¤ъЁрэх + mov ecx,6 ;ширина системного шрифта + div ecx ;смотрим сколько символов может поместиться на экране cmp esi,eax jl @f - mov esi,eax ;хёыш фышээр ЄхъёЄр ьхэ№°х, ўхь тёх ьхёЄю яюф ёЄЁюъє + mov esi,eax ;если длинна текста меньше, чем все место под строку jmp @f .text_null: xor esi,esi @@ -1219,13 +1214,13 @@ tl_strlen: sub eax,esi ret -;фюсртшЄ№ єчхы +;добавить узел ;input: -; tlist - єърчрЄхы№ эр ёЄЁєъЄєЁє ышёЄр -; n_opt - юяЎшш фюсртыхэш  -; n_info - єърчрЄхы№ эр фюсрты хь√х фрээ√х +; tlist - указатель на структуру листа +; n_opt - опции добавления +; n_info - указатель на добавляемые данные align 4 -proc tl_node_add uses eax ebx ecx edx edi, n_info:dword, n_opt:dword, tlist:dword +proc tl_node_add uses eax ebx ecx edx edi, tlist:dword, n_opt:dword, n_info:dword mov edi,dword[tlist] call tl_info_set_undo @@ -1286,7 +1281,7 @@ proc tl_node_add uses eax ebx ecx edx edi, n_info:dword, n_opt:dword, tlist:dwor mov cx,tl_info_capt_offs cmp cx,tl_info_size jge .no_text_data - cmp tl_info_capt_len,0 ;яЁютхЁ хь хёЄ№ ыш юуЁрэшўхэшх эр фышээє ёЄЁюъш + cmp tl_info_capt_len,0 ;проверяем есть ли ограничение на длинну строки je .no_len_ogran add cx,tl_info_capt_len and ecx,0xffff @@ -1310,13 +1305,13 @@ proc tl_node_add uses eax ebx ecx edx edi, n_info:dword, n_opt:dword, tlist:dwor cmp eax,tl_info_max_count jge .u0 - mov [ecx],eax ;node[po_t].next=i; // ёё√ыъш яхЁхэряЁрты хь + mov [ecx],eax ;node[po_t].next=i; // ссылки перенаправляем mov ecx,[edx+8] ; *** ecx = node[i].next *** imul ecx,sizeof.TreeList add ecx,tl_data_nodes ; *** ecx = node[node[i].next] *** mov [ecx+4],eax ;node[node[i].next].perv=i; - call tb_scrol_resize ;юсЁрсюЄър ёъЁюыышэур + call tb_scrol_resize ;обработка скроллинга jmp @f .u0: add edx,sizeof.TreeList @@ -1330,7 +1325,7 @@ endp ; edi = pointer to TreeInfo struct align 4 proc tb_scrol_resize uses eax ecx edx - cmp tl_p_scrol,0 ;юсЁрсюЄър ёъЁюыышэур + cmp tl_p_scroll,0 ;обработка скроллинга je @f call tl_get_node_count ;eax = node count mov ecx,eax @@ -1340,7 +1335,7 @@ proc tb_scrol_resize uses eax ecx edx xor ecx,ecx .ye_sb: - mov edx,tl_p_scrol + mov edx,tl_p_scroll mov dword[edx+sb_offs_cur_area],eax mov dword[edx+sb_offs_max_area],ecx stdcall scroll_bar_vertical.draw,edx @@ -1351,7 +1346,7 @@ endp ;input: ;n_info - pointer to node info align 4 -proc tl_node_set_data uses eax ecx edx edi esi, n_info:dword, tlist:dword +proc tl_node_set_data uses eax ecx edx edi esi, tlist:dword, n_info:dword mov edi,dword[tlist] call tl_get_cur_node_index ;eax=po_t cmp eax,2 @@ -1369,7 +1364,7 @@ proc tl_node_set_data uses eax ecx edx edi esi, n_info:dword, tlist:dword mov cx,tl_info_capt_offs cmp cx,tl_info_size jge .no_text_data - mov ax,tl_info_capt_len ;яЁютхЁ хь хёЄ№ ыш юуЁрэшўхэшх эр фышээє ЄхъёЄр + mov ax,tl_info_capt_len ;проверяем есть ли ограничение на длинну текста cmp ax,0 je .no_limit add cx,ax ;cx = tl_info_capt_offs + tl_info_capt_len @@ -1377,151 +1372,146 @@ proc tl_node_set_data uses eax ecx edx edi esi, n_info:dword, tlist:dword xor eax,eax mov ax,tl_info_size cmp eax,ecx - jl .no_limit ;яюы№чютрЄхы№ чрфры ёыш°ъюь сюы№°є■ фышээє ЄхъёЄр + jl .no_limit ;пользователь задал слишком большую длинну текста add esi,ecx sub esi,eax .no_limit: dec esi - mov byte[esi],0 ;юсэєы хь яюёыхфэшщ ёшьтюы яюфяшёш, ўЄю-с√ эх уы■ўшыю хёыш яюы№чютрЄхы№ чрфры эхяЁртшы№эє■ ёЄЁєъЄєЁє + mov byte[esi],0 ;обнуляем последний символ подписи, что-бы не глючило если пользователь задал неправильную структуру .no_text_data: @@: ret endp +;взять указатель на данные узла под курсором ;input: -;dword[ebp+ 8] - pointer to 'TreeList' struct +; tlist - pointer to 'TreeList' struct +;output: +; eax - pointer to node data align 4 -tl_node_get_data: ;тч Є№ єърчрЄхы№ эр фрээ√х єчыр яюф ъєЁёюЁюь - push ebp - mov ebp,esp - push eax ecx edi - mov edi,dword[ebp+8] - call tl_get_cur_node_index ;eax=po_t - mov dword[ebp+8],0 ;if return 0 pointer - cmp eax,2 - jl @f - xor ecx,ecx - mov cx,tl_info_size - imul eax,ecx - add eax,tl_data_info - mov dword[ebp+8],eax ;return node data pointer - @@: - pop edi ecx eax - pop ebp +proc tl_node_get_data uses ecx edi, tlist:dword + mov edi,dword[tlist] + call tl_get_cur_node_index ;eax=po_t + cmp eax,2 + jl @f + movzx ecx,tl_info_size + imul eax,ecx + add eax,tl_data_info + jmp .end_f ;return node data pointer + @@: + xor eax,eax + .end_f: ret +endp +;взять указатель на структуру узла в указанной позиции ;input: -;dword[ebp+ 8] - node index -;dword[ebp+12] - pointer to 'TreeList' struct +; tlist - pointer to 'TreeList' struct +; node_ind - node index +;output: +; eax - pointer to node info align 4 -tl_node_poi_get_info: ;тч Є№ єърчрЄхы№ эр ёЄЁєъЄєЁє єчыр т єърчрээющ яючшЎшш - push ebp - mov ebp,esp - push eax ecx edx edi - mov edi,dword[ebp+12] - mov eax,dword[ebp+8] +proc tl_node_poi_get_info uses ebx ecx edi, tlist:dword, node_ind:dword + mov edi,dword[tlist] + mov ebx,dword[node_ind] - ;cycle to nodes - mov edx,tl_data_nodes - mov ecx,edx - add ecx,sizeof.TreeList - @@: - call tl_iterat_next_all - cmp edx,ecx - jle @f - dec eax - cmp eax,0 - jg @b - jmp .find - @@: - xor edx,edx - .find: - mov dword[ebp+12],edx - pop edi edx ecx eax - pop ebp - ret 4 + ;cycle to nodes + mov eax,tl_data_nodes + mov ecx,eax + add ecx,sizeof.TreeList + @@: + call tl_iterat_next_all + cmp eax,ecx + jle @f + dec ebx + cmp ebx,0 + jg @b + jmp .find + @@: + xor eax,eax + .find: + ret +endp +;взять указатель на следущую структуру узла ;input: -;dword[ebp+ 8] - node param struct -;dword[ebp+12] - pointer to 'TreeList' struct +; tlist - pointer to 'TreeList' struct +; node_p - node param struct +;output: +; eax - pointer to next node struct align 4 -tl_node_poi_get_next_info: ;тч Є№ єърчрЄхы№ эр ёыхфє∙є■ ёЄЁєъЄєЁє єчыр - push ebp - mov ebp,esp - push ecx edx edi - mov edi,dword[ebp+12] - mov edx,dword[ebp+8] +proc tl_node_poi_get_next_info uses ecx edx edi, tlist:dword, node_p:dword + mov edi,dword[tlist] + mov edx,dword[node_p] - mov ecx,tl_data_nodes - add ecx,sizeof.TreeList + mov ecx,tl_data_nodes + add ecx,sizeof.TreeList - call tl_iterat_next_all - cmp edx,ecx - jg @f - xor edx,edx - @@: - - mov dword[ebp+12],edx - pop edi edx ecx - pop ebp - ret 4 + call tl_iterat_next_all + cmp edx,ecx + jg @f + xor edx,edx + @@: + mov eax,edx + ret +endp +;взять указатель на данные узла ;input: -;dword[ebp+ 8] - node param struct -;dword[ebp+12] - pointer to 'TreeList' struct +; tlist - pointer to 'TreeList' struct +; node_p - node param struct +;output: +; eax - pointer align 4 -tl_node_poi_get_data: ;тч Є№ єърчрЄхы№ эр фрээ√х єчыр - push ebp - mov ebp,esp - push eax ecx edx edi - mov edi,dword[ebp+12] - mov edx,dword[ebp+8] +proc tl_node_poi_get_data uses ecx edx edi, tlist:dword, node_p:dword + mov edi,dword[tlist] + mov edx,dword[node_p] - mov dword[ebp+12],0 call tl_get_node_index ;eax = node index cmp eax,2 jl @f xor ecx,ecx mov cx,tl_info_size imul eax,ecx - add eax,dword[edi] - mov dword[ebp+12],eax ;return node data pointer + add eax,tl_data_info + jmp .end_f ;return node data pointer @@: - pop edi edx ecx eax - pop ebp - ret 4 + xor eax,eax ;возвращаем 0 в случае не удачного поиска + .end_f: + ret +endp -;схЁхЄ яючшЎш■ яюф ъєЁёюЁюь +;берет позицию под курсором ;input: ; edi = pointer 'tl' struct ;output: ; eax = index of current node align 4 proc tl_get_cur_node_index uses ecx edx - ;cycle to nodes - xor eax,eax - mov edx,tl_data_nodes - mov ecx,edx - add ecx,sizeof.TreeList - @@: - call tl_iterat_next - cmp edx,ecx - jle @f - cmp eax,tl_cur_pos - je @f - inc eax - jmp @b - @@: - mov eax,edx - sub eax,tl_data_nodes - xor edx,edx - mov ecx,sizeof.TreeList - div ecx - ret + ;cycle to nodes + xor eax,eax + mov edx,tl_data_nodes + mov ecx,edx + add ecx,sizeof.TreeList + @@: + call tl_iterat_next + cmp edx,ecx + jle @f + cmp eax,tl_cur_pos + je @f + inc eax + jmp @b + @@: + mov eax,edx + sub eax,tl_data_nodes + xor edx,edx + mov ecx,sizeof.TreeList + div ecx + ret endp -;схЁхЄ яючшЎш■ єърчрээюую ёшьтюыр +;берет позицию указанного символа ;input: ; edx = pointer node memory ; edi = pointer 'tl' struct @@ -1529,48 +1519,48 @@ endp ; eax = struct index of current node align 4 tl_get_node_index: - push ecx edx - mov eax,edx - sub eax,tl_data_nodes - xor edx,edx - mov ecx,sizeof.TreeList - div ecx - pop edx ecx - ret + push ecx edx + mov eax,edx + sub eax,tl_data_nodes + xor edx,edx + mov ecx,sizeof.TreeList + div ecx + pop edx ecx + ret -;єфрышЄ№ єчхы +;удалить узел align 4 proc tl_node_delete uses eax edx edi, tlist:dword mov edi,dword[tlist] - call tl_get_cur_node_index ;eax=po_t - cmp eax,2 - jl @f - imul eax,sizeof.TreeList - add eax,tl_data_nodes - mov edx,eax - inc tl_ch_tim - mov eax,tl_ch_tim - mov dword[edx+16],eax - call tb_scrol_resize ;юсЁрсюЄър ёъЁюыышэур - @@: + call tl_get_cur_node_index ;eax=po_t + cmp eax,2 + jl @f + imul eax,sizeof.TreeList + add eax,tl_data_nodes + mov edx,eax + inc tl_ch_tim + mov eax,tl_ch_tim + mov dword[edx+16],eax + call tb_scrol_resize ;обработка скроллинга + @@: ret endp -;яюёЄртшЄ№ ъєЁёюЁ эр яхЁт√щ єчхы +;поставить курсор на первый узел align 4 proc tl_cur_beg uses edi, tlist:dword mov edi,dword[tlist] - mov tl_cur_pos,0 - cmp tl_p_scrol,0 - je @f - mov edi,tl_p_scrol - mov dword[edi+sb_offs_position],0 + mov tl_cur_pos,0 + cmp tl_p_scroll,0 + je @f + mov edi,tl_p_scroll + mov dword[edi+sb_offs_position],0 stdcall scroll_bar_vertical.draw, edi - @@: + @@: ret endp -;яхЁхэхёЄш ъєЁёюЁ эр 1 яючшЎш■ эшцх +;перенести курсор на 1 позицию ниже align 4 proc tl_cur_next uses eax ebx edi esi, tlist:dword mov edi,dword[tlist] @@ -1580,127 +1570,125 @@ proc tl_cur_next uses eax ebx edi esi, tlist:dword jge .no_redraw mov esi,tl_box_top add esi,tl_box_height ;esi = coord bottom border - call tl_draw_null_cursor ;ёЄшЁрхь ъєЁёюЁ + call tl_draw_null_cursor ;стираем курсор inc tl_cur_pos - cmp tl_p_scrol,0 ;if not scrol struct + cmp tl_p_scroll,0 ;if not scrol struct je @f call tl_get_rows_count ;eax = rows count - mov ebx,tl_p_scrol + mov ebx,tl_p_scroll add eax,dword[ebx+sb_offs_position] cmp tl_cur_pos,eax jl @f inc dword[ebx+sb_offs_position] stdcall scroll_bar_vertical.draw,ebx - stdcall tl_draw,dword[tlist] ;яюыэр  яхЁхЁшёютър юъэр + stdcall tl_draw,dword[tlist] ;полная перерисовка окна jmp .no_redraw @@: mov edi,dword[tlist] ;restore edi - call tl_draw_cursor ;яхЁхЁшёютър ъєЁёюЁр + call tl_draw_cursor ;перерисовка курсора call tl_draw_caption_cur_pos .no_redraw: ret endp -;схЁхЄ ўшёыю тёхї тшфшь√ї єчыют (эх ёўшЄр  чръЁ√Є√ї фюўхЁэшї) +;берет число всех видимых узлов (не считая закрытых дочерних) ;input: ; edi = pointer 'tl' struct ;output: ; eax = struct index of current node align 4 tl_get_node_count: - push ecx edx - ;cycle to nodes - xor eax,eax - mov edx,tl_data_nodes - mov ecx,edx - add ecx,sizeof.TreeList - @@: - call tl_iterat_next - cmp edx,ecx - jle @f - inc eax - jmp @b - @@: - pop edx ecx - ret +push ecx edx + ;cycle to nodes + xor eax,eax + mov edx,tl_data_nodes + mov ecx,edx + add ecx,sizeof.TreeList + @@: + call tl_iterat_next + cmp edx,ecx + jle @f + inc eax + jmp @b + @@: +pop edx ecx + ret -;схЁхЄ ўшёыю тёхї тшфшь√ї єчыют (ёўшЄр  чръЁ√Є√х фюўхЁэшх) +;берет число всех видимых узлов (считая закрытые дочерние) ;input: ; edi = pointer 'tl' struct ;output: ; eax = struct index of current node align 4 tl_get_node_count_all: - push ecx edx - ;cycle to nodes - xor eax,eax - mov edx,tl_data_nodes - mov ecx,edx - add ecx,sizeof.TreeList - @@: - call tl_iterat_next_all - cmp edx,ecx - jle @f - inc eax - jmp @b - @@: - pop edx ecx - ret +push ecx edx + ;cycle to nodes + xor eax,eax + mov edx,tl_data_nodes + mov ecx,edx + add ecx,sizeof.TreeList + @@: + call tl_iterat_next_all + cmp edx,ecx + jle @f + inc eax + jmp @b + @@: +pop edx ecx + ret -;яхЁхэхёЄш ъєЁёюЁ эр 1 яючшЎш■ т√°х +;перенести курсор на 1 позицию выше align 4 proc tl_cur_perv uses eax edi esi, tlist:dword - mov edi,dword[tlist] - cmp tl_cur_pos,0 - je .no_redraw - mov esi,tl_box_top - add esi,tl_box_height ;esi = coord bottom border - call tl_draw_null_cursor ;ёЄшЁрхь ъєЁёюЁ - dec tl_cur_pos ;фтшурхь ъєЁёюЁ ттхЁї + mov edi,dword[tlist] + cmp tl_cur_pos,0 + je .no_redraw + mov esi,tl_box_top + add esi,tl_box_height ;esi = coord bottom border + call tl_draw_null_cursor ;стираем курсор + dec tl_cur_pos ;двигаем курсор вверх - cmp tl_p_scrol,0 ;хёыш хёЄ№ єърчрЄхы№ эр ёъЁюыышэу - je @f - mov eax,tl_p_scrol - cmp dword[eax+sb_offs_position],0 ;хёыш ёъЁюыышэу эр тхЁїє, т√їюфшь - je @f - mov edi,tl_cur_pos - cmp edi,dword[eax+sb_offs_position] ;хёыш ъєЁёюЁ є°хы т√°х ёъЁюыышэур, Єюуфр юяєёърхь ёъЁюыышэу - jge @f - dec dword[eax+sb_offs_position] - stdcall scroll_bar_vertical.draw, eax - stdcall tl_draw, dword[tlist] ;яюыэр  яхЁхЁшёютър юъэр - jmp .no_redraw - @@: - mov edi,dword[tlist] ;restore edi - ;mov esi,tl_box_top - ;add esi,tl_box_height ;esi = coord bottom border - call tl_draw_cursor ;яхЁхЁшёютър ъєЁёюЁр - call tl_draw_caption_cur_pos - .no_redraw: + cmp tl_p_scroll,0 ;если есть указатель на скроллинг + je @f + mov eax,tl_p_scroll + cmp dword[eax+sb_offs_position],0 ;если скроллинг на верху, выходим + je @f + mov edi,tl_cur_pos + cmp edi,dword[eax+sb_offs_position] ;если курсор ушел выше скроллинга, тогда опускаем скроллинг + jge @f + dec dword[eax+sb_offs_position] + stdcall scroll_bar_vertical.draw, eax + stdcall tl_draw, dword[tlist] ;полная перерисовка окна + jmp .no_redraw + @@: + mov edi,dword[tlist] ;restore edi + call tl_draw_cursor ;перерисовка курсора + call tl_draw_caption_cur_pos + .no_redraw: ret endp -;яхЁхэхёЄш ъєЁёюЁ эр 1 ёЄЁрэшЎє т√°х +;перенести курсор на 1 страницу выше align 4 proc tl_cur_page_up uses eax edi esi, tlist:dword mov edi,dword[tlist] - cmp tl_p_scrol,0 ;хёыш хёЄ№ єърчрЄхы№ эр ёъЁюыышэу + cmp tl_p_scroll,0 ;если есть указатель на скроллинг je .no_redraw - mov esi,tl_p_scrol + mov esi,tl_p_scroll call tl_get_rows_count ;eax = rows count cmp tl_cur_pos,0 jne @f - cmp dword[esi+sb_offs_position],0 ;хёыш ёъЁюыышэу эр тхЁїє, т√їюфшь + cmp dword[esi+sb_offs_position],0 ;если скроллинг на верху, выходим jne @f jmp .no_redraw @@: - cmp tl_cur_pos,eax ;яЁютхЁ хь яючшЎш■ ъєЁёюЁр ш ъюы-тю ёЄюъ эр ёЄЁрэшЎх - jl @f ;хёыш ьхэ№°х, Єю яЁшЁртэштрхь ъ 0, ўЄю-с√ эх юЄэ Є№ сюы№°х ўхь эрфю + cmp tl_cur_pos,eax ;проверяем позицию курсора и кол-во сток на странице + jl @f ;если меньше, то приравниваем к 0, что-бы не отнять больше чем надо sub tl_cur_pos,eax jmp .cursor @@: @@ -1713,200 +1701,200 @@ proc tl_cur_page_up uses eax edi esi, tlist:dword @@: mov dword[esi+sb_offs_position],0 .scroll: - ;яхЁхЁшёютъш юъэр ш ёъЁюыышэур + ;перерисовки окна и скроллинга stdcall tl_draw, edi ;draw window stdcall scroll_bar_vertical.draw, esi .no_redraw: ret endp -;яхЁхэхёЄш ъєЁёюЁ эр 1 ёЄЁрэшЎє эшцх +;перенести курсор на 1 страницу ниже align 4 proc tl_cur_page_down uses eax ebx ecx edi esi, tlist:dword -;eax - ъюы-тю ёЄЁюъ эр ёЄЁрэшЎх -;ebx - ьръё. яючшЎш  ъєЁёюЁр -;ecx - ьръё. яючшЎш  ёъЁюыышэур +;eax - кол-во строк на странице +;ebx - макс. позиция курсора +;ecx - макс. позиция скроллинга mov edi,dword[tlist] - cmp tl_p_scrol,0 ;хёыш хёЄ№ єърчрЄхы№ эр ёъЁюыышэу + cmp tl_p_scroll,0 ;если есть указатель на скроллинг je .no_redraw - mov esi,tl_p_scrol + mov esi,tl_p_scroll call tl_get_node_count ;eax = node count mov ebx,eax call tl_get_rows_count ;eax = rows count mov ecx,ebx - inc ecx ;хёыш эшцэшщ єчхы тшфхэ эр яюыютшэє + inc ecx ;если нижний узел виден на половину cmp ecx,eax ;if (ecx>eax) { ecx=ecx-eax } else { ecx=0 } jl @f - sub ecx,eax ;єьхэ№°рхь ьръёшьры№эє■ яючшЎш■ ёъЁюыышэур, Єръ ўЄю-с√ с√ыш тшфэ√ яюёыхфэшх єчы√ + sub ecx,eax ;уменьшаем максимальную позицию скроллинга, так что-бы были видны последние узлы jmp .control @@: - xor ecx,ecx ;ecx=0 - тёх єчы√ тырч Є т ¤ъЁрэ, ёъЁюыышэу эх эєцхэ + xor ecx,ecx ;ecx=0 - все узлы влазят в экран, скроллинг не нужен .control: - cmp tl_cur_pos,ebx ;ъєЁёюЁ тэшчє ? + cmp tl_cur_pos,ebx ;курсор внизу ? jl @f - cmp dword[esi+sb_offs_position],ecx ;ёъЁюыышэу тэшчє ? + cmp dword[esi+sb_offs_position],ecx ;скроллинг внизу ? jl @f jmp .no_redraw @@: - add tl_cur_pos,eax ;яхЁхьх∙рхь ъєЁёюЁ + add tl_cur_pos,eax ;перемещаем курсор cmp tl_cur_pos,ebx jl @f mov tl_cur_pos,ebx @@: - add dword[esi+sb_offs_position],eax ;яхЁхьх∙рхь ёъЁюыышэу + add dword[esi+sb_offs_position],eax ;перемещаем скроллинг cmp dword[esi+sb_offs_position],ecx jl @f mov dword[esi+sb_offs_position],ecx @@: - ;яхЁхЁшёютъш юъэр ш ёъЁюыышэур + ;перерисовки окна и скроллинга stdcall tl_draw, edi ;draw window stdcall scroll_bar_vertical.draw, esi .no_redraw: ret endp -;юЄъЁ√Є№/чръЁ√Є№ єчхы (ЁрсюЄрхЄ ё єчырьш ъюЄюЁ√х шьх■Є фюўхЁэшх єчы√) +;открыть/закрыть узел (работает с узлами которые имеют дочерние узлы) align 4 proc tl_node_close_open uses eax edx edi, tlist:dword mov edi,dword[tlist] - call tl_get_cur_node_index ;eax = яючшЎш  єчыр эр ъюЄюЁюь ёЄюшЄ ъєЁёюЁ - cmp eax,2 ;ъєЁёюЁ ёЄюшЄ эр єчых ? - jl @f - imul eax,sizeof.TreeList - add eax,tl_data_nodes - ;eax = єърчрЄхы№ эр ёЄЁєъЄєЁє єчыр т√сЁрээюую ъєЁёюЁюь - push dword edi - push dword eax - call tl_node_poi_get_next_info - pop dword edx ;edx = єърчрЄхы№ эр ёЄЁєъЄєЁє єчыр ъюЄюЁ√щ шфхЄ яюёых єчыр eax - cmp edx,0 ;хёЄ№ ыш єчы√ эшцх т√сЁрээюую эрьш ? - je @f - mov dl,byte[edx+2] ;схЁхь єЁютхэ№ эшцэхую єчыр - cmp byte[eax+2],dl ;+2 = .lev - jge @f ;хёыш эшцэшх єчы√ ьхэ№°хую єЁютэ , чэрўшЄ юэш эх фюўхЁэшх, ъюэхЎ ЇєэъЎшш - xor byte[eax+3],1 ;+3 = .clo *** юЄъЁ√Єшх/чръЁ√Єшх єчыр *** - call tb_scrol_resize ;юсЁрсюЄър ёъЁюыышэур + call tl_get_cur_node_index ;eax = позиция узла на котором стоит курсор + cmp eax,2 ;курсор стоит на узле ? + jl @f + imul eax,sizeof.TreeList + add eax,tl_data_nodes + ;eax = указатель на структуру узла выбранного курсором + push eax + stdcall tl_node_poi_get_next_info, edi,eax + mov edx,eax ;edx = указатель на структуру узла который идет после узла eax + pop eax + cmp edx,0 ;есть ли узлы ниже выбранного нами ? + je @f + mov dl,byte[edx+2] ;берем уровень нижнего узла + cmp byte[eax+2],dl ;+2 = .lev + jge @f ;если нижние узлы меньшего уровня, значит они не дочерние, конец функции + xor byte[eax+3],1 ;+3 = .clo *** открытие/закрытие узла *** + call tb_scrol_resize ;обработка скроллинга - stdcall tl_draw, edi ;юсэютыхэшх юъэр - @@: + stdcall tl_draw, edi ;обновление окна + @@: ret endp -;єтхышўшЄ№ єЁютхэ№ +;увеличить уровень align 4 proc tl_node_lev_inc uses eax ecx edx edi, tlist:dword - mov edi,dword[tlist] - bt tl_style,2 ;tl_list_box_mode - jc @f - call tl_get_cur_node_index ;eax=po_t - cmp eax,2 - jl @f - mov ecx,tl_data_nodes - imul eax,sizeof.TreeList - add eax,ecx ;eax = pointer to some node struct - add ecx,sizeof.TreeList ;ecx = pointer to 1 node struct + mov edi,dword[tlist] + bt tl_style,2 ;tl_list_box_mode + jc @f + call tl_get_cur_node_index ;eax=po_t + cmp eax,2 + jl @f + mov ecx,tl_data_nodes + imul eax,sizeof.TreeList + add eax,ecx ;eax = pointer to some node struct + add ecx,sizeof.TreeList ;ecx = pointer to 1 node struct - mov edx,eax - call tl_iterat_perv ;яЁютхЁ хь хёЄ№ ыш тхЁїэшщ єчхы - cmp edx,ecx - jle @f ;хёыш тхЁїэхую єчыр эхЄ Єю Єхъє∙шщ єчхы эх фтшурхь - mov cl,byte[edx+2] ;схЁхь єЁютхэ№ ЁюфшЄхы№ёъюую єчыр - inc cl ;фюсрты хь 1 ш яюыєўрхь ьръёшьры№эюх чэрўхэшх - cmp byte[eax+2],cl - jge @f - inc byte[eax+2] ;єтхышўштрхь чэрўхэшх єчыр - @@: + mov edx,eax + call tl_iterat_perv ;проверяем есть ли верхний узел + cmp edx,ecx + jle @f ;если верхнего узла нет то текущий узел не двигаем + mov cl,byte[edx+2] ;берем уровень родительского узла + inc cl ;добавляем 1 и получаем максимальное значение + cmp byte[eax+2],cl + jge @f + inc byte[eax+2] ;увеличиваем значение узла + @@: ret endp -;єьхэ№°шЄ№ єЁютхэ№ +;уменьшить уровень align 4 proc tl_node_lev_dec uses eax edi, tlist:dword mov edi,dword[tlist] - call tl_get_cur_node_index ;eax=po_t - cmp eax,2 - jl @f - imul eax,sizeof.TreeList - add eax,tl_data_nodes - cmp byte[eax+2],0 - je @f - dec byte[eax+2] - @@: + call tl_get_cur_node_index ;eax=po_t + cmp eax,2 + jl @f + imul eax,sizeof.TreeList + add eax,tl_data_nodes + cmp byte[eax+2],0 + je @f + dec byte[eax+2] + @@: ret endp -;яхЁхьх∙рхь єчхы ттхЁї +;перемещаем узел вверх align 4 proc tl_node_move_up uses eax ebx ecx edx edi esi, tlist:dword - mov edi,dword[tlist] - call tl_get_cur_node_index ;eax=po_t - cmp eax,2 - jl @f - mov ebx,eax ;copy index of node struct - mov edx,tl_data_nodes - mov ecx,edx - add ecx,sizeof.TreeList - imul eax,sizeof.TreeList - add eax,edx ;eax = pointer to 2 node struct - mov edx,eax ;edx = pointer to 2 node struct - mov esi,eax ;esi = pointer to 2 node struct - call tl_iterat_perv ;edx = pointer to 1 node struct - call tl_get_node_index ;eax = index of 1 node struct - cmp edx,ecx - jle @f - cmp dword[edx+8],ebx ;+8 next - jne .po8 - call tl_node_move_po6 ;єчы√ шфєЄ яюфЁ ф ьхэ хь 6 ёё√ыюъ - jmp .cur_mov - .po8: - call tl_node_move_po8 ;єчы√ шфєЄ эх яюфЁ ф ьхэ хь 8 ёё√ыюъ - .cur_mov: - push dword edi - call tl_cur_perv - push dword edi - call tl_draw - @@: + mov edi,dword[tlist] + call tl_get_cur_node_index ;eax=po_t + cmp eax,2 + jl @f + mov ebx,eax ;copy index of node struct + mov edx,tl_data_nodes + mov ecx,edx + add ecx,sizeof.TreeList + imul eax,sizeof.TreeList + add eax,edx ;eax = pointer to 2 node struct + mov edx,eax ;edx = pointer to 2 node struct + mov esi,eax ;esi = pointer to 2 node struct + call tl_iterat_perv ;edx = pointer to 1 node struct + call tl_get_node_index ;eax = index of 1 node struct + cmp edx,ecx + jle @f + cmp dword[edx+8],ebx ;+8 next + jne .po8 + call tl_node_move_po6 ;узлы идут подряд меняем 6 ссылок + jmp .cur_mov + .po8: + call tl_node_move_po8 ;узлы идут не подряд меняем 8 ссылок + .cur_mov: + push dword edi + call tl_cur_perv + push dword edi + call tl_draw + @@: ret endp -;яхЁхьх∙рхь єчхы тэшч +;перемещаем узел вниз align 4 proc tl_node_move_down uses eax ebx ecx edx edi esi, tlist:dword - mov edi,dword[tlist] - call tl_get_cur_node_index ;eax=po_t - cmp eax,2 - jl @f - mov ebx,eax ;copy index of node struct - mov edx,tl_data_nodes - mov ecx,edx - add ecx,sizeof.TreeList - imul eax,sizeof.TreeList - add eax,edx ;eax = pointer to 1 node struct - mov edx,eax ;edx = pointer to 1 node struct - mov esi,eax ;esi = pointer to 1 node struct - call tl_iterat_next ;edx = pointer to 2 node struct - call tl_get_node_index ;eax = index of 2 node struct - cmp edx,ecx - jle @f - cmp dword[esi+8],eax ;+8 next - jne .po8 - xchg eax,ebx ;ьхэ х яюЁ фюъ ёыхфютрэш  чрьхэ хь√ї єчыют - xchg edx,esi - call tl_node_move_po6 ;єчы√ шфєЄ яюфЁ ф ьхэ хь 6 ёё√ыюъ - jmp .cur_mov - .po8: ;р ЄєЄ яюЁ фюъ ёыхфютрэш  єчыют эх ьхэ хь - call tl_node_move_po8 ;єчы√ шфєЄ эх яюфЁ ф ьхэ хь 8 ёё√ыюъ - .cur_mov: - stdcall tl_cur_next, edi - stdcall tl_draw, edi - @@: + mov edi,dword[tlist] + call tl_get_cur_node_index ;eax=po_t + cmp eax,2 + jl @f + mov ebx,eax ;copy index of node struct + mov edx,tl_data_nodes + mov ecx,edx + add ecx,sizeof.TreeList + imul eax,sizeof.TreeList + add eax,edx ;eax = pointer to 1 node struct + mov edx,eax ;edx = pointer to 1 node struct + mov esi,eax ;esi = pointer to 1 node struct + call tl_iterat_next ;edx = pointer to 2 node struct + call tl_get_node_index ;eax = index of 2 node struct + cmp edx,ecx + jle @f + cmp dword[esi+8],eax ;+8 next + jne .po8 + xchg eax,ebx ;меняе порядок следования заменяемых узлов + xchg edx,esi + call tl_node_move_po6 ;узлы идут подряд меняем 6 ссылок + jmp .cur_mov + .po8: ;а тут порядок следования узлов не меняем + call tl_node_move_po8 ;узлы идут не подряд меняем 8 ссылок + .cur_mov: + stdcall tl_cur_next, edi + stdcall tl_draw, edi + @@: ret endp @@ -1978,249 +1966,244 @@ tl_node_move_po8: ; edi = pointer to 'TreeList' struct align 4 tl_draw_caption_cur_pos: - cmp tl_capt_cy,9 ;9 - minimum caption height - jl @f - push eax ebx ecx edx edi esi - mov ebx,edi ;calculate cursor position - mov eax,tl_cur_pos - inc eax - lea edi,[txt_capt_cur] - add edi,7 - call tl_convert_to_str - mov edi,ebx + cmp tl_capt_cy,9 ;9 - minimum caption height + jl @f + pushad + mov ebx,edi ;calculate cursor position + mov eax,tl_cur_pos + inc eax + lea edi,[txt_capt_cur] + add edi,7 + call tl_convert_to_str + mov edi,ebx - mov eax,4 ;draw text captions - mov ebx,tl_box_left - shl ebx,16 - add ebx,5*65536+3 - add ebx,tl_box_top - mov ecx,tl_col_txt - or ecx,0xc0000000 ;0x40000000 чръЁр°штрЄ№ Їюэ ЎтхЄюь edi - lea edx,[txt_capt_cur] - mov edi,tl_col_zag - int 0x40 + mov ebx,tl_box_left + shl ebx,16 + add ebx,5*65536+3 + add ebx,tl_box_top + mov ecx,tl_col_txt + or ecx,0xc0000000 ;0x40000000 закрашивать фон цветом edi + lea edx,[txt_capt_cur] + mov edi,tl_col_zag + mcall 4 ;draw text captions - pop esi edi edx ecx ebx eax - @@: - ret + popad + @@: + ret ;input: -;dword[ebp+ 8] - memory size -;dword[ebp+12] - pointer to memory -;dword[ebp+16] - options: 0 - first element, 1 - add next element -;dword[ebp+20] - pointer to 'TreeList' struct +; tlist - pointer to 'TreeList' struct +; opt - options: 0 - first element, 1 - add next element +; h_mem - pointer to memory +; mem_size - memory size ;output: -;dword[ebp+ 8] - error code +; eax - error code align 4 -tl_save_mem: - push ebp - mov ebp,esp - push eax ebx ecx edx edi esi - mov esi,dword[ebp+12] - mov edi,dword[ebp+20] +proc tl_save_mem uses ebx ecx edx edi esi, tlist:dword, opt:dword, h_mem:dword, mem_size:dword + mov esi,dword[h_mem] + mov edi,dword[tlist] - cmp dword[ebp+16],0 ;add mode - je @f - push dword edi - push dword esi - call tl_get_mem_size ;схЁхь ЁрчьхЁ Ёрэхх ёюїЁрэ╕ээ√ї фрээ√ї - pop ebx - add esi,ebx - @@: + cmp dword[opt],0 ;add mode + je @f + stdcall tl_get_mem_size, edi,esi ;eax = размер ранее сохранённых данных + add esi,eax + @@: - xor ebx,ebx - mov bx,tl_info_size + xor ebx,ebx + mov bx,tl_info_size - call tl_get_node_count_all ;eax = all node count + call tl_get_node_count_all ;eax = all node count - mov ecx,eax ;т√ўшёы хь ёъюы№ъю ярь Єш фюыцэю с√Є№ чряюыэхэю - imul ecx,ebx ;єьэюцрхь эр ЁрчьхЁ ёЄЁєъЄєЁ√ єчыр - add ecx,tl_save_load_heder_size+1 ;element header +1 end element sumbol - add ecx,esi ;фюсрты хь єърчрЄхы№ эр эрўрыю ярь Єш (ё єўхЄюь Ёрэхх чряшёрээ√ї ёЄЁєъЄєЁ) - sub ecx,dword[ebp+12] ;юЄэшьрхь єърчрЄхы№ эр эрўрыю ярь Єш (схч Ёрэхх чряшёрээ√ї ёЄЁєъЄєЁ) - cmp ecx,dword[ebp+8] ;ecx = element memory size - jg .err_mem_size + mov ecx,eax ;вычисляем сколько памяти должно быть заполнено + imul ecx,ebx ;умножаем на размер структуры узла + add ecx,tl_save_load_heder_size+1 ;element header +1 end element sumbol + add ecx,esi ;добавляем указатель на начало памяти (с учетом ранее записанных структур) + sub ecx,dword[h_mem] ;отнимаем указатель на начало памяти (без ранее записанных структур) + cmp ecx,dword[mem_size] ;ecx = element memory size + jg .err_mem_size - ;save tree params (in header) - mov dword[esi],'tree' - mov word[esi+4],bx - mov dword[esi+6],eax ;element count + ;save tree params (in header) + mov dword[esi],'tree' + mov word[esi+4],bx + mov dword[esi+6],eax ;element count - mov eax,tl_style - mov dword[esi+10],eax + mov eax,tl_style + mov dword[esi+10],eax - mov eax,tl_cur_pos - mov dword[esi+14],eax + mov eax,tl_cur_pos + mov dword[esi+14],eax - mov ax,tl_info_capt_offs - mov word[esi+18],ax + mov ax,tl_info_capt_offs + mov word[esi+18],ax - mov ax,tl_info_capt_len - mov word[esi+20],ax + mov ax,tl_info_capt_len + mov word[esi+20],ax - ;copy scroll position - mov edx,tl_p_scrol - mov eax,dword[edx+sb_offs_position] - mov dword[esi+22],eax + ;copy scroll position + mov edx,tl_p_scroll + mov eax,dword[edx+sb_offs_position] + mov dword[esi+22],eax - add esi,tl_save_load_heder_size ;add header size + add esi,tl_save_load_heder_size ;add header size - ;cycle to nodes - mov edx,tl_data_nodes - mov ecx,edx - add ecx,sizeof.TreeList - @@: - call tl_iterat_next_all - cmp edx,ecx - jle @f -;save node params -call tl_get_node_index ;eax = index of pointer [edx] -mov dword[esi],eax + ;cycle to nodes + mov edx,tl_data_nodes + mov ecx,edx + add ecx,sizeof.TreeList + @@: + call tl_iterat_next_all + cmp edx,ecx + jle @f + ;save node params + call tl_get_node_index ;eax = index of pointer [edx] + mov dword[esi],eax -add esi,4 -mov eax,dword[edx] ;eax = (type; lev; clo) -mov dword[esi],eax -add esi,4 + add esi,4 + mov eax,dword[edx] ;eax = (type; lev; clo) + mov dword[esi],eax + add esi,4 -stdcall tl_node_poi_get_data, edx,edi -pop dword eax + stdcall tl_node_poi_get_data, edi,edx ;eax - pointer node data -;call tl_node_copy_data -push ecx edi - mov edi,eax - mov ecx,ebx - xchg esi,edi - rep movsb - mov esi,edi -pop edi ecx -;add esi,ebx - jmp @b - @@: - mov byte[esi],0 ;end of 'treelist' - mov dword[ebp+20],0 ;return error code - jmp @f - .err_mem_size: - or dword[ebp+20],tl_err_save_memory_size - @@: - pop esi edi edx ecx ebx eax - pop ebp - ret 12 + ;call tl_node_copy_data + push ecx edi + mov edi,eax + mov ecx,ebx + xchg esi,edi + rep movsb + mov esi,edi + pop edi ecx + ;add esi,ebx + jmp @b + @@: + mov byte[esi],0 ;end of 'treelist' + xor eax,eax ;return error code + jmp @f + .err_mem_size: + mov eax,tl_err_save_memory_size + @@: + ret +endp ;input: -;dword[ebp+ 8] - memory size -;dword[ebp+12] - pointer to memory -;word[ebp+16] - options: element index -;word[ebp+18] - options: 2*(add mode)+(init mode) -;dword[ebp+20] - pointer to 'TreeList' struct +; tlist - pointer to 'TreeList' struct +; opt - options: element index + (2*(add mode)+(init mode)) shl 16 +; h_mem - pointer to memory +; mem_size - memory size +; размер памяти, пока не используется (назначался для контроля) +; для его использования нужно доработать функцию ;output: -;dword[ebp+ 8] - error code +; eax - error code +;memory header format: +; +0 - (4) 'tree' +; +4 - (2) info size +; +6 - (4) count nodes +; +10 - (4) tlist style +; +14 - (4) cursor pos +; +18 - (2) info capt offs +; +20 - (2) info capt len +; +22 - (4) scroll pos +;memory data format: +; +26 - (info size + 8) * count nodes align 4 -tl_load_mem: - push ebp - mov ebp,esp - push eax ebx ecx edx edi esi - mov esi,dword[ebp+12] - mov edi,dword[ebp+20] +proc tl_load_mem uses ebx ecx edx edi esi, tlist:dword, opt:dword, h_mem:dword, mem_size:dword +locals + er_code dd ? +endl + mov esi,dword[h_mem] + mov edi,dword[tlist] - mov dword[ebp+20],0 ;return error code + mov dword[er_code],0 ;return error code - xor ecx,ecx - mov cx,word[ebp+16] - cmp cx,0 ;load in array mode - je @f -; push dword edi -; push dword esi -; call tl_get_mem_size ;схЁхь ЁрчьхЁ Ёрэхх ёюїЁрэ╕ээ√ї фрээ√ї -; pop ebx -; add esi,ebx - .beg_cycle: - cmp dword[esi],'tree' - jne .no_tree - xor ebx,ebx - mov bx,word[esi+4] - add bx,8 - imul ebx,dword[esi+6] - add ebx,tl_save_load_heder_size - add esi,ebx - loop .beg_cycle - @@: + mov ecx,dword[opt] + cmp cx,0 ;load in array mode + je @f + ;stdcall tl_get_mem_size, esi,edi ;берем размер ранее сохранённых данных + ;add esi,eax + and ecx,0xffff + cld + .beg_cycle: + cmp dword[esi],'tree' + jne .no_tree + xor ebx,ebx + mov bx,word[esi+4] + add bx,8 + imul ebx,dword[esi+6] + add ebx,tl_save_load_heder_size + add esi,ebx + loop .beg_cycle + @@: - cmp dword[esi],'tree' - jne .no_tree - bt word[ebp+18],1 ;load in add mode - jc @f - stdcall tl_info_clear, dword edi - @@: + cmp dword[esi],'tree' + jne .no_tree + bt dword[opt],17 ;load in add mode + jc @f + stdcall tl_info_clear, dword edi + @@: - xor ebx,ebx - mov bx,word[esi+4] ;info_size - cmp bx,tl_info_size - je @f - or dword[ebp+20],tl_err_load_info_size - @@: - mov ecx,dword[esi+6] ;count nodes - cmp ecx,1 - jl .end_f - mov edx,esi ;save header pointer - add esi,tl_save_load_heder_size + xor ebx,ebx + mov bx,word[esi+4] ;info_size + cmp bx,tl_info_size + je @f + or dword[er_code],tl_err_load_info_size + @@: + mov ecx,dword[esi+6] ;count nodes + cmp ecx,1 + jl .end_f + mov edx,esi ;save header pointer + add esi,tl_save_load_heder_size cld @@: ;load node params -mov eax,dword[esi+4] + mov eax,dword[esi+4] ror eax,16 ;eax - options (type; lev; clo) -add esi,8 - stdcall tl_node_add, esi,eax,edi + add esi,8 + stdcall tl_node_add, edi,eax,esi stdcall tl_cur_next, edi ;... -add esi,ebx - loop @b + add esi,ebx + loop @b - bt word[ebp+18],1 ;load in add mode - jc .no_tree - mov eax,dword[edx+14] ;set cursor pos - mov tl_cur_pos,eax - mov eax,dword[edx+22] ;set scroll pos - mov ebx,tl_p_scrol - cmp ebx,0 - je .end_f - mov dword[ebx+sb_offs_position],eax + bt dword[opt],17 ;load in add mode + jc .no_tree + mov eax,dword[edx+14] ;set cursor pos + mov tl_cur_pos,eax + mov ebx,tl_p_scroll + cmp ebx,0 + je .end_f + mov eax,dword[edx+22] ;set scroll pos + mov dword[ebx+sb_offs_position],eax stdcall scroll_bar_vertical.draw, ebx - jmp .end_f - .no_tree: - mov dword[ebp+20],tl_err_load_caption - .end_f: - pop esi edi edx ecx ebx eax - pop ebp - ret 12 + jmp .end_f + .no_tree: + mov dword[er_code],tl_err_load_caption + .end_f: + mov eax,dword[er_code] + ret +endp -;input: -;dword[ebp+ 8] - pointer to memory -;dword[ebp+12] - pointer to 'TreeList' struct +;берет размер памяти занятой функцией tl_save_mem при сохранении элементов ;output: -;dword[ebp+ 8] - error code +; eax - error code align 4 -tl_get_mem_size: ;схЁхЄ ЁрчьхЁ ярь Єш чрэ Єющ ЇєэъЎшхщ tl_save_mem яЁш ёюїЁрэхэшш ¤ыхьхэЄют - push ebp - mov ebp,esp - push ebx edi esi - mov esi,dword[ebp+ 8] - mov edi,dword[ebp+12] - @@: - cmp dword[esi],'tree' - jne @f - xor ebx,ebx - mov bx,word[esi+4] - add bx,8 ;ЁрчьхЁ фюяюыэшЄхы№эющ шэЇюЁьрЎшш юс єчых (шэфхъё чряшёш; шэфхъё шъюэъш, єЁютхэ№, ...) - imul ebx,dword[esi+6] - add ebx,tl_save_load_heder_size - add esi,ebx - jmp @b - @@: - sub esi,dword[ebp+ 8] - mov dword[ebp+12],esi ;тючтЁр∙рхь ЁрчьхЁ сыюър ярь Єш - pop esi edi edx - pop ebp - ret 4 +proc tl_get_mem_size uses ebx edi, tlist:dword, h_mem:dword + mov edi,dword[tlist] + mov eax,dword[h_mem] + @@: + cmp dword[eax],'tree' + jne @f + xor ebx,ebx + mov bx,word[eax+4] + add bx,8 ;размер дополнительной информации об узле (индекс записи; индекс иконки, уровень, ...) + imul ebx,dword[eax+6] + add ebx,tl_save_load_heder_size + add eax,ebx + jmp @b + @@: + sub eax,dword[h_mem] ;отнимаем указатель на начало памяти + ;и получаем размер блока памяти + ret +endp ;ascii scan key @@ -2240,34 +2223,31 @@ tl_key_scan db 28,57, 72, 80, 75, 77, 83, 73, 81 txt_capt_cur db 'Строка ',0 txt_capt_otm db 'Отмены ',0 -;¤ЄюЄ ъюф эх ьющ, юэ яЁхюсЁрчєхЄ ўшёыю т ёЄЁюъє +;этот код не мой, он преобразует число в строку ;input: ; eax = value ; edi = string buffer align 4 tl_convert_to_str: - pushad - mov dword[edi+1],0x20202020 - call .str - popad - ret + pushad + mov dword[edi+1],0x20202020 + call .str + popad + ret align 4 .str: - mov ecx,0x0a ;чрфрхЄё  ёшёЄхьр ёўшёыхэш  шчьхэ ■Єё  ЁхушёЄЁ√ ebx,eax,ecx,edx тїюфэ√х ярЁрьхЄЁ√ eax - ўшёыю - ;яЁхЁхтюф ўшёыр т ASCII ёЄЁюъє тчюфэ√х фрээ√х ecx=ёшёЄхьр ёўшёыхэ  edi рфЁхё ъєфр чряшё√трЄ№, сєфхь ёЄЁюъє, яЁшўхь ъюэхЎ яхЁхьхээющ - cmp eax,ecx ;ёЁртэшЄ№ хёыш т eax ьхэ№°х ўхь т ecx Єю яхЁхщЄш эр @@-1 Є.х. эр pop eax + mov ecx,0x0a ;задается система счисления изменяются регистры ebx,eax,ecx,edx входные параметры eax - число + ;преревод числа в ASCII строку взодные данные ecx=система счисленя edi адрес куда записывать, будем строку, причем конец переменной + cmp eax,ecx ;сравнить если в eax меньше чем в ecx то перейти на @@-1 т.е. на pop eax jb @f - xor edx,edx ;юўшёЄшЄ№ edx - div ecx ;ЁрчфхышЄ№ - юёЄрЄюъ т edx - push edx ;яюыюцшЄ№ т ёЄхъ - ;dec edi ;ёьх∙хэшх эхюсїюфшьюх фы  чряшёш ё ъюэЎр ёЄЁюъш - call .str;яхЁхщЄш эр ёрьє ёхс  Є.х. т√чтрЄ№ ёрьє ёхс  ш Єръ фю Єюую ьюьхэЄр яюър т eax эх ёЄрэхЄ ьхэ№°х ўхь т ecx + xor edx,edx ;очистить edx + div ecx ;разделить - остаток в edx + push edx ;положить в стек + call .str;перейти на саму себя т.е. вызвать саму себя и так до того момента пока в eax не станет меньше чем в ecx pop eax - @@: ;cmp al,10 ;яЁютхЁшЄ№ эх ьхэ№°х ыш чэрўхэшх т al ўхь 10 (фы  ёшёЄхь√ ёўшёыхэ  10 фрээр  ъюьрэфр - ыш°эр )) - ;sbb al,$69 ;- ўхёЄэю фрээр  шэёЄЁєъЎш  ьхэ  чрёЄрты хЄ чрфєьрЄ№ё  Є.х.   эх чэр■ ъръ ¤Єю ЁрсюЄрхЄ - ;das ;яюёых фрээющ ъюьрэф√ ъръ с√ яЁюшёїюфшЄ єьхэ№°хэшх al эр 66h (т ъэшух эряшёрэю фЁєуюх) - or al,0x30 ;фрээр  ъюьрэфр ъюЁюўх ўхь фтх т√°х - stosb ;чряшёрЄ№ ¤ыхьхэЄ шч ЁхушёЄЁр al т  ўхъє ярь Єш es:edi - ret ;тхЁэєЄ№ё  юўхэ№ шэЄхЁхёэ√щ їюф Є.ъ. яюър т ёЄхъх їЁрэшЄ№ё  ъюы-тю т√чютют Єю ёЄюы№ъю Ёрч ь√ ш сєфхь т√ч√трЄ№ё  + @@: ;cmp al,10 ;проверить не меньше ли значение в al чем 10 (для системы счисленя 10 данная команда - лишная)) + or al,0x30 ;данная команда короче чем две выше + stosb ;записать элемент из регистра al в ячеку памяти es:edi + ret ;вернуться очень интересный ход т.к. пока в стеке храниться кол-во вызовов то столько раз мы и будем вызываться } diff --git a/programs/games/nu_pogodi/trunk/nu_pogod.asm b/programs/games/nu_pogodi/trunk/nu_pogod.asm index a3634a05b1..4b2fdac9e6 100644 --- a/programs/games/nu_pogodi/trunk/nu_pogod.asm +++ b/programs/games/nu_pogodi/trunk/nu_pogod.asm @@ -217,8 +217,7 @@ pop eax ;фоновый цвет буфера должен быть 0xffffff, иначе не произойдет обрезка ;по фоновому цвету и трафарет будет занимат ьмного места в памяти align 4 -proc CreateTrapharetBuffer, buf:dword, img_data:dword - push eax edi +proc CreateTrapharetBuffer uses eax edi, buf:dword, img_data:dword mov edi,dword[buf] ;заполнение данных буфера @@ -234,7 +233,6 @@ proc CreateTrapharetBuffer, buf:dword, img_data:dword stdcall [buf2d_conv_24_to_8], edi,1 ;делаем буфер прозрачности 8бит ;обрезаем лишние края буфера, для более быстрого рисования stdcall [buf2d_crop_color], edi,buf2d_color,BUF2D_OPT_CROP_TOP+BUF2D_OPT_CROP_BOTTOM+BUF2D_OPT_CROP_RIGHT+BUF2D_OPT_CROP_LEFT - pop edi eax ret endp @@ -636,12 +634,11 @@ txt_tile_type_0 rb FILE_NAME_MAX align 4 user_is_select: - push ecx esi edi - + push eax ecx esi edi stdcall [tl_node_get_data], tree1 - pop esi - cmp esi,0 ;если имя игры пустое - je @f + cmp eax,0 ;если имя игры пустое + je @f + mov esi,eax mov edi,ini_name mov ecx,FILE_NAME_MAX cld @@ -650,7 +647,7 @@ user_is_select: mov byte[game_select_mode],0 call InitAll @@: - pop edi esi ecx + pop edi esi ecx eax call draw_window ret @@ -753,23 +750,25 @@ 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 + ;проверка на сколько удачно загузились библиотеки + cmp dword [lib0+ll_struc_size-4],0 + jnz @f + cmp dword [lib1+ll_struc_size-4],0 + jnz @f + cmp dword [lib2+ll_struc_size-4],0 + jnz @f + cmp dword [lib3+ll_struc_size-4],0 + jnz @f + jmp .lib @@: - mov ebp,lib1 - cmp dword [ebp+ll_struc_size-4],0 - jz @f mcall -1 ;exit not correct - @@: + .lib: mcall 40,0x27 mcall 48,3,sc,sizeof.system_colors ;получаем системные цвета ;****************************************************************************** -; подготовка списка игор +; подготовка списка игр ;****************************************************************************** stdcall dword[tl_data_init], tree1 @@ -792,7 +791,7 @@ start: inc dl push ecx edx stdcall dword[ini_get_str],file_name,ini_sec_files,key_game,txt_tile_type_0,FILE_NAME_MAX,ini_def_decorat_file - stdcall dword[tl_node_add], txt_tile_type_0, 0, tree1 ;добавляем название игры + stdcall dword[tl_node_add], tree1, 0, txt_tile_type_0 ;добавляем название игры stdcall dword[tl_cur_next], tree1 ;переносим курсор вниз, что-бы не поменялся порядок игр pop edx ecx loop @b @@ -983,13 +982,12 @@ push esi int 0x40 pop esi - mov eax,4 ;аЁбRў -Ё? в?Єбв  mov bx,BUT1_H add ebx,3*65536;+3 mov ecx,dword[color_but_te] or ecx,0x80000000 mov edx,txt_game_a - int 0x40 + mcall 4 ror ebx,16 add ebx,BUT1_NEXT_TOP @@ -1037,16 +1035,15 @@ pop esi align 4 proc draw_rect_border, client_rect:dword, user_box:dword pushad - mov edi,dword[client_rect] mov esi,dword[user_box] cmp esi,0 je @f + mov edi,dword[client_rect] mov ebx,dword[edi+8] ;+8 = width inc bx mov ecx,dword[esi+4] ;+4 = top mov edx,[sc.work] - mov eax,13 - int 0x40 ;top + mcall 13 ;top mov eax,dword[esi+4] ;+4 = top add eax,dword[esi+12] ;+12 = height @@ -1057,8 +1054,7 @@ proc draw_rect_border, client_rect:dword, user_box:dword mov cx,word[edi+12] ;+12 = bottom inc cx sub cx,ax - mov eax,13 - int 0x40 ;bottom + mcall 13 ;bottom .no_bottom: mov ebx,dword[esi] ;+0 left @@ -1066,8 +1062,7 @@ proc draw_rect_border, client_rect:dword, user_box:dword shl ecx,16 mov cx,word[esi+12] ;+12 = height inc cx - mov eax,13 - int 0x40 ;left + mcall 13 ;left mov eax,dword[esi] ;+0 left add eax,dword[esi+8] ;+8 = width @@ -1076,8 +1071,7 @@ proc draw_rect_border, client_rect:dword, user_box:dword mov bx,word[edi+8] ;+8 = right sub bx,ax inc bx - mov eax,13 - int 0x40 ;right + mcall 13 ;right @@: popad ret @@ -1182,29 +1176,24 @@ l_libs_start: load_lib_end: align 4 -proc mem_copy, source:dword, destination:dword, len:dword - push ecx esi edi - cld - mov esi, dword[source] - mov edi, dword[destination] - mov ecx, dword[len] - rep movsb - pop edi esi ecx - ret +proc mem_copy uses ecx esi edi, source:dword, destination:dword, len:dword + cld + mov esi, dword[source] + mov edi, dword[destination] + mov ecx, dword[len] + rep movsb + ret endp align 4 convert_to_str: pushad - ;mov eax,dword[value] - ;mov edi,dword[text] mov dword[edi+1],0 cld call .str popad ret - align 4 .str: mov ecx,0x0a ;задается система счисления изменяются регистры ebx,eax,ecx,edx входные параметры eax - число @@ -1214,15 +1203,12 @@ align 4 xor edx,edx ;очистить edx div ecx ;разделить - остаток в edx push edx ;положить в стек - ;dec edi ;смещение необходимое для записи с конца строки call .str;перейти на саму себя т.е. вызвать саму себя и так до того момента пока в eax не станет меньше чем в ecx pop eax @@: ;cmp al,10 ;проверить не меньше ли значение в al чем 10 (для системы счисленя 10 данная команда - лишная)) - ;sbb al,$69 ;- честно данная инструкция меня заставляет задуматься т.е. я не знаю как это работает - ;das ;после данной команды как бы происходит уменьшение al на 66h (в книге написано другое) or al,0x30 ;данная команда короче чем две выше stosb ;записать элемент из регистра al в ячеку памяти es:edi - ret ;вернуться чень интересный ход т.к. пока в стеке храниться кол-во вызовов то столько раз мы и будем вызываться + ret ;вернуться очень интересный ход т.к. пока в стеке храниться кол-во вызовов то столько раз мы и будем вызываться last_time dd 0 @@ -1230,7 +1216,7 @@ image_data dd 0 ; image_data_gray dd 0 ;память с временными серыми изображениями в формате 24-bit, из которых будут создаваться трафареты run_file_70 FileInfoBlock -hed db 'Nu pogodi 17.09.10',0 ;подпись окна +hed db 'Nu pogodi 10.11.15',0 ;подпись окна sc system_colors ;системные цвета count_of_dir_list_files equ 10 @@ -1449,11 +1435,10 @@ dd 0,0 sz_tl_node_lev_dec db 'tl_node_lev_dec',0 - +align 16 i_end: - rb 1024 - align 16 procinfo process_information + rb 1024 stacktop: sys_path rb 4096 file_name: diff --git a/programs/other/planet_v/planet_v.asm b/programs/other/planet_v/planet_v.asm index ef39c08b9d..d6b3b5082e 100644 --- a/programs/other/planet_v/planet_v.asm +++ b/programs/other/planet_v/planet_v.asm @@ -55,29 +55,21 @@ 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 -@@: +;проверка на сколько удачно загузились библиотеки + cmp dword [lib0+ll_struc_size-4],0 + jnz @f + cmp dword [lib1+ll_struc_size-4],0 + jnz @f + cmp dword [lib2+ll_struc_size-4],0 + jnz @f + cmp dword [lib3+ll_struc_size-4],0 + jnz @f + jmp .lib + @@: + mcall -1 ;exit not correct + .lib: - copy_path ini_name,sys_path,file_name,0x0 + copy_path ini_name,sys_path,file_name,0 stdcall dword[ini_get_str],file_name,ini_sec,ini_k_cache,dword[edit1.text],dword[edit1.max],ini_def_cache stdcall [str_len],dword[edit1.text],dword[edit1.max] mov dword[edit1.size],eax @@ -93,7 +85,7 @@ start: stdcall dword[ini_get_str],file_name,ini_sec,ini_ext,txt_tile_type_0,dword[tree1.info_capt_len],ini_ext.def cmp byte[txt_tile_type_0],0 je @f - stdcall dword[tl_node_add], txt_tile_type_0, 0, tree1 + stdcall dword[tl_node_add], tree1, 0, txt_tile_type_0 jmp @b @@: mov byte[ini_ext.number],'0' ;считываем параметр от ext0 который будет выбран в списке @@ -102,7 +94,7 @@ start: jne @f mov dword[txt_tile_type_0],'.bmp' ;если в *.ini файле ничего нет добавляем расширение .bmp @@: - stdcall dword[tl_node_add], txt_tile_type_0, 0, tree1 + stdcall dword[tl_node_add], tree1, 0, txt_tile_type_0 ; init bmp file stdcall mem.Alloc, dword RGB_TILE_SIZE+300 ;300 - запасные байты с учетом заголовка bmp файла @@ -117,8 +109,7 @@ start: stdcall mem.Alloc, dword TREE_ICON_NOD16_BMP_SIZE mov [tree_nod_icon],eax - copy_path fn_icon1,sys_path,file_name,0x0 - mov eax,70 ;load icon file + copy_path fn_icon1,sys_path,file_name,0 mov [run_file_70.Function], 0 mov [run_file_70.Position], 0 mov [run_file_70.Flags], 0 @@ -126,8 +117,7 @@ start: m2m [run_file_70.Buffer], [tree_sys_icon] mov byte[run_file_70+20], 0 mov [run_file_70.FileName], file_name - mov ebx,run_file_70 - int 0x40 + mcall 70,run_file_70 cmp ebx,0xffffffff je @f stdcall dword[img_decode], dword[tree_sys_icon],ebx,0 @@ -140,12 +130,10 @@ start: @@: - copy_path fn_icon2,sys_path,file_name,0x0 - mov eax,70 ;load icon file + copy_path fn_icon2,sys_path,file_name,0 mov [run_file_70.Count], TREE_ICON_NOD16_BMP_SIZE m2m [run_file_70.Buffer], [tree_nod_icon] - mov ebx,run_file_70 - int 0x40 + mcall 70,run_file_70 cmp ebx,0xffffffff je @f stdcall dword[img_decode], dword[tree_nod_icon],ebx,0 @@ -172,58 +160,51 @@ start: align 4 red_win: - call draw_window - call but_MetLoad - call but_Refresh ; Auto Refresh after program start + call draw_window + call but_MetLoad + call but_Refresh ; Auto Refresh after program start align 4 still: - mov eax,10 - mcall + mcall 10 - cmp al,0x1 ;изм. положение окна - jz red_win - cmp al,0x2 - jz key - cmp al,0x3 - jz button + cmp al,0x1 ;изм. положение окна + jz red_win + cmp al,0x2 + jz key + cmp al,0x3 + jz button - push dword ch2 - call [check_box_mouse] - push dword ch1 - call [check_box_mouse] + stdcall [check_box_mouse],ch2 + stdcall [check_box_mouse],ch1 + stdcall [edit_box_mouse], edit1 + stdcall [edit_box_mouse], edit2 + stdcall [tl_mouse], tree1 + stdcall [tl_mouse], tree2 - stdcall [edit_box_mouse], edit1 - stdcall [edit_box_mouse], edit2 - - stdcall [tl_mouse], tree1 - stdcall [tl_mouse], tree2 - - jmp still + jmp still align 4 key: - push eax ebx - mcall 2 - stdcall [edit_box_key], edit1 - stdcall [edit_box_key], edit2 + push eax ebx + mcall 2 + stdcall [edit_box_key], edit1 + stdcall [edit_box_key], edit2 - push dword tree1 - call [tl_key] - push dword tree2 - call [tl_key] + stdcall [tl_key],tree1 + stdcall [tl_key],tree2 - mov ebx,dword[el_focus] ;что-бы карта не двигалась если окна treelist в фокусе - cmp ebx, dword tree1 - je .end_f - cmp ebx, dword tree2 - je .end_f + mov ebx,dword[el_focus] ;что-бы карта не двигалась если окна treelist в фокусе + cmp ebx, dword tree1 + je .end_f + cmp ebx, dword tree2 + je .end_f - ;что-бы карта не двигалась если текстовые поля в фокусе - test word[edit1.flags],10b ;ed_focus - jne .end_f - test word[edit2.flags],10b ;ed_focus - jne .end_f + ;что-бы карта не двигалась если текстовые поля в фокусе + test word[edit1.flags],10b ;ed_focus + jne .end_f + test word[edit2.flags],10b ;ed_focus + jne .end_f cmp ah,179 ;Right jne @f @@ -261,9 +242,9 @@ key: call but_ZoomP @@: - .end_f: - pop ebx eax - jmp still + .end_f: + pop ebx eax + jmp still align 4 @@ -272,12 +253,10 @@ pushad mcall 12,1 xor eax,eax - mov ebx,20*65536+min_window_w - mov ecx,20*65536+min_window_h mov edx,[sc.work] or edx,0x33000000 mov edi,hed - mcall + mcall ,20*65536+min_window_w,20*65536+min_window_h mcall 9,procinfo,-1 @@ -293,7 +272,7 @@ pushad mov eax,dword[tree2.box_left] ;двигаем скроллинг add eax,dword[tree2.box_width] - mov ebx,dword[tree2.p_scrol] + mov ebx,dword[tree2.p_scroll] mov word[ebx+2],ax mov dword[edit2.left],edi @@ -304,17 +283,10 @@ pushad mov dword[wScrMetki.all_redraw],1 stdcall [scrollbar_ver_draw], dword wScrMetki - mov eax,8 ;кнопка - mov ebx,145*65536+20 - mov ecx,5*65536+25 - mov edx,6 mov esi,[sc.work_button] - int 0x40 + mcall 8,145*65536+20,5*65536+25,6 ;кнопка - mov ebx,100*65536+20 - mov ecx,5*65536+25 - mov edx,5 - int 0x40 + mcall ,100*65536+20,5*65536+25,5 mov ebx,170*65536+40 ;кнопка вызова диалога OpenDial ;mov ecx,5*65536+25 @@ -490,75 +462,81 @@ lib4_name db 'proc_lib.obj',0 ;library structures l_libs_start: - lib0 l_libs lib0_name, sys_path, file_name, system_dir0, err_message_found_lib0, head_f_l, boxlib_import,err_message_import0, head_f_i - lib1 l_libs lib1_name, sys_path, file_name, system_dir1, err_message_found_lib1, head_f_l, libimg_import, err_message_import1, head_f_i - lib2 l_libs lib2_name, sys_path, file_name, system_dir2, err_message_found_lib2, head_f_l, strlib_import, err_message_import2, head_f_i - lib3 l_libs lib3_name, sys_path, file_name, system_dir3, err_message_found_lib3, head_f_l, libini_import, err_message_import3, head_f_i - lib4 l_libs lib4_name, sys_path, file_name, system_dir4, err_message_found_lib4, head_f_l, proclib_import, err_message_import4, head_f_i + lib0 l_libs lib0_name, sys_path, file_name, system_dir0, err_message_found_lib0, head_f_l, boxlib_import,err_message_import0, head_f_i + lib1 l_libs lib1_name, sys_path, file_name, system_dir1, err_message_found_lib1, head_f_l, libimg_import, err_message_import1, head_f_i + lib2 l_libs lib2_name, sys_path, file_name, system_dir2, err_message_found_lib2, head_f_l, strlib_import, err_message_import2, head_f_i + lib3 l_libs lib3_name, sys_path, file_name, system_dir3, err_message_found_lib3, head_f_l, libini_import, err_message_import3, head_f_i + lib4 l_libs lib4_name, sys_path, file_name, system_dir4, err_message_found_lib4, head_f_l, proclib_import, err_message_import4, head_f_i load_lib_end: align 4 button: - mcall 17 ;получить код нажатой кнопки - cmp ah,5 - jne @f - call but_ZoomM - @@: - cmp ah,6 - jne @f - call but_ZoomP - @@: - cmp ah,7 - jne @f - call but_Refresh - @@: + mcall 17 ;получить код нажатой кнопки + cmp ah,5 + jne @f + call but_ZoomM + jmp still + @@: + cmp ah,6 + jne @f + call but_ZoomP + jmp still + @@: + cmp ah,7 + jne @f + call but_Refresh + jmp still + @@: - cmp ah,9 - jz but_MetSave - cmp ah,8 - jz but_MetAdd + cmp ah,9 + jz but_MetSave + cmp ah,8 + jz but_MetAdd - cmp ah,10 - jne @f - call but_met_up - @@: - cmp ah,11 - jne @f - call but_met_dn - @@: - cmp ah,12 - jne @f - call fun_goto_met - @@: - cmp ah,13 ;диалог OpenDialog для поиска папки - jne @f - call fun_opn_dlg - @@: - cmp ah,1 - jne still + cmp ah,10 + jne @f + call but_met_up + jmp still + @@: + cmp ah,11 + jne @f + call but_met_dn + jmp still + @@: + cmp ah,12 + jne @f + call fun_goto_met + jmp still + @@: + cmp ah,13 ;диалог OpenDialog для поиска папки + jne @f + call fun_opn_dlg + jmp still + @@: + cmp ah,1 + jne still .exit: - push dword[bmp_icon] - call mem.Free - stdcall array_tile_function, tile_00,max_tiles_count,tile_destroy + push dword[bmp_icon] + call mem.Free + stdcall array_tile_function, tile_00,max_tiles_count,tile_destroy - stdcall dword[tl_data_clear], tree1 - mov dword[tree2.data_img_sys],0 ;чистим указатель на системные иконки, - ;т. к. они были удалены верхней функцией tl_data_clear - ;повторный вызов tl_data_clear без чистки указателя вызвет ошибку - mov dword[tree2.data_img],0 ;чистим указатель на иконки узлов - stdcall dword[tl_data_clear], tree2 + stdcall dword[tl_data_clear], tree1 + mov dword[tree2.data_img_sys],0 ;чистим указатель на системные иконки, + ;т. к. они были удалены верхней функцией tl_data_clear + ;повторный вызов tl_data_clear без чистки указателя вызвет ошибку + mov dword[tree2.data_img],0 ;чистим указатель на иконки узлов + stdcall dword[tl_data_clear], tree2 ; stdcall dword[img_destroy], dword[data_icon] - mcall -1 ;выход из программы + mcall -1 ;выход из программы ;input: ;data_rgb - pointer to rgb data ;size - count img pixels (size img data / 3(rgb) ) align 4 -proc img_rgb_wdiv2 data_rgb:dword, size:dword - push eax ebx ecx edx +proc img_rgb_wdiv2 uses eax ebx ecx edx, data_rgb:dword, size:dword mov eax,dword[data_rgb] mov ecx,dword[size] ;ecx = size imul ecx,3 @@ -596,8 +574,6 @@ proc img_rgb_wdiv2 data_rgb:dword, size:dword add eax,3 add ebx,6 loop @b - - pop edx ecx ebx eax ret endp @@ -676,29 +652,27 @@ endp ;data_rgb - pointer to rgb data ;size - count img pixels (size img data / 3(rgb) ) align 4 -proc img_rgb_wmul2, data_rgb:dword, size:dword - push eax ebx ecx edx - ;eax - source - ;ebx - destination - mov ecx,dword[size] ;ecx = size - mov eax,ecx - dec eax - lea eax,[eax+eax*2] ;eax = (size-1)*3 - mov ebx,eax ;ebx = size*3 - add eax,dword[data_rgb] ;eax = pointer + size*3 - add ebx,eax ;ebx = pointer + 2*size*3 - @@: - mov edx,dword[eax] ;edx = pixel color - mov word[ebx],dx - mov word[ebx+3],dx - shr edx,16 - mov byte[ebx+2],dl - mov byte[ebx+3+2],dl - sub eax,3 - sub ebx,6 - loop @b - pop edx ecx ebx eax - ret +proc img_rgb_wmul2 uses eax ebx ecx edx, data_rgb:dword, size:dword + ;eax - source + ;ebx - destination + mov ecx,dword[size] ;ecx = size + mov eax,ecx + dec eax + lea eax,[eax+eax*2] ;eax = (size-1)*3 + mov ebx,eax ;ebx = size*3 + add eax,dword[data_rgb] ;eax = pointer + size*3 + add ebx,eax ;ebx = pointer + 2*size*3 + @@: + mov edx,dword[eax] ;edx = pixel color + mov word[ebx],dx + mov word[ebx+3],dx + shr edx,16 + mov byte[ebx+2],dl + mov byte[ebx+3+2],dl + sub eax,3 + sub ebx,6 + loop @b + ret endp ;функция для растягивания изображения по высоте в 2 раза @@ -754,33 +728,30 @@ endp ;size - count img pixels (size img data / 3(rgb) ) ;size_w - width img in pixels align 4 -proc img_rgb_hoffs, data_rgb:dword, size:dword, size_w:dword, hoffs:dword - push eax ebx ecx edx esi +proc img_rgb_hoffs uses eax ebx ecx edx esi, data_rgb:dword, size:dword, size_w:dword, hoffs:dword + mov esi,dword[size_w] + lea esi,[esi+esi*2] ;esi = width * 3(rgb) + imul esi,dword[hoffs] - mov esi,dword[size_w] - lea esi,[esi+esi*2] ;esi = width * 3(rgb) - imul esi,dword[hoffs] + mov eax,dword[size] + lea eax,[eax+eax*2] + add eax,dword[data_rgb] ;eax = pointer to end pixel + 1 + sub eax,3 + mov ebx,eax + add ebx,esi - mov eax,dword[size] - lea eax,[eax+eax*2] - add eax,dword[data_rgb] ;eax = pointer to end pixel + 1 - sub eax,3 - mov ebx,eax - add ebx,esi + mov ecx,dword[size] + dec ecx + @@: + mov edx,dword[eax] ;edx = pixel color + mov word[ebx],dx + shr edx,16 + mov byte[ebx+2],dl - mov ecx,dword[size] - dec ecx - @@: - mov edx,dword[eax] ;edx = pixel color - mov word[ebx],dx - shr edx,16 - mov byte[ebx+2],dl - - sub eax,3 - sub ebx,3 - loop @b - pop esi edx ecx ebx eax - ret + sub eax,3 + sub ebx,3 + loop @b + ret endp @@ -824,27 +795,23 @@ proc img_rgb_wcrop, data_rgb:dword, size_w_old:dword, size_w_new:dword, size_h:d endp align 4 -proc mem_copy, source:dword, destination:dword, len:dword - push ecx esi edi - cld - mov esi, dword[source] - mov edi, dword[destination] - mov ecx, dword[len] - rep movsb - pop edi esi ecx - ret +proc mem_copy uses ecx esi edi, source:dword, destination:dword, len:dword + cld + mov esi, dword[source] + mov edi, dword[destination] + mov ecx, dword[len] + rep movsb + ret endp align 4 -proc mem_clear, mem:dword, len:dword - push eax ecx edi - cld - xor al,al - mov edi, dword[mem] - mov ecx, dword[len] - repne stosb - pop edi ecx eax - ret +proc mem_clear uses eax ecx edi, mem:dword, len:dword + cld + xor al,al + mov edi, dword[mem] + mov ecx, dword[len] + repne stosb + ret endp align 4 @@ -897,38 +864,7 @@ tree2 tree_list 32,300, tl_draw_par_line, 16,16,\ el_focus, wScrMetki,fun_goto_met align 4 -wScrMetki: -.x: -.size_x dw 16 ;+0 -.start_x dw 0 ;+2 -.y: -.size_y dw 100 ;+4 -.start_y dw 0 ;+6 -.btn_high dd 15 ;+8 -.type dd 1 ;+12 -.max_area dd 100 ;+16 -.cur_area dd 30 ;+20 -.position dd 0 ;+24 -.bckg_col dd 0xeeeeee ;+28 -.frnt_col dd 0xbbddff ;+32 -.line_col dd 0 ;+36 -.redraw dd 0 ;+40 -.delta dw 0 ;+44 -.delta2 dw 0 ;+46 -.run_x: -.r_size_x dw 0 ;+48 -.r_start_x dw 0 ;+50 -.run_y: -.r_size_y dw 0 ;+52 -.r_start_y dw 0 ;+54 -.m_pos dd 0 ;+56 -.m_pos_2 dd 0 ;+60 -.m_keys dd 0 ;+64 -.run_size dd 0 ;+68 -.position2 dd 0 ;+72 -.work_size dd 0 ;+76 -.all_redraw dd 0 ;+80 -.ar_offset dd 1 ;+84 +wScrMetki scrollbar 16,0, 100,0, 15, 100, 30,0, 0xeeeeee, 0xbbddff, 0, 1 ed_buffer: ;ЄхъёЄ фы  edit .2: rb 32 @@ -997,46 +933,52 @@ map: ; align 4 tile_00 rb size_tile_struc * max_tiles_count -;этот код не мой, он преобразует число в строку ;input: -; eax = value -; edi = string buffer +; eax - число +; edi - буфер для строки +; len - длинна буфера ;output: -; edi = align 4 -tl_convert_to_str: - pushad - mov dword[edi+1],0;0x20202020 - call .str - popad - ret +proc convert_int_to_str, len:dword +pushad + mov esi,[len] + add esi,edi + dec esi + call .str +popad + ret +endp align 4 .str: - mov ecx,0x0a ;задается система счисления изменяются регистры ebx,eax,ecx,edx входные параметры eax - число - ;преревод числа в ASCII строку взодные данные ecx=система счисленя edi адрес куда записывать, будем строку, причем конец переменной - cmp eax,ecx ;сравнить если в eax меньше чем в ecx то перейти на @@-1 т.е. на pop eax - jb @f - xor edx,edx ;очистить edx - div ecx ;разделить - остаток в edx - push edx ;положить в стек - ;dec edi ;смещение необходимое для записи с конца строки - call .str;перейти на саму себя т.е. вызвать саму себя и так до того момента пока в eax не станет меньше чем в ecx - pop eax - @@: ;cmp al,10 ;проверить не меньше ли значение в al чем 10 (для системы счисленя 10 данная команда - лишная)) - or al,0x30 ;данная команда короче чем две выше - stosb ;записать элемент из регистра al в ячеку памяти es:edi - ret ;вернуться чень интересный ход т.к. пока в стеке храниться кол-во вызовов то столько раз мы и будем вызываться + mov ecx,0x0a ;задается система счисления изменяются регистры ebx,eax,ecx,edx входные параметры eax - число + ;преревод числа в ASCII строку взодные данные ecx=система счисленя edi адрес куда записывать, будем строку, причем конец переменной + cmp eax,ecx ;сравнить если в eax меньше чем в ecx то перейти на @@-1 т.е. на pop eax + jb @f + xor edx,edx ;очистить edx + div ecx ;разделить - остаток в edx + push edx ;положить в стек + ;dec edi ;смещение необходимое для записи с конца строки + call .str ;перейти на саму себя т.е. вызвать саму себя и так до того момента пока в eax не станет меньше чем в ecx + pop eax + @@: ;cmp al,10 ;проверить не меньше ли значение в al чем 10 (для системы счисленя 10 данная команда - лишная)) + cmp edi,esi + jge @f + or al,0x30 ;данная команда короче чем две выше + stosb ;записать элемент из регистра al в ячеку памяти es:edi + mov byte[edi],0 ;в конец строки ставим 0, что-бы не вылазил мусор + @@: + ret ;пока в стеке храниться кол-во вызовов то столько раз мы и будем вызываться -hed db 'Planet viewer 16.01.13',0 ;подпись окна +hed db 'Planet viewer 09.11.15',0 ;подпись окна sc system_colors ;системные цвета mouse_dd dd 0 ;нужно для Shift-а в editbox +align 16 i_end: - rb 1024 - align 16 procinfo process_information + rb 1024 stacktop: sys_path rb 4096 file_name: diff --git a/programs/other/planet_v/tile_fun.inc b/programs/other/planet_v/tile_fun.inc index ff5dec4166..c0bed31389 100644 --- a/programs/other/planet_v/tile_fun.inc +++ b/programs/other/planet_v/tile_fun.inc @@ -63,9 +63,9 @@ tile_delta_y equ byte[edi+31] ;сдв ; load_new_tile (верхняя картинка) -;??? +;передвигаем координату курсора вправо align 4 -CursorMoveRight: ;передвигаем координату курсора вправо +CursorMoveRight: push ebx ecx xor ebx,ebx xor ecx,ecx @@ -87,9 +87,9 @@ CursorMoveRight: ; pop ecx ebx ret -;??? +;передвигаем координату курсора вниз align 4 -CursorMoveDown: ;передвигаем координату курсора вниз +CursorMoveDown: push ebx ecx xor ebx,ebx xor ecx,ecx @@ -111,24 +111,23 @@ CursorMoveDown: ; pop ecx ebx ret -;??? +;перемещение метки вверх, по списку align 4 -but_met_up: ;перемещение метки вверх, по списку +but_met_up: stdcall dword[tl_node_move_up], tree2 ret -;??? +;перемещение метки вниз, по списку? align 4 -but_met_dn: ;перемещение метки вниз, по списку +but_met_dn: stdcall dword[tl_node_move_down], tree2 ret -;??? +;меняем расширение для карты align 4 -fun_new_map_type: ;меняем расширение для карты +fun_new_map_type: push eax stdcall dword[tl_node_get_data], tree1 - pop eax cmp eax,0 je @f mov dword[txt_tile_type],eax @@ -138,8 +137,7 @@ fun_new_map_type: ; ;задаем расположение тайлов по сетке align 4 -proc tiles_init_grid, beg_tiles:dword, count:dword, cols:dword - push eax ebx ecx edx edi +proc tiles_init_grid uses eax ebx ecx edx edi, beg_tiles:dword, count:dword, cols:dword xor eax,eax xor ebx,ebx mov edi,[beg_tiles] @@ -156,7 +154,6 @@ proc tiles_init_grid, beg_tiles:dword, count:dword, cols:dword inc bx .old_lin: loop @b - pop edi edx ecx ebx eax ret endp @@ -165,8 +162,7 @@ endp ;тайлы в противоположную сторону, в результате координаты большинства тайлов не меняются ;а значит программа не будет перечитывать их заново, чем и достигается оптимизация align 4 -proc tiles_grid_move_left, beg_tiles:dword, count:dword, cols:dword - push eax ebx ecx edx edi +proc tiles_grid_move_left uses eax ebx ecx edx edi, beg_tiles:dword, count:dword, cols:dword xor eax,eax xor ebx,ebx mov edi,[beg_tiles] @@ -180,15 +176,13 @@ proc tiles_grid_move_left, beg_tiles:dword, count:dword, cols:dword dec tile_delta_x add edi,size_tile_struc loop @b - pop edi edx ecx ebx eax ret endp ;сдвигаем сетку вправо, вылезшие столбцы будут перекинуты на левую сторону ;делает тоже что и tiles_grid_move_left только двигает координаты в другую сторону align 4 -proc tiles_grid_move_right, beg_tiles:dword, count:dword, cols:dword - push eax ebx ecx edx edi +proc tiles_grid_move_right uses eax ebx ecx edx edi, beg_tiles:dword, count:dword, cols:dword xor eax,eax xor ebx,ebx mov edi,[beg_tiles] @@ -202,13 +196,11 @@ proc tiles_grid_move_right, beg_tiles:dword, count:dword, cols:dword .no_jump: add edi,size_tile_struc loop @b - pop edi edx ecx ebx eax ret endp align 4 -proc tiles_grid_move_up, beg_tiles:dword, count:dword, rows:dword - push eax ebx ecx edx edi +proc tiles_grid_move_up uses eax ebx ecx edx edi, beg_tiles:dword, count:dword, rows:dword xor eax,eax xor ebx,ebx mov edi,[beg_tiles] @@ -222,13 +214,11 @@ proc tiles_grid_move_up, beg_tiles:dword, count:dword, rows:dword dec tile_delta_y add edi,size_tile_struc loop @b - pop edi edx ecx ebx eax ret endp align 4 -proc tiles_grid_move_down, beg_tiles:dword, count:dword, rows:dword - push eax ebx ecx edx edi +proc tiles_grid_move_down uses eax ebx ecx edx edi, beg_tiles:dword, count:dword, rows:dword xor eax,eax xor ebx,ebx mov edi,[beg_tiles] @@ -242,35 +232,28 @@ proc tiles_grid_move_down, beg_tiles:dword, count:dword, rows:dword .no_jump: add edi,size_tile_struc loop @b - pop edi edx ecx ebx eax ret endp align 4 -proc array_tile_function, beg_tiles:dword, count:dword, funct:dword - push ecx edi +proc array_tile_function uses ecx edi, beg_tiles:dword, count:dword, funct:dword mov edi,[beg_tiles] mov ecx,[count] @@: stdcall [funct],edi add edi,size_tile_struc loop @b - pop edi ecx ret endp align 4 draw_tiles: pushad - mov eax,47 - mov ebx,0x20000 - xor ecx,ecx - mov cl,byte[map.zoom] - mov edx,128*65536+13 + movzx ecx,byte[map.zoom] mov esi,[sc.work_text] or esi,0x40000000 mov edi,[sc.work] - int 0x40 + mcall 47,0x20000,, (128 shl 16)+13 stdcall array_tile_function, tile_00,max_tiles_count,draw_tile popad @@ -466,65 +449,57 @@ but_ZoomM: @@: ret -;??? +;сохранение файла с метками align 4 -but_MetSave: ;сохранение файла с метками - stdcall dword[tl_save_mem], TREE_ICON_SYS16_BMP_SIZE,[bmp_icon],0,tree2 +but_MetSave: + stdcall dword[tl_save_mem], tree2,0,[bmp_icon],TREE_ICON_SYS16_BMP_SIZE - push eax ebx ecx edi - copy_path fn_metki,sys_path,file_name,0x0 + copy_path fn_metki,sys_path,file_name,0 + push eax ebx ecx edi + stdcall dword[tl_get_mem_size], tree2,[bmp_icon] + inc eax ;для записи в файл завершающего нуля - stdcall dword[tl_get_mem_size], [bmp_icon],tree2 - pop ecx - inc ecx ;для записи в файл завершающего нуля + m2m [run_file_70.Buffer], [bmp_icon] + mov [run_file_70.Function], 2 + mov [run_file_70.Position], 0 + mov [run_file_70.Flags], 0 + mov [run_file_70.Count], eax + mov byte[run_file_70+20], 0 + mov [run_file_70.FileName], file_name + mcall 70,run_file_70 + pop edi ecx ebx eax + jmp still - mov eax,70 - m2m [run_file_70.Buffer], [bmp_icon] - mov [run_file_70.Function], 2 - mov [run_file_70.Position], 0 - mov [run_file_70.Flags], 0 - mov [run_file_70.Count], ecx - mov byte[run_file_70+20], 0 - mov [run_file_70.FileName], file_name - mov ebx,run_file_70 - int 0x40 - pop edi ecx ebx eax - jmp still - -;??? +;считываем файл с метками align 4 -but_MetLoad: ;считываем файл с метками - cmp byte[met_fr_opn],0 - jne .end_f - pushad - mov byte[met_fr_opn],1 - copy_path fn_metki,sys_path,file_name,0x0 - mov eax,70 ;load icon file - mov [run_file_70.Function], 0 - mov [run_file_70.Position], 0 - mov [run_file_70.Flags], 0 - mov [run_file_70.Count], TREE_ICON_SYS16_BMP_SIZE - mov byte[run_file_70+20], 0 - mov [run_file_70.FileName], file_name - m2m [run_file_70.Buffer], [bmp_icon] - mov eax,70 - mov ebx,run_file_70 - int 0x40 - cmp ebx,0xffffffff - je @f - stdcall [tl_load_mem], TREE_ICON_SYS16_BMP_SIZE,dword[bmp_icon],0,tree2 - stdcall [tl_cur_beg], tree2 ;? - stdcall [tl_draw], tree2 ;? - pop eax - @@: - mov byte[file_name],0 ;clear file name - popad - .end_f: - ret +but_MetLoad: + cmp byte[met_fr_opn],0 + jne .end_f + copy_path fn_metki,sys_path,file_name,0 + pushad + mov byte[met_fr_opn],1 + mov [run_file_70.Function], 0 + mov [run_file_70.Position], 0 + mov [run_file_70.Flags], 0 + mov [run_file_70.Count], TREE_ICON_SYS16_BMP_SIZE + mov byte[run_file_70+20], 0 + mov [run_file_70.FileName], file_name + m2m [run_file_70.Buffer], [bmp_icon] + mcall 70,run_file_70 + cmp ebx,0xffffffff + je @f + stdcall [tl_load_mem], tree2,0,[bmp_icon],TREE_ICON_SYS16_BMP_SIZE + stdcall [tl_cur_beg], tree2 + stdcall [tl_draw], tree2 + @@: + mov byte[file_name],0 ;clear file name + popad + .end_f: + ret -;??? +;добавление метки align 4 -but_MetAdd: ;добавление метки +but_MetAdd: push eax mov eax,dword[bmp_icon] m2m dword[eax], dword[map.coord_x] @@ -532,26 +507,25 @@ but_MetAdd: ; m2m word[eax+8], word[map.zoom] add eax,12 stdcall dword[str_copy], eax,30,dword[edit2.text],30 - stdcall dword[tl_node_add], dword[bmp_icon], 0, tree2 + stdcall dword[tl_node_add], tree2, 0, dword[bmp_icon] stdcall dword[tl_draw], tree2 pop eax jmp still -;??? +;переход к выбранной метке align 4 -fun_goto_met: ;переход к выбранной метке - push eax - stdcall dword[tl_node_get_data], tree2 - pop eax - cmp eax,0 - je @f ;курсор не стоит на метке - m2m dword[map.coord_x],dword[eax] - m2m dword[map.coord_y],dword[eax+4] - m2m word[map.zoom],word[eax+8] - call but_Refresh - @@: - pop eax - ret +fun_goto_met: + push eax + stdcall dword[tl_node_get_data], tree2 + cmp eax,0 + je @f ;курсор не стоит на метке + m2m dword[map.coord_x],dword[eax] + m2m dword[map.coord_y],dword[eax+4] + m2m word[map.zoom],word[eax+8] + call but_Refresh + @@: + pop eax + ret ;??? align 4 @@ -563,38 +537,27 @@ but_Refresh: ret align 4 -proc tile_init, tile:dword - push eax edi - mov edi,[tile] - - push dword RGB_TILE_SIZE+300 - call mem.Alloc - mov tile_rgb_icon,eax - - push dword RGB_TILE_SIZE - call mem.Alloc - mov tile_drobn_icon,eax - pop edi eax - ret +proc tile_init uses eax edi, tile:dword + mov edi,[tile] + stdcall mem.Alloc, RGB_TILE_SIZE+300 + mov tile_rgb_icon,eax + stdcall mem.Alloc, RGB_TILE_SIZE + mov tile_drobn_icon,eax + ret endp align 4 -proc tile_destroy, tile:dword - push edi - mov edi,[tile] - push tile_rgb_icon - call mem.Free - push tile_drobn_icon - call mem.Free - pop edi - ret +proc tile_destroy uses edi, tile:dword + mov edi,[tile] + stdcall mem.Free,tile_rgb_icon + stdcall mem.Free,tile_drobn_icon + ret endp -;??? -align 4 ;загружает тайлы, в определенной области -proc load_tile, tile:dword - push eax ebx ecx edi +;загружает тайлы, в определенной области +align 4 +proc load_tile uses eax ebx ecx edi, tile:dword mov edi,dword[tile] ;копируем указатель на структуру тайла, что-бы работали константы stdcall mem_copy, map,edi, 9 ;копируем координаты курсора в структуру тайла @@ -748,7 +711,6 @@ proc load_tile, tile:dword jmp .zoom @@: - pop edi ecx ebx eax ret endp @@ -798,7 +760,6 @@ align 4 ; proc load_new_tile, tile:dword pushad - mov eax,70 ;load icon file mov [run_file_70.Function], 0 mov [run_file_70.Position], 0 mov [run_file_70.Flags], 0 @@ -806,8 +767,7 @@ proc load_new_tile, tile:dword m2m [run_file_70.Buffer], [bmp_icon] mov byte[run_file_70+20], 0 mov [run_file_70.FileName], file_name - mov ebx,run_file_70 - int 0x40 + mcall 70,run_file_70 mov edi,[tile] ; cmp ebx,0xffffffff ; je .no_load @@ -844,8 +804,7 @@ endp ;функция генерирует часть пути к файлу в виде: \z?\?\x?\?\y? align 4 -proc get_tile_path, tile:dword - push eax ecx edi esi +proc get_tile_path uses eax ecx edi esi, tile:dword mov ecx,300 mov edi,txt_tile_path @@: @@ -869,7 +828,7 @@ proc get_tile_path, tile:dword inc edi xor eax,eax mov al,byte[esi+8] ;+8 = zoom - call tl_convert_to_str + stdcall convert_int_to_str, 300 inc edi cmp byte[esi+8],9 ;+8 = zoom @@ -883,7 +842,7 @@ proc get_tile_path, tile:dword cmp eax,ecx jge .out_of_rang ;coord_x больше допустимого значения при заданном масштабе shr eax,10 - call tl_convert_to_str + stdcall convert_int_to_str, 300 @@: inc edi @@ -895,7 +854,7 @@ jge .out_of_rang ;coord_x inc edi mov eax,[esi] ;coord_x - call tl_convert_to_str + stdcall convert_int_to_str, 300 @@: inc edi @@ -914,7 +873,7 @@ jge .out_of_rang ;coord_x cmp eax,ecx jge .out_of_rang ;coord_y больше допустимого значения при заданном масштабе shr eax,10 - call tl_convert_to_str + stdcall convert_int_to_str, 300 @@: inc edi @@ -926,11 +885,10 @@ jge .out_of_rang ;coord_y inc edi mov eax,[esi+4] ;coord_y] - call tl_convert_to_str + stdcall convert_int_to_str, 300 .out_of_rang: call get_all_path - pop esi edi ecx eax ret endp diff --git a/programs/other/t_edit/t_button.inc b/programs/other/t_edit/t_button.inc index 159619bdce..53a73ea7c6 100644 --- a/programs/other/t_edit/t_button.inc +++ b/programs/other/t_edit/t_button.inc @@ -272,8 +272,8 @@ proc ted_but_open_syntax uses eax ebx ecx edi, edit:dword cmp ted_panel_id,TED_PANEL_SYNTAX jne @f stdcall dword[tl_node_get_data], tree1 - pop dword[fn_col_option] - mov ebx,dword[fn_col_option] + mov [fn_col_option],eax + mov ebx,eax call open_unpac_synt_file cmp ebx,-1 je @f diff --git a/programs/other/t_edit/t_data.inc b/programs/other/t_edit/t_data.inc index c004cf9b85..76c1a12ad0 100644 --- a/programs/other/t_edit/t_data.inc +++ b/programs/other/t_edit/t_data.inc @@ -1 +1 @@ -fn_col_option dd def_col_file fn_syntax_dir db 'info/',0 def_col_file db 'default.syn',0 exit_code dd 0 ;переменная используемая для выхода из программы ;значения задаваемые по умолчанию, без ini файла ini_def_window_t equ 20 ini_def_window_l equ 200 ini_def_window_w equ 570 ini_def_window_h equ 470 ini_def_symbol_w equ 7 ini_def_symbol_h equ 10 ini_def_scroll_type equ 0 ;описание параматров для ini файла ini_name db 't_edit.ini',0 ini_sec_window db 'Window',0 key_window_t db 't',0 key_window_l db 'l',0 key_window_w db 'w',0 key_window_h db 'h',0 key_symbol_w db 'symbol_w',0 key_symbol_h db 'symbol_h',0 key_scroll_type db 'scroll_type',0 ini_sec_options db 'Options',0 key_synt_file: db 'syntax_' .numb: db '0',0 key_synt_ext: db 'ext_' .numb: db '0',0 ini_def_synt_f db 0 align 4 max_synt_auto_open equ 10 synt_auto_open: rb 64*max_synt_auto_open db 0 system_dir_0 db '/sys/lib/' lib_name_0 db 'box_lib.obj',0 system_dir_1 db '/sys/lib/' lib_name_1 db 'msgbox.obj',0 system_dir_2 db '/sys/lib/' lib_name_2 db 'proc_lib.obj',0 system_dir_3 db '/sys/lib/' lib_name_3 db 'libimg.obj',0 system_dir_4 db '/sys/lib/' lib_name_4 db 'libini.obj',0 system_dir_5 db '/sys/lib/' lib_name_5 db 'kmenu.obj',0 ;--------------------------------------------------------------------- align 4 import_box_lib: dd alib_init0 ;функция запускается макросом 1 раз при подключении бибилиотеки, потому в программе метка на нее не нужна edit_box_draw dd aEdit_box_draw edit_box_key dd aEdit_box_key edit_box_mouse dd aEdit_box_mouse ;edit_box_set_text dd aEdit_box_set_text ;version_ed dd aVersion_ed scrollbar_ver_draw dd aScrollbar_ver_draw scrollbar_ver_mouse dd aScrollbar_ver_mouse scrollbar_hor_draw dd aScrollbar_hor_draw scrollbar_hor_mouse dd aScrollbar_hor_mouse ;version_scrollbar dd aVersion_scrollbar tl_data_init dd sz_tl_data_init tl_data_clear dd sz_tl_data_clear tl_info_clear dd sz_tl_info_clear tl_key dd sz_tl_key tl_mouse dd sz_tl_mouse tl_draw dd sz_tl_draw tl_info_undo dd sz_tl_info_undo tl_info_redo dd sz_tl_info_redo tl_node_add dd sz_tl_node_add tl_node_set_data dd sz_tl_node_set_data tl_node_get_data dd sz_tl_node_get_data tl_node_delete dd sz_tl_node_delete tl_cur_beg dd sz_tl_cur_beg tl_cur_next dd sz_tl_cur_next tl_cur_perv dd sz_tl_cur_perv ;tl_node_close_open dd sz_tl_node_close_open tl_node_lev_inc dd sz_tl_node_lev_inc tl_node_lev_dec dd sz_tl_node_lev_dec ted_but_sumb_upper dd sz_ted_but_sumb_upper ted_but_sumb_lover dd sz_ted_but_sumb_lover ted_but_convert_by_table dd sz_ted_but_convert_by_table ted_can_save dd sz_ted_can_save ted_clear dd sz_ted_clear ted_delete dd sz_ted_delete ted_draw dd sz_ted_draw ted_init dd sz_ted_init ted_init_scroll_bars dd sz_ted_init_scroll_bars ted_init_syntax_file dd sz_ted_init_syntax_file ted_is_select dd sz_ted_is_select ted_key dd sz_ted_key ted_mouse dd sz_ted_mouse ted_open_file dd sz_ted_open_file ted_save_file dd sz_ted_save_file ted_text_add dd sz_ted_text_add ted_but_select_word dd sz_ted_but_select_word ted_but_cut dd sz_ted_but_cut ted_but_copy dd sz_ted_but_copy ted_but_paste dd sz_ted_but_paste ted_but_undo dd sz_ted_but_undo ted_but_redo dd sz_ted_but_redo ted_but_reverse dd sz_ted_but_reverse ted_but_find_next dd sz_ted_but_find_next ted_text_colored dd sz_ted_text_colored version_text_edit dd sz_ted_version dd 0,0 alib_init0 db 'lib_init',0 aEdit_box_draw db 'edit_box',0 aEdit_box_key db 'edit_box_key',0 aEdit_box_mouse db 'edit_box_mouse',0 ;aEdit_box_set_text db 'edit_box_set_text',0 ;aVersion_ed db 'version_ed',0 aScrollbar_ver_draw db 'scrollbar_v_draw',0 aScrollbar_ver_mouse db 'scrollbar_v_mouse',0 aScrollbar_hor_draw db 'scrollbar_h_draw',0 aScrollbar_hor_mouse db 'scrollbar_h_mouse',0 ;aVersion_scrollbar db 'version_scrollbar',0 sz_tl_data_init db 'tl_data_init',0 sz_tl_data_clear db 'tl_data_clear',0 sz_tl_info_clear db 'tl_info_clear',0 sz_tl_key db 'tl_key',0 sz_tl_mouse db 'tl_mouse',0 sz_tl_draw db 'tl_draw',0 sz_tl_info_undo db 'tl_info_undo',0 sz_tl_info_redo db 'tl_info_redo',0 sz_tl_node_add db 'tl_node_add',0 sz_tl_node_set_data db 'tl_node_set_data',0 sz_tl_node_get_data db 'tl_node_get_data',0 sz_tl_node_delete db 'tl_node_delete',0 sz_tl_cur_beg db 'tl_cur_beg',0 sz_tl_cur_next db 'tl_cur_next',0 sz_tl_cur_perv db 'tl_cur_perv',0 ;sz_tl_node_close_open db 'tl_node_close_open',0 sz_tl_node_lev_inc db 'tl_node_lev_inc',0 sz_tl_node_lev_dec db 'tl_node_lev_dec',0 sz_ted_but_sumb_upper db 'ted_but_sumb_upper',0 sz_ted_but_sumb_lover db 'ted_but_sumb_lover',0 sz_ted_but_convert_by_table db 'ted_but_convert_by_table',0 sz_ted_can_save db 'ted_can_save',0 sz_ted_clear db 'ted_clear',0 sz_ted_delete db 'ted_delete',0 sz_ted_draw db 'ted_draw',0 sz_ted_init db 'ted_init',0 sz_ted_init_scroll_bars db 'ted_init_scroll_bars',0 sz_ted_init_syntax_file db 'ted_init_syntax_file',0 sz_ted_is_select db 'ted_is_select',0 sz_ted_key db 'ted_key',0 sz_ted_mouse db 'ted_mouse',0 sz_ted_open_file db 'ted_open_file',0 sz_ted_save_file db 'ted_save_file',0 sz_ted_text_add db 'ted_text_add',0 sz_ted_but_select_word db 'ted_but_select_word',0 sz_ted_but_cut db 'ted_but_cut',0 sz_ted_but_copy db 'ted_but_copy',0 sz_ted_but_paste db 'ted_but_paste',0 sz_ted_but_undo db 'ted_but_undo',0 sz_ted_but_redo db 'ted_but_redo',0 sz_ted_but_reverse db 'ted_but_reverse',0 sz_ted_but_find_next db 'ted_but_find_next',0 sz_ted_text_colored db 'ted_text_colored',0 sz_ted_version db 'version_text_edit',0 align 4 import_proclib: OpenDialog_Init dd aOpenDialog_Init OpenDialog_Start dd aOpenDialog_Start dd 0,0 aOpenDialog_Init db 'OpenDialog_init',0 aOpenDialog_Start db 'OpenDialog_start',0 align 4 import_msgbox_lib: mb_create dd amb_create mb_reinit dd amb_reinit mb_setfunctions dd amb_setfunctions dd 0,0 amb_create db 'mb_create',0 amb_reinit db 'mb_reinit',0 amb_setfunctions db 'mb_setfunctions',0 align 4 import_libimg: dd alib_init1 img_to_rgb2 dd aimg_to_rgb2 img_decode dd aimg_decode img_destroy dd aimg_destroy dd 0,0 alib_init1 db 'lib_init',0 aimg_to_rgb2 db 'img_to_rgb2',0 aimg_decode db 'img_decode',0 ;автоматически определяет формат графических данных aimg_destroy db 'img_destroy',0 align 4 import_libini: dd alib_init2 ini_get_str dd aini_get_str ini_get_int dd aini_get_int ini_get_color dd aini_get_color dd 0,0 alib_init2 db 'lib_init',0 aini_get_str db 'ini_get_str',0 aini_get_int db 'ini_get_int',0 aini_get_color db 'ini_get_color',0 align 4 import_libkmenu: kmenu_init dd akmenu_init kmainmenu_draw dd akmainmenu_draw kmainmenu_dispatch_cursorevent dd akmainmenu_dispatch_cursorevent ksubmenu_new dd aksubmenu_new ksubmenu_delete dd aksubmenu_delete ksubmenu_draw dd aksubmenu_draw ksubmenu_add dd aksubmenu_add kmenuitem_new dd akmenuitem_new kmenuitem_delete dd akmenuitem_delete kmenuitem_draw dd akmenuitem_draw dd 0,0 akmenu_init db 'kmenu_init',0 akmainmenu_draw db 'kmainmenu_draw',0 akmainmenu_dispatch_cursorevent db 'kmainmenu_dispatch_cursorevent',0 aksubmenu_new db 'ksubmenu_new',0 aksubmenu_delete db 'ksubmenu_delete',0 aksubmenu_draw db 'ksubmenu_draw',0 aksubmenu_add db 'ksubmenu_add',0 akmenuitem_new db 'kmenuitem_new',0 akmenuitem_delete db 'kmenuitem_delete',0 akmenuitem_draw db 'kmenuitem_draw',0 ;--------------------------------------------------------------------- align 4 wScr: .x: .size_x dw 16 ;+0 .start_x dw 50 ;+2 .y: .size_y dw 300 ; +4 .start_y dw 50 ; +6 .btn_high dd 15 ; +8 .type dd ini_def_scroll_type ;+12 .max_area dd 100 ;+16 .cur_area dd 30 ;+20 .position dd 0 ;+24 .bckg_col dd 0 ;+28 .frnt_col dd 0 ;+32 .line_col dd 0 ;+36 .redraw dd 0 ;+40 .delta dw 0 ;+44 .delta2 dw 0 ;+46 .run_x: rb 2+2+2+2+4+4+4+4+4+4 .all_redraw dd 0 ;+80 .ar_offset dd 1 ;+84 ;--------------------------------------------------------------------- align 4 hScr: .x: .size_x dw 150 ;+0 .start_x dw 0 ;+2 .y: .size_y dw 16 ;+4 .start_y dw 50 ;+6 .btn_high dd 15 ;+8 .type dd ini_def_scroll_type ;+12 .max_area dd 100 ;+16 .cur_area dd 30 ;+20 .position dd 0 ;+24 .bckg_col dd 0 ;+28 .frnt_col dd 0 ;+32 .line_col dd 0 ;+36 .redraw dd 0 ;+40 .delta dw 0 ;+44 .delta2 dw 0 ;+46 .run_x: rb 2+2+2+2+4+4+4+4+4+4 .all_redraw dd 0 ;+80 .ar_offset dd 1 ;+84 ;--------------------------------------------------------------------- align 4 ws_dir_lbox: ;дочерний скроллинг для элемента ListBox .x: .size_x dw 16 ;+0 .start_x dw 0 ;+2 .y: .size_y dw 30 ;+4 .start_y dw 70 ;+6 .btn_high dd 15 ;+8 .type dd ini_def_scroll_type ;+12 .max_area dd 100 ;+16 .cur_area dd 30 ;+20 .position dd 0 ;+24 .bckg_col dd 0 ;+28 .frnt_col dd 0 ;+32 .line_col dd 0 ;+36 .redraw dd 0 ;+40 .delta dw 0 ;+44 .delta2 dw 0 ;+46 .run_x: rb 2+2+2+2+4+4+4+4+4+4 .all_redraw dd 0 ;+80 .ar_offset dd 1 ;+84 ;--------------------------------------------------------------------- align 4 OpenDialog_data: .type dd 0 .procinfo dd procinfo ;+4 .com_area_name dd communication_area_name ;+8 .com_area dd 0 ;+12 .opendir_path dd plugin_path ;+16 .dir_default_path dd default_dir ;+20 .start_path dd file_name ;+24 путь к диалогу открытия файлов .draw_window dd draw_window ;+28 .status dd 0 ;+32 .openfile_path dd openfile_path ;+36 путь к открываемому файлу .filename_area dd filename_area ;+40 .filter_area dd Filter .x: .x_size dw 420 ;+48 ; Window X size .x_start dw 10 ;+50 ; Window X position .y: .y_size dw 320 ;+52 ; Window y size .y_start dw 10 ;+54 ; Window Y position default_dir db '/rd/1',0 ;директория по умолчанию communication_area_name: db 'FFFFFFFF_open_dialog',0 open_dialog_name: db 'opendial',0 communication_area_default_path: db '/rd/1/File managers/',0 Filter: dd Filter.end - Filter.1 .1: db 'ASM',0 db 'CPP',0 db 'INC',0 db 'MAC',0 db 'INI',0 db 'TXT',0 db 'H',0 db 'C',0 db 'HTM',0 db 'HTML',0 db 'PY',0 db 'SH',0 db 'BAT',0 db 'LUA',0 db 'INF',0 db 'LOG',0 db 'DBG',0 db 'DAT',0 .end: db 0 TED_PANEL_NULL equ 0 ;нет открытой панели TED_PANEL_FIND equ 1 ;панель поиска TED_PANEL_SYNTAX equ 2 ;панель выбора файлов подсветки TED_PANEL_WIDTH equ 150 ;ширина панели count_of_dir_list_files equ 15 ;максимальное число файлов синтаксиса показываемых в окне элемента tree1 ;------------------------------------------------------------------------------ struct TexSelect x0 dd ? y0 dd ? x1 dd ? y1 dd ? ends ;------------------------------------------------------------------------------ align 4 tedit0: ;структура текстового редактора .wnd BOX 0,50,440,150 ;+ 0 .rec BOX 30,23,ini_def_symbol_w,ini_def_symbol_h ;+16 .drag_m db 0 ;+32 выделение от мыши .drag_k db 0 ;+33 выделение от клавиатуры .sel TexSelect 0,0,0,0 ;+34 структура выделения .seln TexSelect ;+50 дополнительная структура выделения .tex dd 0 ;+66 text memory pointer .tex_1 dd 0 ;+70 text first symbol pointer .tex_end dd 0 ;+74 text end memory pointer .cur_x dd 0 ;+78 координата x курсора .cur_y dd 0 ;+82 координата y курсора .max_chars dd maxChars ;+86 максимальное число символов в одном документе .count_colors_text dd 1 ;+90 колличество цветов текста .count_key_words dd 0 ;+94 колличество ключевых слов .color_cursor dd 0x808080 ;+98 цвет курсора .color_wnd_capt dd 0x80 ;+102 цвет полей вокруг окна .color_wnd_work dd 0x0 ;+106 цвет фона окна .color_wnd_bord dd 0xd0d0d0 ;+110 цвет текста на полях .color_select dd 0x208080 ;+114 цвет выделения .color_cur_text dd 0xff0000 ;+118 цвет символа под курсором .color_wnd_text dd 0xffff00 ;+122 цвет текста в окне .syntax_file dd 0 ;+126 указатель на начало файла синтаксиса .syntax_file_size dd maxSyntaxFileSize ;+130 максимальный размер файла синтаксиса .text_colors dd 0 ;+134 указатель на массив цветов текста .help_text_f1 dd 0 ;+138 указатель на текст справки (по нажатии F1) .help_id dd -1 ;+142 идентификатор для справки .key_words_data dd 0 ;+146 указатель на структуры ключевых слов TexColViv .tim_ch dd ? ;+150 количество изменений в файле .tim_undo dd ? ;+154 количество отмененных действий .tim_ls dd ? ;+158 время последнего сохранения .tim_co dd ? ;+162 время последней цветовой разметки .el_focus dd el_focus ;+166 указатель на переменную элемента в фокусе .err_save db 0 ;+170 ошибка сохранения файла .panel_id db 0 ;+171 номер открытой панели .key_new db 0 ;+172 символ, который будет добавлятся с клавиатуры .symbol_new_line db 20 ;+173 символ завершения строки .scr_w dd wScr ;+174 вертикальный скроллинг .scr_h dd hScr ;+178 горизонтальный скроллинг .arr_key_pos dd 0 ;+182 указатель на массив позиций ключевых слов .buffer dd buf ;+186 указатель на буфер копирования/вставки .buffer_find dd buf_find ;+190 указатель на буфер для поиска .cur_ins db 1 ;+194 режим работы курсора (обычный или замена) .mode_color db 1 ;+195 режим выделения слов цветом (0-выкл. 1-вкл.) .mode_invis db 0 ;+196 режим показа непечатаемых символов .gp_opt db 0 ;+197 опции возвращаемые функцией ted_get_pos_by_cursor .fun_on_key_ctrl_o dd ted_but_open_file ;+198 указатель на функцию вызываемую при нажатии Ctrl+O (открытие файла) .fun_on_key_ctrl_f dd ted_but_find ;+202 ... Ctrl+F (вызова/скрытия панели поиска) .fun_on_key_ctrl_n dd ted_but_new_file ;+206 ... Ctrl+N (создание нового документа) .fun_on_key_ctrl_s dd ted_but_save_file ;+210 ... Ctrl+S .buffer_size dd BUF_SIZE ;+214 размер буфера копирования/вставки .fun_find_err dd ted_on_find_err ;+218 указатель на функцию вызываемую если поиск закончился неудачно .fun_init_synt_err dd 0 ;+222 .fun_draw_panel_buttons dd draw_but_toolbar ;+226 указатель на функцию рисования панели с кнопками .fun_draw_panel_find dd draw_panel_find ;+230 указатель на функцию рисования панели поиска .fun_draw_panel_syntax dd draw_panel_syntax ;+234 указатель на функцию рисования панели синтаксиса .fun_save_err dd ted_save_err_msg ;+238 указатель на функцию вызываемую если сохранение файла закончилось неудачно .increase_size dd 200 ;+242 число символов на которые будет увечиваться память при нехватке .ptr_free_symb dd ? ;+246 используется внутри элемента для ускорения вставки текста ;------------------------------------------------------------------------------ conv_tabl rb 128 ; таблица для конвертирования scan-кода в ascii-код el_focus dd 0 mouse_dd dd 0 tree1 tree_list 264,count_of_dir_list_files+2, tl_key_no_edit+tl_draw_par_line+tl_list_box_mode,\ 16,16, 0x8080ff,0x0000ff,0xffffff, 0,70,TED_PANEL_WIDTH-17,120, 0,0,0, el_focus,\ ws_dir_lbox,0 ;dir_list memory tree_file_struct: dd 1 dd 0,0,count_of_dir_list_files dd dir_mem db 0 dd file_name ;sys_path if lang eq ru msgbox_1: dw 0 db 'Внимание',0 ;+2 = +MB_TEXT_OFFSET db 'Файл большой, потому открыт не весь.',13 db ' 1. При его сохранении будут потеряны "не открывшиеся" символы.',13 db ' 2. В документ нельзя добавлять текст, т. к. память занята.',0 db 'Я понял(а)',0 ;button1 db 0 msgbox_2: db 3,0 db 'Внимание',0 db 'Сохранить изменения в файле?',0 db 'Сохранить',0 db 'Не сохранять',0 db 'Отмена',0 db 0 msgbox_3: db 1,0 db 'Внимание',0 db 'Ошибка при открытии файла с цветовыми настройками!',13,\ 'Потому выделение слов цветом не возможно.',13,\ ' (код ошибки =' .err: db '?' db ')',0 db 'Закрыть',0 db 0 msgbox_4: db 1,0 db 'Внимание',0 db 'Ошибка при открытии файла!',13,\ 'Возможно имя файла введено не правильно.',13,\ ' (код ошибки =' .err: db '?' db ')',0 db 'Закрыть',0 db 0 msgbox_6: db 1,0 db 'Внимание',0 db 'Ошибка при сохранении файла!',13,\ 'Возможно имя файла введено не правильно.',13,\ ' (код ошибки =' .err: db '?' db ')',0 db 'Закрыть',0 db 0 msgbox_7: db 1,0 db 'Текст не найден',0 db 'Достигнут конец документа.',13,\ 'Попробуйте перейти в начало документа',13,\ 'или изменить запрос и повторить поиск.',0 db 'Закрыть',0 db 0 msgbox_9: db 3,0 db 'Внимание',0 db 'Не открылся ',39,'диалог открытия файла',39,'.',13 .fdp: rb 100 db 0 db 'Закрыть',0 db 0 txtFindCapt db 'Поиск',0 txtFindNext db 'Найти далее',0 txtFormatCapt db 'Формат',0 txtFormatApply db 'Применить',0 else msgbox_1: dw 0 db 'Warning',0 ;+2 = +MB_TEXT_OFFSET db 'File is large, because not all open.',13 db ' 1. If you save it will lose "not opened" characters.',13 db ' 2. The document can not add text, because the memory is busy.',0 db 'Ok',0 ;button1 db 0 msgbox_2: db 3,0 db 'Warning',0 db 'Save changes to the file?',0 db 'Save',0 db 'Discard',0 db 'Cancel',0 db 0 msgbox_3: db 1,0 db 'Warning',0 db 'Error opening the file with the color settings!',13,\ 'Because color selection of words is not possible.',13,\ ' (error code =' .err: db '?' db ')',0 db 'Close',0 db 0 msgbox_4: db 1,0 db 'Warning',0 db 'Error opening file!',13,\ 'Maybe the file name is not entered correctly.',13,\ ' (error code =' .err: db '?' db ')',0 db 'Close',0 db 0 msgbox_6: db 1,0 db 'Warning',0 db 'Error saving file!',13,\ 'Maybe the file name is not entered correctly.',13,\ ' (error code =' .err: db '?' db ')',0 db 'Close',0 db 0 msgbox_7: db 1,0 db 'Text not found.',0 db 'Reached end of the document.',13,\ 'Try to go to the beginning of the document',13,\ 'or change the query and search again.',0 db 'Close',0 db 0 msgbox_9: db 3,0 db 'Warning',0 db 'Error run ',39,'open file dialog',39,'.',13 .fdp: rb 100 db 0 db 'Close',0 db 0 txtFindCapt db 'Search',0 txtFindNext db 'Find next',0 txtFormatCapt db 'Format',0 txtFormatApply db 'Apply',0 end if ;функции для кнопок в сообщениях msgbox_2N_funct: dd On_SaveAndNewFile dd On_NewFile dd 0 msgbox_2O_funct: dd On_SaveAndOpenFile dd ted_but_open_file.no_msg dd 0 msgbox_2E_funct: dd On_SaveAndExit dd On_Exit dd 0 KM_SHIFT equ 0x00010000 KM_CTRL equ 0x00020000 KM_ALT equ 0x00040000 KM_NUMLOCK equ 0x00080000 ; KEY CODES KEY_F1 equ 0x0000003B KEY_F2 equ 0x0000003C KEY_F3 equ 0x0000003D \ No newline at end of file +fn_col_option dd def_col_file fn_syntax_dir db 'info/',0 def_col_file db 'default.syn',0 exit_code dd 0 ;переменная используемая для выхода из программы ;значения задаваемые по умолчанию, без ini файла ini_def_window_t equ 20 ini_def_window_l equ 200 ini_def_window_w equ 570 ini_def_window_h equ 470 ini_def_symbol_w equ 7 ini_def_symbol_h equ 10 ini_def_scroll_type equ 0 ;описание параматров для ini файла ini_name db 't_edit.ini',0 ini_sec_window db 'Window',0 key_window_t db 't',0 key_window_l db 'l',0 key_window_w db 'w',0 key_window_h db 'h',0 key_symbol_w db 'symbol_w',0 key_symbol_h db 'symbol_h',0 key_scroll_type db 'scroll_type',0 ini_sec_options db 'Options',0 key_synt_file: db 'syntax_' .numb: db '0',0 key_synt_ext: db 'ext_' .numb: db '0',0 ini_def_synt_f db 0 align 4 max_synt_auto_open equ 10 synt_auto_open: rb 64*max_synt_auto_open db 0 system_dir_0 db '/sys/lib/' lib_name_0 db 'box_lib.obj',0 system_dir_1 db '/sys/lib/' lib_name_1 db 'msgbox.obj',0 system_dir_2 db '/sys/lib/' lib_name_2 db 'proc_lib.obj',0 system_dir_3 db '/sys/lib/' lib_name_3 db 'libimg.obj',0 system_dir_4 db '/sys/lib/' lib_name_4 db 'libini.obj',0 system_dir_5 db '/sys/lib/' lib_name_5 db 'kmenu.obj',0 ;--------------------------------------------------------------------- align 4 import_box_lib: dd alib_init0 ;функция запускается макросом 1 раз при подключении бибилиотеки, потому в программе метка на нее не нужна edit_box_draw dd aEdit_box_draw edit_box_key dd aEdit_box_key edit_box_mouse dd aEdit_box_mouse ;edit_box_set_text dd aEdit_box_set_text ;version_ed dd aVersion_ed scrollbar_ver_draw dd aScrollbar_ver_draw scrollbar_ver_mouse dd aScrollbar_ver_mouse scrollbar_hor_draw dd aScrollbar_hor_draw scrollbar_hor_mouse dd aScrollbar_hor_mouse ;version_scrollbar dd aVersion_scrollbar tl_data_init dd sz_tl_data_init tl_data_clear dd sz_tl_data_clear tl_info_clear dd sz_tl_info_clear tl_key dd sz_tl_key tl_mouse dd sz_tl_mouse tl_draw dd sz_tl_draw tl_info_undo dd sz_tl_info_undo tl_info_redo dd sz_tl_info_redo tl_node_add dd sz_tl_node_add tl_node_set_data dd sz_tl_node_set_data tl_node_get_data dd sz_tl_node_get_data tl_node_delete dd sz_tl_node_delete tl_cur_beg dd sz_tl_cur_beg tl_cur_next dd sz_tl_cur_next tl_cur_perv dd sz_tl_cur_perv ;tl_node_close_open dd sz_tl_node_close_open tl_node_lev_inc dd sz_tl_node_lev_inc tl_node_lev_dec dd sz_tl_node_lev_dec ted_but_sumb_upper dd sz_ted_but_sumb_upper ted_but_sumb_lover dd sz_ted_but_sumb_lover ted_but_convert_by_table dd sz_ted_but_convert_by_table ted_can_save dd sz_ted_can_save ted_clear dd sz_ted_clear ted_delete dd sz_ted_delete ted_draw dd sz_ted_draw ted_init dd sz_ted_init ted_init_scroll_bars dd sz_ted_init_scroll_bars ted_init_syntax_file dd sz_ted_init_syntax_file ted_is_select dd sz_ted_is_select ted_key dd sz_ted_key ted_mouse dd sz_ted_mouse ted_open_file dd sz_ted_open_file ted_save_file dd sz_ted_save_file ted_text_add dd sz_ted_text_add ted_but_select_word dd sz_ted_but_select_word ted_but_cut dd sz_ted_but_cut ted_but_copy dd sz_ted_but_copy ted_but_paste dd sz_ted_but_paste ted_but_undo dd sz_ted_but_undo ted_but_redo dd sz_ted_but_redo ted_but_reverse dd sz_ted_but_reverse ted_but_find_next dd sz_ted_but_find_next ted_text_colored dd sz_ted_text_colored version_text_edit dd sz_ted_version dd 0,0 alib_init0 db 'lib_init',0 aEdit_box_draw db 'edit_box',0 aEdit_box_key db 'edit_box_key',0 aEdit_box_mouse db 'edit_box_mouse',0 ;aEdit_box_set_text db 'edit_box_set_text',0 ;aVersion_ed db 'version_ed',0 aScrollbar_ver_draw db 'scrollbar_v_draw',0 aScrollbar_ver_mouse db 'scrollbar_v_mouse',0 aScrollbar_hor_draw db 'scrollbar_h_draw',0 aScrollbar_hor_mouse db 'scrollbar_h_mouse',0 ;aVersion_scrollbar db 'version_scrollbar',0 sz_tl_data_init db 'tl_data_init',0 sz_tl_data_clear db 'tl_data_clear',0 sz_tl_info_clear db 'tl_info_clear',0 sz_tl_key db 'tl_key',0 sz_tl_mouse db 'tl_mouse',0 sz_tl_draw db 'tl_draw',0 sz_tl_info_undo db 'tl_info_undo',0 sz_tl_info_redo db 'tl_info_redo',0 sz_tl_node_add db 'tl_node_add',0 sz_tl_node_set_data db 'tl_node_set_data',0 sz_tl_node_get_data db 'tl_node_get_data',0 sz_tl_node_delete db 'tl_node_delete',0 sz_tl_cur_beg db 'tl_cur_beg',0 sz_tl_cur_next db 'tl_cur_next',0 sz_tl_cur_perv db 'tl_cur_perv',0 ;sz_tl_node_close_open db 'tl_node_close_open',0 sz_tl_node_lev_inc db 'tl_node_lev_inc',0 sz_tl_node_lev_dec db 'tl_node_lev_dec',0 sz_ted_but_sumb_upper db 'ted_but_sumb_upper',0 sz_ted_but_sumb_lover db 'ted_but_sumb_lover',0 sz_ted_but_convert_by_table db 'ted_but_convert_by_table',0 sz_ted_can_save db 'ted_can_save',0 sz_ted_clear db 'ted_clear',0 sz_ted_delete db 'ted_delete',0 sz_ted_draw db 'ted_draw',0 sz_ted_init db 'ted_init',0 sz_ted_init_scroll_bars db 'ted_init_scroll_bars',0 sz_ted_init_syntax_file db 'ted_init_syntax_file',0 sz_ted_is_select db 'ted_is_select',0 sz_ted_key db 'ted_key',0 sz_ted_mouse db 'ted_mouse',0 sz_ted_open_file db 'ted_open_file',0 sz_ted_save_file db 'ted_save_file',0 sz_ted_text_add db 'ted_text_add',0 sz_ted_but_select_word db 'ted_but_select_word',0 sz_ted_but_cut db 'ted_but_cut',0 sz_ted_but_copy db 'ted_but_copy',0 sz_ted_but_paste db 'ted_but_paste',0 sz_ted_but_undo db 'ted_but_undo',0 sz_ted_but_redo db 'ted_but_redo',0 sz_ted_but_reverse db 'ted_but_reverse',0 sz_ted_but_find_next db 'ted_but_find_next',0 sz_ted_text_colored db 'ted_text_colored',0 sz_ted_version db 'version_text_edit',0 align 4 import_proclib: OpenDialog_Init dd aOpenDialog_Init OpenDialog_Start dd aOpenDialog_Start dd 0,0 aOpenDialog_Init db 'OpenDialog_init',0 aOpenDialog_Start db 'OpenDialog_start',0 align 4 import_msgbox_lib: mb_create dd amb_create mb_reinit dd amb_reinit mb_setfunctions dd amb_setfunctions dd 0,0 amb_create db 'mb_create',0 amb_reinit db 'mb_reinit',0 amb_setfunctions db 'mb_setfunctions',0 align 4 import_libimg: dd alib_init1 img_to_rgb2 dd aimg_to_rgb2 img_decode dd aimg_decode img_destroy dd aimg_destroy dd 0,0 alib_init1 db 'lib_init',0 aimg_to_rgb2 db 'img_to_rgb2',0 aimg_decode db 'img_decode',0 ;автоматически определяет формат графических данных aimg_destroy db 'img_destroy',0 align 4 import_libini: dd alib_init2 ini_get_str dd aini_get_str ini_get_int dd aini_get_int ini_get_color dd aini_get_color dd 0,0 alib_init2 db 'lib_init',0 aini_get_str db 'ini_get_str',0 aini_get_int db 'ini_get_int',0 aini_get_color db 'ini_get_color',0 align 4 import_libkmenu: kmenu_init dd akmenu_init kmainmenu_draw dd akmainmenu_draw kmainmenu_dispatch_cursorevent dd akmainmenu_dispatch_cursorevent ksubmenu_new dd aksubmenu_new ksubmenu_delete dd aksubmenu_delete ksubmenu_draw dd aksubmenu_draw ksubmenu_add dd aksubmenu_add kmenuitem_new dd akmenuitem_new kmenuitem_delete dd akmenuitem_delete kmenuitem_draw dd akmenuitem_draw dd 0,0 akmenu_init db 'kmenu_init',0 akmainmenu_draw db 'kmainmenu_draw',0 akmainmenu_dispatch_cursorevent db 'kmainmenu_dispatch_cursorevent',0 aksubmenu_new db 'ksubmenu_new',0 aksubmenu_delete db 'ksubmenu_delete',0 aksubmenu_draw db 'ksubmenu_draw',0 aksubmenu_add db 'ksubmenu_add',0 akmenuitem_new db 'kmenuitem_new',0 akmenuitem_delete db 'kmenuitem_delete',0 akmenuitem_draw db 'kmenuitem_draw',0 ;--------------------------------------------------------------------- align 4 wScr scrollbar 16,50, 300,50, 15, 100,30,0, 0,0,0, 1 align 4 hScr scrollbar 150,0, 16,50, 15, 100,30,0, 0,0,0, 1 ;дочерний скроллинг для элемента ListBox align 4 ws_dir_lbox scrollbar 16,0, 30,70, 15, 100,30,0, 0,0,0, 1 ;--------------------------------------------------------------------- align 4 OpenDialog_data: .type dd 0 .procinfo dd procinfo ;+4 .com_area_name dd communication_area_name ;+8 .com_area dd 0 ;+12 .opendir_path dd plugin_path ;+16 .dir_default_path dd default_dir ;+20 .start_path dd file_name ;+24 путь к диалогу открытия файлов .draw_window dd draw_window ;+28 .status dd 0 ;+32 .openfile_path dd openfile_path ;+36 путь к открываемому файлу .filename_area dd filename_area ;+40 .filter_area dd Filter .x: .x_size dw 420 ;+48 ; Window X size .x_start dw 10 ;+50 ; Window X position .y: .y_size dw 320 ;+52 ; Window y size .y_start dw 10 ;+54 ; Window Y position default_dir db '/rd/1',0 ;директория по умолчанию communication_area_name: db 'FFFFFFFF_open_dialog',0 open_dialog_name: db 'opendial',0 communication_area_default_path: db '/rd/1/File managers/',0 Filter: dd Filter.end - Filter.1 .1: db 'ASM',0 db 'CPP',0 db 'INC',0 db 'MAC',0 db 'INI',0 db 'TXT',0 db 'H',0 db 'C',0 db 'HTM',0 db 'HTML',0 db 'PY',0 db 'SH',0 db 'BAT',0 db 'LUA',0 db 'INF',0 db 'LOG',0 db 'DBG',0 db 'DAT',0 .end: db 0 TED_PANEL_NULL equ 0 ;нет открытой панели TED_PANEL_FIND equ 1 ;панель поиска TED_PANEL_SYNTAX equ 2 ;панель выбора файлов подсветки TED_PANEL_WIDTH equ 150 ;ширина панели count_of_dir_list_files equ 15 ;максимальное число файлов синтаксиса показываемых в окне элемента tree1 ;------------------------------------------------------------------------------ struct TexSelect x0 dd ? y0 dd ? x1 dd ? y1 dd ? ends ;------------------------------------------------------------------------------ align 4 tedit0: ;структура текстового редактора .wnd BOX 0,50,440,150 ;+ 0 .rec BOX 30,23,ini_def_symbol_w,ini_def_symbol_h ;+16 .drag_m db 0 ;+32 выделение от мыши .drag_k db 0 ;+33 выделение от клавиатуры .sel TexSelect 0,0,0,0 ;+34 структура выделения .seln TexSelect ;+50 дополнительная структура выделения .tex dd 0 ;+66 text memory pointer .tex_1 dd 0 ;+70 text first symbol pointer .tex_end dd 0 ;+74 text end memory pointer .cur_x dd 0 ;+78 координата x курсора .cur_y dd 0 ;+82 координата y курсора .max_chars dd maxChars ;+86 максимальное число символов в одном документе .count_colors_text dd 1 ;+90 колличество цветов текста .count_key_words dd 0 ;+94 колличество ключевых слов .color_cursor dd 0x808080 ;+98 цвет курсора .color_wnd_capt dd 0x80 ;+102 цвет полей вокруг окна .color_wnd_work dd 0x0 ;+106 цвет фона окна .color_wnd_bord dd 0xd0d0d0 ;+110 цвет текста на полях .color_select dd 0x208080 ;+114 цвет выделения .color_cur_text dd 0xff0000 ;+118 цвет символа под курсором .color_wnd_text dd 0xffff00 ;+122 цвет текста в окне .syntax_file dd 0 ;+126 указатель на начало файла синтаксиса .syntax_file_size dd maxSyntaxFileSize ;+130 максимальный размер файла синтаксиса .text_colors dd 0 ;+134 указатель на массив цветов текста .help_text_f1 dd 0 ;+138 указатель на текст справки (по нажатии F1) .help_id dd -1 ;+142 идентификатор для справки .key_words_data dd 0 ;+146 указатель на структуры ключевых слов TexColViv .tim_ch dd ? ;+150 количество изменений в файле .tim_undo dd ? ;+154 количество отмененных действий .tim_ls dd ? ;+158 время последнего сохранения .tim_co dd ? ;+162 время последней цветовой разметки .el_focus dd el_focus ;+166 указатель на переменную элемента в фокусе .err_save db 0 ;+170 ошибка сохранения файла .panel_id db 0 ;+171 номер открытой панели .key_new db 0 ;+172 символ, который будет добавлятся с клавиатуры .symbol_new_line db 20 ;+173 символ завершения строки .scr_w dd wScr ;+174 вертикальный скроллинг .scr_h dd hScr ;+178 горизонтальный скроллинг .arr_key_pos dd 0 ;+182 указатель на массив позиций ключевых слов .buffer dd buf ;+186 указатель на буфер копирования/вставки .buffer_find dd buf_find ;+190 указатель на буфер для поиска .cur_ins db 1 ;+194 режим работы курсора (обычный или замена) .mode_color db 1 ;+195 режим выделения слов цветом (0-выкл. 1-вкл.) .mode_invis db 0 ;+196 режим показа непечатаемых символов .gp_opt db 0 ;+197 опции возвращаемые функцией ted_get_pos_by_cursor .fun_on_key_ctrl_o dd ted_but_open_file ;+198 указатель на функцию вызываемую при нажатии Ctrl+O (открытие файла) .fun_on_key_ctrl_f dd ted_but_find ;+202 ... Ctrl+F (вызова/скрытия панели поиска) .fun_on_key_ctrl_n dd ted_but_new_file ;+206 ... Ctrl+N (создание нового документа) .fun_on_key_ctrl_s dd ted_but_save_file ;+210 ... Ctrl+S .buffer_size dd BUF_SIZE ;+214 размер буфера копирования/вставки .fun_find_err dd ted_on_find_err ;+218 указатель на функцию вызываемую если поиск закончился неудачно .fun_init_synt_err dd 0 ;+222 .fun_draw_panel_buttons dd draw_but_toolbar ;+226 указатель на функцию рисования панели с кнопками .fun_draw_panel_find dd draw_panel_find ;+230 указатель на функцию рисования панели поиска .fun_draw_panel_syntax dd draw_panel_syntax ;+234 указатель на функцию рисования панели синтаксиса .fun_save_err dd ted_save_err_msg ;+238 указатель на функцию вызываемую если сохранение файла закончилось неудачно .increase_size dd 200 ;+242 число символов на которые будет увечиваться память при нехватке .ptr_free_symb dd ? ;+246 используется внутри элемента для ускорения вставки текста ;------------------------------------------------------------------------------ conv_tabl rb 128 ; таблица для конвертирования scan-кода в ascii-код el_focus dd 0 mouse_dd dd 0 tree1 tree_list 264,count_of_dir_list_files+2, tl_key_no_edit+tl_draw_par_line+tl_list_box_mode,\ 16,16, 0x8080ff,0x0000ff,0xffffff, 0,70,TED_PANEL_WIDTH-17,120, 0,0,0, el_focus,\ ws_dir_lbox,0 ;dir_list memory tree_file_struct: dd 1 dd 0,0,count_of_dir_list_files dd dir_mem db 0 dd file_name ;sys_path if lang eq ru msgbox_1: dw 0 db 'Внимание',0 ;+2 = +MB_TEXT_OFFSET db 'Файл большой, потому открыт не весь.',13 db ' 1. При его сохранении будут потеряны "не открывшиеся" символы.',13 db ' 2. В документ нельзя добавлять текст, т. к. память занята.',0 db 'Я понял(а)',0 ;button1 db 0 msgbox_2: db 3,0 db 'Внимание',0 db 'Сохранить изменения в файле?',0 db 'Сохранить',0 db 'Не сохранять',0 db 'Отмена',0 db 0 msgbox_3: db 1,0 db 'Внимание',0 db 'Ошибка при открытии файла с цветовыми настройками!',13,\ 'Потому выделение слов цветом не возможно.',13,\ ' (код ошибки =' .err: db '?' db ')',0 db 'Закрыть',0 db 0 msgbox_4: db 1,0 db 'Внимание',0 db 'Ошибка при открытии файла!',13,\ 'Возможно имя файла введено не правильно.',13,\ ' (код ошибки =' .err: db '?' db ')',0 db 'Закрыть',0 db 0 msgbox_6: db 1,0 db 'Внимание',0 db 'Ошибка при сохранении файла!',13,\ 'Возможно имя файла введено не правильно.',13,\ ' (код ошибки =' .err: db '?' db ')',0 db 'Закрыть',0 db 0 msgbox_7: db 1,0 db 'Текст не найден',0 db 'Достигнут конец документа.',13,\ 'Попробуйте перейти в начало документа',13,\ 'или изменить запрос и повторить поиск.',0 db 'Закрыть',0 db 0 msgbox_9: db 3,0 db 'Внимание',0 db 'Не открылся ',39,'диалог открытия файла',39,'.',13 .fdp: rb 100 db 0 db 'Закрыть',0 db 0 txtFindCapt db 'Поиск',0 txtFindNext db 'Найти далее',0 txtFormatCapt db 'Формат',0 txtFormatApply db 'Применить',0 else msgbox_1: dw 0 db 'Warning',0 ;+2 = +MB_TEXT_OFFSET db 'File is large, because not all open.',13 db ' 1. If you save it will lose "not opened" characters.',13 db ' 2. The document can not add text, because the memory is busy.',0 db 'Ok',0 ;button1 db 0 msgbox_2: db 3,0 db 'Warning',0 db 'Save changes to the file?',0 db 'Save',0 db 'Discard',0 db 'Cancel',0 db 0 msgbox_3: db 1,0 db 'Warning',0 db 'Error opening the file with the color settings!',13,\ 'Because color selection of words is not possible.',13,\ ' (error code =' .err: db '?' db ')',0 db 'Close',0 db 0 msgbox_4: db 1,0 db 'Warning',0 db 'Error opening file!',13,\ 'Maybe the file name is not entered correctly.',13,\ ' (error code =' .err: db '?' db ')',0 db 'Close',0 db 0 msgbox_6: db 1,0 db 'Warning',0 db 'Error saving file!',13,\ 'Maybe the file name is not entered correctly.',13,\ ' (error code =' .err: db '?' db ')',0 db 'Close',0 db 0 msgbox_7: db 1,0 db 'Text not found.',0 db 'Reached end of the document.',13,\ 'Try to go to the beginning of the document',13,\ 'or change the query and search again.',0 db 'Close',0 db 0 msgbox_9: db 3,0 db 'Warning',0 db 'Error run ',39,'open file dialog',39,'.',13 .fdp: rb 100 db 0 db 'Close',0 db 0 txtFindCapt db 'Search',0 txtFindNext db 'Find next',0 txtFormatCapt db 'Format',0 txtFormatApply db 'Apply',0 end if ;функции для кнопок в сообщениях msgbox_2N_funct: dd On_SaveAndNewFile dd On_NewFile dd 0 msgbox_2O_funct: dd On_SaveAndOpenFile dd ted_but_open_file.no_msg dd 0 msgbox_2E_funct: dd On_SaveAndExit dd On_Exit dd 0 KM_SHIFT equ 0x00010000 KM_CTRL equ 0x00020000 KM_ALT equ 0x00040000 KM_NUMLOCK equ 0x00080000 ; KEY CODES KEY_F1 equ 0x0000003B KEY_F2 equ 0x0000003C KEY_F3 equ 0x0000003D \ No newline at end of file diff --git a/programs/other/t_edit/t_edit.asm b/programs/other/t_edit/t_edit.asm index ce7f36b929..ed77dac1c9 100644 --- a/programs/other/t_edit/t_edit.asm +++ b/programs/other/t_edit/t_edit.asm @@ -51,24 +51,22 @@ macro load_image_file path,buf,size db 0 @@: ;32 - стандартный адрес по которому должен быть буфер с системным путем - copy_path .path_str,[32],file_name,0x0 + copy_path .path_str,[32],file_name,0 else - copy_path path,[32],file_name,0x0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой + copy_path path,[32],file_name,0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой end if stdcall mem.Alloc, dword size ;выделяем память для изображения mov [buf],eax - mov eax,70 ;70-я функция работа с файлами 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], [buf] + m2m [run_file_70.Buffer], eax mov byte[run_file_70+20], 0 mov [run_file_70.FileName], file_name - mov ebx,run_file_70 - int 0x40 ;загружаем файл изображения + mcall 70,run_file_70 ;загружаем файл изображения cmp ebx,0xffffffff je @f ;определяем вид изображения и переводим его во временный буфер image_data @@ -210,29 +208,25 @@ mov ebp,lib0 mov eax,dword[icon_tl_sys] mov dword[tree1.data_img],eax ;------------------------------------------------------------------------------ - copy_path fn_syntax_dir,sys_path,file_name,0x0 ;берем путь к папке с файлами синтаксиса - mov eax,70 - mov ebx,tree_file_struct - int 0x40 + copy_path fn_syntax_dir,sys_path,file_name,0 ;берем путь к папке с файлами синтаксиса + mcall 70,tree_file_struct -cmp ebx,-1 -je .end_dir_init - - mov eax,dir_mem - add eax,32+4+1+3+4*6+8 -mov ecx,ebx -@@: - cmp byte[eax],'.' ;фильтруем файлы с именами '.' и '..' - je .filter - ;0x10000 ;1*2^16 - где 1 номер иконки с книгой - stdcall dword[tl_node_add], eax,0x10000, tree1 - - stdcall dword[tl_cur_next], tree1 - .filter: - add eax,304 - loop @b - stdcall dword[tl_cur_beg],tree1 ;ставим курсор на начало списка -.end_dir_init: + cmp ebx,-1 + je .end_dir_init + mov eax,dir_mem + add eax,32+4+1+3+4*6+8 + mov ecx,ebx + @@: + cmp byte[eax],'.' ;фильтруем файлы с именами '.' и '..' + je .filter + ;0x10000 ;1*2^16 - где 1 номер иконки с книгой + stdcall dword[tl_node_add], tree1,0x10000,eax + stdcall dword[tl_cur_next], tree1 + .filter: + add eax,304 + loop @b + stdcall dword[tl_cur_beg],tree1 ;ставим курсор на начало списка + .end_dir_init: ;--- load ini file --- copy_path ini_name,sys_path,file_name,0 @@ -293,7 +287,7 @@ mov ecx,ebx align 4 red_win: - call draw_window + call draw_window align 4 still: @@ -326,12 +320,9 @@ draw_window: mov edi,tedit0 ;значение edi нужно для EvSize и ted_wnd_t call EvSize - mov eax,13 ;верхний прямоугольник, для очистки верхней панели - xor ebx,ebx - mov ecx,ted_wnd_t - mov bx,word[procinfo.client_box.width] + movzx ebx,word[procinfo.client_box.width] inc bx - int 0x40 + mcall 13,,ted_wnd_t ;верхний прямоугольник, для очистки верхней панели call draw_but_toolbar @@ -361,15 +352,13 @@ mouse: ;output: ; ah = symbol align 4 -proc KeyConvertToASCII, table:dword - push ebx - mov ebx,dword[table] ;convert scan to ascii - ror ax,8 - xor ah,ah - add bx,ax - mov ah,byte[ebx] - pop ebx - ret +proc KeyConvertToASCII uses ebx, table:dword + mov ebx,dword[table] ;convert scan to ascii + ror ax,8 + xor ah,ah + add bx,ax + mov ah,byte[ebx] + ret endp align 4 @@ -541,7 +530,7 @@ button: @@: stdcall [ted_delete], tedit0 - stdcall dword[tl_data_clear], tree1 + stdcall [tl_data_clear], tree1 mcall -1 ;выход из программы edit2 edit_box TED_PANEL_WIDTH-1, 0, 20, 0xffffff, 0xff80, 0xff0000, 0xff, 0x4080, 300, buf_find, mouse_dd, 0 diff --git a/programs/other/t_edit/wnd_k_words.inc b/programs/other/t_edit/wnd_k_words.inc index 70c1912eaa..76cf3daa58 100644 --- a/programs/other/t_edit/wnd_k_words.inc +++ b/programs/other/t_edit/wnd_k_words.inc @@ -153,7 +153,7 @@ prop_button: stdcall str_instr, ebx,[edit3.text] test al,al jnz .end_add - stdcall dword[tl_node_add], ebx, (0 shl 16), tree3 + stdcall dword[tl_node_add], tree3, (0 shl 16), ebx stdcall dword[tl_cur_next], tree3 .end_add: add ebx,MAX_COLOR_WORD_LEN+8 ;sizeof.TexColViv @@ -166,9 +166,9 @@ prop_button: jne @f ;копировать в буфер stdcall [tl_node_get_data],tree3 - pop esi - or esi,esi + or eax,eax jz .no_select_0 + mov esi,eax mov edi,[tedit0.buffer] mov dword[edi],MAX_COLOR_WORD_LEN mov dword[edi+4],0 ;text data @@ -199,19 +199,4 @@ editboxes_end: string1 rb MAX_COLOR_WORD_LEN align 4 -w_scr_t3: -.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 2+2+2+2+4+4+4+4+4+4 -.all_redraw dd 0 ;+80 -.ar_offset dd 1 ;+84 - +w_scr_t3 scrollbar 16,0, 3,0, 15, 100, 0,0, 0xeeeeee, 0xbbddff, 0, 1 \ No newline at end of file diff --git a/programs/other/t_edit_synt/te_syntax.asm b/programs/other/t_edit_synt/te_syntax.asm index e1302f548d..0a3aa116d2 100644 --- a/programs/other/t_edit_synt/te_syntax.asm +++ b/programs/other/t_edit_synt/te_syntax.asm @@ -38,24 +38,22 @@ macro load_image_file path,buf,size db 0 @@: ;32 - стандартный адрес по которому должен быть буфер с системным путем - copy_path .path_str,[32],file_name,0x0 + copy_path .path_str,[32],file_name,0 else - copy_path path,[32],file_name,0x0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой + copy_path path,[32],file_name,0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой end if stdcall mem.Alloc, dword size ;выделяем память для изображения mov [buf],eax - mov eax,70 ;70-я функция работа с файлами 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], [buf] + mov [run_file_70.Buffer], eax mov byte[run_file_70+20], 0 mov [run_file_70.FileName], file_name - mov ebx,run_file_70 - int 0x40 ;загружаем файл изображения + mcall 70,run_file_70 ;загружаем файл изображения cmp ebx,0xffffffff je @f ;определяем вид изображения и переводим его во временный буфер image_data @@ -92,12 +90,11 @@ 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 -@@: +;проверка на сколько удачно загузилась библиотека + cmp dword [lib0+ll_struc_size-4],0 + jz @f + mcall -1 ;exit not correct + @@: ;--------------------------------------------------------------------- stdcall dword[tl_data_init],dword tree1 @@ -126,11 +123,7 @@ mov ecx,ebx @@: cmp byte[eax],'.' ;фильтруем файлы с именами '.' и '..' je .filter - push dword tree1 - push dword 0x10000 ;1*2^16 - где 1 номер иконки с книгой - push dword eax - call dword[tl_node_add] - + stdcall dword[tl_node_add],tree1,0x10000,eax ;1*2^16 - где 1 номер иконки с книгой stdcall dword[tl_cur_next],tree1 .filter: add eax,304 @@ -330,10 +323,12 @@ button: align 4 but_OpenSyntax: - stdcall [tl_node_get_data],tree1 - pop dword [fn_col_option] - call InitColText - ret +push eax + stdcall [tl_node_get_data],tree1 + mov [fn_col_option],eax + call InitColText +pop eax + ret align 4 but_SaveSyntax: @@ -378,7 +373,7 @@ get_wnd_in_focus: ;@@: ret -hed db 'TextEditor syntax file converter 01.07.14',0 ;подпись окна +hed db 'TextEditor syntax file converter 10.11.15',0 ;подпись окна conv_tabl rb 128 ; таблица для конвертирования scan-кода в ascii-код txt122 db 'Загр. файл',0 @@ -402,10 +397,10 @@ l_libs_start: load_lib_end: +align 16 i_end: - rb 1024 - align 16 procinfo process_information + rb 1024 thread: rb 1024 stacktop: