Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 5910 → Rev 5911

/programs/develop/info3ds/data.inc
1,7 → 1,7
if lang eq ru
capt db 'info 3ds ¢¥àá¨ï 05.11.15',0 ;¯®¤¯¨áì ®ª­ 
capt db 'info 3ds ¢¥àá¨ï 10.11.15',0 ;¯®¤¯¨áì ®ª­ 
else
capt db 'info 3ds version 05.11.15',0 ;window caption
capt db 'info 3ds version 10.11.15',0 ;window caption
end if
 
MAX_FILE_LEVEL equ 20 ;¬ ªá¨¬ «ì­ë© ã஢¥­ì ¢«®¦¥­­®á⨠¡«®ª®¢ ¤«ï  ­ «¨§ 
/programs/develop/info3ds/info3ds.asm
66,16 → 66,14
stdcall mem.Alloc, dword size ;¢ë¤¥«ï¥¬ ¯ ¬ïâì ¤«ï ¨§®¡à ¦¥­¨ï
mov [buf],eax
 
mov eax,70 ;70-ï äã­ªæ¨ï à ¡®â  á ä ©« ¬¨
mov [run_file_70.Function], 0
mov [run_file_70.Position], 0
mov [run_file_70.Flags], 0
mov [run_file_70.Count], dword size
m2m [run_file_70.Buffer], [buf]
m2m [run_file_70.Buffer], eax
mov byte[run_file_70+20], 0
mov [run_file_70.FileName], file_name
mov ebx,run_file_70
int 0x40 ;§ £à㦠¥¬ ä ©« ¨§®¡à ¦¥­¨ï
mcall 70,run_file_70 ;§ £à㦠¥¬ ä ©« ¨§®¡à ¦¥­¨ï
cmp ebx,0xffffffff
je @f
;®¯à¥¤¥«ï¥¬ ¢¨¤ ¨§®¡à ¦¥­¨ï ¨ ¯¥à¥¢®¤¨¬ ¥£® ¢® ¢à¥¬¥­­ë© ¡ãä¥à image_data
122,24 → 120,23
start:
load_libraries l_libs_start,l_libs_end
;¯à®¢¥àª  ­  ᪮«ìª® 㤠筮 § £ã§¨«¨áì ¡¨¡«¨®â¥ª¨
mov ebp,lib_0
cmp dword [ebp+ll_struc_size-4],0
jz @f
mov ebp,lib_1
cmp dword [ebp+ll_struc_size-4],0
jz @f
mov ebp,lib_2
cmp dword [ebp+ll_struc_size-4],0
jz @f
mov ebp,lib_3
cmp dword [ebp+ll_struc_size-4],0
jz @f
cmp dword [lib_0+ll_struc_size-4],0
jnz @f
cmp dword [lib_1+ll_struc_size-4],0
jnz @f
cmp dword [lib_2+ll_struc_size-4],0
jnz @f
cmp dword [lib_3+ll_struc_size-4],0
jnz @f
jmp .lib
@@:
mcall -1 ;exit not correct
@@:
.lib:
mcall 48,3,sc,sizeof.system_colors
mcall 40,0x27
stdcall [OpenDialog_Init],OpenDialog_data ;¯®¤£®â®¢ª  ¤¨ «®£ 
 
mov dword[w_scr_t1.type],1
stdcall dword[tl_data_init], tree1
;á¨á⥬­ë¥ ¨ª®­ª¨ 16*16 ¤«ï tree_list
load_image_file 'tl_sys_16.png', icon_tl_sys,TREE_ICON_SYS16_BMP_SIZE
221,9 → 218,9
 
;
stdcall [tl_node_get_data],tree1
pop ebx
cmp ebx,0
cmp eax,0
je @f
mov ebx,eax
mov eax,dword[ebx] ;¯®«ãç ¥¬ §­ ç¥­¨¥ ᤢ¨£  ¢ë¡à ­­®£® ¡«®ª  ®â­®á¨â¥«ì­® ­ ç «  ä ©« 
mov ecx,dword[ebx+4] ;à §¬¥à ¡«®ª 
stdcall hex_in_str, txt_3ds_offs.dig, eax,8
350,16 → 347,12
sub eax,41
mov dword[tree1.box_width],eax
add ax,word[tree1.box_left]
mov word[w_scr_t1.start_x],ax
mov word[w_scr_t1+sb_offs_start_x],ax
add ax,16+5
mov word[buf_0.l],ax
 
mov eax,8
mov ebx,(5 shl 16)+20
mov ecx,(5 shl 16)+20
mov edx,3
mov esi,[sc.work_button]
int 0x40
mcall 8,(5 shl 16)+20,(5 shl 16)+20,3
 
mov ebx,(30 shl 16)+20
mov edx,4
372,20 → 365,11
int 0x40
@@:
 
mov ebx,(85 shl 16)+20
mov edx,6 ;®ª­® á ª®®à¤¨­ â ¬¨
int 0x40
mcall ,(85 shl 16)+20,,6 ;®ª­® á ª®®à¤¨­ â ¬¨
mcall ,(110 shl 16)+20,,7 ;㤠«¥­¨¥ ¡«®ª 
 
mov ebx,(110 shl 16)+20
mov edx,7 ;㤠«¥­¨¥ ¡«®ª 
int 0x40
mcall 7,[image_data_toolbar],(16 shl 16)+16,(7 shl 16)+7 ;new
 
mov eax,7
mov ebx,[image_data_toolbar]
mov ecx,(16 shl 16)+16
mov edx,(7 shl 16)+7 ;new
int 0x40
 
add ebx,IMAGE_TOOLBAR_ICON_SIZE
mov edx,(32 shl 16)+7 ;open
int 0x40
456,7 → 440,7
.exit:
mov dword[tree1.data_img],0
mov dword[tree1.data_img_sys],0
stdcall dword[tl_data_clear], tree1
stdcall [tl_data_clear], tree1
stdcall [buf2d_delete],buf_0
stdcall [buf2d_delete],buf_1 ;㤠«ï¥¬ ¡ãä¥à
stdcall mem.Free,[image_data_toolbar]
795,7 → 779,7
rep movsb
mov byte[buffer+size_one_list-1],0 ;0 - ᨬ¢®« ª®­¥æ  áâப¨
.no_capt:
stdcall [tl_node_add], buffer, ebx, tree1
stdcall [tl_node_add], tree1, ebx, buffer
stdcall [tl_cur_next], tree1
if debug
stdcall print_err,sz_add_3ds_object,buffer+list_offs_text
907,42 → 891,40
but_delete_chunk:
pushad
stdcall [tl_node_get_data],tree1
pop ebx
cmp ebx,0
cmp eax,0
je .end_f
cmp byte[ebx+list_offs_chunk_del],0 ;¥á«¨ ¡«®ª § é¨é¥­ ®â 㤠«¥­¨ï
cmp byte[eax+list_offs_chunk_del],0 ;¥á«¨ ¡«®ª § é¨é¥­ ®â 㤠«¥­¨ï
jne .notify
 
;(1) ª®¯¨à®¢ ­¨¥ ­¨¦­¥© ç á⨠䠩« 
mov edx,dword[ebx+4] ;à §¬¥à ¡«®ª 
mov edx,dword[eax+4] ;à §¬¥à ¡«®ª 
sub [open_file_size],edx ;¨§¬¥­¥­¨¥ à §¬¥à®¢ ä ©« 
mov ecx,[open_file_size]
mov eax,dword[ebx] ;¯®«ãç ¥¬ §­ ç¥­¨¥ ᤢ¨£  ¢ë¡à ­­®£® ¡«®ª  ®â­®á¨â¥«ì­® ­ ç «  ä ©« 
sub ecx,eax ;ecx - à §¬¥à ­¨¦­¥© ᤢ¨£ ¥¬®© ç á⨠䠩« 
add eax,dword[open_file_lif] ;¯®«ãç ¥¬ §­ ç¥­¨¥ ᤢ¨£  ¢ ¯ ¬ïâ¨
mov edi,eax
mov esi,eax
mov ebx,dword[eax] ;¯®«ãç ¥¬ §­ ç¥­¨¥ ᤢ¨£  ¢ë¡à ­­®£® ¡«®ª  ®â­®á¨â¥«ì­® ­ ç «  ä ©« 
sub ecx,ebx ;ecx - à §¬¥à ­¨¦­¥© ᤢ¨£ ¥¬®© ç á⨠䠩« 
add ebx,dword[open_file_lif] ;¯®«ãç ¥¬ §­ ç¥­¨¥ ᤢ¨£  ¢ ¯ ¬ïâ¨
mov edi,ebx
mov esi,ebx
add esi,edx
mov al,byte[ebx+list_offs_chunk_lev] ;¡¥à¥¬ ã஢¥­ì ⥪ã饣® 㧫 
mov bl,byte[eax+list_offs_chunk_lev] ;¡¥à¥¬ ã஢¥­ì ⥪ã饣® 㧫 
rep movsb
mov byte[can_save],1
 
;(2) ¨§¬¥­¥­¨¥ à §¬¥à®¢ த¨â¥«ìáª¨å ¡«®ª®¢
cmp al,0
cmp bl,0
je .end_2
.cycle_2:
stdcall [tl_cur_perv], tree1
stdcall [tl_node_get_data],tree1
pop ebx
cmp ebx,0
cmp eax,0
je .end_2
cmp byte[ebx+list_offs_chunk_lev],al
cmp byte[eax+list_offs_chunk_lev],bl
jge .cycle_2
mov al,byte[ebx+list_offs_chunk_lev]
mov ecx,[ebx]
mov bl,byte[eax+list_offs_chunk_lev]
mov ecx,[eax]
add ecx,[open_file_lif]
sub dword[ecx+2],edx
cmp al,0 ;¥á«¨ á ¬ë© ¢¥àå­¨© 㧥«, â® al=0
cmp bl,0 ;¥á«¨ á ¬ë© ¢¥àå­¨© 㧥«, â® bl=0
jne .cycle_2
.end_2:
1284,14 → 1266,11
sz_tl_node_poi_get_data db 'tl_node_poi_get_data',0
 
 
 
align 4
mouse_dd dd 0x0
sc system_colors
last_time dd 0
 
align 16
procinfo process_information
 
align 4
buf_0: dd 0 ;㪠§ â¥«ì ­  ¡ãä¥à ¨§®¡à ¦¥­¨ï
.l: dw 205 ;+4 left
1311,6 → 1290,7
dd 0 ;+16 color
db 24 ;+20 bit in pixel
 
align 4
el_focus dd tree1
tree1 tree_list size_one_list,300+2, tl_key_no_edit+tl_draw_par_line,\
16,16, 0xffffff,0xb0d0ff,0xd000ff, 5,35,195-16,250, 16,list_offs_text,0, el_focus,\
1317,26 → 1297,11
w_scr_t1,0
 
align 4
w_scr_t1:
.size_x dw 16 ;+0
.start_x dw 0
rb 2+2
.btn_high dd 15 ;+8
.type dd 1 ;+12
.max_area dd 100 ;+16
rb 4+4
.bckg_col dd 0xeeeeee ;+28
.frnt_col dd 0xbbddff ;+32
.line_col dd 0 ;+36
rb 4+2+2
.run_x:
rb 2+2+2+2+4+4+4+4+4+4
.all_redraw dd 0 ;+80
.ar_offset dd 1 ;+84
w_scr_t1 scrollbar 16,0, 3,0, 15, 100, 0,0, 0xeeeeee, 0xbbddff, 0, 1
 
 
align 4
align 16
i_end:
procinfo process_information
rb 1024
thread_coords:
rb 1024
/programs/develop/info3ds/info_wnd_coords.inc
30,12 → 30,11
inc byte[prop_wnd_run]
 
stdcall [tl_node_get_data],tree1
pop ebx
xor edx,edx
mov dword[capt_p],txt_q
cmp ebx,0
cmp eax,0
je .no_points
mov ebx,dword[ebx] ;¯®«ãç ¥¬ §­ ç¥­¨¥ ᤢ¨£  ¢ë¡à ­­®£® ¡«®ª 
mov ebx,dword[eax] ;¯®«ãç ¥¬ §­ ç¥­¨¥ ᤢ¨£  ¢ë¡à ­­®£® ¡«®ª 
add ebx,dword[open_file_lif]
 
cmp word[ebx],CHUNK_VERTLIST
94,7 → 93,7
stdcall str_cat, obj_point.text,esi
stdcall str_cat, obj_point.text,Data_String
loop @b
stdcall dword[tl_node_add], obj_point, (ID_ICON_DATA shl 16), tree3
stdcall dword[tl_node_add], tree3,(ID_ICON_DATA shl 16),obj_point
stdcall dword[tl_cur_next], tree3
dec edx
cmp edx,0
207,12 → 206,11
cmp ah,3
jne @f
;§ £à㧪  ª®®à¤¨­ â ¢ editbox-ë
push ebx
push eax ebx
stdcall [tl_node_get_data],tree3
pop ebx
cmp ebx,0
cmp eax,0
je .no_select_0
mov ebx,[ebx]
mov ebx,[eax]
mov word[NumberSymbolsAD],8
finit
fld dword[ebx]
231,16 → 229,16
stdcall [edit_box_draw], edit2
stdcall [edit_box_draw], edit3
.no_select_0:
pop ebx
pop ebx eax
jmp prop_still
@@:
cmp ah,4
jne @f
push ebx ecx esi edi
push eax ebx ecx edi esi
stdcall [tl_node_get_data],tree3
pop ebx
cmp ebx,0
cmp eax,0
je .no_select_1
mov ebx,[ebx]
mov ebx,[eax]
finit
 
mov esi,string1
291,12 → 289,13
stdcall str_cat, obj_point.text,esi
stdcall str_cat, obj_point.text,Data_String
loop .coord
stdcall dword[tl_node_set_data], obj_point, tree3
stdcall dword[tl_node_set_data], tree3,obj_point
stdcall dword[tl_draw], tree3
mov byte[can_save],1 ;¤«ï ¯®ª §  ª­®¯ª¨ '‘®åà ­¨âì'
mov dword[offs_last_timer],0 ;¤«ï ®¡­®¢«¥­¨ï ¡«®ª  ¢ â ©¬¥à¥
.no_select_1:
pop edi esi ecx ebx
pop esi edi ecx ebx eax
jmp prop_still
@@:
 
cmp ah,1
/programs/develop/libraries/box_lib/trunk/box_lib.mac
283,7 → 283,11
 
