0,0 → 1,979 |
;£à®¬ ï ¡« £®¤ à®áâì 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 'mem.inc' |
include 'dll.inc' |
|
include '../../develop/libraries/box_lib/load_lib.mac' |
include '../../develop/libraries/box_lib/trunk/tree_list.mac' |
include '../../develop/libraries/box_lib/trunk/editbox.mac' |
include '../../develop/libraries/box_lib/trunk/checkbox.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 |
|
struct f70 |
func_n dd ? |
param1 dd ? |
param2 dd ? |
param3 dd ? |
param4 dd ? |
rezerv db ? |
name 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 |
@@: |
|
stdcall dll.Init,dword[lib_init] |
stdcall dll.Init,dword[lib_init_ini] |
|
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 |
push dword RGB_TILE_SIZE+300 ;300 - § ¯ áë¥ ¡ ©âë á ãç¥â®¬ § £®«®¢ª bmp ä ©« |
call mem.Alloc |
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 |
|
push dword TREE_ICON_SYS16_BMP_SIZE |
call mem.Alloc |
mov [tree_sys_icon],eax |
|
push dword TREE_ICON_NOD16_BMP_SIZE |
call mem.Alloc |
mov [tree_nod_icon],eax |
|
copy_path fn_icon1,sys_path,file_name,0x0 |
mov eax,70 ;load icon file |
mov [run_file_70.func_n], 0 |
mov [run_file_70.param1], 0 |
mov [run_file_70.param2], 0 |
mov [run_file_70.param3], TREE_ICON_SYS16_BMP_SIZE |
m2m [run_file_70.param4], [tree_sys_icon] |
mov [run_file_70.rezerv], 0 |
mov [run_file_70.name], 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.param3], TREE_ICON_NOD16_BMP_SIZE |
m2m [run_file_70.param4], [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 |
|
mcall 48,3,sc,sizeof.system_colors |
;ãáâ ®¢ª á¨á⥬ëå 梥⮢ |
edit_boxes_set_sys_color edit1,editboxes_end,sc |
check_boxes_set_sys_color ch1,checkboxes_end,sc |
|
mov byte[file_name],0 |
|
red_win: |
call draw_win |
call but_MetLoad |
|
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 |
|
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_win: |
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 |
push dword wScrMetki |
call [scrollbar_ver_draw] |
|
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 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 ecx,[sc.work_text] |
or ecx,0x80000000 |
|
mov ebx,175*65536+13 |
mov edx,txt_cache |
int 0x40 |
|
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 |
|
push dword ch2 |
call [check_box_draw] |
push dword ch1 |
call [check_box_draw] |
|
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 |
|
system_dir0 db '/sys/lib/' |
boxlib_name db 'box_lib.obj',0 |
|
system_dir1 db '/sys/lib/' |
libimg_name db 'libimg.obj',0 |
|
system_dir2 db '/sys/lib/' |
strlib_name db 'str.obj',0 |
|
system_dir3 db '/sys/lib/' |
libini_name db 'libini.obj',0 |
|
;library structures |
l_libs_start: |
lib0 l_libs boxlib_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 libimg_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 strlib_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 libini_name, sys_path, file_name, system_dir3, err_message_found_lib3, head_f_l, libini_import, err_message_import3, 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,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 |
|
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_box 5, 5, 6, 12, 0xffffd0, 0x800000, 0, ch_text1, 12,ch_flag_en |
ch2 check_box 5, 20, 6, 12, 0xffffd0, 0x800000, 0, ch_text2, 11,ch_flag_en |
checkboxes_end: |
|
ch_text1 db '¡à âì ᢥàåã' |
ch_text2 db '¡à âì ᨧã' |
|
edit1 edit_box 190, 215, 10, 0xd0ffff, 0xff, 0x80ff, 0, 0xa000, 500, ed_buffer.1, 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 |
.1: rb 502 |
.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 f70 |
|
|
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 |
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 09.02.10',0 ;¯®¤¯¨áì ®ª |
|
sc system_colors ;á¨áâ¥¬ë¥ æ¢¥â |
mouse_dd dd 0 ;㦮 ¤«ï Shift- ¢ editbox |
sys_path rb 4096 |
file_name: |
rb 4096 |
i_end: |
procinfo process_information |
rb 1024 |
stacktop: |
mem: |
|