Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 5878 → Rev 5879

/programs/develop/libraries/box_lib/trunk/box_lib.mac
314,6 → 314,7
.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] ;á⨫¨ í«¥¬¥­â 
/programs/develop/libraries/box_lib/trunk/tree_list.mac
1,6 → 1,6
; ìàêðîñ äëÿ ñèñòåìíîé áèáëèîòåêè box_lib.obj
; ýëåìåíò TreeList äëÿ Kolibri OS
; ôàéë ïîñëåäíèé ðàç èçìåíÿëñÿ 01.12.2010 IgorA
; ôàéë ïîñëåäíèé ðàç èçìåíÿëñÿ 04.11.2015 IgorA
; íà êîä ïðèìåíåíà GPL2 ëèöåíçèÿ
 
 
17,18 → 17,17
 
macro use_tree_list
{
 
;âûäåëíèå ïàìÿòè äëÿ ñòðóêòóð ñïèñêà è îñíîâíîé èíôîðìàöèè (êîíñòðóêòîð)
align 4
tl_data_init: ;âûäåëíèå ïàìÿòè äëÿ ñòðóêòóð ñïèñêà è îñíîâíîé èíôîðìàöèè (êîíñòðóêòîð)
push ebp
mov ebp,esp
push eax ecx edi
mov edi,dword[ebp+8]
proc tl_data_init uses eax ecx edi, tlist:dword
mov edi,dword[tlist]
 
xor ecx,ecx
mov cx,tl_info_size
imul ecx,tl_info_max_count
invoke mem.alloc,ecx
mov dword[edi],eax ;êîïèðóåì óêàçàòåëü íà ïîëó÷åíóþ ïàìÿòü â ñòðóêòóðó
mov tl_data_info,eax ;êîïèðóåì óêàçàòåëü íà ïîëó÷åíóþ ïàìÿòü â ñòðóêòóðó
mov tl_data_img,0 ;îáíóëÿåì óêàçàòåëü 'data_img'
mov tl_data_img_sys,0 ;îáíóëÿåì óêàçàòåëü 'data_img_sys'
 
37,8 → 36,7
invoke mem.alloc,ecx
mov tl_data_nodes,eax ;êîïèðóåì óêàçàòåëü íà ïîëó÷åíóþ ïàìÿòü â ñòðóêòóðó
 
push dword edi
call tl_info_clear
stdcall tl_info_clear, edi
 
;íàñòðîéêè äî÷åðíåãî ñêðîëëèíãà
cmp tl_p_scrol,0
60,13 → 58,13
mov ecx,tl_box_top
mov word[eax+6],cx
@@:
pop edi ecx eax
pop ebp
ret 4
ret
endp
 
;î÷èñòêà ïàìÿòè ýëåìåíòà (äåñòðóêòîð)
align 4
proc tl_data_clear, tlist:dword ;î÷èñòêà ïàìÿòè ýëåìåíòà (äåñòðóêòîð)
push edi
proc tl_data_clear uses edi, tlist:dword
;uses eax ???
mov edi,dword[tlist]
cmp tl_data_img,0
je @f
76,24 → 74,19
je @f
invoke mem.free,tl_data_img_sys ;÷èñòêà ñèñòåìíûõ èêîíîê
@@:
invoke mem.free,dword[edi]
 
invoke mem.free,tl_data_info
invoke mem.free,tl_data_nodes
pop edi
ret
endp
 
;î÷èñòêà ñïèñêà (èíôîðìàöèè)
align 4
tl_info_clear: ;î÷èñòêà ñïèñêà (èíôîðìàöèè)
push ebp
mov ebp,esp
push eax ecx edi
mov edi,dword[ebp+8]
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
;xor ecx,ecx
mov ecx,sizeof.TreeList
imul ecx,tl_info_max_count
mov eax,tl_data_nodes
110,17 → 103,13
mov dword[eax+sb_offs_position],0
call tb_scrol_resize
@@:
pop edi ecx eax
pop ebp
ret 4
ret
endp
 
 
;ðåàêöèÿ íà êëàâèàòóðó
align 4
tl_key: ;ðåàêöèÿ íà êëàâèàòóðó
push ebp
mov ebp,esp
push ebx ecx edi
mov edi,dword[ebp+8]
proc tl_key uses ebx ecx edi, tlist:dword
mov edi,dword[tlist]
 
mov ebx,tl_el_focus
cmp dword[ebx],edi
127,9 → 116,7
jne .no_focus ;ýëåìåíò íå â ôîêóñå
 
push eax
mov eax,66
mov ebx,2
int 0x40 ;ïîëó÷èòü ðåæèì ââîäà ñ êëàâèàòóðû
mcall 66,2 ;ïîëó÷èòü ðåæèì ââîäà ñ êëàâèàòóðû
 
lea ecx,[tl_key_scan]
cmp eax,1 ;1 = ñêàíêîäû
147,28 → 134,23
@@:
cmp ah,byte[ecx+1] ;Space
jne @f
push dword edi
call tl_node_close_open
stdcall tl_node_close_open, edi
@@:
cmp ah,byte[ecx+2] ;Up
jne @f
push dword edi
call tl_cur_perv
stdcall tl_cur_perv, edi
@@:
cmp ah,byte[ecx+3] ;Down
jne @f
push dword edi
call tl_cur_next
stdcall tl_cur_next, edi
@@:
cmp ah,byte[ecx+7] ;Page Up
jne @f
push dword edi
call tl_cur_page_up
stdcall tl_cur_page_up, edi
@@:
cmp ah,byte[ecx+8] ;Page Down
jne @f
push dword edi
call tl_cur_page_down
stdcall tl_cur_page_down, edi
@@:
 
bt tl_style,0 ;tl_key_no_edit
175,20 → 157,17
jc .no_edit
cmp ah,byte[ecx+4] ;Left
jne @f
push dword edi
call tl_node_lev_dec
stdcall tl_node_lev_dec, edi
mov bx,1
@@:
cmp ah,byte[ecx+5] ;Right
jne @f
push dword edi
call tl_node_lev_inc
stdcall tl_node_lev_inc, edi
mov bx,1
@@:
cmp ah,byte[ecx+6] ;Delete
jne @f
push dword edi
call tl_node_delete
stdcall tl_node_delete, edi
mov bx,1
@@:
.no_edit:
195,31 → 174,25
 
cmp bx,1
jne .no_focus
push dword edi
call tl_draw
stdcall tl_draw, edi
.no_focus:
ret
endp
 
pop edi ecx ebx
pop ebp
ret 4
 
;ðåàêöèÿ íà ìûøü
align 4
tl_mouse: ;ðåàêöèÿ íà ìûøü
push ebp
mov ebp,esp
proc tl_mouse, tlist:dword
pushad
mov edi,dword[ebp+8]
mov edi,dword[tlist]
 
mov eax,37
mov ebx,1
int 0x40
mcall 37,1 ;êîîðäèíàòû ìûøè îòíîñèòåëüíî îêíà
 
mov ebx,tl_box_left
shl ebx,16
cmp eax,ebx ;ëåâàÿ ãðàíèöà îêíà
jl .no_in_wnd ;.test_scroll
jl .no_in_wnd ;.test_scroll íå ïðèìåíÿåì
 
mov ebx,tl_box_left
shr ebx,16
add ebx,tl_box_width
shl ebx,16
cmp eax,ebx ;ïðàâàÿ ãðàíèöà îêíà
236,15 → 209,12
jl .test_scroll
 
push eax ebx
mov eax,37
mov ebx,2
int 0x40
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
 
262,7 → 232,7
cmp tl_p_scrol,0 ;ó÷èòûâàåì ñêðîëëèíã
je @f
mov edx,tl_p_scrol
add eax,dword[edx+24] ;äîáàâëÿåì ñêðîëëèíã íà âåðõó
add eax,dword[edx+sb_offs_position] ;äîáàâëÿåì ñêðîëëèíã íà âåðõó
@@:
 
mov ecx,eax
304,8 → 274,7
cmp ax,bx
jne .no_open_close
 
push dword edi
call tl_node_close_open
stdcall tl_node_close_open, edi
.no_open_close:
 
mov esi,tl_box_top
327,23 → 296,19
mov eax,dword[edx+sb_offs_max_area]
cmp eax,dword[edx+sb_offs_cur_area]
jbe .no_in_wnd ;âñå óçëû ïîïàäàþò â îêíî ñêðîëëèíãà
push dword edx
call scroll_bar_vertical.mouse ;scrollbar_ver_mouse
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
push dword edi
call tl_draw ;ïðîèçîøëè èçìåíåíèÿ ñêðîëëèíãà
stdcall tl_draw, edi ;ïðîèçîøëè èçìåíåíèÿ ñêðîëëèíãà
@@:
cmp dword[edx+sb_offs_delta2],0
jne .no_draw ;ïîïàëè íà ñêðîëëèíã - íå ñíèìàåì ôîêóñ ñ TreeList
;-------------------------------------------------------------------------------
.no_in_wnd: ;íå ïîïàëè â îêíî - ïîòåðÿ ôîêóñà (ïðè óñëîâèè ÷òî ôîêóñ áûë íà äàííîì ýåëåìåíòå)
mov eax,37 ;ïðîâåðÿåì íàæàòîñòü ëþáûõ êíîïîê
mov ebx,2
int 0x40
cmp eax,0 ;íè÷å íå íàæàëè eax=0
mcall 37,2 ;ïðîâåðÿåì íàæàòîñòü ëþáûõ êíîïîê
cmp eax,0 ;íè÷åãî íå íàæàëè eax=0
je .no_draw
 
mov ebx,tl_el_focus
356,15 → 321,13
.no_draw:
 
popad
pop ebp
ret 4
ret
endp
 
;îòìåíà äåéñòâèÿ
align 4
tl_info_undo: ;îòìåíà äåéñòâèÿ
push ebp
mov ebp,esp
push eax edi
mov edi,dword[ebp+8]
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
371,33 → 334,25
inc tl_tim_undo
call tb_scrol_resize ;îáðàáîòêà ñêðîëëèíãà
@@:
pop edi eax
pop ebp
ret 4
ret
endp
 
;ïîâòîð äåéñòâèÿ
align 4
tl_info_redo: ;ïîâòîð äåéñòâèÿ
push ebp
mov ebp,esp
push edi
mov edi,dword[ebp+8]
proc tl_info_redo uses edi, tlist:dword
mov edi,dword[tlist]
cmp tl_tim_undo,1
jl @f
dec tl_tim_undo
call tb_scrol_resize ;îáðàáîòêà ñêðîëëèíãà
@@:
pop edi
pop ebp
ret 4
ret
endp
 
;óäàëåíèå îòìåíåííûõ äåéñòâèé
;âíóòðåííÿÿ ôóíêöèÿ, íå äëÿ ýêñïîðòà
align 4
tl_info_set_undo: ;óäàëåíèå îòìåíåííûõ äåéñòâèé
; push ebp
; mov ebp,esp
; push edi
; mov edi,dword[ebp+8]
 
; mov [dragk],0 ;çàêàí÷èâàåì âûäåëåíèå îò êëàâèàòóðû
tl_info_set_undo:
cmp tl_tim_undo,1
jl .no_work
 
454,18 → 409,14
pop edx ecx ebx eax
.no_work:
 
; pop edi
; pop ebp
; ret 4
ret
 
;âûâîä ñïèñêà íà ýêðàí
align 4
tl_draw: ;âûâîä ñïèñêà íà ýêðàí
push ebp
mov ebp,esp
proc tl_draw, tlist:dword
pushad
;draw dir_list main rect
mov edi,dword[ebp+8]
mov edi,dword[tlist]
mov ebx,tl_box_left
shl ebx,16
add ebx,tl_box_width
473,8 → 424,7
shl ecx,16
mov cx,tl_capt_cy
mov edx,tl_col_zag
mov eax,13
int 0x40 ;draw window caption
mcall 13 ;draw window caption
 
add ecx,tl_box_top
shl ecx,16
527,7 → 477,7
cmp tl_p_scrol,0 ;åñëè åñòü óêàçàòåëü íà ñêðîëëèíã
je .end_c1
mov esi,tl_p_scrol
cmp dword[esi+24],0 ;åñëè ñêðîëëèíã íà âåðõó, âûõîäèì
cmp dword[esi+sb_offs_position],0 ;åñëè ñêðîëëèíã íà âåðõó, âûõîäèì
je .end_c1
@@:
call tl_iterat_next
534,7 → 484,7
cmp edx,ecx
jle .end_draw
inc eax
cmp eax,dword[esi+24]
cmp eax,dword[esi+sb_offs_position]
jge .end_c1
jmp @b
.end_c1:
556,14 → 506,14
mov edi,tl_p_scrol ;ðèñóåì äî÷åðíèé ñêðîëëèíã
cmp edi,0 ;äëÿ òîãî ÷òî-áû åãî íå ïðèøëîñü ðèñîâàòü â ïîëüçîâàòåëüñêîé ïðîãðàììå
je .end_draw ;åñëè íåò ñêðîëëèíãà âûõîäèì
push dword edi
call scroll_bar_vertical.draw
stdcall scroll_bar_vertical.draw, edi
 
.end_draw:
popad
pop ebp
ret 4
ret
endp
 
;ïåðåõîä íà ñëåäóùèé âèäèìûé óçåë (ïðîïóñêàÿ çàêðûòûå)
;input:
; ecx = pointer to 1 node struct
; edx = pointer to some node struct
571,7 → 521,7
;output:
; edx = pointer to next node struct
align 4
tl_iterat_next: ;ïåðåõîä íà ñëåäóùèé âèäèìûé óçåë (ïðîïóñêàÿ çàêðûòûå)
tl_iterat_next:
push bx
mov bl,0x7f
cmp byte[edx+3],1
609,12 → 559,15
pop bx
ret
 
;ïåðåõîä íà ñëåäóùèé âèäèìûé óçåë (è íà çàêðûòûå òîæå)
;input:
; ecx = pointer to 1 node struct
; edx = pointer to some node struct
; edi = pointer to 'TreeList' struct
;output:
; edx = pointer to next visible node struct
align 4
tl_iterat_next_all: ;ïåðåõîä íà ñëåäóùèé âèäèìûé óçåë (è íà çàêðûòûå òîæå)
tl_iterat_next_all:
cmp tl_tim_undo,0
je .else
 
638,12 → 591,13
.endif:
ret
 
;ïåðåõîä íà ïðåäûäóùèé âèäèìûé óçåë (ïðîïóñêàÿ çàêðûòûå)
;input:
; ecx = pointer to 1 node struct
; edx = pointer to some node struct
; edi = pointer to 'TreeList' struct
align 4
tl_iterat_perv: ;ïåðåõîä íà ïðåäûäóùèé âèäèìûé óçåë (ïðîïóñêàÿ çàêðûòûå)
tl_iterat_perv:
push eax
cmp tl_tim_undo,0
je .beg1
668,7 → 622,7
pop eax
ret
 
 
;íàõîäèò ðîäèòåëüñêèé çàêðûòûé óçåë ìàêñèìàëüíîãî óðîâíÿ
;input:
; edx = pointer to some node struct
; edi = pointer to 'TreeList' struct
675,8 → 629,7
;output:
; edx = pointer closed parent node with maximum level
align 4
tl_move_max_clo_par: ;íàõîäèò ðîäèòåëüñêèé çàêðûòûé óçåë ìàêñèìàëüíîãî óðîâíÿ
push eax ebx
proc tl_move_max_clo_par uses eax ebx
mov eax,edx
xor ebx,ebx
.beg:
691,8 → 644,8
jmp .beg
.end_f:
mov edx,eax
pop ebx eax
ret
endp
 
;input:
; edx = pointer to some node struct
718,6 → 671,7
add edx,tl_data_nodes
ret
 
;ïåðåäâèãàåìñÿ íà ðîäèòåëüñêèé óçåë, åñëè òàêîãî íåò, òî îñòàâëÿåì ñòàðîå çíà÷åíèå óêàçàòåëÿ
;input:
; ecx =
; edx = pointer to some node struct
725,7 → 679,7
;output:
; edx = pointer to parent node struct
align 4
tl_move_par: ;ïåðåäâèãàåìñÿ íà ðîäèòåëüñêèé óçåë, åñëè òàêîãî íåò, òî îñòàâëÿåì ñòàðîå çíà÷åíèå óêàçàòåëÿ
tl_move_par:
cmp byte[edx+2],0
je .end_f ;óçåë 0-ãî óðîâíÿ íå ìîæåò áûòü äî÷åðíèì
push eax ebx esi
748,6 → 702,7
.end_f:
ret
 
;ïðîâåðÿåò âèäèìûé ëè óêàçàííûé óçåë ñ ó÷åòîì: äîáàâëåíèé, óäàëåíèé, îòìåí äåéñòâèé
;input:
; edx = pointer to symbol struct
; edi = pointer to 'TreeList' struct
755,7 → 710,7
; al = 1 if sumbol not visible
; (node[i].td+tim_Undo<=ch_tim && node[i].td) || (node[i].tc>ch_tim-tim_Undo)
align 4
tl_node_not_vis: ;ïðîâåðÿåò âèäèìûé ëè óêàçàííûé óçåë ñ ó÷åòîì: äîáàâëåíèé, óäàëåíèé, îòìåí äåéñòâèé
tl_node_not_vis:
cmp dword[edx+16],0
je @f
mov eax,dword[edx+16] ;eax=node[i].td
776,13 → 731,12
xor al,al
ret
 
 
;ðèñóåì êóðñîð íà ýêðàíå
;input:
; edi = pointer to TreeInfo struct
; esi = coord bottom border
align 4
tl_draw_cursor: ;ðèñóåì êóðñîð íà ýêðàíå
push eax ebx ecx edx esi
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 ;êóðñîð íàõîäèòñÿ âûøå îêíà, â îáëàñòè ïðîêðó÷åííîé ñêðîëëèíãîì
811,8 → 765,7
.crop0:
 
mov edx,tl_col_txt
mov eax,13
int 0x40 ;ðèñóåì ïðîñòîé ïðÿìîóãîëüíèê, ò.ê. íåò ñèñòåìíûõ èêîíîê
mcall 13 ;ðèñóåì ïðîñòîé ïðÿìîóãîëüíèê, ò.ê. íåò ñèñòåìíûõ èêîíîê
jmp .end_f
@@:
mov ebx,tl_data_img_sys
826,6 → 779,7
mov ecx,tl_el_focus ;ïðîâåðÿåì â ôîêóñå ýëåìåíò èëè íåò
cmp dword[ecx],edi
je .focus
;åñëè íå â ôîêóñå ñäâèãàåì êîîðäèíàòû íà èêîíêó íå àêòèâíîãî êóðñîðà
xor eax,eax
xor ecx,ecx
mov cx,tl_img_cx
849,18 → 803,17
mov cx,si ;åñëè êóðñîð âèäåí ÷àñòè÷íî (ïîïàë íà íèæíþþ ãðàíèöó)
.crop1:
 
mov eax,7
int 0x40 ;ðèñóåì èêîíêó êóðñîðà
mcall 7 ;ðèñóåì èêîíêó êóðñîðà
.end_f:
pop esi edx ecx ebx eax
ret
endp
 
;ñòèðàåì êóðñîð íà ýêðàíå
;input:
; edi = pointer to TreeInfo struct
; esi = coord bottom border
align 4
tl_draw_null_cursor: ;ñòèðàåì êóðñîð íà ýêðàíå
push eax ebx ecx edx esi
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 ;êóðñîð íàõîäèòñÿ âûøå îêíà, â îáëàñòè ïðîêðó÷åííîé ñêðîëëèíãîì
887,30 → 840,31
@@:
 
mov edx,tl_col_bkg
mov eax,13
int 0x40 ;ðèñóåì ïðîñòîé ïðÿìîóãîëüíèê ñ ôîíîâûì öâåòîì
mcall 13 ;ðèñóåì ïðîñòîé ïðÿìîóãîëüíèê ñ ôîíîâûì öâåòîì
 
.end_f:
pop esi edx ecx ebx eax
ret
endp
 
;áåðåò ïîçèöèþ êóðñîðà, îòíîñèòåëüíî ýêðàíà
;input:
; edi = pointer to TreeInfo struct
;output:
; eax = index
align 4
tl_get_display_cur_pos: ;áåðåò ïîçèöèþ êóðñîðà, îòíîñèòåëüíî ýêðàíà
tl_get_display_cur_pos:
mov eax,tl_cur_pos
cmp tl_p_scrol,0
je @f
push ebx
mov ebx,tl_p_scrol
mov ebx,dword[ebx+24]
mov ebx,dword[ebx+sb_offs_position]
sub eax,ebx ;îòíèìàåì ïîçèöèþ ñêðîëëèíãà
pop ebx
@@:
ret
 
;ðèñóåò óçåë ñ: êàðòèíêîé, ïîäïèñüþ, èêîíêîé îòêðûòèÿ/çàêðûòèÿ è ëèíèÿìè ê ðîäèò. óçëó
;input:
; eax = node position
; edx = pointer to some node struct
917,9 → 871,7
; edi = pointer to 'TreeList' struct
; esi = coord of bottom border
align 4
tl_draw_node: ;ðèñóåò óçåë ñ: êàðòèíêîé, ïîäïèñüþ, èêîíêîé îòêðûòèÿ/çàêðûòèÿ è ëèíèÿìè ê ðîäèò. óçëó
push eax ebx ecx edx esi
 
proc tl_draw_node uses eax ebx ecx edx esi
mov ebx,1 ;1 - ìåñòî ïîä êóðñîð
bt tl_style,2 ;tl_list_box_mode
jc @f
957,8 → 909,7
jne .draw_img_n
push edx
mov edx,tl_col_txt
mov eax,13
int 0x40 ;draw node rect
mcall 13 ;draw node rect
pop edx
jmp @f
.draw_img_n:
976,8 → 927,7
imul ebx,esi ;esi = icon index
add ebx,tl_data_img
 
mov eax,7
int 0x40 ;draw node icon '-'
mcall 7 ;draw node icon '-'
pop esi edx ebx
@@:
 
997,16 → 947,17
call tl_draw_node_icon_par_lin ;ðèñîâàíèå ëèíèè ê ðîäèòåëüñêîìó ýëåìåíòó
call tl_draw_node_icon_par_lin_up ;ðèñîâàíèå âåðòèêàëüíîé ëèíèè ê ðîäèòåëüñêîìó ýëåìåíòó
.end_draw:
pop esi edx ecx ebx eax
ret
endp
 
;ðèñóåò èêîíêè îòêðûòîãî èëè çàêðûòîãî óçëà (îáû÷íî + èëè -)
;input:
; al = óðîâåíü ýëåìåíòà
; ecx = pointer to 1 node struct
; edx = pointer to some node struct
;...
align 4
tl_draw_node_icon_opn_clo: ;ðèñóåò èêîíêè îòêðûòîãî èëè çàêðûòîãî óçëà (îáû÷íî + èëè -)
push eax ebx ecx edx esi
proc tl_draw_node_icon_opn_clo uses eax ebx ecx edx esi
inc al
call tl_iterat_next_all ;get next visible item
cmp edx,ecx
1020,8 → 971,7
cmp tl_data_img_sys,0
jne .draw_img_s
mov edx,tl_col_txt
mov eax,13
int 0x40 ;draw minus rect, if not system icons
mcall 13 ;draw minus rect, if not system icons
jmp @f
.draw_img_s:
mov ecx,esi ;load ecx
1037,12 → 987,12
and eax,0xff
imul ebx,eax ;eax = icon index
add ebx,tl_data_img_sys
mov eax,7
int 0x40 ;draw minus icon '-'
mcall 7 ;draw minus icon '-'
@@:
pop esi edx ecx ebx eax
ret
endp
 
;ðèñîâàíèå ëèíèè ê ðîäèòåëüñêîìó ýëåìåíòó
;input:
; al = óðîâåíü ýëåìåíòà
; ecx = pointer to 1 node struct
1049,7 → 999,7
; edx = pointer to some node struct
;...
align 4
tl_draw_node_icon_par_lin: ;ðèñîâàíèå ëèíèè ê ðîäèòåëüñêîìó ýëåìåíòó
tl_draw_node_icon_par_lin:
cmp byte[edx+3],1
je .close
push eax ebx ecx edx esi
1076,8 → 1026,7
cmp tl_data_img_sys,0
jne .draw_img_s
mov edx,tl_col_txt
mov eax,13
int 0x40 ;draw minus rect, if not system icons
mcall 13 ;draw minus rect, if not system icons
jmp @f
.draw_img_s:
; mov ecx,esi ;load ecx
1094,8 → 1043,7
; and eax,0xff
imul ebx,eax ;eax = icon index
add ebx,tl_data_img_sys
mov eax,7
int 0x40 ;draw line icon
mcall 7 ;draw line icon
@@:
pop esi edx ecx ebx eax
.close:
1204,7 → 1152,7
imul esi,eax
pop eax
add si,tl_info_capt_offs
add esi,dword[edi]
add esi,tl_data_info
mov edx,esi
 
shr ebx,16
1221,8 → 1169,7
mov ecx,tl_col_txt
and ecx,0xffffff
; or ecx,0x80000000 ;text is ASCIIZ
mov eax,4
int 0x40
mcall 4
@@:
pop esi edx ecx ebx
ret
1272,16 → 1219,14
sub eax,esi
ret
 
;äîáàâèòü óçåë
;input:
;dword[ebp+ 8] - pointer to node info
;dword[ebp+12] - options
;dword[ebp+16] - pointer to 'TreeList' struct
; tlist - óêàçàòåëü íà ñòðóêòóðó ëèñòà
; n_opt - îïöèè äîáàâëåíèÿ
; n_info - óêàçàòåëü íà äîáàâëÿåìûå äàííûå
align 4
tl_node_add: ;äîáàâèòü óçåë
push ebp
mov ebp,esp
push eax ebx ecx edx edi
mov edi,dword[ebp+16]
proc tl_node_add uses eax ebx ecx edx edi, n_info:dword, n_opt:dword, tlist:dword
mov edi,dword[tlist]
 
call tl_info_set_undo
 
1306,14 → 1251,16
jne .u0
 
inc tl_ch_tim
mov cx,word[ebp+14] ;get type
mov ecx,dword[n_opt]
ror ecx,16 ;cx = type
mov word[edx],cx
mov cl,byte[ebp+13]
;;;mov cl,byte[ebp+13]
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[ebp+12]
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;
1329,13 → 1276,13
call tl_get_node_index ;eax = node index
imul esi,eax
pop eax
add esi,dword[edi]
mov edi,dword[ebp+8] ;pointer to node data
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[ebp+16] ;restore edi
mov edi,dword[tlist] ;restore edi
mov cx,tl_info_capt_offs
cmp cx,tl_info_size
jge .no_text_data
1376,15 → 1323,13
cmp edx,ebx ;enf of node memory ?
jle @b
@@:
pop edi edx ecx ebx eax
pop ebp
ret 12
ret
endp
 
;input:
; edi = pointer to TreeInfo struct
align 4
tb_scrol_resize:
push eax ecx edx
proc tb_scrol_resize uses eax ecx edx
cmp tl_p_scrol,0 ;îáðàáîòêà ñêðîëëèíãà
je @f
call tl_get_node_count ;eax = node count
1398,21 → 1343,16
mov edx,tl_p_scrol
mov dword[edx+sb_offs_cur_area],eax
mov dword[edx+sb_offs_max_area],ecx
push dword edx ;pointer to scroll struct
call scroll_bar_vertical.draw
stdcall scroll_bar_vertical.draw,edx
@@:
pop edx ecx eax
ret
endp
 
;input:
;dword[ebp+ 8] - pointer to node info
;dword[ebp+12] - pointer to 'TreeList' struct
;n_info - pointer to node info
align 4
tl_node_set_data:
push ebp
mov ebp,esp
push eax ecx edx edi esi
mov edi,dword[ebp+12]
proc tl_node_set_data uses eax ecx edx edi esi, n_info:dword, tlist:dword
mov edi,dword[tlist]
call tl_get_cur_node_index ;eax=po_t
cmp eax,2
jl @f
1419,13 → 1359,13
xor ecx,ecx
mov cx,tl_info_size
imul eax,ecx
add eax,dword[edi]
add eax,tl_data_info
mov edi,eax
mov esi,dword[ebp+8] ;pointer to node data
mov esi,dword[n_info] ;pointer to node data
rep movsb
 
mov esi,edi
mov edi,dword[ebp+12] ;restore edi
mov edi,dword[tlist] ;restore edi
mov cx,tl_info_capt_offs
cmp cx,tl_info_size
jge .no_text_data
1446,9 → 1386,8
.no_text_data:
 
@@:
pop esi edi edx ecx eax
pop ebp
ret 8
ret
endp
 
;input:
;dword[ebp+ 8] - pointer to 'TreeList' struct
1465,7 → 1404,7
xor ecx,ecx
mov cx,tl_info_size
imul eax,ecx
add eax,dword[edi]
add eax,tl_data_info
mov dword[ebp+8],eax ;return node data pointer
@@:
pop edi ecx eax
1553,13 → 1492,13
pop ebp
ret 4
 
;áåðåò ïîçèöèþ ïîä êóðñîðîì
;input:
; edi = pointer 'tl' struct
;output:
; eax = index of current node
align 4
tl_get_cur_node_index: ;áåðåò ïîçèöèþ ïîä êóðñîðîì
push ecx edx
proc tl_get_cur_node_index uses ecx edx
;cycle to nodes
xor eax,eax
mov edx,tl_data_nodes
1579,9 → 1518,10
xor edx,edx
mov ecx,sizeof.TreeList
div ecx
pop edx ecx
ret
endp
 
;áåðåò ïîçèöèþ óêàçàííîãî ñèìâîëà
;input:
; edx = pointer node memory
; edi = pointer 'tl' struct
1588,7 → 1528,7
;output:
; eax = struct index of current node
align 4
tl_get_node_index: ;áåðåò ïîçèöèþ óêàçàííîãî ñèìâîëà
tl_get_node_index:
push ecx edx
mov eax,edx
sub eax,tl_data_nodes
1598,12 → 1538,10
pop edx ecx
ret
 
;óäàëèòü óçåë
align 4
tl_node_delete: ;óäàëèòü óçåë
push ebp
mov ebp,esp
push eax edx edi
mov edi,dword[ebp+8]
proc tl_node_delete uses eax edx edi, tlist:dword
mov edi,dword[tlist]
call tl_get_cur_node_index ;eax=po_t
cmp eax,2
jl @f
1615,36 → 1553,27
mov dword[edx+16],eax
call tb_scrol_resize ;îáðàáîòêà ñêðîëëèíãà
@@:
pop edi edx eax
pop ebp
ret 4
ret
endp
 
;ïîñòàâèòü êóðñîð íà ïåðâûé óçåë
align 4
tl_cur_beg: ;ïîñòàâèòü êóðñîð íà ïåðâûé óçåë
push ebp
mov ebp,esp
push edi
mov edi,dword[ebp+8]
proc tl_cur_beg uses edi, tlist:dword
mov edi,dword[tlist]
mov tl_cur_pos,0
cmp tl_p_scrol,0
je @f
mov edi,tl_p_scrol
mov dword[edi+24],0
push dword edi
mov edi,dword[ebp+8]
call scroll_bar_vertical.draw
mov dword[edi+sb_offs_position],0
stdcall scroll_bar_vertical.draw, edi
@@:
pop edi
ret
endp
 
pop ebp
ret 4
 
;ïåðåíåñòè êóðñîð íà 1 ïîçèöèþ íèæå
align 4
tl_cur_next: ;ïåðåíåñòè êóðñîð íà 1 ïîçèöèþ íèæå
push ebp
mov ebp,esp
push eax ebx edi esi
mov edi,dword[ebp+8]
proc tl_cur_next uses eax ebx edi esi, tlist:dword
mov edi,dword[tlist]
call tl_get_node_count ;eax = node count
;inc eax
cmp tl_cur_pos,eax
1662,29 → 1591,25
cmp tl_cur_pos,eax
jl @f
inc dword[ebx+sb_offs_position]
push dword ebx
call scroll_bar_vertical.draw
stdcall scroll_bar_vertical.draw,ebx
 
mov edi,dword[ebp+8] ;restore edi
push dword edi
call tl_draw ;ïîëíàÿ ïåðåðèñîâêà îêíà
stdcall tl_draw,dword[tlist] ;ïîëíàÿ ïåðåðèñîâêà îêíà
jmp .no_redraw
@@:
mov edi,dword[ebp+8] ;restore edi
mov edi,dword[tlist] ;restore edi
call tl_draw_cursor ;ïåðåðèñîâêà êóðñîðà
call tl_draw_caption_cur_pos
.no_redraw:
pop esi edi ebx eax
pop ebp
ret 4
ret
endp
 
 
;áåðåò ÷èñëî âñåõ âèäèìûõ óçëîâ (íå ñ÷èòàÿ çàêðûòûõ äî÷åðíèõ)
;input:
; edi = pointer 'tl' struct
;output:
; eax = struct index of current node
align 4
tl_get_node_count: ;áåðåò ÷èñëî âñåõ âèäèìûõ óçëîâ (íå ñ÷èòàÿ çàêðûòûõ äî÷åðíèõ)
tl_get_node_count:
push ecx edx
;cycle to nodes
xor eax,eax
1701,12 → 1626,13
pop edx ecx
ret
 
;áåðåò ÷èñëî âñåõ âèäèìûõ óçëîâ (ñ÷èòàÿ çàêðûòûå äî÷åðíèå)
;input:
; edi = pointer 'tl' struct
;output:
; eax = struct index of current node
align 4
tl_get_node_count_all: ;áåðåò ÷èñëî âñåõ âèäèìûõ óçëîâ (ñ÷èòàÿ çàêðûòûå äî÷åðíèå)
tl_get_node_count_all:
push ecx edx
;cycle to nodes
xor eax,eax
1723,12 → 1649,10
pop edx ecx
ret
 
;ïåðåíåñòè êóðñîð íà 1 ïîçèöèþ âûøå
align 4
tl_cur_perv: ;ïåðåíåñòè êóðñîð íà 1 ïîçèöèþ âûøå
push ebp
mov ebp,esp
push eax edi esi
mov edi,dword[ebp+8]
proc tl_cur_perv uses eax edi esi, tlist:dword
mov edi,dword[tlist]
cmp tl_cur_pos,0
je .no_redraw
mov esi,tl_box_top
1739,36 → 1663,29
cmp tl_p_scrol,0 ;åñëè åñòü óêàçàòåëü íà ñêðîëëèíã
je @f
mov eax,tl_p_scrol
cmp dword[eax+24],0 ;åñëè ñêðîëëèíã íà âåðõó, âûõîäèì
cmp dword[eax+sb_offs_position],0 ;åñëè ñêðîëëèíã íà âåðõó, âûõîäèì
je @f
mov edi,tl_cur_pos
cmp edi,dword[eax+24] ;åñëè êóðñîð óøåë âûøå ñêðîëëèíãà, òîãäà îïóñêàåì ñêðîëëèíã
cmp edi,dword[eax+sb_offs_position] ;åñëè êóðñîð óøåë âûøå ñêðîëëèíãà, òîãäà îïóñêàåì ñêðîëëèíã
jge @f
dec dword[eax+24]
push dword eax
mov edi,dword[ebp+8]
call scroll_bar_vertical.draw
mov edi,dword[ebp+8] ;restore edi
push dword edi
call tl_draw ;ïîëíàÿ ïåðåðèñîâêà îêíà
dec dword[eax+sb_offs_position]
stdcall scroll_bar_vertical.draw, eax
stdcall tl_draw, dword[tlist] ;ïîëíàÿ ïåðåðèñîâêà îêíà
jmp .no_redraw
@@:
mov edi,dword[ebp+8] ;restore edi
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_caption_cur_pos
.no_redraw:
pop esi edi eax
pop ebp
ret 4
ret
endp
 
;ïåðåíåñòè êóðñîð íà 1 ñòðàíèöó âûøå
align 4
tl_cur_page_up: ;ïåðåíåñòè êóðñîð íà 1 ñòðàíèöó âûøå
push ebp
mov ebp,esp
push eax edi esi
mov edi,dword[ebp+8]
proc tl_cur_page_up uses eax edi esi, tlist:dword
mov edi,dword[tlist]
 
cmp tl_p_scrol,0 ;åñëè åñòü óêàçàòåëü íà ñêðîëëèíã
je .no_redraw
1778,7 → 1695,7
 
cmp tl_cur_pos,0
jne @f
cmp dword[esi+24],0 ;åñëè ñêðîëëèíã íà âåðõó, âûõîäèì
cmp dword[esi+sb_offs_position],0 ;åñëè ñêðîëëèíã íà âåðõó, âûõîäèì
jne @f
jmp .no_redraw
@@:
1789,32 → 1706,27
@@:
mov tl_cur_pos,0
.cursor:
cmp dword[esi+24],eax
cmp dword[esi+sb_offs_position],eax
jl @f
sub dword[esi+24],eax
sub dword[esi+sb_offs_position],eax
jmp .scroll
@@:
mov dword[esi+24],0
mov dword[esi+sb_offs_position],0
.scroll:
;ïåðåðèñîâêè îêíà è ñêðîëëèíãà
push dword edi
call tl_draw ;draw window
push dword esi
call scroll_bar_vertical.draw
stdcall tl_draw, edi ;draw window
stdcall scroll_bar_vertical.draw, esi
.no_redraw:
pop esi edi eax
pop ebp
ret 4
ret
endp
 
;ïåðåíåñòè êóðñîð íà 1 ñòðàíèöó íèæå
align 4
tl_cur_page_down: ;ïåðåíåñòè êóðñîð íà 1 ñòðàíèöó íèæå
push ebp
mov ebp,esp
push eax ebx ecx edi esi
proc tl_cur_page_down uses eax ebx ecx edi esi, tlist:dword
;eax - êîë-âî ñòðîê íà ñòðàíèöå
;ebx - ìàêñ. ïîçèöèÿ êóðñîðà
;ecx - ìàêñ. ïîçèöèÿ ñêðîëëèíãà
mov edi,dword[ebp+8]
mov edi,dword[tlist]
 
cmp tl_p_scrol,0 ;åñëè åñòü óêàçàòåëü íà ñêðîëëèíã
je .no_redraw
1836,7 → 1748,7
 
cmp tl_cur_pos,ebx ;êóðñîð âíèçó ?
jl @f
cmp dword[esi+24],ecx ;ñêðîëëèíã âíèçó ?
cmp dword[esi+sb_offs_position],ecx ;ñêðîëëèíã âíèçó ?
jl @f
jmp .no_redraw
@@:
1847,28 → 1759,23
mov tl_cur_pos,ebx
@@:
 
add dword[esi+24],eax ;ïåðåìåùàåì ñêðîëëèíã
cmp dword[esi+24],ecx
add dword[esi+sb_offs_position],eax ;ïåðåìåùàåì ñêðîëëèíã
cmp dword[esi+sb_offs_position],ecx
jl @f
mov dword[esi+24],ecx
mov dword[esi+sb_offs_position],ecx
@@:
 
;ïåðåðèñîâêè îêíà è ñêðîëëèíãà
push dword edi
call tl_draw ;draw window
push dword esi
call scroll_bar_vertical.draw
stdcall tl_draw, edi ;draw window
stdcall scroll_bar_vertical.draw, esi
.no_redraw:
pop esi edi ecx ebx eax
pop ebp
ret 4
ret
endp
 
;îòêðûòü/çàêðûòü óçåë (ðàáîòàåò ñ óçëàìè êîòîðûå èìåþò äî÷åðíèå óçëû)
align 4
tl_node_close_open: ;îòêðûòü/çàêðûòü óçåë (ðàáîòàåò ñ óçëàìè êîòîðûå èìåþò äî÷åðíèå óçëû)
push ebp
mov ebp,esp
push eax edx edi
mov edi,dword[ebp+8]
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 ;êóðñîð ñòîèò íà óçëå ?
jl @f
1887,19 → 1794,15
xor byte[eax+3],1 ;+3 = .clo *** îòêðûòèå/çàêðûòèå óçëà ***
call tb_scrol_resize ;îáðàáîòêà ñêðîëëèíãà
 
push dword edi
call tl_draw ;îáíîâëåíèå îêíà
stdcall tl_draw, edi ;îáíîâëåíèå îêíà
@@:
pop edi edx eax
pop ebp
ret 4
ret
endp
 
;óâåëè÷èòü óðîâåíü
align 4
tl_node_lev_inc: ;óâåëè÷èòü óðîâåíü
push ebp
mov ebp,esp
push eax ecx edx edi
mov edi,dword[ebp+8]
proc tl_node_lev_inc uses eax ecx edx edi, tlist:dword
mov edi,dword[tlist]
bt tl_style,2 ;tl_list_box_mode
jc @f
call tl_get_cur_node_index ;eax=po_t
1920,16 → 1823,13
jge @f
inc byte[eax+2] ;óâåëè÷èâàåì çíà÷åíèå óçëà
@@:
pop edi edx ecx eax
pop ebp
ret 4
ret
endp
 
;óìåíüøèòü óðîâåíü
align 4
tl_node_lev_dec: ;óìåíüøèòü óðîâåíü
push ebp
mov ebp,esp
push eax edi
mov edi,dword[ebp+8]
proc tl_node_lev_dec uses eax edi, tlist:dword
mov edi,dword[tlist]
call tl_get_cur_node_index ;eax=po_t
cmp eax,2
jl @f
1939,16 → 1839,13
je @f
dec byte[eax+2]
@@:
pop edi eax
pop ebp
ret 4
ret
endp
 
;ïåðåìåùàåì óçåë ââåðõ
align 4
tl_node_move_up: ;ïåðåìåùàåì óçåë ââåðõ
push ebp
mov ebp,esp
push eax ebx ecx edx edi esi
mov edi,dword[ebp+8]
proc tl_node_move_up uses eax ebx ecx edx edi esi, tlist:dword
mov edi,dword[tlist]
call tl_get_cur_node_index ;eax=po_t
cmp eax,2
jl @f
1976,16 → 1873,13
push dword edi
call tl_draw
@@:
pop esi edi edx ecx ebx eax
pop ebp
ret 4
ret
endp
 
;ïåðåìåùàåì óçåë âíèç
align 4
tl_node_move_down: ;ïåðåìåùàåì óçåë âíèç
push ebp
mov ebp,esp
push eax ebx ecx edx edi esi
mov edi,dword[ebp+8]
proc tl_node_move_down uses eax ebx ecx edx edi esi, tlist:dword
mov edi,dword[tlist]
call tl_get_cur_node_index ;eax=po_t
cmp eax,2
jl @f
2010,14 → 1904,11
.po8: ;à òóò ïîðÿäîê ñëåäîâàíèÿ óçëîâ íå ìåíÿåì
call tl_node_move_po8 ;óçëû èäóò íå ïîäðÿä ìåíÿåì 8 ññûëîê
.cur_mov:
push dword edi
call tl_cur_next
push dword edi
call tl_draw
stdcall tl_cur_next, edi
stdcall tl_draw, edi
@@:
pop esi edi edx ecx ebx eax
pop ebp
ret 4
ret
endp
 
align 4
tl_node_move_po6:
2191,9 → 2082,7
mov dword[esi],eax
add esi,4
 
push dword edi
push dword edx
call tl_node_poi_get_data
stdcall tl_node_poi_get_data, edx,edi
pop dword eax
 
;call tl_node_copy_data
2260,8 → 2149,7
jne .no_tree
bt word[ebp+18],1 ;load in add mode
jc @f
push dword edi
call tl_info_clear
stdcall tl_info_clear, dword edi
@@:
 
xor ebx,ebx
2276,18 → 2164,13
mov edx,esi ;save header pointer
add esi,tl_save_load_heder_size
 
@@:
;load node params
push dword edi
cld
@@: ;load node params
mov eax,dword[esi+4]
ror eax,16
push dword eax ;options (type; lev; clo)
ror eax,16 ;eax - options (type; lev; clo)
add esi,8
push dword esi
call tl_node_add
 
push dword edi
call tl_cur_next
stdcall tl_node_add, esi,eax,edi
stdcall tl_cur_next, edi
;...
add esi,ebx
loop @b
2301,9 → 2184,7
cmp ebx,0
je .end_f
mov dword[ebx+sb_offs_position],eax
push dword ebx ;pointer to scroll struct
call scroll_bar_vertical.draw
 
stdcall scroll_bar_vertical.draw, ebx
jmp .end_f
.no_tree:
mov dword[ebp+20],tl_err_load_caption
2388,5 → 2269,5
;das ;ïîñëå äàííîé êîìàíäû êàê áû ïðîèñõîäèò óìåíüøåíèå al íà 66h (â êíèãå íàïèñàíî äðóãîå)
or al,0x30 ;äàííàÿ êîìàíäà êîðî÷å ÷åì äâå âûøå
stosb ;çàïèñàòü ýëåìåíò èç ðåãèñòðà al â ÿ÷åêó ïàìÿòè es:edi
ret ;âåðíóòüñÿ ÷åíü èíòåðåñíûé õîä ò.ê. ïîêà â ñòåêå õðàíèòüñÿ êîë-âî âûçîâîâ òî ñòîëüêî ðàç ìû è áóäåì âûçûâàòüñÿ
ret ;âåðíóòüñÿ î÷åíü èíòåðåñíûé õîä ò.ê. ïîêà â ñòåêå õðàíèòüñÿ êîë-âî âûçîâîâ òî ñòîëüêî ðàç ìû è áóäåì âûçûâàòüñÿ
}