struc tree_list info_size,info_max_count,style, img_cx,img_cy,\
col_bkg,col_zag,col_txt, box_l,box_t,box_w,box_h, capt_cy,info_capt_offs,\
info_capt_len,el_focus, p_scrol,on_press {
info_capt_len,el_focus, p_scroll,on_press {
.box_left dd box_l
.box_top dd box_t
.box_width dd box_w
.box_height dd box_h
.data_info dd 0
.info_size dw info_size
.info_max_count dd info_max_count
294,56 → 298,45
.img_cy dw img_cy
.data_img_sys dd 0
.ch_tim dd 0
.ls_tim dd 0
.tim_undo dd 0
.cur_pos dd 0
.col_bkg dd col_bkg
.col_zag dd col_zag
.col_txt dd col_txt
.box_left dd box_l
.box_top dd box_t
.box_width dd box_w
.box_height dd box_h
.capt_cy dw capt_cy
.info_capt_offs dw info_capt_offs
.info_capt_len dw info_capt_len
.el_focus dd el_focus
.p_scrol dd p_scrol
rb 4
.on_activate dd 0
.p_scroll dd p_scroll
.on_press dd on_press
}
 
tl_data_info equ dword[edi] ;㪠§ â¥«ì ­  ®á­®¢­ë¥ ¤ ­ë¥
tl_info_size equ word[edi +4] ;à §¬¥à ¤ ­­ëå ¢ë¤¥«ï¥¬ëå ¤«ï ª ¦¤®£® 㧫  (¯®«ì§®¢ â¥«ìá쪨¥ ¤ ­­ë¥ + ⥪áâ ¤«ï ¯®¤¯¨á¨)
tl_info_max_count equ dword[edi+6] ;¬ ªá¨¬ «ì­®¥ ª®«¨ç¥á⢮ 㧫®¢, ª®â®àë¥ ¬®¦­® ¤®¡ ¢¨âì ¢ í«¥¬¥­â
tl_style equ dword[edi+10] ;á⨫¨ í«¥¬¥­â 
tl_data_nodes equ dword[edi+14] ;㪠§ â¥«ì ­  áâàãªâãàë 㧫®¢
tl_data_img equ dword[edi+18] ;㪠§ â¥«ì ­  ¨§®¡à ¦¥­¨ï á ¨ª®­ª ¬¨ 㧫®¢
tl_img_cx equ word[edi+22] ;è¨à¨­  ¨ª®­®ª
tl_img_cy equ word[edi+24] ;¢ëá®â  ¨ª®­®ª
tl_data_img_sys equ dword[edi+26] ;㪠§ â¥«ì ­  á¨á⥬­ë¥ ¨§®¡à ¦¥­¨ï (áâ५ª¨, ¯«îᨪ¨)
tl_ch_tim equ dword[edi+30] ;ª®«¨ç¥á⢮ ¨§¬¥­¥­¨© ¢ ä ©«¥
tl_tim_undo equ dword[edi+38] ;ª®«¨ç¥á⢮ ®â¬¥­¥­­ëå ¤¥©á⢨©
tl_cur_pos equ dword[edi+42] ;¯®§¨æ¨ï ªãàá®à 
tl_col_bkg equ dword[edi+46] ;梥â ä®­ 
tl_col_zag equ dword[edi+50] ;梥⠧ £®«®¢ª 
tl_col_txt equ dword[edi+54] ;梥â ⥪áâ 
tl_box_left equ dword[edi+58]
tl_box_top equ dword[edi+62]
tl_box_width equ dword[edi+66]
tl_box_height equ dword[edi+70]
tl_capt_cy equ word[edi+74] ;¢ëá®â  ¯®¤¯¨á¨
tl_info_capt_offs equ word[edi+76] ;ᤢ¨£ ¤«ï ­ ç «  ⥪áâ  (¯®¤¯¨á¨ 㧫 )
tl_info_capt_len equ word[edi+78] ;¤«¨­­  ⥪áâ  ¯®¤¯¨á¨ 㧫  (¥á«¨ = 0 â® ¤® ª®­æ  áâàãªâãàë)
tl_el_focus equ dword[edi+80] ;㪠§ â¥«ì ­  áâàãªâãàã í«¥¬¥­â  ¢ 䮪ãá¥
tl_p_scrol equ dword[edi+84] ;㪠§ â¥«ì ­  áâàãªâãàã áªà®««¨­£ 
tl_on_press equ dword[edi+96] ;㪠§ â¥«ì ­  äã­ªæ¨î, ª®â®à ï ¢ë§ë¢ ¥âáï ¯à¨ ­ ¦ â¨¨ Enter
tl_box_left equ dword[edi]
tl_box_top equ dword[edi+ 4]
tl_box_width equ dword[edi+ 8]
tl_box_height equ dword[edi+12]
tl_data_info equ dword[edi+16] ;㪠§ â¥«ì ­  ®á­®¢­ë¥ ¤ ­ë¥
tl_info_size equ word[edi+20] ;à §¬¥à ¤ ­­ëå ¢ë¤¥«ï¥¬ëå ¤«ï ª ¦¤®£® 㧫  (¯®«ì§®¢ â¥«ìá쪨¥ ¤ ­­ë¥ + ⥪áâ ¤«ï ¯®¤¯¨á¨)
tl_info_max_count equ dword[edi+22] ;¬ ªá¨¬ «ì­®¥ ª®«¨ç¥á⢮ 㧫®¢, ª®â®àë¥ ¬®¦­® ¤®¡ ¢¨âì ¢ í«¥¬¥­â
tl_style equ dword[edi+26] ;á⨫¨ í«¥¬¥­â 
tl_data_nodes equ dword[edi+30] ;㪠§ â¥«ì ­  áâàãªâãàë 㧫®¢
tl_data_img equ dword[edi+34] ;㪠§ â¥«ì ­  ¨§®¡à ¦¥­¨ï á ¨ª®­ª ¬¨ 㧫®¢
tl_img_cx equ word[edi+38] ;è¨à¨­  ¨ª®­®ª
tl_img_cy equ word[edi+40] ;¢ëá®â  ¨ª®­®ª
tl_data_img_sys equ dword[edi+42] ;㪠§ â¥«ì ­  á¨á⥬­ë¥ ¨§®¡à ¦¥­¨ï (áâ५ª¨, ¯«îᨪ¨)
tl_ch_tim equ dword[edi+46] ;ª®«¨ç¥á⢮ ¨§¬¥­¥­¨© ¢ ä ©«¥
tl_tim_undo equ dword[edi+50] ;ª®«¨ç¥á⢮ ®â¬¥­¥­­ëå ¤¥©á⢨©
tl_cur_pos equ dword[edi+54] ;¯®§¨æ¨ï ªãàá®à 
tl_col_bkg equ dword[edi+58] ;梥â ä®­ 
tl_col_zag equ dword[edi+62] ;梥⠧ £®«®¢ª 
tl_col_txt equ dword[edi+66] ;梥â ⥪áâ 
tl_capt_cy equ word[edi+70] ;¢ëá®â  ¯®¤¯¨á¨
tl_info_capt_offs equ word[edi+72] ;ᤢ¨£ ¤«ï ­ ç «  ⥪áâ  (¯®¤¯¨á¨ 㧫 )
tl_info_capt_len equ word[edi+74] ;¤«¨­­  ⥪áâ  ¯®¤¯¨á¨ 㧫  (¥á«¨ = 0 â® ¤® ª®­æ  áâàãªâãàë)
tl_el_focus equ dword[edi+76] ;㪠§ â¥«ì ­  áâàãªâãàã í«¥¬¥­â  ¢ 䮪ãá¥
tl_p_scroll equ dword[edi+80] ;㪠§ â¥«ì ­  áâàãªâãàã áªà®««¨­£ 
tl_on_press equ dword[edi+84] ;㪠§ â¥«ì ­  äã­ªæ¨î, ª®â®à ï ¢ë§ë¢ ¥âáï ¯à¨ ­ ¦ â¨¨ Enter
 
;data_info dd ? ;+ 0 㪠§ â¥«ì ­  ®á­®¢­ë¥ ¤ ­ë¥
;ls_tim dd ? ;+34 ¢à¥¬ï ¯®á«¥¤­¥£® á®åà ­¥­¨ï
;on_activate dd ? ;+92 㪠§ â¥«ì ­  äã­ªæ¨î ¯à¨  ªâ¨¢¨à®¢ ­¨¨ 㧫 
 
;ª®­áâ ­âë á⨫ï
tl_key_no_edit equ 1b ;í«¥¬¥­â ­¥«ì§ï । ªâ¨à®¢ âì ­  ª« ¢¨ âãॠ(¨§¬¥­ïâì ã஢­¨, 㤠«ïâì)
tl_draw_par_line equ 10b ;à¨á®¢ âì «¨­¨¨ ª த¨â¥«ì᪮¬ã 㧫ã
355,7 → 348,7
tl_err_load_info_size equ 100b ;­¥ ᮢ¯ ¤ ¥â à §¬¥à ¨­ä®à¬ æ¨®­­®© áâàãªâãàë ¯à¨ ®âªàë⨨
tl_load_mode_add equ 0x20000 ;®¯æ¨ï áç¨â뢠­¨ï ¢ ०¨¬¥ ¤®¡ ¢«¥­¨ï ¨­ä®à¬ æ¨¨
tl_save_load_heder_size equ 26 ;à §¬¥à § £®«®¢ª  ¤«ï § ¯¨á¨/ç⥭¨ï í«¥¬¥­â®¢
tl_offs_box equ 58 ;­ ç «® BOX áâàãªâãàë ¤«ï tree_list
tl_offs_box equ 0 ;­ ç «® BOX áâàãªâãàë ¤«ï tree_list
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Basic macros for use TextEditor ;
/programs/develop/libraries/box_lib/trunk/doc/tree_list/info_treelist.htm
76,10 → 76,7
 
<h2><a name="fun_add">tl_node_add</a></h2>
<p>Äîáàâëÿåò óçåë, â ïîçèöèþ óêàçàííóþ êóðñîðîì. Ïðèìåð äîáàâëåíèÿ óçëà:</p>
<pre> push dword tree1
push dword 0x10002
push dword data_buffer
call dword[tl_node_add]</pre>
<pre> stdcall dword[tl_node_add], tree1,0x10002,data_buffer</pre>
<p>ãäå: <b>tree1</b> - ñòðóêòóðà tree_list;
<b>0x10002</b> - ïàðàìåòðû óçëà (ñòàðøèå áàéòû 0x0001 - èíäåêñ èêîíêè, îòîáðàæàåìîé âîçëå óçëà; ìåíüøèé áàéò 0x02 - óðîâåíü âëîæåíîñòè óçëà); <b>data_buffer</b> - óêàçàòåëü íà äûííûå, äîáàâëÿåìûå â óçåë.</p>
 
89,8 → 86,7
<h2><a name="fun_get_d">tl_node_get_data</a></h2>
<p>Áåðåò óêàçàòåëü íà äàííûå (ïîëüçîâàòåëüñêèå è ïîäïèñü) èç óçëà ïîä êóðñîðîì.</p>
<p>Ïðèìåð 1:</p>
<pre> stdcall [tl_node_get_data], tree1
pop eax</pre>
<pre> stdcall [tl_node_get_data], tree1</pre>
<p>ãäå: <b>tree1</b> - ñòðóêòóðà tree_list;
<b>eax</b> - óêàçàòåëü íà äûííûå óçëà.</p>
 
98,14 → 94,14
<pre> NODE_SIZE equ 200
node_data rb NODE_SIZE
.........
push ecx esi edi
push eax ecx esi edi
stdcall [tl_node_get_data], tree1
pop esi
mov esi,eax
mov edi,node_data
mov ecx,NODE_SIZE
cld
rep movsb
pop edi esi ecx</pre>
pop edi esi ecx eax</pre>
<p>ãäå: <b>tree1</b> - ñòðóêòóðà tree_list;
<b>NODE_SIZE</b> - ðàçìåð äûííûõ óçëà;
<b>node_data</b> - êîïèÿ íà äûííûõ óçëà.</p>
146,34 → 142,25
 
<h2><a name="fun_poi_gi">tl_node_poi_get_info</a></h2>
<p>Áåðåò âíóòðåííèé óêàçàòåëü íà ñòðóêòóðó îïèñûâàþùóþ óçåë. Ïðèìåð èñïîëüçîâàíèÿ ôóíêöèè:</p>
<pre> push dword tree1
push dword 0
call dword[tl_node_poi_get_info]
pop esi</pre>
<pre> stdcall dword[tl_node_poi_get_info], tree1, 0</pre>
<p>ãäå: <b>tree1</b> - ñòðóêòóðà tree_list;
<b>0</b> - ïîçèöèÿ óçëà, ñ êîòîðîãî áåðåòñÿ óêàçàòåëü;
<b>esi</b> - óêàçàòåëü íà ñòðóêòóðó îïèñûâàþùóþ óçåë.</p>
<b>eax</b> - óêàçàòåëü íà ñòðóêòóðó îïèñûâàþùóþ óçåë.</p>
<p><b>Çàìå÷àíèå.</b> Åñëè óçåë ñ óêàçàííûì èíäåêñîì íå íàéäåí, â óêàçàòåëå âîçâðàùàåòñÿ 0.</p>
 
<h2><a name="fun_poi_gni">tl_node_poi_get_next_info</a></h2>
<p>Áåðåò óêàçàòåëü íà ñëåäóþùèé ýëåìåíò â öåïè, áåç ó÷åòà îòêðûòèÿ/çàêðûòèÿ äî÷åðíèõ óçëîâ. Ïðèìåð èñïîëüçîâàíèÿ ôóíêöèè:</p>
<pre> push tree1
push esi
call dword[tl_node_poi_get_next_info]
pop esi ;ïåðåõîäèì ê ñëåäóùåìó óçëó</pre>
<pre> stdcall dword[tl_node_poi_get_next_info], tree1, eax</pre>
<p>ãäå: <b>tree1</b> - ñòðóêòóðà tree_list;
<b>esi</b> - äî âûçîâà ôóíêöèè óêàçàòåëü íà ñòðóêòóðó îïèñûâàþùóþ óçåë, ïîñëå âûçîâà óêàçàòåëü íà ñòðóêòóðó îïèñûâàþùóþ ñëåäóùèé óçåë â öåïè.</p>
<b>eax</b> - äî âûçîâà ôóíêöèè óêàçàòåëü íà ñòðóêòóðó îïèñûâàþùóþ óçåë, ïîñëå âûçîâà óêàçàòåëü íà ñòðóêòóðó îïèñûâàþùóþ ñëåäóùèé óçåë â öåïè.</p>
<p><b>Çàìå÷àíèå.</b> Åñëè ñëåäóùèé óçåë íå íàéäåí, â óêàçàòåëå âîçâðàùàåòñÿ 0.</p>
 
<h2><a name="fun_poi_gd">tl_node_poi_get_data</a></h2>
<p>Áåðåò óêàçàòåëü íà äàííûå (ïîëüçîâàòåëüñêèå è ïîäïèñü) èç óçëà óêàçàííîãî â óêàçàòåëå. Ïðèìåð èñïîëüçîâàíèÿ ôóíêöèè:</p>
<pre> push dword tree1
push dword esi
call dword[tl_node_poi_get_data]
pop eax ;ïîëó÷àåì äàííûå óçëà</pre>
<pre> stdcall dword[tl_node_poi_get_data], tree1,esi</pre>
<p>ãäå: <b>tree1</b> - ñòðóêòóðà tree_list;
<b>esi</b> - óêàçàòåëü íà ñòðóêòóðó îïèñûâàþùóþ óçåë;
<b>eax</b> - óêàçàòåëü íà äàííûå óçëà, îïèñààíîãî â esi.</p>
<b>eax</b> - óêàçàòåëü íà äàííûå óçëà, îïèñàííîãî â esi.</p>
<p>Óêàçàòåëü, âîçâðàùàåìûé ôóíêöèåé <i>tl_node_poi_get_data</i> àíàëîãè÷åí óêàçàòåëþ âîçâðàùàåìîìó ôóíêöèåé <i>tl_node_get_data</i>. Îòëè÷èå ôóíêöèé â òîì, ÷òî <i>tl_node_poi_get_data</i> ðàáîòàåò áåç çàäåéñòâîâàíèÿ êóðñîðà. Ôóíêöèÿìè <i>tl_node_poi_get_info</i>, <i>tl_node_poi_get_next_info</i> è <i>tl_node_poi_get_data</i> ìîæíî ñ÷èòûâàòü èíôîðìàöèþ î óçëàõ ýëåìåíòà, ïðè ýòîì íå ìåíÿÿ òåêóùåãî ïîëîæåíèÿ êóðñîðà. Ò. å. ìîæíî îðãàíèçîâàòü äîñòóï ê äàíûì ýëåìåíòà â &quot;ôîíîâîì ðåæèìå&quot;.</p>
 
<h2><a name="fun_sme">tl_save_mem</a></h2>
181,12 → 168,7
<pre> MEM_SIZE equ 5000
node_data rb MEM_SIZE
.........
push dword tree1
push dword 0
push dword node_data
push dword MEM_SIZE
call dword[tl_save_mem]
pop eax</pre>
stdcall dword[tl_save_mem], tree1, 0, node_data, MEM_SIZE</pre>
<p>ãäå: <b>tree1</b> - ñòðóêòóðà tree_list;
<b>0</b> - îïöèÿ ñîõðàíåíèÿ â íà÷àëî áëîêà ïàìÿòè (åñëè = 1, òî äîáàâëÿåò ýëåìåíò ïîñëå äðóãèõ ñîõðàíåííûõ ðàíåå);
<b>node_data</b> - óêàçàòåëü íà áëîê ïàìÿòè;
198,12 → 180,7
<pre> MEM_SIZE equ 5000
node_data rb MEM_SIZE
.........
push dword tree1
push dword 0
push dword node_data
push dword MEM_SIZE
call dword[tl_load_mem]
pop eax</pre>
stdcall dword[tl_load_mem], tree1, 0, node_data, MEM_SIZE</pre>
<p>ãäå: <b>tree1</b> - ñòðóêòóðà tree_list;
<b>0</b> - èíäåêñ ñ÷èòûâàåìîãî ýëåìåíòà;
<b>node_data</b> - óêàçàòåëü íà áëîê ïàìÿòè;
217,11 → 194,11
node_data rb MEM_SIZE
.........
;ñîõðàíÿåì äàííûå â 'node_data'
stdcall dword[tl_save_mem], MEM_SIZE, node_data, 0, tree1
stdcall dword[tl_save_mem], tree1, 0, node_data, MEM_SIZE
pop eax ;êîä îøèáêè
.........
;ïîëó÷àåì ðàçìåð äàííûõ â 'node_data'
stdcall dword[tl_get_mem_size], node_data, tree1
stdcall dword[tl_get_mem_size], tree1, node_data
pop ecx ;ðàçìåð äàííûõ, äîëæåí áûòü &lt;= MEM_SIZE</pre>
 
<h2><a name="version">version_tree_list</a></h2>
230,8 → 207,12
<h1><a name="struc_tree_list">Ñòðóêòóðà tree_list</a></h1>
<pre>struc tree_list info_size,info_max_count,style, img_cx,img_cy,\
col_bkg,col_zag,col_txt, box_l,box_t,box_w,box_h, capt_cy,info_capt_offs,\
info_capt_len,el_focus, p_scrol,on_press
info_capt_len,el_focus, p_scroll,on_press
{
.box_left dd box_l
.box_top dd box_t
.box_width dd box_w
.box_height dd box_h
.data_info dd 0
.info_size dw info_size
.info_max_count dd info_max_count
242,23 → 223,16
.img_cy dw img_cy
.data_img_sys dd 0
.ch_tim dd 0
.ls_tim dd 0
.tim_undo dd 0
.cur_pos dd 0
.col_bkg dd col_bkg
.col_zag dd col_zag
.col_txt dd col_txt
.box_left dd box_l
.box_top dd box_t
.box_width dd box_w
.box_height dd box_h
.capt_cy dw capt_cy
.info_capt_offs dw info_capt_offs
.info_capt_len dw info_capt_len
.el_focus dd el_focus
.p_scrol dd p_scrol
rb 4
.on_activate dd 0
.p_scroll dd p_scroll
.on_press dd on_press
}</pre>
<p><b>info_size</b> - êîëè÷åñòâî áàéò, êîòîðîå áóäåò âûäåëåíî äëÿ êàæäîãî óçëà. ×àñòü ýòîé ïàìÿòè ïîëüçîâàòåëü ìîæåò èñïîëüçîâàòü äëÿ ñâîèõ öåëåé (ðåãóëèðóåòñÿ ÷åðåç <i>info_capt_offs</i> è <i>info_capt_len</i> ñì. ðèñ. 2) à îñòàëüíàÿ ÷àñòü áóäåò èñïîëüçîâàíà êàê ïîäïèñü óçëà.</p>
274,7 → 248,7
<p><b>col_txt</b> - öâåò òåêñòà.</p>
<p><b>capt_cy</b> - âûñîòà ñòðîêè äëÿ ïîäïèñè ââåðõó ýëåìåíòà, åñëè ìåíüøå 9 ïîäïèñü íå âûâîäèòñÿ.</p>
<p><b>info_capt_len</b> - äëèííà òåêñòà äëÿ ïîäïèñè. Åñëè ðàâíî 0, òî äëèííà ñ÷èòàåòñÿ òàê: <i>info_size - info_capt_offs</i>.</p>
<p><b>p_scrol</b> - óêàçàòåëü íà ñòðóêòóðó ñêðîëëèíãà, ñâÿçàííîãî ñ äàííûì ýëåìåíòîì.</p>
<p><b>p_scroll</b> - óêàçàòåëü íà ñòðóêòóðó ñêðîëëèíãà, ñâÿçàííîãî ñ äàííûì ýëåìåíòîì.</p>
<p><b>on_press</b> - óêàçàòåëü íà ôóíêöèþ, êîòîðàÿ áóäåò âûçâàíà ïðè íàæàòèè [<b>Enter</b>]. Åñëè óêàçàòåëü ðàâåí 0 òî íè÷åãî íå áóäåò âûçûâàòüñÿ.</p>
 
<p><img src="info_size.png"></p>
294,6 → 268,6
<p>Ñòèëü íå îòîáðàæàåò óðîâíè (êàê â ListBox âñå óçëû îäíîãî óðîâíÿ).</p>
 
<hr>
<p>Äîêóìåíòàöèÿ îáíîâëÿëàñü ïîñëåäíèé ðàç 30.09.10.</p>
<p>Äîêóìåíòàöèÿ îáíîâëÿëàñü ïîñëåäíèé ðàç 10.11.15.</p>
</body>
</html>
/programs/develop/libraries/box_lib/trunk/tree_list.mac
1,24 → 1,24
; ìàêðîñ äëÿ ñèñòåìíîé áèáëèîòåêè box_lib.obj
; ýëåìåíò TreeList äëÿ Kolibri OS
; ôàéë ïîñëåäíèé ðàç èçìåíÿëñÿ 04.11.2015 IgorA
; íà êîä ïðèìåíåíà GPL2 ëèöåíçèÿ
; ¬ ªà®á ¤«ï á¨á⥬­®© ¡¨¡«¨®â¥ª¨ box_lib.obj
; í«¥¬¥­â TreeList ¤«ï Kolibri OS
; ä ©« ¯®á«¥¤­¨© à § ¨§¬¥­ï«áï 10.11.2015 IgorA
; ­  ª®¤ ¯à¨¬¥­¥­  GPL2 «¨æ¥­§¨ï
 
 
sizeof.TreeList equ 20
;struct TreeList
; type dw ? ;+ 0 òèï ýëåìåíòà, èëè èíäåêñ èêîíêè äëÿ óçëà
; lev db ? ;+ 2 óðîâåíü ýëåìåíòà
; clo db ? ;+ 3 ôëàã çàêðûòèÿ, èëè îòêðûòèÿ (èìååò ñìûñë äëÿ ðîäèòåëüñêîãî óçëà)
; perv dd ? ;+ 4 èíäåêñ ïðåäûäóùåãî ýëåìåíòà
; next dd ? ;+ 8 èíäåêñ ïîñëåäóþùåãî ýëåìåíòà
; tc dd ? ;+12 âðåì. ñîçäàíèÿ
; td dd ? ;+16 âðåì. óäàëåíèÿ
; type dw ? ;+ 0 ⨯ í«¥¬¥­â , ¨«¨ ¨­¤¥ªá ¨ª®­ª¨ ¤«ï 㧫 
; lev db ? ;+ 2 ã஢¥­ì í«¥¬¥­â 
; clo db ? ;+ 3 ä« £ § ªàëâ¨ï, ¨«¨ ®âªàëâ¨ï (¨¬¥¥â á¬ëá« ¤«ï த¨â¥«ì᪮£® 㧫 )
; perv dd ? ;+ 4 ¨­¤¥ªá ¯à¥¤ë¤ã饣® í«¥¬¥­â 
; next dd ? ;+ 8 ¨­¤¥ªá ¯®á«¥¤ãî饣® í«¥¬¥­â 
; tc dd ? ;+12 ¢à¥¬. ᮧ¤ ­¨ï
; td dd ? ;+16 ¢à¥¬. 㤠«¥­¨ï
;ends
 
macro use_tree_list
{
 
;âûäåëíèå ïàìÿòè äëÿ ñòðóêòóð ñïèñêà è îñíîâíîé èíôîðìàöèè (êîíñòðóêòîð)
;¢ë¤¥«­¨¥ ¯ ¬ï⨠¤«ï áâàãªâãà ᯨ᪠ ¨ ®á­®¢­®© ¨­ä®à¬ æ¨¨ (ª®­áâàãªâ®à)
align 4
proc tl_data_init uses eax ecx edi, tlist:dword
mov edi,dword[tlist]
27,22 → 27,22
mov cx,tl_info_size
imul ecx,tl_info_max_count
invoke mem.alloc,ecx
mov tl_data_info,eax ;êîïèðóåì óêàçàòåëü íà ïîëó÷åíóþ ïàìÿòü â ñòðóêòóðó
mov tl_data_img,0 ;îáíóëÿåì óêàçàòåëü 'data_img'
mov tl_data_img_sys,0 ;îáíóëÿåì óêàçàòåëü 'data_img_sys'
mov tl_data_info,eax ;ª®¯¨à㥬 㪠§ â¥«ì ­  ¯®«ã祭ãî ¯ ¬ïâì ¢ áâàãªâãàã
mov tl_data_img,0 ;®¡­ã«ï¥¬ 㪠§ â¥«ì 'data_img'
mov tl_data_img_sys,0 ;®¡­ã«ï¥¬ 㪠§ â¥«ì 'data_img_sys'
 
mov ecx,sizeof.TreeList
imul ecx,tl_info_max_count
invoke mem.alloc,ecx
mov tl_data_nodes,eax ;êîïèðóåì óêàçàòåëü íà ïîëó÷åíóþ ïàìÿòü â ñòðóêòóðó
mov tl_data_nodes,eax ;ª®¯¨à㥬 㪠§ â¥«ì ­  ¯®«ã祭ãî ¯ ¬ïâì ¢ áâàãªâãàã
 
stdcall tl_info_clear, edi
 
;íàñòðîéêè äî÷åðíåãî ñêðîëëèíãà
cmp tl_p_scrol,0
;­ áâனª¨ ¤®ç¥à­¥£® áªà®««¨­£ 
cmp tl_p_scroll,0
je @f
mov eax,tl_p_scrol
;*** öâåòîâûå íàñòðîéêè ***
mov eax,tl_p_scroll
;*** æ¢¥â®¢ë¥ ­ áâனª¨ ***
mov ecx,tl_col_bkg
mov dword[eax+sb_offs_bckg_col],ecx
mov ecx,tl_col_zag
49,7 → 49,7
mov dword[eax+sb_offs_frnt_col],ecx
mov ecx,tl_col_txt
mov dword[eax+sb_offs_line_col],ecx
;*** íàñòðîéêè ðàçìåðîâ ***
;*** ­ áâனª¨ à §¬¥à®¢ ***
mov ecx,tl_box_left
add ecx,tl_box_width
mov word[eax+2],cx
61,7 → 61,7
ret
endp
 
;î÷èñòêà ïàìÿòè ýëåìåíòà (äåñòðóêòîð)
;®ç¨á⪠ ¯ ¬ïâ¨ í«¥¬¥­â  (¤¥áâàãªâ®à)
align 4
proc tl_data_clear uses edi, tlist:dword
;uses eax ???
68,11 → 68,11
mov edi,dword[tlist]
cmp tl_data_img,0
je @f
invoke mem.free,tl_data_img ;÷èñòêà ñèñòåìíûõ èêîíîê
invoke mem.free,tl_data_img ;ç¨á⪠ á¨á⥬­ëå ¨ª®­®ª
@@:
cmp tl_data_img_sys,0
je @f
invoke mem.free,tl_data_img_sys ;÷èñòêà ñèñòåìíûõ èêîíîê
invoke mem.free,tl_data_img_sys ;ç¨á⪠ á¨á⥬­ëå ¨ª®­®ª
@@:
invoke mem.free,tl_data_info
invoke mem.free,tl_data_nodes
79,12 → 79,11
ret
endp
 
;î÷èñòêà ñïèñêà (èíôîðìàöèè)
;®ç¨á⪠ ᯨ᪠ (¨­ä®à¬ æ¨¨)
align 4
proc tl_info_clear uses eax ecx edi, tlist:dword
mov edi,dword[tlist]
mov tl_ch_tim,0
mov dword[edi+34],0 ;ls_tim
mov tl_tim_undo,0
mov tl_cur_pos,0
mov ecx,sizeof.TreeList
91,15 → 90,15
imul ecx,tl_info_max_count
mov eax,tl_data_nodes
@@:
mov byte[eax],0 ;÷èñòèì óçëû 0-ìè
mov byte[eax],0 ;ç¨á⨬ 㧫ë 0-¬¨
inc eax
loop @b
mov eax,tl_data_nodes ;óêàçàòåëü íà 0-é óçåë
mov dword[eax+8],1 ;óêàçàòåëü next â 0-ì óçëå ïðèðàâíèâàåì ê 1
mov eax,tl_data_nodes ;㪠§ â¥«ì ­  0-© 㧥«
mov dword[eax+8],1 ;㪠§ â¥«ì next ¢ 0-¬ 㧫¥ ¯à¨à ¢­¨¢ ¥¬ ª 1
 
cmp tl_p_scrol,0 ;îáðàáîòêà ñêðîëëèíãà
cmp tl_p_scroll,0 ;®¡à ¡®âª  áªà®««¨­£ 
je @f
mov eax,tl_p_scrol
mov eax,tl_p_scroll
mov dword[eax+sb_offs_position],0
call tb_scrol_resize
@@:
106,7 → 105,7
ret
endp
 
;ðåàêöèÿ íà êëàâèàòóðó
;ॠªæ¨ï ­  ª« ¢¨ âãàã
align 4
proc tl_key uses ebx ecx edi, tlist:dword
mov edi,dword[tlist]
113,13 → 112,13
 
mov ebx,tl_el_focus
cmp dword[ebx],edi
jne .no_focus ;ýëåìåíò íå â ôîêóñå
jne .no_focus ;í«¥¬¥­â ­¥ ¢ 䮪ãá¥
 
push eax
mcall 66,2 ;ïîëó÷èòü ðåæèì ââîäà ñ êëàâèàòóðû
mcall 66,2 ;¯®«ãç¨âì ०¨¬ ¢¢®¤  á ª« ¢¨ âãàë
 
lea ecx,[tl_key_scan]
cmp eax,1 ;1 = ñêàíêîäû
cmp eax,1 ;1 = ᪠­ª®¤ë
je @f
lea ecx,[tl_key_ascii]
@@:
179,33 → 178,33
ret
endp
 
;ðåàêöèÿ íà ìûøü
;ॠªæ¨ï ­  ¬ëèì
align 4
proc tl_mouse, tlist:dword
pushad
mov edi,dword[tlist]
 
mcall 37,1 ;êîîðäèíàòû ìûøè îòíîñèòåëüíî îêíà
mcall 37,1 ;ª®®à¤¨­ âë ¬ëè¨ ®â­®á¨â¥«ì­® ®ª­ 
 
mov ebx,tl_box_left
shl ebx,16
cmp eax,ebx ;ëåâàÿ ãðàíèöà îêíà
jl .no_in_wnd ;.test_scroll íå ïðèìåíÿåì
cmp eax,ebx ;«¥¢ ï £à ­¨æ  ®ª­ 
jl .no_in_wnd ;.test_scroll ­¥ ¯à¨¬¥­ï¥¬
 
shr ebx,16
add ebx,tl_box_width
shl ebx,16
cmp eax,ebx ;ïðàâàÿ ãðàíèöà îêíà
cmp eax,ebx ;¯à ¢ ï £à ­¨æ  ®ª­ 
jg .test_scroll
 
mov ebx,tl_box_top
add ebx,tl_box_height
cmp ax,bx ;íèæíÿÿ ãðàíèöà îêíà
cmp ax,bx ;­¨¦­ïï £à ­¨æ  ®ª­ 
jg .test_scroll
 
sub ebx,tl_box_height
add bx,tl_capt_cy
cmp ax,bx ;âåðõíÿÿ ãðàíèöà îêíà + âûñîòà ïîäïèñè
cmp ax,bx ;¢¥àå­ïï £à ­¨æ  ®ª­  + ¢ëá®â  ¯®¤¯¨á¨
jl .test_scroll
 
push eax ebx
229,10 → 228,10
xor ecx,ecx
mov cx,tl_img_cy
div ecx
cmp tl_p_scrol,0 ;ó÷èòûâàåì ñêðîëëèíã
cmp tl_p_scroll,0 ;ãç¨â뢠¥¬ áªà®««¨­£
je @f
mov edx,tl_p_scrol
add eax,dword[edx+sb_offs_position] ;äîáàâëÿåì ñêðîëëèíã íà âåðõó
mov edx,tl_p_scroll
add eax,dword[edx+sb_offs_position] ;¤®¡ ¢«ï¥¬ áªà®««¨­£ ­  ¢¥àåã
@@:
 
mov ecx,eax
239,15 → 238,15
call tl_get_node_count ;eax = node count
cmp eax,ecx
jl @f
mov eax,ecx ;åñëè êóðñîð íå âûøåë çà ïðåäåëû óçëîâ, âîññòàíàâëèâàåì ñòàðîå çíà÷åíèå eax
mov eax,ecx ;¥á«¨ ªãàá®à ­¥ ¢ë襫 §  ¯à¥¤¥«ë 㧫®¢, ¢®ááâ ­ ¢«¨¢ ¥¬ áâ à®¥ §­ ç¥­¨¥ eax
@@:
 
cmp eax,tl_cur_pos ;åñëè íîâîå çíà÷åíèå êóðñîðà ñîâïàëî ñ ïðåäûäóùèì
je @f ;òî íå ñòèðàåì êóðñîð
cmp eax,tl_cur_pos ;¥á«¨ ­®¢®¥ §­ ç¥­¨¥ ªãàá®à  ᮢ¯ «® á ¯à¥¤ë¤ã騬
je @f ;â® ­¥ áâ¨à ¥¬ ªãàá®à
push esi
mov esi,tl_box_top
add esi,tl_box_height ;esi = coord bottom border
call tl_draw_null_cursor ;ñòèðàåì êóðñîð
call tl_draw_null_cursor ;áâ¨à ¥¬ ªãàá®à
pop esi
@@:
 
256,15 → 255,15
; if '+' or '-' press
call tl_get_cur_node_index ;eax = node index
cmp eax,2
jl .no_open_close ;êóðñîð ñòîèò íà ïóñòîì ìåñòå, áåç óçëîâ
jl .no_open_close ;ªãàá®à á⮨⠭  ¯ãá⮬ ¬¥áâ¥, ¡¥§ 㧫®¢
imul eax,sizeof.TreeList
add eax,tl_data_nodes
xor bx,bx
mov bl,byte[eax+2] ;+2 lev ñîõðàíÿåì óðîâåíü òåêóùåãî óçëà
inc bx ;+ ïîëå äëÿ êóðñîðà
mov bl,byte[eax+2] ;+2 lev á®å࠭塞 ã஢¥­ì ⥪ã饣® 㧫 
inc bx ;+ ¯®«¥ ¤«ï ªãàá®à 
 
cmp si,tl_img_cx
jl .no_open_close ;ìûøåé ïîïàëè íà ëåâîå ïîëå äëÿ êóðñîðà, ãäå òî÷íî íåò '+' è '-'
jl .no_open_close ;¬ë襩 ¯®¯ «¨ ­  «¥¢®¥ ¯®«¥ ¤«ï ªãàá®à , £¤¥ â®ç­® ­¥â '+' ¨ '-'
mov eax,esi
xor edx,edx
xor ecx,ecx
279,45 → 278,45
 
mov esi,tl_box_top
add esi,tl_box_height ;esi = coord bottom border
call tl_draw_cursor ;ïåðåðèñîâêà êóðñîðà
call tl_draw_cursor ;¯¥à¥à¨á®¢ª  ªãàá®à 
call tl_draw_caption_cur_pos
jmp .no_draw
;--- mouse event for children scrollbar ----------------------------------------
.test_scroll:
mov edx,tl_p_scrol
mov edx,tl_p_scroll
cmp edx,0
je .no_in_wnd ;ïîëüçîâàòåëü íå ñîçäàë äî÷åðíåãî ñêðîëëèíãà
je .no_in_wnd ;¯®«ì§®¢ â¥«ì ­¥ ᮧ¤ « ¤®ç¥à­¥£® áªà®««¨­£ 
shr ebx,16
add bx,word[edx] ;+0 .size_x
shl ebx,16
cmp eax,ebx ;ïðàâàÿ ãðàíèöà îêíà
cmp eax,ebx ;¯à ¢ ï £à ­¨æ  ®ª­ 
jg .no_in_wnd
 
mov eax,dword[edx+sb_offs_max_area]
cmp eax,dword[edx+sb_offs_cur_area]
jbe .no_in_wnd ;âñå óçëû ïîïàäàþò â îêíî ñêðîëëèíãà
jbe .no_in_wnd ;¢á¥ ã§«ë ¯®¯ ¤ îâ ¢ ®ª­® áªà®««¨­£ 
stdcall scroll_bar_vertical.mouse, edx ;scrollbar_ver_mouse
 
cmp dword[edx+sb_offs_redraw],0
je @f
mov dword[edx+sb_offs_redraw],0
stdcall tl_draw, edi ;ïðîèçîøëè èçìåíåíèÿ ñêðîëëèíãà
stdcall tl_draw, edi ;¯à®¨§®è«¨ ¨§¬¥­¥­¨ï áªà®««¨­£ 
@@:
cmp dword[edx+sb_offs_delta2],0
jne .no_draw ;ïîïàëè íà ñêðîëëèíã - íå ñíèìàåì ôîêóñ ñ TreeList
jne .no_draw ;¯®¯ «¨ ­  áªà®««¨­£ - ­¥ á­¨¬ ¥¬ 䮪ãá á TreeList
;-------------------------------------------------------------------------------
.no_in_wnd: ;íå ïîïàëè â îêíî - ïîòåðÿ ôîêóñà (ïðè óñëîâèè ÷òî ôîêóñ áûë íà äàííîì ýåëåìåíòå)
mcall 37,2 ;ïðîâåðÿåì íàæàòîñòü ëþáûõ êíîïîê
cmp eax,0 ;íè÷åãî íå íàæàëè eax=0
.no_in_wnd: ;­¥ ¯®¯ «¨ ¢ ®ª­® - ¯®â¥àï 䮪ãá  (¯à¨ ãá«®¢¨¨ ç⮠䮪ãá ¡ë« ­  ¤ ­­®¬ í¥«¥¬¥­â¥)
mcall 37,2 ;¯à®¢¥à塞 ­ ¦ â®áâì «î¡ëå ª­®¯®ª
cmp eax,0 ;­¨ç¥£® ­¥ ­ ¦ «¨ eax=0
je .no_draw
 
mov ebx,tl_el_focus
cmp dword[ebx],edi
jne .no_draw ;ýëåìåíò íå â ôîêóñå
jne .no_draw ;í«¥¬¥­â ­¥ ¢ 䮪ãá¥
mov dword[ebx],0 ;reset focus
mov esi,tl_box_top
add esi,tl_box_height ;esi = coord bottom border
call tl_draw_cursor ;ðèñóåì êóðñîð ñ ïîòåðÿíûì ôîêóñîì
call tl_draw_cursor ;à¨á㥬 ªãàá®à á ¯®â¥àï­ë¬ 䮪ãᮬ
.no_draw:
 
popad
324,7 → 323,7
ret
endp
 
;îòìåíà äåéñòâèÿ
;®â¬¥­  ¤¥©á⢨ï
align 4
proc tl_info_undo uses eax edi, tlist:dword
mov edi,dword[tlist]
332,12 → 331,12
cmp tl_ch_tim,eax
jbe @f
inc tl_tim_undo
call tb_scrol_resize ;îáðàáîòêà ñêðîëëèíãà
call tb_scrol_resize ;®¡à ¡®âª  áªà®««¨­£ 
@@:
ret
endp
 
;ïîâòîð äåéñòâèÿ
;¯®¢â®à ¤¥©á⢨ï
align 4
proc tl_info_redo uses edi, tlist:dword
mov edi,dword[tlist]
344,13 → 343,13
cmp tl_tim_undo,1
jl @f
dec tl_tim_undo
call tb_scrol_resize ;îáðàáîòêà ñêðîëëèíãà
call tb_scrol_resize ;®¡à ¡®âª  áªà®««¨­£ 
@@:
ret
endp
 
;óäàëåíèå îòìåíåííûõ äåéñòâèé
;âíóòðåííÿÿ ôóíêöèÿ, íå äëÿ ýêñïîðòà
;㤠«¥­¨¥ ®â¬¥­¥­­ëå ¤¥©á⢨©
;¢­ãâ७­ïï äã­ªæ¨ï, ­¥ ¤«ï íªá¯®àâ 
align 4
tl_info_set_undo:
cmp tl_tim_undo,1
364,14 → 363,10
mov eax,tl_tim_undo
sub tl_ch_tim,eax ;ch_tim-=tim_undo;
mov eax,tl_ch_tim
cmp [edi+34],eax ;if(ls_tim>ch_tim)
jle @f
mov dword[edi+34],0 ;ls_tim=0
@@:
cmp edx,ecx
jle @f
 
;if(node[i].tc>ch_tim){ // åñëè ñîçäàíèå ñèìâîëà áûëî îòìåíåíî
;if(node[i].tc>ch_tim){ // ¥á«¨ ᮧ¤ ­¨¥ ᨬ¢®«  ¡ë«® ®â¬¥­¥­®
cmp dword[edx+12],eax
jle .no_u1
mov dword[edx+12],0
391,7 → 386,7
 
.no_u1:
 
;else if(node[i].td>ch_tim) node[i].td=0; // åñëè óäàëåíèå ñèìâîëà áûëî îòìåíåíî
;else if(node[i].td>ch_tim) node[i].td=0; // ¥á«¨ 㤠«¥­¨¥ ᨬ¢®«  ¡ë«® ®â¬¥­¥­®
cmp dword[edx+16],eax
jle .no_u2
mov dword[edx+16],0
411,7 → 406,7
 
ret
 
;âûâîä ñïèñêà íà ýêðàí
;¢ë¢®¤ ᯨ᪠ ­  íªà ­
align 4
proc tl_draw, tlist:dword
pushad
473,11 → 468,11
mov ecx,edx
add ecx,sizeof.TreeList
 
;*** ïðîïóñê óçëîâ, êîòîðûå ïðîìîòàíû ñêðîëëèíãîì ***
cmp tl_p_scrol,0 ;åñëè åñòü óêàçàòåëü íà ñêðîëëèíã
;*** ¯à®¯ã᪠㧫®¢, ª®â®àë¥ ¯à®¬®â ­ë áªà®««¨­£®¬ ***
cmp tl_p_scroll,0 ;¥á«¨ ¥áâì 㪠§ â¥«ì ­  áªà®««¨­£
je .end_c1
mov esi,tl_p_scrol
cmp dword[esi+sb_offs_position],0 ;åñëè ñêðîëëèíã íà âåðõó, âûõîäèì
mov esi,tl_p_scroll
cmp dword[esi+sb_offs_position],0 ;¥á«¨ áªà®««¨­£ ­  ¢¥àåã, ¢ë室¨¬
je .end_c1
@@:
call tl_iterat_next
503,9 → 498,9
 
call tl_draw_cursor
 
mov edi,tl_p_scrol ;ðèñóåì äî÷åðíèé ñêðîëëèíã
cmp edi,0 ;äëÿ òîãî ÷òî-áû åãî íå ïðèøëîñü ðèñîâàòü â ïîëüçîâàòåëüñêîé ïðîãðàììå
je .end_draw ;åñëè íåò ñêðîëëèíãà âûõîäèì
mov edi,tl_p_scroll ;à¨á㥬 ¤®ç¥à­¨© áªà®««¨­£
cmp edi,0 ;¤«ï ⮣® çâ®-¡ë ¥£® ­¥ ¯à¨è«®áì à¨á®¢ âì ¢ ¯®«ì§®¢ â¥«ì᪮© ¯à®£à ¬¬¥
je .end_draw ;¥á«¨ ­¥â áªà®««¨­£  ¢ë室¨¬
stdcall scroll_bar_vertical.draw, edi
 
.end_draw:
513,7 → 508,7
ret
endp
 
;ïåðåõîä íà ñëåäóùèé âèäèìûé óçåë (ïðîïóñêàÿ çàêðûòûå)
;¯¥à¥å®¤ ­  á«¥¤ã騩 ¢¨¤¨¬ë© 㧥« (¯à®¯ãáª ï § ªàëâë¥)
;input:
; ecx = pointer to 1 node struct
; edx = pointer to some node struct
537,10 → 532,10
call tl_move_next
cmp edx,ecx
jle @f
call tl_node_not_vis ;ïðîïóñê óäàëåííûõ è îòìåíåííûõ
call tl_node_not_vis ;¯à®¯ã᪠㤠«¥­­ëå ¨ ®â¬¥­¥­­ëå
cmp al,1
je .beg0
cmp bl,byte[edx+2] ;ïðîïóñê çàêðûòûõ
cmp bl,byte[edx+2] ;¯à®¯ã᪠§ ªàëâëå
jl .beg0
@@:
pop eax
551,15 → 546,15
call tl_move_next
cmp edx,ecx
jle .endif
cmp dword[edx+16],0 ;td = 'time delete' -> ïðîïóñê óäàëåííûõ
cmp dword[edx+16],0 ;td = 'time delete' -> ¯à®¯ã᪠㤠«¥­­ëå
jne .else
cmp bl,byte[edx+2] ;ïðîïóñê çàêðûòûõ
cmp bl,byte[edx+2] ;¯à®¯ã᪠§ ªàëâëå
jl .else
.endif:
pop bx
ret
 
;ïåðåõîä íà ñëåäóùèé âèäèìûé óçåë (è íà çàêðûòûå òîæå)
;¯¥à¥å®¤ ­  á«¥¤ã騩 ¢¨¤¨¬ë© 㧥« (¨ ­  § ªàëâë¥ â®¦¥)
;input:
; ecx = pointer to 1 node struct
; edx = pointer to some node struct
591,7 → 586,7
.endif:
ret
 
;ïåðåõîä íà ïðåäûäóùèé âèäèìûé óçåë (ïðîïóñêàÿ çàêðûòûå)
;¯¥à¥å®¤ ­  ¯à¥¤ë¤ã騩 ¢¨¤¨¬ë© 㧥« (¯à®¯ãáª ï § ªàëâë¥)
;input:
; ecx = pointer to 1 node struct
; edx = pointer to some node struct
606,7 → 601,7
call tl_move_perv
cmp edx,ecx
jle @f
call tl_node_not_vis ;ïðîïóñê óäàëåííûõ è îòìåíåííûõ
call tl_node_not_vis ;¯à®¯ã᪠㤠«¥­­ëå ¨ ®â¬¥­¥­­ëå
cmp al,1
je .beg0
 
614,7 → 609,7
call tl_move_perv
cmp edx,ecx
jle @f
cmp dword[edx+16],0 ;td = 'time delete' -> ïðîïóñê óäàëåííûõ
cmp dword[edx+16],0 ;td = 'time delete' -> ¯à®¯ã᪠㤠«¥­­ëå
jne .beg1
 
@@:
622,7 → 617,7
pop eax
ret
 
;íàõîäèò ðîäèòåëüñêèé çàêðûòûé óçåë ìàêñèìàëüíîãî óðîâíÿ
;­ å®¤¨â த¨â¥«ì᪨© § ªàëâë© ã§¥« ¬ ªá¨¬ «ì­®£® ã஢­ï
;input:
; edx = pointer to some node struct
; edi = pointer to 'TreeList' struct
634,7 → 629,7
xor ebx,ebx
.beg:
call tl_move_par
cmp byte[edx+3],1 ;ðîäèòåëüñêèé óçåë çàêðûò ?
cmp byte[edx+3],1 ;த¨â¥«ì᪨© 㧥« § ªàëâ ?
jne @f
mov eax,edx
@@:
671,7 → 666,7
add edx,tl_data_nodes
ret
 
;ïåðåäâèãàåìñÿ íà ðîäèòåëüñêèé óçåë, åñëè òàêîãî íåò, òî îñòàâëÿåì ñòàðîå çíà÷åíèå óêàçàòåëÿ
;¯¥à¥¤¢¨£ ¥¬áï ­  த¨â¥«ì᪨© 㧥«, ¥á«¨ â ª®£® ­¥â, â® ®áâ ¢«ï¥¬ áâ à®¥ §­ ç¥­¨¥ 㪠§ â¥«ï
;input:
; ecx =
; edx = pointer to some node struct
681,7 → 676,7
align 4
tl_move_par:
cmp byte[edx+2],0
je .end_f ;óçåë 0-ãî óðîâíÿ íå ìîæåò áûòü äî÷åðíèì
je .end_f ;㧥« 0-£® ã஢­ï ­¥ ¬®¦¥â ¡ëâì ¤®ç¥à­¨¬
push eax ebx esi
mov esi,edx ;copy node pointer (edx)
mov bl,byte[edx+2]
688,12 → 683,12
@@:
call tl_move_perv
cmp edx,ecx
jle @f ;âñå âûøå ñòîÿùèå óçëû íå ðîäèòåëüñêèå
call tl_node_not_vis ;ïðîïóñê óäàëåííûõ è îòìåíåííûõ
jle @f ;¢á¥ ¢ëè¥ áâ®ï騥 ã§«ë ­¥ த¨â¥«ì᪨¥
call tl_node_not_vis ;¯à®¯ã᪠㤠«¥­­ëå ¨ ®â¬¥­¥­­ëå
cmp al,1
je @b
cmp byte[edx+2],bl
jl .end_0 ;óäà÷íî íàøëè ðîäèòåëüñêèé óçåë
jl .end_0 ;㤠筮 ­ è«¨ த¨â¥«ì᪨© 㧥«
jmp @b
@@:
mov esi,ebx ;restore node pointer
702,7 → 697,7
.end_f:
ret
 
;ïðîâåðÿåò âèäèìûé ëè óêàçàííûé óçåë ñ ó÷åòîì: äîáàâëåíèé, óäàëåíèé, îòìåí äåéñòâèé
;¯à®¢¥àï¥â ¢¨¤¨¬ë© «¨ 㪠§ ­­ë© 㧥« á ãç¥â®¬: ¤®¡ ¢«¥­¨©, 㤠«¥­¨©, ®â¬¥­ ¤¥©á⢨©
;input:
; edx = pointer to symbol struct
; edi = pointer to 'TreeList' struct
731,7 → 726,7
xor al,al
ret
 
;ðèñóåì êóðñîð íà ýêðàíå
;à¨á㥬 ªãàá®à ­  íªà ­¥
;input:
; edi = pointer to TreeInfo struct
; esi = coord bottom border
739,9 → 734,9
proc tl_draw_cursor uses eax ebx ecx edx esi
call tl_get_display_cur_pos ;eax = cursor pos in screen
cmp eax,0
jl .end_f ;êóðñîð íàõîäèòñÿ âûøå îêíà, â îáëàñòè ïðîêðó÷åííîé ñêðîëëèíãîì
jl .end_f ;ªãàá®à ­ å®¤¨âáï ¢ëè¥ ®ª­ , ¢ ®¡« á⨠¯à®ªàã祭­®© áªà®««¨­£®¬
 
cmp tl_data_img_sys,0 ;ñìîòðèì åñòü ëè óêàçàòåëü íà êàðòèíêó ñèñòåìíûõ èêîíîê
cmp tl_data_img_sys,0 ;ᬮâਬ ¥áâì «¨ 㪠§ â¥«ì ­  ª à⨭ªã á¨á⥬­ëå ¨ª®­®ª
jne @f
mov ebx,tl_box_left
shl ebx,16
753,7 → 748,7
add cx,tl_capt_cy
 
;crop image if on the border
cmp esi,ecx ;åñëè êóðñîð âíèçó è åãî âîîáùå íå âèäíî
cmp esi,ecx ;¥á«¨ ªãàá®à ¢­¨§ã ¨ ¥£® ¢®®¡é¥ ­¥ ¢¨¤­®
jl .end_f
 
sub esi,ecx
761,11 → 756,11
mov cx,tl_img_cy
cmp si,tl_img_cy
jge .crop0
mov cx,si ;åñëè êóðñîð âèäåí ÷àñòè÷íî (ïîïàë íà íèæíþþ ãðàíèöó)
mov cx,si ;¥á«¨ ªãàá®à ¢¨¤¥­ ç áâ¨ç­® (¯®¯ « ­  ­¨¦­îî £à ­¨æã)
.crop0:
 
mov edx,tl_col_txt
mcall 13 ;ðèñóåì ïðîñòîé ïðÿìîóãîëüíèê, ò.ê. íåò ñèñòåìíûõ èêîíîê
mcall 13 ;à¨á㥬 ¯à®á⮩ ¯àאַ㣮«ì­¨ª, â.ª. ­¥â á¨á⥬­ëå ¨ª®­®ª
jmp .end_f
@@:
mov ebx,tl_data_img_sys
776,10 → 771,10
add edx,tl_box_top
add dx,tl_capt_cy
 
mov ecx,tl_el_focus ;ïðîâåðÿåì â ôîêóñå ýëåìåíò èëè íåò
mov ecx,tl_el_focus ;¯à®¢¥à塞 ¢ 䮪ãá¥ í«¥¬¥­â ¨«¨ ­¥â
cmp dword[ecx],edi
je .focus
;åñëè íå â ôîêóñå ñäâèãàåì êîîðäèíàòû íà èêîíêó íå àêòèâíîãî êóðñîðà
;¥á«¨ ­¥ ¢ 䮪ãᥠᤢ¨£ ¥¬ ª®®à¤¨­ âë ­  ¨ª®­ªã ­¥  ªâ¨¢­®£® ªãàá®à 
xor eax,eax
xor ecx,ecx
mov cx,tl_img_cx
794,21 → 789,21
mov cx,tl_img_cy
 
;crop image if on the border
cmp si,dx ;åñëè êóðñîð âíèçó è åãî âîîáùå íå âèäíî
cmp si,dx ;¥á«¨ ªãàá®à ¢­¨§ã ¨ ¥£® ¢®®¡é¥ ­¥ ¢¨¤­®
jl .end_f
 
sub si,dx
cmp si,tl_img_cy
jge .crop1
mov cx,si ;åñëè êóðñîð âèäåí ÷àñòè÷íî (ïîïàë íà íèæíþþ ãðàíèöó)
mov cx,si ;¥á«¨ ªãàá®à ¢¨¤¥­ ç áâ¨ç­® (¯®¯ « ­  ­¨¦­îî £à ­¨æã)
.crop1:
 
mcall 7 ;ðèñóåì èêîíêó êóðñîðà
mcall 7 ;à¨á㥬 ¨ª®­ªã ªãàá®à 
.end_f:
ret
endp
 
;ñòèðàåì êóðñîð íà ýêðàíå
;áâ¨à ¥¬ ªãàá®à ­  íªà ­¥
;input:
; edi = pointer to TreeInfo struct
; esi = coord bottom border
816,7 → 811,7
proc tl_draw_null_cursor uses eax ebx ecx edx esi
call tl_get_display_cur_pos ;eax = cursor pos in screen
cmp eax,0
jl .end_f ;êóðñîð íàõîäèòñÿ âûøå îêíà, â îáëàñòè ïðîêðó÷åííîé ñêðîëëèíãîì
jl .end_f ;ªãàá®à ­ å®¤¨âáï ¢ëè¥ ®ª­ , ¢ ®¡« á⨠¯à®ªàã祭­®© áªà®««¨­£®¬
 
mov ebx,tl_box_left
shl ebx,16
828,7 → 823,7
add cx,tl_capt_cy
 
;crop image if on the border
cmp esi,ecx ;åñëè êóðñîð âíèçó è åãî âîîáùå íå âèäíî
cmp esi,ecx ;¥á«¨ ªãàá®à ¢­¨§ã ¨ ¥£® ¢®®¡é¥ ­¥ ¢¨¤­®
jl .end_f
 
sub esi,ecx
836,17 → 831,17
mov cx,tl_img_cy
cmp si,tl_img_cy
jge @f
mov cx,si ;åñëè êóðñîð âèäåí ÷àñòè÷íî (ïîïàë íà íèæíþþ ãðàíèöó)
mov cx,si ;¥á«¨ ªãàá®à ¢¨¤¥­ ç áâ¨ç­® (¯®¯ « ­  ­¨¦­îî £à ­¨æã)
@@:
 
mov edx,tl_col_bkg
mcall 13 ;ðèñóåì ïðîñòîé ïðÿìîóãîëüíèê ñ ôîíîâûì öâåòîì
mcall 13 ;à¨á㥬 ¯à®á⮩ ¯àאַ㣮«ì­¨ª á ä®­®¢ë¬ 梥⮬
 
.end_f:
ret
endp
 
;áåðåò ïîçèöèþ êóðñîðà, îòíîñèòåëüíî ýêðàíà
;¡¥à¥â ¯®§¨æ¨î ªãàá®à , ®â­®á¨â¥«ì­® íªà ­ 
;input:
; edi = pointer to TreeInfo struct
;output:
854,17 → 849,17
align 4
tl_get_display_cur_pos:
mov eax,tl_cur_pos
cmp tl_p_scrol,0
cmp tl_p_scroll,0
je @f
push ebx
mov ebx,tl_p_scrol
mov ebx,tl_p_scroll
mov ebx,dword[ebx+sb_offs_position]
sub eax,ebx ;îòíèìàåì ïîçèöèþ ñêðîëëèíãà
sub eax,ebx ;®â­¨¬ ¥¬ ¯®§¨æ¨î áªà®««¨­£ 
pop ebx
@@:
ret
 
;ðèñóåò óçåë ñ: êàðòèíêîé, ïîäïèñüþ, èêîíêîé îòêðûòèÿ/çàêðûòèÿ è ëèíèÿìè ê ðîäèò. óçëó
;à¨áã¥â 㧥« á: ª à⨭ª®©, ¯®¤¯¨áìî, ¨ª®­ª®© ®âªàëâ¨ï/§ ªàëâ¨ï ¨ «¨­¨ï¬¨ ª த¨â. 㧫ã
;input:
; eax = node position
; edx = pointer to some node struct
872,11 → 867,11
; esi = coord of bottom border
align 4
proc tl_draw_node uses eax ebx ecx edx esi
mov ebx,1 ;1 - ìåñòî ïîä êóðñîð
mov ebx,1 ;1 - ¬¥áâ® ¯®¤ ªãàá®à
bt tl_style,2 ;tl_list_box_mode
jc @f
inc ebx ;+1 - ìåñòî ïîä çíàê +,-
add bl,byte[edx+2] ;äîáàâëÿåì óðîâåíü ýëåìåíòà äëÿ åãî ó÷åòà â ëåâîì îòñòóïå èêîíêè
inc ebx ;+1 - ¬¥áâ® ¯®¤ §­ ª +,-
add bl,byte[edx+2] ;¤®¡ ¢«ï¥¬ ã஢¥­ì í«¥¬¥­â  ¤«ï ¥£® ãç¥â  ¢ «¥¢®¬ ®âáâ㯥 ¨ª®­ª¨
@@:
imul bx,tl_img_cx
add ebx,tl_box_left
890,7 → 885,7
add cx,tl_capt_cy
 
;crop image if on the border
cmp esi,ecx ;åñëè óçåë âíèçó è åãî âîîáùå íå âèäíî
cmp esi,ecx ;¥á«¨ 㧥« ¢­¨§ã ¨ ¥£® ¢®®¡é¥ ­¥ ¢¨¤­®
jl .end_draw
 
sub esi,ecx
898,8 → 893,8
mov cx,tl_img_cy
cmp si,tl_img_cy
jge @f
mov cx,si ;åñëè óçåë âèäåí ÷àñòè÷íî (ïîïàë íà íèæíþþ ãðàíèöó)
jmp .crop ;ïðîïóñêàåì ðèñîâàíèå íàäïèñè, êîòîðàÿ ñêîðåå âñåãî òîæå âûëåçåò çà íèæíþþ ãðàíèöó
mov cx,si ;¥á«¨ 㧥« ¢¨¤¥­ ç áâ¨ç­® (¯®¯ « ­  ­¨¦­îî £à ­¨æã)
jmp .crop ;¯à®¯ã᪠¥¬ à¨á®¢ ­¨¥ ­ ¤¯¨á¨, ª®â®à ï ᪮॥ ¢á¥£® ⮦¥ ¢ë«¥§¥â §  ­¨¦­îî £à ­¨æã
@@:
call tl_draw_node_caption
.crop:
941,18 → 936,18
dec ah
.close:
 
call tl_draw_node_icon_opn_clo ;ðèñîâàíèå èêîíêè îòêðûòîãî èëè çàêðûòîãî óçëà
call tl_draw_node_icon_opn_clo ;à¨á®¢ ­¨¥ ¨ª®­ª¨ ®âªàë⮣® ¨«¨ § ªàë⮣® 㧫 
bt tl_style,1
jae .end_draw
call tl_draw_node_icon_par_lin ;ðèñîâàíèå ëèíèè ê ðîäèòåëüñêîìó ýëåìåíòó
call tl_draw_node_icon_par_lin_up ;ðèñîâàíèå âåðòèêàëüíîé ëèíèè ê ðîäèòåëüñêîìó ýëåìåíòó
call tl_draw_node_icon_par_lin ;à¨á®¢ ­¨¥ «¨­¨¨ ª த¨â¥«ì᪮¬ã í«¥¬¥­âã
call tl_draw_node_icon_par_lin_up ;à¨á®¢ ­¨¥ ¢¥à⨪ «ì­®© «¨­¨¨ ª த¨â¥«ì᪮¬ã í«¥¬¥­âã
.end_draw:
ret
endp
 
;ðèñóåò èêîíêè îòêðûòîãî èëè çàêðûòîãî óçëà (îáû÷íî + èëè -)
;à¨áã¥â ¨ª®­ª¨ ®âªàë⮣® ¨«¨ § ªàë⮣® 㧫  (®¡ëç­® + ¨«¨ -)
;input:
; al = óðîâåíü ýëåìåíòà
; al = ã஢¥­ì í«¥¬¥­â 
; ecx = pointer to 1 node struct
; edx = pointer to some node struct
;...
992,9 → 987,9
ret
endp
 
;ðèñîâàíèå ëèíèè ê ðîäèòåëüñêîìó ýëåìåíòó
;à¨á®¢ ­¨¥ «¨­¨¨ ª த¨â¥«ì᪮¬ã í«¥¬¥­âã
;input:
; al = óðîâåíü ýëåìåíòà
; al = ã஢¥­ì í«¥¬¥­â 
; ecx = pointer to 1 node struct
; edx = pointer to some node struct
;...
1051,7 → 1046,7
 
 
;input:
; al = óðîâåíü ýëåìåíòà
; al = ã஢¥­ì í«¥¬¥­â 
; ecx = pointer to 1 node struct
; edx = pointer to some node struct
; edi = pointer to 'TreeList' struct
1064,8 → 1059,8
cmp al,0
je @f
 
xor esi,esi ;â si áóäåì íàñ÷èòûâàòü êîë-âî èêîíîê, íóæíûõ äëÿ ïðîðèñîâêè ëèíèè
;--- öèêë äëÿ âû÷èñëåíèÿ êîëëè÷åñòâà âåðòèêàëüíûõ ëèíèé ---
xor esi,esi ;¢ si ¡ã¤¥¬ ­ áç¨â뢠âì ª®«-¢® ¨ª®­®ª, ­ã¦­ëå ¤«ï ¯à®à¨á®¢ª¨ «¨­¨¨
;--- 横« ¤«ï ¢ëç¨á«¥­¨ï ª®««¨ç¥á⢠ ¢¥à⨪ «ì­ëå «¨­¨© ---
.cycle0:
call tl_iterat_perv ;get perv visible item
cmp edx,ecx
1072,11 → 1067,11
jle .cycle1 ;if begin of list
 
cmp byte[edx+2],al
jle .cycle0end ;óðîâåíü âåðõíåãî ýëåìåíòà íå òðåáóåò ïðîðèñîâêè
jle .cycle0end ;ã஢¥­ì ¢¥àå­¥£® í«¥¬¥­â  ­¥ âॡã¥â ¯à®à¨á®¢ª¨
inc si
jmp .cycle0
.cycle0end:
cmp si,0 ;si = êîë-âî èêîíîê ëèíèè êîòîðûå íóæíî íàðèñîâàòü ñâåðõó
cmp si,0 ;si = ª®«-¢® ¨ª®­®ª «¨­¨¨ ª®â®àë¥ ­ã¦­® ­ à¨á®¢ âì ᢥàåã
je @f
shl esi,16
 
1099,17 → 1094,17
add ebx,tl_data_img_sys
 
add esi,tl_box_top
add si,tl_capt_cy ;si = âåðõíÿÿ ãðàíèöà îêíà
add si,tl_capt_cy ;si = ¢¥àå­ïï £à ­¨æ  ®ª­ 
mov eax,7
;--- öèêë äëÿ ðèñîâàíèÿ âåðòèêàëüíîé ëèíèè ---
;--- 横« ¤«ï à¨á®¢ ­¨ï ¢¥à⨪ «ì­®© «¨­¨¨ ---
.cycle1:
sub dx,tl_img_cy ;ïîäíèìàåì êîîðäèíàòó y ââåðõ
sub dx,tl_img_cy ;¯®¤­¨¬ ¥¬ ª®®à¤¨­ âã y ¢¢¥àå
cmp dx,si
jl @f
cmp esi,0x10000
jl @f
int 0x40 ;draw line icon
sub esi,0x10000 ;óìåíüøàåì ñ÷åò÷èê èêîíîê
sub esi,0x10000 ;㬥­ìè ¥¬ áç¥â稪 ¨ª®­®ª
jmp .cycle1
@@:
pop esi
1134,8 → 1129,8
 
;input:
; eax = node position
; ebx = [êîîðäèíàòà ïî îñè x]*65536 + [img_cx]
; ecx = [êîîðäèíàòà ïî îñè y]*65536 + [img_cy]
; ebx = [ª®®à¤¨­ â  ¯® ®á¨ x]*65536 + [img_cx]
; ecx = [ª®®à¤¨­ â  ¯® ®á¨ y]*65536 + [img_cy]
; edx = pointer to some node struct
; edi = pointer to TreeInfo struct
align 4
1156,8 → 1151,8
mov edx,esi
 
shr ebx,16
add bx,tl_img_cx ;ñäâèãàåì íàäïèñü ïî ãîðèçîíòàëè --->
add bx,3 ;îòñòóï
add bx,tl_img_cx ;ᤢ¨£ ¥¬ ­ ¤¯¨áì ¯® £®à¨§®­â «¨ --->
add bx,3 ;®âáâã¯
;bx = coord. x
call tl_strlen ;eax = strlen
call tl_get_draw_text_len
1164,8 → 1159,8
mov cx,bx
ror ecx,16
mov ebx,ecx
add bx,tl_img_cy ;âûðàâíèâèíèå ïî íèæíåé ãðàíèöå èêîíêè
sub bx,9 ;îòíèìàåì âûñîòó òåêñòà
add bx,tl_img_cy ;¢ëà ¢­¨¢¨­¨¥ ¯® ­¨¦­¥© £à ­¨æ¥ ¨ª®­ª¨
sub bx,9 ;®â­¨¬ ¥¬ ¢ëá®âã ⥪áâ 
mov ecx,tl_col_txt
and ecx,0xffffff
; or ecx,0x80000000 ;text is ASCIIZ
1182,20 → 1177,20
align 4
tl_get_draw_text_len:
push eax ecx edx
mov esi,eax ;áåðåì äëèííó ñòðîêè
mov esi,eax ;¡¥à¥¬ ¤«¨­­ã áâப¨
 
mov eax,tl_box_left
add eax,tl_box_width
cmp eax,ebx
jle .text_null ;åñëè ïîäïèñü ïîëíîñòüþ âñÿ çà ýêðàíîì
jle .text_null ;¥á«¨ ¯®¤¯¨áì ¯®«­®áâìî ¢áï §  íªà ­®¬
sub eax,ebx
xor edx,edx
mov ecx,6 ;øèðèíà ñèñòåìíîãî øðèôòà
div ecx ;ñìîòðèì ñêîëüêî ñèìâîëîâ ìîæåò ïîìåñòèòüñÿ íà ýêðàíå
mov ecx,6 ;è¨à¨­  á¨á⥬­®£® èà¨äâ 
div ecx ;ᬮâਬ ᪮«ìª® ᨬ¢®«®¢ ¬®¦¥â ¯®¬¥áâ¨âìáï ­  íªà ­¥
 
cmp esi,eax
jl @f
mov esi,eax ;åñëè äëèííà òåêñòà ìåíüøå, ÷åì âñå ìåñòî ïîä ñòðîêó
mov esi,eax ;¥á«¨ ¤«¨­­  ⥪áâ  ¬¥­ìè¥, 祬 ¢á¥ ¬¥áâ® ¯®¤ áâபã
jmp @f
.text_null:
xor esi,esi
1219,13 → 1214,13
sub eax,esi
ret
 
;äîáàâèòü óçåë
;¤®¡ ¢¨âì 㧥«
;input:
; tlist - óêàçàòåëü íà ñòðóêòóðó ëèñòà
; n_opt - îïöèè äîáàâëåíèÿ
; n_info - óêàçàòåëü íà äîáàâëÿåìûå äàííûå
; tlist - 㪠§ â¥«ì ­  áâàãªâãàã «¨áâ 
; n_opt - ®¯æ¨¨ ¤®¡ ¢«¥­¨ï
; n_info - 㪠§ â¥«ì ­  ¤®¡ ¢«ï¥¬ë¥ ¤ ­­ë¥
align 4
proc tl_node_add uses eax ebx ecx edx edi, n_info:dword, n_opt:dword, tlist:dword
proc tl_node_add uses eax ebx ecx edx edi, tlist:dword, n_opt:dword, n_info:dword
mov edi,dword[tlist]
 
call tl_info_set_undo
1286,7 → 1281,7
mov cx,tl_info_capt_offs
cmp cx,tl_info_size
jge .no_text_data
cmp tl_info_capt_len,0 ;ïðîâåðÿåì åñòü ëè îãðàíè÷åíèå íà äëèííó ñòðîêè
cmp tl_info_capt_len,0 ;¯à®¢¥à塞 ¥áâì «¨ ®£à ­¨ç¥­¨¥ ­  ¤«¨­­ã áâப¨
je .no_len_ogran
add cx,tl_info_capt_len
and ecx,0xffff
1310,13 → 1305,13
cmp eax,tl_info_max_count
jge .u0
 
mov [ecx],eax ;node[po_t].next=i; // ññûëêè ïåðåíàïðàâëÿåì
mov [ecx],eax ;node[po_t].next=i; // áá뫪¨ ¯¥à¥­ ¯à ¢«ï¥¬
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 ;îáðàáîòêà ñêðîëëèíãà
call tb_scrol_resize ;®¡à ¡®âª  áªà®««¨­£ 
jmp @f
.u0:
add edx,sizeof.TreeList
1330,7 → 1325,7
; edi = pointer to TreeInfo struct
align 4
proc tb_scrol_resize uses eax ecx edx
cmp tl_p_scrol,0 ;îáðàáîòêà ñêðîëëèíãà
cmp tl_p_scroll,0 ;®¡à ¡®âª  áªà®««¨­£ 
je @f
call tl_get_node_count ;eax = node count
mov ecx,eax
1340,7 → 1335,7
xor ecx,ecx
.ye_sb:
 
mov edx,tl_p_scrol
mov edx,tl_p_scroll
mov dword[edx+sb_offs_cur_area],eax
mov dword[edx+sb_offs_max_area],ecx
stdcall scroll_bar_vertical.draw,edx
1351,7 → 1346,7
;input:
;n_info - pointer to node info
align 4
proc tl_node_set_data uses eax ecx edx edi esi, n_info:dword, tlist:dword
proc tl_node_set_data uses eax ecx edx edi esi, tlist:dword, n_info:dword
mov edi,dword[tlist]
call tl_get_cur_node_index ;eax=po_t
cmp eax,2
1369,7 → 1364,7
mov cx,tl_info_capt_offs
cmp cx,tl_info_size
jge .no_text_data
mov ax,tl_info_capt_len ;ïðîâåðÿåì åñòü ëè îãðàíè÷åíèå íà äëèííó òåêñòà
mov ax,tl_info_capt_len ;¯à®¢¥à塞 ¥áâì «¨ ®£à ­¨ç¥­¨¥ ­  ¤«¨­­ã ⥪áâ 
cmp ax,0
je .no_limit
add cx,ax ;cx = tl_info_capt_offs + tl_info_capt_len
1377,12 → 1372,12
xor eax,eax
mov ax,tl_info_size
cmp eax,ecx
jl .no_limit ;ïîëüçîâàòåëü çàäàë ñëèøêîì áîëüøóþ äëèííó òåêñòà
jl .no_limit ;¯®«ì§®¢ â¥«ì § ¤ « ᫨誮¬ ¡®«ìèãî ¤«¨­­ã ⥪áâ 
add esi,ecx
sub esi,eax
.no_limit:
dec esi
mov byte[esi],0 ;îáíóëÿåì ïîñëåäíèé ñèìâîë ïîäïèñè, ÷òî-áû íå ãëþ÷èëî åñëè ïîëüçîâàòåëü çàäàë íåïðàâèëüíóþ ñòðóêòóðó
mov byte[esi],0 ;®¡­ã«ï¥¬ ¯®á«¥¤­¨© ᨬ¢®« ¯®¤¯¨á¨, çâ®-¡ë ­¥ £«î稫® ¥á«¨ ¯®«ì§®¢ â¥«ì § ¤ « ­¥¯à ¢¨«ì­ãî áâàãªâãàã
.no_text_data:
 
@@:
1389,69 → 1384,66
ret
endp
 
;¢§ïâì 㪠§ â¥«ì ­  ¤ ­­ë¥ 㧫  ¯®¤ ªãàá®à®¬
;input:
;dword[ebp+ 8] - pointer to 'TreeList' struct
; tlist - pointer to 'TreeList' struct
;output:
; eax - pointer to node data
align 4
tl_node_get_data: ;âçÿòü óêàçàòåëü íà äàííûå óçëà ïîä êóðñîðîì
push ebp
mov ebp,esp
push eax ecx edi
mov edi,dword[ebp+8]
proc tl_node_get_data uses ecx edi, tlist:dword
mov edi,dword[tlist]
call tl_get_cur_node_index ;eax=po_t
mov dword[ebp+8],0 ;if return 0 pointer
cmp eax,2
jl @f
xor ecx,ecx
mov cx,tl_info_size
movzx ecx,tl_info_size
imul eax,ecx
add eax,tl_data_info
mov dword[ebp+8],eax ;return node data pointer
jmp .end_f ;return node data pointer
@@:
pop edi ecx eax
pop ebp
xor eax,eax
.end_f:
ret
endp
 
;¢§ïâì 㪠§ â¥«ì ­  áâàãªâãàã 㧫  ¢ 㪠§ ­­®© ¯®§¨æ¨¨
;input:
;dword[ebp+ 8] - node index
;dword[ebp+12] - pointer to 'TreeList' struct
; tlist - pointer to 'TreeList' struct
; node_ind - node index
;output:
; eax - pointer to node info
align 4
tl_node_poi_get_info: ;âçÿòü óêàçàòåëü íà ñòðóêòóðó óçëà â óêàçàííîé ïîçèöèè
push ebp
mov ebp,esp
push eax ecx edx edi
mov edi,dword[ebp+12]
mov eax,dword[ebp+8]
proc tl_node_poi_get_info uses ebx ecx edi, tlist:dword, node_ind:dword
mov edi,dword[tlist]
mov ebx,dword[node_ind]
 
;cycle to nodes
mov edx,tl_data_nodes
mov ecx,edx
mov eax,tl_data_nodes
mov ecx,eax
add ecx,sizeof.TreeList
@@:
call tl_iterat_next_all
cmp edx,ecx
cmp eax,ecx
jle @f
dec eax
cmp eax,0
dec ebx
cmp ebx,0
jg @b
jmp .find
@@:
xor edx,edx
xor eax,eax
.find:
mov dword[ebp+12],edx
pop edi edx ecx eax
pop ebp
ret 4
ret
endp
 
;¢§ïâì 㪠§ â¥«ì ­  á«¥¤ãéãî áâàãªâãàã 㧫 
;input:
;dword[ebp+ 8] - node param struct
;dword[ebp+12] - pointer to 'TreeList' struct
; tlist - pointer to 'TreeList' struct
; node_p - node param struct
;output:
; eax - pointer to next node struct
align 4
tl_node_poi_get_next_info: ;âçÿòü óêàçàòåëü íà ñëåäóùóþ ñòðóêòóðó óçëà
push ebp
mov ebp,esp
push ecx edx edi
mov edi,dword[ebp+12]
mov edx,dword[ebp+8]
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]
 
mov ecx,tl_data_nodes
add ecx,sizeof.TreeList
1461,24 → 1453,21
jg @f
xor edx,edx
@@:
mov eax,edx
ret
endp
 
mov dword[ebp+12],edx
pop edi edx ecx
pop ebp
ret 4
 
;¢§ïâì 㪠§ â¥«ì ­  ¤ ­­ë¥ 㧫 
;input:
;dword[ebp+ 8] - node param struct
;dword[ebp+12] - pointer to 'TreeList' struct
; tlist - pointer to 'TreeList' struct
; node_p - node param struct
;output:
; eax - pointer
align 4
tl_node_poi_get_data: ;âçÿòü óêàçàòåëü íà äàííûå óçëà
push ebp
mov ebp,esp
push eax ecx edx edi
mov edi,dword[ebp+12]
mov edx,dword[ebp+8]
proc tl_node_poi_get_data uses ecx edx edi, tlist:dword, node_p:dword
mov edi,dword[tlist]
mov edx,dword[node_p]
 
mov dword[ebp+12],0
call tl_get_node_index ;eax = node index
cmp eax,2
jl @f
1485,14 → 1474,15
xor ecx,ecx
mov cx,tl_info_size
imul eax,ecx
add eax,dword[edi]
mov dword[ebp+12],eax ;return node data pointer
add eax,tl_data_info
jmp .end_f ;return node data pointer
@@:
pop edi edx ecx eax
pop ebp
ret 4
xor eax,eax ;¢®§¢à é ¥¬ 0 ¢ á«ãç ¥ ­¥ 㤠筮£® ¯®¨áª 
.end_f:
ret
endp
 
;áåðåò ïîçèöèþ ïîä êóðñîðîì
;¡¥à¥â ¯®§¨æ¨î ¯®¤ ªãàá®à®¬
;input:
; edi = pointer 'tl' struct
;output:
1521,7 → 1511,7
ret
endp
 
;áåðåò ïîçèöèþ óêàçàííîãî ñèìâîëà
;¡¥à¥â ¯®§¨æ¨î 㪠§ ­­®£® ᨬ¢®« 
;input:
; edx = pointer node memory
; edi = pointer 'tl' struct
1538,7 → 1528,7
pop edx ecx
ret
 
;óäàëèòü óçåë
;㤠«¨âì 㧥«
align 4
proc tl_node_delete uses eax edx edi, tlist:dword
mov edi,dword[tlist]
1551,19 → 1541,19
inc tl_ch_tim
mov eax,tl_ch_tim
mov dword[edx+16],eax
call tb_scrol_resize ;îáðàáîòêà ñêðîëëèíãà
call tb_scrol_resize ;®¡à ¡®âª  áªà®««¨­£ 
@@:
ret
endp
 
;ïîñòàâèòü êóðñîð íà ïåðâûé óçåë
;¯®áâ ¢¨âì ªãàá®à ­  ¯¥à¢ë© 㧥«
align 4
proc tl_cur_beg uses edi, tlist:dword
mov edi,dword[tlist]
mov tl_cur_pos,0
cmp tl_p_scrol,0
cmp tl_p_scroll,0
je @f
mov edi,tl_p_scrol
mov edi,tl_p_scroll
mov dword[edi+sb_offs_position],0
stdcall scroll_bar_vertical.draw, edi
@@:
1570,7 → 1560,7
ret
endp
 
;ïåðåíåñòè êóðñîð íà 1 ïîçèöèþ íèæå
;¯¥à¥­¥á⨠ªãàá®à ­  1 ¯®§¨æ¨î ­¨¦¥
align 4
proc tl_cur_next uses eax ebx edi esi, tlist:dword
mov edi,dword[tlist]
1580,13 → 1570,13
jge .no_redraw
mov esi,tl_box_top
add esi,tl_box_height ;esi = coord bottom border
call tl_draw_null_cursor ;ñòèðàåì êóðñîð
call tl_draw_null_cursor ;áâ¨à ¥¬ ªãàá®à
inc tl_cur_pos
 
cmp tl_p_scrol,0 ;if not scrol struct
cmp tl_p_scroll,0 ;if not scrol struct
je @f
call tl_get_rows_count ;eax = rows count
mov ebx,tl_p_scrol
mov ebx,tl_p_scroll
add eax,dword[ebx+sb_offs_position]
cmp tl_cur_pos,eax
jl @f
1593,17 → 1583,17
inc dword[ebx+sb_offs_position]
stdcall scroll_bar_vertical.draw,ebx
 
stdcall tl_draw,dword[tlist] ;ïîëíàÿ ïåðåðèñîâêà îêíà
stdcall tl_draw,dword[tlist] ;¯®«­ ï ¯¥à¥à¨á®¢ª  ®ª­ 
jmp .no_redraw
@@:
mov edi,dword[tlist] ;restore edi
call tl_draw_cursor ;ïåðåðèñîâêà êóðñîðà
call tl_draw_cursor ;¯¥à¥à¨á®¢ª  ªãàá®à 
call tl_draw_caption_cur_pos
.no_redraw:
ret
endp
 
;áåðåò ÷èñëî âñåõ âèäèìûõ óçëîâ (íå ñ÷èòàÿ çàêðûòûõ äî÷åðíèõ)
;¡¥à¥â ç¨á«® ¢á¥å ¢¨¤¨¬ëå 㧫®¢ (­¥ áç¨â ï § ªàëâëå ¤®ç¥à­¨å)
;input:
; edi = pointer 'tl' struct
;output:
1626,7 → 1616,7
pop edx ecx
ret
 
;áåðåò ÷èñëî âñåõ âèäèìûõ óçëîâ (ñ÷èòàÿ çàêðûòûå äî÷åðíèå)
;¡¥à¥â ç¨á«® ¢á¥å ¢¨¤¨¬ëå 㧫®¢ (áç¨â ï § ªàëâë¥ ¤®ç¥à­¨¥)
;input:
; edi = pointer 'tl' struct
;output:
1649,7 → 1639,7
pop edx ecx
ret
 
;ïåðåíåñòè êóðñîð íà 1 ïîçèöèþ âûøå
;¯¥à¥­¥á⨠ªãàá®à ­  1 ¯®§¨æ¨î ¢ëè¥
align 4
proc tl_cur_perv uses eax edi esi, tlist:dword
mov edi,dword[tlist]
1657,50 → 1647,48
je .no_redraw
mov esi,tl_box_top
add esi,tl_box_height ;esi = coord bottom border
call tl_draw_null_cursor ;ñòèðàåì êóðñîð
dec tl_cur_pos ;äâèãàåì êóðñîð ââåðõ
call tl_draw_null_cursor ;áâ¨à ¥¬ ªãàá®à
dec tl_cur_pos ;¤¢¨£ ¥¬ ªãàá®à ¢¢¥àå
 
cmp tl_p_scrol,0 ;åñëè åñòü óêàçàòåëü íà ñêðîëëèíã
cmp tl_p_scroll,0 ;¥á«¨ ¥áâì 㪠§ â¥«ì ­  áªà®««¨­£
je @f
mov eax,tl_p_scrol
cmp dword[eax+sb_offs_position],0 ;åñëè ñêðîëëèíã íà âåðõó, âûõîäèì
mov eax,tl_p_scroll
cmp dword[eax+sb_offs_position],0 ;¥á«¨ áªà®««¨­£ ­  ¢¥àåã, ¢ë室¨¬
je @f
mov edi,tl_cur_pos
cmp edi,dword[eax+sb_offs_position] ;åñëè êóðñîð óøåë âûøå ñêðîëëèíãà, òîãäà îïóñêàåì ñêðîëëèíã
cmp edi,dword[eax+sb_offs_position] ;¥á«¨ ªãàá®à ã襫 ¢ëè¥ áªà®««¨­£ , ⮣¤  ®¯ã᪠¥¬ áªà®««¨­£
jge @f
dec dword[eax+sb_offs_position]
stdcall scroll_bar_vertical.draw, eax
stdcall tl_draw, dword[tlist] ;ïîëíàÿ ïåðåðèñîâêà îêíà
stdcall tl_draw, dword[tlist] ;¯®«­ ï ¯¥à¥à¨á®¢ª  ®ª­ 
jmp .no_redraw
@@:
mov edi,dword[tlist] ;restore edi
;mov esi,tl_box_top
;add esi,tl_box_height ;esi = coord bottom border
call tl_draw_cursor ;ïåðåðèñîâêà êóðñîðà
call tl_draw_cursor ;¯¥à¥à¨á®¢ª  ªãàá®à 
call tl_draw_caption_cur_pos
.no_redraw:
ret
endp
 
;ïåðåíåñòè êóðñîð íà 1 ñòðàíèöó âûøå
;¯¥à¥­¥á⨠ªãàá®à ­  1 áâà ­¨æã ¢ëè¥
align 4
proc tl_cur_page_up uses eax edi esi, tlist:dword
mov edi,dword[tlist]
 
cmp tl_p_scrol,0 ;åñëè åñòü óêàçàòåëü íà ñêðîëëèíã
cmp tl_p_scroll,0 ;¥á«¨ ¥áâì 㪠§ â¥«ì ­  áªà®««¨­£
je .no_redraw
 
mov esi,tl_p_scrol
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 ;åñëè ñêðîëëèíã íà âåðõó, âûõîäèì
cmp dword[esi+sb_offs_position],0 ;¥á«¨ áªà®««¨­£ ­  ¢¥àåã, ¢ë室¨¬
jne @f
jmp .no_redraw
@@:
cmp tl_cur_pos,eax ;ïðîâåðÿåì ïîçèöèþ êóðñîðà è êîë-âî ñòîê íà ñòðàíèöå
jl @f ;åñëè ìåíüøå, òî ïðèðàâíèâàåì ê 0, ÷òî-áû íå îòíÿòü áîëüøå ÷åì íàäî
cmp tl_cur_pos,eax ;¯à®¢¥à塞 ¯®§¨æ¨î ªãàá®à  ¨ ª®«-¢® á⮪ ­  áâà ­¨æ¥
jl @f ;¥á«¨ ¬¥­ìè¥, â® ¯à¨à ¢­¨¢ ¥¬ ª 0, çâ®-¡ë ­¥ ®â­ïâì ¡®«ìè¥ ç¥¬ ­ ¤®
sub tl_cur_pos,eax
jmp .cursor
@@:
1713,7 → 1701,7
@@:
mov dword[esi+sb_offs_position],0
.scroll:
;ïåðåðèñîâêè îêíà è ñêðîëëèíãà
;¯¥à¥à¨á®¢ª¨ ®ª­  ¨ áªà®««¨­£ 
stdcall tl_draw, edi ;draw window
stdcall scroll_bar_vertical.draw, esi
.no_redraw:
1720,52 → 1708,52
ret
endp
 
;ïåðåíåñòè êóðñîð íà 1 ñòðàíèöó íèæå
;¯¥à¥­¥á⨠ªãàá®à ­  1 áâà ­¨æã ­¨¦¥
align 4
proc tl_cur_page_down uses eax ebx ecx edi esi, tlist:dword
;eax - êîë-âî ñòðîê íà ñòðàíèöå
;ebx - ìàêñ. ïîçèöèÿ êóðñîðà
;ecx - ìàêñ. ïîçèöèÿ ñêðîëëèíãà
;eax - ª®«-¢® áâப ­  áâà ­¨æ¥
;ebx - ¬ ªá. ¯®§¨æ¨ï ªãàá®à 
;ecx - ¬ ªá. ¯®§¨æ¨ï áªà®««¨­£ 
mov edi,dword[tlist]
 
cmp tl_p_scrol,0 ;åñëè åñòü óêàçàòåëü íà ñêðîëëèíã
cmp tl_p_scroll,0 ;¥á«¨ ¥áâì 㪠§ â¥«ì ­  áªà®««¨­£
je .no_redraw
 
mov esi,tl_p_scrol
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 ;åñëè íèæíèé óçåë âèäåí íà ïîëîâèíó
inc ecx ;¥á«¨ ­¨¦­¨© 㧥« ¢¨¤¥­ ­  ¯®«®¢¨­ã
cmp ecx,eax ;if (ecx>eax) { ecx=ecx-eax } else { ecx=0 }
jl @f
sub ecx,eax ;óìåíüøàåì ìàêñèìàëüíóþ ïîçèöèþ ñêðîëëèíãà, òàê ÷òî-áû áûëè âèäíû ïîñëåäíèå óçëû
sub ecx,eax ;㬥­ìè ¥¬ ¬ ªá¨¬ «ì­ãî ¯®§¨æ¨î áªà®««¨­£ , â ª çâ®-¡ë ¡ë«¨ ¢¨¤­ë ¯®á«¥¤­¨¥ 㧫ë
jmp .control
@@:
xor ecx,ecx ;ecx=0 - âñå óçëû âëàçÿò â ýêðàí, ñêðîëëèíã íå íóæåí
xor ecx,ecx ;ecx=0 - ¢á¥ ã§«ë ¢« §ïâ ¢ íªà ­, áªà®««¨­£ ­¥ ­ã¦¥­
.control:
 
cmp tl_cur_pos,ebx ;êóðñîð âíèçó ?
cmp tl_cur_pos,ebx ;ªãàá®à ¢­¨§ã ?
jl @f
cmp dword[esi+sb_offs_position],ecx ;ñêðîëëèíã âíèçó ?
cmp dword[esi+sb_offs_position],ecx ;áªà®««¨­£ ¢­¨§ã ?
jl @f
jmp .no_redraw
@@:
 
add tl_cur_pos,eax ;ïåðåìåùàåì êóðñîð
add tl_cur_pos,eax ;¯¥à¥¬¥é ¥¬ ªãàá®à
cmp tl_cur_pos,ebx
jl @f
mov tl_cur_pos,ebx
@@:
 
add dword[esi+sb_offs_position],eax ;ïåðåìåùàåì ñêðîëëèíã
add dword[esi+sb_offs_position],eax ;¯¥à¥¬¥é ¥¬ áªà®««¨­£
cmp dword[esi+sb_offs_position],ecx
jl @f
mov dword[esi+sb_offs_position],ecx
@@:
 
;ïåðåðèñîâêè îêíà è ñêðîëëèíãà
;¯¥à¥à¨á®¢ª¨ ®ª­  ¨ áªà®««¨­£ 
stdcall tl_draw, edi ;draw window
stdcall scroll_bar_vertical.draw, esi
.no_redraw:
1772,34 → 1760,34
ret
endp
 
;îòêðûòü/çàêðûòü óçåë (ðàáîòàåò ñ óçëàìè êîòîðûå èìåþò äî÷åðíèå óçëû)
;®âªàëâì/§ ªàëâì 㧥« (à ¡®â ¥â á 㧫 ¬¨ ª®â®àë¥ ¨¬¥îâ ¤®ç¥à­¨¥ 㧫ë)
align 4
proc tl_node_close_open uses eax edx edi, tlist:dword
mov edi,dword[tlist]
call tl_get_cur_node_index ;eax = ïîçèöèÿ óçëà íà êîòîðîì ñòîèò êóðñîð
cmp eax,2 ;êóðñîð ñòîèò íà óçëå ?
call tl_get_cur_node_index ;eax = ¯®§¨æ¨ï 㧫  ­  ª®â®à®¬ á⮨⠪ãàá®à
cmp eax,2 ;ªãàá®à á⮨⠭  㧫¥ ?
jl @f
imul eax,sizeof.TreeList
add eax,tl_data_nodes
;eax = óêàçàòåëü íà ñòðóêòóðó óçëà âûáðàííîãî êóðñîðîì
push dword edi
push dword eax
call tl_node_poi_get_next_info
pop dword edx ;edx = óêàçàòåëü íà ñòðóêòóðó óçëà êîòîðûé èäåò ïîñëå óçëà eax
cmp edx,0 ;åñòü ëè óçëû íèæå âûáðàííîãî íàìè ?
;eax = 㪠§ â¥«ì ­  áâàãªâãàã 㧫  ¢ë¡à ­­®£® ªãàá®à®¬
push eax
stdcall tl_node_poi_get_next_info, edi,eax
mov edx,eax ;edx = 㪠§ â¥«ì ­  áâàãªâãàã 㧫  ª®â®àë© ¨¤¥â ¯®á«¥ 㧫  eax
pop eax
cmp edx,0 ;¥áâì «¨ ã§«ë ­¨¦¥ ¢ë¡à ­­®£® ­ ¬¨ ?
je @f
mov dl,byte[edx+2] ;áåðåì óðîâåíü íèæíåãî óçëà
mov dl,byte[edx+2] ;¡¥à¥¬ ã஢¥­ì ­¨¦­¥£® 㧫 
cmp byte[eax+2],dl ;+2 = .lev
jge @f ;åñëè íèæíèå óçëû ìåíüøåãî óðîâíÿ, çíà÷èò îíè íå äî÷åðíèå, êîíåö ôóíêöèè
xor byte[eax+3],1 ;+3 = .clo *** îòêðûòèå/çàêðûòèå óçëà ***
call tb_scrol_resize ;îáðàáîòêà ñêðîëëèíãà
jge @f ;¥á«¨ ­¨¦­¨¥ ã§«ë ¬¥­ì襣® ã஢­ï, §­ ç¨â ®­¨ ­¥ ¤®ç¥à­¨¥, ª®­¥æ ä㭪樨
xor byte[eax+3],1 ;+3 = .clo *** ®âªàë⨥/§ ªàë⨥ 㧫  ***
call tb_scrol_resize ;®¡à ¡®âª  áªà®««¨­£ 
 
stdcall tl_draw, edi ;îáíîâëåíèå îêíà
stdcall tl_draw, edi ;®¡­®¢«¥­¨¥ ®ª­ 
@@:
ret
endp
 
;óâåëè÷èòü óðîâåíü
;㢥«¨ç¨âì ã஢¥­ì
align 4
proc tl_node_lev_inc uses eax ecx edx edi, tlist:dword
mov edi,dword[tlist]
1814,19 → 1802,19
add ecx,sizeof.TreeList ;ecx = pointer to 1 node struct
 
mov edx,eax
call tl_iterat_perv ;ïðîâåðÿåì åñòü ëè âåðõíèé óçåë
call tl_iterat_perv ;¯à®¢¥à塞 ¥áâì «¨ ¢¥àå­¨© 㧥«
cmp edx,ecx
jle @f ;åñëè âåðõíåãî óçëà íåò òî òåêóùèé óçåë íå äâèãàåì
mov cl,byte[edx+2] ;áåðåì óðîâåíü ðîäèòåëüñêîãî óçëà
inc cl ;äîáàâëÿåì 1 è ïîëó÷àåì ìàêñèìàëüíîå çíà÷åíèå
jle @f ;¥á«¨ ¢¥àå­¥£® 㧫  ­¥â ⮠⥪ã騩 㧥« ­¥ ¤¢¨£ ¥¬
mov cl,byte[edx+2] ;¡¥à¥¬ ã஢¥­ì த¨â¥«ì᪮£® 㧫 
inc cl ;¤®¡ ¢«ï¥¬ 1 ¨ ¯®«ãç ¥¬ ¬ ªá¨¬ «ì­®¥ §­ ç¥­¨¥
cmp byte[eax+2],cl
jge @f
inc byte[eax+2] ;óâåëè÷èâàåì çíà÷åíèå óçëà
inc byte[eax+2] ;㢥«¨ç¨¢ ¥¬ §­ ç¥­¨¥ 㧫 
@@:
ret
endp
 
;óìåíüøèòü óðîâåíü
;㬥­ìè¨âì ã஢¥­ì
align 4
proc tl_node_lev_dec uses eax edi, tlist:dword
mov edi,dword[tlist]
1842,7 → 1830,7
ret
endp
 
;ïåðåìåùàåì óçåë ââåðõ
;¯¥à¥¬¥é ¥¬ 㧥« ¢¢¥àå
align 4
proc tl_node_move_up uses eax ebx ecx edx edi esi, tlist:dword
mov edi,dword[tlist]
1863,10 → 1851,10
jle @f
cmp dword[edx+8],ebx ;+8 next
jne .po8
call tl_node_move_po6 ;óçëû èäóò ïîäðÿä ìåíÿåì 6 ññûëîê
call tl_node_move_po6 ;ã§«ë ¨¤ãâ ¯®¤àï¤ ¬¥­ï¥¬ 6 ááë«®ª
jmp .cur_mov
.po8:
call tl_node_move_po8 ;óçëû èäóò íå ïîäðÿä ìåíÿåì 8 ññûëîê
call tl_node_move_po8 ;ã§«ë ¨¤ãâ ­¥ ¯®¤àï¤ ¬¥­ï¥¬ 8 ááë«®ª
.cur_mov:
push dword edi
call tl_cur_perv
1876,7 → 1864,7
ret
endp
 
;ïåðåìåùàåì óçåë âíèç
;¯¥à¥¬¥é ¥¬ 㧥« ¢­¨§
align 4
proc tl_node_move_down uses eax ebx ecx edx edi esi, tlist:dword
mov edi,dword[tlist]
1897,12 → 1885,12
jle @f
cmp dword[esi+8],eax ;+8 next
jne .po8
xchg eax,ebx ;ìåíÿå ïîðÿäîê ñëåäîâàíèÿ çàìåíÿåìûõ óçëîâ
xchg eax,ebx ;¬¥­ï¥ ¯®à冷ª á«¥¤®¢ ­¨ï § ¬¥­ï¥¬ëå 㧫®¢
xchg edx,esi
call tl_node_move_po6 ;óçëû èäóò ïîäðÿä ìåíÿåì 6 ññûëîê
call tl_node_move_po6 ;ã§«ë ¨¤ãâ ¯®¤àï¤ ¬¥­ï¥¬ 6 ááë«®ª
jmp .cur_mov
.po8: ;à òóò ïîðÿäîê ñëåäîâàíèÿ óçëîâ íå ìåíÿåì
call tl_node_move_po8 ;óçëû èäóò íå ïîäðÿä ìåíÿåì 8 ññûëîê
.po8: ;  âãâ ¯®à冷ª á«¥¤®¢ ­¨ï 㧫®¢ ­¥ ¬¥­ï¥¬
call tl_node_move_po8 ;ã§«ë ¨¤ãâ ­¥ ¯®¤àï¤ ¬¥­ï¥¬ 8 ááë«®ª
.cur_mov:
stdcall tl_cur_next, edi
stdcall tl_draw, edi
1980,7 → 1968,7
tl_draw_caption_cur_pos:
cmp tl_capt_cy,9 ;9 - minimum caption height
jl @f
push eax ebx ecx edx edi esi
pushad
mov ebx,edi ;calculate cursor position
mov eax,tl_cur_pos
inc eax
1989,43 → 1977,36
call tl_convert_to_str
mov edi,ebx
 
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,0xc0000000 ;0x40000000 çàêðàøèâàòü ôîí öâåòîì edi
or ecx,0xc0000000 ;0x40000000 § ªà è¨¢ âì ä®­ 梥⮬ edi
lea edx,[txt_capt_cur]
mov edi,tl_col_zag
int 0x40
mcall 4 ;draw text captions
 
pop esi edi edx ecx ebx eax
popad
@@:
ret
 
;input:
;dword[ebp+ 8] - memory size
;dword[ebp+12] - pointer to memory
;dword[ebp+16] - options: 0 - first element, 1 - add next element
;dword[ebp+20] - pointer to 'TreeList' struct
; tlist - pointer to 'TreeList' struct
; opt - options: 0 - first element, 1 - add next element
; h_mem - pointer to memory
; mem_size - memory size
;output:
;dword[ebp+ 8] - error code
; eax - error code
align 4
tl_save_mem:
push ebp
mov ebp,esp
push eax ebx ecx edx edi esi
mov esi,dword[ebp+12]
mov edi,dword[ebp+20]
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]
 
cmp dword[ebp+16],0 ;add mode
cmp dword[opt],0 ;add mode
je @f
push dword edi
push dword esi
call tl_get_mem_size ;áåðåì ðàçìåð ðàíåå ñîõðàí¸ííûõ äàííûõ
pop ebx
add esi,ebx
stdcall tl_get_mem_size, edi,esi ;eax = à §¬¥à à ­¥¥ á®åà ­ñ­­ëå ¤ ­­ëå
add esi,eax
@@:
 
xor ebx,ebx
2033,12 → 2014,12
 
call tl_get_node_count_all ;eax = all node count
 
mov ecx,eax ;âû÷èñëÿåì ñêîëüêî ïàìÿòè äîëæíî áûòü çàïîëíåíî
imul ecx,ebx ;óìíîæàåì íà ðàçìåð ñòðóêòóðû óçëà
mov ecx,eax ;¢ëç¨á«ï¥¬ ᪮«ìª® ¯ ¬ï⨠¤®«¦­® ¡ëâì § ¯®«­¥­®
imul ecx,ebx ;㬭®¦ ¥¬ ­  à §¬¥à áâàãªâãàë 㧫 
add ecx,tl_save_load_heder_size+1 ;element header +1 end element sumbol
add ecx,esi ;äîáàâëÿåì óêàçàòåëü íà íà÷àëî ïàìÿòè (ñ ó÷åòîì ðàíåå çàïèñàííûõ ñòðóêòóð)
sub ecx,dword[ebp+12] ;îòíèìàåì óêàçàòåëü íà íà÷àëî ïàìÿòè (áåç ðàíåå çàïèñàííûõ ñòðóêòóð)
cmp ecx,dword[ebp+8] ;ecx = element memory size
add ecx,esi ;¤®¡ ¢«ï¥¬ 㪠§ â¥«ì ­  ­ ç «® ¯ ¬ï⨠(á ãç¥â®¬ à ­¥¥ § ¯¨á ­­ëå áâàãªâãà)
sub ecx,dword[h_mem] ;®â­¨¬ ¥¬ 㪠§ â¥«ì ­  ­ ç «® ¯ ¬ï⨠(¡¥§ à ­¥¥ § ¯¨á ­­ëå áâàãªâãà)
cmp ecx,dword[mem_size] ;ecx = element memory size
jg .err_mem_size
 
;save tree params (in header)
2059,7 → 2040,7
mov word[esi+20],ax
 
;copy scroll position
mov edx,tl_p_scrol
mov edx,tl_p_scroll
mov eax,dword[edx+sb_offs_position]
mov dword[esi+22],eax
 
2082,8 → 2063,7
mov dword[esi],eax
add esi,4
 
stdcall tl_node_poi_get_data, edx,edi
pop dword eax
stdcall tl_node_poi_get_data, edi,edx ;eax - pointer node data
 
;call tl_node_copy_data
push ecx edi
2097,42 → 2077,51
jmp @b
@@:
mov byte[esi],0 ;end of 'treelist'
mov dword[ebp+20],0 ;return error code
xor eax,eax ;return error code
jmp @f
.err_mem_size:
or dword[ebp+20],tl_err_save_memory_size
mov eax,tl_err_save_memory_size
@@:
pop esi edi edx ecx ebx eax
pop ebp
ret 12
ret
endp
 
;input:
;dword[ebp+ 8] - memory size
;dword[ebp+12] - pointer to memory
;word[ebp+16] - options: element index
;word[ebp+18] - options: 2*(add mode)+(init mode)
;dword[ebp+20] - pointer to 'TreeList' struct
; 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
; à §¬¥à ¯ ¬ïâ¨, ¯®ª  ­¥ ¨á¯®«ì§ã¥âáï (­ §­ ç «áï ¤«ï ª®­â஫ï)
; ¤«ï ¥£® ¨á¯®«ì§®¢ ­¨ï ­ã¦­® ¤®à ¡®â âì äã­ªæ¨î
;output:
;dword[ebp+ 8] - error code
; 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
align 4
tl_load_mem:
push ebp
mov ebp,esp
push eax ebx ecx edx edi esi
mov esi,dword[ebp+12]
mov edi,dword[ebp+20]
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]
 
mov dword[ebp+20],0 ;return error code
mov dword[er_code],0 ;return error code
 
xor ecx,ecx
mov cx,word[ebp+16]
mov ecx,dword[opt]
cmp cx,0 ;load in array mode
je @f
; push dword edi
; push dword esi
; call tl_get_mem_size ;áåðåì ðàçìåð ðàíåå ñîõðàí¸ííûõ äàííûõ
; pop ebx
; add esi,ebx
;stdcall tl_get_mem_size, esi,edi ;¡¥à¥¬ à §¬¥à à ­¥¥ á®åà ­ñ­­ëå ¤ ­­ëå
;add esi,eax
and ecx,0xffff
cld
.beg_cycle:
cmp dword[esi],'tree'
jne .no_tree
2147,7 → 2136,7
 
cmp dword[esi],'tree'
jne .no_tree
bt word[ebp+18],1 ;load in add mode
bt dword[opt],17 ;load in add mode
jc @f
stdcall tl_info_clear, dword edi
@@:
2156,7 → 2145,7
mov bx,word[esi+4] ;info_size
cmp bx,tl_info_size
je @f
or dword[ebp+20],tl_err_load_info_size
or dword[er_code],tl_err_load_info_size
@@:
mov ecx,dword[esi+6] ;count nodes
cmp ecx,1
2169,58 → 2158,52
mov eax,dword[esi+4]
ror eax,16 ;eax - options (type; lev; clo)
add esi,8
stdcall tl_node_add, esi,eax,edi
stdcall tl_node_add, edi,eax,esi
stdcall tl_cur_next, edi
;...
add esi,ebx
loop @b
 
bt word[ebp+18],1 ;load in add mode
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 eax,dword[edx+22] ;set scroll pos
mov ebx,tl_p_scrol
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
stdcall scroll_bar_vertical.draw, ebx
jmp .end_f
.no_tree:
mov dword[ebp+20],tl_err_load_caption
mov dword[er_code],tl_err_load_caption
.end_f:
pop esi edi edx ecx ebx eax
pop ebp
ret 12
mov eax,dword[er_code]
ret
endp
 
;input:
;dword[ebp+ 8] - pointer to memory
;dword[ebp+12] - pointer to 'TreeList' struct
;¡¥à¥â à §¬¥à ¯ ¬ï⨠§ ­ï⮩ ä㭪樥© tl_save_mem ¯à¨ á®åà ­¥­¨¨ í«¥¬¥­â®¢
;output:
;dword[ebp+ 8] - error code
; eax - error code
align 4
tl_get_mem_size: ;áåðåò ðàçìåð ïàìÿòè çàíÿòîé ôóíêöèåé tl_save_mem ïðè ñîõðàíåíèè ýëåìåíòîâ
push ebp
mov ebp,esp
push ebx edi esi
mov esi,dword[ebp+ 8]
mov edi,dword[ebp+12]
proc tl_get_mem_size uses ebx edi, tlist:dword, h_mem:dword
mov edi,dword[tlist]
mov eax,dword[h_mem]
@@:
cmp dword[esi],'tree'
cmp dword[eax],'tree'
jne @f
xor ebx,ebx
mov bx,word[esi+4]
add bx,8 ;ðàçìåð äîïîëíèòåëüíîé èíôîðìàöèè îá óçëå (èíäåêñ çàïèñè; èíäåêñ èêîíêè, óðîâåíü, ...)
imul ebx,dword[esi+6]
mov bx,word[eax+4]
add bx,8 ;à §¬¥à ¤®¯®«­¨â¥«ì­®© ¨­ä®à¬ æ¨¨ ®¡ 㧫¥ (¨­¤¥ªá § ¯¨á¨; ¨­¤¥ªá ¨ª®­ª¨, ã஢¥­ì, ...)
imul ebx,dword[eax+6]
add ebx,tl_save_load_heder_size
add esi,ebx
add eax,ebx
jmp @b
@@:
sub esi,dword[ebp+ 8]
mov dword[ebp+12],esi ;âîçâðàùàåì ðàçìåð áëîêà ïàìÿòè
pop esi edi edx
pop ebp
ret 4
sub eax,dword[h_mem] ;®â­¨¬ ¥¬ 㪠§ â¥«ì ­  ­ ç «® ¯ ¬ïâ¨
;¨ ¯®«ãç ¥¬ à §¬¥à ¡«®ª  ¯ ¬ïâ¨
ret
endp
 
 
;ascii scan key
2240,7 → 2223,7
txt_capt_cur db '‘âப  ',0
txt_capt_otm db 'Žâ¬¥­ë ',0
 
;ýòîò êîä íå ìîé, îí ïðåîáðàçóåò ÷èñëî â ñòðîêó
;íâ®â ª®¤ ­¥ ¬®©, ®­ ¯à¥®¡à §ã¥â ç¨á«® ¢ áâபã
;input:
; eax = value
; edi = string buffer
2254,20 → 2237,17
 
align 4
.str:
mov ecx,0x0a ;çàäàåòñÿ ñèñòåìà ñ÷èñëåíèÿ èçìåíÿþòñÿ ðåãèñòðû ebx,eax,ecx,edx âõîäíûå ïàðàìåòðû eax - ÷èñëî
;ïðåðåâîä ÷èñëà â ASCII ñòðîêó âçîäíûå äàííûå ecx=ñèñòåìà ñ÷èñëåíÿ edi àäðåñ êóäà çàïèñûâàòü, áóäåì ñòðîêó, ïðè÷åì êîíåö ïåðåìåííîé
cmp eax,ecx ;ñðàâíèòü åñëè â eax ìåíüøå ÷åì â ecx òî ïåðåéòè íà @@-1 ò.å. íà pop eax
mov ecx,0x0a ;§ ¤ ¥âáï á¨á⥬  áç¨á«¥­¨ï ¨§¬¥­ïîâáï ॣ¨áâàë ebx,eax,ecx,edx ¢å®¤­ë¥ ¯ à ¬¥âàë eax - ç¨á«®
;¯à¥à¥¢®¤ ç¨á«  ¢ ASCII áâப㠢§®¤­ë¥ ¤ ­­ë¥ ecx=á¨á⥬  áç¨á«¥­ï edi  ¤à¥á ªã¤  § ¯¨á뢠âì, ¡ã¤¥¬ áâபã, ¯à¨ç¥¬ ª®­¥æ ¯¥à¥¬¥­­®©
cmp eax,ecx ;áà ¢­¨âì ¥á«¨ ¢ eax ¬¥­ìè¥ ç¥¬ ¢ ecx â® ¯¥à¥©â¨ ­  @@-1 â.¥. ­  pop eax
jb @f
xor edx,edx ;î÷èñòèòü edx
div ecx ;ðàçäåëèòü - îñòàòîê â edx
push edx ;ïîëîæèòü â ñòåê
;dec edi ;ñìåùåíèå íåîáõîäèìîå äëÿ çàïèñè ñ êîíöà ñòðîêè
call .str;ïåðåéòè íà ñàìó ñåáÿ ò.å. âûçâàòü ñàìó ñåáÿ è òàê äî òîãî ìîìåíòà ïîêà â eax íå ñòàíåò ìåíüøå ÷åì â ecx
xor edx,edx ;®ç¨áâ¨âì edx
div ecx ;à §¤¥«¨âì - ®áâ â®ª ¢ edx
push edx ;¯®«®¦¨âì ¢ á⥪
call .str;¯¥à¥©â¨ ­  á ¬ã ᥡï â.¥. ¢ë§¢ âì á ¬ã á¥¡ï ¨ â ª ¤® ⮣® ¬®¬¥­â  ¯®ª  ¢ eax ­¥ áâ ­¥â ¬¥­ìè¥ ç¥¬ ¢ ecx
pop eax
@@: ;cmp al,10 ;ïðîâåðèòü íå ìåíüøå ëè çíà÷åíèå â al ÷åì 10 (äëÿ ñèñòåìû ñ÷èñëåíÿ 10 äàííàÿ êîìàíäà - ëèøíàÿ))
;sbb al,$69 ;- ÷åñòíî äàííàÿ èíñòðóêöèÿ ìåíÿ çàñòàâëÿåò çàäóìàòüñÿ ò.å. ÿ íå çíàþ êàê ýòî ðàáîòàåò
;das ;ïîñëå äàííîé êîìàíäû êàê áû ïðîèñõîäèò óìåíüøåíèå al íà 66h (â êíèãå íàïèñàíî äðóãîå)
or al,0x30 ;äàííàÿ êîìàíäà êîðî÷å ÷åì äâå âûøå
stosb ;çàïèñàòü ýëåìåíò èç ðåãèñòðà al â ÿ÷åêó ïàìÿòè es:edi
ret ;âåðíóòüñÿ î÷åíü èíòåðåñíûé õîä ò.ê. ïîêà â ñòåêå õðàíèòüñÿ êîë-âî âûçîâîâ òî ñòîëüêî ðàç ìû è áóäåì âûçûâàòüñÿ
@@: ;cmp al,10 ;¯à®¢¥à¨âì ­¥ ¬¥­ìè¥ «¨ §­ ç¥­¨¥ ¢ al 祬 10 (¤«ï á¨á⥬ë áç¨á«¥­ï 10 ¤ ­­ ï ª®¬ ­¤  - «¨è­ ï))
or al,0x30 ;¤ ­­ ï ª®¬ ­¤  ª®à®ç¥ 祬 ¤¢¥ ¢ëè¥
stosb ;§ ¯¨á âì í«¥¬¥­â ¨§ ॣ¨áâà  al ¢ ï祪㠯 ¬ï⨠es:edi
ret ;¢¥à­ãâìáï ®ç¥­ì ¨­â¥à¥á­ë© 室 â.ª. ¯®ª  ¢ á⥪¥ åà ­¨âìáï ª®«-¢® ¢ë§®¢®¢ â® á⮫쪮 à § ¬ë ¨ ¡ã¤¥¬ ¢ë§ë¢ âìáï
}