2015-11-11 00:11:17 +01:00
; <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> ⥬<EFBFBD> <E2A5AC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⥪<EFBFBD> box_lib.obj
; <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> TreeList <20> <> <EFBFBD> Kolibri OS
2015-12-03 11:55:32 +01:00
; 䠩<> <20> <> <EFBFBD> <E1ABA5> <EFBFBD> <EFBFBD> ࠧ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 03.12.2015 IgorA
2015-11-11 00:11:17 +01:00
; <20> <> <20> <> <EFBFBD> <20> ਬ<EFBFBD> <E0A8AC> <EFBFBD> <EFBFBD> <EFBFBD> GPL2 <20> <> 業<EFBFBD> <E6A5AD> <EFBFBD>
2009-11-20 11:15:49 +01:00
sizeof.TreeList equ 20
2009-11-23 10:33:00 +01:00
;struct TreeList
2015-11-11 00:11:17 +01:00
; type dw ? ;+ 0 ⨯ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> 㧫<>
; lev db ? ;+ 2 <20> <EFBFBD> <E0AEA2> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
; clo db ? ;+ 3 䫠<> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> (<28> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> த<> ⥫<EFBFBD> <EFBFBD> <E1AAAE> 㧫<> )
; perv dd ? ;+ 4 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ।<EFBFBD> <E0A5A4> <EFBFBD> 饣<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
; next dd ? ;+ 8 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <E1ABA5> <EFBFBD> 饣<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
; tc dd ? ;+12 <20> ६. ᮧ<> <E1AEA7> <EFBFBD> <EFBFBD> <EFBFBD>
; td dd ? ;+16 <20> ६. 㤠<> <E3A4A0> <EFBFBD> <EFBFBD> <EFBFBD>
2009-11-23 10:33:00 +01:00
;ends
2010-01-30 23:56:22 +01:00
macro use_tree_list
{
2015-11-04 01:39:02 +01:00
2015-11-11 00:11:17 +01:00
;<3B> 뤥<EFBFBD> <EBA4A5> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ᯨ᪠ <20> <20> ᭮<EFBFBD> <E1ADAE> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ଠ 樨 (<28> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> )
2009-11-20 11:15:49 +01:00
align 4
2015-11-04 01:39:02 +01:00
proc tl_data_init uses eax ecx edi, tlist:dword
mov edi,dword[tlist]
2009-11-20 11:15:49 +01:00
2015-11-04 01:39:02 +01:00
xor ecx,ecx
mov cx,tl_info_size
imul ecx,tl_info_max_count
invoke mem.alloc,ecx
2015-11-11 00:11:17 +01:00
mov tl_data_info,eax ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> 㥬 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> 祭<EFBFBD> <E7A5AD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
mov tl_data_img,0 ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> 塞 㪠<> <E3AAA0> ⥫<EFBFBD> 'data_img'
mov tl_data_img_sys,0 ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> 塞 㪠<> <E3AAA0> ⥫<EFBFBD> 'data_img_sys'
2015-11-04 01:39:02 +01:00
mov ecx,sizeof.TreeList
imul ecx,tl_info_max_count
invoke mem.alloc,ecx
2015-11-11 00:11:17 +01:00
mov tl_data_nodes,eax ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> 㥬 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> 祭<EFBFBD> <E7A5AD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2015-11-04 01:39:02 +01:00
stdcall tl_info_clear, edi
2015-11-11 00:11:17 +01:00
;<3B> <> <EFBFBD> <EFBFBD> ன<EFBFBD> <E0AEA9> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <E0ADA5> <20> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD> <EFBFBD>
cmp tl_p_scroll,0
2015-11-04 01:39:02 +01:00
je @f
2015-11-11 00:11:17 +01:00
mov eax,tl_p_scroll
;*** 梥⮢<E6A2A5> <E2AEA2> <20> <> <EFBFBD> <EFBFBD> ன<EFBFBD> <E0AEA9> ***
2015-11-04 01:39:02 +01:00
mov ecx,tl_col_bkg
mov dword[eax+sb_offs_bckg_col],ecx
mov ecx,tl_col_zag
mov dword[eax+sb_offs_frnt_col],ecx
mov ecx,tl_col_txt
mov dword[eax+sb_offs_line_col],ecx
2015-11-11 00:11:17 +01:00
;*** <20> <> <EFBFBD> <EFBFBD> ன<EFBFBD> <E0AEA9> ࠧ<> <E0A0A7> ***
2015-11-04 01:39:02 +01:00
mov ecx,tl_box_left
add ecx,tl_box_width
mov word[eax+2],cx
mov ecx,tl_box_height
mov word[eax+4],cx
mov ecx,tl_box_top
mov word[eax+6],cx
@@:
ret
endp
2009-11-20 11:15:49 +01:00
2015-11-11 00:11:17 +01:00
;<3B> <> <EFBFBD> <EFBFBD> ⪠ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> (<28> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> )
2009-11-20 11:15:49 +01:00
align 4
2015-12-03 11:55:32 +01:00
proc tl_data_clear uses eax edi, tlist:dword
2010-05-17 18:49:58 +02:00
mov edi,dword[tlist]
cmp tl_data_img,0
je @f
2015-11-11 00:11:17 +01:00
invoke mem.free,tl_data_img ;<3B> <> <EFBFBD> ⪠ <20> <> <EFBFBD> ⥬<EFBFBD> <E2A5AC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2010-05-17 18:49:58 +02:00
@@:
cmp tl_data_img_sys,0
je @f
2015-11-11 00:11:17 +01:00
invoke mem.free,tl_data_img_sys ;<3B> <> <EFBFBD> ⪠ <20> <> <EFBFBD> ⥬<EFBFBD> <E2A5AC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2010-05-17 18:49:58 +02:00
@@:
2015-11-04 01:39:02 +01:00
invoke mem.free,tl_data_info
2010-06-09 22:06:03 +02:00
invoke mem.free,tl_data_nodes
2010-05-17 18:49:58 +02:00
ret
endp
2009-11-20 11:15:49 +01:00
2015-11-11 00:11:17 +01:00
;<3B> <> <EFBFBD> <EFBFBD> ⪠ ᯨ᪠ (<28> <> <EFBFBD> <EFBFBD> ଠ 樨)
2009-11-20 11:15:49 +01:00
align 4
2015-11-04 01:39:02 +01:00
proc tl_info_clear uses eax ecx edi, tlist:dword
mov edi,dword[tlist]
mov tl_ch_tim,0
mov tl_tim_undo,0
mov tl_cur_pos,0
mov ecx,sizeof.TreeList
imul ecx,tl_info_max_count
mov eax,tl_data_nodes
@@:
2015-11-11 00:11:17 +01:00
mov byte[eax],0 ;<3B> <> <EFBFBD> ⨬ 㧫<> 0-<2D> <>
2015-11-04 01:39:02 +01:00
inc eax
loop @b
2015-11-11 00:11:17 +01:00
mov eax,tl_data_nodes ;㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> 0-<2D> 㧥<>
mov dword[eax+8],1 ;㪠<> <E3AAA0> ⥫<EFBFBD> next <20> 0-<2D> 㧫<> <20> <> <EFBFBD> ࠢ<EFBFBD> <E0A0A2> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> 1
2009-11-20 11:15:49 +01:00
2015-11-11 00:11:17 +01:00
cmp tl_p_scroll,0 ;<3B> <> ࠡ<EFBFBD> ⪠ <20> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD> <EFBFBD>
2015-11-04 01:39:02 +01:00
je @f
2015-11-11 00:11:17 +01:00
mov eax,tl_p_scroll
2015-11-04 01:39:02 +01:00
mov dword[eax+sb_offs_position],0
call tb_scrol_resize
@@:
ret
endp
2009-11-20 11:15:49 +01:00
2015-11-11 00:11:17 +01:00
;ॠ<> <E0A5A0> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2009-11-20 11:15:49 +01:00
align 4
2015-11-04 01:39:02 +01:00
proc tl_key uses ebx ecx edi, tlist:dword
mov edi,dword[tlist]
2009-11-20 11:15:49 +01:00
2015-11-04 01:39:02 +01:00
mov ebx,tl_el_focus
cmp dword[ebx],edi
2015-11-11 00:11:17 +01:00
jne .no_focus ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> 䮪<> <E4AEAA> <EFBFBD>
2009-12-02 12:18:26 +01:00
2015-11-04 01:39:02 +01:00
push eax
2015-11-11 00:11:17 +01:00
mcall 66,2 ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ० <> <E0A5A6> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2009-11-20 11:15:49 +01:00
2015-11-04 01:39:02 +01:00
lea ecx,[tl_key_scan]
2015-11-11 00:11:17 +01:00
cmp eax,1 ;1 = ᪠<> <E1AAA0> <EFBFBD> <EFBFBD> <EFBFBD>
2015-11-04 01:39:02 +01:00
je @f
lea ecx,[tl_key_ascii]
@@:
pop eax
2009-11-20 11:15:49 +01:00
2015-11-04 01:39:02 +01:00
xor bx,bx
cmp ah,byte[ecx] ;Enter
jne @f
cmp tl_on_press,0
je @f
2015-12-03 11:55:32 +01:00
call tl_on_press
2015-11-04 01:39:02 +01:00
@@:
cmp ah,byte[ecx+1] ;Space
jne @f
stdcall tl_node_close_open, edi
@@:
cmp ah,byte[ecx+2] ;Up
jne @f
stdcall tl_cur_perv, edi
@@:
cmp ah,byte[ecx+3] ;Down
jne @f
stdcall tl_cur_next, edi
@@:
cmp ah,byte[ecx+7] ;Page Up
jne @f
stdcall tl_cur_page_up, edi
@@:
cmp ah,byte[ecx+8] ;Page Down
jne @f
stdcall tl_cur_page_down, edi
@@:
2009-11-20 11:15:49 +01:00
2015-11-04 01:39:02 +01:00
bt tl_style,0 ;tl_key_no_edit
jc .no_edit
cmp ah,byte[ecx+4] ;Left
jne @f
stdcall tl_node_lev_dec, edi
mov bx,1
@@:
cmp ah,byte[ecx+5] ;Right
jne @f
stdcall tl_node_lev_inc, edi
mov bx,1
@@:
cmp ah,byte[ecx+6] ;Delete
jne @f
stdcall tl_node_delete, edi
mov bx,1
@@:
.no_edit:
cmp bx,1
jne .no_focus
stdcall tl_draw, edi
.no_focus:
ret
endp
2009-11-20 11:15:49 +01:00
2015-11-11 00:11:17 +01:00
;ॠ<> <E0A5A0> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD>
2009-11-20 11:15:49 +01:00
align 4
2015-11-04 01:39:02 +01:00
proc tl_mouse, tlist:dword
pushad
mov edi,dword[tlist]
2009-11-20 11:15:49 +01:00
2015-11-11 00:11:17 +01:00
mcall 37,1 ;<3B> <> <EFBFBD> न<EFBFBD> <E0A4A8> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ⭮<EFBFBD> <E2ADAE> ⥫쭮 <20> <> <EFBFBD> <EFBFBD>
2009-11-20 11:15:49 +01:00
2015-11-04 01:39:02 +01:00
mov ebx,tl_box_left
shl ebx,16
2015-11-11 00:11:17 +01:00
cmp eax,ebx ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> ࠭<EFBFBD> <E0A0AD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
jl .no_in_wnd ;.test_scroll <20> <> <20> ਬ<EFBFBD> <E0A8AC> 塞
2015-11-04 01:39:02 +01:00
shr ebx,16
add ebx,tl_box_width
shl ebx,16
2015-11-11 00:11:17 +01:00
cmp eax,ebx ;<3B> ࠢ<EFBFBD> <E0A0A2> <20> ࠭<EFBFBD> <E0A0AD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
2015-11-04 01:39:02 +01:00
jg .test_scroll
mov ebx,tl_box_top
add ebx,tl_box_height
2015-11-11 00:11:17 +01:00
cmp ax,bx ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ࠭<EFBFBD> <E0A0AD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
2015-11-04 01:39:02 +01:00
jg .test_scroll
sub ebx,tl_box_height
add bx,tl_capt_cy
2015-11-11 00:11:17 +01:00
cmp ax,bx ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ࠭<EFBFBD> <E0A0AD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> + <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2015-11-04 01:39:02 +01:00
jl .test_scroll
2015-11-14 22:31:00 +01:00
push eax ebx
2015-12-03 11:55:32 +01:00
mcall 37,7 ;<3B> <> ࠡ<EFBFBD> ⪠ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
mov edx,eax
xor ecx,ecx
2015-11-14 22:31:00 +01:00
test eax,eax
jz .mouse_next
test ax,0x8000
jnz .decr
shr eax,16
test ax,0x8000
jnz .decr_1
mov cx,dx ;dx = mouse scroll data vertical
test ecx,ecx
jnz @f
shr edx,16
mov cx,dx ;dx = mouse scroll data horizontal
test ecx,ecx
jz .mouse_next
@@:
stdcall tl_cur_next, edi
dec ecx
jnz @r
jmp .mouse_next
2015-12-03 11:55:32 +01:00
;------------------------------------------------
2015-11-14 22:31:00 +01:00
.decr: ;<3B> <> <EFBFBD> ⨪<EFBFBD> <E2A8AA> 쭠<EFBFBD> <20> ப<EFBFBD> <E0AEAA> ⪠ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⥫쭠<E2A5AB>
mov bx,ax ;ax = mouse scroll data vertical
jmp @f
.decr_1: ;<3B> <> ਧ<EFBFBD> <E0A8A7> ⠫쭠<E2A0AB> <20> ப<EFBFBD> <E0AEAA> ⪠ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⥫쭠<E2A5AB>
mov bx,ax ;ax = mouse scroll data horizontal
@@:
mov ecx,0xffff
sub ecx,ebx
inc ecx
@@:
stdcall tl_cur_perv, edi
dec ecx
jnz @r
2015-12-03 11:55:32 +01:00
;------------------------------------------------
2015-11-14 22:31:00 +01:00
.mouse_next:
pop ebx eax
2015-11-04 01:39:02 +01:00
push eax ebx
mcall 37,2
bt eax,0 ;left mouse button press
pop ebx eax
jae .no_draw
mov esi,tl_el_focus
mov dword[esi],edi ;set focus
; if '+' or '-' press
mov esi,eax
shr esi,16
sub esi,tl_box_left ;esi = mouse x coord in element window
and eax,0xffff
sub ax,bx
xor edx,edx
xor ecx,ecx
mov cx,tl_img_cy
div ecx
2015-11-11 00:11:17 +01:00
cmp tl_p_scroll,0 ;<3B> <> <EFBFBD> <EFBFBD> 뢠<EFBFBD> <EBA2A0> <20> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD>
2015-11-04 01:39:02 +01:00
je @f
2015-11-11 00:11:17 +01:00
mov edx,tl_p_scroll
add eax,dword[edx+sb_offs_position] ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 塞 <20> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD>
2015-11-04 01:39:02 +01:00
@@:
mov ecx,eax
call tl_get_node_count ;eax = node count
cmp eax,ecx
jl @f
2015-11-11 00:11:17 +01:00
mov eax,ecx ;<3B> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> 襫 <20> <> <20> ।<EFBFBD> <E0A5A4> <EFBFBD> 㧫<> <E3A7AB> , <20> <> <EFBFBD> <EFBFBD> ⠭<EFBFBD> <E2A0AD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> 祭<EFBFBD> <E7A5AD> eax
2015-11-04 01:39:02 +01:00
@@:
2015-11-11 00:11:17 +01:00
cmp eax,tl_cur_pos ;<3B> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> 祭<EFBFBD> <E7A5AD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ᮢ<> <E1AEA2> <EFBFBD> <EFBFBD> <20> <20> ।<EFBFBD> <E0A5A4> <EFBFBD> 騬
je @f ;<3B> <> <20> <> <20> <> <EFBFBD> ࠥ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2015-11-04 01:39:02 +01:00
push esi
mov esi,tl_box_top
add esi,tl_box_height ;esi = coord bottom border
2015-11-11 00:11:17 +01:00
call tl_draw_null_cursor ;<3B> <> <EFBFBD> ࠥ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2015-11-04 01:39:02 +01:00
pop esi
@@:
mov tl_cur_pos,eax
; if '+' or '-' press
call tl_get_cur_node_index ;eax = node index
cmp eax,2
2015-11-11 00:11:17 +01:00
jl .no_open_close ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ⮨<EFBFBD> <20> <> <20> <> <EFBFBD> ⮬ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <> <EFBFBD> 㧫<> <E3A7AB>
2015-11-04 01:39:02 +01:00
imul eax,sizeof.TreeList
add eax,tl_data_nodes
xor bx,bx
2015-11-11 00:11:17 +01:00
mov bl,byte[eax+2] ;+2 lev <20> <> <EFBFBD> ࠭塞 <20> <EFBFBD> <E0AEA2> <EFBFBD> ⥪<> 饣<EFBFBD> 㧫<>
inc bx ;+ <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2015-11-04 01:39:02 +01:00
cmp si,tl_img_cx
2015-11-11 00:11:17 +01:00
jl .no_open_close ;<3B> <> 襩 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <> <EFBFBD> <20> <> 筮 <20> <> <EFBFBD> '+' <20> '-'
2015-11-04 01:39:02 +01:00
mov eax,esi
xor edx,edx
xor ecx,ecx
mov cx,tl_img_cx
div ecx
cmp ax,bx
jne .no_open_close
stdcall tl_node_close_open, edi
.no_open_close:
mov esi,tl_box_top
add esi,tl_box_height ;esi = coord bottom border
2015-11-11 00:11:17 +01:00
call tl_draw_cursor ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ᮢ<EFBFBD> <E1AEA2> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2015-11-04 01:39:02 +01:00
call tl_draw_caption_cur_pos
jmp .no_draw
2009-12-08 17:09:03 +01:00
;--- mouse event for children scrollbar ----------------------------------------
.test_scroll:
2015-11-11 00:11:17 +01:00
mov edx,tl_p_scroll
2015-11-04 01:39:02 +01:00
cmp edx,0
2015-11-11 00:11:17 +01:00
je .no_in_wnd ;<3B> <> <EFBFBD> 짮<EFBFBD> <ECA7AE> ⥫<EFBFBD> <20> <> ᮧ<> <E1AEA7> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <E0ADA5> <20> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD> <EFBFBD>
2015-11-04 01:39:02 +01:00
shr ebx,16
add bx,word[edx] ;+0 .size_x
shl ebx,16
2015-11-11 00:11:17 +01:00
cmp eax,ebx ;<3B> ࠢ<EFBFBD> <E0A0A2> <20> ࠭<EFBFBD> <E0A0AD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
2015-11-04 01:39:02 +01:00
jg .no_in_wnd
mov eax,dword[edx+sb_offs_max_area]
cmp eax,dword[edx+sb_offs_cur_area]
2015-11-11 00:11:17 +01:00
jbe .no_in_wnd ;<3B> <> <EFBFBD> 㧫<> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD> <EFBFBD>
2015-11-04 01:39:02 +01:00
stdcall scroll_bar_vertical.mouse, edx ;scrollbar_ver_mouse
cmp dword[edx+sb_offs_redraw],0
2015-12-03 11:55:32 +01:00
je @f
2015-11-04 01:39:02 +01:00
mov dword[edx+sb_offs_redraw],0
2015-11-11 00:11:17 +01:00
stdcall tl_draw, edi ;<3B> ந<EFBFBD> <E0AEA8> 諨 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD> <EFBFBD>
2015-11-04 01:39:02 +01:00
@@:
cmp dword[edx+sb_offs_delta2],0
2015-11-11 00:11:17 +01:00
jne .no_draw ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD> - <20> <> ᭨<> <E1ADA8> <EFBFBD> <EFBFBD> 䮪<> <E4AEAA> <20> TreeList
2009-12-08 17:09:03 +01:00
;-------------------------------------------------------------------------------
2015-11-11 00:11:17 +01:00
.no_in_wnd: ;<3B> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> - <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 䮪<> <E4AEAA> <EFBFBD> (<28> <> <EFBFBD> <20> <EFBFBD> <E1ABAE> <EFBFBD> <20> <> <EFBFBD> 䮪<> <E4AEAA> <20> <> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> )
mcall 37,2 ;<3B> <EFBFBD> <E0AEA2> 塞 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
cmp eax,0 ;<3B> <> 祣<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> eax=0
2015-11-04 01:39:02 +01:00
je .no_draw
mov ebx,tl_el_focus
cmp dword[ebx],edi
2015-11-11 00:11:17 +01:00
jne .no_draw ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> 䮪<> <E4AEAA> <EFBFBD>
2015-11-04 01:39:02 +01:00
mov dword[ebx],0 ;reset focus
mov esi,tl_box_top
add esi,tl_box_height ;esi = coord bottom border
2015-11-11 00:11:17 +01:00
call tl_draw_cursor ;<3B> <> <EFBFBD> 㥬 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 䮪<> ᮬ
2015-11-04 01:39:02 +01:00
.no_draw:
popad
ret
endp
2009-11-20 11:15:49 +01:00
2015-11-11 00:11:17 +01:00
;<3B> ⬥<EFBFBD> <E2ACA5> <20> <> <EFBFBD> <EFBFBD> ⢨<EFBFBD>
2009-11-20 11:15:49 +01:00
align 4
2015-11-04 01:39:02 +01:00
proc tl_info_undo uses eax edi, tlist:dword
mov edi,dword[tlist]
mov eax,tl_tim_undo
cmp tl_ch_tim,eax
jbe @f
inc tl_tim_undo
2015-11-11 00:11:17 +01:00
call tb_scrol_resize ;<3B> <> ࠡ<EFBFBD> ⪠ <20> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD> <EFBFBD>
2015-11-04 01:39:02 +01:00
@@:
ret
endp
2009-11-20 11:15:49 +01:00
2015-11-11 00:11:17 +01:00
;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ⢨<EFBFBD>
2009-11-20 11:15:49 +01:00
align 4
2015-11-04 01:39:02 +01:00
proc tl_info_redo uses edi, tlist:dword
mov edi,dword[tlist]
cmp tl_tim_undo,1
jl @f
dec tl_tim_undo
2015-11-11 00:11:17 +01:00
call tb_scrol_resize ;<3B> <> ࠡ<EFBFBD> ⪠ <20> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD> <EFBFBD>
2015-11-04 01:39:02 +01:00
@@:
ret
endp
2009-11-20 11:15:49 +01:00
2015-11-11 00:11:17 +01:00
;㤠<> <E3A4A0> <EFBFBD> <EFBFBD> <EFBFBD> <20> ⬥<EFBFBD> <E2ACA5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ⢨<EFBFBD>
;<3B> <> <EFBFBD> <EFBFBD> ७<EFBFBD> <E0A5AD> <EFBFBD> <20> 㭪<EFBFBD> <E3ADAA> <EFBFBD> , <20> <> <20> <> <EFBFBD> <20> <> ᯮ<EFBFBD> <E1AFAE> <EFBFBD>
2009-11-20 11:15:49 +01:00
align 4
2015-11-04 01:39:02 +01:00
tl_info_set_undo:
2015-12-03 11:55:32 +01:00
cmp tl_tim_undo,1
jl .no_work
2009-11-20 11:15:49 +01:00
2015-12-03 11:55:32 +01:00
push eax ebx ecx edx
mov edx,tl_data_nodes
mov ecx,edx
add ecx,sizeof.TreeList
call tl_move_next ;long i=node[0].next;
mov eax,tl_tim_undo
sub tl_ch_tim,eax ;ch_tim-=tim_undo;
mov eax,tl_ch_tim
cmp edx,ecx
jle @f
;if(node[i].tc>ch_tim){ // <20> ᮧ<> <E1AEA7> <EFBFBD> <EFBFBD> <EFBFBD> ᨬ<> <E1A8AC> <EFBFBD> <EFBFBD> <20> 뫮 <20> ⬥<EFBFBD> <E2ACA5> <EFBFBD> <EFBFBD>
cmp dword[edx+12],eax
jle .no_u1
mov dword[edx+12],0
mov dword[edx+16],0
mov ebx, dword[edx+4]
imul ebx,sizeof.TreeList
add ebx, tl_data_nodes ;.next
push dword[edx+8] ;node[node[i].perv].next=node[i].next;
pop dword[ebx+8]
mov ebx, dword[edx+8]
imul ebx,sizeof.TreeList
add ebx, tl_data_nodes ;.perv
push dword[edx+4] ;node[node[i].next].perv=node[i].perv;
pop dword[ebx+4]
.no_u1:
;else if(node[i].td>ch_tim) node[i].td=0; // <20> 㤠<> <E3A4A0> <EFBFBD> <EFBFBD> <EFBFBD> ᨬ<> <E1A8AC> <EFBFBD> <EFBFBD> <20> 뫮 <20> ⬥<EFBFBD> <E2ACA5> <EFBFBD> <EFBFBD>
cmp dword[edx+16],eax
jle .no_u2
mov dword[edx+16],0
.no_u2:
call tl_move_next
jmp @b
@@:
mov tl_tim_undo,0
pop edx ecx ebx eax
.no_work:
ret
2009-11-20 11:15:49 +01:00
2015-11-11 00:11:17 +01:00
;<3B> 뢮<EFBFBD> ᯨ᪠ <20> <> <20> <> ࠭
2009-11-20 11:15:49 +01:00
align 4
2015-11-04 01:39:02 +01:00
proc tl_draw, tlist:dword
2015-12-03 11:55:32 +01:00
pushad
;draw dir_list main rect
mov edi,dword[tlist]
mov ebx,tl_box_left
shl ebx,16
add ebx,tl_box_width
mov ecx,tl_box_top
shl ecx,16
mov cx,tl_capt_cy
mov edx,tl_col_zag
mcall 13 ;draw window caption
add ecx,tl_box_top
shl ecx,16
add ecx,tl_box_height
sub cx,tl_capt_cy
mov edx,tl_col_bkg
int 0x40 ;draw window client rect
cmp tl_capt_cy,9 ;9 - minimum caption height
jl @f
mov ebx,edi ;calculate cursor position
mov eax,tl_cur_pos
2009-11-20 11:15:49 +01:00
inc eax
2015-12-03 11:55:32 +01:00
lea edi,[txt_capt_cur]
add edi,7
call tl_convert_to_str
mov edi,ebx
mov eax,tl_tim_undo
lea edi,[txt_capt_otm]
add edi,7
call tl_convert_to_str
mov edi,ebx ;restore edi
mov eax,4 ;draw text captions
mov ebx,tl_box_left
shl ebx,16
add ebx,5*65536+3
add ebx,tl_box_top
mov ecx,tl_col_txt
or ecx,0x80000000
lea edx,[txt_capt_cur]
int 0x40
mov ebx,tl_box_left
shl ebx,16
add ebx,100*65536+3
add ebx,tl_box_top
lea edx,[txt_capt_otm]
int 0x40
@@:
;cycle to nodes
xor eax,eax
mov edx,tl_data_nodes
mov ecx,edx
add ecx,sizeof.TreeList
;*** <20> ய<EFBFBD> <E0AEAF> <EFBFBD> 㧫<> <E3A7AB> , <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <EFBFBD> ⠭<EFBFBD> <20> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ***
cmp tl_p_scroll,0 ;<3B> <20> <> <EFBFBD> <EFBFBD> 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD>
je .end_c1
mov esi,tl_p_scroll
cmp dword[esi+sb_offs_position],0 ;<3B> <20> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <> 室<EFBFBD> <E5AEA4>
je .end_c1
@@:
call tl_iterat_next
cmp edx,ecx
jle .end_draw
inc eax
cmp eax,dword[esi+sb_offs_position]
jl @b
.end_c1:
xor eax,eax
mov esi,tl_box_top
add esi,tl_box_height ;esi = coord bottom border
@@:
call tl_iterat_next
cmp edx,ecx
jle @f
call tl_draw_node
inc eax
jmp @b
@@:
call tl_draw_cursor
mov edi,tl_p_scroll ;<3B> <> <EFBFBD> 㥬 <20> <> <EFBFBD> <EFBFBD> ୨ <EFBFBD> <20> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD>
cmp edi,0 ;<3B> <> <EFBFBD> ⮣<> <20> <> <EFBFBD> -<2D> <> <20> <> <EFBFBD> <20> <> <20> <> <EFBFBD> 諮<EFBFBD> <E8ABAE> <20> <> ᮢ<EFBFBD> <E1AEA2> <EFBFBD> <20> <20> <> <EFBFBD> 짮<EFBFBD> <ECA7AE> ⥫<EFBFBD> <EFBFBD> <20> ணࠬ<E0AEA3> <E0A0AC>
je .end_draw ;<3B> <20> <> <EFBFBD> <20> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> 室<EFBFBD> <E5AEA4>
stdcall scroll_bar_vertical.draw, edi
.end_draw:
popad
ret
2015-11-04 01:39:02 +01:00
endp
2009-11-20 11:15:49 +01:00
2015-11-11 00:11:17 +01:00
;<3B> <> <EFBFBD> <EFBFBD> 室 <20> <> <> <E1ABA5> 騩 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 㧥<> (<28> ய<EFBFBD> ᪠<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> )
2009-11-20 11:15:49 +01:00
;input:
; ecx = pointer to 1 node struct
; edx = pointer to some node struct
; edi = pointer to 'TreeList' struct
2009-11-25 12:01:46 +01:00
;output:
; edx = pointer to next node struct
2009-11-20 11:15:49 +01:00
align 4
2015-11-04 01:39:02 +01:00
tl_iterat_next:
2015-12-03 11:55:32 +01:00
push bx
mov bl,0x7f
cmp byte[edx+3],1
jne @f
mov bl,byte[edx+2]
@@:
2009-11-20 11:15:49 +01:00
2015-12-03 11:55:32 +01:00
cmp tl_tim_undo,0
je .else
push eax
.beg0:
call tl_move_next
cmp edx,ecx
jle @f
call tl_node_not_vis ;<3B> ய<EFBFBD> <E0AEAF> <EFBFBD> 㤠<> <E3A4A0> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> ⬥<EFBFBD> <E2ACA5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
cmp al,1
je .beg0
cmp bl,byte[edx+2] ;<3B> ய<EFBFBD> <E0AEAF> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
jl .beg0
@@:
pop eax
pop bx
ret
.else:
call tl_move_next
cmp edx,ecx
jle .endif
cmp dword[edx+16],0 ;td = 'time delete' -> <20> ய<EFBFBD> <E0AEAF> <EFBFBD> 㤠<> <E3A4A0> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
jne .else
cmp bl,byte[edx+2] ;<3B> ய<EFBFBD> <E0AEAF> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
jl .else
.endif:
pop bx
ret
2009-11-20 11:15:49 +01:00
2015-11-11 00:11:17 +01:00
;<3B> <> <EFBFBD> <EFBFBD> 室 <20> <> <> <E1ABA5> 騩 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 㧥<> (<28> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⮦<> )
2009-11-20 11:15:49 +01:00
;input:
; ecx = pointer to 1 node struct
; edx = pointer to some node struct
; edi = pointer to 'TreeList' struct
2015-11-04 01:39:02 +01:00
;output:
; edx = pointer to next visible node struct
2009-11-20 11:15:49 +01:00
align 4
2015-11-04 01:39:02 +01:00
tl_iterat_next_all:
2015-12-03 11:55:32 +01:00
cmp tl_tim_undo,0
je .else
push eax
@@:
call tl_move_next
cmp edx,ecx
jle @f
call tl_node_not_vis
cmp al,1
je @b
@@:
pop eax
ret
.else:
call tl_move_next
cmp edx,ecx
jle .endif
cmp dword[edx+16],0 ;td -> time delete
jne .else
.endif:
ret
2009-11-20 11:15:49 +01:00
2015-11-11 00:11:17 +01:00
;<3B> <> <EFBFBD> <EFBFBD> 室 <20> <> <20> ।<EFBFBD> <E0A5A4> <EFBFBD> 騩 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 㧥<> (<28> ய<EFBFBD> ᪠<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> )
2009-11-20 11:15:49 +01:00
;input:
; ecx = pointer to 1 node struct
; edx = pointer to some node struct
; edi = pointer to 'TreeList' struct
align 4
2015-11-04 01:39:02 +01:00
tl_iterat_perv:
2015-12-03 11:55:32 +01:00
push eax
cmp tl_tim_undo,0
je .beg1
.beg0:
call tl_move_perv
cmp edx,ecx
jle @f
call tl_node_not_vis ;<3B> ய<EFBFBD> <E0AEAF> <EFBFBD> 㤠<> <E3A4A0> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> ⬥<EFBFBD> <E2ACA5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
cmp al,1
je .beg0
.beg1:
call tl_move_perv
cmp edx,ecx
jle @f
cmp dword[edx+16],0 ;td = 'time delete' -> <20> ய<EFBFBD> <E0AEAF> <EFBFBD> 㤠<> <E3A4A0> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
jne .beg1
@@:
call tl_move_max_clo_par
pop eax
ret
2009-12-08 17:09:03 +01:00
2015-11-11 00:11:17 +01:00
;<3B> <> 室<EFBFBD> <E5AEA4> த<> ⥫<EFBFBD> ᪨<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 㧥<> <20> <> <EFBFBD> ᨬ<EFBFBD> <E1A8AC> 쭮<EFBFBD> <ECADAE> <20> <EFBFBD> <E0AEA2>
2009-12-08 17:09:03 +01:00
;input:
; edx = pointer to some node struct
; edi = pointer to 'TreeList' struct
;output:
; edx = pointer closed parent node with maximum level
align 4
2015-11-04 01:39:02 +01:00
proc tl_move_max_clo_par uses eax ebx
2015-12-03 11:55:32 +01:00
mov eax,edx
xor ebx,ebx
.beg:
call tl_move_par
cmp byte[edx+3],1 ;த<> ⥫<EFBFBD> ᪨<EFBFBD> 㧥<> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ?
jne @f
mov eax,edx
@@:
cmp ebx,edx
je .end_f
mov ebx,edx
jmp .beg
.end_f:
mov edx,eax
ret
2015-11-04 01:39:02 +01:00
endp
2009-11-20 11:15:49 +01:00
;input:
; edx = pointer to some node struct
; edi = pointer to 'TreeList' struct
;output:
; edx = pointer to next node struct
align 4
tl_move_next:
2015-11-11 00:11:17 +01:00
mov edx,dword[edx+8]
imul edx,sizeof.TreeList
add edx,tl_data_nodes
ret
2009-11-20 11:15:49 +01:00
;input:
; edx = pointer to some node struct
; edi = pointer to 'TreeList' struct
;output:
; edx = pointer to perv node struct
align 4
tl_move_perv:
2015-11-11 00:11:17 +01:00
mov edx,dword[edx+4]
imul edx,sizeof.TreeList
add edx,tl_data_nodes
ret
2009-11-20 11:15:49 +01:00
2015-11-11 00:11:17 +01:00
;<3B> <> ।<EFBFBD> <E0A5A4> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> த<> ⥫<EFBFBD> ᪨<EFBFBD> 㧥<> , <20> ⠪<> <E2A0AA> <EFBFBD> <20> <> <EFBFBD> , <20> <> <20> <> ⠢<EFBFBD> 塞 <20> <> <EFBFBD> <20> <> <EFBFBD> 祭<EFBFBD> <E7A5AD> 㪠<> <E3AAA0> ⥫<EFBFBD>
2009-12-08 17:09:03 +01:00
;input:
; ecx =
; edx = pointer to some node struct
; edi = pointer to 'TreeList' struct
;output:
; edx = pointer to parent node struct
align 4
2015-11-04 01:39:02 +01:00
tl_move_par:
cmp byte[edx+2],0
2015-11-11 00:11:17 +01:00
je .end_f ;㧥<> 0-<2D> <> <20> <EFBFBD> <E0AEA2> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ୨ <EFBFBD>
2015-11-04 01:39:02 +01:00
push eax ebx esi
mov esi,edx ;copy node pointer (edx)
mov bl,byte[edx+2]
@@:
call tl_move_perv
cmp edx,ecx
2015-11-11 00:11:17 +01:00
jle @f ;<3B> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> 騥 㧫<> <20> <> த<> ⥫<EFBFBD> ᪨<EFBFBD>
call tl_node_not_vis ;<3B> ய<EFBFBD> <E0AEAF> <EFBFBD> 㤠<> <E3A4A0> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> ⬥<EFBFBD> <E2ACA5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2015-11-04 01:39:02 +01:00
cmp al,1
je @b
cmp byte[edx+2],bl
2015-11-11 00:11:17 +01:00
jl .end_0 ;㤠筮 <20> <> 諨 த<> ⥫<EFBFBD> ᪨<EFBFBD> 㧥<>
2015-11-04 01:39:02 +01:00
jmp @b
@@:
mov esi,ebx ;restore node pointer
.end_0:
pop esi ebx eax
.end_f:
ret
2009-12-08 17:09:03 +01:00
2015-11-11 00:11:17 +01:00
;<3B> <EFBFBD> <E0AEA2> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> 㪠<> <E3AAA0> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 㧥<> <20> <20> <> <EFBFBD> ⮬: <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , 㤠<> <E3A4A0> <EFBFBD> <EFBFBD> <EFBFBD> , <20> ⬥<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ⢨<EFBFBD>
2009-11-20 11:15:49 +01:00
;input:
; edx = pointer to symbol struct
; edi = pointer to 'TreeList' struct
;output:
; al = 1 if sumbol not visible
2009-11-23 10:33:00 +01:00
; (node[i].td+tim_Undo<=ch_tim && node[i].td) || (node[i].tc>ch_tim-tim_Undo)
2009-11-20 11:15:49 +01:00
align 4
2015-11-04 01:39:02 +01:00
tl_node_not_vis:
2015-12-03 11:55:32 +01:00
cmp dword[edx+16],0
je @f
mov eax,dword[edx+16] ;eax=node[i].td
add eax,tl_tim_undo
cmp eax,tl_ch_tim
jg @f
mov al,1
ret
@@:
mov eax,tl_ch_tim
sub eax,tl_tim_undo
cmp dword[edx+12],eax ;tc -> time create
jle @f
mov al,1
ret
@@:
xor al,al
ret
2009-11-20 11:15:49 +01:00
2015-11-11 00:11:17 +01:00
;<3B> <> <EFBFBD> 㥬 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> ࠭<EFBFBD>
2009-11-20 11:15:49 +01:00
;input:
; edi = pointer to TreeInfo struct
; esi = coord bottom border
align 4
2015-11-04 01:39:02 +01:00
proc tl_draw_cursor uses eax ebx ecx edx esi
call tl_get_display_cur_pos ;eax = cursor pos in screen
cmp eax,0
2015-11-11 00:11:17 +01:00
jl .end_f ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> 室<EFBFBD> <E5AEA4> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> , <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ப<EFBFBD> <E0AEAA> 祭<EFBFBD> <E7A5AD> <EFBFBD> <20> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2015-11-04 01:39:02 +01:00
2015-11-11 00:11:17 +01:00
cmp tl_data_img_sys,0 ;ᬮ<> ਬ <20> <> <EFBFBD> <EFBFBD> <20> <> 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> <EFBFBD> ⨭<EFBFBD> <E2A8AD> <20> <> <EFBFBD> ⥬<EFBFBD> <E2A5AC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2015-11-04 01:39:02 +01:00
jne @f
mov ebx,tl_box_left
shl ebx,16
mov bx,tl_img_cx
xor ecx,ecx
mov cx,tl_img_cy
imul ecx,eax
add ecx,tl_box_top
add cx,tl_capt_cy
;crop image if on the border
2015-11-11 00:11:17 +01:00
cmp esi,ecx ;<3B> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD>
2015-11-04 01:39:02 +01:00
jl .end_f
sub esi,ecx
shl ecx,16
mov cx,tl_img_cy
cmp si,tl_img_cy
jge .crop0
2015-11-11 00:11:17 +01:00
mov cx,si ;<3B> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 筮 (<28> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ࠭<EFBFBD> <E0A0AD> <EFBFBD> )
2015-11-04 01:39:02 +01:00
.crop0:
2009-11-20 11:15:49 +01:00
2015-11-04 01:39:02 +01:00
mov edx,tl_col_txt
2015-11-11 00:11:17 +01:00
mcall 13 ;<3B> <> <EFBFBD> 㥬 <20> <> <EFBFBD> <EFBFBD> ⮩ <20> <> אַ㣮<EFACAE> 쭨<EFBFBD> , <20> .<2E> . <20> <> <EFBFBD> <20> <> <EFBFBD> ⥬<EFBFBD> <E2A5AC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2015-11-04 01:39:02 +01:00
jmp .end_f
@@:
mov ebx,tl_data_img_sys
imul ax,tl_img_cy
mov edx,tl_box_left
shl edx,16
mov dx,ax
add edx,tl_box_top
add dx,tl_capt_cy
2015-11-11 00:11:17 +01:00
mov ecx,tl_el_focus ;<3B> <EFBFBD> <E0AEA2> 塞 <20> 䮪<> <E4AEAA> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD>
2015-11-04 01:39:02 +01:00
cmp dword[ecx],edi
je .focus
2015-11-11 00:11:17 +01:00
;<3B> <20> <> <20> 䮪<> <E4AEAA> <EFBFBD> ᤢ<> <E1A4A2> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> न<EFBFBD> <E0A4A8> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> ⨢<EFBFBD> <E2A8A2> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2015-11-04 01:39:02 +01:00
xor eax,eax
xor ecx,ecx
mov cx,tl_img_cx
mov ax,tl_img_cy
imul eax,ecx
imul eax,4*3 ;4=icon index 3=rgb
add ebx,eax
.focus:
mov cx,tl_img_cx
shl ecx,16
mov cx,tl_img_cy
2009-11-20 11:15:49 +01:00
2015-11-04 01:39:02 +01:00
;crop image if on the border
2015-11-11 00:11:17 +01:00
cmp si,dx ;<3B> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD>
2015-11-04 01:39:02 +01:00
jl .end_f
2009-11-20 11:15:49 +01:00
2015-11-04 01:39:02 +01:00
sub si,dx
cmp si,tl_img_cy
jge .crop1
2015-11-11 00:11:17 +01:00
mov cx,si ;<3B> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 筮 (<28> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ࠭<EFBFBD> <E0A0AD> <EFBFBD> )
2015-11-04 01:39:02 +01:00
.crop1:
2009-11-20 11:15:49 +01:00
2015-11-11 00:11:17 +01:00
mcall 7 ;<3B> <> <EFBFBD> 㥬 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2015-11-04 01:39:02 +01:00
.end_f:
ret
endp
2009-11-20 11:15:49 +01:00
2015-11-11 00:11:17 +01:00
;<3B> <> <EFBFBD> ࠥ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> ࠭<EFBFBD>
2009-11-20 11:15:49 +01:00
;input:
; edi = pointer to TreeInfo struct
; esi = coord bottom border
align 4
2015-11-04 01:39:02 +01:00
proc tl_draw_null_cursor uses eax ebx ecx edx esi
2015-12-03 11:55:32 +01:00
call tl_get_display_cur_pos ;eax = cursor pos in screen
cmp eax,0
jl .end_f ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> 室<EFBFBD> <E5AEA4> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> , <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ப<EFBFBD> <E0AEAA> 祭<EFBFBD> <E7A5AD> <EFBFBD> <20> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
mov ebx,tl_box_left
shl ebx,16
mov bx,tl_img_cx
xor ecx,ecx
mov cx,tl_img_cy
imul ecx,eax
add ecx,tl_box_top
add cx,tl_capt_cy
;crop image if on the border
cmp esi,ecx ;<3B> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD>
jl .end_f
sub esi,ecx
shl ecx,16
mov cx,tl_img_cy
cmp si,tl_img_cy
jge @f
mov cx,si ;<3B> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 筮 (<28> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ࠭<EFBFBD> <E0A0AD> <EFBFBD> )
@@:
mcall 13,,,tl_col_bkg ;<3B> <> <EFBFBD> 㥬 <20> <> <EFBFBD> <EFBFBD> ⮩ <20> <> אַ㣮<EFACAE> 쭨<EFBFBD> <20> 䮭<> <E4AEAD> <EFBFBD> <EFBFBD> 梥⮬
.end_f:
ret
2015-11-04 01:39:02 +01:00
endp
2009-11-20 11:15:49 +01:00
2015-11-11 00:11:17 +01:00
;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , <20> ⭮<EFBFBD> <E2ADAE> ⥫쭮 <20> <> ࠭<EFBFBD>
2009-11-20 11:15:49 +01:00
;input:
; edi = pointer to TreeInfo struct
;output:
; eax = index
align 4
2015-11-04 01:39:02 +01:00
tl_get_display_cur_pos:
2015-12-03 11:55:32 +01:00
mov eax,tl_cur_pos
cmp tl_p_scroll,0
je @f
push ebx
mov ebx,tl_p_scroll
mov ebx,dword[ebx+sb_offs_position]
sub eax,ebx ;<3B> ⭨<EFBFBD> <E2ADA8> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD> <EFBFBD>
pop ebx
@@:
ret
2009-11-20 11:15:49 +01:00
2015-11-11 00:11:17 +01:00
;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 㧥<> <20> : <20> <> <EFBFBD> ⨭<EFBFBD> <E2A8AD> <EFBFBD> , <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> /<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> ﬨ <20> த<> <E0AEA4> . 㧫<>
2009-11-20 11:15:49 +01:00
;input:
2015-12-03 11:55:32 +01:00
; eax = node position (0, ..., max_nodes-scroll_pos) <20> <> <20> <> tl_box_height/tl_img_cy
2009-11-20 11:15:49 +01:00
; edx = pointer to some node struct
2010-02-09 15:54:59 +01:00
; edi = pointer to 'TreeList' struct
2009-11-20 11:15:49 +01:00
; esi = coord of bottom border
align 4
2015-11-04 01:39:02 +01:00
proc tl_draw_node uses eax ebx ecx edx esi
2015-11-11 00:11:17 +01:00
mov ebx,1 ;1 - <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2010-12-08 19:45:24 +01:00
bt tl_style,2 ;tl_list_box_mode
jc @f
2015-11-11 00:11:17 +01:00
inc ebx ;+1 - <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> +,-
add bl,byte[edx+2] ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 塞 <20> <EFBFBD> <E0AEA2> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> 㯥 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2010-12-08 19:45:24 +01:00
@@:
imul bx,tl_img_cx
add ebx,tl_box_left
shl ebx,16
mov bx,tl_img_cx
xor ecx,ecx
mov cx,tl_img_cy
imul ecx,eax
add cx,tl_capt_cy
2015-12-03 11:55:32 +01:00
jc .end_draw ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 㧫<> <E3A7AB> , <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ९<EFBFBD> <E0A5AF> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> न<EFBFBD> <E0A4A8> <EFBFBD> <EFBFBD> cx
add ecx,tl_box_top
2010-12-08 19:45:24 +01:00
;crop image if on the border
2015-11-11 00:11:17 +01:00
cmp esi,ecx ;<3B> 㧥<> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD>
2010-12-08 19:45:24 +01:00
jl .end_draw
sub esi,ecx
shl ecx,16
mov cx,tl_img_cy
cmp si,tl_img_cy
jge @f
2015-11-11 00:11:17 +01:00
mov cx,si ;<3B> 㧥<> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 筮 (<28> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ࠭<EFBFBD> <E0A0AD> <EFBFBD> )
jmp .crop ;<3B> ய<EFBFBD> ᪠<EFBFBD> <E1AAA0> <20> <> ᮢ<EFBFBD> <E1AEA2> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ॥ <20> ᥣ<EFBFBD> ⮦<> <20> 뫥<EFBFBD> <EBABA5> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ࠭<EFBFBD> <E0A0AD> <EFBFBD>
2010-12-08 19:45:24 +01:00
@@:
call tl_draw_node_caption
.crop:
mov esi,ecx ;save ecx
2009-11-20 11:15:49 +01:00
2010-12-08 19:45:24 +01:00
cmp tl_data_img,0
jne .draw_img_n
push edx
mov edx,tl_col_txt
2015-11-04 01:39:02 +01:00
mcall 13 ;draw node rect
2015-12-03 11:55:32 +01:00
pop edx
2010-12-08 19:45:24 +01:00
jmp @f
.draw_img_n:
push ebx edx esi
xor esi,esi
mov si,word[edx] ;get icon type
mov edx,ebx
ror ecx,16
mov dx,cx
mov cx,bx
ror ecx,16
mov ebx,3 ;rgb = 3 bytes
imul bx,tl_img_cx
imul bx,tl_img_cy
imul ebx,esi ;esi = icon index
add ebx,tl_data_img
2015-11-04 01:39:02 +01:00
mcall 7 ;draw node icon '-'
2010-12-08 19:45:24 +01:00
pop esi edx ebx
@@:
2009-11-20 11:15:49 +01:00
2010-12-08 19:45:24 +01:00
mov al,byte[edx+2] ;draw minus '-'
mov ecx,tl_data_nodes
add ecx,sizeof.TreeList
mov ah,10 ;get icon index '+' or '-' ?
cmp byte[edx+3],1
jne .close
dec ah
.close:
2015-11-11 00:11:17 +01:00
call tl_draw_node_icon_opn_clo ;<3B> <> ᮢ<EFBFBD> <E1AEA2> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ⮣<EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ⮣<EFBFBD> 㧫<>
2010-12-08 19:45:24 +01:00
bt tl_style,1
jae .end_draw
2015-11-11 00:11:17 +01:00
call tl_draw_node_icon_par_lin ;<3B> <> ᮢ<EFBFBD> <E1AEA2> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> த<> ⥫<EFBFBD> <EFBFBD> <E1AAAE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
call tl_draw_node_icon_par_lin_up ;<3B> <> ᮢ<EFBFBD> <E1AEA2> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ⨪<EFBFBD> <E2A8AA> 쭮<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> த<> ⥫<EFBFBD> <EFBFBD> <E1AAAE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2010-12-08 19:45:24 +01:00
.end_draw:
ret
2015-11-04 01:39:02 +01:00
endp
2009-11-20 11:15:49 +01:00
2015-11-11 00:11:17 +01:00
;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ⮣<EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ⮣<EFBFBD> 㧫<> (<28> <> <EFBFBD> 筮 + <20> <> <EFBFBD> -)
2009-11-20 11:15:49 +01:00
;input:
2015-11-11 00:11:17 +01:00
; al = <20> <EFBFBD> <E0AEA2> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2009-11-20 11:15:49 +01:00
; ecx = pointer to 1 node struct
2010-02-09 15:54:59 +01:00
; edx = pointer to some node struct
2009-11-20 11:15:49 +01:00
;...
align 4
2015-11-04 01:39:02 +01:00
proc tl_draw_node_icon_opn_clo uses eax ebx ecx edx esi
2015-12-03 11:55:32 +01:00
inc al
call tl_iterat_next_all ;get next visible item
cmp edx,ecx
jle @f
mov ecx,esi ;load ecx
cmp al,byte[edx+2]
jne @f
ror ebx,16
sub bx,tl_img_cx
ror ebx,16
cmp tl_data_img_sys,0
jne .draw_img_s
mcall 13,,,tl_col_txt ;draw minus rect, if not system icons
jmp @f
.draw_img_s:
mov ecx,esi ;load ecx
mov edx,ebx
ror ecx,16
mov dx,cx
mov cx,bx
ror ecx,16
mov ebx,3 ;rgb = 3 bytes
imul bx,tl_img_cx
imul bx,tl_img_cy
shr eax,8
and eax,0xff
imul ebx,eax ;eax = icon index
add ebx,tl_data_img_sys
mcall 7 ;draw minus icon '-'
@@:
ret
2015-11-04 01:39:02 +01:00
endp
2009-11-20 11:15:49 +01:00
2015-11-11 00:11:17 +01:00
;<3B> <> ᮢ<EFBFBD> <E1AEA2> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> த<> ⥫<EFBFBD> <EFBFBD> <E1AAAE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2009-11-20 11:15:49 +01:00
;input:
2015-11-11 00:11:17 +01:00
; al = <20> <EFBFBD> <E0AEA2> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2010-02-09 15:54:59 +01:00
; ecx = pointer to 1 node struct
; edx = pointer to some node struct
2009-11-20 11:15:49 +01:00
;...
align 4
2015-11-04 01:39:02 +01:00
tl_draw_node_icon_par_lin:
2015-12-03 11:55:32 +01:00
cmp byte[edx+3],1
je .close
push eax ebx ecx edx esi
cmp al,0
je @f
call tl_iterat_next_all ;get next visible item
cmp edx,ecx
jle .line3 ;if end of list
cmp al,byte[edx+2]
jne .line3 ;jg ???
mov eax,3 ;line in middle element
jmp .line2
.line3:
mov eax,6 ;line in end element
.line2:
mov ecx,esi ;load ecx
ror ebx,16
sub bx,tl_img_cx
ror ebx,16
cmp tl_data_img_sys,0
jne .draw_img_s
mcall 13,,,tl_col_txt ;draw minus rect, if not system icons
jmp @f
.draw_img_s:
mov edx,ebx
ror ecx,16
mov dx,cx
mov cx,bx
ror ecx,16
mov ebx,3 ;rgb = 3 bytes
imul bx,tl_img_cx
imul bx,tl_img_cy
imul ebx,eax ;eax = icon index
add ebx,tl_data_img_sys
mcall 7 ;draw line icon
@@:
pop esi edx ecx ebx eax
.close:
ret
2009-11-20 11:15:49 +01:00
2009-12-08 17:09:03 +01:00
2010-02-09 15:54:59 +01:00
;input:
2015-11-11 00:11:17 +01:00
; al = <20> <EFBFBD> <E0AEA2> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2015-12-03 11:55:32 +01:00
; ebx = (node.left shl 16) + tl_img_cx
2010-02-09 15:54:59 +01:00
; ecx = pointer to 1 node struct
; edx = pointer to some node struct
; edi = pointer to 'TreeList' struct
2009-12-08 17:09:03 +01:00
align 4
2015-12-03 11:55:32 +01:00
proc tl_draw_node_icon_par_lin_up uses eax ebx ecx edx esi
cmp tl_data_img_sys,0 ;if not image
je @f
cmp al,0
je @f
xor esi,esi ;<3B> si <20> 㤥<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 뢠<EFBFBD> <EBA2A0> <20> <> <EFBFBD> -<2D> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , <20> 㦭<EFBFBD> <E3A6AD> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ᮢ<EFBFBD> <E1AEA2> <20> <> <EFBFBD> <EFBFBD> <EFBFBD>
2015-11-11 00:11:17 +01:00
;--- 横<> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <E1ABA5> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⢠ <20> <> <EFBFBD> ⨪<EFBFBD> <E2A8AA> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ---
2015-12-03 11:55:32 +01:00
.cycle0:
call tl_iterat_perv ;get perv visible item
cmp edx,ecx
jle .cycle1 ;if begin of list
cmp byte[edx+2],al
jle .cycle0end ;<3B> <EFBFBD> <E0AEA2> <EFBFBD> <20> <> <EFBFBD> 孥<EFBFBD> <E5ADA5> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> ॡ<EFBFBD> <E0A5A1> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ᮢ<EFBFBD> <E1AEA2>
inc si
jmp .cycle0
.cycle0end:
cmp si,0 ;si = <20> <> <EFBFBD> -<2D> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> 㦭<EFBFBD> <20> <> <EFBFBD> <EFBFBD> ᮢ<EFBFBD> <E1AEA2> <EFBFBD> ᢥ<> <E1A2A5> <EFBFBD>
je @f
shl esi,16
pop ecx ;esi->ecx
push ecx ;save esi
ror ebx,16
sub bx,tl_img_cx
ror ebx,16
mov edx,ebx
ror ecx,16
mov dx,cx
mov cx,bx
ror ecx,16
mov cx,tl_img_cy ;restore size y (if crop)
mov ebx,3 ;rgb = 3 bytes
imul bx,tl_img_cx
imul bx,tl_img_cy
add ebx,tl_data_img_sys
add esi,tl_box_top
add si,tl_capt_cy ;si = <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ࠭<EFBFBD> <E0A0AD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
mov eax,7
2015-11-11 00:11:17 +01:00
;--- 横<> <20> <> <EFBFBD> <20> <> ᮢ<EFBFBD> <E1AEA2> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ⨪<EFBFBD> <E2A8AA> 쭮<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ---
2015-12-03 11:55:32 +01:00
.cycle1:
sub dx,tl_img_cy ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> न<EFBFBD> <E0A4A8> <EFBFBD> <EFBFBD> y <20> <> <EFBFBD> <EFBFBD> <EFBFBD>
cmp dx,si
jl @f
cmp esi,0x10000
jl @f
int 0x40 ;draw line icon
sub esi,0x10000 ;㬥<> <E3ACA5> 蠥<EFBFBD> <20> <> <EFBFBD> <EFBFBD> 稪 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
jmp .cycle1
@@:
ret
endp
2009-12-08 17:09:03 +01:00
2009-11-20 11:15:49 +01:00
;input:
; edi = pointer to TreeInfo struct
;output:
; eax = rows
align 4
tl_get_rows_count:
2015-12-03 11:55:32 +01:00
push ecx edx
mov eax,tl_box_height
sub ax,tl_capt_cy
xor ecx,ecx
mov cx,tl_img_cy
xor edx,edx
div ecx
pop edx ecx
ret
2009-11-20 11:15:49 +01:00
;input:
; eax = node position
2015-11-11 00:11:17 +01:00
; ebx = [<5B> <> <EFBFBD> न<EFBFBD> <E0A4A8> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> x]*65536 + [img_cx]
; ecx = [<5B> <> <EFBFBD> न<EFBFBD> <E0A4A8> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> y]*65536 + [img_cy]
2009-11-20 11:15:49 +01:00
; edx = pointer to some node struct
; edi = pointer to TreeInfo struct
align 4
2015-12-03 11:55:32 +01:00
proc tl_draw_node_caption uses ebx ecx edx esi
xor esi,esi
mov si,tl_info_size
cmp si,tl_info_capt_offs
jle @f ;if caption size <= 0
push eax
call tl_get_node_index ;eax = node index
imul esi,eax
pop eax
add si,tl_info_capt_offs
add esi,tl_data_info
mov edx,esi
shr ebx,16
add bx,tl_img_cx ;ᤢ<> <E1A4A2> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> ਧ<EFBFBD> <E0A8A7> ⠫<EFBFBD> --->
add bx,3 ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
;bx = coord.x
call tl_strlen ;eax = strlen
call tl_get_draw_text_len
mov cx,bx
ror ecx,16
mov ebx,ecx
add bx,tl_img_cy ;<3B> <> ࠢ<EFBFBD> <E0A0A2> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ࠭<EFBFBD> <E0A0AD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
sub bx,9 ;<3B> ⭨<EFBFBD> <E2ADA8> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⥪<> <E2A5AA> <EFBFBD>
mov ecx,tl_col_txt
and ecx,0xffffff
mcall 4
@@:
ret
endp
2009-11-20 11:15:49 +01:00
;input:
; eax = strlen
; ebx = text coord x
;output:
; esi = text len
align 4
2015-12-03 11:55:32 +01:00
proc tl_get_draw_text_len uses eax ecx edx
mov esi,eax ;<3B> <> ६ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ப<EFBFBD>
mov eax,tl_box_left
add eax,tl_box_width
cmp eax,ebx
jle .text_null ;<3B> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> <20> <> ࠭<EFBFBD> <E0A0AD>
sub eax,ebx
xor edx,edx
mov ecx,6 ;<3B> <> ਭ<EFBFBD> <20> <> <EFBFBD> ⥬<EFBFBD> <E2A5AC> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
div ecx ;ᬮ<> ਬ <> 쪮 ᨬ<> <E1A8AC> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> ࠭<EFBFBD>
cmp esi,eax
jl @f
mov esi,eax ;<3B> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⥪<> <E2A5AA> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , 祬 <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> ப<EFBFBD>
jmp @f
.text_null:
xor esi,esi
@@:
ret
endp
2009-11-20 11:15:49 +01:00
;input:
; esi = pointer to string
;output:
; eax = strlen
align 4
tl_strlen:
2015-12-03 11:55:32 +01:00
mov eax,esi
@@:
cmp byte[eax],0
je @f
inc eax
jmp @b
@@:
sub eax,esi
ret
2009-11-20 11:15:49 +01:00
2015-11-11 00:11:17 +01:00
;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 㧥<>
2009-11-20 11:15:49 +01:00
;input:
2015-11-11 00:11:17 +01:00
; tlist - 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD>
; n_opt - <20> <> 樨 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
; n_info - 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 塞<EFBFBD> <EFA5AC> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
2009-11-20 11:15:49 +01:00
align 4
2015-11-11 00:11:17 +01:00
proc tl_node_add uses eax ebx ecx edx edi, tlist:dword, n_opt:dword, n_info:dword
2015-12-03 11:55:32 +01:00
mov edi,dword[tlist]
2009-11-20 11:15:49 +01:00
2015-12-03 11:55:32 +01:00
call tl_info_set_undo
2009-11-20 11:15:49 +01:00
2015-12-03 11:55:32 +01:00
mov ebx,sizeof.TreeList
imul ebx,tl_info_max_count
add ebx,tl_data_nodes
2009-11-20 11:15:49 +01:00
;--
2015-12-03 11:55:32 +01:00
call tl_get_cur_node_index ;eax=po_t
imul eax,sizeof.TreeList
add eax,tl_data_nodes
mov edx,eax
call tl_move_perv
call tl_get_node_index ;eax = index of pointer [edx]
2009-11-20 11:15:49 +01:00
;--
2015-12-03 11:55:32 +01:00
mov edx,sizeof.TreeList
shl edx,1
add edx,tl_data_nodes
@@: ;for(i=2;i<nodeMax;i++)
cmp dword [edx+12],0
jne .u0
cmp dword [edx+16],0
jne .u0
2009-11-20 11:15:49 +01:00
2015-12-03 11:55:32 +01:00
inc tl_ch_tim
mov ecx,dword[n_opt]
ror ecx,16 ;cx = type
mov word[edx],cx
rol ecx,8 ;cl = close|open
mov byte[edx+3],cl ;node[i].clo
mov byte[edx+2],0 ;node[i].lev=0
bt tl_style,2 ;tl_list_box_mode
jc .l_box_m
mov cl,byte[n_opt]
mov byte[edx+2],cl ;node[i].lev
.l_box_m:
push tl_ch_tim ;node[i].tc=ch_tim;
pop dword[edx+12]
mov [edx+4],eax ;node[i].perv=po_t;
;*** copy node data ***
push esi
xor ecx,ecx
mov cx,tl_info_size
mov esi,ecx
push eax
call tl_get_node_index ;eax = node index
imul esi,eax
pop eax
add esi,tl_data_info
mov edi,dword[n_info] ;pointer to node data
xchg edi,esi
rep movsb
mov esi,edi
mov edi,dword[tlist] ;restore edi
mov cx,tl_info_capt_offs
cmp cx,tl_info_size
jge .no_text_data
cmp tl_info_capt_len,0 ;<3B> <EFBFBD> <E0AEA2> 塞 <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> ࠭<EFBFBD> 祭<EFBFBD> <E7A5AD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ப<EFBFBD>
je .no_len_ogran
add cx,tl_info_capt_len
and ecx,0xffff
add esi,ecx
mov cx,tl_info_size
sub esi,ecx
.no_len_ogran:
dec esi
mov byte[esi],0
.no_text_data:
pop esi ;restore esi
mov ecx,eax
imul ecx,sizeof.TreeList
add ecx,tl_data_nodes ; *** ecx = node[po_t] ***
add ecx,8 ; *** ecx = node[po_t].next ***
push dword[ecx] ;node[i].next=node[po_t].next;
pop dword[edx+8]
call tl_get_node_index ;*** eax = i ***
cmp eax,tl_info_max_count
jge .u0
mov [ecx],eax ;node[po_t].next=i; // <20> <> 뫪<EFBFBD> <20> <> ७<EFBFBD> <E0A5AD> ࠢ<EFBFBD> 塞
mov ecx,[edx+8] ; *** ecx = node[i].next ***
imul ecx,sizeof.TreeList
add ecx,tl_data_nodes ; *** ecx = node[node[i].next] ***
mov [ecx+4],eax ;node[node[i].next].perv=i;
call tb_scrol_resize ;<3B> <> ࠡ<EFBFBD> ⪠ <20> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD> <EFBFBD>
jmp @f
.u0:
add edx,sizeof.TreeList
cmp edx,ebx ;enf of node memory ?
jle @b
@@:
2015-11-04 01:39:02 +01:00
ret
endp
2009-11-20 11:15:49 +01:00
;input:
; edi = pointer to TreeInfo struct
align 4
2015-11-04 01:39:02 +01:00
proc tb_scrol_resize uses eax ecx edx
2015-11-11 00:11:17 +01:00
cmp tl_p_scroll,0 ;<3B> <> ࠡ<EFBFBD> ⪠ <20> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD> <EFBFBD>
2015-12-03 11:55:32 +01:00
je @f
call tl_get_node_count ;eax = node count
mov ecx,eax
call tl_get_rows_count
cmp ecx,eax
jg .ye_sb
xor ecx,ecx
.ye_sb:
mov edx,tl_p_scroll
mov dword[edx+sb_offs_cur_area],eax
mov dword[edx+sb_offs_max_area],ecx
2015-11-04 01:39:02 +01:00
stdcall scroll_bar_vertical.draw,edx
2015-12-03 11:55:32 +01:00
@@:
ret
2015-11-04 01:39:02 +01:00
endp
2009-11-20 11:15:49 +01:00
;input:
2015-11-04 01:39:02 +01:00
;n_info - pointer to node info
2009-11-20 11:15:49 +01:00
align 4
2015-11-11 00:11:17 +01:00
proc tl_node_set_data uses eax ecx edx edi esi, tlist:dword, n_info:dword
2015-12-03 11:55:32 +01:00
mov edi,dword[tlist]
call tl_get_cur_node_index ;eax=po_t
cmp eax,2
jl @f
xor ecx,ecx
mov cx,tl_info_size
imul eax,ecx
add eax,tl_data_info
mov edi,eax
mov esi,dword[n_info] ;pointer to node data
rep movsb
mov esi,edi
mov edi,dword[tlist] ;restore edi
mov cx,tl_info_capt_offs
cmp cx,tl_info_size
jge .no_text_data
mov ax,tl_info_capt_len ;<3B> <EFBFBD> <E0AEA2> 塞 <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> ࠭<EFBFBD> 祭<EFBFBD> <E7A5AD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⥪<> <E2A5AA> <EFBFBD>
cmp ax,0
je .no_limit
add cx,ax ;cx = tl_info_capt_offs + tl_info_capt_len
and ecx,0xffff
xor eax,eax
mov ax,tl_info_size
cmp eax,ecx
jl .no_limit ;<3B> <> <EFBFBD> 짮<EFBFBD> <ECA7AE> ⥫<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 誮<E1ABA8> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⥪<> <E2A5AA> <EFBFBD>
add esi,ecx
sub esi,eax
.no_limit:
dec esi
mov byte[esi],0 ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> 塞 <20> <> <EFBFBD> <E1ABA5> <EFBFBD> <EFBFBD> ᨬ<> <E1A8AC> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <> <EFBFBD> -<2D> <> <20> <> <20> <> <EFBFBD> 稫<EFBFBD> <20> <20> <> <EFBFBD> 짮<EFBFBD> <ECA7AE> ⥫<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ࠢ<EFBFBD> <E0A0A2> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
.no_text_data:
@@:
2015-11-04 01:39:02 +01:00
ret
endp
2009-11-20 11:15:49 +01:00
2015-11-11 00:11:17 +01:00
;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 㧫<> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD>
2009-11-20 11:15:49 +01:00
;input:
2015-11-11 00:11:17 +01:00
; tlist - pointer to 'TreeList' struct
;output:
; eax - pointer to node data
2009-11-20 11:15:49 +01:00
align 4
2015-11-11 00:11:17 +01:00
proc tl_node_get_data uses ecx edi, tlist:dword
mov edi,dword[tlist]
call tl_get_cur_node_index ;eax=po_t
cmp eax,2
jl @f
movzx ecx,tl_info_size
imul eax,ecx
add eax,tl_data_info
jmp .end_f ;return node data pointer
@@:
xor eax,eax
.end_f:
2009-11-20 11:15:49 +01:00
ret
2015-11-11 00:11:17 +01:00
endp
2009-11-20 11:15:49 +01:00
2015-11-11 00:11:17 +01:00
;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 㧫<> <20> 㪠<> <E3AAA0> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> 樨
2009-11-20 11:15:49 +01:00
;input:
2015-11-11 00:11:17 +01:00
; tlist - pointer to 'TreeList' struct
; node_ind - node index
;output:
; eax - pointer to node info
2009-11-20 11:15:49 +01:00
align 4
2015-11-14 22:31:00 +01:00
proc tl_node_poi_get_info uses ebx ecx edx edi, tlist:dword, node_ind:dword
2015-11-11 00:11:17 +01:00
mov edi,dword[tlist]
mov ebx,dword[node_ind]
2009-11-20 11:15:49 +01:00
2015-11-11 00:11:17 +01:00
;cycle to nodes
2015-11-14 22:31:00 +01:00
mov edx,tl_data_nodes
mov ecx,edx
2015-11-11 00:11:17 +01:00
add ecx,sizeof.TreeList
@@:
call tl_iterat_next_all
2015-11-14 22:31:00 +01:00
cmp edx,ecx
2015-11-11 00:11:17 +01:00
jle @f
dec ebx
cmp ebx,0
jg @b
jmp .find
@@:
2015-11-14 22:31:00 +01:00
xor edx,edx
2015-11-11 00:11:17 +01:00
.find:
2015-11-14 22:31:00 +01:00
mov eax,edx
2015-11-11 00:11:17 +01:00
ret
endp
2009-11-20 11:15:49 +01:00
2015-11-11 00:11:17 +01:00
;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <> <E1ABA5> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 㧫<>
2009-11-20 11:15:49 +01:00
;input:
2015-11-11 00:11:17 +01:00
; tlist - pointer to 'TreeList' struct
; node_p - node param struct
;output:
; eax - pointer to next node struct
2009-11-20 11:15:49 +01:00
align 4
2015-11-11 00:11:17 +01:00
proc tl_node_poi_get_next_info uses ecx edx edi, tlist:dword, node_p:dword
mov edi,dword[tlist]
mov edx,dword[node_p]
2009-11-20 11:15:49 +01:00
2015-11-11 00:11:17 +01:00
mov ecx,tl_data_nodes
add ecx,sizeof.TreeList
2009-11-20 11:15:49 +01:00
2015-11-11 00:11:17 +01:00
call tl_iterat_next_all
cmp edx,ecx
jg @f
xor edx,edx
@@:
mov eax,edx
ret
endp
2009-11-20 11:15:49 +01:00
2015-11-11 00:11:17 +01:00
;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 㧫<>
2009-11-20 11:15:49 +01:00
;input:
2015-11-11 00:11:17 +01:00
; tlist - pointer to 'TreeList' struct
; node_p - node param struct
;output:
; eax - pointer
2009-11-20 11:15:49 +01:00
align 4
2015-11-11 00:11:17 +01:00
proc tl_node_poi_get_data uses ecx edx edi, tlist:dword, node_p:dword
mov edi,dword[tlist]
mov edx,dword[node_p]
2015-12-03 11:55:32 +01:00
call tl_get_node_index ;eax = node index
cmp eax,2
jl @f
xor ecx,ecx
mov cx,tl_info_size
imul eax,ecx
2015-11-11 00:11:17 +01:00
add eax,tl_data_info
jmp .end_f ;return node data pointer
2015-12-03 11:55:32 +01:00
@@:
2015-11-11 00:11:17 +01:00
xor eax,eax ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 頥<EFBFBD> 0 <20> <20> <> <EFBFBD> 砥 <20> <> 㤠筮<E3A4A0> <E7ADAE> <20> <> <EFBFBD> ᪠
.end_f:
ret
endp
2009-11-20 11:15:49 +01:00
2015-11-11 00:11:17 +01:00
;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD>
2009-11-20 11:15:49 +01:00
;input:
; edi = pointer 'tl' struct
;output:
; eax = index of current node
align 4
2015-11-04 01:39:02 +01:00
proc tl_get_cur_node_index uses ecx edx
2015-11-11 00:11:17 +01:00
;cycle to nodes
xor eax,eax
mov edx,tl_data_nodes
mov ecx,edx
add ecx,sizeof.TreeList
@@:
call tl_iterat_next
cmp edx,ecx
jle @f
cmp eax,tl_cur_pos
je @f
inc eax
jmp @b
@@:
mov eax,edx
sub eax,tl_data_nodes
xor edx,edx
mov ecx,sizeof.TreeList
div ecx
ret
2015-11-04 01:39:02 +01:00
endp
2009-11-20 11:15:49 +01:00
2015-11-11 00:11:17 +01:00
;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 㪠<> <E3AAA0> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ᨬ<> <E1A8AC> <EFBFBD> <EFBFBD>
2009-11-20 11:15:49 +01:00
;input:
; edx = pointer node memory
; edi = pointer 'tl' struct
;output:
; eax = struct index of current node
align 4
2015-11-04 01:39:02 +01:00
tl_get_node_index:
2015-11-11 00:11:17 +01:00
push ecx edx
mov eax,edx
sub eax,tl_data_nodes
xor edx,edx
mov ecx,sizeof.TreeList
div ecx
pop edx ecx
ret
2009-11-20 11:15:49 +01:00
2015-11-11 00:11:17 +01:00
;㤠<> <E3A4A0> <EFBFBD> <EFBFBD> 㧥<>
2009-11-20 11:15:49 +01:00
align 4
2015-11-04 01:39:02 +01:00
proc tl_node_delete uses eax edx edi, tlist:dword
mov edi,dword[tlist]
2015-11-11 00:11:17 +01:00
call tl_get_cur_node_index ;eax=po_t
cmp eax,2
jl @f
imul eax,sizeof.TreeList
add eax,tl_data_nodes
mov edx,eax
inc tl_ch_tim
mov eax,tl_ch_tim
mov dword[edx+16],eax
call tb_scrol_resize ;<3B> <> ࠡ<EFBFBD> ⪠ <20> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD> <EFBFBD>
@@:
2015-11-04 01:39:02 +01:00
ret
endp
2009-11-20 11:15:49 +01:00
2015-11-11 00:11:17 +01:00
;<3B> <> <EFBFBD> ⠢<EFBFBD> <E2A0A2> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 㧥<>
2009-11-20 11:15:49 +01:00
align 4
2015-11-04 01:39:02 +01:00
proc tl_cur_beg uses edi, tlist:dword
mov edi,dword[tlist]
2015-11-11 00:11:17 +01:00
mov tl_cur_pos,0
cmp tl_p_scroll,0
je @f
mov edi,tl_p_scroll
mov dword[edi+sb_offs_position],0
2015-11-04 01:39:02 +01:00
stdcall scroll_bar_vertical.draw, edi
2015-11-11 00:11:17 +01:00
@@:
2015-11-04 01:39:02 +01:00
ret
endp
2009-11-20 11:15:49 +01:00
2015-11-11 00:11:17 +01:00
;<3B> <> ७<EFBFBD> <E0A5AD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> 1 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
2009-11-20 11:15:49 +01:00
align 4
2015-11-04 01:39:02 +01:00
proc tl_cur_next uses eax ebx edi esi, tlist:dword
2015-12-03 11:55:32 +01:00
mov edi,dword[tlist]
call tl_get_node_count ;eax = node count
cmp tl_cur_pos,eax
jge .no_redraw
mov esi,tl_box_top
add esi,tl_box_height ;esi = coord bottom border
call tl_draw_null_cursor ;<3B> <> <EFBFBD> ࠥ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
inc tl_cur_pos
cmp tl_p_scroll,0 ;if not scrol struct
je @f
call tl_get_rows_count ;eax = rows count
mov ebx,tl_p_scroll
add eax,dword[ebx+sb_offs_position]
cmp tl_cur_pos,eax
jl @f
inc dword[ebx+sb_offs_position]
stdcall scroll_bar_vertical.draw,ebx
stdcall tl_draw,dword[tlist] ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ᮢ<EFBFBD> <E1AEA2> <20> <> <EFBFBD> <EFBFBD>
jmp .no_redraw
@@:
mov edi,dword[tlist] ;restore edi
call tl_draw_cursor ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ᮢ<EFBFBD> <E1AEA2> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
call tl_draw_caption_cur_pos
.no_redraw:
2015-11-04 01:39:02 +01:00
ret
endp
2009-11-20 11:15:49 +01:00
2015-11-11 00:11:17 +01:00
;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 㧫<> <E3A7AB> (<28> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ୨ <EFBFBD> )
2009-11-20 11:15:49 +01:00
;input:
; edi = pointer 'tl' struct
;output:
; eax = struct index of current node
align 4
2015-11-04 01:39:02 +01:00
tl_get_node_count:
2015-11-11 00:11:17 +01:00
push ecx edx
;cycle to nodes
xor eax,eax
mov edx,tl_data_nodes
mov ecx,edx
add ecx,sizeof.TreeList
@@:
call tl_iterat_next
cmp edx,ecx
jle @f
inc eax
jmp @b
@@:
pop edx ecx
ret
2009-11-20 11:15:49 +01:00
2015-11-11 00:11:17 +01:00
;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 㧫<> <E3A7AB> (<28> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ୨ <EFBFBD> )
2009-12-02 12:18:26 +01:00
;input:
; edi = pointer 'tl' struct
;output:
; eax = struct index of current node
align 4
2015-11-04 01:39:02 +01:00
tl_get_node_count_all:
2015-11-11 00:11:17 +01:00
push ecx edx
;cycle to nodes
xor eax,eax
mov edx,tl_data_nodes
mov ecx,edx
add ecx,sizeof.TreeList
@@:
call tl_iterat_next_all
cmp edx,ecx
jle @f
inc eax
jmp @b
@@:
pop edx ecx
ret
2009-12-02 12:18:26 +01:00
2015-11-11 00:11:17 +01:00
;<3B> <> ७<EFBFBD> <E0A5AD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> 1 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
2009-11-20 11:15:49 +01:00
align 4
2015-11-04 01:39:02 +01:00
proc tl_cur_perv uses eax edi esi, tlist:dword
2015-11-11 00:11:17 +01:00
mov edi,dword[tlist]
cmp tl_cur_pos,0
je .no_redraw
mov esi,tl_box_top
add esi,tl_box_height ;esi = coord bottom border
call tl_draw_null_cursor ;<3B> <> <EFBFBD> ࠥ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
dec tl_cur_pos ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD>
2009-11-20 11:15:49 +01:00
2015-11-11 00:11:17 +01:00
cmp tl_p_scroll,0 ;<3B> <20> <> <EFBFBD> <EFBFBD> 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD>
je @f
mov eax,tl_p_scroll
cmp dword[eax+sb_offs_position],0 ;<3B> <20> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <> 室<EFBFBD> <E5AEA4>
je @f
mov edi,tl_cur_pos
cmp edi,dword[eax+sb_offs_position] ;<3B> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> 襫 <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD> <EFBFBD> , ⮣<> <E2AEA3> <20> <> <EFBFBD> ᪠<EFBFBD> <E1AAA0> <20> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD>
jge @f
dec dword[eax+sb_offs_position]
stdcall scroll_bar_vertical.draw, eax
stdcall tl_draw, dword[tlist] ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ᮢ<EFBFBD> <E1AEA2> <20> <> <EFBFBD> <EFBFBD>
jmp .no_redraw
@@:
mov edi,dword[tlist] ;restore edi
call tl_draw_cursor ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ᮢ<EFBFBD> <E1AEA2> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
call tl_draw_caption_cur_pos
.no_redraw:
2015-11-04 01:39:02 +01:00
ret
endp
2009-11-20 11:15:49 +01:00
2015-11-11 00:11:17 +01:00
;<3B> <> ७<EFBFBD> <E0A5AD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> 1 <20> <> ࠭<EFBFBD> <E0A0AD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
2009-12-02 12:18:26 +01:00
align 4
2015-11-04 01:39:02 +01:00
proc tl_cur_page_up uses eax edi esi, tlist:dword
2015-12-03 11:55:32 +01:00
mov edi,dword[tlist]
cmp tl_p_scroll,0 ;<3B> <20> <> <EFBFBD> <EFBFBD> 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD>
je .no_redraw
mov esi,tl_p_scroll
call tl_get_rows_count ;eax = rows count
cmp tl_cur_pos,0
jne @f
cmp dword[esi+sb_offs_position],0 ;<3B> <20> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <> 室<EFBFBD> <E5AEA4>
jne @f
jmp .no_redraw
@@:
cmp tl_cur_pos,eax ;<3B> <EFBFBD> <E0AEA2> 塞 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> -<2D> <> <20> ⮪ <20> <> <20> <> ࠭<EFBFBD> <E0A0AD> <EFBFBD>
jl @f ;<3B> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <> <20> <> <EFBFBD> ࠢ<EFBFBD> <E0A0A2> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> 0, <20> <> <EFBFBD> -<2D> <> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 祬 <20> <> <EFBFBD> <EFBFBD>
sub tl_cur_pos,eax
jmp .cursor
@@:
mov tl_cur_pos,0
.cursor:
cmp dword[esi+sb_offs_position],eax
jl @f
sub dword[esi+sb_offs_position],eax
jmp .scroll
@@:
mov dword[esi+sb_offs_position],0
.scroll:
;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ᮢ<EFBFBD> <E1AEA2> <20> <> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD> <EFBFBD>
stdcall tl_draw, edi ;draw window
stdcall scroll_bar_vertical.draw, esi
.no_redraw:
2015-11-04 01:39:02 +01:00
ret
endp
2009-12-02 12:18:26 +01:00
2015-11-11 00:11:17 +01:00
;<3B> <> ७<EFBFBD> <E0A5AD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> 1 <20> <> ࠭<EFBFBD> <E0A0AD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
2009-12-02 12:18:26 +01:00
align 4
2015-11-04 01:39:02 +01:00
proc tl_cur_page_down uses eax ebx ecx edi esi, tlist:dword
2015-11-11 00:11:17 +01:00
;eax - <20> <> <EFBFBD> -<2D> <> <20> <> ப <20> <> <20> <> ࠭<EFBFBD> <E0A0AD> <EFBFBD>
;ebx - <20> <> <EFBFBD> <EFBFBD> . <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
;ecx - <20> <> <EFBFBD> <EFBFBD> . <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD> <EFBFBD>
2015-12-03 11:55:32 +01:00
mov edi,dword[tlist]
cmp tl_p_scroll,0 ;<3B> <20> <> <EFBFBD> <EFBFBD> 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD>
je .no_redraw
mov esi,tl_p_scroll
call tl_get_node_count ;eax = node count
mov ebx,eax
call tl_get_rows_count ;eax = rows count
mov ecx,ebx
inc ecx ;<3B> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 㧥<> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
cmp ecx,eax ;if (ecx>eax) { ecx=ecx-eax } else { ecx=0 }
jl @f
sub ecx,eax ;㬥<> <E3ACA5> 蠥<EFBFBD> <20> <> <EFBFBD> ᨬ<EFBFBD> <E1A8AC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD> <EFBFBD> , ⠪ <20> <> <EFBFBD> -<2D> <> <20> 뫨 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <E1ABA5> <EFBFBD> <EFBFBD> 㧫<>
jmp .control
@@:
xor ecx,ecx ;ecx=0 - <20> <> <EFBFBD> 㧫<> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> <> ࠭, <20> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD> <20> <> <20> 㦥<EFBFBD>
.control:
cmp tl_cur_pos,ebx ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ?
jl @f
cmp dword[esi+sb_offs_position],ecx ;<3B> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ?
jl @f
jmp .no_redraw
@@:
add tl_cur_pos,eax ;<3B> <> ६<EFBFBD> 頥<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
cmp tl_cur_pos,ebx
jl @f
mov tl_cur_pos,ebx
@@:
add dword[esi+sb_offs_position],eax ;<3B> <> ६<EFBFBD> 頥<EFBFBD> <20> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD>
cmp dword[esi+sb_offs_position],ecx
jl @f
mov dword[esi+sb_offs_position],ecx
@@:
;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ᮢ<EFBFBD> <E1AEA2> <20> <> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD> <EFBFBD>
stdcall tl_draw, edi ;draw window
stdcall scroll_bar_vertical.draw, esi
.no_redraw:
2015-11-04 01:39:02 +01:00
ret
endp
2009-12-02 12:18:26 +01:00
2015-11-11 00:11:17 +01:00
;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> /<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 㧥<> (ࠡ<> ⠥<EFBFBD> <20> 㧫<> <E3A7AB> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ୨ <EFBFBD> 㧫<> )
2009-11-20 11:15:49 +01:00
align 4
2015-11-04 01:39:02 +01:00
proc tl_node_close_open uses eax edx edi, tlist:dword
mov edi,dword[tlist]
2015-11-11 00:11:17 +01:00
call tl_get_cur_node_index ;eax = <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 㧫<> <20> <> <20> <> <EFBFBD> <EFBFBD> <20> ⮨<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
cmp eax,2 ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ⮨<EFBFBD> <20> <> 㧫<> ?
jl @f
imul eax,sizeof.TreeList
add eax,tl_data_nodes
;eax = 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 㧫<> <20> <> <EFBFBD> ࠭<EFBFBD> <E0A0AD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD>
push eax
stdcall tl_node_poi_get_next_info, edi,eax
mov edx,eax ;edx = 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 㧫<> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> 㧫<> eax
pop eax
cmp edx,0 ;<3B> <> <EFBFBD> <EFBFBD> <20> <> 㧫<> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ࠭<EFBFBD> <E0A0AD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ?
je @f
mov dl,byte[edx+2] ;<3B> <> ६ <20> <EFBFBD> <E0AEA2> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 㧫<>
cmp byte[eax+2],dl ;+2 = .lev
jge @f ;<3B> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 㧫<> <20> <> <EFBFBD> <EFBFBD> 襣<EFBFBD> <20> <EFBFBD> <E0AEA2> , <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> ୨ <EFBFBD> , <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> 㭪樨
xor byte[eax+3],1 ;+3 = .clo *** <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ⨥/<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> ⨥ 㧫<> ***
call tb_scrol_resize ;<3B> <> ࠡ<EFBFBD> ⪠ <20> <> <EFBFBD> <E0AEAB> <EFBFBD> <EFBFBD> <EFBFBD>
2009-11-20 11:15:49 +01:00
2015-11-11 00:11:17 +01:00
stdcall tl_draw, edi ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
@@:
2015-11-04 01:39:02 +01:00
ret
endp
2009-11-20 11:15:49 +01:00
2015-11-11 00:11:17 +01:00
;㢥<> <E3A2A5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <EFBFBD> <E0AEA2> <EFBFBD>
2009-11-20 11:15:49 +01:00
align 4
2015-11-04 01:39:02 +01:00
proc tl_node_lev_inc uses eax ecx edx edi, tlist:dword
2015-11-11 00:11:17 +01:00
mov edi,dword[tlist]
bt tl_style,2 ;tl_list_box_mode
jc @f
call tl_get_cur_node_index ;eax=po_t
cmp eax,2
jl @f
mov ecx,tl_data_nodes
imul eax,sizeof.TreeList
add eax,ecx ;eax = pointer to some node struct
add ecx,sizeof.TreeList ;ecx = pointer to 1 node struct
2010-02-09 15:54:59 +01:00
2015-11-11 00:11:17 +01:00
mov edx,eax
call tl_iterat_perv ;<3B> <EFBFBD> <E0AEA2> 塞 <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> 孨<EFBFBD> 㧥<>
cmp edx,ecx
jle @f ;<3B> <20> <> <EFBFBD> 孥<EFBFBD> <E5ADA5> 㧫<> <20> <> <EFBFBD> <20> <> ⥪<> 騩 㧥<> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
mov cl,byte[edx+2] ;<3B> <> ६ <20> <EFBFBD> <E0AEA2> <EFBFBD> த<> ⥫<EFBFBD> <EFBFBD> <E1AAAE> 㧫<>
inc cl ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 塞 1 <20> <20> <> <EFBFBD> <EFBFBD> 砥<EFBFBD> <20> <> <EFBFBD> ᨬ<EFBFBD> <E1A8AC> 쭮<EFBFBD> <20> <> <EFBFBD> 祭<EFBFBD> <E7A5AD>
cmp byte[eax+2],cl
jge @f
inc byte[eax+2] ;㢥<> <E3A2A5> 稢<EFBFBD> <E7A8A2> <EFBFBD> <20> <> <EFBFBD> 祭<EFBFBD> <E7A5AD> 㧫<>
@@:
2015-11-04 01:39:02 +01:00
ret
endp
2009-11-20 11:15:49 +01:00
2015-11-11 00:11:17 +01:00
;㬥<> <E3ACA5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <EFBFBD> <E0AEA2> <EFBFBD>
2009-11-20 11:15:49 +01:00
align 4
2015-11-04 01:39:02 +01:00
proc tl_node_lev_dec uses eax edi, tlist:dword
mov edi,dword[tlist]
2015-11-11 00:11:17 +01:00
call tl_get_cur_node_index ;eax=po_t
cmp eax,2
jl @f
imul eax,sizeof.TreeList
add eax,tl_data_nodes
cmp byte[eax+2],0
je @f
dec byte[eax+2]
@@:
2015-11-04 01:39:02 +01:00
ret
endp
2009-11-20 11:15:49 +01:00
2015-11-11 00:11:17 +01:00
;<3B> <> ६<EFBFBD> 頥<EFBFBD> 㧥<> <20> <> <EFBFBD> <EFBFBD> <EFBFBD>
2009-11-25 12:01:46 +01:00
align 4
2015-11-14 22:31:00 +01:00
proc tl_node_move_up tlist:dword
pushad
2015-11-11 00:11:17 +01:00
mov edi,dword[tlist]
call tl_get_cur_node_index ;eax=po_t
cmp eax,2
jl @f
mov ebx,eax ;copy index of node struct
mov edx,tl_data_nodes
mov ecx,edx
add ecx,sizeof.TreeList
imul eax,sizeof.TreeList
add eax,edx ;eax = pointer to 2 node struct
mov edx,eax ;edx = pointer to 2 node struct
mov esi,eax ;esi = pointer to 2 node struct
call tl_iterat_perv ;edx = pointer to 1 node struct
call tl_get_node_index ;eax = index of 1 node struct
cmp edx,ecx
jle @f
cmp dword[edx+8],ebx ;+8 next
jne .po8
call tl_node_move_po6 ;㧫<> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> 塞 6 <20> <> 뫮<EFBFBD>
jmp .cur_mov
.po8:
call tl_node_move_po8 ;㧫<> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> 塞 8 <20> <> 뫮<EFBFBD>
.cur_mov:
push dword edi
call tl_cur_perv
push dword edi
call tl_draw
@@:
2015-11-14 22:31:00 +01:00
popad
2015-11-04 01:39:02 +01:00
ret
endp
2009-11-25 12:01:46 +01:00
2015-11-11 00:11:17 +01:00
;<3B> <> ६<EFBFBD> 頥<EFBFBD> 㧥<> <20> <> <EFBFBD> <EFBFBD>
2009-11-25 12:01:46 +01:00
align 4
2015-11-14 22:31:00 +01:00
proc tl_node_move_down tlist:dword
pushad
2015-11-11 00:11:17 +01:00
mov edi,dword[tlist]
call tl_get_cur_node_index ;eax=po_t
cmp eax,2
jl @f
mov ebx,eax ;copy index of node struct
mov edx,tl_data_nodes
mov ecx,edx
add ecx,sizeof.TreeList
imul eax,sizeof.TreeList
add eax,edx ;eax = pointer to 1 node struct
mov edx,eax ;edx = pointer to 1 node struct
mov esi,eax ;esi = pointer to 1 node struct
call tl_iterat_next ;edx = pointer to 2 node struct
call tl_get_node_index ;eax = index of 2 node struct
cmp edx,ecx
jle @f
cmp dword[esi+8],eax ;+8 next
jne .po8
xchg eax,ebx ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> 冷<EFBFBD> <> <E1ABA5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 塞<EFBFBD> <EFA5AC> 㧫<> <E3A7AB>
xchg edx,esi
call tl_node_move_po6 ;㧫<> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> 塞 6 <20> <> 뫮<EFBFBD>
jmp .cur_mov
.po8: ;<3B> <20> <> <EFBFBD> <20> <> <EFBFBD> 冷<EFBFBD> <> <E1ABA5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 㧫<> <E3A7AB> <20> <> <20> <> <EFBFBD> 塞
call tl_node_move_po8 ;㧫<> <20> <> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> 塞 8 <20> <> 뫮<EFBFBD>
.cur_mov:
stdcall tl_cur_next, edi
stdcall tl_draw, edi
@@:
2015-11-04 01:39:02 +01:00
ret
2015-11-14 22:31:00 +01:00
popad
2015-11-04 01:39:02 +01:00
endp
2009-11-25 12:01:46 +01:00
align 4
tl_node_move_po6:
2015-11-14 22:31:00 +01:00
mov ecx,edx ;save node pointer
call tl_move_perv
mov dword[edx+8],ebx
mov edx,esi
call tl_move_next
mov dword[edx+4],eax
mov edx,ecx ;restore node pointer
;+4 perv
mov ecx,dword[edx+4]
mov dword[esi+4],ecx
;+8 next
mov ecx,dword[esi+8]
mov dword[edx+8],ecx
mov dword[edx+4],ebx
mov dword[esi+8],eax
ret
2009-11-25 12:01:46 +01:00
;input
;eax = index 1 node struct
;ebx = index 2 node struct
;edx = pointer 1 node struct
;esi = pointer 2 node struct
;edi = pointer to 'TreeList' struct
;output:
;eax = ?
;ebx = ?
;ecx = ?
align 4
tl_node_move_po8:
2015-11-14 22:31:00 +01:00
mov ecx,edx ;save node pointer
call tl_move_perv
mov dword[edx+8],ebx
mov edx,ecx
call tl_move_next
mov dword[edx+4],ebx
mov edx,esi
call tl_move_perv
mov dword[edx+8],eax
mov edx,esi
call tl_move_next
mov dword[edx+4],eax
mov edx,ecx ;restore node pointer
2009-11-25 12:01:46 +01:00
2015-11-14 22:31:00 +01:00
;+4 perv
mov eax,dword[edx+4]
mov ebx,dword[esi+4]
xchg eax,ebx
mov dword[edx+4],eax
mov dword[esi+4],ebx
;+8 next
mov eax,dword[edx+8]
mov ebx,dword[esi+8]
xchg eax,ebx
mov dword[edx+8],eax
mov dword[esi+8],ebx
ret
2009-11-25 12:01:46 +01:00
;input:
; edi = pointer to 'TreeList' struct
align 4
tl_draw_caption_cur_pos:
2015-11-11 00:11:17 +01:00
cmp tl_capt_cy,9 ;9 - minimum caption height
jl @f
pushad
mov ebx,edi ;calculate cursor position
mov eax,tl_cur_pos
inc eax
lea edi,[txt_capt_cur]
add edi,7
call tl_convert_to_str
mov edi,ebx
2009-12-08 17:09:03 +01:00
2015-11-11 00:11:17 +01:00
mov ebx,tl_box_left
shl ebx,16
add ebx,5*65536+3
add ebx,tl_box_top
mov ecx,tl_col_txt
or ecx,0xc0000000 ;0x40000000 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 訢<EFBFBD> <E8A8A2> <EFBFBD> 䮭 梥⮬ edi
lea edx,[txt_capt_cur]
mov edi,tl_col_zag
mcall 4 ;draw text captions
2009-12-08 17:09:03 +01:00
2015-11-11 00:11:17 +01:00
popad
@@:
ret
2009-11-25 12:01:46 +01:00
2009-12-02 12:18:26 +01:00
;input:
2015-11-11 00:11:17 +01:00
; tlist - pointer to 'TreeList' struct
; opt - options: 0 - first element, 1 - add next element
; h_mem - pointer to memory
; mem_size - memory size
2009-12-02 12:18:26 +01:00
;output:
2015-11-11 00:11:17 +01:00
; eax - error code
2009-12-02 12:18:26 +01:00
align 4
2015-11-11 00:11:17 +01:00
proc tl_save_mem uses ebx ecx edx edi esi, tlist:dword, opt:dword, h_mem:dword, mem_size:dword
mov esi,dword[h_mem]
mov edi,dword[tlist]
2009-12-02 12:18:26 +01:00
2015-11-11 00:11:17 +01:00
cmp dword[opt],0 ;add mode
je @f
stdcall tl_get_mem_size, edi,esi ;eax = ࠧ<> <E0A0A7> <EFBFBD> ࠭<> <E0A0AD> <20> <> <EFBFBD> ࠭<EFBFBD> <E0A0AD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
add esi,eax
@@:
2009-12-02 12:18:26 +01:00
2015-11-11 00:11:17 +01:00
xor ebx,ebx
mov bx,tl_info_size
2009-12-02 12:18:26 +01:00
2015-11-11 00:11:17 +01:00
call tl_get_node_count_all ;eax = all node count
2009-12-02 12:18:26 +01:00
2015-11-11 00:11:17 +01:00
mov ecx,eax ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 塞 <> 쪮 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
imul ecx,ebx ;㬭<> <E3ACAD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ࠧ<> <E0A0A7> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 㧫<>
add ecx,tl_save_load_heder_size+1 ;element header +1 end element sumbol
add ecx,esi ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 塞 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> 砫<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> (<28> <20> <> <EFBFBD> ⮬ ࠭<> <E0A0AD> <20> <> <EFBFBD> <EFBFBD> ᠭ<EFBFBD> <E1A0AD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> )
sub ecx,dword[h_mem] ;<3B> ⭨<EFBFBD> <E2ADA8> <EFBFBD> <EFBFBD> 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> 砫<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> (<28> <> <EFBFBD> ࠭<> <E0A0AD> <20> <> <EFBFBD> <EFBFBD> ᠭ<EFBFBD> <E1A0AD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> )
cmp ecx,dword[mem_size] ;ecx = element memory size
jg .err_mem_size
2009-12-02 12:18:26 +01:00
2015-11-11 00:11:17 +01:00
;save tree params (in header)
mov dword[esi],'tree'
mov word[esi+4],bx
mov dword[esi+6],eax ;element count
2009-12-02 12:18:26 +01:00
2015-11-11 00:11:17 +01:00
mov eax,tl_style
mov dword[esi+10],eax
2009-12-02 12:18:26 +01:00
2015-11-11 00:11:17 +01:00
mov eax,tl_cur_pos
mov dword[esi+14],eax
2009-12-02 12:18:26 +01:00
2015-11-11 00:11:17 +01:00
mov ax,tl_info_capt_offs
mov word[esi+18],ax
2009-12-08 17:09:03 +01:00
2015-11-11 00:11:17 +01:00
mov ax,tl_info_capt_len
mov word[esi+20],ax
2009-12-08 17:09:03 +01:00
2015-11-11 00:11:17 +01:00
;copy scroll position
mov edx,tl_p_scroll
mov eax,dword[edx+sb_offs_position]
mov dword[esi+22],eax
2009-12-02 12:18:26 +01:00
2015-11-11 00:11:17 +01:00
add esi,tl_save_load_heder_size ;add header size
;cycle to nodes
mov edx,tl_data_nodes
mov ecx,edx
add ecx,sizeof.TreeList
@@:
call tl_iterat_next_all
cmp edx,ecx
jle @f
;save node params
call tl_get_node_index ;eax = index of pointer [edx]
mov dword[esi],eax
add esi,4
mov eax,dword[edx] ;eax = (type; lev; clo)
mov dword[esi],eax
add esi,4
stdcall tl_node_poi_get_data, edi,edx ;eax - pointer node data
;call tl_node_copy_data
push ecx edi
mov edi,eax
mov ecx,ebx
xchg esi,edi
rep movsb
mov esi,edi
pop edi ecx
;add esi,ebx
jmp @b
@@:
mov byte[esi],0 ;end of 'treelist'
xor eax,eax ;return error code
jmp @f
.err_mem_size:
mov eax,tl_err_save_memory_size
@@:
ret
endp
2009-12-02 12:18:26 +01:00
;input:
2015-11-11 00:11:17 +01:00
; tlist - pointer to 'TreeList' struct
; opt - options: element index + (2*(add mode)+(init mode)) shl 16
; h_mem - pointer to memory
; mem_size - memory size
; ࠧ<> <E0A0A7> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <> <EFBFBD> <EFBFBD> <20> <> <20> ᯮ<EFBFBD> <E1AFAE> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> (<28> <> <EFBFBD> <EFBFBD> <EFBFBD> 砫<EFBFBD> <E7A0AB> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> )
; <20> <> <EFBFBD> <20> <> <EFBFBD> <20> ᯮ<EFBFBD> 짮<EFBFBD> <ECA7AE> <EFBFBD> <EFBFBD> <EFBFBD> <20> 㦭<EFBFBD> <20> <> ࠡ<EFBFBD> <E0A0A1> <EFBFBD> <EFBFBD> <EFBFBD> <20> 㭪<EFBFBD> <E3ADAA> <EFBFBD>
2009-12-02 12:18:26 +01:00
;output:
2015-11-11 00:11:17 +01:00
; eax - error code
;memory header format:
; +0 - (4) 'tree'
; +4 - (2) info size
; +6 - (4) count nodes
; +10 - (4) tlist style
; +14 - (4) cursor pos
; +18 - (2) info capt offs
; +20 - (2) info capt len
; +22 - (4) scroll pos
;memory data format:
; +26 - (info size + 8) * count nodes
2009-12-02 12:18:26 +01:00
align 4
2015-11-11 00:11:17 +01:00
proc tl_load_mem uses ebx ecx edx edi esi, tlist:dword, opt:dword, h_mem:dword, mem_size:dword
locals
er_code dd ?
endl
mov esi,dword[h_mem]
mov edi,dword[tlist]
2009-12-02 12:18:26 +01:00
2015-11-11 00:11:17 +01:00
mov dword[er_code],0 ;return error code
2009-12-02 12:18:26 +01:00
2015-11-11 00:11:17 +01:00
mov ecx,dword[opt]
cmp cx,0 ;load in array mode
je @f
;stdcall tl_get_mem_size, esi,edi ;<3B> <> ६ ࠧ<> <E0A0A7> <EFBFBD> ࠭<> <E0A0AD> <20> <> <EFBFBD> ࠭<EFBFBD> <E0A0AD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
;add esi,eax
and ecx,0xffff
cld
.beg_cycle:
cmp dword[esi],'tree'
jne .no_tree
xor ebx,ebx
mov bx,word[esi+4]
add bx,8
imul ebx,dword[esi+6]
add ebx,tl_save_load_heder_size
add esi,ebx
loop .beg_cycle
@@:
2009-12-02 12:18:26 +01:00
2015-11-11 00:11:17 +01:00
cmp dword[esi],'tree'
jne .no_tree
bt dword[opt],17 ;load in add mode
jc @f
stdcall tl_info_clear, dword edi
@@:
2009-12-02 12:18:26 +01:00
2015-11-11 00:11:17 +01:00
xor ebx,ebx
mov bx,word[esi+4] ;info_size
cmp bx,tl_info_size
je @f
or dword[er_code],tl_err_load_info_size
@@:
mov ecx,dword[esi+6] ;count nodes
cmp ecx,1
jl .end_f
mov edx,esi ;save header pointer
add esi,tl_save_load_heder_size
2009-12-02 12:18:26 +01:00
2015-11-04 01:39:02 +01:00
cld
@@: ;load node params
2015-11-11 00:11:17 +01:00
mov eax,dword[esi+4]
2015-11-04 01:39:02 +01:00
ror eax,16 ;eax - options (type; lev; clo)
2015-11-11 00:11:17 +01:00
add esi,8
stdcall tl_node_add, edi,eax,esi
2015-11-04 01:39:02 +01:00
stdcall tl_cur_next, edi
2009-12-02 12:18:26 +01:00
;...
2015-11-11 00:11:17 +01:00
add esi,ebx
loop @b
bt dword[opt],17 ;load in add mode
jc .no_tree
mov eax,dword[edx+14] ;set cursor pos
mov tl_cur_pos,eax
mov ebx,tl_p_scroll
cmp ebx,0
je .end_f
mov eax,dword[edx+22] ;set scroll pos
mov dword[ebx+sb_offs_position],eax
2015-11-04 01:39:02 +01:00
stdcall scroll_bar_vertical.draw, ebx
2015-11-11 00:11:17 +01:00
jmp .end_f
.no_tree:
mov dword[er_code],tl_err_load_caption
.end_f:
mov eax,dword[er_code]
ret
endp
2009-12-02 12:18:26 +01:00
2015-11-11 00:11:17 +01:00
;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> ࠧ<> <E0A0A7> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ⮩ <20> 㭪樥<E3ADAA> tl_save_mem <20> <> <EFBFBD> <20> <> <EFBFBD> ࠭<EFBFBD> <E0A0AD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⮢
2009-12-23 14:50:32 +01:00
;output:
2015-11-11 00:11:17 +01:00
; eax - error code
2009-12-23 14:50:32 +01:00
align 4
2015-11-11 00:11:17 +01:00
proc tl_get_mem_size uses ebx edi, tlist:dword, h_mem:dword
mov edi,dword[tlist]
mov eax,dword[h_mem]
@@:
cmp dword[eax],'tree'
jne @f
xor ebx,ebx
mov bx,word[eax+4]
add bx,8 ;ࠧ<> <E0A0A7> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⥫쭮<E2A5AB> <20> <> <EFBFBD> <EFBFBD> ଠ 樨 <20> <> 㧫<> (<28> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ; <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> , <20> <EFBFBD> <E0AEA2> <EFBFBD> , ...)
imul ebx,dword[eax+6]
add ebx,tl_save_load_heder_size
add eax,ebx
jmp @b
@@:
sub eax,dword[h_mem] ;<3B> ⭨<EFBFBD> <E2ADA8> <EFBFBD> <EFBFBD> 㪠<> <E3AAA0> ⥫<EFBFBD> <20> <> <20> <> 砫<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
;<3B> <20> <> <EFBFBD> <EFBFBD> 砥<EFBFBD> ࠧ<> <E0A0A7> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
ret
endp
2009-12-23 14:50:32 +01:00
2009-12-02 12:18:26 +01:00
;ascii scan key
; 13 28 Enter
; 32 57 Space
; 178 72 Up
; 177 80 Down
; 176 75 Left
; 179 77 Right
; 182 83 Delete
; 184 73 Pg Up
; 183 81 Pg Dn
tl_key_ascii db 13,32,178,177,176,179,182,184,183
tl_key_scan db 28,57, 72, 80, 75, 77, 83, 73, 81
2009-12-08 17:09:03 +01:00
txt_capt_cur db '<27> <> ப<EFBFBD> ',0
txt_capt_otm db '<27> ⬥<EFBFBD> <E2ACA5> ',0
2015-11-11 00:11:17 +01:00
;<3B> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> <20> <> <EFBFBD> , <20> <> <20> ८<EFBFBD> ࠧ<EFBFBD> <E0A0A7> <EFBFBD> <20> <> <20> <20> <> ப<EFBFBD>
2009-12-08 17:09:03 +01:00
;input:
; eax = value
; edi = string buffer
align 4
tl_convert_to_str:
2015-11-11 00:11:17 +01:00
pushad
mov dword[edi+1],0x20202020
call .str
popad
ret
2009-12-08 17:09:03 +01:00
align 4
.str:
2015-12-03 11:55:32 +01:00
mov ecx,0x0a ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ⥬<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <E1ABA5> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ॣ<> <E0A5A3> <EFBFBD> <EFBFBD> <EFBFBD> ebx,eax,ecx,edx <20> 室<EFBFBD> <E5AEA4> <EFBFBD> <20> <> ࠬ<EFBFBD> <E0A0AC> <EFBFBD> <EFBFBD> eax - <20> <>
;<3B> <> <EFBFBD> ॢ<EFBFBD> <E0A5A2> <20> <> <20> ASCII <20> <> ப<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ecx=<3D> <> <EFBFBD> ⥬<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <E1ABA5> edi <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> 㤠 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> 뢠<EFBFBD> <EBA2A0> , <20> 㤥<EFBFBD> <20> <> ப<EFBFBD> , <20> <> <EFBFBD> 祬 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ६<EFBFBD> <E0A5AC> <EFBFBD> <EFBFBD> <EFBFBD>
cmp eax,ecx ;<3B> ࠢ<EFBFBD> <E0A0A2> <EFBFBD> <EFBFBD> <20> <20> eax <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 祬 <20> ecx <20> <> <20> <> ३<EFBFBD> <E0A5A9> <20> <> @@-1 <20> .<2E> . <20> <> pop eax
jb @f
xor edx,edx ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> edx
div ecx ;ࠧ<> <E0A0A7> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> - <20> <> <EFBFBD> <EFBFBD> ⮪ <20> edx
push edx ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> ⥪
call .str ;<3B> 맢<EFBFBD> <EBA7A2> <EFBFBD> ᠬ<> ᥡ<> <20> ⠪ <20> <> ⮣<> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> eax <20> <> <20> ⠭<EFBFBD> <E2A0AD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 祬 <20> ecx
pop eax
@@: ;cmp al,10 ;<3B> <EFBFBD> <E0AEA2> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> 祭<EFBFBD> <E7A5AD> <20> al 祬 10 (<28> <> <EFBFBD> <20> <> <EFBFBD> ⥬<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <E1ABA5> 10 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> - <20> <> 譠<EFBFBD> ))
or al,0x30 ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 祬 <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
stosb ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> ॣ<> <E0A5A3> <EFBFBD> <EFBFBD> <EFBFBD> al <20> <20> 祪<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> es:edi
ret ;<3B> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> 祭<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 室 <20> .<2E> . <20> <> <EFBFBD> <EFBFBD> <20> <20> ⥪<EFBFBD> <20> ࠭<EFBFBD> <E0A0AD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> -<2D> <> <20> 맮<EFBFBD> <EBA7AE> <EFBFBD> <20> <> <20> ⮫쪮 ࠧ <20> <> <20> <20> 㤥<EFBFBD> <20> <> <EFBFBD> 뢠<EFBFBD> <EBA2A0> <EFBFBD> <EFBFBD>
2009-12-08 17:09:03 +01:00
}