1) update 'tree_list', functions use stdcall
2) update 5 programs for new 'tree_list' git-svn-id: svn://kolibrios.org@5911 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
@@ -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 ;максимальный уровень вложенности блоков для анализа
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 ;
|
||||
|
||||
@@ -76,10 +76,7 @@
|
||||
|
||||
<h2><a name="fun_add">tl_node_add</a></h2>
|
||||
<p>─юсрты хЄ єчхы, т яючшЎш■ єърчрээє■ ъєЁёюЁюь. ╧ЁшьхЁ фюсртыхэш єчыр:</p>
|
||||
<pre> push dword tree1
|
||||
push dword 0x10002
|
||||
push dword data_buffer
|
||||
call dword[tl_node_add]</pre>
|
||||
<pre> stdcall dword[tl_node_add], tree1,0x10002,data_buffer</pre>
|
||||
<p>уфх: <b>tree1</b> - ёЄЁєъЄєЁр tree_list;
|
||||
<b>0x10002</b> - ярЁрьхЄЁ√ єчыр (ёЄрЁ°шх срщЄ√ 0x0001 - шэфхъё шъюэъш, юЄюсЁрцрхьющ тючых єчыр; ьхэ№°шщ срщЄ 0x02 - єЁютхэ№ тыюцхэюёЄш єчыр); <b>data_buffer</b> - єърчрЄхы№ эр ф√ээ√х, фюсрты хь√х т єчхы.</p>
|
||||
|
||||
@@ -89,8 +86,7 @@
|
||||
<h2><a name="fun_get_d">tl_node_get_data</a></h2>
|
||||
<p>┴хЁхЄ єърчрЄхы№ эр фрээ√х (яюы№чютрЄхы№ёъшх ш яюфяшё№) шч єчыр яюф ъєЁёюЁюь.</p>
|
||||
<p>╧ЁшьхЁ 1:</p>
|
||||
<pre> stdcall [tl_node_get_data], tree1
|
||||
pop eax</pre>
|
||||
<pre> stdcall [tl_node_get_data], tree1</pre>
|
||||
<p>уфх: <b>tree1</b> - ёЄЁєъЄєЁр tree_list;
|
||||
<b>eax</b> - єърчрЄхы№ эр ф√ээ√х єчыр.</p>
|
||||
|
||||
@@ -98,14 +94,14 @@
|
||||
<pre> 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</pre>
|
||||
pop edi esi ecx eax</pre>
|
||||
<p>уфх: <b>tree1</b> - ёЄЁєъЄєЁр tree_list;
|
||||
<b>NODE_SIZE</b> - ЁрчьхЁ ф√ээ√ї єчыр;
|
||||
<b>node_data</b> - ъюяш эр ф√ээ√ї єчыр.</p>
|
||||
@@ -146,34 +142,25 @@ pop edi esi ecx</pre>
|
||||
|
||||
<h2><a name="fun_poi_gi">tl_node_poi_get_info</a></h2>
|
||||
<p>┴хЁхЄ тэєЄЁхээшщ єърчрЄхы№ эр ёЄЁєъЄєЁє юяшё√тр■∙є■ єчхы. ╧ЁшьхЁ шёяюы№чютрэш ЇєэъЎшш:</p>
|
||||
<pre> push dword tree1
|
||||
push dword 0
|
||||
call dword[tl_node_poi_get_info]
|
||||
pop esi</pre>
|
||||
<pre> stdcall dword[tl_node_poi_get_info], tree1, 0</pre>
|
||||
<p>уфх: <b>tree1</b> - ёЄЁєъЄєЁр tree_list;
|
||||
<b>0</b> - яючшЎш єчыр, ё ъюЄюЁюую схЁхЄё єърчрЄхы№;
|
||||
<b>esi</b> - єърчрЄхы№ эр ёЄЁєъЄєЁє юяшё√тр■∙є■ єчхы.</p>
|
||||
<b>eax</b> - єърчрЄхы№ эр ёЄЁєъЄєЁє юяшё√тр■∙є■ єчхы.</p>
|
||||
<p><b>╟рьхўрэшх.</b> ┼ёыш єчхы ё єърчрээ√ь шэфхъёюь эх эрщфхэ, т єърчрЄхых тючтЁр∙рхЄё 0.</p>
|
||||
|
||||
<h2><a name="fun_poi_gni">tl_node_poi_get_next_info</a></h2>
|
||||
<p>┴хЁхЄ єърчрЄхы№ эр ёыхфє■∙шщ ¤ыхьхэЄ т Ўхяш, схч єўхЄр юЄъЁ√Єш /чръЁ√Єш фюўхЁэшї єчыют. ╧ЁшьхЁ шёяюы№чютрэш ЇєэъЎшш:</p>
|
||||
<pre> push tree1
|
||||
push esi
|
||||
call dword[tl_node_poi_get_next_info]
|
||||
pop esi ;яхЁхїюфшь ъ ёыхфє∙хьє єчыє</pre>
|
||||
<pre> stdcall dword[tl_node_poi_get_next_info], tree1, eax</pre>
|
||||
<p>уфх: <b>tree1</b> - ёЄЁєъЄєЁр tree_list;
|
||||
<b>esi</b> - фю т√чютр ЇєэъЎшш єърчрЄхы№ эр ёЄЁєъЄєЁє юяшё√тр■∙є■ єчхы, яюёых т√чютр єърчрЄхы№ эр ёЄЁєъЄєЁє юяшё√тр■∙є■ ёыхфє∙шщ єчхы т Ўхяш.</p>
|
||||
<b>eax</b> - фю т√чютр ЇєэъЎшш єърчрЄхы№ эр ёЄЁєъЄєЁє юяшё√тр■∙є■ єчхы, яюёых т√чютр єърчрЄхы№ эр ёЄЁєъЄєЁє юяшё√тр■∙є■ ёыхфє∙шщ єчхы т Ўхяш.</p>
|
||||
<p><b>╟рьхўрэшх.</b> ┼ёыш ёыхфє∙шщ єчхы эх эрщфхэ, т єърчрЄхых тючтЁр∙рхЄё 0.</p>
|
||||
|
||||
<h2><a name="fun_poi_gd">tl_node_poi_get_data</a></h2>
|
||||
<p>┴хЁхЄ єърчрЄхы№ эр фрээ√х (яюы№чютрЄхы№ёъшх ш яюфяшё№) шч єчыр єърчрээюую т єърчрЄхых. ╧ЁшьхЁ шёяюы№чютрэш ЇєэъЎшш:</p>
|
||||
<pre> push dword tree1
|
||||
push dword esi
|
||||
call dword[tl_node_poi_get_data]
|
||||
pop eax ;яюыєўрхь фрээ√х єчыр</pre>
|
||||
<pre> stdcall dword[tl_node_poi_get_data], tree1,esi</pre>
|
||||
<p>уфх: <b>tree1</b> - ёЄЁєъЄєЁр tree_list;
|
||||
<b>esi</b> - єърчрЄхы№ эр ёЄЁєъЄєЁє юяшё√тр■∙є■ єчхы;
|
||||
<b>eax</b> - єърчрЄхы№ эр фрээ√х єчыр, юяшёррэюую т esi.</p>
|
||||
<b>eax</b> - єърчрЄхы№ эр фрээ√х єчыр, юяшёрээюую т esi.</p>
|
||||
<p>╙ърчрЄхы№, тючтЁр∙рхь√щ ЇєэъЎшхщ <i>tl_node_poi_get_data</i> рэрыюушўхэ єърчрЄхы■ тючтЁр∙рхьюьє ЇєэъЎшхщ <i>tl_node_get_data</i>. ╬Єышўшх ЇєэъЎшщ т Єюь, ўЄю <i>tl_node_poi_get_data</i> ЁрсюЄрхЄ схч чрфхщёЄтютрэш ъєЁёюЁр. ╘єэъЎш ьш <i>tl_node_poi_get_info</i>, <i>tl_node_poi_get_next_info</i> ш <i>tl_node_poi_get_data</i> ьюцэю ёўшЄ√трЄ№ шэЇюЁьрЎш■ ю єчырї ¤ыхьхэЄр, яЁш ¤Єюь эх ьхэ Єхъє∙хую яюыюцхэш ъєЁёюЁр. ╥. х. ьюцэю юЁурэшчютрЄ№ фюёЄєя ъ фрэ√ь ¤ыхьхэЄр т "Їюэютюь Ёхцшьх".</p>
|
||||
|
||||
<h2><a name="fun_sme">tl_save_mem</a></h2>
|
||||
@@ -181,12 +168,7 @@ pop edi esi ecx</pre>
|
||||
<pre> 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</pre>
|
||||
stdcall dword[tl_save_mem], tree1, 0, node_data, MEM_SIZE</pre>
|
||||
<p>уфх: <b>tree1</b> - ёЄЁєъЄєЁр tree_list;
|
||||
<b>0</b> - юяЎш ёюїЁрэхэш т эрўрыю сыюър ярь Єш (хёыш = 1, Єю фюсрты хЄ ¤ыхьхэЄ яюёых фЁєушї ёюїЁрэхээ√ї Ёрэхх);
|
||||
<b>node_data</b> - єърчрЄхы№ эр сыюъ ярь Єш;
|
||||
@@ -198,12 +180,7 @@ pop edi esi ecx</pre>
|
||||
<pre> 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</pre>
|
||||
stdcall dword[tl_load_mem], tree1, 0, node_data, MEM_SIZE</pre>
|
||||
<p>уфх: <b>tree1</b> - ёЄЁєъЄєЁр tree_list;
|
||||
<b>0</b> - шэфхъё ёўшЄ√трхьюую ¤ыхьхэЄр;
|
||||
<b>node_data</b> - єърчрЄхы№ эр сыюъ ярь Єш;
|
||||
@@ -217,11 +194,11 @@ pop edi esi ecx</pre>
|
||||
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</pre>
|
||||
|
||||
<h2><a name="version">version_tree_list</a></h2>
|
||||
@@ -230,36 +207,33 @@ pop edi esi ecx</pre>
|
||||
<h1><a name="struc_tree_list">╤ЄЁєъЄєЁр tree_list</a></h1>
|
||||
<pre>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
|
||||
}</pre>
|
||||
<p><b>info_size</b> - ъюышўхёЄтю срщЄ, ъюЄюЁюх сєфхЄ т√фхыхэю фы ърцфюую єчыр. ╫рёЄ№ ¤Єющ ярь Єш яюы№чютрЄхы№ ьюцхЄ шёяюы№чютрЄ№ фы ётюшї Ўхыхщ (ЁхуєышЁєхЄё ўхЁхч <i>info_capt_offs</i> ш <i>info_capt_len</i> ёь. Ёшё. 2) р юёЄры№эр ўрёЄ№ сєфхЄ шёяюы№чютрэр ъръ яюфяшё№ єчыр.</p>
|
||||
<p><b>info_max_count</b> - ьръёшьры№эюх ъюышўхёЄтю єчыют, ъюЄюЁ√х ьюцэю фюсртшЄ№ т ¤ыхьхэЄ.</p>
|
||||
@@ -274,7 +248,7 @@ pop edi esi ecx</pre>
|
||||
<p><b>col_txt</b> - ЎтхЄ ЄхъёЄр.</p>
|
||||
<p><b>capt_cy</b> - т√ёюЄр ёЄЁюъш фы яюфяшёш ттхЁїє ¤ыхьхэЄр, хёыш ьхэ№°х 9 яюфяшё№ эх т√тюфшЄё .</p>
|
||||
<p><b>info_capt_len</b> - фышээр ЄхъёЄр фы яюфяшёш. ┼ёыш Ёртэю 0, Єю фышээр ёўшЄрхЄё Єръ: <i>info_size - info_capt_offs</i>.</p>
|
||||
<p><b>p_scrol</b> - єърчрЄхы№ эр ёЄЁєъЄєЁє ёъЁюыышэур, ёт чрээюую ё фрээ√ь ¤ыхьхэЄюь.</p>
|
||||
<p><b>p_scroll</b> - єърчрЄхы№ эр ёЄЁєъЄєЁє ёъЁюыышэур, ёт чрээюую ё фрээ√ь ¤ыхьхэЄюь.</p>
|
||||
<p><b>on_press</b> - єърчрЄхы№ эр ЇєэъЎш■, ъюЄюЁр сєфхЄ т√чтрэр яЁш эрцрЄшш [<b>Enter</b>]. ┼ёыш єърчрЄхы№ Ёртхэ 0 Єю эшўхую эх сєфхЄ т√ч√трЄ№ё .</p>
|
||||
|
||||
<p><img src="info_size.png"></p>
|
||||
@@ -294,6 +268,6 @@ pop edi esi ecx</pre>
|
||||
<p>╤Єшы№ эх юЄюсЁрцрхЄ єЁютэш (ъръ т ListBox тёх єчы√ юфэюую єЁютэ ).</p>
|
||||
|
||||
<hr>
|
||||
<p>─юъєьхэЄрЎш юсэюты ырё№ яюёыхфэшщ Ёрч 30.09.10.</p>
|
||||
<p>─юъєьхэЄрЎш юсэюты ырё№ яюёыхфэшщ Ёрч 10.11.15.</p>
|
||||
</body>
|
||||
</html>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user