diff --git a/programs/other/planet_v/planet_v.asm b/programs/other/planet_v/planet_v.asm index d6b3b5082e..0de605f08e 100644 --- a/programs/other/planet_v/planet_v.asm +++ b/programs/other/planet_v/planet_v.asm @@ -1,22 +1,14 @@ ;Огромная благодарность Maxxxx32, Diamond, Heavyiron -;и другим программистам, а также -;Теплову Алексею ( www.lrz.land.ru) +;и другим программистам, а также Теплову Алексею use32 org 0x0 db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт - dd 0x1 - dd start - dd i_end ; размер приложения - dd mem - dd stacktop - dd 0x0 - dd sys_path + dd 1,start,i_end,mem,stacktop,0,sys_path include '../../proc32.inc' include '../../macros.inc' -include '../../dll.inc' - -include '../../develop/libraries/box_lib/load_lib.mac' +include '../../KOSfuncs.inc' +include '../../load_img.inc' include '../../develop/libraries/box_lib/trunk/box_lib.mac' min_window_w equ 485 ;минимальная ширина окна @@ -26,22 +18,9 @@ otst_panel_left equ 265 include 'tile_fun.inc' include 'pl_import.inc' - @use_library_mem mem.Alloc,mem.Free,mem.ReAlloc, dll.Load - -struct FileInfoBlock - Function dd ? - Position dd ? - Flags dd ? - Count dd ? - Buffer dd ? - db ? - FileName dd ? -ends +@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc, dll.Load fn_metki db 'pl_metki.lst',0 -fn_icon1 db 'tl_sys_16.png',0 -fn_icon2 db 'tl_nod_16.bmp',0 - ini_name db 'planet_v.ini',0 ini_sec db 'Map',0 ini_k_cache db 'Cache',0 @@ -53,33 +32,30 @@ ini_ext db 'ext' align 4 start: - load_libraries l_libs_start,load_lib_end + load_libraries l_libs_start,load_lib_end -;проверка на сколько удачно загузились библиотеки - 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,lib_0 + .test_lib_open: + cmp dword [ebp+ll_struc_size-4],0 + jz @f + mcall SF_TERMINATE_PROCESS ;exit not correct @@: - mcall -1 ;exit not correct - .lib: + add ebp,ll_struc_size + cmp ebp,load_lib_end + jl .test_lib_open - 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 - mov dword[edit1.pos],eax + 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 + mov dword[edit1.pos],eax - stdcall dword[tl_data_init], tree1 - stdcall dword[tl_data_init], tree2 + stdcall dword[tl_data_init], tree1 + stdcall dword[tl_data_init], tree2 ;считываем расширения карт из *.ini файла - mov byte[ini_ext.number],'0' + mov byte[ini_ext.number],'0' @@: ;считываем параметры от ext1 до ext9 inc byte[ini_ext.number] stdcall dword[ini_get_str],file_name,ini_sec,ini_ext,txt_tile_type_0,dword[tree1.info_capt_len],ini_ext.def @@ -97,66 +73,34 @@ start: stdcall dword[tl_node_add], tree1, 0, txt_tile_type_0 ; init bmp file - stdcall mem.Alloc, dword RGB_TILE_SIZE+300 ;300 - запасные байты с учетом заголовка bmp файла - mov [bmp_icon],eax + stdcall mem.Alloc, dword RGB_TILE_SIZE+300 ;300 - запасные байты с учетом заголовка bmp файла + mov [bmp_icon],eax - stdcall array_tile_function, tile_00,max_tiles_count,tile_init - stdcall tiles_init_grid, tile_00,max_tiles_count,max_tiles_cols + stdcall array_tile_function, tile_00,max_tiles_count,tile_init + stdcall tiles_init_grid, tile_00,max_tiles_count,max_tiles_cols - stdcall mem.Alloc, dword TREE_ICON_SYS16_BMP_SIZE - mov [tree_sys_icon],eax + load_image_file 'tl_sys_16.png',tree_sys_icon + mov eax,[tree_sys_icon] + mov [tree1.data_img_sys],eax + mov [tree2.data_img_sys],eax + + load_image_file 'tl_nod_16.bmp',tree_nod_icon + mov eax,[tree_nod_icon] + mov [tree1.data_img],eax + mov [tree2.data_img],eax - stdcall mem.Alloc, dword TREE_ICON_NOD16_BMP_SIZE - mov [tree_nod_icon],eax + mcall SF_SET_EVENTS_MASK,0x27 + init_checkboxes2 ch1,checkboxes_end - 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 - mov [run_file_70.Count], TREE_ICON_SYS16_BMP_SIZE - m2m [run_file_70.Buffer], [tree_sys_icon] - mov byte[run_file_70+20], 0 - mov [run_file_70.FileName], file_name - mcall 70,run_file_70 - cmp ebx,0xffffffff - je @f - stdcall dword[img_decode], dword[tree_sys_icon],ebx,0 - mov dword[data_icon],eax - stdcall dword[img_to_rgb2], dword[data_icon],dword[tree_sys_icon] - stdcall dword[img_destroy], dword[data_icon] + mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors + ;установка системных цветов + edit_boxes_set_sys_color edit1,editboxes_end,sc + check_boxes_set_sys_color2 ch1,checkboxes_end,sc - m2m dword[tree1.data_img_sys],dword[tree_sys_icon] - m2m dword[tree2.data_img_sys],dword[tree_sys_icon] - @@: + mov byte[file_name],0 - - 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] - mcall 70,run_file_70 - cmp ebx,0xffffffff - je @f - stdcall dword[img_decode], dword[tree_nod_icon],ebx,0 - mov dword[data_icon],eax - stdcall dword[img_to_rgb2], dword[data_icon],dword[tree_nod_icon] - stdcall dword[img_destroy], dword[data_icon] - - m2m dword[tree1.data_img],dword[tree_nod_icon] - m2m dword[tree2.data_img],dword[tree_nod_icon] - @@: - - mcall 40,0x27 ;маска системных событий - init_checkboxes2 ch1,checkboxes_end - - mcall 48,3,sc,sizeof.system_colors - ;установка системных цветов - edit_boxes_set_sys_color edit1,editboxes_end,sc - check_boxes_set_sys_color2 ch1,checkboxes_end,sc - - mov byte[file_name],0 - - ; OpenDialog initialisation - stdcall [OpenDialog_Init],OpenDialog_data + ; OpenDialog initialisation + stdcall [OpenDialog_Init],OpenDialog_data align 4 red_win: @@ -166,7 +110,7 @@ red_win: align 4 still: - mcall 10 + mcall SF_WAIT_EVENT cmp al,0x1 ;изм. положение окна jz red_win @@ -187,7 +131,7 @@ still: align 4 key: push eax ebx - mcall 2 + mcall SF_GET_KEY stdcall [edit_box_key], edit1 stdcall [edit_box_key], edit2 @@ -250,107 +194,95 @@ key: align 4 draw_window: pushad - mcall 12,1 + mcall SF_REDRAW,SSF_BEGIN_DRAW - xor eax,eax - mov edx,[sc.work] - or edx,0x33000000 - mov edi,hed - mcall ,20*65536+min_window_w,20*65536+min_window_h + mov edx,[sc.work] + or edx,0x33000000 + mcall SF_CREATE_WINDOW,20*65536+min_window_w,20*65536+min_window_h,,,hed - mcall 9,procinfo,-1 + mcall SF_THREAD_INFO,procinfo,-1 - cmp dword[procinfo.box.width],min_window_w ; проверяем ширину окна - jge @f - mov dword[procinfo.box.width],min_window_w ; если окно очень узкое, увеличиваем ширину для избежания глюков - @@: + cmp dword[procinfo.box.width],min_window_w ; проверяем ширину окна + jge @f + mov dword[procinfo.box.width],min_window_w ; если окно очень узкое, увеличиваем ширину для избежания глюков + @@: - mov edi,dword[procinfo.box.width] - sub edi,min_window_w-otst_panel_left - mov dword[tree1.box_left],edi - mov dword[tree2.box_left],edi + mov edi,dword[procinfo.box.width] + sub edi,min_window_w-otst_panel_left + mov dword[tree1.box_left],edi + mov dword[tree2.box_left],edi - mov eax,dword[tree2.box_left] ;двигаем скроллинг - add eax,dword[tree2.box_width] - mov ebx,dword[tree2.p_scroll] - mov word[ebx+2],ax + mov eax,dword[tree2.box_left] ;двигаем скроллинг + add eax,dword[tree2.box_width] + mov ebx,dword[tree2.p_scroll] + mov word[ebx+2],ax - mov dword[edit2.left],edi - add dword[edit2.left],370-otst_panel_left + mov dword[edit2.left],edi + add dword[edit2.left],370-otst_panel_left - stdcall dword[tl_draw],dword tree1 - stdcall dword[tl_draw],dword tree2 - mov dword[wScrMetki.all_redraw],1 - stdcall [scrollbar_ver_draw], dword wScrMetki + stdcall dword[tl_draw],dword tree1 + stdcall dword[tl_draw],dword tree2 + mov dword[wScrMetki.all_redraw],1 + stdcall [scrollbar_ver_draw], dword wScrMetki - mov esi,[sc.work_button] - mcall 8,145*65536+20,5*65536+25,6 ;кнопка + mov esi,[sc.work_button] + mcall SF_DEFINE_BUTTON,145*65536+20,5*65536+25,6 - mcall ,100*65536+20,5*65536+25,5 + mcall ,100*65536+20,5*65536+25,5 - mov ebx,170*65536+40 ;кнопка вызова диалога OpenDial - ;mov ecx,5*65536+25 - mov edx,13 - int 0x40 + mov ebx,170*65536+40 ;кнопка вызова диалога OpenDial + mov edx,13 + int 0x40 - mov bx,di - shl ebx,16 - mov bx,100 - mov ecx,265*65536+25 - mov edx,9 - int 0x40 + mov bx,di + shl ebx,16 + mov bx,100 + mov ecx,265*65536+25 + mov edx,9 + int 0x40 - ;ebx ... - mov ecx,235*65536+25 - mov edx,8 - int 0x40 + ;ebx ... + mov ecx,235*65536+25 + mov edx,8 + int 0x40 - mov bx,di - add bx,410-otst_panel_left - shl ebx,16 - mov bx,55 - ;mov ebx,410*65536+55 - mov ecx,5*65536+25 - mov edx,7 - int 0x40 + mov bx,di + add bx,410-otst_panel_left + shl ebx,16 + mov bx,55 + mov ecx,5*65536+25 + mov edx,7 + int 0x40 - mov bx,di - add bx,440-otst_panel_left - shl ebx,16 - mov bx,30 - ;mov ebx,440*65536+30 - mov ecx,265*65536+25 - mov edx,12 - int 0x40 + mov bx,di + add bx,440-otst_panel_left + shl ebx,16 + mov bx,30 + mov ecx,265*65536+25 + mov edx,12 + int 0x40 - mov bx,di - add bx,405-otst_panel_left - shl ebx,16 - mov bx,30 - ;mov ebx,405*65536+30 - ;mov ecx,265*65536+25 - mov edx,11 - int 0x40 + mov bx,di + add bx,405-otst_panel_left + shl ebx,16 + mov bx,30 + mov edx,11 + int 0x40 - mov bx,di - add bx,370-otst_panel_left - shl ebx,16 - mov bx,30 - ;mov ebx,370*65536+30 - ;mov ecx,265*65536+25 - mov edx,10 - int 0x40 + mov bx,di + add bx,370-otst_panel_left + shl ebx,16 + mov bx,30 + mov edx,10 + int 0x40 - mov eax,4 ;рисование текста - mov ebx,152*65536+13 - mov ecx,[sc.work_button_text] - or ecx,0x80000000 - mov edx,txt_zoom_p - mcall + mov ecx,[sc.work_button_text] + or ecx,0x80000000 + mcall SF_DRAW_TEXT,152*65536+13,,txt_zoom_p - mov ebx,107*65536+13 - mov edx,txt_zoom_m - int 0x40 + mov ebx,107*65536+13 + mov edx,txt_zoom_m + int 0x40 mov bx,di add bx,270-otst_panel_left @@ -416,21 +348,20 @@ pushad mov edx,txt141 int 0x40 - mov bx,135 - ;mov ebx,265*65536+135 - mov edx,txt142 - int 0x40 + mov bx,135 + mov edx,txt142 + int 0x40 - call draw_tiles + call draw_tiles - stdcall [check_box_draw], dword ch1 - stdcall [check_box_draw], dword ch2 - stdcall [edit_box_draw], edit1 - stdcall [edit_box_draw], edit2 + stdcall [check_box_draw], ch1 + stdcall [check_box_draw], ch2 + stdcall [edit_box_draw], edit1 + stdcall [edit_box_draw], edit2 - mcall 12,2 + mcall SF_REDRAW,SSF_END_DRAW popad - ret + ret head_f_i: head_f_l db 'Системная ошибка',0 @@ -462,16 +393,21 @@ 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 + lib_0 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 + lib_1 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 + lib_2 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 + lib_3 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 + lib_4 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 ;получить код нажатой кнопки + mcall SF_GET_BUTTON cmp ah,5 jne @f call but_ZoomM @@ -529,7 +465,7 @@ button: stdcall dword[tl_data_clear], tree2 ; stdcall dword[img_destroy], dword[data_icon] - mcall -1 ;выход из программы + mcall SF_TERMINATE_PROCESS ;input: @@ -832,17 +768,17 @@ fun_opn_dlg: ; popad ret - txt_met_up db 24,0 - txt_met_dn db 25,0 - txt_met_sh db '*',0 - txt_zoom_m db '-',0 - txt_zoom_p db '+',0 - txt151 db 'Добавить метку',0 - txt152 db 'Сохранить метки',0 - txt_but_refresh db 'Обновить',0 - txt_cache db 'Cache:',0 - txt141 db 'Вид карты',0 - txt142 db 'Выбор метки',0 +txt_met_up db 24,0 +txt_met_dn db 25,0 +txt_met_sh db '*',0 +txt_zoom_m db '-',0 +txt_zoom_p db '+',0 +txt151 db 'Добавить метку',0 +txt152 db 'Сохранить метки',0 +txt_but_refresh db 'Обновить',0 +txt_cache db 'Cache:',0 +txt141 db 'Вид карты',0 +txt142 db 'Выбор метки',0 ; check_boxes ch1 check_box2 (5 shl 16)+12, (5 shl 16)+12, 6, 0xffffd0, 0x800000, 0, ch_text1, ch_flag_en @@ -867,7 +803,7 @@ align 4 wScrMetki scrollbar 16,0, 100,0, 15, 100, 30,0, 0xeeeeee, 0xbbddff, 0, 1 ed_buffer: ;ЄхъёЄ фы  edit - .2: rb 32 +.2: rb 32 el_focus dd tree1 @@ -881,10 +817,10 @@ run_file_70 FileInfoBlock txt_tile_path db 'tile path',0 - rb 300 + rb 300 txt_tile_type dd txt_tile_type_0 ;указатель на выбранный тип файлов txt_tile_type_0 db 0 - rb 10 + rb 10 ;--------------------------------------------------------------------- align 4 @@ -958,7 +894,6 @@ 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 данная команда - лишная)) @@ -970,24 +905,20 @@ align 4 @@: ret ;пока в стеке храниться кол-во вызовов то столько раз мы и будем вызываться - -hed db 'Planet viewer 09.11.15',0 ;подпись окна - -sc system_colors ;системные цвета +hed db 'Planet viewer 16.02.16',0 ;подпись окна mouse_dd dd 0 ;нужно для Shift-а в editbox + align 16 i_end: procinfo process_information + sc system_colors ;системные цвета rb 1024 +align 16 stacktop: - sys_path rb 4096 - file_name: - rb 4096 - plugin_path: - rb 4096 - openfile_path: - rb 4096 - filename_area: - rb 256 +sys_path rb 4096 +file_name rb 4096 +plugin_path rb 4096 +openfile_path rb 4096 +filename_area rb 256 mem: diff --git a/programs/other/planet_v/tile_fun.inc b/programs/other/planet_v/tile_fun.inc index c0bed31389..96bf474e3c 100644 --- a/programs/other/planet_v/tile_fun.inc +++ b/programs/other/planet_v/tile_fun.inc @@ -66,95 +66,95 @@ tile_delta_y equ byte[edi+31] ;сдв ;передвигаем координату курсора вправо align 4 CursorMoveRight: - push ebx ecx - xor ebx,ebx - xor ecx,ecx - mov cl,byte[map.zoom] - dec ecx - cmp cx,0 - jle .no_move ;при 0-м масштабе не двигаемся - @@: - rol ebx,1 - or ebx,1 ;накапливаем максимальную координату, при даном масштабе - loop @b - cmp dword[map.coord_x],ebx - jge .no_move ;если координата крайняя, не двигаемся - inc dword[map.coord_x] - ;сдвигаем сетку тайлов влево, что-бы часть тайлов совпали и пришлось меньше загружать новых - stdcall tiles_grid_move_left, tile_00,max_tiles_count,max_tiles_cols - call but_Refresh - .no_move: - pop ecx ebx - ret +push ebx ecx + xor ebx,ebx + xor ecx,ecx + mov cl,byte[map.zoom] + dec ecx + cmp cx,0 + jle .no_move ;при 0-м масштабе не двигаемся + @@: + rol ebx,1 + or ebx,1 ;накапливаем максимальную координату, при даном масштабе + loop @b + cmp dword[map.coord_x],ebx + jge .no_move ;если координата крайняя, не двигаемся + inc dword[map.coord_x] + ;сдвигаем сетку тайлов влево, что-бы часть тайлов совпали и пришлось меньше загружать новых + stdcall tiles_grid_move_left, tile_00,max_tiles_count,max_tiles_cols + call but_Refresh + .no_move: +pop ecx ebx + ret ;передвигаем координату курсора вниз align 4 CursorMoveDown: - push ebx ecx - xor ebx,ebx - xor ecx,ecx - mov cl,byte[map.zoom] - dec ecx - cmp cx,0 - jle .no_move ;при 0-м масштабе не двигаемся - @@: - rol ebx,1 - or ebx,1 ;накапливаем максимальную координату, при даном масштабе - loop @b - cmp dword[map.coord_y],ebx - jge .no_move ;если координата крайняя, не двигаемся - inc dword[map.coord_y] - ;сдвигаем сетку тайлов вверх - stdcall tiles_grid_move_up, tile_00,max_tiles_count,max_tiles_rows - call but_Refresh - .no_move: - pop ecx ebx - ret +push ebx ecx + xor ebx,ebx + xor ecx,ecx + mov cl,byte[map.zoom] + dec ecx + cmp cx,0 + jle .no_move ;при 0-м масштабе не двигаемся + @@: + rol ebx,1 + or ebx,1 ;накапливаем максимальную координату, при даном масштабе + loop @b + cmp dword[map.coord_y],ebx + jge .no_move ;если координата крайняя, не двигаемся + inc dword[map.coord_y] + ;сдвигаем сетку тайлов вверх + stdcall tiles_grid_move_up, tile_00,max_tiles_count,max_tiles_rows + call but_Refresh + .no_move: +pop ecx ebx + ret ;перемещение метки вверх, по списку align 4 but_met_up: - stdcall dword[tl_node_move_up], tree2 - ret + stdcall dword[tl_node_move_up], tree2 + ret ;перемещение метки вниз, по списку? align 4 but_met_dn: - stdcall dword[tl_node_move_down], tree2 - ret + stdcall dword[tl_node_move_down], tree2 + ret ;меняем расширение для карты align 4 fun_new_map_type: - push eax - stdcall dword[tl_node_get_data], tree1 - cmp eax,0 - je @f - mov dword[txt_tile_type],eax - @@: - pop eax - ret +push eax + stdcall dword[tl_node_get_data], tree1 + cmp eax,0 + je @f + mov dword[txt_tile_type],eax + @@: +pop eax + ret ;задаем расположение тайлов по сетке align 4 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] - mov ecx,[count] - mov edx,[cols] - @@: - mov tile_delta_x,al - mov tile_delta_y,bl - add edi,size_tile_struc - inc ax - cmp eax,edx - jl .old_lin - xor eax,eax - inc bx - .old_lin: - loop @b - ret + xor eax,eax + xor ebx,ebx + mov edi,[beg_tiles] + mov ecx,[count] + mov edx,[cols] + @@: + mov tile_delta_x,al + mov tile_delta_y,bl + add edi,size_tile_struc + inc ax + cmp eax,edx + jl .old_lin + xor eax,eax + inc bx + .old_lin: + loop @b + ret endp ;сдвигаем сетку влево, вылезшие столбцы будут перекинуты на правую сторону @@ -163,101 +163,101 @@ endp ;а значит программа не будет перечитывать их заново, чем и достигается оптимизация align 4 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] - mov ecx,[count] - mov edx,[cols] - @@: - cmp tile_delta_x,0 - jne .no_jump - add tile_delta_x,dl ;если столбец = 0, то добавляем 'cols' что-бы не вылазил влево - .no_jump: - dec tile_delta_x - add edi,size_tile_struc - loop @b - ret + xor eax,eax + xor ebx,ebx + mov edi,[beg_tiles] + mov ecx,[count] + mov edx,[cols] + @@: + cmp tile_delta_x,0 + jne .no_jump + add tile_delta_x,dl ;если столбец = 0, то добавляем 'cols' что-бы не вылазил влево + .no_jump: + dec tile_delta_x + add edi,size_tile_struc + loop @b + ret endp ;сдвигаем сетку вправо, вылезшие столбцы будут перекинуты на левую сторону ;делает тоже что и tiles_grid_move_left только двигает координаты в другую сторону align 4 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] - mov ecx,[count] - mov edx,[cols] - @@: - inc tile_delta_x - cmp tile_delta_x,dl - jl .no_jump - mov tile_delta_x,0 ;если столбец = 'cols', то ставим ему 0 что-бы не вылазил вправо - .no_jump: - add edi,size_tile_struc - loop @b - ret + xor eax,eax + xor ebx,ebx + mov edi,[beg_tiles] + mov ecx,[count] + mov edx,[cols] + @@: + inc tile_delta_x + cmp tile_delta_x,dl + jl .no_jump + mov tile_delta_x,0 ;если столбец = 'cols', то ставим ему 0 что-бы не вылазил вправо + .no_jump: + add edi,size_tile_struc + loop @b + ret endp align 4 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] - mov ecx,[count] - mov edx,[rows] - @@: - cmp tile_delta_y,0 - jne .no_jump - add tile_delta_y,dl ;если строка = 0, то добавляем 'rows' что-бы не вылазила вниз - .no_jump: - dec tile_delta_y - add edi,size_tile_struc - loop @b - ret + xor eax,eax + xor ebx,ebx + mov edi,[beg_tiles] + mov ecx,[count] + mov edx,[rows] + @@: + cmp tile_delta_y,0 + jne .no_jump + add tile_delta_y,dl ;если строка = 0, то добавляем 'rows' что-бы не вылазила вниз + .no_jump: + dec tile_delta_y + add edi,size_tile_struc + loop @b + ret endp align 4 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] - mov ecx,[count] - mov edx,[rows] - @@: - inc tile_delta_y - cmp tile_delta_y,dl - jl .no_jump - mov tile_delta_y,0 ;если строка = 'rows', то ставим ей 0 что-бы не вылазила вверх - .no_jump: - add edi,size_tile_struc - loop @b - ret + xor eax,eax + xor ebx,ebx + mov edi,[beg_tiles] + mov ecx,[count] + mov edx,[rows] + @@: + inc tile_delta_y + cmp tile_delta_y,dl + jl .no_jump + mov tile_delta_y,0 ;если строка = 'rows', то ставим ей 0 что-бы не вылазила вверх + .no_jump: + add edi,size_tile_struc + loop @b + ret endp align 4 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 - ret + mov edi,[beg_tiles] + mov ecx,[count] + @@: + stdcall [funct],edi + add edi,size_tile_struc + loop @b + ret endp align 4 draw_tiles: pushad - movzx ecx,byte[map.zoom] - mov esi,[sc.work_text] - or esi,0x40000000 - mov edi,[sc.work] - mcall 47,0x20000,, (128 shl 16)+13 + movzx ecx,byte[map.zoom] + mov esi,[sc.work_text] + or esi,0x40000000 + mov edi,[sc.work] + mcall SF_DRAW_NUMBER,0x20000,, (128 shl 16)+13 - stdcall array_tile_function, tile_00,max_tiles_count,draw_tile + stdcall array_tile_function, tile_00,max_tiles_count,draw_tile popad - ret + ret ; edi - pointer tile struct ;output: @@ -266,188 +266,181 @@ popad align 4 proc tile_clear_area, height:dword - pushad - mov eax,13 ;draw rect +pushad + mov cx,dx + shl ecx,16 + mov cx,word[height] - mov cx,dx - shl ecx,16 - mov cx,word[height] + shr edx,16 + mov bx,dx + shl ebx,16 + mov bx,TILE_LEN_W - shr edx,16 - mov bx,dx - shl ebx,16 - mov bx,TILE_LEN_W - - mov edx,0xffffd0 - int 0x40 - popad - ret + mov edx,0xffffd0 + mcall SF_DRAW_RECT +popad + ret endp -;??? +;нарисовать один tile align 4 proc draw_tile, tile:dword - pushad - mov edi,[tile] +pushad + mov edi,[tile] ;*** set base point *** - mov edx,5*65536+35 - xor eax,eax - mov al,tile_delta_y - shl ax,8 ;*256 - add edx,eax - xor eax,eax - mov al,tile_delta_x - shl eax,8+16 - add edx,eax + mov edx,5*65536+35 + movzx eax,tile_delta_y + shl ax,8 ;*256 + add edx,eax + movzx eax,tile_delta_x + shl eax,8+16 + add edx,eax ;*** set base point *** - mov ebx,dword[procinfo.box.width] ;проверяем влазит ли картинка по оси x - sub ebx,min_window_w-5 ;5 - отступ слева для 1-й картинки - shl ebx,16 - mov bx,dx ;нижняя координата пока не учитывается, потому делаем их равными - cmp edx,ebx - jg .end_f + mov ebx,dword[procinfo.box.width] ;проверяем влазит ли картинка по оси x + sub ebx,min_window_w-5 ;5 - отступ слева для 1-й картинки + shl ebx,16 + mov bx,dx ;нижняя координата пока не учитывается, потому делаем их равными + cmp edx,ebx + jg .end_f - ;проверяем влазит ли картинка по оси y - mcall 48,4 ;eax = высота скина - mov ecx,dword[procinfo.box.height] - mov ebx,edx - and ebx,0xffff ;ebx = координата 'y' для вывода тайла - add eax,ebx - add eax,5+5 ;5-рамка + ;проверяем влазит ли картинка по оси y + mcall SF_STYLE_SETTINGS,SSF_GET_SKIN_HEIGHT ;eax = высота скина + mov ecx,dword[procinfo.box.height] + mov ebx,edx + and ebx,0xffff ;ebx = координата 'y' для вывода тайла + add eax,ebx + add eax,5+5 ;5-рамка - cmp ecx,eax - jle .end_f + cmp ecx,eax + jle .end_f - sub ecx,eax - cmp ecx,TILE_LEN_H - jle @f - mov ecx,TILE_LEN_H - @@: + sub ecx,eax + cmp ecx,TILE_LEN_H + jle @f + mov ecx,TILE_LEN_H + @@: - mov eax,7 - bt tile_drobn,SCALE_0BIT_USE - jc .draw - bt tile_drobn,SCALE_1BIT_USE - jc .draw - jmp @f - .draw: - mov ebx,tile_rgb_icon - or ecx,TILE_LEN_W*65536 ;задание ширины для целой картинки - int 0x40 ;вывод на экран целой или увеличиной картинки - jmp .end_clear_tile - @@: - cmp tile_drobn,FRACT_TILE_ALL - je .end_clear_tile - stdcall tile_clear_area, ecx ;чистка области тайла - .end_clear_tile: + mov eax,SF_PUT_IMAGE + bt tile_drobn,SCALE_0BIT_USE + jc .draw + bt tile_drobn,SCALE_1BIT_USE + jc .draw + jmp @f + .draw: + mov ebx,tile_rgb_icon + or ecx,TILE_LEN_W*65536 ;задание ширины для целой картинки + int 0x40 ;вывод на экран целой или увеличиной картинки + jmp .end_clear_tile + @@: + cmp tile_drobn,FRACT_TILE_ALL + je .end_clear_tile + stdcall tile_clear_area, ecx ;чистка области тайла + .end_clear_tile: - cmp tile_drobn,0 - je .info ;если нет ни одной дробной картинки + cmp tile_drobn,0 + je .info ;если нет ни одной дробной картинки -mov si,cx ;si - высота нижней дробной картинки -sub si,TILE_LEN_H/2 ;si - высота нижней дробной картинки -cmp cx,TILE_LEN_H/2 -jl @f - mov cx,TILE_LEN_H/2 ;задание высоты для верхней дробной картинки -@@: + mov si,cx ;si - высота нижней дробной картинки + sub si,TILE_LEN_H/2 ;si - высота нижней дробной картинки + cmp cx,TILE_LEN_H/2 + jl @f + mov cx,TILE_LEN_H/2 ;задание высоты для верхней дробной картинки + @@: - and ecx,0xffff ;стирание старой ширины - or ecx,(TILE_LEN_W/2)*65536 ;задание ширины для дробной картинки - mov ebx,tile_drobn_icon - bt tile_drobn,FRACT_TILE_BIT00 - jae @f - int 0x40 - @@: - add dx,TILE_LEN_H/2 - add ebx,RGB_TILE_SIZE_1N4 - bt tile_drobn,FRACT_TILE_BIT01 - jae @f - xchg cx,si - int 0x40 - xchg cx,si - @@: + and ecx,0xffff ;стирание старой ширины + or ecx,(TILE_LEN_W/2)*65536 ;задание ширины для дробной картинки + mov ebx,tile_drobn_icon + bt tile_drobn,FRACT_TILE_BIT00 + jae @f + int 0x40 + @@: + add dx,TILE_LEN_H/2 + add ebx,RGB_TILE_SIZE_1N4 + bt tile_drobn,FRACT_TILE_BIT01 + jae @f + xchg cx,si + int 0x40 + xchg cx,si + @@: - sub dx,TILE_LEN_H/2 - ror edx,16 - add dx,TILE_LEN_W/2 - ror edx,16 - add ebx,RGB_TILE_SIZE_1N4 - bt tile_drobn,FRACT_TILE_BIT10 - jae @f - int 0x40 - @@: + sub dx,TILE_LEN_H/2 + ror edx,16 + add dx,TILE_LEN_W/2 + ror edx,16 + add ebx,RGB_TILE_SIZE_1N4 + bt tile_drobn,FRACT_TILE_BIT10 + jae @f + int 0x40 + @@: - add dx,TILE_LEN_H/2 - add ebx,RGB_TILE_SIZE_1N4 - bt tile_drobn,FRACT_TILE_BIT11 - jae @f - xchg cx,si - int 0x40 - @@: - - jmp .end_f - .info: ;вывод информации, при не удачном открытии картинок - -;;;jmp .end_f ;test - bt tile_drobn,SCALE_0BIT_USE - jc .end_f - bt tile_drobn,SCALE_1BIT_USE - jc .end_f - - mov ebx,edx - add ebx,0x30003 - mov edx,tile_rgb_icon ;при неудачном открытии в tile_rgb_icon путь к файлу -;;; mov dword[edx+RGB_TILE_SIZE_1N4],0 ;ставим нули, на случай если в строке с именем файла мусор - stdcall [str_len],tile_rgb_icon,RGB_TILE_SIZE_1N4 - mov edi,eax - - mov eax,4 ;draw text - mov ecx,0xff -;or ecx,0x80000000 - mov esi,TILE_TEXT_MAX_LEN - - @@: - cmp edi,TILE_TEXT_MAX_LEN - jg .no_line_last - mov esi,edi - int 0x40 + add dx,TILE_LEN_H/2 + add ebx,RGB_TILE_SIZE_1N4 + bt tile_drobn,FRACT_TILE_BIT11 + jae @f + xchg cx,si + int 0x40 + @@: jmp .end_f - .no_line_last: - int 0x40 - add edx,esi - sub edi,esi - add ebx,10 ;опускаемся на нижнюю строку - jmp @b - .end_f: - popad - ret + + .info: ;вывод информации, при не удачном открытии картинок + bt tile_drobn,SCALE_0BIT_USE + jc .end_f + bt tile_drobn,SCALE_1BIT_USE + jc .end_f + mov ebx,edx + add ebx,0x30003 + mov edx,tile_rgb_icon ;при неудачном открытии в tile_rgb_icon путь к файлу +;;; mov dword[edx+RGB_TILE_SIZE_1N4],0 ;ставим нули, на случай если в строке с именем файла мусор + stdcall [str_len],tile_rgb_icon,RGB_TILE_SIZE_1N4 + mov edi,eax + + mov eax,SF_DRAW_TEXT + mov ecx,0xff +;or ecx,0x80000000 + mov esi,TILE_TEXT_MAX_LEN + + @@: + cmp edi,TILE_TEXT_MAX_LEN + jg .no_line_last + mov esi,edi + int 0x40 + jmp .end_f + .no_line_last: + int 0x40 + add edx,esi + sub edi,esi + add ebx,10 ;опускаемся на нижнюю строку + jmp @b + .end_f: +popad + ret endp ;увеличение масштаба align 4 but_ZoomP: - cmp byte[map.zoom],24 - jge @f - inc byte[map.zoom] - shl dword[map.coord_x],1 - shl dword[map.coord_y],1 - call but_Refresh - @@: - ret + cmp byte[map.zoom],24 + jge @f + inc byte[map.zoom] + shl dword[map.coord_x],1 + shl dword[map.coord_y],1 + call but_Refresh + @@: + ret ;уменьшение масштаба align 4 but_ZoomM: - cmp byte[map.zoom],1 - jle @f - dec byte[map.zoom] - shr dword[map.coord_x],1 - shr dword[map.coord_y],1 - call but_Refresh - @@: - ret + cmp byte[map.zoom],1 + jle @f + dec byte[map.zoom] + shr dword[map.coord_x],1 + shr dword[map.coord_y],1 + call but_Refresh + @@: + ret ;сохранение файла с метками align 4 @@ -460,13 +453,13 @@ but_MetSave: inc eax ;для записи в файл завершающего нуля m2m [run_file_70.Buffer], [bmp_icon] - mov [run_file_70.Function], 2 + mov [run_file_70.Function], SSF_CREATE_FILE 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 + mcall SF_FILE,run_file_70 pop edi ecx ebx eax jmp still @@ -478,14 +471,14 @@ but_MetLoad: 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.Function], SSF_READ_FILE 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 + mcall SF_FILE,run_file_70 cmp ebx,0xffffffff je @f stdcall [tl_load_mem], tree2,0,[bmp_icon],TREE_ICON_SYS16_BMP_SIZE @@ -500,17 +493,17 @@ but_MetLoad: ;добавление метки align 4 but_MetAdd: - push eax - mov eax,dword[bmp_icon] - m2m dword[eax], dword[map.coord_x] - m2m dword[eax+4],dword[map.coord_y] - 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], tree2, 0, dword[bmp_icon] - stdcall dword[tl_draw], tree2 - pop eax - jmp still +push eax + mov eax,dword[bmp_icon] + m2m dword[eax], dword[map.coord_x] + m2m dword[eax+4],dword[map.coord_y] + 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], tree2, 0, dword[bmp_icon] + stdcall dword[tl_draw], tree2 +pop eax + jmp still ;переход к выбранной метке align 4 @@ -527,14 +520,14 @@ fun_goto_met: pop eax ret -;??? +;обновить карту align 4 but_Refresh: - call fun_new_map_type ;проверяем не поменялся ли тип просматриваемых файлов + call fun_new_map_type ;проверяем не поменялся ли тип просматриваемых файлов - stdcall array_tile_function, tile_00,max_tiles_count,load_tile - stdcall draw_tiles - ret + stdcall array_tile_function, tile_00,max_tiles_count,load_tile + stdcall draw_tiles + ret align 4 proc tile_init uses eax edi, tile:dword @@ -561,8 +554,7 @@ proc load_tile uses eax ebx ecx edi, tile:dword mov edi,dword[tile] ;копируем указатель на структуру тайла, что-бы работали константы stdcall mem_copy, map,edi, 9 ;копируем координаты курсора в структуру тайла - xor eax,eax - mov al,tile_delta_x + movzx eax,tile_delta_x add tile_coord_x,eax ;сдвигаем координаты тайла, относительно курсора mov al,tile_delta_y add tile_coord_y,eax @@ -686,32 +678,31 @@ proc load_tile uses eax ebx ecx edi, tile:dword .opt_drobn_false: - bt dword[ch1.flags],1 ;проверяем опцию 'брать сверху' - jae @f - cmp tile_drobn,FRACT_TILE_ALL ;если собрана вся картинка, то сверху уже не берем - je @f - ;не знаем была-ли включена опция 'брать снизу', для которой изменялись координаты - ;потому опять копируем координаты курсора в структуру тайла - stdcall mem_copy, map,edi, 9 - xor eax,eax - mov al,tile_delta_x - add tile_coord_x,eax ;сдвигаем координаты тайла, относительно курсора - mov al,tile_delta_y - add tile_coord_y,eax + bt dword[ch1.flags],1 ;проверяем опцию 'брать сверху' + jae @f + cmp tile_drobn,FRACT_TILE_ALL ;если собрана вся картинка, то сверху уже не берем + je @f + ;не знаем была-ли включена опция 'брать снизу', для которой изменялись координаты + ;потому опять копируем координаты курсора в структуру тайла + stdcall mem_copy, map,edi, 9 + movzx eax,tile_delta_x + add tile_coord_x,eax ;сдвигаем координаты тайла, относительно курсора + mov al,tile_delta_y + add tile_coord_y,eax - xor ecx,ecx - .zoom: - cmp tile_zoom,0 - je @f ;просматривается самая верхняя картинка, выходим - call get_parent_tiles ;циклический просмотр родительских тайлов - bt tile_drobn,SCALE_1BIT_USE - jc @f - cmp ecx,5 ;5 - ограничение на степень растягивания картинки - je @f - jmp .zoom - @@: + xor ecx,ecx + .zoom: + cmp tile_zoom,0 + je @f ;просматривается самая верхняя картинка, выходим + call get_parent_tiles ;циклический просмотр родительских тайлов + bt tile_drobn,SCALE_1BIT_USE + jc @f + cmp ecx,5 ;5 - ограничение на степень растягивания картинки + je @f + jmp .zoom + @@: - ret + ret endp ;output: @@ -760,14 +751,14 @@ align 4 ; proc load_new_tile, tile:dword pushad - mov [run_file_70.Function], 0 + mov [run_file_70.Function], SSF_READ_FILE mov [run_file_70.Position], 0 mov [run_file_70.Flags], 0 mov [run_file_70.Count], RGB_TILE_SIZE+300 ;+54 m2m [run_file_70.Buffer], [bmp_icon] mov byte[run_file_70+20], 0 mov [run_file_70.FileName], file_name - mcall 70,run_file_70 + mcall SF_FILE,run_file_70 mov edi,[tile] ; cmp ebx,0xffffffff ; je .no_load @@ -805,106 +796,104 @@ endp ;функция генерирует часть пути к файлу в виде: \z?\?\x?\?\y? align 4 proc get_tile_path uses eax ecx edi esi, tile:dword - mov ecx,300 - mov edi,txt_tile_path - @@: - mov byte[edi],0 ;чистим строку - inc edi - loop @b + mov ecx,300 + mov edi,txt_tile_path + @@: + mov byte[edi],0 ;чистим строку + inc edi + loop @b - mov esi,dword[tile] ;берем указатель + mov esi,[tile] ;берем указатель - mov ecx,0x80000000 ;rol 0x80000000,1 = 1 - xor eax,eax - mov al,byte[esi+8] ;+8 = zoom - .calc_coord: - rol ecx,1 ;ecx = maximum coord - dec ax - cmp ax,0 - jg .calc_coord + mov ecx,0x80000000 ;rol 0x80000000,1 = 1 + movzx eax,byte[esi+8] ;+8 = zoom + .calc_coord: + rol ecx,1 ;ecx = maximum coord + dec ax + cmp ax,0 + jg .calc_coord - mov byte[txt_tile_path],'z' - mov edi,txt_tile_path - inc edi - xor eax,eax - mov al,byte[esi+8] ;+8 = zoom - stdcall convert_int_to_str, 300 + mov byte[txt_tile_path],'z' + mov edi,txt_tile_path + inc edi + movzx eax,byte[esi+8] ;+8 = zoom + stdcall convert_int_to_str, 300 - inc edi - cmp byte[esi+8],9 ;+8 = zoom - jle @f - inc edi - @@: - mov byte[edi],'/' - inc edi + inc edi + cmp byte[esi+8],9 ;+8 = zoom + jle @f + inc edi + @@: + mov byte[edi],'/' + inc edi - mov eax,[esi] ;coord_x + mov eax,[esi] ;coord_x cmp eax,ecx jge .out_of_rang ;coord_x больше допустимого значения при заданном масштабе - shr eax,10 - stdcall convert_int_to_str, 300 + shr eax,10 + stdcall convert_int_to_str, 300 - @@: - inc edi - cmp byte[edi],'0' - jge @b - mov byte[edi],'/' - inc edi - mov byte[edi],'x' - inc edi + @@: + inc edi + cmp byte[edi],'0' + jge @b + mov byte[edi],'/' + inc edi + mov byte[edi],'x' + inc edi - mov eax,[esi] ;coord_x - stdcall convert_int_to_str, 300 + mov eax,[esi] ;coord_x + stdcall convert_int_to_str, 300 - @@: - inc edi - cmp byte[edi],'0' - jl @f - cmp byte[edi],'9' - jg @f - jmp @b - @@: + @@: + inc edi + cmp byte[edi],'0' + jl @f + cmp byte[edi],'9' + jg @f + jmp @b + @@: - ;coord y - mov byte[edi],'/' - inc edi + ;coord y + mov byte[edi],'/' + inc edi - mov eax,[esi+4] ;coord_y + mov eax,[esi+4] ;coord_y cmp eax,ecx jge .out_of_rang ;coord_y больше допустимого значения при заданном масштабе - shr eax,10 - stdcall convert_int_to_str, 300 + shr eax,10 + stdcall convert_int_to_str, 300 - @@: - inc edi - cmp byte[edi],'0' - jge @b - mov byte[edi],'/' - inc edi - mov byte[edi],'y' - inc edi + @@: + inc edi + cmp byte[edi],'0' + jge @b + mov byte[edi],'/' + inc edi + mov byte[edi],'y' + inc edi - mov eax,[esi+4] ;coord_y] - stdcall convert_int_to_str, 300 + mov eax,[esi+4] ;coord_y] + stdcall convert_int_to_str, 300 .out_of_rang: - call get_all_path - ret + call get_all_path + ret endp align 4 get_all_path: ;функция для собирания полного пути из всех кусков - mov ecx,dword[edit1.text] - add ecx,dword[edit1.size] - dec ecx + mov ecx,[edit1.text] + add ecx,[edit1.size] + dec ecx - stdcall [str_copy], file_name,4096-1, dword[edit1.text],dword[edit1.max] + stdcall [str_copy], file_name,4096-1, [edit1.text],[edit1.max] - cmp byte[ecx],'/' - je @f - stdcall [str_catchar],file_name,4096-1, dword '/' - @@: + cmp byte[ecx],'/' + je @f + stdcall [str_catchar],file_name,4096-1, dword '/' + @@: - stdcall [str_cat], file_name,4096-1, txt_tile_path,300 - stdcall [str_cat], file_name,4096-1, dword [txt_tile_type],10 -ret + stdcall [str_cat], file_name,4096-1, txt_tile_path,300 + stdcall [str_cat], file_name,4096-1, [txt_tile_type],10 + ret