;¯®¤¨¬ ¥¬ ®¡ê¥ªâ ¢¢¥àå ¯® ᯨáªã
align 4
but_obj_move_up:
stdcall [tl_node_move_up], tree2
ret
;®¯ã᪠¥¬ ®¡ê¥ªâ ¢¨§ ¯® ᯨáªã
align 4
but_obj_move_down:
stdcall [tl_node_move_down], tree2
ret
;ª®¯¨à㥬 ®¡ê¥ªâ
align 4
but_obj_copy:
push ecx esi edi
stdcall [tl_node_get_data], tree2
pop esi
mov edi,[tree2.data_info] ;¤ ë¥ 0-£® 㧫 , ¨á¯®«ì§ã¥¬ ¤«ï ª®¯¨à®¢ ¨ï
xor ecx,ecx
mov cx,word[tree2.info_size]
cld
rep movsb
pop edi esi ecx
ret
;¢áâ ¢«ï¥¬ ®¡ê¥ªâ
align 4
but_obj_paste:
push eax ebx ecx edi
mov eax,[tree2.data_info] ;¤ ë¥ 0-£® 㧫 , ¨á¯®«ì§ã¥¬ ¤«ï ª®¯¨à®¢ ¨ï
mov ebx,dword[eax]
call find_obj_in_opt
xor ecx,ecx
mov cx,word[edi+obj_opt.img-obj_opt] ;cx - ¨¤¥ªá £« ¢®© ¨ª®ª¨ ¤®¡ ¢«ï¥¬®£® ®¡ê¥ªâ
shl ecx,16
stdcall [tl_node_add], eax, ecx, tree2 ;¤®¡ ¢«ï¥¬ ®¡ê¥ªâ
stdcall [tl_draw], tree2
pop edi ecx ebx eax
ret
;®¡®¢«¥¨¥ ®¡ê¥ªâ®¢ ¢ tree2, ¯® § ç¥¨ï¬ â¥ªá⮢ëå ¯®«¥©
;äãªæ¨ï ®¡à â ï ª ¤ ®© on_file_object_select
align 4
but_element_change:
;foc_obj - 㪠§ â¥«ì ¯®á«¥¤¨© ¢ë¡à ë© ã§¥« ¢ tree2
cmp dword[foc_obj],0
je .err_obj
pushad
;ãáâ ®¢ª ⥪á⮢ëå ᢮©áâ¢
xor ebx,ebx
mov edi,edit2
@@:
call get_obj_win_param
inc ebx
add edi,ed_struc_size
cmp edi,prop_wnd_edits_end
jl @b
;ãáâ ®¢ª áá뫪¨ ®¡ê¥ªâ ⨯
mov edx,dword[foc_obj]
mov dword[edx+u_object.typid-u_object],0 ; á«ãç © ¥á«¨ ¨ç¥£® ¥ ¢ë¡à ®
stdcall [tl_node_get_data],tree3
pop eax
cmp eax,0
je @f
mov eax,dword[eax] ;¡¥à¥¬ ¯®à浪®¢ë© ®¬¥à (¢ ¯ ¬ïâ¨) ¢ë¡à ®£® ®¡ê¥ªâ
mov dword[edx+u_object.typid-u_object],eax
@@:
;ãáâ ®¢ª «®£¨ç¥áª¨å ᢮©áâ¢
mov edi,ch1.flags
mov eax,1
xor ebx,ebx
@@:
bt dword[edi],1
jnc .opt_no_sel
or ebx,eax ; ª®¯«¥¨¥ ®â¬¥ç¥ëå ®¯æ¨©
.opt_no_sel:
shl eax,1
add edi,ch_struc_size
cmp edi,check_boxes_end
jl @b
mov dword[edx+u_object.modif-u_object],ebx
popad
.err_obj:
call draw_constructor ;®¡®¢«ï¥¬ ®ª® ª®áâàãªâ®à
;call draw_window
ret
;input:
; ebx - property column
; edi - pointer to property editbox
align 4
get_obj_win_param:
pushad
mov esi,ed_text
stdcall get_obj_text_col, [foc_obj], ebx ;edx - ᬥ饨¥ ¤«ï ⥪áâ
stdcall get_obj_text_len_col, [foc_obj], ebx ;eax - ¤«¨ ¯®«ï
cld
mov edi,edx
mov ecx,eax
rep movsb
popad
ret
;input:
; obj - pointer to object
; ind - column index
;output:
; edx + offset
; edx = 0 if not text
align 4
proc get_obj_text_col, obj:dword, ind:dword
mov edx,dword[obj]
add edx,4 ;goto text
push ebx ecx
mov ecx,dword[ind]
cmp cx,0
je .end_fun
mov ebx,dword[edx-4] ;¢ ebx ¯®¯ ¤ ¥â ª®¤ ®¡ê¥ªâ
push edi
call find_obj_in_opt ;¨é¥¬ áâàãªâãàã á ®¯æ¨ï¬¨ ®¡ê¥ªâ
add edi,obj_opt.Col-obj_opt
dec ecx
shl ecx,1 ;㬮¦ ¥¬ 2
add edi,ecx ;+ ind*2
xor ecx,ecx
mov cx,word[edi] ;ecx - ᤨ£ ¤«ï ¨áª®¬®£® ¯®«ï
add edx,ecx
cmp cx,0
jg @f
mov edx,0 ;not text
@@:
cmp cx,MAX_LEN_OBJ_TXT
jl @f
mov edx,0 ;not text
@@:
pop edi
.end_fun:
pop ecx ebx
ret
endp
;input:
; obj - 㪠§ â¥«ì ®¡ê¥ªâ
; ind - ®¬¥à ¯®«ï ¢ãâਠ®¡ê¥ªâ
;output:
; eax - ¤«¨ ⥪á⮢®£® ¯®«ï ¢ãâਠ®¡ê¥ªâ
align 4
proc get_obj_text_len_col, obj:dword, ind:dword
xor eax,eax
push ebx ecx edi
mov ecx,dword[ind]
mov eax,dword[obj]
mov ebx,dword[eax] ;¢ ebx ¯®¯ ¤ ¥â ª®¤ ®¡ê¥ªâ
xor eax,eax
call find_obj_in_opt ;¨é¥¬ áâàãªâãàã á ®¯æ¨ï¬¨ ®¡ê¥ªâ
add edi,obj_opt.Col-obj_opt
shl ecx,1 ;㬮¦ ¥¬ 2
add edi,ecx ;+ ind*2
mov ax,word[edi] ;eax - ᤨ£ ¤«ï á«¥¤ã饣® ¯®«ï
cmp ax,0
jg @f
mov eax,MAX_LEN_OBJ_TXT ;¯®á«¥¤¨¥ ¯®«ï ¤«ï 㤮¡á⢠ª®¤¨àãîâáï 0, ¥ MAX_LEN_OBJ_TXT, ¨á¯à ¢«ï¥¬ á¨âã æ¨î
@@:
cmp dword[ind],0
je .end_fun ;¤«ï ¯¥à¢®£® ¯®«ï ᤨ£ = 0, ¯®â®¬ã ¢ áâàãªâãॠ® ¥ åà ¨âáï, â.ª. ¨§¢¥á⥠§ à ¥¥
sub ax,word[edi-2] ;®â¨¬ ¥¬ ᤨ£ ¤«ï ¨áª®¬®£® ¯®«ï, ¯®«ãç ¥¬ ¤«¨ã ¯®«ï
cmp word[edi-2],0
jg @f
mov eax,0 ;¯®«¥ ¯ãá⮥, ¥ ¨á¯®«ì§ã¥âáï
@@:
cmp ax,MAX_LEN_OBJ_TXT
jl @f
mov eax,0 ;not text
@@:
.end_fun:
pop edi ecx ebx
ret
endp
align 4
proc draw_obj_icon, o_type:dword,n_col:dword, coord_y:dword
pushad
xor ebx,ebx
mov ebx,dword[o_type]
call find_obj_in_opt
add edi,obj_opt.img-obj_opt ;get index (+0)
mov ebx,[n_col]
shl ebx,1
add edi,ebx ;move index (+bh)
xor ecx,ecx
mov cx,[edi]
cmp cx,0
jge @f
jmp .end_fun ;error icon index
@@:
mov ebx,bmp_icon
imul ecx,0x300
add ebx,ecx
mov eax,7
mov ecx,0x100010 ;ecx - size:16*16
mov edx,3 ;®âáâ㯠®â «¥¢®£® ªà ï à ¬ª¨ ¤® ¨ª®ª¨
shl edx,16
add edx,[coord_y]
int 0x40
.end_fun:
popad
ret
endp
align 4
proc draw_icon, ind:dword,coord_x:dword,coord_y:dword
pushad
mov ecx,[ind]
cmp ecx,0
jl .end_fun
mov ebx,bmp_icon
imul ecx,0x300
add ebx,ecx
mov eax,7
mov ecx,0x100010 ;ecx - size:16*16
mov edx,[coord_x]
shl edx,16
add edx,[coord_y]
int 0x40
.end_fun:
popad
ret
endp
;input
; ebx = cod object
;output:
; edi = pointer to option struct
align 4
find_obj_in_opt:
push ecx
xor ecx,ecx ;find 'ebx' in options
mov edi,obj_opt
@@:
cmp ebx,dword[edi] ;find
je @f
inc ecx
cmp ecx,MAX_OBJ_TYPES
je @f ;not find
add edi,sizeof.ObjOpt
jmp @b
@@:
pop ecx
ret
obj_find_last dd 0 ;㪠§ â¥«ì ¯®á«¥¤¨© ã¤ ç® ©¤¥ë© ®¡ê¥ªâ,
;㦥 ¤«ï ãáª®à¥¨ï ¯®á«¥¤ã饣® ¯®¨áª
;¢ë室:
;eax - 㪠§ ⥫ì áâàãªâãàã ©¤¥®£® ®¡ê¥ªâ
align 4
proc find_obj_in_file, o_type:dword
push ebx esi
mov ebx,[o_type]
stdcall dword[tl_node_poi_get_info], 0,tree2
pop esi
@@:
cmp esi,0
je .find_no
stdcall dword[tl_node_poi_get_data], esi,tree2
pop eax ;¯®«ãç ¥¬ ¤ ë¥ ã§«
cmp eax,0
je .find_no
cmp dword[eax],ebx ;ᬮâਬ ®¯¨á «¨ ¨áª®¬ë© ®¡ê¥ªâ ¢ 㧫¥
je .find_yes
stdcall dword[tl_node_poi_get_next_info], esi,tree2
pop esi ;¯¥à¥å®¤¨¬ ª á«¥¤ã饬ã 㧫ã
jmp @b
.find_yes:
mov dword[obj_find_last],esi
jmp @f
.find_no:
mov dword[obj_find_last],0
xor eax,eax
@@:
pop esi ebx
ret
endp
;¢ë室:
;eax - 㪠§ ⥫ì áâàãªâãàã ©¤¥®£® ®¡ê¥ªâ
align 4
proc find_obj_in_file_next, o_type:dword
push ebx esi
cmp dword[obj_find_last],0
je .find_no
mov ebx,dword[o_type]
stdcall dword[tl_node_poi_get_next_info], dword[obj_find_last],tree2
pop esi ;¯¥à¥å®¤¨¬ ª á«¥¤ã饬ã 㧫ã
@@:
cmp esi,0
je .find_no
stdcall dword[tl_node_poi_get_data], esi,tree2
pop eax ;¯®«ãç ¥¬ ¤ ë¥ ã§«
cmp eax,0
je .find_no
cmp dword[eax],ebx ;ᬮâਬ ®¯¨á «¨ ¨áª®¬ë© ®¡ê¥ªâ ¢ 㧫¥
je .find_yes
stdcall dword[tl_node_poi_get_next_info], esi, tree2
pop esi ;¯¥à¥å®¤¨¬ ª á«¥¤ã饬ã 㧫ã
jmp @b
.find_yes:
mov dword[obj_find_last],esi
jmp @f
.find_no:
mov dword[obj_find_last],0
xor eax,eax
@@:
pop esi ebx
ret
endp
align 4
but_show_constructor:
mov byte[show_mode],0
stdcall [buf2d_draw], buf_fon
ret
align 4
but_show_code:
mov byte[show_mode],1
stdcall [ted_draw], tedit0
ret
;input:
; buf - 㪠§ ⥫ì áâபã, ç¨á«® ¤®«¦® ¡ëâì ¢ 10 ¨«¨ 16 à¨ç®¬ ¢¨¤¥
;output:
; eax - ç¨á«®
align 4
proc conv_str_to_int, buf:dword
xor eax,eax
push ebx esi
xor ebx,ebx
mov esi,[buf]
cmp word[esi],'0x'
je .load_digit_16
.load_digit_10: ;áç¨âë¢ ¨¥ 10-â¨çëå æ¨äà
mov bl,byte[esi]
cmp bl,'0'
jl @f
cmp bl,'9'
jg @f
sub bl,'0'
imul eax,10
add eax,ebx
inc esi
jmp .load_digit_10
jmp @f
.load_digit_16: ;áç¨âë¢ ¨¥ 16-à¨çëå æ¨äà
add esi,2
.cycle_16:
mov bl,byte[esi]
cmp bl,'0'
jl @f
cmp bl,'f'
jg @f
cmp bl,'9'
jle .us1
cmp bl,'A'
jl @f ;®âᥨ¢ ¥¬ ᨬ¢®«ë >'9' ¨ <'A'
.us1: ;á®áâ ¢®¥ ãá«®¢¨¥
cmp bl,'F'
jle .us2
cmp bl,'a'
jl @f ;®âᥨ¢ ¥¬ ᨬ¢®«ë >'F' ¨ <'a'
sub bl,32 ;¯¥à¥¢®¤¨¬ ᨬ¢®«ë ¢ ¢¥à娩 ॣ¨áâà, ¤«ï ã¯à®é¥¨ï ¨å ¯®á«¥¤ã饩 ®¡à ¡®âª¨
.us2: ;á®áâ ¢®¥ ãá«®¢¨¥
sub bl,'0'
cmp bl,9
jle .cor1
sub bl,7 ;convert 'A' to '10'
.cor1:
shl eax,4
add eax,ebx
inc esi
jmp .cycle_16
@@:
pop esi ebx
ret
endp