;Ž£à®¬ ï ¡« £®¤ à®áâì Maxxxx32, Diamond, Heavyiron ;¨ ¤à㣨¬ ¯à®£à ¬¬¨áâ ¬, â ª¦¥ ;’¥¯«®¢ã €«¥ªá¥î (<Lrz> 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 include '../../proc32.inc' include '../../macros.inc' include '../../dll.inc' include '../../develop/libraries/box_lib/load_lib.mac' include '../../develop/libraries/box_lib/trunk/box_lib.mac' min_window_w equ 485 ;¬¨¨¬ «ì ï è¨à¨ ®ª min_window_h equ 325 ;¬¨¨¬ «ì ï ¢ëá®â ®ª 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 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 ini_def_cache db '/cache/sat',0 ini_ext db 'ext' .number db '?' .def db 0 ;à áè¨à¥¨¥ ¯® 㬮«ç ¨î 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 @@: copy_path ini_name,sys_path,file_name,0x0 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 ;áç¨âë¢ ¥¬ à áè¨à¥¨ï ª àâ ¨§ *.ini ä ©« 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 cmp byte[txt_tile_type_0],0 je @f stdcall dword[tl_node_add], txt_tile_type_0, 0, tree1 jmp @b @@: mov byte[ini_ext.number],'0' ;áç¨âë¢ ¥¬ ¯ à ¬¥âà ®â ext0 ª®â®àë© ¡ã¤¥â ¢ë¡à ¢ ᯨ᪥ 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 jne @f mov dword[txt_tile_type_0],'.bmp' ;¥á«¨ ¢ *.ini ä ©«¥ ¨ç¥£® ¥â ¤®¡ ¢«ï¥¬ à áè¨à¥¨¥ .bmp @@: stdcall dword[tl_node_add], txt_tile_type_0, 0, tree1 ; init bmp file 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 mem.Alloc, dword TREE_ICON_SYS16_BMP_SIZE mov [tree_sys_icon],eax 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 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 mov ebx,run_file_70 int 0x40 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] m2m dword[tree1.data_img_sys],dword[tree_sys_icon] m2m dword[tree2.data_img_sys],dword[tree_sys_icon] @@: copy_path fn_icon2,sys_path,file_name,0x0 mov eax,70 ;load icon file 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 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 align 4 red_win: call draw_window call but_MetLoad call but_Refresh ; Auto Refresh after program start align 4 still: mov eax,10 mcall 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 [edit_box_mouse], edit1 stdcall [edit_box_mouse], edit2 stdcall [tl_mouse], tree1 stdcall [tl_mouse], tree2 jmp still align 4 key: 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] 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 cmp ah,179 ;Right jne @f call CursorMoveRight @@: cmp ah,176 ;Left jne @f cmp dword[map.coord_x],0 je @f dec dword[map.coord_x] ;ᤢ¨£ ¥¬ á¥âªã â ©«®¢ ¢¯à ¢®, çâ®-¡ë ç áâì â ©«®¢ ᮢ¯ «¨ ¨ ¯à¨è«®áì ¬¥ìè¥ § £à㦠âì ®¢ëå stdcall tiles_grid_move_right, tile_00,max_tiles_count,max_tiles_cols call but_Refresh @@: cmp ah,177 ;Down jne @f call CursorMoveDown @@: cmp ah,178 ;Up jne @f cmp dword[map.coord_y],0 je @f dec dword[map.coord_y] ;ᤢ¨£ ¥¬ á¥âªã â ©«®¢ ¢¨§ stdcall tiles_grid_move_down, tile_00,max_tiles_count,max_tiles_rows call but_Refresh @@: cmp ah,45 ;- jne @f call but_ZoomM @@: cmp ah,61 ;+ jne @f call but_ZoomP @@: .end_f: pop ebx eax jmp still align 4 draw_window: 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 9,procinfo,-1 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 eax,dword[tree2.box_left] ;¤¢¨£ ¥¬ áªà®««¨£ add eax,dword[tree2.box_width] mov ebx,dword[tree2.p_scrol] mov word[ebx+2],ax 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 mov eax,8 ;ª®¯ª mov ebx,145*65536+20 mov ecx,5*65536+25 mov edx,6 mov esi,[sc.work_button] int 0x40 mov ebx,100*65536+20 mov ecx,5*65536+25 mov edx,5 int 0x40 mov ebx,170*65536+40 ;ª®¯ª ¢ë§®¢ ¤¨ «®£ OpenDial ;mov ecx,5*65536+25 mov edx,13 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 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,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,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,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 eax,4 ;à¨á®¢ ¨¥ ⥪áâ mov ebx,152*65536+13 mov ecx,[sc.work_button_text] or ecx,0x80000000 mov edx,txt_zoom_p mcall mov ebx,107*65536+13 mov edx,txt_zoom_m int 0x40 mov bx,di add bx,270-otst_panel_left shl ebx,16 mov bx,243 ;mov ebx,270*65536+243 mov edx,txt151 int 0x40 mov bx,di add bx,270-otst_panel_left shl ebx,16 mov bx,273 ;mov ebx,270*65536+273 mov edx,txt152 int 0x40 mov bx,di add bx,415-otst_panel_left shl ebx,16 mov bx,13 ;mov ebx,415*65536+13 mov edx,txt_but_refresh int 0x40 mov bx,di add bx,380-otst_panel_left shl ebx,16 mov bx,275 ;mov ebx,380*65536+275 mov edx,txt_met_up int 0x40 mov bx,di add bx,415-otst_panel_left shl ebx,16 mov bx,275 ;mov ebx,415*65536+275 mov edx,txt_met_dn int 0x40 mov bx,di add bx,450-otst_panel_left shl ebx,16 mov bx,275 ;mov ebx,450*65536+275 mov edx,txt_met_sh int 0x40 mov ebx,175*65536+13 mov edx,txt_cache int 0x40 mov ecx,[sc.work_text] or ecx,0x80000000 mov bx,di ;add bx,450-otst_panel_left shl ebx,16 mov bx,35 ;mov ebx,265*65536+35 mov edx,txt141 int 0x40 mov bx,135 ;mov ebx,265*65536+135 mov edx,txt142 int 0x40 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 mcall 12,2 popad ret head_f_i: head_f_l db '‘¨á⥬ ï ®è¨¡ª ',0 err_message_found_lib0 db '¥ ©¤¥ ¡¨¡«¨®â¥ª box_lib.obj',0 err_message_import0 db 'Žè¨¡ª ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ box_lib.obj',0 err_message_found_lib1 db '¥ ©¤¥ ¡¨¡«¨®â¥ª libimg.obj',0 err_message_import1 db 'Žè¨¡ª ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ libimg.obj',0 err_message_found_lib2 db '¥ ©¤¥ ¡¨¡«¨®â¥ª str.obj',0 err_message_import2 db 'Žè¨¡ª ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ str.obj',0 err_message_found_lib3 db '¥ ©¤¥ ¡¨¡«¨®â¥ª libini.obj',0 err_message_import3 db 'Žè¨¡ª ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ libini.obj',0 err_message_found_lib4 db '¥ ©¤¥ ¡¨¡«¨®â¥ª proc_lib.obj',0 err_message_import4 db 'Žè¨¡ª ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ proc_lib.obj',0 system_dir0 db '/sys/lib/' lib0_name db 'box_lib.obj',0 system_dir1 db '/sys/lib/' lib1_name db 'libimg.obj',0 system_dir2 db '/sys/lib/' lib2_name db 'str.obj',0 system_dir3 db '/sys/lib/' lib3_name db 'libini.obj',0 system_dir4 db '/sys/lib/' 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 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 @@: 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 .exit: 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[img_destroy], dword[data_icon] 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 mov eax,dword[data_rgb] mov ecx,dword[size] ;ecx = size imul ecx,3 @@: ;§ ⥬¥¨¥ 梥⠯¨ªá¥«¥© shr byte[eax],1 and byte[eax],0x7f inc eax loop @b mov eax,dword[data_rgb] mov ecx,dword[size] ;ecx = size shr ecx,1 @@: ;á«®¦¥¨¥ 梥⮢ ¯¨ªá¥«¥© mov ebx,dword[eax+3] ;ª®¯¨à㥬 梥â á®á¥¤¥£® ¯¨ªá¥«ï add word[eax],bx shr ebx,16 add byte[eax+2],bl add eax,6 ;=2*3 loop @b mov eax,dword[data_rgb] add eax,3 mov ebx,eax add ebx,3 mov ecx,dword[size] ;ecx = size shr ecx,1 dec ecx ;«¨è¨© ¯¨ªá¥«ì @@: ;¯®¤¦ ⨥ ¯¨ªá¥«¥© mov edx,dword[ebx] mov word[eax],dx shr edx,16 mov byte[eax+2],dl add eax,3 add ebx,6 loop @b pop edx ecx ebx eax ret endp ;input: ;data_rgb - pointer to rgb data ;size - count img pixels (size img data / 3(rgb) ) ;size_w - width img in pixels align 4 proc img_rgb_hdiv2, data_rgb:dword, size:dword, size_w:dword pushad mov eax,dword[data_rgb] ;eax = mov ecx,dword[size] ;ecx = size imul ecx,3 @@: ;§ ⥬¥¨¥ 梥⠯¨ªá¥«¥© shr byte[eax],1 and byte[eax],0x7f inc eax loop @b mov eax,dword[data_rgb] ;eax = mov edi,dword[size_w] lea esi,[edi+edi*2] ;esi = width*3(rgb) mov ebx,esi add ebx,eax mov ecx,dword[size] ;ecx = size shr ecx,1 xor edi,edi @@: ;á«®¦¥¨¥ 梥⮢ ¯¨ªá¥«¥© mov edx,dword[ebx] ;ª®¯¨à㥬 梥⠨¦¥£® ¯¨ªá¥«ï add word[eax],dx shr edx,16 add byte[eax+2],dl add eax,3 add ebx,3 inc edi cmp edi,dword[size_w] jl .old_line add eax,esi add ebx,esi xor edi,edi .old_line: loop @b mov eax,dword[data_rgb] ;eax = add eax,esi ;esi = width*3(rgb) mov ebx,esi add ebx,eax mov ecx,dword[size] ;ecx = size shr ecx,1 sub ecx,dword[size_w] ;«¨èïï áâப ¯¨ªá¥«¥© xor edi,edi @@: ;¯®¤¦ ⨥ ¯¨ªá¥«¥© mov edx,dword[ebx] ;ª®¯¨à㥬 梥⠨¦¥£® ¯¨ªá¥«ï mov word[eax],dx shr edx,16 mov byte[eax+2],dl add eax,3 add ebx,3 inc edi cmp edi,dword[size_w] jl .old_line_2 add ebx,esi xor edi,edi .old_line_2: loop @b popad ret endp ;input: ;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 endp ;äãªæ¨ï ¤«ï à áâ¢ ¨ï ¨§®¡à ¦¥¨ï ¯® ¢ëá®â¥ ¢ 2 à § ;¢ 㪠§ ⥫¥ data_rgb ¯ ¬ï⨠¤®«¦® ¡ëâì ¢ 2 à § ¡®«ìè¥ ç¥¬ size*3 ;¨ ç¥ ¯à¨ à áâ¢ ¨¨ ¡ã¤¥â ®è¨¡ª , ¢ë室 çã¦ãî ¯ ¬ïâì ;input: ;data_rgb - pointer to rgb data ;size - count img pixels (size img data / 3(rgb) ) ;size_w - width img in pixels align 4 proc img_rgb_hmul2, data_rgb:dword, size:dword, size_w:dword pushad mov esi,dword[size_w] lea esi,[esi+esi*2] ;esi = width * 3(rgb) mov eax,dword[size] lea eax,[eax+eax*2] mov edi,eax shl edi,1 add eax,dword[data_rgb] ;eax = pointer to end pixel (old image) + 1 add edi,dword[data_rgb] ;edi = pointer to end pixel (new image) + 1 mov ebx,edi sub ebx,esi .beg_line: mov ecx,dword[size_w] @@: sub eax,3 sub ebx,3 sub edi,3 mov edx,dword[eax] ;edx = pixel color mov word[ebx],dx mov word[edi],dx shr edx,16 mov byte[ebx+2],dl mov byte[edi+2],dl loop @b sub ebx,esi sub edi,esi cmp eax,dword[data_rgb] jg .beg_line popad ret endp ;input: ;data_rgb - pointer to rgb data ;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 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 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 endp ;input: ;data_rgb - pointer to rgb data ;size_w_old - width img in pixels ;size_w_new - new width img in pixels ;size_h - height img in pixels align 4 proc img_rgb_wcrop, data_rgb:dword, size_w_old:dword, size_w_new:dword, size_h:dword pushad mov eax, dword[size_w_old] lea eax, dword[eax+eax*2] ;eax = width(old) * 3(rgb) mov ebx, dword[size_w_new] lea ebx, dword[ebx+ebx*2] ;ebx = width(new) * 3(rgb) mov edx, dword[size_h] ;dec edx mov edi, dword[data_rgb] ;edi - ¯®«ãç ¥â ¤ ë¥ mov esi, edi add edi, ebx add esi, eax cld @@: dec edx ;㬥ìè ¥¬ áç¥â稪 ®áâ ¢è¨åáï áâப 1 cmp edx,0 jle @f mov ecx, ebx rep movsb ;¯¥à¥®á (ª®¯¨à®¢ ¨¥) áâப¨ ¯¨ªá¥«¥© ;stdcall mem_copy,esi,edi,ebx add esi,eax ;¯¥à¥å®¤ ®¢ãî áâà®çªã ¨§®¡à ¦¥¨ï sub esi,ebx ;add esi,eax ;add edi,ebx jmp @b @@: popad ret 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 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 endp align 4 fun_opn_dlg: ;äãªæ¨ï ¤«ï ¢ë§®¢ OpenFile ¤¨ «®£ pushad copy_path open_dialog_name,communication_area_default_path,file_name,0 mov [OpenDialog_data.type],2 mov dword[plugin_path],0 ;çâ®-¡ë ¯à¨ ®âªàë⨨ ¤¨ «®£®¢®£® ®ª ¯ãâì ¢á¥£¤ ¡à «áï ¨§ OpenDialog_data.dir_default_path stdcall [OpenDialog_Start],OpenDialog_data cmp [OpenDialog_data.status],2 je @f stdcall [str_len],dword[edit1.text],dword[edit1.max] mov [edit1.size],eax mov [edit1.pos],eax stdcall [edit_box_draw], edit1 @@: 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 ; check_boxes ch1 check_box2 (5 shl 16)+12, (5 shl 16)+12, 6, 0xffffd0, 0x800000, 0, ch_text1, ch_flag_en ch2 check_box2 (5 shl 16)+12, (20 shl 16)+12, 6, 0xffffd0, 0x800000, 0, ch_text2, ch_flag_en checkboxes_end: ch_text1 db '¡à âì ᢥàåã',0 ch_text2 db '¡à âì ᨧã',0 edit1 edit_box 190, 215, 10, 0xd0ffff, 0xff, 0x80ff, 0, 0xa000, 4090, openfile_path, mouse_dd, 0 edit2 edit_box 100, 370, 240, 0xd0ffff, 0xff, 0x80ff, 0, 0xa000, 30, ed_buffer.2, mouse_dd, 0 editboxes_end: tree1 tree_list 10,10, tl_list_box_mode+tl_key_no_edit, 16,16,\ 0x8080ff,0x0000ff,0xffffff, 265,45,90,85, 0,0,0,\ el_focus, 0,fun_new_map_type tree2 tree_list 32,300, tl_draw_par_line, 16,16,\ 0x8080ff,0x0000ff,0xffffff, 265,145,190,85, 0,12,0,\ 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 ed_buffer: ;òåêñò äëÿ edit .2: rb 32 el_focus dd tree1 tree_sys_icon dd 0 tree_nod_icon dd 0 bmp_icon dd 0 ;¯ ¬ïâì ¤«ï § £à㧪¨ ¨§®¡à ¦¥¨ï data_icon dd 0 ;¯ ¬ïâì ¤«ï ¯à¥®¡à §®¢ ¨ï ª à⨪¨ äãªæ¨ï¬¨ libimg run_file_70 FileInfoBlock txt_tile_path db 'tile path',0 rb 300 txt_tile_type dd txt_tile_type_0 ;㪠§ â¥«ì ¢ë¡à ë© â¨¯ ä ©«®¢ txt_tile_type_0 db 0 rb 10 ;--------------------------------------------------------------------- align 4 OpenDialog_data: .type dd 2 .procinfo dd procinfo ;+4 .com_area_name dd communication_area_name ;+8 .com_area dd 0 ;+12 .opendir_path dd plugin_path ;+16 .dir_default_path dd default_dir ;+20 .start_path dd file_name ;+24 ¯ãâì ª ¤¨ «®£ã ®âªàëâ¨ï ä ©«®¢ .draw_window dd draw_window ;+28 .status dd 0 ;+32 .openfile_path dd openfile_path ;+36 ¯ãâì ª ®âªàë¢ ¥¬®¬ã ä ©«ã .filename_area dd filename_area ;+40 .filter_area dd Filter .x: .x_size dw 420 ;+48 ; Window X size .x_start dw 10 ;+50 ; Window X position .y: .y_size dw 320 ;+52 ; Window y size .y_start dw 10 ;+54 ; Window Y position default_dir db '/rd/1',0 ;¤¨à¥ªâ®à¨ï ¯® 㬮«ç ¨î communication_area_name: db 'FFFFFFFF_open_dialog',0 open_dialog_name: db 'opendial',0 communication_area_default_path: db '/rd/1/File managers/',0 Filter: dd Filter.end - Filter.1 .1: db 'TXT',0 .end: db 0 align 4 map: ;ª®®à¤¨ âë ª àâë .coord_x dd 0 ;ª®®à¤¨ â x .coord_y dd 0 ;ª®®à¤¨ â y .zoom db 1 ;¬ áèâ ¡ align 4 tile_00 rb size_tile_struc * max_tiles_count ;íâ®â ª®¤ ¥ ¬®©, ® ¯à¥®¡à §ã¥â ç¨á«® ¢ áâபã ;input: ; eax = value ; edi = string buffer ;output: ; edi = align 4 tl_convert_to_str: pushad mov dword[edi+1],0;0x20202020 call .str popad ret align 4 .str: mov ecx,0x0a ;§ ¤ ¥âáï á¨á⥬ áç¨á«¥¨ï ¨§¬¥ïîâáï ॣ¨áâàë ebx,eax,ecx,edx ¢å®¤ë¥ ¯ à ¬¥âàë eax - ç¨á«® ;¯à¥à¥¢®¤ ç¨á« ¢ ASCII áâப㠢§®¤ë¥ ¤ ë¥ ecx=á¨á⥬ áç¨á«¥ï edi ¤à¥á ªã¤ § ¯¨áë¢ âì, ¡ã¤¥¬ áâபã, ¯à¨ç¥¬ ª®¥æ ¯¥à¥¬¥®© cmp eax,ecx ;áà ¢¨âì ¥á«¨ ¢ eax ¬¥ìè¥ ç¥¬ ¢ ecx â® ¯¥à¥©â¨ @@-1 â.¥. pop eax 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 ;¢¥àãâìáï ç¥ì ¨â¥à¥áë© å®¤ â.ª. ¯®ª ¢ á⥪¥ åà ¨âìáï ª®«-¢® ¢ë§®¢®¢ â® á⮫쪮 à § ¬ë ¨ ¡ã¤¥¬ ¢ë§ë¢ âìáï hed db 'Planet viewer 16.01.13',0 ;¯®¤¯¨áì ®ª sc system_colors ;á¨áâ¥¬ë¥ æ¢¥â mouse_dd dd 0 ;㦮 ¤«ï Shift- ¢ editbox i_end: rb 1024 align 16 procinfo process_information stacktop: sys_path rb 4096 file_name: rb 4096 plugin_path: rb 4096 openfile_path: rb 4096 filename_area: rb 256 mem: