Rev 1432 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1432 | Rev 1441 | ||
---|---|---|---|
1 | ; ìàêðîñ äëÿ ñèñòåìíîé áèáëèîòåêè box_lib.obj |
1 | ; ìàêðîñ äëÿ ñèñòåìíîé áèáëèîòåêè box_lib.obj |
2 | ; ýëåìåíò TreeList äëÿ Kolibri OS |
2 | ; ýëåìåíò TreeList äëÿ Kolibri OS |
3 | ; ôàéë ïîñëåäíèé ðàç èçìåíÿëñÿ 10.02.2010 IgorA |
3 | ; ôàéë ïîñëåäíèé ðàç èçìåíÿëñÿ 26.03.2010 IgorA |
4 | ; íà êîä ïðèìåíåíà GPL2 ëèöåíçèÿ |
4 | ; íà êîä ïðèìåíåíà GPL2 ëèöåíçèÿ |
5 | 5 | ||
6 | 6 | ||
7 | sizeof.TreeList equ 20 |
7 | sizeof.TreeList equ 20 |
8 | ;struct TreeList |
8 | ;struct TreeList |
9 | ; type dw ? ;+ 0 òèï ýëåìåíòà, èëè èíäåêñ èêîíêè äëÿ óçëà |
9 | ; type dw ? ;+ 0 òèï ýëåìåíòà, èëè èíäåêñ èêîíêè äëÿ óçëà |
10 | ; lev db ? ;+ 2 óðîâåíü ýëåìåíòà |
10 | ; lev db ? ;+ 2 óðîâåíü ýëåìåíòà |
11 | ; clo db ? ;+ 3 ôëàã çàêðûòèÿ, èëè îòêðûòèÿ (èìååò ñìûñë äëÿ ðîäèòåëüñêîãî óçëà) |
11 | ; clo db ? ;+ 3 ôëàã çàêðûòèÿ, èëè îòêðûòèÿ (èìååò ñìûñë äëÿ ðîäèòåëüñêîãî óçëà) |
12 | ; perv dd ? ;+ 4 èíäåêñ ïðåäûäóùåãî ýëåìåíòà |
12 | ; perv dd ? ;+ 4 èíäåêñ ïðåäûäóùåãî ýëåìåíòà |
13 | ; next dd ? ;+ 8 èíäåêñ ïîñëåäóþùåãî ýëåìåíòà |
13 | ; next dd ? ;+ 8 èíäåêñ ïîñëåäóþùåãî ýëåìåíòà |
14 | ; tc dd ? ;+12 âðåì. ñîçäàíèÿ |
14 | ; tc dd ? ;+12 âðåì. ñîçäàíèÿ |
15 | ; td dd ? ;+16 âðåì. óäàëåíèÿ |
15 | ; td dd ? ;+16 âðåì. óäàëåíèÿ |
16 | ;ends |
16 | ;ends |
17 | 17 | ||
18 | tl_info_size equ word[edi +4] ;ðàçìåð äàííûõ âûäåëÿåìûõ äëÿ êàæäîãî óçëà (ïîëüçîâàòåëüñüêèå äàííûå + òåêñò äëÿ ïîäïèñè) |
18 | tl_info_size equ word[edi +4] ;ðàçìåð äàííûõ âûäåëÿåìûõ äëÿ êàæäîãî óçëà (ïîëüçîâàòåëüñüêèå äàííûå + òåêñò äëÿ ïîäïèñè) |
19 | tl_info_max_count equ dword[edi+6] ;ìàêñèìàëüíîå êîëè÷åñòâî óçëîâ, êîòîðûå ìîæíî äîáàâèòü â ýëåìåíò |
19 | tl_info_max_count equ dword[edi+6] ;ìàêñèìàëüíîå êîëè÷åñòâî óçëîâ, êîòîðûå ìîæíî äîáàâèòü â ýëåìåíò |
20 | tl_style equ dword[edi+10] ;ñòèëè ýëåìåíòà |
20 | tl_style equ dword[edi+10] ;ñòèëè ýëåìåíòà |
21 | tl_data_nodes equ dword[edi+14] ;óêàçàòåëü íà ñòðóêòóðû óçëîâ |
21 | tl_data_nodes equ dword[edi+14] ;óêàçàòåëü íà ñòðóêòóðû óçëîâ |
22 | tl_data_img equ dword[edi+18] ;óêàçàòåëü íà èçîáðàæåíèÿ ñ èêîíêàìè óçëîâ |
22 | tl_data_img equ dword[edi+18] ;óêàçàòåëü íà èçîáðàæåíèÿ ñ èêîíêàìè óçëîâ |
23 | tl_img_cx equ word[edi+22] ;øèðèíà èêîíîê |
23 | tl_img_cx equ word[edi+22] ;øèðèíà èêîíîê |
24 | tl_img_cy equ word[edi+24] ;âûñîòà èêîíîê |
24 | tl_img_cy equ word[edi+24] ;âûñîòà èêîíîê |
25 | tl_data_img_sys equ dword[edi+26] ;óêàçàòåëü íà ñèñòåìíûå èçîáðàæåíèÿ (ñòðåëêè, ïëþñèêè) |
25 | tl_data_img_sys equ dword[edi+26] ;óêàçàòåëü íà ñèñòåìíûå èçîáðàæåíèÿ (ñòðåëêè, ïëþñèêè) |
26 | tl_ch_tim equ dword[edi+30] ;êîëè÷åñòâî èçìåíåíèé â ôàéëå |
26 | tl_ch_tim equ dword[edi+30] ;êîëè÷åñòâî èçìåíåíèé â ôàéëå |
27 | tl_tim_undo equ dword[edi+38] ;êîëè÷åñòâî îòìåíåííûõ äåéñòâèé |
27 | tl_tim_undo equ dword[edi+38] ;êîëè÷åñòâî îòìåíåííûõ äåéñòâèé |
28 | tl_cur_pos equ dword[edi+42] ;ïîçèöèÿ êóðñîðà |
28 | tl_cur_pos equ dword[edi+42] ;ïîçèöèÿ êóðñîðà |
29 | tl_col_bkg equ dword[edi+46] ;öâåò ôîíà |
29 | tl_col_bkg equ dword[edi+46] ;öâåò ôîíà |
30 | tl_col_zag equ dword[edi+50] ;öâåò çàãîëîâêà |
30 | tl_col_zag equ dword[edi+50] ;öâåò çàãîëîâêà |
31 | tl_col_txt equ dword[edi+54] ;öâåò òåêñòà |
31 | tl_col_txt equ dword[edi+54] ;öâåò òåêñòà |
32 | tl_box_left equ dword[edi+58] |
32 | tl_box_left equ dword[edi+58] |
33 | tl_box_top equ dword[edi+62] |
33 | tl_box_top equ dword[edi+62] |
34 | tl_box_width equ dword[edi+66] |
34 | tl_box_width equ dword[edi+66] |
35 | tl_box_height equ dword[edi+70] |
35 | tl_box_height equ dword[edi+70] |
36 | tl_capt_cy equ word[edi+74] ;âûñîòà ïîäïèñè |
36 | tl_capt_cy equ word[edi+74] ;âûñîòà ïîäïèñè |
37 | tl_info_capt_offs equ word[edi+76] ;ñäâèã äëÿ íà÷àëà òåêñòà (ïîäïèñè óçëà) |
37 | tl_info_capt_offs equ word[edi+76] ;ñäâèã äëÿ íà÷àëà òåêñòà (ïîäïèñè óçëà) |
38 | tl_info_capt_len equ word[edi+78] ;äëèííà òåêñòà ïîäïèñè óçëà (åñëè = 0 òî äî êîíöà ñòðóêòóðû) |
38 | tl_info_capt_len equ word[edi+78] ;äëèííà òåêñòà ïîäïèñè óçëà (åñëè = 0 òî äî êîíöà ñòðóêòóðû) |
39 | tl_el_focus equ dword[edi+80] ;óêàçàòåëü íà ñòðóêòóðó ýëåìåíòà â ôîêóñå |
39 | tl_el_focus equ dword[edi+80] ;óêàçàòåëü íà ñòðóêòóðó ýëåìåíòà â ôîêóñå |
40 | tl_p_scrol equ dword[edi+84] ;óêàçàòåëü íà ñòðóêòóðó ñêðîëëèíãà |
40 | tl_p_scrol equ dword[edi+84] ;óêàçàòåëü íà ñòðóêòóðó ñêðîëëèíãà |
41 | tl_on_press equ dword[edi+96] ;óêàçàòåëü íà ôóíêöèþ, êîòîðàÿ âûçûâàåòñÿ ïðè íàæàòèè Enter |
41 | tl_on_press equ dword[edi+96] ;óêàçàòåëü íà ôóíêöèþ, êîòîðàÿ âûçûâàåòñÿ ïðè íàæàòèè Enter |
42 | 42 | ||
43 | ;êîíñòàíòû ñòèëÿ |
43 | ;êîíñòàíòû ñòèëÿ |
44 | tl_key_no_edit equ 1b ;ýëåìåíò íåëüçÿ ðåäàêòèðîâàòü íà êëàâèàòóðå (èçìåíÿòü óðîâíè, óäàëÿòü) |
44 | tl_key_no_edit equ 1b ;ýëåìåíò íåëüçÿ ðåäàêòèðîâàòü íà êëàâèàòóðå (èçìåíÿòü óðîâíè, óäàëÿòü) |
45 | tl_draw_par_line equ 10b ;ðèñîâàòü ëèíèè ê ðîäèòåëüñêîìó óçëó |
45 | tl_draw_par_line equ 10b ;ðèñîâàòü ëèíèè ê ðîäèòåëüñêîìó óçëó |
46 | tl_list_box_mode equ 100b ;ñòèëü íå îòîáðàæàåò óðîâíè (êàê â ListBox âñå îäíîãî óðîâíÿ) |
46 | tl_list_box_mode equ 100b ;ñòèëü íå îòîáðàæàåò óðîâíè (êàê â ListBox âñå îäíîãî óðîâíÿ) |
47 | 47 | ||
48 | ;êîíñòàíòû äëÿ ôóíêöèé |
48 | ;êîíñòàíòû äëÿ ôóíêöèé |
49 | tl_err_save_memory_size equ 10b ;íå õâàòàåò ïàìÿòè äëÿ ñîõðàíåíèÿ ýëåìåíòà |
49 | tl_err_save_memory_size equ 10b ;íå õâàòàåò ïàìÿòè äëÿ ñîõðàíåíèÿ ýëåìåíòà |
50 | tl_err_load_caption equ 1b ;â ïàìÿòè íåò çàãîëîâêà 'tree' |
50 | tl_err_load_caption equ 1b ;â ïàìÿòè íåò çàãîëîâêà 'tree' |
51 | tl_err_load_info_size equ 100b ;íå ñîâïàäàåò ðàçìåð èíôîðìàöèîííîé ñòðóêòóðû ïðè îòêðûòèè |
51 | tl_err_load_info_size equ 100b ;íå ñîâïàäàåò ðàçìåð èíôîðìàöèîííîé ñòðóêòóðû ïðè îòêðûòèè |
52 | tl_load_mode_add equ 0x20000 ;îïöèÿ ñ÷èòûâàíèÿ â ðåæèìå äîáàâëåíèÿ èíôîðìàöèè |
52 | tl_load_mode_add equ 0x20000 ;îïöèÿ ñ÷èòûâàíèÿ â ðåæèìå äîáàâëåíèÿ èíôîðìàöèè |
53 | tl_save_load_heder_size equ 26 ;ðàçìåð çàãîëîâêà äëÿ çàïèñè/÷òåíèÿ ýëåìåíòîâ |
53 | tl_save_load_heder_size equ 26 ;ðàçìåð çàãîëîâêà äëÿ çàïèñè/÷òåíèÿ ýëåìåíòîâ |
54 | 54 | ||
55 | ;data_info dd ? ;+ 0 óêàçàòåëü íà îñíîâíûå äàíûå |
55 | ;data_info dd ? ;+ 0 óêàçàòåëü íà îñíîâíûå äàíûå |
56 | ;ls_tim dd ? ;+34 âðåìÿ ïîñëåäíåãî ñîõðàíåíèÿ |
56 | ;ls_tim dd ? ;+34 âðåìÿ ïîñëåäíåãî ñîõðàíåíèÿ |
57 | ;on_activate dd ? ;+92 óêàçàòåëü íà ôóíêöèþ ïðè àêòèâèðîâàíèè óçëà |
57 | ;on_activate dd ? ;+92 óêàçàòåëü íà ôóíêöèþ ïðè àêòèâèðîâàíèè óçëà |
58 | 58 | ||
59 | macro use_tree_list |
59 | macro use_tree_list |
60 | { |
60 | { |
61 | ;----------------------------------------------------------------------------- |
61 | ;----------------------------------------------------------------------------- |
62 | ;ôóíêöèÿ äëÿ âûäåëåíèÿ ïàìÿòè |
62 | ;ôóíêöèÿ äëÿ âûäåëåíèÿ ïàìÿòè |
63 | ;input: |
63 | ;input: |
64 | ; ecx = size data |
64 | ; ecx = size data |
65 | ;otput: |
65 | ;otput: |
66 | ; eax = pointer to memory |
66 | ; eax = pointer to memory |
67 | align 4 |
67 | align 4 |
68 | mem_Alloc: |
68 | mem_Alloc: |
69 | push ebx |
69 | push ebx |
70 | mov eax,68 |
70 | mov eax,68 |
71 | mov ebx,12 |
71 | mov ebx,12 |
72 | int 0x40 |
72 | int 0x40 |
73 | pop ebx |
73 | pop ebx |
74 | ret |
74 | ret |
75 | ;----------------------------------------------------------------------------- |
75 | ;----------------------------------------------------------------------------- |
76 | ;ôóíêöèÿ äëÿ îñâîáîæäåíèÿ ïàìÿòè |
76 | ;ôóíêöèÿ äëÿ îñâîáîæäåíèÿ ïàìÿòè |
77 | ;input: |
77 | ;input: |
78 | ; ecx = pointer to memory |
78 | ; ecx = pointer to memory |
79 | align 4 |
79 | align 4 |
80 | mem_Free: |
80 | mem_Free: |
81 | push eax ebx |
81 | push eax ebx |
82 | cmp ecx,0 |
82 | cmp ecx,0 |
83 | jz @f |
83 | jz @f |
84 | mov eax,68 |
84 | mov eax,68 |
85 | mov ebx,13 |
85 | mov ebx,13 |
86 | int 0x40 |
86 | int 0x40 |
87 | @@: |
87 | @@: |
88 | pop ebx eax |
88 | pop ebx eax |
89 | ret |
89 | ret |
90 | 90 | ||
91 | align 4 |
91 | align 4 |
92 | tl_data_init: ;âûäåëíèå ïàìÿòè äëÿ ñòðóêòóð ñïèñêà è îñíîâíîé èíôîðìàöèè (êîíñòðóêòîð) |
92 | tl_data_init: ;âûäåëíèå ïàìÿòè äëÿ ñòðóêòóð ñïèñêà è îñíîâíîé èíôîðìàöèè (êîíñòðóêòîð) |
93 | push ebp |
93 | push ebp |
94 | mov ebp,esp |
94 | mov ebp,esp |
95 | push eax ecx edi |
95 | push eax ecx edi |
96 | mov edi,dword[ebp+8] |
96 | mov edi,dword[ebp+8] |
97 | 97 | ||
98 | xor ecx,ecx |
98 | xor ecx,ecx |
99 | mov cx,tl_info_size |
99 | mov cx,tl_info_size |
100 | imul ecx,dword[edi+6] |
100 | imul ecx,tl_info_max_count |
101 | call mem_Alloc |
101 | call mem_Alloc |
102 | mov dword[edi],eax ;êîïèðóåì óêàçàòåëü íà ïîëó÷åíóþ ïàìÿòü â ñòðóêòóðó |
102 | mov dword[edi],eax ;êîïèðóåì óêàçàòåëü íà ïîëó÷åíóþ ïàìÿòü â ñòðóêòóðó |
103 | mov tl_data_img,0 ;îáíóëÿåì óêàçàòåëü 'data_img' |
103 | mov tl_data_img,0 ;îáíóëÿåì óêàçàòåëü 'data_img' |
104 | mov tl_data_img_sys,0 ;îáíóëÿåì óêàçàòåëü 'data_img_sys' |
104 | mov tl_data_img_sys,0 ;îáíóëÿåì óêàçàòåëü 'data_img_sys' |
105 | 105 | ||
106 | mov ecx,sizeof.TreeList |
106 | mov ecx,sizeof.TreeList |
107 | imul ecx,dword[edi+6] |
107 | imul ecx,tl_info_max_count |
108 | call mem_Alloc |
108 | call mem_Alloc |
109 | mov tl_data_nodes,eax ;êîïèðóåì óêàçàòåëü íà ïîëó÷åíóþ ïàìÿòü â ñòðóêòóðó |
109 | mov tl_data_nodes,eax ;êîïèðóåì óêàçàòåëü íà ïîëó÷åíóþ ïàìÿòü â ñòðóêòóðó |
110 | 110 | ||
111 | push dword edi |
111 | push dword edi |
112 | call tl_info_clear |
112 | call tl_info_clear |
113 | 113 | ||
114 | ;íàñòðîéêè äî÷åðíåãî ñêðîëëèíãà |
114 | ;íàñòðîéêè äî÷åðíåãî ñêðîëëèíãà |
115 | cmp tl_p_scrol,0 |
115 | cmp tl_p_scrol,0 |
116 | je @f |
116 | je @f |
117 | mov eax,tl_p_scrol |
117 | mov eax,tl_p_scrol |
118 | ;*** öâåòîâûå íàñòðîéêè *** |
118 | ;*** öâåòîâûå íàñòðîéêè *** |
119 | mov ecx,tl_col_bkg |
119 | mov ecx,tl_col_bkg |
120 | mov dword[eax+28],ecx ;+28 .bckg_col |
120 | mov dword[eax+28],ecx ;+28 .bckg_col |
121 | mov ecx,tl_col_zag |
121 | mov ecx,tl_col_zag |
122 | mov dword[eax+32],ecx ;+32 .frnt_col |
122 | mov dword[eax+32],ecx ;+32 .frnt_col |
123 | mov ecx,tl_col_txt |
123 | mov ecx,tl_col_txt |
124 | mov dword[eax+36],ecx ;+32 .line_col |
124 | mov dword[eax+36],ecx ;+32 .line_col |
125 | ;*** íàñòðîéêè ðàçìåðîâ *** |
125 | ;*** íàñòðîéêè ðàçìåðîâ *** |
126 | mov ecx,tl_box_left |
126 | mov ecx,tl_box_left |
127 | add ecx,tl_box_width |
127 | add ecx,tl_box_width |
128 | mov word[eax+2],cx |
128 | mov word[eax+2],cx |
129 | mov ecx,tl_box_height |
129 | mov ecx,tl_box_height |
130 | mov word[eax+4],cx |
130 | mov word[eax+4],cx |
131 | mov ecx,tl_box_top |
131 | mov ecx,tl_box_top |
132 | mov word[eax+6],cx |
132 | mov word[eax+6],cx |
133 | @@: |
133 | @@: |
134 | pop edi ecx eax |
134 | pop edi ecx eax |
135 | pop ebp |
135 | pop ebp |
136 | ret 4 |
136 | ret 4 |
137 | 137 | ||
138 | align 4 |
138 | align 4 |
139 | tl_data_clear: ;î÷èñòêà ïàìÿòè ýëåìåíòà (äåñòðóêòîð) |
139 | tl_data_clear: ;î÷èñòêà ïàìÿòè ýëåìåíòà (äåñòðóêòîð) |
140 | push ebp |
140 | push ebp |
141 | mov ebp,esp |
141 | mov ebp,esp |
142 | push ecx edi |
142 | push ecx edi |
143 | mov edi,dword[ebp+8] |
143 | mov edi,dword[ebp+8] |
144 | cmp tl_data_img,0 |
144 | cmp tl_data_img,0 |
145 | je @f |
145 | je @f |
146 | mov ecx,dword[edi+18] |
146 | mov ecx,tl_data_img |
147 | call mem_Free ;÷èñòêà ñèñòåìíûõ èêîíîê |
147 | call mem_Free ;÷èñòêà ñèñòåìíûõ èêîíîê |
148 | @@: |
148 | @@: |
149 | cmp tl_data_img_sys,0 |
149 | cmp tl_data_img_sys,0 |
150 | je @f |
150 | je @f |
151 | mov ecx,tl_data_img_sys |
151 | mov ecx,tl_data_img_sys |
152 | call mem_Free ;÷èñòêà ñèñòåìíûõ èêîíîê |
152 | call mem_Free ;÷èñòêà ñèñòåìíûõ èêîíîê |
153 | @@: |
153 | @@: |
154 | mov ecx,dword[edi] |
154 | mov ecx,dword[edi] |
155 | call mem_Free |
155 | call mem_Free |
156 | 156 | ||
157 | mov ecx,tl_data_nodes |
157 | mov ecx,tl_data_nodes |
158 | call mem_Free |
158 | call mem_Free |
159 | pop edi ecx |
159 | pop edi ecx |
160 | pop ebp |
160 | pop ebp |
161 | ret 4 |
161 | ret 4 |
162 | 162 | ||
163 | align 4 |
163 | align 4 |
164 | tl_info_clear: ;î÷èñòêà ñïèñêà (èíôîðìàöèè) |
164 | tl_info_clear: ;î÷èñòêà ñïèñêà (èíôîðìàöèè) |
165 | push ebp |
165 | push ebp |
166 | mov ebp,esp |
166 | mov ebp,esp |
167 | push eax ecx edi |
167 | push eax ecx edi |
168 | mov edi,dword[ebp+8] |
168 | mov edi,dword[ebp+8] |
169 | mov tl_ch_tim,0 |
169 | mov tl_ch_tim,0 |
170 | mov dword[edi+34],0 ;ls_tim |
170 | mov dword[edi+34],0 ;ls_tim |
171 | mov tl_tim_undo,0 |
171 | mov tl_tim_undo,0 |
172 | mov tl_cur_pos,0 |
172 | mov tl_cur_pos,0 |
173 | ;xor ecx,ecx |
173 | ;xor ecx,ecx |
174 | mov ecx,sizeof.TreeList |
174 | mov ecx,sizeof.TreeList |
175 | imul ecx,dword[edi+6] |
175 | imul ecx,tl_info_max_count |
176 | mov eax,tl_data_nodes |
176 | mov eax,tl_data_nodes |
177 | @@: |
177 | @@: |
178 | mov byte[eax],0 ;÷èñòèì óçëû 0-ìè |
178 | mov byte[eax],0 ;÷èñòèì óçëû 0-ìè |
179 | inc eax |
179 | inc eax |
180 | loop @b |
180 | loop @b |
181 | mov eax,tl_data_nodes ;óêàçàòåëü íà 0-é óçåë |
181 | mov eax,tl_data_nodes ;óêàçàòåëü íà 0-é óçåë |
182 | mov dword[eax+8],1 ;óêàçàòåëü next â 0-ì óçëå ïðèðàâíèâàåì ê 1 |
182 | mov dword[eax+8],1 ;óêàçàòåëü next â 0-ì óçëå ïðèðàâíèâàåì ê 1 |
183 | 183 | ||
184 | cmp tl_p_scrol,0 ;îáðàáîòêà ñêðîëëèíãà |
184 | cmp tl_p_scrol,0 ;îáðàáîòêà ñêðîëëèíãà |
185 | je @f |
185 | je @f |
186 | mov eax,tl_p_scrol |
186 | mov eax,tl_p_scrol |
187 | mov dword[eax+24],0 ;+24 .position |
187 | mov dword[eax+24],0 ;+24 .position |
188 | call tb_scrol_resize |
188 | call tb_scrol_resize |
189 | @@: |
189 | @@: |
190 | pop edi ecx eax |
190 | pop edi ecx eax |
191 | pop ebp |
191 | pop ebp |
192 | ret 4 |
192 | ret 4 |
193 | 193 | ||
194 | 194 | ||
195 | align 4 |
195 | align 4 |
196 | tl_key: ;ðåàêöèÿ íà êëàâèàòóðó |
196 | tl_key: ;ðåàêöèÿ íà êëàâèàòóðó |
197 | push ebp |
197 | push ebp |
198 | mov ebp,esp |
198 | mov ebp,esp |
199 | push ebx ecx edi |
199 | push ebx ecx edi |
200 | mov edi,dword[ebp+8] |
200 | mov edi,dword[ebp+8] |
201 | 201 | ||
202 | mov ebx,tl_el_focus |
202 | mov ebx,tl_el_focus |
203 | cmp dword[ebx],edi |
203 | cmp dword[ebx],edi |
204 | jne .no_focus ;ýëåìåíò íå â ôîêóñå |
204 | jne .no_focus ;ýëåìåíò íå â ôîêóñå |
205 | 205 | ||
206 | push eax |
206 | push eax |
207 | mov eax,66 |
207 | mov eax,66 |
208 | mov ebx,2 |
208 | mov ebx,2 |
209 | int 0x40 ;ïîëó÷èòü ðåæèì ââîäà ñ êëàâèàòóðû |
209 | int 0x40 ;ïîëó÷èòü ðåæèì ââîäà ñ êëàâèàòóðû |
210 | 210 | ||
211 | lea ecx,[tl_key_scan] |
211 | lea ecx,[tl_key_scan] |
212 | cmp eax,1 ;1 = ñêàíêîäû |
212 | cmp eax,1 ;1 = ñêàíêîäû |
213 | je @f |
213 | je @f |
214 | lea ecx,[tl_key_ascii] |
214 | lea ecx,[tl_key_ascii] |
215 | @@: |
215 | @@: |
216 | pop eax |
216 | pop eax |
217 | 217 | ||
218 | xor bx,bx |
218 | xor bx,bx |
219 | cmp ah,byte[ecx] ;Enter |
219 | cmp ah,byte[ecx] ;Enter |
220 | jne @f |
220 | jne @f |
221 | cmp tl_on_press,0 |
221 | cmp tl_on_press,0 |
222 | je @f |
222 | je @f |
223 | call tl_on_press |
223 | call tl_on_press |
224 | @@: |
224 | @@: |
225 | cmp ah,byte[ecx+1] ;Space |
225 | cmp ah,byte[ecx+1] ;Space |
226 | jne @f |
226 | jne @f |
227 | push dword edi |
227 | push dword edi |
228 | call tl_node_close_open |
228 | call tl_node_close_open |
229 | @@: |
229 | @@: |
230 | cmp ah,byte[ecx+2] ;Up |
230 | cmp ah,byte[ecx+2] ;Up |
231 | jne @f |
231 | jne @f |
232 | push dword edi |
232 | push dword edi |
233 | call tl_cur_perv |
233 | call tl_cur_perv |
234 | @@: |
234 | @@: |
235 | cmp ah,byte[ecx+3] ;Down |
235 | cmp ah,byte[ecx+3] ;Down |
236 | jne @f |
236 | jne @f |
237 | push dword edi |
237 | push dword edi |
238 | call tl_cur_next |
238 | call tl_cur_next |
239 | @@: |
239 | @@: |
240 | cmp ah,byte[ecx+7] ;Page Up |
240 | cmp ah,byte[ecx+7] ;Page Up |
241 | jne @f |
241 | jne @f |
242 | push dword edi |
242 | push dword edi |
243 | call tl_cur_page_up |
243 | call tl_cur_page_up |
244 | @@: |
244 | @@: |
245 | cmp ah,byte[ecx+8] ;Page Down |
245 | cmp ah,byte[ecx+8] ;Page Down |
246 | jne @f |
246 | jne @f |
247 | push dword edi |
247 | push dword edi |
248 | call tl_cur_page_down |
248 | call tl_cur_page_down |
249 | @@: |
249 | @@: |
250 | 250 | ||
251 | bt tl_style,0 ;tl_key_no_edit |
251 | bt tl_style,0 ;tl_key_no_edit |
252 | jc .no_edit |
252 | jc .no_edit |
253 | cmp ah,byte[ecx+4] ;Left |
253 | cmp ah,byte[ecx+4] ;Left |
254 | jne @f |
254 | jne @f |
255 | push dword edi |
255 | push dword edi |
256 | call tl_node_lev_dec |
256 | call tl_node_lev_dec |
257 | mov bx,1 |
257 | mov bx,1 |
258 | @@: |
258 | @@: |
259 | cmp ah,byte[ecx+5] ;Right |
259 | cmp ah,byte[ecx+5] ;Right |
260 | jne @f |
260 | jne @f |
261 | push dword edi |
261 | push dword edi |
262 | call tl_node_lev_inc |
262 | call tl_node_lev_inc |
263 | mov bx,1 |
263 | mov bx,1 |
264 | @@: |
264 | @@: |
265 | cmp ah,byte[ecx+6] ;Delete |
265 | cmp ah,byte[ecx+6] ;Delete |
266 | jne @f |
266 | jne @f |
267 | push dword edi |
267 | push dword edi |
268 | call tl_node_delete |
268 | call tl_node_delete |
269 | mov bx,1 |
269 | mov bx,1 |
270 | @@: |
270 | @@: |
271 | .no_edit: |
271 | .no_edit: |
272 | 272 | ||
273 | cmp bx,1 |
273 | cmp bx,1 |
274 | jne .no_focus |
274 | jne .no_focus |
275 | push dword edi |
275 | push dword edi |
276 | call tl_draw |
276 | call tl_draw |
277 | .no_focus: |
277 | .no_focus: |
278 | 278 | ||
279 | pop edi ecx ebx |
279 | pop edi ecx ebx |
280 | pop ebp |
280 | pop ebp |
281 | ret 4 |
281 | ret 4 |
282 | 282 | ||
283 | align 4 |
283 | align 4 |
284 | tl_mouse: ;ðåàêöèÿ íà ìûøü |
284 | tl_mouse: ;ðåàêöèÿ íà ìûøü |
285 | push ebp |
285 | push ebp |
286 | mov ebp,esp |
286 | mov ebp,esp |
287 | pushad |
287 | pushad |
288 | mov edi,dword[ebp+8] |
288 | mov edi,dword[ebp+8] |
289 | 289 | ||
290 | mov eax,37 |
290 | mov eax,37 |
291 | mov ebx,1 |
291 | mov ebx,1 |
292 | int 0x40 |
292 | int 0x40 |
293 | 293 | ||
294 | mov ebx,tl_box_left |
294 | mov ebx,tl_box_left |
295 | shl ebx,16 |
295 | shl ebx,16 |
296 | cmp eax,ebx ;ëåâàÿ ãðàíèöà îêíà |
296 | cmp eax,ebx ;ëåâàÿ ãðàíèöà îêíà |
297 | jl .no_in_wnd ;.test_scroll |
297 | jl .no_in_wnd ;.test_scroll |
298 | 298 | ||
299 | mov ebx,tl_box_left |
299 | mov ebx,tl_box_left |
300 | add ebx,tl_box_width |
300 | add ebx,tl_box_width |
301 | shl ebx,16 |
301 | shl ebx,16 |
302 | cmp eax,ebx ;ïðàâàÿ ãðàíèöà îêíà |
302 | cmp eax,ebx ;ïðàâàÿ ãðàíèöà îêíà |
303 | jg .test_scroll |
303 | jg .test_scroll |
304 | 304 | ||
305 | mov ebx,tl_box_top |
305 | mov ebx,tl_box_top |
306 | add ebx,tl_box_height |
306 | add ebx,tl_box_height |
307 | cmp ax,bx ;íèæíÿÿ ãðàíèöà îêíà |
307 | cmp ax,bx ;íèæíÿÿ ãðàíèöà îêíà |
308 | jg .test_scroll |
308 | jg .test_scroll |
309 | 309 | ||
310 | sub ebx,tl_box_height |
310 | sub ebx,tl_box_height |
311 | add bx,tl_capt_cy |
311 | add bx,tl_capt_cy |
312 | cmp ax,bx ;âåðõíÿÿ ãðàíèöà îêíà + âûñîòà ïîäïèñè |
312 | cmp ax,bx ;âåðõíÿÿ ãðàíèöà îêíà + âûñîòà ïîäïèñè |
313 | jl .test_scroll |
313 | jl .test_scroll |
314 | 314 | ||
315 | push eax ebx |
315 | push eax ebx |
316 | mov eax,37 |
316 | mov eax,37 |
317 | mov ebx,2 |
317 | mov ebx,2 |
318 | int 0x40 |
318 | int 0x40 |
319 | 319 | ||
320 | bt eax,0 ;left mouse button press |
320 | bt eax,0 ;left mouse button press |
321 | pop ebx eax |
321 | pop ebx eax |
322 | jae .no_draw |
322 | jae .no_draw |
323 | 323 | ||
324 | 324 | ||
325 | mov esi,tl_el_focus |
325 | mov esi,tl_el_focus |
326 | mov dword[esi],edi ;set focus |
326 | mov dword[esi],edi ;set focus |
327 | 327 | ||
328 | ; if '+' or '-' press |
328 | ; if '+' or '-' press |
329 | mov esi,eax |
329 | mov esi,eax |
330 | shr esi,16 |
330 | shr esi,16 |
331 | sub esi,tl_box_left ;esi = mouse x coord in element window |
331 | sub esi,tl_box_left ;esi = mouse x coord in element window |
332 | 332 | ||
333 | and eax,0xffff |
333 | and eax,0xffff |
334 | sub ax,bx |
334 | sub ax,bx |
335 | xor edx,edx |
335 | xor edx,edx |
336 | xor ecx,ecx |
336 | xor ecx,ecx |
337 | mov cx,tl_img_cy |
337 | mov cx,tl_img_cy |
338 | div ecx |
338 | div ecx |
339 | cmp tl_p_scrol,0 ;ó÷èòûâàåì ñêðîëëèíã |
339 | cmp tl_p_scrol,0 ;ó÷èòûâàåì ñêðîëëèíã |
340 | je @f |
340 | je @f |
341 | mov edx,tl_p_scrol |
341 | mov edx,tl_p_scrol |
342 | add eax,dword[edx+24] ;äîáàâëÿåì ñêðîëëèíã íà âåðõó |
342 | add eax,dword[edx+24] ;äîáàâëÿåì ñêðîëëèíã íà âåðõó |
343 | @@: |
343 | @@: |
344 | 344 | ||
345 | mov ecx,eax |
345 | mov ecx,eax |
346 | call tl_get_node_count ;eax = node count |
346 | call tl_get_node_count ;eax = node count |
347 | cmp eax,ecx |
347 | cmp eax,ecx |
348 | jl @f |
348 | jl @f |
349 | mov eax,ecx ;åñëè êóðñîð íå âûøåë çà ïðåäåëû óçëîâ, âîññòàíàâëèâàåì ñòàðîå çíà÷åíèå eax |
349 | mov eax,ecx ;åñëè êóðñîð íå âûøåë çà ïðåäåëû óçëîâ, âîññòàíàâëèâàåì ñòàðîå çíà÷åíèå eax |
350 | @@: |
350 | @@: |
351 | 351 | ||
352 | cmp eax,tl_cur_pos ;åñëè íîâîå çíà÷åíèå êóðñîðà ñîâïàëî ñ ïðåäûäóùèì |
352 | cmp eax,tl_cur_pos ;åñëè íîâîå çíà÷åíèå êóðñîðà ñîâïàëî ñ ïðåäûäóùèì |
353 | je @f ;òî íå ñòèðàåì êóðñîð |
353 | je @f ;òî íå ñòèðàåì êóðñîð |
354 | push esi |
354 | push esi |
355 | mov esi,tl_box_top |
355 | mov esi,tl_box_top |
356 | add esi,tl_box_height ;esi = coord bottom border |
356 | add esi,tl_box_height ;esi = coord bottom border |
357 | call tl_draw_null_cursor ;ñòèðàåì êóðñîð |
357 | call tl_draw_null_cursor ;ñòèðàåì êóðñîð |
358 | pop esi |
358 | pop esi |
359 | @@: |
359 | @@: |
360 | 360 | ||
361 | mov tl_cur_pos,eax |
361 | mov tl_cur_pos,eax |
362 | 362 | ||
363 | ; if '+' or '-' press |
363 | ; if '+' or '-' press |
364 | call tl_get_cur_node_index ;eax = node index |
364 | call tl_get_cur_node_index ;eax = node index |
365 | cmp eax,2 |
365 | cmp eax,2 |
366 | jl .no_open_close ;êóðñîð ñòîèò íà ïóñòîì ìåñòå, áåç óçëîâ |
366 | jl .no_open_close ;êóðñîð ñòîèò íà ïóñòîì ìåñòå, áåç óçëîâ |
367 | imul eax,sizeof.TreeList |
367 | imul eax,sizeof.TreeList |
368 | add eax,tl_data_nodes |
368 | add eax,tl_data_nodes |
369 | xor bx,bx |
369 | xor bx,bx |
370 | mov bl,byte[eax+2] ;+2 lev ñîõðàíÿåì óðîâåíü òåêóùåãî óçëà |
370 | mov bl,byte[eax+2] ;+2 lev ñîõðàíÿåì óðîâåíü òåêóùåãî óçëà |
371 | inc bx ;+ ïîëå äëÿ êóðñîðà |
371 | inc bx ;+ ïîëå äëÿ êóðñîðà |
372 | 372 | ||
373 | cmp si,tl_img_cx |
373 | cmp si,tl_img_cx |
374 | jl .no_open_close ;ìûøåé ïîïàëè íà ëåâîå ïîëå äëÿ êóðñîðà, ãäå òî÷íî íåò '+' è '-' |
374 | jl .no_open_close ;ìûøåé ïîïàëè íà ëåâîå ïîëå äëÿ êóðñîðà, ãäå òî÷íî íåò '+' è '-' |
375 | mov eax,esi |
375 | mov eax,esi |
376 | xor edx,edx |
376 | xor edx,edx |
377 | xor ecx,ecx |
377 | xor ecx,ecx |
378 | mov cx,tl_img_cx |
378 | mov cx,tl_img_cx |
379 | div ecx |
379 | div ecx |
380 | 380 | ||
381 | cmp ax,bx |
381 | cmp ax,bx |
382 | jne .no_open_close |
382 | jne .no_open_close |
383 | 383 | ||
384 | push dword edi |
384 | push dword edi |
385 | call tl_node_close_open |
385 | call tl_node_close_open |
386 | .no_open_close: |
386 | .no_open_close: |
387 | 387 | ||
388 | mov esi,tl_box_top |
388 | mov esi,tl_box_top |
389 | add esi,tl_box_height ;esi = coord bottom border |
389 | add esi,tl_box_height ;esi = coord bottom border |
390 | call tl_draw_cursor ;ïåðåðèñîâêà êóðñîðà |
390 | call tl_draw_cursor ;ïåðåðèñîâêà êóðñîðà |
391 | call tl_draw_caption_cur_pos |
391 | call tl_draw_caption_cur_pos |
392 | jmp .no_draw |
392 | jmp .no_draw |
393 | ;--- mouse event for children scrollbar ---------------------------------------- |
393 | ;--- mouse event for children scrollbar ---------------------------------------- |
394 | .test_scroll: |
394 | .test_scroll: |
395 | mov edx,tl_p_scrol |
395 | mov edx,tl_p_scrol |
396 | cmp edx,0 |
396 | cmp edx,0 |
397 | je .no_in_wnd ;ïîëüçîâàòåëü íå ñîçäàë äî÷åðíåãî ñêðîëëèíãà |
397 | je .no_in_wnd ;ïîëüçîâàòåëü íå ñîçäàë äî÷åðíåãî ñêðîëëèíãà |
398 | shr ebx,16 |
398 | shr ebx,16 |
399 | add bx,word[edx] ;+0 .size_x |
399 | add bx,word[edx] ;+0 .size_x |
400 | shl ebx,16 |
400 | shl ebx,16 |
401 | cmp eax,ebx ;ïðàâàÿ ãðàíèöà îêíà |
401 | cmp eax,ebx ;ïðàâàÿ ãðàíèöà îêíà |
402 | jg .no_in_wnd |
402 | jg .no_in_wnd |
403 | 403 | ||
404 | mov eax,dword[edx+16] ;+16 .max_area |
404 | mov eax,dword[edx+16] ;+16 .max_area |
405 | cmp eax,dword[edx+20] ;+20 .cur_area |
405 | cmp eax,dword[edx+20] ;+20 .cur_area |
406 | jbe .no_in_wnd ;âñå óçëû ïîïàäàþò â îêíî ñêðîëëèíãà |
406 | jbe .no_in_wnd ;âñå óçëû ïîïàäàþò â îêíî ñêðîëëèíãà |
407 | push dword edx |
407 | push dword edx |
408 | call scroll_bar_vertical.mouse ;scrollbar_ver_mouse |
408 | call scroll_bar_vertical.mouse ;scrollbar_ver_mouse |
409 | 409 | ||
410 | cmp dword[edx+40],0 ;+40 .redraw |
410 | cmp dword[edx+40],0 ;+40 .redraw |
411 | je @f |
411 | je @f |
412 | mov dword[edx+40],0 ;+40 .redraw |
412 | mov dword[edx+40],0 ;+40 .redraw |
413 | push dword edi |
413 | push dword edi |
414 | call tl_draw ;ïðîèçîøëè èçìåíåíèÿ ñêðîëëèíãà |
414 | call tl_draw ;ïðîèçîøëè èçìåíåíèÿ ñêðîëëèíãà |
415 | @@: |
415 | @@: |
416 | cmp dword[edx+46],0 ;+46 .delta2 |
416 | cmp dword[edx+46],0 ;+46 .delta2 |
417 | jne .no_draw ;ïîïàëè íà ñêðîëëèíã - íå ñíèìàåì ôîêóñ ñ TreeList |
417 | jne .no_draw ;ïîïàëè íà ñêðîëëèíã - íå ñíèìàåì ôîêóñ ñ TreeList |
418 | ;------------------------------------------------------------------------------- |
418 | ;------------------------------------------------------------------------------- |
419 | .no_in_wnd: ;íå ïîïàëè â îêíî - ïîòåðÿ ôîêóñà (ïðè óñëîâèè ÷òî ôîêóñ áûë íà äàííîì ýåëåìåíòå) |
419 | .no_in_wnd: ;íå ïîïàëè â îêíî - ïîòåðÿ ôîêóñà (ïðè óñëîâèè ÷òî ôîêóñ áûë íà äàííîì ýåëåìåíòå) |
420 | mov eax,37 ;ïðîâåðÿåì íàæàòîñòü ëþáûõ êíîïîê |
420 | mov eax,37 ;ïðîâåðÿåì íàæàòîñòü ëþáûõ êíîïîê |
421 | mov ebx,2 |
421 | mov ebx,2 |
422 | int 0x40 |
422 | int 0x40 |
423 | cmp eax,0 ;íè÷å íå íàæàëè eax=0 |
423 | cmp eax,0 ;íè÷å íå íàæàëè eax=0 |
424 | je .no_draw |
424 | je .no_draw |
425 | 425 | ||
426 | mov ebx,tl_el_focus |
426 | mov ebx,tl_el_focus |
427 | cmp dword[ebx],edi |
427 | cmp dword[ebx],edi |
428 | jne .no_draw ;ýëåìåíò íå â ôîêóñå |
428 | jne .no_draw ;ýëåìåíò íå â ôîêóñå |
429 | mov dword[ebx],0 ;reset focus |
429 | mov dword[ebx],0 ;reset focus |
430 | mov esi,tl_box_top |
430 | mov esi,tl_box_top |
431 | add esi,tl_box_height ;esi = coord bottom border |
431 | add esi,tl_box_height ;esi = coord bottom border |
432 | call tl_draw_cursor ;ðèñóåì êóðñîð ñ ïîòåðÿíûì ôîêóñîì |
432 | call tl_draw_cursor ;ðèñóåì êóðñîð ñ ïîòåðÿíûì ôîêóñîì |
433 | .no_draw: |
433 | .no_draw: |
434 | 434 | ||
435 | popad |
435 | popad |
436 | pop ebp |
436 | pop ebp |
437 | ret 4 |
437 | ret 4 |
438 | 438 | ||
439 | align 4 |
439 | align 4 |
440 | tl_info_undo: ;îòìåíà äåéñòâèÿ |
440 | tl_info_undo: ;îòìåíà äåéñòâèÿ |
441 | push ebp |
441 | push ebp |
442 | mov ebp,esp |
442 | mov ebp,esp |
443 | push eax edi |
443 | push eax edi |
444 | mov edi,dword[ebp+8] |
444 | mov edi,dword[ebp+8] |
445 | mov eax,tl_tim_undo |
445 | mov eax,tl_tim_undo |
446 | cmp tl_ch_tim,eax |
446 | cmp tl_ch_tim,eax |
447 | jbe @f |
447 | jbe @f |
448 | inc tl_tim_undo |
448 | inc tl_tim_undo |
449 | call tb_scrol_resize ;îáðàáîòêà ñêðîëëèíãà |
449 | call tb_scrol_resize ;îáðàáîòêà ñêðîëëèíãà |
450 | @@: |
450 | @@: |
451 | pop edi eax |
451 | pop edi eax |
452 | pop ebp |
452 | pop ebp |
453 | ret 4 |
453 | ret 4 |
454 | 454 | ||
455 | align 4 |
455 | align 4 |
456 | tl_info_redo: ;ïîâòîð äåéñòâèÿ |
456 | tl_info_redo: ;ïîâòîð äåéñòâèÿ |
457 | push ebp |
457 | push ebp |
458 | mov ebp,esp |
458 | mov ebp,esp |
459 | push edi |
459 | push edi |
460 | mov edi,dword[ebp+8] |
460 | mov edi,dword[ebp+8] |
461 | cmp tl_tim_undo,1 |
461 | cmp tl_tim_undo,1 |
462 | jl @f |
462 | jl @f |
463 | dec tl_tim_undo |
463 | dec tl_tim_undo |
464 | call tb_scrol_resize ;îáðàáîòêà ñêðîëëèíãà |
464 | call tb_scrol_resize ;îáðàáîòêà ñêðîëëèíãà |
465 | @@: |
465 | @@: |
466 | pop edi |
466 | pop edi |
467 | pop ebp |
467 | pop ebp |
468 | ret 4 |
468 | ret 4 |
469 | 469 | ||
470 | align 4 |
470 | align 4 |
471 | tl_info_set_undo: ;óäàëåíèå îòìåíåííûõ äåéñòâèé |
471 | tl_info_set_undo: ;óäàëåíèå îòìåíåííûõ äåéñòâèé |
472 | ; push ebp |
472 | ; push ebp |
473 | ; mov ebp,esp |
473 | ; mov ebp,esp |
474 | ; push edi |
474 | ; push edi |
475 | ; mov edi,dword[ebp+8] |
475 | ; mov edi,dword[ebp+8] |
476 | 476 | ||
477 | ; mov [dragk],0 ;çàêàí÷èâàåì âûäåëåíèå îò êëàâèàòóðû |
477 | ; mov [dragk],0 ;çàêàí÷èâàåì âûäåëåíèå îò êëàâèàòóðû |
478 | cmp tl_tim_undo,1 |
478 | cmp tl_tim_undo,1 |
479 | jl .no_work |
479 | jl .no_work |
480 | 480 | ||
481 | push eax ebx ecx edx |
481 | push eax ebx ecx edx |
482 | mov edx,tl_data_nodes |
482 | mov edx,tl_data_nodes |
483 | mov ecx,edx |
483 | mov ecx,edx |
484 | add ecx,sizeof.TreeList |
484 | add ecx,sizeof.TreeList |
485 | call tl_move_next ;long i=node[0].next; |
485 | call tl_move_next ;long i=node[0].next; |
486 | mov eax,tl_tim_undo |
486 | mov eax,tl_tim_undo |
487 | sub tl_ch_tim,eax ;ch_tim-=tim_undo; |
487 | sub tl_ch_tim,eax ;ch_tim-=tim_undo; |
488 | mov eax,tl_ch_tim |
488 | mov eax,tl_ch_tim |
489 | cmp [edi+34],eax ;if(ls_tim>ch_tim) |
489 | cmp [edi+34],eax ;if(ls_tim>ch_tim) |
490 | jle @f |
490 | jle @f |
491 | mov dword[edi+34],0 ;ls_tim=0 |
491 | mov dword[edi+34],0 ;ls_tim=0 |
492 | @@: |
492 | @@: |
493 | cmp edx,ecx |
493 | cmp edx,ecx |
494 | jle @f |
494 | jle @f |
495 | 495 | ||
496 | ;if(node[i].tc>ch_tim){ // åñëè ñîçäàíèå ñèìâîëà áûëî îòìåíåíî |
496 | ;if(node[i].tc>ch_tim){ // åñëè ñîçäàíèå ñèìâîëà áûëî îòìåíåíî |
497 | cmp dword[edx+12],eax |
497 | cmp dword[edx+12],eax |
498 | jle .no_u1 |
498 | jle .no_u1 |
499 | mov dword[edx+12],0 |
499 | mov dword[edx+12],0 |
500 | mov dword[edx+16],0 |
500 | mov dword[edx+16],0 |
501 | 501 | ||
502 | mov ebx, dword[edx+4] |
502 | mov ebx, dword[edx+4] |
503 | imul ebx,sizeof.TreeList |
503 | imul ebx,sizeof.TreeList |
504 | add ebx, tl_data_nodes ;.next |
504 | add ebx, tl_data_nodes ;.next |
505 | push dword[edx+8] ;node[node[i].perv].next=node[i].next; |
505 | push dword[edx+8] ;node[node[i].perv].next=node[i].next; |
506 | pop dword[ebx+8] |
506 | pop dword[ebx+8] |
507 | 507 | ||
508 | mov ebx, dword[edx+8] |
508 | mov ebx, dword[edx+8] |
509 | imul ebx,sizeof.TreeList |
509 | imul ebx,sizeof.TreeList |
510 | add ebx, tl_data_nodes ;.perv |
510 | add ebx, tl_data_nodes ;.perv |
511 | push dword[edx+4] ;node[node[i].next].perv=node[i].perv; |
511 | push dword[edx+4] ;node[node[i].next].perv=node[i].perv; |
512 | pop dword[ebx+4] |
512 | pop dword[ebx+4] |
513 | 513 | ||
514 | .no_u1: |
514 | .no_u1: |
515 | 515 | ||
516 | ;else if(node[i].td>ch_tim) node[i].td=0; // åñëè óäàëåíèå ñèìâîëà áûëî îòìåíåíî |
516 | ;else if(node[i].td>ch_tim) node[i].td=0; // åñëè óäàëåíèå ñèìâîëà áûëî îòìåíåíî |
517 | cmp dword[edx+16],eax |
517 | cmp dword[edx+16],eax |
518 | jle .no_u2 |
518 | jle .no_u2 |
519 | mov dword[edx+16],0 |
519 | mov dword[edx+16],0 |
520 | .no_u2: |
520 | .no_u2: |
521 | 521 | ||
522 | call tl_move_next |
522 | call tl_move_next |
523 | jmp @b |
523 | jmp @b |
524 | @@: |
524 | @@: |
525 | mov tl_tim_undo,0 |
525 | mov tl_tim_undo,0 |
526 | ; mov eax,[edi+?] ;co_tim |
526 | ; mov eax,[edi+?] ;co_tim |
527 | ; cmp tl_ch_tim,eax ;ch_tim |
527 | ; cmp tl_ch_tim,eax ;ch_tim |
528 | ; jge @f |
528 | ; jge @f |
529 | ; mov [edi+?],0 ;co_tim |
529 | ; mov [edi+?],0 ;co_tim |
530 | ; @@: |
530 | ; @@: |
531 | pop edx ecx ebx eax |
531 | pop edx ecx ebx eax |
532 | .no_work: |
532 | .no_work: |
533 | 533 | ||
534 | ; pop edi |
534 | ; pop edi |
535 | ; pop ebp |
535 | ; pop ebp |
536 | ; ret 4 |
536 | ; ret 4 |
537 | ret |
537 | ret |
538 | 538 | ||
539 | align 4 |
539 | align 4 |
540 | tl_draw: ;âûâîä ñïèñêà íà ýêðàí |
540 | tl_draw: ;âûâîä ñïèñêà íà ýêðàí |
541 | push ebp |
541 | push ebp |
542 | mov ebp,esp |
542 | mov ebp,esp |
543 | pushad |
543 | pushad |
544 | ;draw dir_list main rect |
544 | ;draw dir_list main rect |
545 | mov edi,dword[ebp+8] |
545 | mov edi,dword[ebp+8] |
546 | mov ebx,tl_box_left |
546 | mov ebx,tl_box_left |
547 | shl ebx,16 |
547 | shl ebx,16 |
548 | add ebx,tl_box_width |
548 | add ebx,tl_box_width |
549 | mov ecx,tl_box_top |
549 | mov ecx,tl_box_top |
550 | shl ecx,16 |
550 | shl ecx,16 |
551 | mov cx,tl_capt_cy |
551 | mov cx,tl_capt_cy |
552 | mov edx,tl_col_zag |
552 | mov edx,tl_col_zag |
553 | mov eax,13 |
553 | mov eax,13 |
554 | int 0x40 ;draw window caption |
554 | int 0x40 ;draw window caption |
555 | 555 | ||
556 | add ecx,tl_box_top |
556 | add ecx,tl_box_top |
557 | shl ecx,16 |
557 | shl ecx,16 |
558 | add ecx,tl_box_height |
558 | add ecx,tl_box_height |
559 | sub cx,tl_capt_cy |
559 | sub cx,tl_capt_cy |
560 | mov edx,tl_col_bkg |
560 | mov edx,tl_col_bkg |
561 | int 0x40 ;draw window client rect |
561 | int 0x40 ;draw window client rect |
562 | 562 | ||
563 | cmp tl_capt_cy,9 ;9 - minimum caption height |
563 | cmp tl_capt_cy,9 ;9 - minimum caption height |
564 | jl @f |
564 | jl @f |
565 | mov ebx,edi ;calculate cursor position |
565 | mov ebx,edi ;calculate cursor position |
566 | mov eax,tl_cur_pos |
566 | mov eax,tl_cur_pos |
567 | inc eax |
567 | inc eax |
568 | lea edi,[txt_capt_cur] |
568 | lea edi,[txt_capt_cur] |
569 | add edi,7 |
569 | add edi,7 |
570 | call tl_convert_to_str |
570 | call tl_convert_to_str |
571 | 571 | ||
572 | mov edi,ebx |
572 | mov edi,ebx |
573 | mov eax,tl_tim_undo |
573 | mov eax,tl_tim_undo |
574 | lea edi,[txt_capt_otm] |
574 | lea edi,[txt_capt_otm] |
575 | add edi,7 |
575 | add edi,7 |
576 | call tl_convert_to_str |
576 | call tl_convert_to_str |
577 | mov edi,ebx ;restore edi |
577 | mov edi,ebx ;restore edi |
578 | 578 | ||
579 | mov eax,4 ;draw text captions |
579 | mov eax,4 ;draw text captions |
580 | mov ebx,tl_box_left |
580 | mov ebx,tl_box_left |
581 | shl ebx,16 |
581 | shl ebx,16 |
582 | add ebx,5*65536+3 |
582 | add ebx,5*65536+3 |
583 | add ebx,tl_box_top |
583 | add ebx,tl_box_top |
584 | mov ecx,tl_col_txt |
584 | mov ecx,tl_col_txt |
585 | or ecx,0x80000000 |
585 | or ecx,0x80000000 |
586 | lea edx,[txt_capt_cur] |
586 | lea edx,[txt_capt_cur] |
587 | int 0x40 |
587 | int 0x40 |
588 | 588 | ||
589 | mov ebx,tl_box_left |
589 | mov ebx,tl_box_left |
590 | shl ebx,16 |
590 | shl ebx,16 |
591 | add ebx,100*65536+3 |
591 | add ebx,100*65536+3 |
592 | add ebx,tl_box_top |
592 | add ebx,tl_box_top |
593 | lea edx,[txt_capt_otm] |
593 | lea edx,[txt_capt_otm] |
594 | int 0x40 |
594 | int 0x40 |
595 | @@: |
595 | @@: |
596 | 596 | ||
597 | ;cycle to nodes |
597 | ;cycle to nodes |
598 | xor eax,eax |
598 | xor eax,eax |
599 | mov edx,tl_data_nodes |
599 | mov edx,tl_data_nodes |
600 | mov ecx,edx |
600 | mov ecx,edx |
601 | add ecx,sizeof.TreeList |
601 | add ecx,sizeof.TreeList |
602 | 602 | ||
603 | ;*** ïðîïóñê óçëîâ, êîòîðûå ïðîìîòàíû ñêðîëëèíãîì *** |
603 | ;*** ïðîïóñê óçëîâ, êîòîðûå ïðîìîòàíû ñêðîëëèíãîì *** |
604 | cmp tl_p_scrol,0 ;åñëè åñòü óêàçàòåëü íà ñêðîëëèíã |
604 | cmp tl_p_scrol,0 ;åñëè åñòü óêàçàòåëü íà ñêðîëëèíã |
605 | je .end_c1 |
605 | je .end_c1 |
606 | mov esi,tl_p_scrol |
606 | mov esi,tl_p_scrol |
607 | cmp dword[esi+24],0 ;åñëè ñêðîëëèíã íà âåðõó, âûõîäèì |
607 | cmp dword[esi+24],0 ;åñëè ñêðîëëèíã íà âåðõó, âûõîäèì |
608 | je .end_c1 |
608 | je .end_c1 |
609 | @@: |
609 | @@: |
610 | call tl_iterat_next |
610 | call tl_iterat_next |
611 | cmp edx,ecx |
611 | cmp edx,ecx |
612 | jle .end_draw |
612 | jle .end_draw |
613 | inc eax |
613 | inc eax |
614 | cmp eax,dword[esi+24] |
614 | cmp eax,dword[esi+24] |
615 | jge .end_c1 |
615 | jge .end_c1 |
616 | jmp @b |
616 | jmp @b |
617 | .end_c1: |
617 | .end_c1: |
618 | 618 | ||
619 | xor eax,eax |
619 | xor eax,eax |
620 | mov esi,tl_box_top |
620 | mov esi,tl_box_top |
621 | add esi,tl_box_height ;esi = coord bottom border |
621 | add esi,tl_box_height ;esi = coord bottom border |
622 | @@: |
622 | @@: |
623 | call tl_iterat_next |
623 | call tl_iterat_next |
624 | cmp edx,ecx |
624 | cmp edx,ecx |
625 | jle @f |
625 | jle @f |
626 | call tl_draw_node |
626 | call tl_draw_node |
627 | inc eax |
627 | inc eax |
628 | jmp @b |
628 | jmp @b |
629 | @@: |
629 | @@: |
630 | 630 | ||
631 | call tl_draw_cursor |
631 | call tl_draw_cursor |
632 | 632 | ||
633 | mov edi,tl_p_scrol ;ðèñóåì äî÷åðíèé ñêðîëëèíã |
633 | mov edi,tl_p_scrol ;ðèñóåì äî÷åðíèé ñêðîëëèíã |
634 | cmp edi,0 ;äëÿ òîãî ÷òî-áû åãî íå ïðèøëîñü ðèñîâàòü â ïîëüçîâàòåëüñêîé ïðîãðàììå |
634 | cmp edi,0 ;äëÿ òîãî ÷òî-áû åãî íå ïðèøëîñü ðèñîâàòü â ïîëüçîâàòåëüñêîé ïðîãðàììå |
635 | je .end_draw ;åñëè íåò ñêðîëëèíãà âûõîäèì |
635 | je .end_draw ;åñëè íåò ñêðîëëèíãà âûõîäèì |
636 | push dword edi |
636 | push dword edi |
637 | call scroll_bar_vertical.draw |
637 | call scroll_bar_vertical.draw |
638 | 638 | ||
639 | .end_draw: |
639 | .end_draw: |
640 | popad |
640 | popad |
641 | pop ebp |
641 | pop ebp |
642 | ret 4 |
642 | ret 4 |
643 | 643 | ||
644 | ;input: |
644 | ;input: |
645 | ; ecx = pointer to 1 node struct |
645 | ; ecx = pointer to 1 node struct |
646 | ; edx = pointer to some node struct |
646 | ; edx = pointer to some node struct |
647 | ; edi = pointer to 'TreeList' struct |
647 | ; edi = pointer to 'TreeList' struct |
648 | ;output: |
648 | ;output: |
649 | ; edx = pointer to next node struct |
649 | ; edx = pointer to next node struct |
650 | align 4 |
650 | align 4 |
651 | tl_iterat_next: ;ïåðåõîä íà ñëåäóùèé âèäèìûé óçåë (ïðîïóñêàÿ çàêðûòûå) |
651 | tl_iterat_next: ;ïåðåõîä íà ñëåäóùèé âèäèìûé óçåë (ïðîïóñêàÿ çàêðûòûå) |
652 | push bx |
652 | push bx |
653 | mov bl,0x7f |
653 | mov bl,0x7f |
654 | cmp byte[edx+3],1 |
654 | cmp byte[edx+3],1 |
655 | jne @f |
655 | jne @f |
656 | mov bl,byte[edx+2] |
656 | mov bl,byte[edx+2] |
657 | @@: |
657 | @@: |
658 | 658 | ||
659 | cmp tl_tim_undo,0 |
659 | cmp tl_tim_undo,0 |
660 | je .else |
660 | je .else |
661 | 661 | ||
662 | push eax |
662 | push eax |
663 | .beg0: |
663 | .beg0: |
664 | call tl_move_next |
664 | call tl_move_next |
665 | cmp edx,ecx |
665 | cmp edx,ecx |
666 | jle @f |
666 | jle @f |
667 | call tl_node_not_vis ;ïðîïóñê óäàëåííûõ è îòìåíåííûõ |
667 | call tl_node_not_vis ;ïðîïóñê óäàëåííûõ è îòìåíåííûõ |
668 | cmp al,1 |
668 | cmp al,1 |
669 | je .beg0 |
669 | je .beg0 |
670 | cmp bl,byte[edx+2] ;ïðîïóñê çàêðûòûõ |
670 | cmp bl,byte[edx+2] ;ïðîïóñê çàêðûòûõ |
671 | jl .beg0 |
671 | jl .beg0 |
672 | @@: |
672 | @@: |
673 | pop eax |
673 | pop eax |
674 | pop bx |
674 | pop bx |
675 | ret |
675 | ret |
676 | 676 | ||
677 | .else: |
677 | .else: |
678 | call tl_move_next |
678 | call tl_move_next |
679 | cmp edx,ecx |
679 | cmp edx,ecx |
680 | jle .endif |
680 | jle .endif |
681 | cmp dword[edx+16],0 ;td = 'time delete' -> ïðîïóñê óäàëåííûõ |
681 | cmp dword[edx+16],0 ;td = 'time delete' -> ïðîïóñê óäàëåííûõ |
682 | jne .else |
682 | jne .else |
683 | cmp bl,byte[edx+2] ;ïðîïóñê çàêðûòûõ |
683 | cmp bl,byte[edx+2] ;ïðîïóñê çàêðûòûõ |
684 | jl .else |
684 | jl .else |
685 | .endif: |
685 | .endif: |
686 | pop bx |
686 | pop bx |
687 | ret |
687 | ret |
688 | 688 | ||
689 | ;input: |
689 | ;input: |
690 | ; ecx = pointer to 1 node struct |
690 | ; ecx = pointer to 1 node struct |
691 | ; edx = pointer to some node struct |
691 | ; edx = pointer to some node struct |
692 | ; edi = pointer to 'TreeList' struct |
692 | ; edi = pointer to 'TreeList' struct |
693 | align 4 |
693 | align 4 |
694 | tl_iterat_next_all: ;ïåðåõîä íà ñëåäóùèé âèäèìûé óçåë (è íà çàêðûòûå òîæå) |
694 | tl_iterat_next_all: ;ïåðåõîä íà ñëåäóùèé âèäèìûé óçåë (è íà çàêðûòûå òîæå) |
695 | cmp tl_tim_undo,0 |
695 | cmp tl_tim_undo,0 |
696 | je .else |
696 | je .else |
697 | 697 | ||
698 | push eax |
698 | push eax |
699 | @@: |
699 | @@: |
700 | call tl_move_next |
700 | call tl_move_next |
701 | cmp edx,ecx |
701 | cmp edx,ecx |
702 | jle @f |
702 | jle @f |
703 | call tl_node_not_vis |
703 | call tl_node_not_vis |
704 | cmp al,1 |
704 | cmp al,1 |
705 | je @b |
705 | je @b |
706 | @@: |
706 | @@: |
707 | pop eax |
707 | pop eax |
708 | ret |
708 | ret |
709 | .else: |
709 | .else: |
710 | call tl_move_next |
710 | call tl_move_next |
711 | cmp edx,ecx |
711 | cmp edx,ecx |
712 | jle .endif |
712 | jle .endif |
713 | cmp dword[edx+16],0 ;td -> time delete |
713 | cmp dword[edx+16],0 ;td -> time delete |
714 | jne .else |
714 | jne .else |
715 | .endif: |
715 | .endif: |
716 | ret |
716 | ret |
717 | 717 | ||
718 | ;input: |
718 | ;input: |
719 | ; ecx = pointer to 1 node struct |
719 | ; ecx = pointer to 1 node struct |
720 | ; edx = pointer to some node struct |
720 | ; edx = pointer to some node struct |
721 | ; edi = pointer to 'TreeList' struct |
721 | ; edi = pointer to 'TreeList' struct |
722 | align 4 |
722 | align 4 |
723 | tl_iterat_perv: ;ïåðåõîä íà ïðåäûäóùèé âèäèìûé óçåë (ïðîïóñêàÿ çàêðûòûå) |
723 | tl_iterat_perv: ;ïåðåõîä íà ïðåäûäóùèé âèäèìûé óçåë (ïðîïóñêàÿ çàêðûòûå) |
724 | push eax |
724 | push eax |
725 | cmp tl_tim_undo,0 |
725 | cmp tl_tim_undo,0 |
726 | je .beg1 |
726 | je .beg1 |
727 | 727 | ||
728 | .beg0: |
728 | .beg0: |
729 | call tl_move_perv |
729 | call tl_move_perv |
730 | cmp edx,ecx |
730 | cmp edx,ecx |
731 | jle @f |
731 | jle @f |
732 | call tl_node_not_vis ;ïðîïóñê óäàëåííûõ è îòìåíåííûõ |
732 | call tl_node_not_vis ;ïðîïóñê óäàëåííûõ è îòìåíåííûõ |
733 | cmp al,1 |
733 | cmp al,1 |
734 | je .beg0 |
734 | je .beg0 |
735 | 735 | ||
736 | .beg1: |
736 | .beg1: |
737 | call tl_move_perv |
737 | call tl_move_perv |
738 | cmp edx,ecx |
738 | cmp edx,ecx |
739 | jle @f |
739 | jle @f |
740 | cmp dword[edx+16],0 ;td = 'time delete' -> ïðîïóñê óäàëåííûõ |
740 | cmp dword[edx+16],0 ;td = 'time delete' -> ïðîïóñê óäàëåííûõ |
741 | jne .beg1 |
741 | jne .beg1 |
742 | 742 | ||
743 | @@: |
743 | @@: |
744 | call tl_move_max_clo_par |
744 | call tl_move_max_clo_par |
745 | pop eax |
745 | pop eax |
746 | ret |
746 | ret |
747 | 747 | ||
748 | 748 | ||
749 | ;input: |
749 | ;input: |
750 | ; edx = pointer to some node struct |
750 | ; edx = pointer to some node struct |
751 | ; edi = pointer to 'TreeList' struct |
751 | ; edi = pointer to 'TreeList' struct |
752 | ;output: |
752 | ;output: |
753 | ; edx = pointer closed parent node with maximum level |
753 | ; edx = pointer closed parent node with maximum level |
754 | align 4 |
754 | align 4 |
755 | tl_move_max_clo_par: ;íàõîäèò ðîäèòåëüñêèé çàêðûòûé óçåë ìàêñèìàëüíîãî óðîâíÿ |
755 | tl_move_max_clo_par: ;íàõîäèò ðîäèòåëüñêèé çàêðûòûé óçåë ìàêñèìàëüíîãî óðîâíÿ |
756 | push eax ebx |
756 | push eax ebx |
757 | mov eax,edx |
757 | mov eax,edx |
758 | xor ebx,ebx |
758 | xor ebx,ebx |
759 | .beg: |
759 | .beg: |
760 | call tl_move_par |
760 | call tl_move_par |
761 | cmp byte[edx+3],1 ;ðîäèòåëüñêèé óçåë çàêðûò ? |
761 | cmp byte[edx+3],1 ;ðîäèòåëüñêèé óçåë çàêðûò ? |
762 | jne @f |
762 | jne @f |
763 | mov eax,edx |
763 | mov eax,edx |
764 | @@: |
764 | @@: |
765 | cmp ebx,edx |
765 | cmp ebx,edx |
766 | je .end_f |
766 | je .end_f |
767 | mov ebx,edx |
767 | mov ebx,edx |
768 | jmp .beg |
768 | jmp .beg |
769 | .end_f: |
769 | .end_f: |
770 | mov edx,eax |
770 | mov edx,eax |
771 | pop ebx eax |
771 | pop ebx eax |
772 | ret |
772 | ret |
773 | 773 | ||
774 | ;input: |
774 | ;input: |
775 | ; edx = pointer to some node struct |
775 | ; edx = pointer to some node struct |
776 | ; edi = pointer to 'TreeList' struct |
776 | ; edi = pointer to 'TreeList' struct |
777 | ;output: |
777 | ;output: |
778 | ; edx = pointer to next node struct |
778 | ; edx = pointer to next node struct |
779 | align 4 |
779 | align 4 |
780 | tl_move_next: |
780 | tl_move_next: |
781 | mov edx,dword[edx+8] |
781 | mov edx,dword[edx+8] |
782 | imul edx,sizeof.TreeList |
782 | imul edx,sizeof.TreeList |
783 | add edx,tl_data_nodes |
783 | add edx,tl_data_nodes |
784 | ret |
784 | ret |
785 | 785 | ||
786 | ;input: |
786 | ;input: |
787 | ; edx = pointer to some node struct |
787 | ; edx = pointer to some node struct |
788 | ; edi = pointer to 'TreeList' struct |
788 | ; edi = pointer to 'TreeList' struct |
789 | ;output: |
789 | ;output: |
790 | ; edx = pointer to perv node struct |
790 | ; edx = pointer to perv node struct |
791 | align 4 |
791 | align 4 |
792 | tl_move_perv: |
792 | tl_move_perv: |
793 | mov edx,dword[edx+4] |
793 | mov edx,dword[edx+4] |
794 | imul edx,sizeof.TreeList |
794 | imul edx,sizeof.TreeList |
795 | add edx,tl_data_nodes |
795 | add edx,tl_data_nodes |
796 | ret |
796 | ret |
797 | 797 | ||
798 | ;input: |
798 | ;input: |
799 | ; ecx = |
799 | ; ecx = |
800 | ; edx = pointer to some node struct |
800 | ; edx = pointer to some node struct |
801 | ; edi = pointer to 'TreeList' struct |
801 | ; edi = pointer to 'TreeList' struct |
802 | ;output: |
802 | ;output: |
803 | ; edx = pointer to parent node struct |
803 | ; edx = pointer to parent node struct |
804 | align 4 |
804 | align 4 |
805 | tl_move_par: ;ïåðåäâèãàåìñÿ íà ðîäèòåëüñêèé óçåë, åñëè òàêîãî íåò, òî îñòàâëÿåì ñòàðîå çíà÷åíèå óêàçàòåëÿ |
805 | tl_move_par: ;ïåðåäâèãàåìñÿ íà ðîäèòåëüñêèé óçåë, åñëè òàêîãî íåò, òî îñòàâëÿåì ñòàðîå çíà÷åíèå óêàçàòåëÿ |
806 | cmp byte[edx+2],0 |
806 | cmp byte[edx+2],0 |
807 | je .end_f ;óçåë 0-ãî óðîâíÿ íå ìîæåò áûòü äî÷åðíèì |
807 | je .end_f ;óçåë 0-ãî óðîâíÿ íå ìîæåò áûòü äî÷åðíèì |
808 | push eax ebx esi |
808 | push eax ebx esi |
809 | mov esi,edx ;copy node pointer (edx) |
809 | mov esi,edx ;copy node pointer (edx) |
810 | mov bl,byte[edx+2] |
810 | mov bl,byte[edx+2] |
811 | @@: |
811 | @@: |
812 | call tl_move_perv |
812 | call tl_move_perv |
813 | cmp edx,ecx |
813 | cmp edx,ecx |
814 | jle @f ;âñå âûøå ñòîÿùèå óçëû íå ðîäèòåëüñêèå |
814 | jle @f ;âñå âûøå ñòîÿùèå óçëû íå ðîäèòåëüñêèå |
815 | call tl_node_not_vis ;ïðîïóñê óäàëåííûõ è îòìåíåííûõ |
815 | call tl_node_not_vis ;ïðîïóñê óäàëåííûõ è îòìåíåííûõ |
816 | cmp al,1 |
816 | cmp al,1 |
817 | je @b |
817 | je @b |
818 | cmp byte[edx+2],bl |
818 | cmp byte[edx+2],bl |
819 | jl .end_0 ;óäà÷íî íàøëè ðîäèòåëüñêèé óçåë |
819 | jl .end_0 ;óäà÷íî íàøëè ðîäèòåëüñêèé óçåë |
820 | jmp @b |
820 | jmp @b |
821 | @@: |
821 | @@: |
822 | mov esi,ebx ;restore node pointer |
822 | mov esi,ebx ;restore node pointer |
823 | .end_0: |
823 | .end_0: |
824 | pop esi ebx eax |
824 | pop esi ebx eax |
825 | .end_f: |
825 | .end_f: |
826 | ret |
826 | ret |
827 | 827 | ||
828 | ;input: |
828 | ;input: |
829 | ; edx = pointer to symbol struct |
829 | ; edx = pointer to symbol struct |
830 | ; edi = pointer to 'TreeList' struct |
830 | ; edi = pointer to 'TreeList' struct |
831 | ;output: |
831 | ;output: |
832 | ; al = 1 if sumbol not visible |
832 | ; al = 1 if sumbol not visible |
833 | ; (node[i].td+tim_Undo<=ch_tim && node[i].td) || (node[i].tc>ch_tim-tim_Undo) |
833 | ; (node[i].td+tim_Undo<=ch_tim && node[i].td) || (node[i].tc>ch_tim-tim_Undo) |
834 | align 4 |
834 | align 4 |
835 | tl_node_not_vis: ;ïðîâåðÿåò âèäèìûé ëè óêàçàííûé óçåë ñ ó÷åòîì: äîáàâëåíèé, óäàëåíèé, îòìåí äåéñòâèé |
835 | tl_node_not_vis: ;ïðîâåðÿåò âèäèìûé ëè óêàçàííûé óçåë ñ ó÷åòîì: äîáàâëåíèé, óäàëåíèé, îòìåí äåéñòâèé |
836 | cmp dword[edx+16],0 |
836 | cmp dword[edx+16],0 |
837 | je @f |
837 | je @f |
838 | mov eax,dword[edx+16] ;eax=node[i].td |
838 | mov eax,dword[edx+16] ;eax=node[i].td |
839 | add eax,tl_tim_undo |
839 | add eax,tl_tim_undo |
840 | cmp eax,tl_ch_tim |
840 | cmp eax,tl_ch_tim |
841 | jg @f |
841 | jg @f |
842 | mov al,1 |
842 | mov al,1 |
843 | ret |
843 | ret |
844 | @@: |
844 | @@: |
845 | 845 | ||
846 | mov eax,tl_ch_tim |
846 | mov eax,tl_ch_tim |
847 | sub eax,tl_tim_undo |
847 | sub eax,tl_tim_undo |
848 | cmp dword[edx+12],eax ;tc -> time create |
848 | cmp dword[edx+12],eax ;tc -> time create |
849 | jle @f |
849 | jle @f |
850 | mov al,1 |
850 | mov al,1 |
851 | ret |
851 | ret |
852 | @@: |
852 | @@: |
853 | xor al,al |
853 | xor al,al |
854 | ret |
854 | ret |
855 | 855 | ||
856 | 856 | ||
857 | ;input: |
857 | ;input: |
858 | ; edi = pointer to TreeInfo struct |
858 | ; edi = pointer to TreeInfo struct |
859 | ; esi = coord bottom border |
859 | ; esi = coord bottom border |
860 | align 4 |
860 | align 4 |
861 | tl_draw_cursor: ;ðèñóåì êóðñîð íà ýêðàíå |
861 | tl_draw_cursor: ;ðèñóåì êóðñîð íà ýêðàíå |
862 | push eax ebx ecx edx esi |
862 | push eax ebx ecx edx esi |
863 | call tl_get_display_cur_pos ;eax = cursor pos in screen |
863 | call tl_get_display_cur_pos ;eax = cursor pos in screen |
864 | cmp eax,0 |
864 | cmp eax,0 |
865 | jl .end_f ;êóðñîð íàõîäèòñÿ âûøå îêíà, â îáëàñòè ïðîêðó÷åííîé ñêðîëëèíãîì |
865 | jl .end_f ;êóðñîð íàõîäèòñÿ âûøå îêíà, â îáëàñòè ïðîêðó÷åííîé ñêðîëëèíãîì |
866 | 866 | ||
867 | cmp tl_data_img_sys,0 ;ñìîòðèì åñòü ëè óêàçàòåëü íà êàðòèíêó ñèñòåìíûõ èêîíîê |
867 | cmp tl_data_img_sys,0 ;ñìîòðèì åñòü ëè óêàçàòåëü íà êàðòèíêó ñèñòåìíûõ èêîíîê |
868 | jne @f |
868 | jne @f |
869 | mov ebx,tl_box_left |
869 | mov ebx,tl_box_left |
870 | shl ebx,16 |
870 | shl ebx,16 |
871 | mov bx,tl_img_cx |
871 | mov bx,tl_img_cx |
872 | xor ecx,ecx |
872 | xor ecx,ecx |
873 | mov cx,tl_img_cy |
873 | mov cx,tl_img_cy |
874 | imul ecx,eax |
874 | imul ecx,eax |
875 | add ecx,tl_box_top |
875 | add ecx,tl_box_top |
876 | add cx,tl_capt_cy |
876 | add cx,tl_capt_cy |
877 | 877 | ||
878 | ;crop image if on the border |
878 | ;crop image if on the border |
879 | cmp esi,ecx ;åñëè êóðñîð âíèçó è åãî âîîáùå íå âèäíî |
879 | cmp esi,ecx ;åñëè êóðñîð âíèçó è åãî âîîáùå íå âèäíî |
880 | jl .end_f |
880 | jl .end_f |
881 | 881 | ||
882 | sub esi,ecx |
882 | sub esi,ecx |
883 | shl ecx,16 |
883 | shl ecx,16 |
884 | mov cx,tl_img_cy |
884 | mov cx,tl_img_cy |
885 | cmp si,tl_img_cy |
885 | cmp si,tl_img_cy |
886 | jge .crop0 |
886 | jge .crop0 |
887 | mov cx,si ;åñëè êóðñîð âèäåí ÷àñòè÷íî (ïîïàë íà íèæíþþ ãðàíèöó) |
887 | mov cx,si ;åñëè êóðñîð âèäåí ÷àñòè÷íî (ïîïàë íà íèæíþþ ãðàíèöó) |
888 | .crop0: |
888 | .crop0: |
889 | 889 | ||
890 | mov edx,tl_col_txt |
890 | mov edx,tl_col_txt |
891 | mov eax,13 |
891 | mov eax,13 |
892 | int 0x40 ;ðèñóåì ïðîñòîé ïðÿìîóãîëüíèê, ò.ê. íåò ñèñòåìíûõ èêîíîê |
892 | int 0x40 ;ðèñóåì ïðîñòîé ïðÿìîóãîëüíèê, ò.ê. íåò ñèñòåìíûõ èêîíîê |
893 | jmp .end_f |
893 | jmp .end_f |
894 | @@: |
894 | @@: |
895 | mov ebx,tl_data_img_sys |
895 | mov ebx,tl_data_img_sys |
896 | imul ax,tl_img_cy |
896 | imul ax,tl_img_cy |
897 | mov edx,tl_box_left |
897 | mov edx,tl_box_left |
898 | shl edx,16 |
898 | shl edx,16 |
899 | mov dx,ax |
899 | mov dx,ax |
900 | add edx,tl_box_top |
900 | add edx,tl_box_top |
901 | add dx,tl_capt_cy |
901 | add dx,tl_capt_cy |
902 | 902 | ||
903 | mov ecx,tl_el_focus ;ïðîâåðÿåì â ôîêóñå ýëåìåíò èëè íåò |
903 | mov ecx,tl_el_focus ;ïðîâåðÿåì â ôîêóñå ýëåìåíò èëè íåò |
904 | cmp dword[ecx],edi |
904 | cmp dword[ecx],edi |
905 | je .focus |
905 | je .focus |
906 | xor eax,eax |
906 | xor eax,eax |
907 | xor ecx,ecx |
907 | xor ecx,ecx |
908 | mov cx,tl_img_cx |
908 | mov cx,tl_img_cx |
909 | mov ax,tl_img_cy |
909 | mov ax,tl_img_cy |
910 | imul eax,ecx |
910 | imul eax,ecx |
911 | imul eax,4*3 ;4=icon index 3=rgb |
911 | imul eax,4*3 ;4=icon index 3=rgb |
912 | add ebx,eax |
912 | add ebx,eax |
913 | .focus: |
913 | .focus: |
914 | 914 | ||
915 | mov cx,tl_img_cx |
915 | mov cx,tl_img_cx |
916 | shl ecx,16 |
916 | shl ecx,16 |
917 | mov cx,tl_img_cy |
917 | mov cx,tl_img_cy |
918 | 918 | ||
919 | ;crop image if on the border |
919 | ;crop image if on the border |
920 | cmp si,dx ;åñëè êóðñîð âíèçó è åãî âîîáùå íå âèäíî |
920 | cmp si,dx ;åñëè êóðñîð âíèçó è åãî âîîáùå íå âèäíî |
921 | jl .end_f |
921 | jl .end_f |
922 | 922 | ||
923 | sub si,dx |
923 | sub si,dx |
924 | cmp si,tl_img_cy |
924 | cmp si,tl_img_cy |
925 | jge .crop1 |
925 | jge .crop1 |
926 | mov cx,si ;åñëè êóðñîð âèäåí ÷àñòè÷íî (ïîïàë íà íèæíþþ ãðàíèöó) |
926 | mov cx,si ;åñëè êóðñîð âèäåí ÷àñòè÷íî (ïîïàë íà íèæíþþ ãðàíèöó) |
927 | .crop1: |
927 | .crop1: |
928 | 928 | ||
929 | mov eax,7 |
929 | mov eax,7 |
930 | int 0x40 ;ðèñóåì èêîíêó êóðñîðà |
930 | int 0x40 ;ðèñóåì èêîíêó êóðñîðà |
931 | .end_f: |
931 | .end_f: |
932 | pop esi edx ecx ebx eax |
932 | pop esi edx ecx ebx eax |
933 | ret |
933 | ret |
934 | 934 | ||
935 | ;input: |
935 | ;input: |
936 | ; edi = pointer to TreeInfo struct |
936 | ; edi = pointer to TreeInfo struct |
937 | ; esi = coord bottom border |
937 | ; esi = coord bottom border |
938 | align 4 |
938 | align 4 |
939 | tl_draw_null_cursor: ;ñòèðàåì êóðñîð íà ýêðàíå |
939 | tl_draw_null_cursor: ;ñòèðàåì êóðñîð íà ýêðàíå |
940 | push eax ebx ecx edx esi |
940 | push eax ebx ecx edx esi |
941 | call tl_get_display_cur_pos ;eax = cursor pos in screen |
941 | call tl_get_display_cur_pos ;eax = cursor pos in screen |
942 | cmp eax,0 |
942 | cmp eax,0 |
943 | jl .end_f ;êóðñîð íàõîäèòñÿ âûøå îêíà, â îáëàñòè ïðîêðó÷åííîé ñêðîëëèíãîì |
943 | jl .end_f ;êóðñîð íàõîäèòñÿ âûøå îêíà, â îáëàñòè ïðîêðó÷åííîé ñêðîëëèíãîì |
944 | 944 | ||
945 | mov ebx,tl_box_left |
945 | mov ebx,tl_box_left |
946 | shl ebx,16 |
946 | shl ebx,16 |
947 | mov bx,tl_img_cx |
947 | mov bx,tl_img_cx |
948 | xor ecx,ecx |
948 | xor ecx,ecx |
949 | mov cx,tl_img_cy |
949 | mov cx,tl_img_cy |
950 | imul ecx,eax |
950 | imul ecx,eax |
951 | add ecx,tl_box_top |
951 | add ecx,tl_box_top |
952 | add cx,tl_capt_cy |
952 | add cx,tl_capt_cy |
953 | 953 | ||
954 | ;crop image if on the border |
954 | ;crop image if on the border |
955 | cmp esi,ecx ;åñëè êóðñîð âíèçó è åãî âîîáùå íå âèäíî |
955 | cmp esi,ecx ;åñëè êóðñîð âíèçó è åãî âîîáùå íå âèäíî |
956 | jl .end_f |
956 | jl .end_f |
957 | 957 | ||
958 | sub esi,ecx |
958 | sub esi,ecx |
959 | shl ecx,16 |
959 | shl ecx,16 |
960 | mov cx,tl_img_cy |
960 | mov cx,tl_img_cy |
961 | cmp si,tl_img_cy |
961 | cmp si,tl_img_cy |
962 | jge @f |
962 | jge @f |
963 | mov cx,si ;åñëè êóðñîð âèäåí ÷àñòè÷íî (ïîïàë íà íèæíþþ ãðàíèöó) |
963 | mov cx,si ;åñëè êóðñîð âèäåí ÷àñòè÷íî (ïîïàë íà íèæíþþ ãðàíèöó) |
964 | @@: |
964 | @@: |
965 | 965 | ||
966 | mov edx,tl_col_bkg |
966 | mov edx,tl_col_bkg |
967 | mov eax,13 |
967 | mov eax,13 |
968 | int 0x40 ;ðèñóåì ïðîñòîé ïðÿìîóãîëüíèê ñ ôîíîâûì öâåòîì |
968 | int 0x40 ;ðèñóåì ïðîñòîé ïðÿìîóãîëüíèê ñ ôîíîâûì öâåòîì |
969 | 969 | ||
970 | .end_f: |
970 | .end_f: |
971 | pop esi edx ecx ebx eax |
971 | pop esi edx ecx ebx eax |
972 | ret |
972 | ret |
973 | 973 | ||
974 | ;input: |
974 | ;input: |
975 | ; edi = pointer to TreeInfo struct |
975 | ; edi = pointer to TreeInfo struct |
976 | ;output: |
976 | ;output: |
977 | ; eax = index |
977 | ; eax = index |
978 | align 4 |
978 | align 4 |
979 | tl_get_display_cur_pos: ;áåðåò ïîçèöèþ êóðñîðà, îòíîñèòåëüíî ýêðàíà |
979 | tl_get_display_cur_pos: ;áåðåò ïîçèöèþ êóðñîðà, îòíîñèòåëüíî ýêðàíà |
980 | mov eax,tl_cur_pos |
980 | mov eax,tl_cur_pos |
981 | cmp tl_p_scrol,0 |
981 | cmp tl_p_scrol,0 |
982 | je @f |
982 | je @f |
983 | push ebx |
983 | push ebx |
984 | mov ebx,tl_p_scrol |
984 | mov ebx,tl_p_scrol |
985 | mov ebx,dword[ebx+24] |
985 | mov ebx,dword[ebx+24] |
986 | sub eax,ebx ;îòíèìàåì ïîçèöèþ ñêðîëëèíãà |
986 | sub eax,ebx ;îòíèìàåì ïîçèöèþ ñêðîëëèíãà |
987 | pop ebx |
987 | pop ebx |
988 | @@: |
988 | @@: |
989 | ret |
989 | ret |
990 | 990 | ||
991 | ;input: |
991 | ;input: |
992 | ; eax = node position |
992 | ; eax = node position |
993 | ; edx = pointer to some node struct |
993 | ; edx = pointer to some node struct |
994 | ; edi = pointer to 'TreeList' struct |
994 | ; edi = pointer to 'TreeList' struct |
995 | ; esi = coord of bottom border |
995 | ; esi = coord of bottom border |
996 | align 4 |
996 | align 4 |
997 | tl_draw_node: ;ðèñóåò óçåë ñ: êàðòèíêîé, ïîäïèñüþ, èêîíêîé îòêðûòèÿ/çàêðûòèÿ è ëèíèÿìè ê ðîäèò. óçëó |
997 | tl_draw_node: ;ðèñóåò óçåë ñ: êàðòèíêîé, ïîäïèñüþ, èêîíêîé îòêðûòèÿ/çàêðûòèÿ è ëèíèÿìè ê ðîäèò. óçëó |
998 | push eax ebx ecx edx esi |
998 | push eax ebx ecx edx esi |
999 | 999 | ||
1000 | mov ebx,1 ;1 - ìåñòî ïîä êóðñîð è ïîä çíàê +,- |
1000 | mov ebx,1 ;1 - ìåñòî ïîä êóðñîð è ïîä çíàê +,- |
1001 | bt tl_style,2 ;tl_list_box_mode |
1001 | bt tl_style,2 ;tl_list_box_mode |
1002 | jc @f |
1002 | jc @f |
1003 | inc ebx ;+1 - ìåñòî ïîä çíàê +,- |
1003 | inc ebx ;+1 - ìåñòî ïîä çíàê +,- |
1004 | @@: |
1004 | @@: |
1005 | add bl,byte[edx+2];get level |
1005 | add bl,byte[edx+2];get level |
1006 | imul bx,tl_img_cx |
1006 | imul bx,tl_img_cx |
1007 | add ebx,tl_box_left |
1007 | add ebx,tl_box_left |
1008 | 1008 | ||
1009 | shl ebx,16 |
1009 | shl ebx,16 |
1010 | mov bx,tl_img_cx |
1010 | mov bx,tl_img_cx |
1011 | xor ecx,ecx |
1011 | xor ecx,ecx |
1012 | mov cx,tl_img_cy |
1012 | mov cx,tl_img_cy |
1013 | imul ecx,eax |
1013 | imul ecx,eax |
1014 | add ecx,tl_box_top |
1014 | add ecx,tl_box_top |
1015 | add cx,tl_capt_cy |
1015 | add cx,tl_capt_cy |
1016 | 1016 | ||
1017 | ;crop image if on the border |
1017 | ;crop image if on the border |
1018 | cmp esi,ecx ;åñëè óçåë âíèçó è åãî âîîáùå íå âèäíî |
1018 | cmp esi,ecx ;åñëè óçåë âíèçó è åãî âîîáùå íå âèäíî |
1019 | jl .end_draw |
1019 | jl .end_draw |
1020 | 1020 | ||
1021 | sub esi,ecx |
1021 | sub esi,ecx |
1022 | shl ecx,16 |
1022 | shl ecx,16 |
1023 | mov cx,tl_img_cy |
1023 | mov cx,tl_img_cy |
1024 | cmp si,tl_img_cy |
1024 | cmp si,tl_img_cy |
1025 | jge @f |
1025 | jge @f |
1026 | mov cx,si ;åñëè óçåë âèäåí ÷àñòè÷íî (ïîïàë íà íèæíþþ ãðàíèöó) |
1026 | mov cx,si ;åñëè óçåë âèäåí ÷àñòè÷íî (ïîïàë íà íèæíþþ ãðàíèöó) |
1027 | jmp .crop ;ïðîïóñêàåì ðèñîâàíèå íàäïèñè, êîòîðàÿ ñêîðåå âñåãî òîæå âûëåçåò çà íèæíþþ ãðàíèöó |
1027 | jmp .crop ;ïðîïóñêàåì ðèñîâàíèå íàäïèñè, êîòîðàÿ ñêîðåå âñåãî òîæå âûëåçåò çà íèæíþþ ãðàíèöó |
1028 | @@: |
1028 | @@: |
1029 | call tl_draw_node_caption |
1029 | call tl_draw_node_caption |
1030 | .crop: |
1030 | .crop: |
1031 | mov esi,ecx ;save ecx |
1031 | mov esi,ecx ;save ecx |
1032 | 1032 | ||
1033 | cmp tl_data_img,0 |
1033 | cmp tl_data_img,0 |
1034 | jne .draw_img_n |
1034 | jne .draw_img_n |
1035 | push edx |
1035 | push edx |
1036 | mov edx,tl_col_txt |
1036 | mov edx,tl_col_txt |
1037 | mov eax,13 |
1037 | mov eax,13 |
1038 | int 0x40 ;draw node rect |
1038 | int 0x40 ;draw node rect |
1039 | pop edx |
1039 | pop edx |
1040 | jmp @f |
1040 | jmp @f |
1041 | .draw_img_n: |
1041 | .draw_img_n: |
1042 | push ebx edx esi |
1042 | push ebx edx esi |
1043 | xor esi,esi |
1043 | xor esi,esi |
1044 | mov si,word[edx] ;get icon type |
1044 | mov si,word[edx] ;get icon type |
1045 | mov edx,ebx |
1045 | mov edx,ebx |
1046 | ror ecx,16 |
1046 | ror ecx,16 |
1047 | mov dx,cx |
1047 | mov dx,cx |
1048 | mov cx,bx |
1048 | mov cx,bx |
1049 | ror ecx,16 |
1049 | ror ecx,16 |
1050 | mov ebx,3 ;rgb = 3 bytes |
1050 | mov ebx,3 ;rgb = 3 bytes |
1051 | imul bx,tl_img_cx |
1051 | imul bx,tl_img_cx |
1052 | imul bx,tl_img_cy |
1052 | imul bx,tl_img_cy |
1053 | imul ebx,esi ;esi = icon index |
1053 | imul ebx,esi ;esi = icon index |
1054 | add ebx,tl_data_img |
1054 | add ebx,tl_data_img |
1055 | 1055 | ||
1056 | mov eax,7 |
1056 | mov eax,7 |
1057 | int 0x40 ;draw node icon '-' |
1057 | int 0x40 ;draw node icon '-' |
1058 | pop esi edx ebx |
1058 | pop esi edx ebx |
1059 | @@: |
1059 | @@: |
1060 | 1060 | ||
1061 | mov al,byte[edx+2] ;draw minus '-' |
1061 | mov al,byte[edx+2] ;draw minus '-' |
1062 | mov ecx,tl_data_nodes |
1062 | mov ecx,tl_data_nodes |
1063 | add ecx,sizeof.TreeList |
1063 | add ecx,sizeof.TreeList |
1064 | 1064 | ||
1065 | mov ah,10 ;get icon index '+' or '-' ? |
1065 | mov ah,10 ;get icon index '+' or '-' ? |
1066 | cmp byte[edx+3],1 |
1066 | cmp byte[edx+3],1 |
1067 | jne .close |
1067 | jne .close |
1068 | dec ah |
1068 | dec ah |
1069 | .close: |
1069 | .close: |
1070 | 1070 | ||
1071 | call tl_draw_node_icon_opn_clo ;ðèñîâàíèå èêîíêè îòêðûòîãî èëè çàêðûòîãî óçëà |
1071 | call tl_draw_node_icon_opn_clo ;ðèñîâàíèå èêîíêè îòêðûòîãî èëè çàêðûòîãî óçëà |
1072 | bt tl_style,1 |
1072 | bt tl_style,1 |
1073 | jae .end_draw |
1073 | jae .end_draw |
1074 | call tl_draw_node_icon_par_lin ;ðèñîâàíèå ëèíèè ê ðîäèòåëüñêîìó ýëåìåíòó |
1074 | call tl_draw_node_icon_par_lin ;ðèñîâàíèå ëèíèè ê ðîäèòåëüñêîìó ýëåìåíòó |
1075 | call tl_draw_node_icon_par_lin_up ;ðèñîâàíèå âåðòèêàëüíîé ëèíèè ê ðîäèòåëüñêîìó ýëåìåíòó |
1075 | call tl_draw_node_icon_par_lin_up ;ðèñîâàíèå âåðòèêàëüíîé ëèíèè ê ðîäèòåëüñêîìó ýëåìåíòó |
1076 | .end_draw: |
1076 | .end_draw: |
1077 | pop esi edx ecx ebx eax |
1077 | pop esi edx ecx ebx eax |
1078 | ret |
1078 | ret |
1079 | 1079 | ||
1080 | ;input: |
1080 | ;input: |
1081 | ; ecx = pointer to 1 node struct |
1081 | ; ecx = pointer to 1 node struct |
1082 | ; edx = pointer to some node struct |
1082 | ; edx = pointer to some node struct |
1083 | ;... |
1083 | ;... |
1084 | align 4 |
1084 | align 4 |
1085 | tl_draw_node_icon_opn_clo: ;ðèñóåò èêîíêè îòêðûòîãî èëè çàêðûòîãî óçëà (îáû÷íî + èëè -) |
1085 | tl_draw_node_icon_opn_clo: ;ðèñóåò èêîíêè îòêðûòîãî èëè çàêðûòîãî óçëà (îáû÷íî + èëè -) |
1086 | push eax ebx ecx edx esi |
1086 | push eax ebx ecx edx esi |
1087 | inc al |
1087 | inc al |
1088 | call tl_iterat_next_all ;get next visible item |
1088 | call tl_iterat_next_all ;get next visible item |
1089 | cmp edx,ecx |
1089 | cmp edx,ecx |
1090 | jle @f |
1090 | jle @f |
1091 | mov ecx,esi ;load ecx |
1091 | mov ecx,esi ;load ecx |
1092 | cmp al,byte[edx+2] |
1092 | cmp al,byte[edx+2] |
1093 | jne @f |
1093 | jne @f |
1094 | ror ebx,16 |
1094 | ror ebx,16 |
1095 | sub bx,tl_img_cx |
1095 | sub bx,tl_img_cx |
1096 | ror ebx,16 |
1096 | ror ebx,16 |
1097 | cmp tl_data_img_sys,0 |
1097 | cmp tl_data_img_sys,0 |
1098 | jne .draw_img_s |
1098 | jne .draw_img_s |
1099 | mov edx,tl_col_txt |
1099 | mov edx,tl_col_txt |
1100 | mov eax,13 |
1100 | mov eax,13 |
1101 | int 0x40 ;draw minus rect, if not system icons |
1101 | int 0x40 ;draw minus rect, if not system icons |
1102 | jmp @f |
1102 | jmp @f |
1103 | .draw_img_s: |
1103 | .draw_img_s: |
1104 | mov ecx,esi ;load ecx |
1104 | mov ecx,esi ;load ecx |
1105 | mov edx,ebx |
1105 | mov edx,ebx |
1106 | ror ecx,16 |
1106 | ror ecx,16 |
1107 | mov dx,cx |
1107 | mov dx,cx |
1108 | mov cx,bx |
1108 | mov cx,bx |
1109 | ror ecx,16 |
1109 | ror ecx,16 |
1110 | mov ebx,3 ;rgb = 3 bytes |
1110 | mov ebx,3 ;rgb = 3 bytes |
1111 | imul bx,tl_img_cx |
1111 | imul bx,tl_img_cx |
1112 | imul bx,tl_img_cy |
1112 | imul bx,tl_img_cy |
1113 | shr eax,8 |
1113 | shr eax,8 |
1114 | and eax,0xff |
1114 | and eax,0xff |
1115 | imul ebx,eax ;eax = icon index |
1115 | imul ebx,eax ;eax = icon index |
1116 | add ebx,tl_data_img_sys |
1116 | add ebx,tl_data_img_sys |
1117 | mov eax,7 |
1117 | mov eax,7 |
1118 | int 0x40 ;draw minus icon '-' |
1118 | int 0x40 ;draw minus icon '-' |
1119 | @@: |
1119 | @@: |
1120 | pop esi edx ecx ebx eax |
1120 | pop esi edx ecx ebx eax |
1121 | ret |
1121 | ret |
1122 | 1122 | ||
1123 | ;input: |
1123 | ;input: |
1124 | ; al = óðîâåíü ýëåìåíòà |
1124 | ; al = óðîâåíü ýëåìåíòà |
1125 | ; ecx = pointer to 1 node struct |
1125 | ; ecx = pointer to 1 node struct |
1126 | ; edx = pointer to some node struct |
1126 | ; edx = pointer to some node struct |
1127 | ;... |
1127 | ;... |
1128 | align 4 |
1128 | align 4 |
1129 | tl_draw_node_icon_par_lin: ;ðèñîâàíèå ëèíèè ê ðîäèòåëüñêîìó ýëåìåíòó |
1129 | tl_draw_node_icon_par_lin: ;ðèñîâàíèå ëèíèè ê ðîäèòåëüñêîìó ýëåìåíòó |
1130 | cmp byte[edx+3],1 |
1130 | cmp byte[edx+3],1 |
1131 | je .close |
1131 | je .close |
1132 | push eax ebx ecx edx esi |
1132 | push eax ebx ecx edx esi |
1133 | cmp al,0 |
1133 | cmp al,0 |
1134 | je @f |
1134 | je @f |
1135 | ; dec al |
1135 | ; dec al |
1136 | ; call tl_iterat_perv ;get perv visible item |
1136 | ; call tl_iterat_perv ;get perv visible item |
1137 | 1137 | ||
1138 | call tl_iterat_next_all ;get next visible item |
1138 | call tl_iterat_next_all ;get next visible item |
1139 | cmp edx,ecx |
1139 | cmp edx,ecx |
1140 | jle .line3 ;if end of list |
1140 | jle .line3 ;if end of list |
1141 | cmp al,byte[edx+2] |
1141 | cmp al,byte[edx+2] |
1142 | jne .line3 ;jg ??? |
1142 | jne .line3 ;jg ??? |
1143 | mov eax,3 ;line in middle element |
1143 | mov eax,3 ;line in middle element |
1144 | jmp .line2 |
1144 | jmp .line2 |
1145 | .line3: |
1145 | .line3: |
1146 | mov eax,6 ;line in end element |
1146 | mov eax,6 ;line in end element |
1147 | .line2: |
1147 | .line2: |
1148 | 1148 | ||
1149 | mov ecx,esi ;load ecx |
1149 | mov ecx,esi ;load ecx |
1150 | ror ebx,16 |
1150 | ror ebx,16 |
1151 | sub bx,tl_img_cx |
1151 | sub bx,tl_img_cx |
1152 | ror ebx,16 |
1152 | ror ebx,16 |
1153 | cmp tl_data_img_sys,0 |
1153 | cmp tl_data_img_sys,0 |
1154 | jne .draw_img_s |
1154 | jne .draw_img_s |
1155 | mov edx,tl_col_txt |
1155 | mov edx,tl_col_txt |
1156 | mov eax,13 |
1156 | mov eax,13 |
1157 | int 0x40 ;draw minus rect, if not system icons |
1157 | int 0x40 ;draw minus rect, if not system icons |
1158 | jmp @f |
1158 | jmp @f |
1159 | .draw_img_s: |
1159 | .draw_img_s: |
1160 | ; mov ecx,esi ;load ecx |
1160 | ; mov ecx,esi ;load ecx |
1161 | mov edx,ebx |
1161 | mov edx,ebx |
1162 | ror ecx,16 |
1162 | ror ecx,16 |
1163 | mov dx,cx |
1163 | mov dx,cx |
1164 | mov cx,bx |
1164 | mov cx,bx |
1165 | ror ecx,16 |
1165 | ror ecx,16 |
1166 | mov ebx,3 ;rgb = 3 bytes |
1166 | mov ebx,3 ;rgb = 3 bytes |
1167 | imul bx,tl_img_cx |
1167 | imul bx,tl_img_cx |
1168 | imul bx,tl_img_cy |
1168 | imul bx,tl_img_cy |
1169 | 1169 | ||
1170 | ; shr eax,8 |
1170 | ; shr eax,8 |
1171 | ; and eax,0xff |
1171 | ; and eax,0xff |
1172 | imul ebx,eax ;eax = icon index |
1172 | imul ebx,eax ;eax = icon index |
1173 | add ebx,tl_data_img_sys |
1173 | add ebx,tl_data_img_sys |
1174 | mov eax,7 |
1174 | mov eax,7 |
1175 | int 0x40 ;draw line icon |
1175 | int 0x40 ;draw line icon |
1176 | @@: |
1176 | @@: |
1177 | pop esi edx ecx ebx eax |
1177 | pop esi edx ecx ebx eax |
1178 | .close: |
1178 | .close: |
1179 | ret |
1179 | ret |
1180 | 1180 | ||
1181 | 1181 | ||
1182 | ;input: |
1182 | ;input: |
1183 | ; al = óðîâåíü ýëåìåíòà |
1183 | ; al = óðîâåíü ýëåìåíòà |
1184 | ; ecx = pointer to 1 node struct |
1184 | ; ecx = pointer to 1 node struct |
1185 | ; edx = pointer to some node struct |
1185 | ; edx = pointer to some node struct |
1186 | ; edi = pointer to 'TreeList' struct |
1186 | ; edi = pointer to 'TreeList' struct |
1187 | align 4 |
1187 | align 4 |
1188 | tl_draw_node_icon_par_lin_up: |
1188 | tl_draw_node_icon_par_lin_up: |
1189 | push eax ebx ecx edx |
1189 | push eax ebx ecx edx |
1190 | push esi |
1190 | push esi |
1191 | cmp tl_data_img_sys,0 ;if not image |
1191 | cmp tl_data_img_sys,0 ;if not image |
1192 | je @f |
1192 | je @f |
1193 | cmp al,0 |
1193 | cmp al,0 |
1194 | je @f |
1194 | je @f |
1195 | 1195 | ||
1196 | xor esi,esi ;â si áóäåì íàñ÷èòûâàòü êîë-âî èêîíîê, íóæíûõ äëÿ ïðîðèñîâêè ëèíèè |
1196 | xor esi,esi ;â si áóäåì íàñ÷èòûâàòü êîë-âî èêîíîê, íóæíûõ äëÿ ïðîðèñîâêè ëèíèè |
1197 | ;--- öèêë äëÿ âû÷èñëåíèÿ êîëëè÷åñòâà âåðòèêàëüíûõ ëèíèé --- |
1197 | ;--- öèêë äëÿ âû÷èñëåíèÿ êîëëè÷åñòâà âåðòèêàëüíûõ ëèíèé --- |
1198 | .cycle0: |
1198 | .cycle0: |
1199 | call tl_iterat_perv ;get perv visible item |
1199 | call tl_iterat_perv ;get perv visible item |
1200 | cmp edx,ecx |
1200 | cmp edx,ecx |
1201 | jle .cycle1 ;if begin of list |
1201 | jle .cycle1 ;if begin of list |
1202 | 1202 | ||
1203 | cmp byte[edx+2],al |
1203 | cmp byte[edx+2],al |
1204 | jle .cycle0end ;óðîâåíü âåðõíåãî ýëåìåíòà íå òðåáóåò ïðîðèñîâêè |
1204 | jle .cycle0end ;óðîâåíü âåðõíåãî ýëåìåíòà íå òðåáóåò ïðîðèñîâêè |
1205 | inc si |
1205 | inc si |
1206 | jmp .cycle0 |
1206 | jmp .cycle0 |
1207 | .cycle0end: |
1207 | .cycle0end: |
1208 | cmp si,0 ;si = êîë-âî èêîíîê ëèíèè êîòîðûå íóæíî íàðèñîâàòü ñâåðõó |
1208 | cmp si,0 ;si = êîë-âî èêîíîê ëèíèè êîòîðûå íóæíî íàðèñîâàòü ñâåðõó |
1209 | je @f |
1209 | je @f |
1210 | shl esi,16 |
1210 | shl esi,16 |
1211 | 1211 | ||
1212 | pop ecx ;esi->ecx |
1212 | pop ecx ;esi->ecx |
1213 | push ecx ;save esi |
1213 | push ecx ;save esi |
1214 | 1214 | ||
1215 | ror ebx,16 |
1215 | ror ebx,16 |
1216 | sub bx,tl_img_cx |
1216 | sub bx,tl_img_cx |
1217 | ror ebx,16 |
1217 | ror ebx,16 |
1218 | 1218 | ||
1219 | mov edx,ebx |
1219 | mov edx,ebx |
1220 | ror ecx,16 |
1220 | ror ecx,16 |
1221 | mov dx,cx |
1221 | mov dx,cx |
1222 | mov cx,bx |
1222 | mov cx,bx |
1223 | ror ecx,16 |
1223 | ror ecx,16 |
1224 | mov cx,tl_img_cy ;restore size y (if crop) |
1224 | mov cx,tl_img_cy ;restore size y (if crop) |
1225 | mov ebx,3 ;rgb = 3 bytes |
1225 | mov ebx,3 ;rgb = 3 bytes |
1226 | imul bx,tl_img_cx |
1226 | imul bx,tl_img_cx |
1227 | imul bx,tl_img_cy |
1227 | imul bx,tl_img_cy |
1228 | add ebx,tl_data_img_sys |
1228 | add ebx,tl_data_img_sys |
1229 | 1229 | ||
1230 | add esi,tl_box_top |
1230 | add esi,tl_box_top |
1231 | add si,tl_capt_cy ;si = âåðõíÿÿ ãðàíèöà îêíà |
1231 | add si,tl_capt_cy ;si = âåðõíÿÿ ãðàíèöà îêíà |
1232 | mov eax,7 |
1232 | mov eax,7 |
1233 | ;--- öèêë äëÿ ðèñîâàíèÿ âåðòèêàëüíîé ëèíèè --- |
1233 | ;--- öèêë äëÿ ðèñîâàíèÿ âåðòèêàëüíîé ëèíèè --- |
1234 | .cycle1: |
1234 | .cycle1: |
1235 | sub dx,tl_img_cy ;ïîäíèìàåì êîîðäèíàòó y ââåðõ |
1235 | sub dx,tl_img_cy ;ïîäíèìàåì êîîðäèíàòó y ââåðõ |
1236 | cmp dx,si |
1236 | cmp dx,si |
1237 | jl @f |
1237 | jl @f |
1238 | cmp esi,0x10000 |
1238 | cmp esi,0x10000 |
1239 | jl @f |
1239 | jl @f |
1240 | int 0x40 ;draw line icon |
1240 | int 0x40 ;draw line icon |
1241 | sub esi,0x10000 ;óìåíüøàåì ñ÷åò÷èê èêîíîê |
1241 | sub esi,0x10000 ;óìåíüøàåì ñ÷åò÷èê èêîíîê |
1242 | jmp .cycle1 |
1242 | jmp .cycle1 |
1243 | @@: |
1243 | @@: |
1244 | pop esi |
1244 | pop esi |
1245 | pop edx ecx ebx eax |
1245 | pop edx ecx ebx eax |
1246 | ret |
1246 | ret |
1247 | 1247 | ||
1248 | ;input: |
1248 | ;input: |
1249 | ; edi = pointer to TreeInfo struct |
1249 | ; edi = pointer to TreeInfo struct |
1250 | ;output: |
1250 | ;output: |
1251 | ; eax = rows |
1251 | ; eax = rows |
1252 | align 4 |
1252 | align 4 |
1253 | tl_get_rows_count: |
1253 | tl_get_rows_count: |
1254 | push ecx edx |
1254 | push ecx edx |
1255 | mov eax,tl_box_height |
1255 | mov eax,tl_box_height |
1256 | sub ax,tl_capt_cy |
1256 | sub ax,tl_capt_cy |
1257 | xor ecx,ecx |
1257 | xor ecx,ecx |
1258 | mov cx,tl_img_cy |
1258 | mov cx,tl_img_cy |
1259 | xor edx,edx |
1259 | xor edx,edx |
1260 | div ecx |
1260 | div ecx |
1261 | pop edx ecx |
1261 | pop edx ecx |
1262 | ret |
1262 | ret |
1263 | 1263 | ||
1264 | ;input: |
1264 | ;input: |
1265 | ; eax = node position |
1265 | ; eax = node position |
1266 | ; ebx = [êîîðäèíàòà ïî îñè x]*65536 + [img_cx] |
1266 | ; ebx = [êîîðäèíàòà ïî îñè x]*65536 + [img_cx] |
1267 | ; ecx = [êîîðäèíàòà ïî îñè y]*65536 + [img_cy] |
1267 | ; ecx = [êîîðäèíàòà ïî îñè y]*65536 + [img_cy] |
1268 | ; edx = pointer to some node struct |
1268 | ; edx = pointer to some node struct |
1269 | ; edi = pointer to TreeInfo struct |
1269 | ; edi = pointer to TreeInfo struct |
1270 | align 4 |
1270 | align 4 |
1271 | tl_draw_node_caption: |
1271 | tl_draw_node_caption: |
1272 | push ebx ecx edx esi |
1272 | push ebx ecx edx esi |
1273 | 1273 | ||
1274 | xor esi,esi |
1274 | xor esi,esi |
1275 | mov si,tl_info_size |
1275 | mov si,tl_info_size |
1276 | cmp si,tl_info_capt_offs |
1276 | cmp si,tl_info_capt_offs |
1277 | jle @f ;if caption size <= 0 |
1277 | jle @f ;if caption size <= 0 |
1278 | 1278 | ||
1279 | push eax |
1279 | push eax |
1280 | call tl_get_node_index ;eax = node index |
1280 | call tl_get_node_index ;eax = node index |
1281 | imul esi,eax |
1281 | imul esi,eax |
1282 | pop eax |
1282 | pop eax |
1283 | add si,tl_info_capt_offs |
1283 | add si,tl_info_capt_offs |
1284 | add esi,dword[edi] |
1284 | add esi,dword[edi] |
1285 | mov edx,esi |
1285 | mov edx,esi |
1286 | 1286 | ||
1287 | shr ebx,16 |
1287 | shr ebx,16 |
1288 | add bx,tl_img_cx ;ñäâèãàåì íàäïèñü ïî ãîðèçîíòàëè ---> |
1288 | add bx,tl_img_cx ;ñäâèãàåì íàäïèñü ïî ãîðèçîíòàëè ---> |
1289 | add bx,3 ;îòñòóï |
1289 | add bx,3 ;îòñòóï |
1290 | ;bx = coord. x |
1290 | ;bx = coord. x |
1291 | call tl_strlen ;eax = strlen |
1291 | call tl_strlen ;eax = strlen |
1292 | call tl_get_draw_text_len |
1292 | call tl_get_draw_text_len |
1293 | mov cx,bx |
1293 | mov cx,bx |
1294 | ror ecx,16 |
1294 | ror ecx,16 |
1295 | mov ebx,ecx |
1295 | mov ebx,ecx |
1296 | add bx,tl_img_cy ;âûðàâíèâèíèå ïî íèæíåé ãðàíèöå èêîíêè |
1296 | add bx,tl_img_cy ;âûðàâíèâèíèå ïî íèæíåé ãðàíèöå èêîíêè |
1297 | sub bx,9 ;îòíèìàåì âûñîòó òåêñòà |
1297 | sub bx,9 ;îòíèìàåì âûñîòó òåêñòà |
1298 | mov ecx,tl_col_txt |
1298 | mov ecx,tl_col_txt |
1299 | and ecx,0xffffff |
1299 | and ecx,0xffffff |
1300 | ; or ecx,0x80000000 ;text is ASCIIZ |
1300 | ; or ecx,0x80000000 ;text is ASCIIZ |
1301 | mov eax,4 |
1301 | mov eax,4 |
1302 | int 0x40 |
1302 | int 0x40 |
1303 | @@: |
1303 | @@: |
1304 | pop esi edx ecx ebx |
1304 | pop esi edx ecx ebx |
1305 | ret |
1305 | ret |
1306 | 1306 | ||
1307 | ;input: |
1307 | ;input: |
1308 | ; eax = strlen |
1308 | ; eax = strlen |
1309 | ; ebx = text coord x |
1309 | ; ebx = text coord x |
1310 | ;output: |
1310 | ;output: |
1311 | ; esi = text len |
1311 | ; esi = text len |
1312 | align 4 |
1312 | align 4 |
1313 | tl_get_draw_text_len: |
1313 | tl_get_draw_text_len: |
1314 | push eax ecx edx |
1314 | push eax ecx edx |
1315 | mov esi,eax ;áåðåì äëèííó ñòðîêè |
1315 | mov esi,eax ;áåðåì äëèííó ñòðîêè |
1316 | 1316 | ||
1317 | mov eax,tl_box_left |
1317 | mov eax,tl_box_left |
1318 | add eax,tl_box_width |
1318 | add eax,tl_box_width |
1319 | cmp eax,ebx |
1319 | cmp eax,ebx |
1320 | jle .text_null ;åñëè ïîäïèñü ïîëíîñòüþ âñÿ çà ýêðàíîì |
1320 | jle .text_null ;åñëè ïîäïèñü ïîëíîñòüþ âñÿ çà ýêðàíîì |
1321 | sub eax,ebx |
1321 | sub eax,ebx |
1322 | xor edx,edx |
1322 | xor edx,edx |
1323 | mov ecx,6 ;øèðèíà ñèñòåìíîãî øðèôòà |
1323 | mov ecx,6 ;øèðèíà ñèñòåìíîãî øðèôòà |
1324 | div ecx ;ñìîòðèì ñêîëüêî ñèìâîëîâ ìîæåò ïîìåñòèòüñÿ íà ýêðàíå |
1324 | div ecx ;ñìîòðèì ñêîëüêî ñèìâîëîâ ìîæåò ïîìåñòèòüñÿ íà ýêðàíå |
1325 | 1325 | ||
1326 | cmp esi,eax |
1326 | cmp esi,eax |
1327 | jl @f |
1327 | jl @f |
1328 | mov esi,eax ;åñëè äëèííà òåêñòà ìåíüøå, ÷åì âñå ìåñòî ïîä ñòðîêó |
1328 | mov esi,eax ;åñëè äëèííà òåêñòà ìåíüøå, ÷åì âñå ìåñòî ïîä ñòðîêó |
1329 | jmp @f |
1329 | jmp @f |
1330 | .text_null: |
1330 | .text_null: |
1331 | xor esi,esi |
1331 | xor esi,esi |
1332 | @@: |
1332 | @@: |
1333 | pop edx ecx eax |
1333 | pop edx ecx eax |
1334 | ret |
1334 | ret |
1335 | 1335 | ||
1336 | ;input: |
1336 | ;input: |
1337 | ; esi = pointer to string |
1337 | ; esi = pointer to string |
1338 | ;output: |
1338 | ;output: |
1339 | ; eax = strlen |
1339 | ; eax = strlen |
1340 | align 4 |
1340 | align 4 |
1341 | tl_strlen: |
1341 | tl_strlen: |
1342 | mov eax,esi |
1342 | mov eax,esi |
1343 | @@: |
1343 | @@: |
1344 | cmp byte[eax],0 |
1344 | cmp byte[eax],0 |
1345 | je @f |
1345 | je @f |
1346 | inc eax |
1346 | inc eax |
1347 | loop @b |
1347 | loop @b |
1348 | @@: |
1348 | @@: |
1349 | sub eax,esi |
1349 | sub eax,esi |
1350 | ret |
1350 | ret |
1351 | 1351 | ||
1352 | ;input: |
1352 | ;input: |
1353 | ;dword[ebp+ 8] - pointer to node info |
1353 | ;dword[ebp+ 8] - pointer to node info |
1354 | ;dword[ebp+12] - options |
1354 | ;dword[ebp+12] - options |
1355 | ;dword[ebp+16] - pointer to 'TreeList' struct |
1355 | ;dword[ebp+16] - pointer to 'TreeList' struct |
1356 | align 4 |
1356 | align 4 |
1357 | tl_node_add: ;äîáàâèòü óçåë |
1357 | tl_node_add: ;äîáàâèòü óçåë |
1358 | push ebp |
1358 | push ebp |
1359 | mov ebp,esp |
1359 | mov ebp,esp |
1360 | push eax ebx ecx edx edi |
1360 | push eax ebx ecx edx edi |
1361 | mov edi,dword[ebp+16] |
1361 | mov edi,dword[ebp+16] |
1362 | 1362 | ||
1363 | call tl_info_set_undo |
1363 | call tl_info_set_undo |
1364 | 1364 | ||
1365 | mov ebx,sizeof.TreeList |
1365 | mov ebx,sizeof.TreeList |
1366 | imul ebx,dword[edi+6] ;+6 ìàêñ. êîëè÷åñòâî óçëîâ |
1366 | imul ebx,tl_info_max_count |
1367 | add ebx,tl_data_nodes |
1367 | add ebx,tl_data_nodes |
1368 | ;-- |
1368 | ;-- |
1369 | call tl_get_cur_node_index ;eax=po_t |
1369 | call tl_get_cur_node_index ;eax=po_t |
1370 | imul eax,sizeof.TreeList |
1370 | imul eax,sizeof.TreeList |
1371 | add eax,tl_data_nodes |
1371 | add eax,tl_data_nodes |
1372 | mov edx,eax |
1372 | mov edx,eax |
1373 | call tl_move_perv |
1373 | call tl_move_perv |
1374 | call tl_get_node_index ;eax = index of pointer [edx] |
1374 | call tl_get_node_index ;eax = index of pointer [edx] |
1375 | ;-- |
1375 | ;-- |
1376 | mov edx,sizeof.TreeList |
1376 | mov edx,sizeof.TreeList |
1377 | shl edx,1 |
1377 | shl edx,1 |
1378 | add edx,tl_data_nodes |
1378 | add edx,tl_data_nodes |
1379 | @@: ;for(i=2;i |
1379 | @@: ;for(i=2;i |
1380 | cmp dword [edx+12],0 |
1380 | cmp dword [edx+12],0 |
1381 | jne .u0 |
1381 | jne .u0 |
1382 | cmp dword [edx+16],0 |
1382 | cmp dword [edx+16],0 |
1383 | jne .u0 |
1383 | jne .u0 |
1384 | 1384 | ||
1385 | inc tl_ch_tim |
1385 | inc tl_ch_tim |
1386 | mov cx,word[ebp+14] ;get type |
1386 | mov cx,word[ebp+14] ;get type |
1387 | mov word[edx],cx |
1387 | mov word[edx],cx |
1388 | mov cl,byte[ebp+13] |
1388 | mov cl,byte[ebp+13] |
1389 | mov byte[edx+3],cl ;node[i].clo |
1389 | mov byte[edx+3],cl ;node[i].clo |
1390 | mov byte[edx+2], 0 ;node[i].lev=0 |
1390 | mov byte[edx+2], 0 ;node[i].lev=0 |
1391 | bt tl_style,2 ;tl_list_box_mode |
1391 | bt tl_style,2 ;tl_list_box_mode |
1392 | jc .l_box_m |
1392 | jc .l_box_m |
1393 | mov cl,byte[ebp+12] |
1393 | mov cl,byte[ebp+12] |
1394 | mov byte[edx+2],cl ;node[i].lev |
1394 | mov byte[edx+2],cl ;node[i].lev |
1395 | .l_box_m: |
1395 | .l_box_m: |
1396 | push tl_ch_tim ;node[i].tc=ch_tim; |
1396 | push tl_ch_tim ;node[i].tc=ch_tim; |
1397 | pop dword[edx+12] |
1397 | pop dword[edx+12] |
1398 | mov dword[edx+4], eax ;node[i].perv=po_t; |
1398 | mov dword[edx+4], eax ;node[i].perv=po_t; |
1399 | ;*** copy node data *** |
1399 | ;*** copy node data *** |
1400 | push esi |
1400 | push esi |
1401 | xor ecx,ecx |
1401 | xor ecx,ecx |
1402 | mov cx,tl_info_size |
1402 | mov cx,tl_info_size |
1403 | mov esi,ecx |
1403 | mov esi,ecx |
1404 | 1404 | ||
1405 | push eax |
1405 | push eax |
1406 | call tl_get_node_index ;eax = node index |
1406 | call tl_get_node_index ;eax = node index |
1407 | imul esi,eax |
1407 | imul esi,eax |
1408 | pop eax |
1408 | pop eax |
1409 | add esi,dword[edi] |
1409 | add esi,dword[edi] |
1410 | mov edi,dword[ebp+8] ;pointer to node data |
1410 | mov edi,dword[ebp+8] ;pointer to node data |
1411 | xchg edi,esi |
1411 | xchg edi,esi |
1412 | rep movsb |
1412 | rep movsb |
1413 | 1413 | ||
1414 | mov esi,edi |
1414 | mov esi,edi |
1415 | mov edi,dword[ebp+16] ;restore edi |
1415 | mov edi,dword[ebp+16] ;restore edi |
1416 | mov cx,tl_info_capt_offs |
1416 | mov cx,tl_info_capt_offs |
1417 | cmp cx,tl_info_size |
1417 | cmp cx,tl_info_size |
1418 | jge .no_text_data |
1418 | jge .no_text_data |
1419 | cmp tl_info_capt_len,0 ;ïðîâåðÿåì åñòü ëè îãðàíè÷åíèå íà äëèííó ñòðîêè |
1419 | cmp tl_info_capt_len,0 ;ïðîâåðÿåì åñòü ëè îãðàíè÷åíèå íà äëèííó ñòðîêè |
1420 | je .no_len_ogran |
1420 | je .no_len_ogran |
1421 | add cx,tl_info_capt_len |
1421 | add cx,tl_info_capt_len |
1422 | and ecx,0xffff |
1422 | and ecx,0xffff |
1423 | add esi,ecx |
1423 | add esi,ecx |
1424 | mov cx,tl_info_size |
1424 | mov cx,tl_info_size |
1425 | sub esi,ecx |
1425 | sub esi,ecx |
1426 | .no_len_ogran: |
1426 | .no_len_ogran: |
1427 | dec esi |
1427 | dec esi |
1428 | mov byte[esi],0 |
1428 | mov byte[esi],0 |
1429 | .no_text_data: |
1429 | .no_text_data: |
1430 | pop esi ;restore esi |
1430 | pop esi ;restore esi |
1431 | 1431 | ||
1432 | mov ecx,eax |
1432 | mov ecx,eax |
1433 | imul ecx,sizeof.TreeList |
1433 | imul ecx,sizeof.TreeList |
1434 | add ecx,tl_data_nodes ; *** ecx = node[po_t] *** |
1434 | add ecx,tl_data_nodes ; *** ecx = node[po_t] *** |
1435 | add ecx,8 ; *** ecx = node[po_t].next *** |
1435 | add ecx,8 ; *** ecx = node[po_t].next *** |
1436 | push dword [ecx] ;node[i].next=node[po_t].next; |
1436 | push dword [ecx] ;node[i].next=node[po_t].next; |
1437 | pop dword [edx+8] |
1437 | pop dword [edx+8] |
1438 | 1438 | ||
1439 | call tl_get_node_index ;*** eax = i *** |
1439 | call tl_get_node_index ;*** eax = i *** |
1440 | cmp eax,tl_info_max_count |
1440 | cmp eax,tl_info_max_count |
1441 | jge .u0 |
1441 | jge .u0 |
1442 | 1442 | ||
1443 | mov [ecx],eax ;node[po_t].next=i; // ññûëêè ïåðåíàïðàâëÿåì |
1443 | mov [ecx],eax ;node[po_t].next=i; // ññûëêè ïåðåíàïðàâëÿåì |
1444 | mov ecx,[edx+8] ; *** ecx = node[i].next *** |
1444 | mov ecx,[edx+8] ; *** ecx = node[i].next *** |
1445 | imul ecx,sizeof.TreeList |
1445 | imul ecx,sizeof.TreeList |
1446 | add ecx,tl_data_nodes ; *** ecx = node[node[i].next] *** |
1446 | add ecx,tl_data_nodes ; *** ecx = node[node[i].next] *** |
1447 | mov [ecx+4],eax ;node[node[i].next].perv=i; |
1447 | mov [ecx+4],eax ;node[node[i].next].perv=i; |
1448 | 1448 | ||
1449 | call tb_scrol_resize ;îáðàáîòêà ñêðîëëèíãà |
1449 | call tb_scrol_resize ;îáðàáîòêà ñêðîëëèíãà |
1450 | jmp @f |
1450 | jmp @f |
1451 | .u0: |
1451 | .u0: |
1452 | add edx,sizeof.TreeList |
1452 | add edx,sizeof.TreeList |
1453 | cmp edx,ebx ;enf of node memory ? |
1453 | cmp edx,ebx ;enf of node memory ? |
1454 | jle @b |
1454 | jle @b |
1455 | @@: |
1455 | @@: |
1456 | pop edi edx ecx ebx eax |
1456 | pop edi edx ecx ebx eax |
1457 | pop ebp |
1457 | pop ebp |
1458 | ret 12 |
1458 | ret 12 |
1459 | 1459 | ||
1460 | ;input: |
1460 | ;input: |
1461 | ; edi = pointer to TreeInfo struct |
1461 | ; edi = pointer to TreeInfo struct |
1462 | align 4 |
1462 | align 4 |
1463 | tb_scrol_resize: |
1463 | tb_scrol_resize: |
1464 | push eax ecx edx |
1464 | push eax ecx edx |
1465 | cmp tl_p_scrol,0 ;îáðàáîòêà ñêðîëëèíãà |
1465 | cmp tl_p_scrol,0 ;îáðàáîòêà ñêðîëëèíãà |
1466 | je @f |
1466 | je @f |
1467 | call tl_get_node_count ;eax = node count |
1467 | call tl_get_node_count ;eax = node count |
1468 | mov ecx,eax |
1468 | mov ecx,eax |
1469 | call tl_get_rows_count |
1469 | call tl_get_rows_count |
1470 | cmp ecx,eax |
1470 | cmp ecx,eax |
1471 | jg .ye_sb |
1471 | jg .ye_sb |
1472 | xor ecx,ecx |
1472 | xor ecx,ecx |
1473 | .ye_sb: |
1473 | .ye_sb: |
1474 | 1474 | ||
1475 | mov edx,tl_p_scrol |
1475 | mov edx,tl_p_scrol |
1476 | mov dword[edx+20],eax ;+20 .cur_area |
1476 | mov dword[edx+20],eax ;+20 .cur_area |
1477 | mov dword[edx+16],ecx ;+16 .max_area |
1477 | mov dword[edx+16],ecx ;+16 .max_area |
1478 | push dword edx ;pointer to scroll struct |
1478 | push dword edx ;pointer to scroll struct |
1479 | call scroll_bar_vertical.draw |
1479 | call scroll_bar_vertical.draw |
1480 | @@: |
1480 | @@: |
1481 | pop edx ecx eax |
1481 | pop edx ecx eax |
1482 | ret |
1482 | ret |
1483 | 1483 | ||
1484 | ;input: |
1484 | ;input: |
1485 | ;dword[ebp+ 8] - pointer to node info |
1485 | ;dword[ebp+ 8] - pointer to node info |
1486 | ;dword[ebp+12] - pointer to 'TreeList' struct |
1486 | ;dword[ebp+12] - pointer to 'TreeList' struct |
1487 | align 4 |
1487 | align 4 |
1488 | tl_node_set_data: |
1488 | tl_node_set_data: |
1489 | push ebp |
1489 | push ebp |
1490 | mov ebp,esp |
1490 | mov ebp,esp |
1491 | push eax ecx edx edi esi |
1491 | push eax ecx edx edi esi |
1492 | mov edi,dword[ebp+12] |
1492 | mov edi,dword[ebp+12] |
1493 | call tl_get_cur_node_index ;eax=po_t |
1493 | call tl_get_cur_node_index ;eax=po_t |
1494 | cmp eax,2 |
1494 | cmp eax,2 |
1495 | jl @f |
1495 | jl @f |
1496 | xor ecx,ecx |
1496 | xor ecx,ecx |
1497 | mov cx,tl_info_size |
1497 | mov cx,tl_info_size |
1498 | imul eax,ecx |
1498 | imul eax,ecx |
1499 | add eax,dword[edi] |
1499 | add eax,dword[edi] |
1500 | mov edi,eax |
1500 | mov edi,eax |
1501 | mov esi,dword[ebp+8] ;pointer to node data |
1501 | mov esi,dword[ebp+8] ;pointer to node data |
1502 | rep movsb |
1502 | rep movsb |
1503 | 1503 | ||
1504 | mov esi,edi |
1504 | mov esi,edi |
1505 | mov edi,dword[ebp+12] ;restore edi |
1505 | mov edi,dword[ebp+12] ;restore edi |
1506 | mov cx,tl_info_capt_offs |
1506 | mov cx,tl_info_capt_offs |
1507 | cmp cx,tl_info_size |
1507 | cmp cx,tl_info_size |
1508 | jge .no_text_data |
1508 | jge .no_text_data |
1509 | mov ax,tl_info_capt_len ;ïðîâåðÿåì åñòü ëè îãðàíè÷åíèå íà äëèííó òåêñòà |
1509 | mov ax,tl_info_capt_len ;ïðîâåðÿåì åñòü ëè îãðàíè÷åíèå íà äëèííó òåêñòà |
1510 | cmp ax,0 |
1510 | cmp ax,0 |
1511 | je .no_limit |
1511 | je .no_limit |
1512 | add cx,ax ;cx = tl_info_capt_offs + tl_info_capt_len |
1512 | add cx,ax ;cx = tl_info_capt_offs + tl_info_capt_len |
1513 | and ecx,0xffff |
1513 | and ecx,0xffff |
1514 | xor eax,eax |
1514 | xor eax,eax |
1515 | mov ax,tl_info_size |
1515 | mov ax,tl_info_size |
1516 | cmp eax,ecx |
1516 | cmp eax,ecx |
1517 | jl .no_limit ;ïîëüçîâàòåëü çàäàë ñëèøêîì áîëüøóþ äëèííó òåêñòà |
1517 | jl .no_limit ;ïîëüçîâàòåëü çàäàë ñëèøêîì áîëüøóþ äëèííó òåêñòà |
1518 | add esi,ecx |
1518 | add esi,ecx |
1519 | sub esi,eax |
1519 | sub esi,eax |
1520 | .no_limit: |
1520 | .no_limit: |
1521 | dec esi |
1521 | dec esi |
1522 | mov byte[esi],0 ;îáíóëÿåì ïîñëåäíèé ñèìâîë ïîäïèñè, ÷òî-áû íå ãëþ÷èëî åñëè ïîëüçîâàòåëü çàäàë íåïðàâèëüíóþ ñòðóêòóðó |
1522 | mov byte[esi],0 ;îáíóëÿåì ïîñëåäíèé ñèìâîë ïîäïèñè, ÷òî-áû íå ãëþ÷èëî åñëè ïîëüçîâàòåëü çàäàë íåïðàâèëüíóþ ñòðóêòóðó |
1523 | .no_text_data: |
1523 | .no_text_data: |
1524 | 1524 | ||
1525 | @@: |
1525 | @@: |
1526 | pop esi edi edx ecx eax |
1526 | pop esi edi edx ecx eax |
1527 | pop ebp |
1527 | pop ebp |
1528 | ret 8 |
1528 | ret 8 |
1529 | 1529 | ||
1530 | ;input: |
1530 | ;input: |
1531 | ;dword[ebp+ 8] - pointer to 'TreeList' struct |
1531 | ;dword[ebp+ 8] - pointer to 'TreeList' struct |
1532 | align 4 |
1532 | align 4 |
1533 | tl_node_get_data: ;âçÿòü óêàçàòåëü íà äàííûå óçëà ïîä êóðñîðîì |
1533 | tl_node_get_data: ;âçÿòü óêàçàòåëü íà äàííûå óçëà ïîä êóðñîðîì |
1534 | push ebp |
1534 | push ebp |
1535 | mov ebp,esp |
1535 | mov ebp,esp |
1536 | push eax ecx edi |
1536 | push eax ecx edi |
1537 | mov edi,dword[ebp+8] |
1537 | mov edi,dword[ebp+8] |
1538 | call tl_get_cur_node_index ;eax=po_t |
1538 | call tl_get_cur_node_index ;eax=po_t |
1539 | mov dword[ebp+8],0 ;if return 0 pointer |
1539 | mov dword[ebp+8],0 ;if return 0 pointer |
1540 | cmp eax,2 |
1540 | cmp eax,2 |
1541 | jl @f |
1541 | jl @f |
1542 | xor ecx,ecx |
1542 | xor ecx,ecx |
1543 | mov cx,tl_info_size |
1543 | mov cx,tl_info_size |
1544 | imul eax,ecx |
1544 | imul eax,ecx |
1545 | add eax,dword[edi] |
1545 | add eax,dword[edi] |
1546 | mov dword[ebp+8],eax ;return node data pointer |
1546 | mov dword[ebp+8],eax ;return node data pointer |
1547 | @@: |
1547 | @@: |
1548 | pop edi ecx eax |
1548 | pop edi ecx eax |
1549 | pop ebp |
1549 | pop ebp |
1550 | ret |
1550 | ret |
1551 | 1551 | ||
1552 | ;input: |
1552 | ;input: |
1553 | ;dword[ebp+ 8] - node index |
1553 | ;dword[ebp+ 8] - node index |
1554 | ;dword[ebp+12] - pointer to 'TreeList' struct |
1554 | ;dword[ebp+12] - pointer to 'TreeList' struct |
1555 | align 4 |
1555 | align 4 |
1556 | tl_node_poi_get_info: ;âçÿòü óêàçàòåëü íà ñòðóêòóðó óçëà â óêàçàííîé ïîçèöèè |
1556 | tl_node_poi_get_info: ;âçÿòü óêàçàòåëü íà ñòðóêòóðó óçëà â óêàçàííîé ïîçèöèè |
1557 | push ebp |
1557 | push ebp |
1558 | mov ebp,esp |
1558 | mov ebp,esp |
1559 | push eax ecx edx edi |
1559 | push eax ecx edx edi |
1560 | mov edi,dword[ebp+12] |
1560 | mov edi,dword[ebp+12] |
1561 | mov eax,dword[ebp+8] |
1561 | mov eax,dword[ebp+8] |
1562 | 1562 | ||
1563 | ;cycle to nodes |
1563 | ;cycle to nodes |
1564 | mov edx,tl_data_nodes |
1564 | mov edx,tl_data_nodes |
1565 | mov ecx,edx |
1565 | mov ecx,edx |
1566 | add ecx,sizeof.TreeList |
1566 | add ecx,sizeof.TreeList |
1567 | @@: |
1567 | @@: |
1568 | call tl_iterat_next_all |
1568 | call tl_iterat_next_all |
1569 | cmp edx,ecx |
1569 | cmp edx,ecx |
1570 | jle @f |
1570 | jle @f |
1571 | dec eax |
1571 | dec eax |
1572 | cmp eax,0 |
1572 | cmp eax,0 |
1573 | jg @b |
1573 | jg @b |
1574 | jmp .find |
1574 | jmp .find |
1575 | @@: |
1575 | @@: |
1576 | xor edx,edx |
1576 | xor edx,edx |
1577 | .find: |
1577 | .find: |
1578 | mov dword[ebp+12],edx |
1578 | mov dword[ebp+12],edx |
1579 | pop edi edx ecx eax |
1579 | pop edi edx ecx eax |
1580 | pop ebp |
1580 | pop ebp |
1581 | ret 4 |
1581 | ret 4 |
1582 | 1582 | ||
1583 | ;input: |
1583 | ;input: |
1584 | ;dword[ebp+ 8] - node param struct |
1584 | ;dword[ebp+ 8] - node param struct |
1585 | ;dword[ebp+12] - pointer to 'TreeList' struct |
1585 | ;dword[ebp+12] - pointer to 'TreeList' struct |
1586 | align 4 |
1586 | align 4 |
1587 | tl_node_poi_get_next_info: ;âçÿòü óêàçàòåëü íà ñëåäóùóþ ñòðóêòóðó óçëà |
1587 | tl_node_poi_get_next_info: ;âçÿòü óêàçàòåëü íà ñëåäóùóþ ñòðóêòóðó óçëà |
1588 | push ebp |
1588 | push ebp |
1589 | mov ebp,esp |
1589 | mov ebp,esp |
1590 | push ecx edx edi |
1590 | push ecx edx edi |
1591 | mov edi,dword[ebp+12] |
1591 | mov edi,dword[ebp+12] |
1592 | mov edx,dword[ebp+8] |
1592 | mov edx,dword[ebp+8] |
1593 | 1593 | ||
1594 | mov ecx,tl_data_nodes |
1594 | mov ecx,tl_data_nodes |
1595 | add ecx,sizeof.TreeList |
1595 | add ecx,sizeof.TreeList |
1596 | 1596 | ||
1597 | call tl_iterat_next_all |
1597 | call tl_iterat_next_all |
1598 | cmp edx,ecx |
1598 | cmp edx,ecx |
1599 | jg @f |
1599 | jg @f |
1600 | xor edx,edx |
1600 | xor edx,edx |
1601 | @@: |
1601 | @@: |
1602 | 1602 | ||
1603 | mov dword[ebp+12],edx |
1603 | mov dword[ebp+12],edx |
1604 | pop edi edx ecx |
1604 | pop edi edx ecx |
1605 | pop ebp |
1605 | pop ebp |
1606 | ret 4 |
1606 | ret 4 |
1607 | 1607 | ||
1608 | ;input: |
1608 | ;input: |
1609 | ;dword[ebp+ 8] - node param struct |
1609 | ;dword[ebp+ 8] - node param struct |
1610 | ;dword[ebp+12] - pointer to 'TreeList' struct |
1610 | ;dword[ebp+12] - pointer to 'TreeList' struct |
1611 | align 4 |
1611 | align 4 |
1612 | tl_node_poi_get_data: ;âçÿòü óêàçàòåëü íà äàííûå óçëà |
1612 | tl_node_poi_get_data: ;âçÿòü óêàçàòåëü íà äàííûå óçëà |
1613 | push ebp |
1613 | push ebp |
1614 | mov ebp,esp |
1614 | mov ebp,esp |
1615 | push eax ecx edi |
1615 | push eax ecx edi |
1616 | mov edi,dword[ebp+12] |
1616 | mov edi,dword[ebp+12] |
1617 | mov edx,dword[ebp+8] |
1617 | mov edx,dword[ebp+8] |
1618 | 1618 | ||
1619 | mov dword[ebp+12],0 |
1619 | mov dword[ebp+12],0 |
1620 | call tl_get_node_index ;eax = node index |
1620 | call tl_get_node_index ;eax = node index |
1621 | cmp eax,2 |
1621 | cmp eax,2 |
1622 | jl @f |
1622 | jl @f |
1623 | xor ecx,ecx |
1623 | xor ecx,ecx |
1624 | mov cx,tl_info_size |
1624 | mov cx,tl_info_size |
1625 | imul eax,ecx |
1625 | imul eax,ecx |
1626 | add eax,dword[edi] |
1626 | add eax,dword[edi] |
1627 | mov dword[ebp+12],eax ;return node data pointer |
1627 | mov dword[ebp+12],eax ;return node data pointer |
1628 | @@: |
1628 | @@: |
1629 | pop edi ecx eax |
1629 | pop edi ecx eax |
1630 | pop ebp |
1630 | pop ebp |
1631 | ret 4 |
1631 | ret 4 |
1632 | 1632 | ||
1633 | ;input: |
1633 | ;input: |
1634 | ; edi = pointer 'tl' struct |
1634 | ; edi = pointer 'tl' struct |
1635 | ;output: |
1635 | ;output: |
1636 | ; eax = index of current node |
1636 | ; eax = index of current node |
1637 | align 4 |
1637 | align 4 |
1638 | tl_get_cur_node_index: ;áåðåò ïîçèöèþ ïîä êóðñîðîì |
1638 | tl_get_cur_node_index: ;áåðåò ïîçèöèþ ïîä êóðñîðîì |
1639 | push ecx edx |
1639 | push ecx edx |
1640 | ;cycle to nodes |
1640 | ;cycle to nodes |
1641 | xor eax,eax |
1641 | xor eax,eax |
1642 | mov edx,tl_data_nodes |
1642 | mov edx,tl_data_nodes |
1643 | mov ecx,edx |
1643 | mov ecx,edx |
1644 | add ecx,sizeof.TreeList |
1644 | add ecx,sizeof.TreeList |
1645 | @@: |
1645 | @@: |
1646 | call tl_iterat_next |
1646 | call tl_iterat_next |
1647 | cmp edx,ecx |
1647 | cmp edx,ecx |
1648 | jle @f |
1648 | jle @f |
1649 | cmp eax,tl_cur_pos |
1649 | cmp eax,tl_cur_pos |
1650 | je @f |
1650 | je @f |
1651 | inc eax |
1651 | inc eax |
1652 | jmp @b |
1652 | jmp @b |
1653 | @@: |
1653 | @@: |
1654 | mov eax,edx |
1654 | mov eax,edx |
1655 | sub eax,tl_data_nodes |
1655 | sub eax,tl_data_nodes |
1656 | xor edx,edx |
1656 | xor edx,edx |
1657 | mov ecx,sizeof.TreeList |
1657 | mov ecx,sizeof.TreeList |
1658 | div ecx |
1658 | div ecx |
1659 | pop edx ecx |
1659 | pop edx ecx |
1660 | ret |
1660 | ret |
1661 | 1661 | ||
1662 | ;input: |
1662 | ;input: |
1663 | ; edx = pointer node memory |
1663 | ; edx = pointer node memory |
1664 | ; edi = pointer 'tl' struct |
1664 | ; edi = pointer 'tl' struct |
1665 | ;output: |
1665 | ;output: |
1666 | ; eax = struct index of current node |
1666 | ; eax = struct index of current node |
1667 | align 4 |
1667 | align 4 |
1668 | tl_get_node_index: ;áåðåò ïîçèöèþ óêàçàííîãî ñèìâîëà |
1668 | tl_get_node_index: ;áåðåò ïîçèöèþ óêàçàííîãî ñèìâîëà |
1669 | push ecx edx |
1669 | push ecx edx |
1670 | mov eax,edx |
1670 | mov eax,edx |
1671 | sub eax,tl_data_nodes |
1671 | sub eax,tl_data_nodes |
1672 | xor edx,edx |
1672 | xor edx,edx |
1673 | mov ecx,sizeof.TreeList |
1673 | mov ecx,sizeof.TreeList |
1674 | div ecx |
1674 | div ecx |
1675 | pop edx ecx |
1675 | pop edx ecx |
1676 | ret |
1676 | ret |
1677 | 1677 | ||
1678 | align 4 |
1678 | align 4 |
1679 | tl_node_delete: ;óäàëèòü óçåë |
1679 | tl_node_delete: ;óäàëèòü óçåë |
1680 | push ebp |
1680 | push ebp |
1681 | mov ebp,esp |
1681 | mov ebp,esp |
1682 | push eax edx edi |
1682 | push eax edx edi |
1683 | mov edi,dword[ebp+8] |
1683 | mov edi,dword[ebp+8] |
1684 | call tl_get_cur_node_index ;eax=po_t |
1684 | call tl_get_cur_node_index ;eax=po_t |
1685 | cmp eax,2 |
1685 | cmp eax,2 |
1686 | jl @f |
1686 | jl @f |
1687 | imul eax,sizeof.TreeList |
1687 | imul eax,sizeof.TreeList |
1688 | add eax,tl_data_nodes |
1688 | add eax,tl_data_nodes |
1689 | mov edx,eax |
1689 | mov edx,eax |
1690 | inc tl_ch_tim |
1690 | inc tl_ch_tim |
1691 | mov eax,tl_ch_tim |
1691 | mov eax,tl_ch_tim |
1692 | mov dword[edx+16],eax |
1692 | mov dword[edx+16],eax |
1693 | call tb_scrol_resize ;îáðàáîòêà ñêðîëëèíãà |
1693 | call tb_scrol_resize ;îáðàáîòêà ñêðîëëèíãà |
1694 | @@: |
1694 | @@: |
1695 | pop edi edx eax |
1695 | pop edi edx eax |
1696 | pop ebp |
1696 | pop ebp |
1697 | ret 4 |
1697 | ret 4 |
1698 | 1698 | ||
1699 | align 4 |
1699 | align 4 |
1700 | tl_cur_beg: ;ïîñòàâèòü êóðñîð íà ïåðâûé óçåë |
1700 | tl_cur_beg: ;ïîñòàâèòü êóðñîð íà ïåðâûé óçåë |
1701 | push ebp |
1701 | push ebp |
1702 | mov ebp,esp |
1702 | mov ebp,esp |
1703 | push edi |
1703 | push edi |
1704 | mov edi,dword[ebp+8] |
1704 | mov edi,dword[ebp+8] |
1705 | mov tl_cur_pos,0 |
1705 | mov tl_cur_pos,0 |
1706 | cmp tl_p_scrol,0 |
1706 | cmp tl_p_scrol,0 |
1707 | je @f |
1707 | je @f |
1708 | mov edi,tl_p_scrol |
1708 | mov edi,tl_p_scrol |
1709 | mov dword[edi+24],0 |
1709 | mov dword[edi+24],0 |
1710 | push dword edi |
1710 | push dword edi |
1711 | mov edi,dword[ebp+8] |
1711 | mov edi,dword[ebp+8] |
1712 | call scroll_bar_vertical.draw |
1712 | call scroll_bar_vertical.draw |
1713 | @@: |
1713 | @@: |
1714 | pop edi |
1714 | pop edi |
1715 | 1715 | ||
1716 | pop ebp |
1716 | pop ebp |
1717 | ret 4 |
1717 | ret 4 |
1718 | 1718 | ||
1719 | align 4 |
1719 | align 4 |
1720 | tl_cur_next: ;ïåðåíåñòè êóðñîð íà 1 ïîçèöèþ íèæå |
1720 | tl_cur_next: ;ïåðåíåñòè êóðñîð íà 1 ïîçèöèþ íèæå |
1721 | push ebp |
1721 | push ebp |
1722 | mov ebp,esp |
1722 | mov ebp,esp |
1723 | push eax ebx edi esi |
1723 | push eax ebx edi esi |
1724 | mov edi,dword[ebp+8] |
1724 | mov edi,dword[ebp+8] |
1725 | call tl_get_node_count ;eax = node count |
1725 | call tl_get_node_count ;eax = node count |
1726 | ;inc eax |
1726 | ;inc eax |
1727 | cmp tl_cur_pos,eax |
1727 | cmp tl_cur_pos,eax |
1728 | jge .no_redraw |
1728 | jge .no_redraw |
1729 | mov esi,tl_box_top |
1729 | mov esi,tl_box_top |
1730 | add esi,tl_box_height ;esi = coord bottom border |
1730 | add esi,tl_box_height ;esi = coord bottom border |
1731 | call tl_draw_null_cursor ;ñòèðàåì êóðñîð |
1731 | call tl_draw_null_cursor ;ñòèðàåì êóðñîð |
1732 | inc tl_cur_pos |
1732 | inc tl_cur_pos |
1733 | 1733 | ||
1734 | cmp tl_p_scrol,0 ;if not scrol struct |
1734 | cmp tl_p_scrol,0 ;if not scrol struct |
1735 | je @f |
1735 | je @f |
1736 | call tl_get_rows_count ;eax = rows count |
1736 | call tl_get_rows_count ;eax = rows count |
1737 | mov ebx,tl_p_scrol |
1737 | mov ebx,tl_p_scrol |
1738 | add eax,dword[ebx+24] ;.position +24 |
1738 | add eax,dword[ebx+24] ;.position +24 |
1739 | cmp tl_cur_pos,eax |
1739 | cmp tl_cur_pos,eax |
1740 | jl @f |
1740 | jl @f |
1741 | inc dword[ebx+24] ;.position +24 |
1741 | inc dword[ebx+24] ;.position +24 |
1742 | push dword ebx |
1742 | push dword ebx |
1743 | call scroll_bar_vertical.draw |
1743 | call scroll_bar_vertical.draw |
1744 | 1744 | ||
1745 | mov edi,dword[ebp+8] ;restore edi |
1745 | mov edi,dword[ebp+8] ;restore edi |
1746 | push dword edi |
1746 | push dword edi |
1747 | call tl_draw ;ïîëíàÿ ïåðåðèñîâêà îêíà |
1747 | call tl_draw ;ïîëíàÿ ïåðåðèñîâêà îêíà |
1748 | jmp .no_redraw |
1748 | jmp .no_redraw |
1749 | @@: |
1749 | @@: |
1750 | mov edi,dword[ebp+8] ;restore edi |
1750 | mov edi,dword[ebp+8] ;restore edi |
1751 | call tl_draw_cursor ;ïåðåðèñîâêà êóðñîðà |
1751 | call tl_draw_cursor ;ïåðåðèñîâêà êóðñîðà |
1752 | call tl_draw_caption_cur_pos |
1752 | call tl_draw_caption_cur_pos |
1753 | .no_redraw: |
1753 | .no_redraw: |
1754 | pop esi edi ebx eax |
1754 | pop esi edi ebx eax |
1755 | pop ebp |
1755 | pop ebp |
1756 | ret 4 |
1756 | ret 4 |
1757 | 1757 | ||
1758 | 1758 | ||
1759 | ;input: |
1759 | ;input: |
1760 | ; edi = pointer 'tl' struct |
1760 | ; edi = pointer 'tl' struct |
1761 | ;output: |
1761 | ;output: |
1762 | ; eax = struct index of current node |
1762 | ; eax = struct index of current node |
1763 | align 4 |
1763 | align 4 |
1764 | tl_get_node_count: ;áåðåò ÷èñëî âñåõ âèäèìûõ óçëîâ (íå ñ÷èòàÿ çàêðûòûõ äî÷åðíèõ) |
1764 | tl_get_node_count: ;áåðåò ÷èñëî âñåõ âèäèìûõ óçëîâ (íå ñ÷èòàÿ çàêðûòûõ äî÷åðíèõ) |
1765 | push ecx edx |
1765 | push ecx edx |
1766 | ;cycle to nodes |
1766 | ;cycle to nodes |
1767 | xor eax,eax |
1767 | xor eax,eax |
1768 | mov edx,tl_data_nodes |
1768 | mov edx,tl_data_nodes |
1769 | mov ecx,edx |
1769 | mov ecx,edx |
1770 | add ecx,sizeof.TreeList |
1770 | add ecx,sizeof.TreeList |
1771 | @@: |
1771 | @@: |
1772 | call tl_iterat_next |
1772 | call tl_iterat_next |
1773 | cmp edx,ecx |
1773 | cmp edx,ecx |
1774 | jle @f |
1774 | jle @f |
1775 | inc eax |
1775 | inc eax |
1776 | jmp @b |
1776 | jmp @b |
1777 | @@: |
1777 | @@: |
1778 | pop edx ecx |
1778 | pop edx ecx |
1779 | ret |
1779 | ret |
1780 | 1780 | ||
1781 | ;input: |
1781 | ;input: |
1782 | ; edi = pointer 'tl' struct |
1782 | ; edi = pointer 'tl' struct |
1783 | ;output: |
1783 | ;output: |
1784 | ; eax = struct index of current node |
1784 | ; eax = struct index of current node |
1785 | align 4 |
1785 | align 4 |
1786 | tl_get_node_count_all: ;áåðåò ÷èñëî âñåõ âèäèìûõ óçëîâ (ñ÷èòàÿ çàêðûòûå äî÷åðíèå) |
1786 | tl_get_node_count_all: ;áåðåò ÷èñëî âñåõ âèäèìûõ óçëîâ (ñ÷èòàÿ çàêðûòûå äî÷åðíèå) |
1787 | push ecx edx |
1787 | push ecx edx |
1788 | ;cycle to nodes |
1788 | ;cycle to nodes |
1789 | xor eax,eax |
1789 | xor eax,eax |
1790 | mov edx,tl_data_nodes |
1790 | mov edx,tl_data_nodes |
1791 | mov ecx,edx |
1791 | mov ecx,edx |
1792 | add ecx,sizeof.TreeList |
1792 | add ecx,sizeof.TreeList |
1793 | @@: |
1793 | @@: |
1794 | call tl_iterat_next_all |
1794 | call tl_iterat_next_all |
1795 | cmp edx,ecx |
1795 | cmp edx,ecx |
1796 | jle @f |
1796 | jle @f |
1797 | inc eax |
1797 | inc eax |
1798 | jmp @b |
1798 | jmp @b |
1799 | @@: |
1799 | @@: |
1800 | pop edx ecx |
1800 | pop edx ecx |
1801 | ret |
1801 | ret |
1802 | 1802 | ||
1803 | align 4 |
1803 | align 4 |
1804 | tl_cur_perv: ;ïåðåíåñòè êóðñîð íà 1 ïîçèöèþ âûøå |
1804 | tl_cur_perv: ;ïåðåíåñòè êóðñîð íà 1 ïîçèöèþ âûøå |
1805 | push ebp |
1805 | push ebp |
1806 | mov ebp,esp |
1806 | mov ebp,esp |
1807 | push eax edi esi |
1807 | push eax edi esi |
1808 | mov edi,dword[ebp+8] |
1808 | mov edi,dword[ebp+8] |
1809 | cmp tl_cur_pos,0 |
1809 | cmp tl_cur_pos,0 |
1810 | je .no_redraw |
1810 | je .no_redraw |
1811 | mov esi,tl_box_top |
1811 | mov esi,tl_box_top |
1812 | add esi,tl_box_height ;esi = coord bottom border |
1812 | add esi,tl_box_height ;esi = coord bottom border |
1813 | call tl_draw_null_cursor ;ñòèðàåì êóðñîð |
1813 | call tl_draw_null_cursor ;ñòèðàåì êóðñîð |
1814 | dec tl_cur_pos ;äâèãàåì êóðñîð ââåðõ |
1814 | dec tl_cur_pos ;äâèãàåì êóðñîð ââåðõ |
1815 | 1815 | ||
1816 | cmp tl_p_scrol,0 ;åñëè åñòü óêàçàòåëü íà ñêðîëëèíã |
1816 | cmp tl_p_scrol,0 ;åñëè åñòü óêàçàòåëü íà ñêðîëëèíã |
1817 | je @f |
1817 | je @f |
1818 | mov eax,tl_p_scrol |
1818 | mov eax,tl_p_scrol |
1819 | cmp dword[eax+24],0 ;åñëè ñêðîëëèíã íà âåðõó, âûõîäèì |
1819 | cmp dword[eax+24],0 ;åñëè ñêðîëëèíã íà âåðõó, âûõîäèì |
1820 | je @f |
1820 | je @f |
1821 | mov edi,tl_cur_pos |
1821 | mov edi,tl_cur_pos |
1822 | cmp edi,dword[eax+24] ;åñëè êóðñîð óøåë âûøå ñêðîëëèíãà, òîãäà îïóñêàåì ñêðîëëèíã |
1822 | cmp edi,dword[eax+24] ;åñëè êóðñîð óøåë âûøå ñêðîëëèíãà, òîãäà îïóñêàåì ñêðîëëèíã |
1823 | jge @f |
1823 | jge @f |
1824 | dec dword[eax+24] |
1824 | dec dword[eax+24] |
1825 | push dword eax |
1825 | push dword eax |
1826 | mov edi,dword[ebp+8] |
1826 | mov edi,dword[ebp+8] |
1827 | call scroll_bar_vertical.draw |
1827 | call scroll_bar_vertical.draw |
1828 | mov edi,dword[ebp+8] ;restore edi |
1828 | mov edi,dword[ebp+8] ;restore edi |
1829 | push dword edi |
1829 | push dword edi |
1830 | call tl_draw ;ïîëíàÿ ïåðåðèñîâêà îêíà |
1830 | call tl_draw ;ïîëíàÿ ïåðåðèñîâêà îêíà |
1831 | jmp .no_redraw |
1831 | jmp .no_redraw |
1832 | @@: |
1832 | @@: |
1833 | mov edi,dword[ebp+8] ;restore edi |
1833 | mov edi,dword[ebp+8] ;restore edi |
1834 | ;mov esi,tl_box_top |
1834 | ;mov esi,tl_box_top |
1835 | ;add esi,tl_box_height ;esi = coord bottom border |
1835 | ;add esi,tl_box_height ;esi = coord bottom border |
1836 | call tl_draw_cursor ;ïåðåðèñîâêà êóðñîðà |
1836 | call tl_draw_cursor ;ïåðåðèñîâêà êóðñîðà |
1837 | call tl_draw_caption_cur_pos |
1837 | call tl_draw_caption_cur_pos |
1838 | .no_redraw: |
1838 | .no_redraw: |
1839 | pop esi edi eax |
1839 | pop esi edi eax |
1840 | pop ebp |
1840 | pop ebp |
1841 | ret 4 |
1841 | ret 4 |
1842 | 1842 | ||
1843 | align 4 |
1843 | align 4 |
1844 | tl_cur_page_up: ;ïåðåíåñòè êóðñîð íà 1 ñòðàíèöó âûøå |
1844 | tl_cur_page_up: ;ïåðåíåñòè êóðñîð íà 1 ñòðàíèöó âûøå |
1845 | push ebp |
1845 | push ebp |
1846 | mov ebp,esp |
1846 | mov ebp,esp |
1847 | push eax edi esi |
1847 | push eax edi esi |
1848 | mov edi,dword[ebp+8] |
1848 | mov edi,dword[ebp+8] |
1849 | 1849 | ||
1850 | cmp tl_p_scrol,0 ;åñëè åñòü óêàçàòåëü íà ñêðîëëèíã |
1850 | cmp tl_p_scrol,0 ;åñëè åñòü óêàçàòåëü íà ñêðîëëèíã |
1851 | je .no_redraw |
1851 | je .no_redraw |
1852 | 1852 | ||
1853 | mov esi,tl_p_scrol |
1853 | mov esi,tl_p_scrol |
1854 | call tl_get_rows_count ;eax = rows count |
1854 | call tl_get_rows_count ;eax = rows count |
1855 | 1855 | ||
1856 | cmp tl_cur_pos,0 |
1856 | cmp tl_cur_pos,0 |
1857 | jne @f |
1857 | jne @f |
1858 | cmp dword[esi+24],0 ;åñëè ñêðîëëèíã íà âåðõó, âûõîäèì |
1858 | cmp dword[esi+24],0 ;åñëè ñêðîëëèíã íà âåðõó, âûõîäèì |
1859 | jne @f |
1859 | jne @f |
1860 | jmp .no_redraw |
1860 | jmp .no_redraw |
1861 | @@: |
1861 | @@: |
1862 | cmp tl_cur_pos,eax ;ïðîâåðÿåì ïîçèöèþ êóðñîðà è êîë-âî ñòîê íà ñòðàíèöå |
1862 | cmp tl_cur_pos,eax ;ïðîâåðÿåì ïîçèöèþ êóðñîðà è êîë-âî ñòîê íà ñòðàíèöå |
1863 | jl @f ;åñëè ìåíüøå, òî ïðèðàâíèâàåì ê 0, ÷òî-áû íå îòíÿòü áîëüøå ÷åì íàäî |
1863 | jl @f ;åñëè ìåíüøå, òî ïðèðàâíèâàåì ê 0, ÷òî-áû íå îòíÿòü áîëüøå ÷åì íàäî |
1864 | sub tl_cur_pos,eax |
1864 | sub tl_cur_pos,eax |
1865 | jmp .cursor |
1865 | jmp .cursor |
1866 | @@: |
1866 | @@: |
1867 | mov tl_cur_pos,0 |
1867 | mov tl_cur_pos,0 |
1868 | .cursor: |
1868 | .cursor: |
1869 | cmp dword[esi+24],eax |
1869 | cmp dword[esi+24],eax |
1870 | jl @f |
1870 | jl @f |
1871 | sub dword[esi+24],eax |
1871 | sub dword[esi+24],eax |
1872 | jmp .scroll |
1872 | jmp .scroll |
1873 | @@: |
1873 | @@: |
1874 | mov dword[esi+24],0 |
1874 | mov dword[esi+24],0 |
1875 | .scroll: |
1875 | .scroll: |
1876 | ;ïåðåðèñîâêè îêíà è ñêðîëëèíãà |
1876 | ;ïåðåðèñîâêè îêíà è ñêðîëëèíãà |
1877 | push dword edi |
1877 | push dword edi |
1878 | call tl_draw ;draw window |
1878 | call tl_draw ;draw window |
1879 | push dword esi |
1879 | push dword esi |
1880 | call scroll_bar_vertical.draw |
1880 | call scroll_bar_vertical.draw |
1881 | .no_redraw: |
1881 | .no_redraw: |
1882 | pop esi edi eax |
1882 | pop esi edi eax |
1883 | pop ebp |
1883 | pop ebp |
1884 | ret 4 |
1884 | ret 4 |
1885 | 1885 | ||
1886 | align 4 |
1886 | align 4 |
1887 | tl_cur_page_down: ;ïåðåíåñòè êóðñîð íà 1 ñòðàíèöó íèæå |
1887 | tl_cur_page_down: ;ïåðåíåñòè êóðñîð íà 1 ñòðàíèöó íèæå |
1888 | push ebp |
1888 | push ebp |
1889 | mov ebp,esp |
1889 | mov ebp,esp |
1890 | push eax ebx ecx edi esi |
1890 | push eax ebx ecx edi esi |
1891 | ;eax - êîë-âî ñòðîê íà ñòðàíèöå |
1891 | ;eax - êîë-âî ñòðîê íà ñòðàíèöå |
1892 | ;ebx - ìàêñ. ïîçèöèÿ êóðñîðà |
1892 | ;ebx - ìàêñ. ïîçèöèÿ êóðñîðà |
1893 | ;ecx - ìàêñ. ïîçèöèÿ ñêðîëëèíãà |
1893 | ;ecx - ìàêñ. ïîçèöèÿ ñêðîëëèíãà |
1894 | mov edi,dword[ebp+8] |
1894 | mov edi,dword[ebp+8] |
1895 | 1895 | ||
1896 | cmp tl_p_scrol,0 ;åñëè åñòü óêàçàòåëü íà ñêðîëëèíã |
1896 | cmp tl_p_scrol,0 ;åñëè åñòü óêàçàòåëü íà ñêðîëëèíã |
1897 | je .no_redraw |
1897 | je .no_redraw |
1898 | 1898 | ||
1899 | mov esi,tl_p_scrol |
1899 | mov esi,tl_p_scrol |
1900 | call tl_get_node_count ;eax = node count |
1900 | call tl_get_node_count ;eax = node count |
1901 | mov ebx,eax |
1901 | mov ebx,eax |
1902 | call tl_get_rows_count ;eax = rows count |
1902 | call tl_get_rows_count ;eax = rows count |
1903 | 1903 | ||
1904 | mov ecx,ebx |
1904 | mov ecx,ebx |
1905 | inc ecx ;åñëè íèæíèé óçåë âèäåí íà ïîëîâèíó |
1905 | inc ecx ;åñëè íèæíèé óçåë âèäåí íà ïîëîâèíó |
1906 | cmp ecx,eax ;if (ecx>eax) { ecx=ecx-eax } else { ecx=0 } |
1906 | cmp ecx,eax ;if (ecx>eax) { ecx=ecx-eax } else { ecx=0 } |
1907 | jl @f |
1907 | jl @f |
1908 | sub ecx,eax ;óìåíüøàåì ìàêñèìàëüíóþ ïîçèöèþ ñêðîëëèíãà, òàê ÷òî-áû áûëè âèäíû ïîñëåäíèå óçëû |
1908 | sub ecx,eax ;óìåíüøàåì ìàêñèìàëüíóþ ïîçèöèþ ñêðîëëèíãà, òàê ÷òî-áû áûëè âèäíû ïîñëåäíèå óçëû |
1909 | jmp .control |
1909 | jmp .control |
1910 | @@: |
1910 | @@: |
1911 | xor ecx,ecx ;ecx=0 - âñå óçëû âëàçÿò â ýêðàí, ñêðîëëèíã íå íóæåí |
1911 | xor ecx,ecx ;ecx=0 - âñå óçëû âëàçÿò â ýêðàí, ñêðîëëèíã íå íóæåí |
1912 | .control: |
1912 | .control: |
1913 | 1913 | ||
1914 | cmp tl_cur_pos,ebx ;êóðñîð âíèçó ? |
1914 | cmp tl_cur_pos,ebx ;êóðñîð âíèçó ? |
1915 | jl @f |
1915 | jl @f |
1916 | cmp dword[esi+24],ecx ;ñêðîëëèíã âíèçó ? |
1916 | cmp dword[esi+24],ecx ;ñêðîëëèíã âíèçó ? |
1917 | jl @f |
1917 | jl @f |
1918 | jmp .no_redraw |
1918 | jmp .no_redraw |
1919 | @@: |
1919 | @@: |
1920 | 1920 | ||
1921 | add tl_cur_pos,eax ;ïåðåìåùàåì êóðñîð |
1921 | add tl_cur_pos,eax ;ïåðåìåùàåì êóðñîð |
1922 | cmp tl_cur_pos,ebx |
1922 | cmp tl_cur_pos,ebx |
1923 | jl @f |
1923 | jl @f |
1924 | mov tl_cur_pos,ebx |
1924 | mov tl_cur_pos,ebx |
1925 | @@: |
1925 | @@: |
1926 | 1926 | ||
1927 | add dword[esi+24],eax ;ïåðåìåùàåì ñêðîëëèíã |
1927 | add dword[esi+24],eax ;ïåðåìåùàåì ñêðîëëèíã |
1928 | cmp dword[esi+24],ecx |
1928 | cmp dword[esi+24],ecx |
1929 | jl @f |
1929 | jl @f |
1930 | mov dword[esi+24],ecx |
1930 | mov dword[esi+24],ecx |
1931 | @@: |
1931 | @@: |
1932 | 1932 | ||
1933 | ;ïåðåðèñîâêè îêíà è ñêðîëëèíãà |
1933 | ;ïåðåðèñîâêè îêíà è ñêðîëëèíãà |
1934 | push dword edi |
1934 | push dword edi |
1935 | call tl_draw ;draw window |
1935 | call tl_draw ;draw window |
1936 | push dword esi |
1936 | push dword esi |
1937 | call scroll_bar_vertical.draw |
1937 | call scroll_bar_vertical.draw |
1938 | .no_redraw: |
1938 | .no_redraw: |
1939 | pop esi edi ecx ebx eax |
1939 | pop esi edi ecx ebx eax |
1940 | pop ebp |
1940 | pop ebp |
1941 | ret 4 |
1941 | ret 4 |
1942 | 1942 | ||
1943 | align 4 |
1943 | align 4 |
1944 | tl_node_close_open: ;îòêðûòü/çàêðûòü óçåë (ðàáîòàåò ñ óçëàìè êîòîðûå èìåþò äî÷åðíèå óçëû) |
1944 | tl_node_close_open: ;îòêðûòü/çàêðûòü óçåë (ðàáîòàåò ñ óçëàìè êîòîðûå èìåþò äî÷åðíèå óçëû) |
1945 | push ebp |
1945 | push ebp |
1946 | mov ebp,esp |
1946 | mov ebp,esp |
1947 | push eax edx edi |
1947 | push eax edx edi |
1948 | mov edi,dword[ebp+8] |
1948 | mov edi,dword[ebp+8] |
1949 | call tl_get_cur_node_index ;eax = ïîçèöèÿ óçëà íà êîòîðîì ñòîèò êóðñîð |
1949 | call tl_get_cur_node_index ;eax = ïîçèöèÿ óçëà íà êîòîðîì ñòîèò êóðñîð |
1950 | cmp eax,2 ;êóðñîð ñòîèò íà óçëå ? |
1950 | cmp eax,2 ;êóðñîð ñòîèò íà óçëå ? |
1951 | jl @f |
1951 | jl @f |
1952 | imul eax,sizeof.TreeList |
1952 | imul eax,sizeof.TreeList |
1953 | add eax,tl_data_nodes |
1953 | add eax,tl_data_nodes |
1954 | ;eax = óêàçàòåëü íà ñòðóêòóðó óçëà âûáðàííîãî êóðñîðîì |
1954 | ;eax = óêàçàòåëü íà ñòðóêòóðó óçëà âûáðàííîãî êóðñîðîì |
1955 | push dword edi |
1955 | push dword edi |
1956 | push dword eax |
1956 | push dword eax |
1957 | call tl_node_poi_get_next_info |
1957 | call tl_node_poi_get_next_info |
1958 | pop dword edx ;edx = óêàçàòåëü íà ñòðóêòóðó óçëà êîòîðûé èäåò ïîñëå óçëà eax |
1958 | pop dword edx ;edx = óêàçàòåëü íà ñòðóêòóðó óçëà êîòîðûé èäåò ïîñëå óçëà eax |
1959 | cmp edx,0 ;åñòü ëè óçëû íèæå âûáðàííîãî íàìè ? |
1959 | cmp edx,0 ;åñòü ëè óçëû íèæå âûáðàííîãî íàìè ? |
1960 | je @f |
1960 | je @f |
1961 | mov dl,byte[edx+2] ;áåðåì óðîâåíü íèæíåãî óçëà |
1961 | mov dl,byte[edx+2] ;áåðåì óðîâåíü íèæíåãî óçëà |
1962 | cmp byte[eax+2],dl ;+2 = .lev |
1962 | cmp byte[eax+2],dl ;+2 = .lev |
1963 | jge @f ;åñëè íèæíèå óçëû ìåíüøåãî óðîâíÿ, çíà÷èò îíè íå äî÷åðíèå, êîíåö ôóíêöèè |
1963 | jge @f ;åñëè íèæíèå óçëû ìåíüøåãî óðîâíÿ, çíà÷èò îíè íå äî÷åðíèå, êîíåö ôóíêöèè |
1964 | xor byte[eax+3],1 ;+3 = .clo *** îòêðûòèå/çàêðûòèå óçëà *** |
1964 | xor byte[eax+3],1 ;+3 = .clo *** îòêðûòèå/çàêðûòèå óçëà *** |
1965 | call tb_scrol_resize ;îáðàáîòêà ñêðîëëèíãà |
1965 | call tb_scrol_resize ;îáðàáîòêà ñêðîëëèíãà |
1966 | 1966 | ||
1967 | push dword edi |
1967 | push dword edi |
1968 | call tl_draw ;îáíîâëåíèå îêíà |
1968 | call tl_draw ;îáíîâëåíèå îêíà |
1969 | @@: |
1969 | @@: |
1970 | pop edi edx eax |
1970 | pop edi edx eax |
1971 | pop ebp |
1971 | pop ebp |
1972 | ret 4 |
1972 | ret 4 |
1973 | 1973 | ||
1974 | align 4 |
1974 | align 4 |
1975 | tl_node_lev_inc: ;óâåëè÷èòü óðîâåíü |
1975 | tl_node_lev_inc: ;óâåëè÷èòü óðîâåíü |
1976 | push ebp |
1976 | push ebp |
1977 | mov ebp,esp |
1977 | mov ebp,esp |
1978 | push eax ecx edx edi |
1978 | push eax ecx edx edi |
1979 | mov edi,dword[ebp+8] |
1979 | mov edi,dword[ebp+8] |
1980 | bt tl_style,2 ;tl_list_box_mode |
1980 | bt tl_style,2 ;tl_list_box_mode |
1981 | jc @f |
1981 | jc @f |
1982 | call tl_get_cur_node_index ;eax=po_t |
1982 | call tl_get_cur_node_index ;eax=po_t |
1983 | cmp eax,2 |
1983 | cmp eax,2 |
1984 | jl @f |
1984 | jl @f |
1985 | mov ecx,tl_data_nodes |
1985 | mov ecx,tl_data_nodes |
1986 | imul eax,sizeof.TreeList |
1986 | imul eax,sizeof.TreeList |
1987 | add eax,ecx ;eax = pointer to some node struct |
1987 | add eax,ecx ;eax = pointer to some node struct |
1988 | add ecx,sizeof.TreeList ;ecx = pointer to 1 node struct |
1988 | add ecx,sizeof.TreeList ;ecx = pointer to 1 node struct |
1989 | 1989 | ||
1990 | mov edx,eax |
1990 | mov edx,eax |
1991 | call tl_iterat_perv ;ïðîâåðÿåì åñòü ëè âåðõíèé óçåë |
1991 | call tl_iterat_perv ;ïðîâåðÿåì åñòü ëè âåðõíèé óçåë |
1992 | cmp edx,ecx |
1992 | cmp edx,ecx |
1993 | jle @f ;åñëè âåðõíåãî óçëà íåò òî òåêóùèé óçåë íå äâèãàåì |
1993 | jle @f ;åñëè âåðõíåãî óçëà íåò òî òåêóùèé óçåë íå äâèãàåì |
1994 | mov cl,byte[edx+2] ;áåðåì óðîâåíü ðîäèòåëüñêîãî óçëà |
1994 | mov cl,byte[edx+2] ;áåðåì óðîâåíü ðîäèòåëüñêîãî óçëà |
1995 | inc cl ;äîáàâëÿåì 1 è ïîëó÷àåì ìàêñèìàëüíîå çíà÷åíèå |
1995 | inc cl ;äîáàâëÿåì 1 è ïîëó÷àåì ìàêñèìàëüíîå çíà÷åíèå |
1996 | cmp byte[eax+2],cl |
1996 | cmp byte[eax+2],cl |
1997 | jge @f |
1997 | jge @f |
1998 | inc byte[eax+2] ;óâåëè÷èâàåì çíà÷åíèå óçëà |
1998 | inc byte[eax+2] ;óâåëè÷èâàåì çíà÷åíèå óçëà |
1999 | @@: |
1999 | @@: |
2000 | pop edi edx ecx eax |
2000 | pop edi edx ecx eax |
2001 | pop ebp |
2001 | pop ebp |
2002 | ret 4 |
2002 | ret 4 |
2003 | 2003 | ||
2004 | align 4 |
2004 | align 4 |
2005 | tl_node_lev_dec: ;óìåíüøèòü óðîâåíü |
2005 | tl_node_lev_dec: ;óìåíüøèòü óðîâåíü |
2006 | push ebp |
2006 | push ebp |
2007 | mov ebp,esp |
2007 | mov ebp,esp |
2008 | push eax edi |
2008 | push eax edi |
2009 | mov edi,dword[ebp+8] |
2009 | mov edi,dword[ebp+8] |
2010 | call tl_get_cur_node_index ;eax=po_t |
2010 | call tl_get_cur_node_index ;eax=po_t |
2011 | cmp eax,2 |
2011 | cmp eax,2 |
2012 | jl @f |
2012 | jl @f |
2013 | imul eax,sizeof.TreeList |
2013 | imul eax,sizeof.TreeList |
2014 | add eax,tl_data_nodes |
2014 | add eax,tl_data_nodes |
2015 | cmp byte[eax+2],0 |
2015 | cmp byte[eax+2],0 |
2016 | je @f |
2016 | je @f |
2017 | dec byte[eax+2] |
2017 | dec byte[eax+2] |
2018 | @@: |
2018 | @@: |
2019 | pop edi eax |
2019 | pop edi eax |
2020 | pop ebp |
2020 | pop ebp |
2021 | ret 4 |
2021 | ret 4 |
2022 | 2022 | ||
2023 | align 4 |
2023 | align 4 |
2024 | tl_node_move_up: ;ïåðåìåùàåì óçåë ââåðõ |
2024 | tl_node_move_up: ;ïåðåìåùàåì óçåë ââåðõ |
2025 | push ebp |
2025 | push ebp |
2026 | mov ebp,esp |
2026 | mov ebp,esp |
2027 | push eax ebx ecx edx edi esi |
2027 | push eax ebx ecx edx edi esi |
2028 | mov edi,dword[ebp+8] |
2028 | mov edi,dword[ebp+8] |
2029 | call tl_get_cur_node_index ;eax=po_t |
2029 | call tl_get_cur_node_index ;eax=po_t |
2030 | cmp eax,2 |
2030 | cmp eax,2 |
2031 | jl @f |
2031 | jl @f |
2032 | mov ebx,eax ;copy index of node struct |
2032 | mov ebx,eax ;copy index of node struct |
2033 | mov edx,tl_data_nodes |
2033 | mov edx,tl_data_nodes |
2034 | mov ecx,edx |
2034 | mov ecx,edx |
2035 | add ecx,sizeof.TreeList |
2035 | add ecx,sizeof.TreeList |
2036 | imul eax,sizeof.TreeList |
2036 | imul eax,sizeof.TreeList |
2037 | add eax,edx ;eax = pointer to 2 node struct |
2037 | add eax,edx ;eax = pointer to 2 node struct |
2038 | mov edx,eax ;edx = pointer to 2 node struct |
2038 | mov edx,eax ;edx = pointer to 2 node struct |
2039 | mov esi,eax ;esi = pointer to 2 node struct |
2039 | mov esi,eax ;esi = pointer to 2 node struct |
2040 | call tl_iterat_perv ;edx = pointer to 1 node struct |
2040 | call tl_iterat_perv ;edx = pointer to 1 node struct |
2041 | call tl_get_node_index ;eax = index of 1 node struct |
2041 | call tl_get_node_index ;eax = index of 1 node struct |
2042 | cmp edx,ecx |
2042 | cmp edx,ecx |
2043 | jle @f |
2043 | jle @f |
2044 | cmp dword[edx+8],ebx ;+8 next |
2044 | cmp dword[edx+8],ebx ;+8 next |
2045 | jne .po8 |
2045 | jne .po8 |
2046 | call tl_node_move_po6 ;óçëû èäóò ïîäðÿä ìåíÿåì 6 ññûëîê |
2046 | call tl_node_move_po6 ;óçëû èäóò ïîäðÿä ìåíÿåì 6 ññûëîê |
2047 | jmp .cur_mov |
2047 | jmp .cur_mov |
2048 | .po8: |
2048 | .po8: |
2049 | call tl_node_move_po8 ;óçëû èäóò íå ïîäðÿä ìåíÿåì 8 ññûëîê |
2049 | call tl_node_move_po8 ;óçëû èäóò íå ïîäðÿä ìåíÿåì 8 ññûëîê |
2050 | .cur_mov: |
2050 | .cur_mov: |
2051 | push dword edi |
2051 | push dword edi |
2052 | call tl_cur_perv |
2052 | call tl_cur_perv |
2053 | push dword edi |
2053 | push dword edi |
2054 | call tl_draw |
2054 | call tl_draw |
2055 | @@: |
2055 | @@: |
2056 | pop esi edi edx ecx ebx eax |
2056 | pop esi edi edx ecx ebx eax |
2057 | pop ebp |
2057 | pop ebp |
2058 | ret 4 |
2058 | ret 4 |
2059 | 2059 | ||
2060 | align 4 |
2060 | align 4 |
2061 | tl_node_move_down: ;ïåðåìåùàåì óçåë âíèç |
2061 | tl_node_move_down: ;ïåðåìåùàåì óçåë âíèç |
2062 | push ebp |
2062 | push ebp |
2063 | mov ebp,esp |
2063 | mov ebp,esp |
2064 | push eax ebx ecx edx edi esi |
2064 | push eax ebx ecx edx edi esi |
2065 | mov edi,dword[ebp+8] |
2065 | mov edi,dword[ebp+8] |
2066 | call tl_get_cur_node_index ;eax=po_t |
2066 | call tl_get_cur_node_index ;eax=po_t |
2067 | cmp eax,2 |
2067 | cmp eax,2 |
2068 | jl @f |
2068 | jl @f |
2069 | mov ebx,eax ;copy index of node struct |
2069 | mov ebx,eax ;copy index of node struct |
2070 | mov edx,tl_data_nodes |
2070 | mov edx,tl_data_nodes |
2071 | mov ecx,edx |
2071 | mov ecx,edx |
2072 | add ecx,sizeof.TreeList |
2072 | add ecx,sizeof.TreeList |
2073 | imul eax,sizeof.TreeList |
2073 | imul eax,sizeof.TreeList |
2074 | add eax,edx ;eax = pointer to 1 node struct |
2074 | add eax,edx ;eax = pointer to 1 node struct |
2075 | mov edx,eax ;edx = pointer to 1 node struct |
2075 | mov edx,eax ;edx = pointer to 1 node struct |
2076 | mov esi,eax ;esi = pointer to 1 node struct |
2076 | mov esi,eax ;esi = pointer to 1 node struct |
2077 | call tl_iterat_next ;edx = pointer to 2 node struct |
2077 | call tl_iterat_next ;edx = pointer to 2 node struct |
2078 | call tl_get_node_index ;eax = index of 2 node struct |
2078 | call tl_get_node_index ;eax = index of 2 node struct |
2079 | cmp edx,ecx |
2079 | cmp edx,ecx |
2080 | jle @f |
2080 | jle @f |
2081 | cmp dword[esi+8],eax ;+8 next |
2081 | cmp dword[esi+8],eax ;+8 next |
2082 | jne .po8 |
2082 | jne .po8 |
2083 | xchg eax,ebx ;ìåíÿå ïîðÿäîê ñëåäîâàíèÿ çàìåíÿåìûõ óçëîâ |
2083 | xchg eax,ebx ;ìåíÿå ïîðÿäîê ñëåäîâàíèÿ çàìåíÿåìûõ óçëîâ |
2084 | xchg edx,esi |
2084 | xchg edx,esi |
2085 | call tl_node_move_po6 ;óçëû èäóò ïîäðÿä ìåíÿåì 6 ññûëîê |
2085 | call tl_node_move_po6 ;óçëû èäóò ïîäðÿä ìåíÿåì 6 ññûëîê |
2086 | jmp .cur_mov |
2086 | jmp .cur_mov |
2087 | .po8: ;à òóò ïîðÿäîê ñëåäîâàíèÿ óçëîâ íå ìåíÿåì |
2087 | .po8: ;à òóò ïîðÿäîê ñëåäîâàíèÿ óçëîâ íå ìåíÿåì |
2088 | call tl_node_move_po8 ;óçëû èäóò íå ïîäðÿä ìåíÿåì 8 ññûëîê |
2088 | call tl_node_move_po8 ;óçëû èäóò íå ïîäðÿä ìåíÿåì 8 ññûëîê |
2089 | .cur_mov: |
2089 | .cur_mov: |
2090 | push dword edi |
2090 | push dword edi |
2091 | call tl_cur_next |
2091 | call tl_cur_next |
2092 | push dword edi |
2092 | push dword edi |
2093 | call tl_draw |
2093 | call tl_draw |
2094 | @@: |
2094 | @@: |
2095 | pop esi edi edx ecx ebx eax |
2095 | pop esi edi edx ecx ebx eax |
2096 | pop ebp |
2096 | pop ebp |
2097 | ret 4 |
2097 | ret 4 |
2098 | 2098 | ||
2099 | align 4 |
2099 | align 4 |
2100 | tl_node_move_po6: |
2100 | tl_node_move_po6: |
2101 | mov ecx,edx ;save node pointer |
2101 | mov ecx,edx ;save node pointer |
2102 | call tl_move_perv |
2102 | call tl_move_perv |
2103 | mov dword[edx+8],ebx |
2103 | mov dword[edx+8],ebx |
2104 | 2104 | ||
2105 | mov edx,esi |
2105 | mov edx,esi |
2106 | call tl_move_next |
2106 | call tl_move_next |
2107 | mov dword[edx+4],eax |
2107 | mov dword[edx+4],eax |
2108 | mov edx,ecx ;restore node pointer |
2108 | mov edx,ecx ;restore node pointer |
2109 | 2109 | ||
2110 | ;+4 perv |
2110 | ;+4 perv |
2111 | mov ecx,dword[edx+4] |
2111 | mov ecx,dword[edx+4] |
2112 | mov dword[esi+4],ecx |
2112 | mov dword[esi+4],ecx |
2113 | ;+8 next |
2113 | ;+8 next |
2114 | mov ecx,dword[esi+8] |
2114 | mov ecx,dword[esi+8] |
2115 | mov dword[edx+8],ecx |
2115 | mov dword[edx+8],ecx |
2116 | 2116 | ||
2117 | mov dword[edx+4],ebx |
2117 | mov dword[edx+4],ebx |
2118 | mov dword[esi+8],eax |
2118 | mov dword[esi+8],eax |
2119 | ret |
2119 | ret |
2120 | 2120 | ||
2121 | ;input |
2121 | ;input |
2122 | ;eax = index 1 node struct |
2122 | ;eax = index 1 node struct |
2123 | ;ebx = index 2 node struct |
2123 | ;ebx = index 2 node struct |
2124 | ;edx = pointer 1 node struct |
2124 | ;edx = pointer 1 node struct |
2125 | ;esi = pointer 2 node struct |
2125 | ;esi = pointer 2 node struct |
2126 | ;edi = pointer to 'TreeList' struct |
2126 | ;edi = pointer to 'TreeList' struct |
2127 | ;output: |
2127 | ;output: |
2128 | ;eax = ? |
2128 | ;eax = ? |
2129 | ;ebx = ? |
2129 | ;ebx = ? |
2130 | ;ecx = ? |
2130 | ;ecx = ? |
2131 | align 4 |
2131 | align 4 |
2132 | tl_node_move_po8: |
2132 | tl_node_move_po8: |
2133 | ; push ecx |
2133 | ; push ecx |
2134 | mov ecx,edx ;save node pointer |
2134 | mov ecx,edx ;save node pointer |
2135 | call tl_move_perv |
2135 | call tl_move_perv |
2136 | mov dword[edx+8],ebx |
2136 | mov dword[edx+8],ebx |
2137 | mov edx,ecx |
2137 | mov edx,ecx |
2138 | call tl_move_next |
2138 | call tl_move_next |
2139 | mov dword[edx+4],ebx |
2139 | mov dword[edx+4],ebx |
2140 | mov edx,esi |
2140 | mov edx,esi |
2141 | call tl_move_perv |
2141 | call tl_move_perv |
2142 | mov dword[edx+8],eax |
2142 | mov dword[edx+8],eax |
2143 | mov edx,esi |
2143 | mov edx,esi |
2144 | call tl_move_next |
2144 | call tl_move_next |
2145 | mov dword[edx+4],eax |
2145 | mov dword[edx+4],eax |
2146 | mov edx,ecx ;restore node pointer |
2146 | mov edx,ecx ;restore node pointer |
2147 | ; pop ecx |
2147 | ; pop ecx |
2148 | 2148 | ||
2149 | ;+4 perv |
2149 | ;+4 perv |
2150 | mov eax,dword[edx+4] |
2150 | mov eax,dword[edx+4] |
2151 | mov ebx,dword[esi+4] |
2151 | mov ebx,dword[esi+4] |
2152 | xchg eax,ebx |
2152 | xchg eax,ebx |
2153 | mov dword[edx+4],eax |
2153 | mov dword[edx+4],eax |
2154 | mov dword[esi+4],ebx |
2154 | mov dword[esi+4],ebx |
2155 | ;+8 next |
2155 | ;+8 next |
2156 | mov eax,dword[edx+8] |
2156 | mov eax,dword[edx+8] |
2157 | mov ebx,dword[esi+8] |
2157 | mov ebx,dword[esi+8] |
2158 | xchg eax,ebx |
2158 | xchg eax,ebx |
2159 | mov dword[edx+8],eax |
2159 | mov dword[edx+8],eax |
2160 | mov dword[esi+8],ebx |
2160 | mov dword[esi+8],ebx |
2161 | ret |
2161 | ret |
2162 | 2162 | ||
2163 | ;input: |
2163 | ;input: |
2164 | ; edi = pointer to 'TreeList' struct |
2164 | ; edi = pointer to 'TreeList' struct |
2165 | align 4 |
2165 | align 4 |
2166 | tl_draw_caption_cur_pos: |
2166 | tl_draw_caption_cur_pos: |
2167 | cmp tl_capt_cy,9 ;9 - minimum caption height |
2167 | cmp tl_capt_cy,9 ;9 - minimum caption height |
2168 | jl @f |
2168 | jl @f |
2169 | push eax ebx ecx edx edi esi |
2169 | push eax ebx ecx edx edi esi |
2170 | mov ebx,edi ;calculate cursor position |
2170 | mov ebx,edi ;calculate cursor position |
2171 | mov eax,tl_cur_pos |
2171 | mov eax,tl_cur_pos |
2172 | inc eax |
2172 | inc eax |
2173 | lea edi,[txt_capt_cur] |
2173 | lea edi,[txt_capt_cur] |
2174 | add edi,7 |
2174 | add edi,7 |
2175 | call tl_convert_to_str |
2175 | call tl_convert_to_str |
2176 | mov edi,ebx |
2176 | mov edi,ebx |
2177 | 2177 | ||
2178 | mov eax,4 ;draw text captions |
2178 | mov eax,4 ;draw text captions |
2179 | mov ebx,tl_box_left |
2179 | mov ebx,tl_box_left |
2180 | shl ebx,16 |
2180 | shl ebx,16 |
2181 | add ebx,5*65536+3 |
2181 | add ebx,5*65536+3 |
2182 | add ebx,tl_box_top |
2182 | add ebx,tl_box_top |
2183 | mov ecx,tl_col_txt |
2183 | mov ecx,tl_col_txt |
2184 | or ecx,0xc0000000 ;0x40000000 çàêðàøèâàòü ôîí öâåòîì edi |
2184 | or ecx,0xc0000000 ;0x40000000 çàêðàøèâàòü ôîí öâåòîì edi |
2185 | lea edx,[txt_capt_cur] |
2185 | lea edx,[txt_capt_cur] |
2186 | mov edi,tl_col_zag |
2186 | mov edi,tl_col_zag |
2187 | int 0x40 |
2187 | int 0x40 |
2188 | 2188 | ||
2189 | pop esi edi edx ecx ebx eax |
2189 | pop esi edi edx ecx ebx eax |
2190 | @@: |
2190 | @@: |
2191 | ret |
2191 | ret |
2192 | 2192 | ||
2193 | ;input: |
2193 | ;input: |
2194 | ;dword[ebp+ 8] - memory size |
2194 | ;dword[ebp+ 8] - memory size |
2195 | ;dword[ebp+12] - pointer to memory |
2195 | ;dword[ebp+12] - pointer to memory |
2196 | ;dword[ebp+16] - options: 0 - first element, 1 - add next element |
2196 | ;dword[ebp+16] - options: 0 - first element, 1 - add next element |
2197 | ;dword[ebp+20] - pointer to 'TreeList' struct |
2197 | ;dword[ebp+20] - pointer to 'TreeList' struct |
2198 | ;output: |
2198 | ;output: |
2199 | ;dword[ebp+ 8] - error code |
2199 | ;dword[ebp+ 8] - error code |
2200 | align 4 |
2200 | align 4 |
2201 | tl_save_mem: |
2201 | tl_save_mem: |
2202 | push ebp |
2202 | push ebp |
2203 | mov ebp,esp |
2203 | mov ebp,esp |
2204 | push eax ebx ecx edx edi esi |
2204 | push eax ebx ecx edx edi esi |
2205 | mov esi,dword[ebp+12] |
2205 | mov esi,dword[ebp+12] |
2206 | mov edi,dword[ebp+20] |
2206 | mov edi,dword[ebp+20] |
2207 | 2207 | ||
2208 | cmp dword[ebp+16],0 ;add mode |
2208 | cmp dword[ebp+16],0 ;add mode |
2209 | je @f |
2209 | je @f |
2210 | push dword edi |
2210 | push dword edi |
2211 | push dword esi |
2211 | push dword esi |
2212 | call tl_get_mem_size ;áåðåì ðàçìåð ðàíåå ñîõðàí¸ííûõ äàííûõ |
2212 | call tl_get_mem_size ;áåðåì ðàçìåð ðàíåå ñîõðàí¸ííûõ äàííûõ |
2213 | pop ebx |
2213 | pop ebx |
2214 | add esi,ebx |
2214 | add esi,ebx |
2215 | @@: |
2215 | @@: |
2216 | 2216 | ||
2217 | xor ebx,ebx |
2217 | xor ebx,ebx |
2218 | mov bx,tl_info_size |
2218 | mov bx,tl_info_size |
2219 | 2219 | ||
2220 | call tl_get_node_count_all ;eax = all node count |
2220 | call tl_get_node_count_all ;eax = all node count |
2221 | 2221 | ||
2222 | mov ecx,eax ;âû÷èñëÿåì ñêîëüêî ïàìÿòè äîëæíî áûòü çàïîëíåíî |
2222 | mov ecx,eax ;âû÷èñëÿåì ñêîëüêî ïàìÿòè äîëæíî áûòü çàïîëíåíî |
2223 | imul ecx,ebx ;óìíîæàåì íà ðàçìåð ñòðóêòóðû óçëà |
2223 | imul ecx,ebx ;óìíîæàåì íà ðàçìåð ñòðóêòóðû óçëà |
2224 | add ecx,tl_save_load_heder_size+1 ;element header +1 end element sumbol |
2224 | add ecx,tl_save_load_heder_size+1 ;element header +1 end element sumbol |
2225 | add ecx,esi ;äîáàâëÿåì óêàçàòåëü íà íà÷àëî ïàìÿòè (ñ ó÷åòîì ðàíåå çàïèñàííûõ ñòðóêòóð) |
2225 | add ecx,esi ;äîáàâëÿåì óêàçàòåëü íà íà÷àëî ïàìÿòè (ñ ó÷åòîì ðàíåå çàïèñàííûõ ñòðóêòóð) |
2226 | sub ecx,dword[ebp+12] ;îòíèìàåì óêàçàòåëü íà íà÷àëî ïàìÿòè (áåç ðàíåå çàïèñàííûõ ñòðóêòóð) |
2226 | sub ecx,dword[ebp+12] ;îòíèìàåì óêàçàòåëü íà íà÷àëî ïàìÿòè (áåç ðàíåå çàïèñàííûõ ñòðóêòóð) |
2227 | cmp ecx,dword[ebp+8] ;ecx = element memory size |
2227 | cmp ecx,dword[ebp+8] ;ecx = element memory size |
2228 | jg .err_mem_size |
2228 | jg .err_mem_size |
2229 | 2229 | ||
2230 | ;save tree params (in header) |
2230 | ;save tree params (in header) |
2231 | mov dword[esi],'tree' |
2231 | mov dword[esi],'tree' |
2232 | mov word[esi+4],bx |
2232 | mov word[esi+4],bx |
2233 | mov dword[esi+6],eax ;element count |
2233 | mov dword[esi+6],eax ;element count |
2234 | 2234 | ||
2235 | mov eax,tl_style |
2235 | mov eax,tl_style |
2236 | mov dword[esi+10],eax |
2236 | mov dword[esi+10],eax |
2237 | 2237 | ||
2238 | mov eax,tl_cur_pos |
2238 | mov eax,tl_cur_pos |
2239 | mov dword[esi+14],eax |
2239 | mov dword[esi+14],eax |
2240 | 2240 | ||
2241 | mov ax,tl_info_capt_offs |
2241 | mov ax,tl_info_capt_offs |
2242 | mov word[esi+18],ax |
2242 | mov word[esi+18],ax |
2243 | 2243 | ||
2244 | mov ax,tl_info_capt_len |
2244 | mov ax,tl_info_capt_len |
2245 | mov word[esi+20],ax |
2245 | mov word[esi+20],ax |
2246 | 2246 | ||
2247 | ;copy scroll position |
2247 | ;copy scroll position |
2248 | mov edx,tl_p_scrol |
2248 | mov edx,tl_p_scrol |
2249 | mov eax,dword[edx+24] ;+24 .position |
2249 | mov eax,dword[edx+24] ;+24 .position |
2250 | mov dword[esi+22],eax |
2250 | mov dword[esi+22],eax |
2251 | 2251 | ||
2252 | add esi,tl_save_load_heder_size ;add header size |
2252 | add esi,tl_save_load_heder_size ;add header size |
2253 | 2253 | ||
2254 | ;cycle to nodes |
2254 | ;cycle to nodes |
2255 | mov edx,tl_data_nodes |
2255 | mov edx,tl_data_nodes |
2256 | mov ecx,edx |
2256 | mov ecx,edx |
2257 | add ecx,sizeof.TreeList |
2257 | add ecx,sizeof.TreeList |
2258 | @@: |
2258 | @@: |
2259 | call tl_iterat_next_all |
2259 | call tl_iterat_next_all |
2260 | cmp edx,ecx |
2260 | cmp edx,ecx |
2261 | jle @f |
2261 | jle @f |
2262 | ;save node params |
2262 | ;save node params |
2263 | call tl_get_node_index ;eax = index of pointer [edx] |
2263 | call tl_get_node_index ;eax = index of pointer [edx] |
2264 | mov dword[esi],eax |
2264 | mov dword[esi],eax |
2265 | 2265 | ||
2266 | add esi,4 |
2266 | add esi,4 |
2267 | mov eax,dword[edx] ;eax = (type; lev; clo) |
2267 | mov eax,dword[edx] ;eax = (type; lev; clo) |
2268 | mov dword[esi],eax |
2268 | mov dword[esi],eax |
2269 | add esi,4 |
2269 | add esi,4 |
2270 | 2270 | ||
2271 | push dword edi |
2271 | push dword edi |
2272 | push dword edx |
2272 | push dword edx |
2273 | call tl_node_poi_get_data |
2273 | call tl_node_poi_get_data |
2274 | pop dword eax |
2274 | pop dword eax |
2275 | 2275 | ||
2276 | ;call tl_node_copy_data |
2276 | ;call tl_node_copy_data |
2277 | push ecx edi |
2277 | push ecx edi |
2278 | mov edi,eax |
2278 | mov edi,eax |
2279 | mov ecx,ebx |
2279 | mov ecx,ebx |
2280 | xchg esi,edi |
2280 | xchg esi,edi |
2281 | rep movsb |
2281 | rep movsb |
2282 | mov esi,edi |
2282 | mov esi,edi |
2283 | pop edi ecx |
2283 | pop edi ecx |
2284 | ;add esi,ebx |
2284 | ;add esi,ebx |
2285 | jmp @b |
2285 | jmp @b |
2286 | @@: |
2286 | @@: |
2287 | mov byte[esi],0 ;end of 'treelist' |
2287 | mov byte[esi],0 ;end of 'treelist' |
2288 | mov dword[ebp+20],0 ;return error code |
2288 | mov dword[ebp+20],0 ;return error code |
2289 | jmp @f |
2289 | jmp @f |
2290 | .err_mem_size: |
2290 | .err_mem_size: |
2291 | or dword[ebp+20],tl_err_save_memory_size |
2291 | or dword[ebp+20],tl_err_save_memory_size |
2292 | @@: |
2292 | @@: |
2293 | pop esi edi edx ecx ebx eax |
2293 | pop esi edi edx ecx ebx eax |
2294 | pop ebp |
2294 | pop ebp |
2295 | ret 12 |
2295 | ret 12 |
2296 | 2296 | ||
2297 | ;input: |
2297 | ;input: |
2298 | ;dword[ebp+ 8] - memory size |
2298 | ;dword[ebp+ 8] - memory size |
2299 | ;dword[ebp+12] - pointer to memory |
2299 | ;dword[ebp+12] - pointer to memory |
2300 | ;word[ebp+16] - options: element index |
2300 | ;word[ebp+16] - options: element index |
2301 | ;word[ebp+18] - options: 2*(add mode)+(init mode) |
2301 | ;word[ebp+18] - options: 2*(add mode)+(init mode) |
2302 | ;dword[ebp+20] - pointer to 'TreeList' struct |
2302 | ;dword[ebp+20] - pointer to 'TreeList' struct |
2303 | ;output: |
2303 | ;output: |
2304 | ;dword[ebp+ 8] - error code |
2304 | ;dword[ebp+ 8] - error code |
2305 | align 4 |
2305 | align 4 |
2306 | tl_load_mem: |
2306 | tl_load_mem: |
2307 | push ebp |
2307 | push ebp |
2308 | mov ebp,esp |
2308 | mov ebp,esp |
2309 | push eax ebx ecx edx edi esi |
2309 | push eax ebx ecx edx edi esi |
2310 | mov esi,dword[ebp+12] |
2310 | mov esi,dword[ebp+12] |
2311 | mov edi,dword[ebp+20] |
2311 | mov edi,dword[ebp+20] |
2312 | 2312 | ||
2313 | mov dword[ebp+20],0 ;return error code |
2313 | mov dword[ebp+20],0 ;return error code |
2314 | 2314 | ||
2315 | xor ecx,ecx |
2315 | xor ecx,ecx |
2316 | mov cx,word[ebp+16] |
2316 | mov cx,word[ebp+16] |
2317 | cmp cx,0 ;load in array mode |
2317 | cmp cx,0 ;load in array mode |
2318 | je @f |
2318 | je @f |
2319 | ; push dword edi |
2319 | ; push dword edi |
2320 | ; push dword esi |
2320 | ; push dword esi |
2321 | ; call tl_get_mem_size ;áåðåì ðàçìåð ðàíåå ñîõðàí¸ííûõ äàííûõ |
2321 | ; call tl_get_mem_size ;áåðåì ðàçìåð ðàíåå ñîõðàí¸ííûõ äàííûõ |
2322 | ; pop ebx |
2322 | ; pop ebx |
2323 | ; add esi,ebx |
2323 | ; add esi,ebx |
2324 | .beg_cycle: |
2324 | .beg_cycle: |
2325 | cmp dword[esi],'tree' |
2325 | cmp dword[esi],'tree' |
2326 | jne .no_tree |
2326 | jne .no_tree |
2327 | xor ebx,ebx |
2327 | xor ebx,ebx |
2328 | mov bx,word[esi+4] |
2328 | mov bx,word[esi+4] |
2329 | add bx,8 |
2329 | add bx,8 |
2330 | imul ebx,dword[esi+6] |
2330 | imul ebx,dword[esi+6] |
2331 | add ebx,tl_save_load_heder_size |
2331 | add ebx,tl_save_load_heder_size |
2332 | add esi,ebx |
2332 | add esi,ebx |
2333 | loop .beg_cycle |
2333 | loop .beg_cycle |
2334 | @@: |
2334 | @@: |
2335 | 2335 | ||
2336 | cmp dword[esi],'tree' |
2336 | cmp dword[esi],'tree' |
2337 | jne .no_tree |
2337 | jne .no_tree |
2338 | bt word[ebp+18],1 ;load in add mode |
2338 | bt word[ebp+18],1 ;load in add mode |
2339 | jc @f |
2339 | jc @f |
2340 | push dword edi |
2340 | push dword edi |
2341 | call tl_info_clear |
2341 | call tl_info_clear |
2342 | @@: |
2342 | @@: |
2343 | 2343 | ||
2344 | xor ebx,ebx |
2344 | xor ebx,ebx |
2345 | mov bx,word[esi+4] ;info_size |
2345 | mov bx,word[esi+4] ;info_size |
2346 | cmp bx,tl_info_size |
2346 | cmp bx,tl_info_size |
2347 | je @f |
2347 | je @f |
2348 | or dword[ebp+20],tl_err_load_info_size |
2348 | or dword[ebp+20],tl_err_load_info_size |
2349 | @@: |
2349 | @@: |
2350 | mov ecx,dword[esi+6] ;count nodes |
2350 | mov ecx,dword[esi+6] ;count nodes |
2351 | cmp ecx,1 |
2351 | cmp ecx,1 |
2352 | jl .end_f |
2352 | jl .end_f |
2353 | mov edx,esi ;save header pointer |
2353 | mov edx,esi ;save header pointer |
2354 | add esi,tl_save_load_heder_size |
2354 | add esi,tl_save_load_heder_size |
2355 | 2355 | ||
2356 | @@: |
2356 | @@: |
2357 | ;load node params |
2357 | ;load node params |
2358 | push dword edi |
2358 | push dword edi |
2359 | mov eax,dword[esi+4] |
2359 | mov eax,dword[esi+4] |
2360 | ror eax,16 |
2360 | ror eax,16 |
2361 | push dword eax ;options (type; lev; clo) |
2361 | push dword eax ;options (type; lev; clo) |
2362 | add esi,8 |
2362 | add esi,8 |
2363 | push dword esi |
2363 | push dword esi |
2364 | call tl_node_add |
2364 | call tl_node_add |
2365 | 2365 | ||
2366 | push dword edi |
2366 | push dword edi |
2367 | call tl_cur_next |
2367 | call tl_cur_next |
2368 | ;... |
2368 | ;... |
2369 | add esi,ebx |
2369 | add esi,ebx |
2370 | loop @b |
2370 | loop @b |
2371 | 2371 | ||
2372 | bt word[ebp+18],1 ;load in add mode |
2372 | bt word[ebp+18],1 ;load in add mode |
2373 | jc .no_tree |
2373 | jc .no_tree |
2374 | mov eax,dword[edx+14] ;set cursor pos |
2374 | mov eax,dword[edx+14] ;set cursor pos |
2375 | mov tl_cur_pos,eax |
2375 | mov tl_cur_pos,eax |
2376 | mov eax,dword[edx+22] ;set scroll pos |
2376 | mov eax,dword[edx+22] ;set scroll pos |
2377 | mov ebx,tl_p_scrol |
2377 | mov ebx,tl_p_scrol |
2378 | cmp ebx,0 |
2378 | cmp ebx,0 |
2379 | je .end_f |
2379 | je .end_f |
2380 | mov dword[ebx+24],eax ;+24 .position |
2380 | mov dword[ebx+24],eax ;+24 .position |
2381 | push dword ebx ;pointer to scroll struct |
2381 | push dword ebx ;pointer to scroll struct |
2382 | call scroll_bar_vertical.draw |
2382 | call scroll_bar_vertical.draw |
2383 | 2383 | ||
2384 | jmp .end_f |
2384 | jmp .end_f |
2385 | .no_tree: |
2385 | .no_tree: |
2386 | mov dword[ebp+20],tl_err_load_caption |
2386 | mov dword[ebp+20],tl_err_load_caption |
2387 | .end_f: |
2387 | .end_f: |
2388 | pop esi edi edx ecx ebx eax |
2388 | pop esi edi edx ecx ebx eax |
2389 | pop ebp |
2389 | pop ebp |
2390 | ret 12 |
2390 | ret 12 |
2391 | 2391 | ||
2392 | ;input: |
2392 | ;input: |
2393 | ;dword[ebp+ 8] - pointer to memory |
2393 | ;dword[ebp+ 8] - pointer to memory |
2394 | ;dword[ebp+12] - pointer to 'TreeList' struct |
2394 | ;dword[ebp+12] - pointer to 'TreeList' struct |
2395 | ;output: |
2395 | ;output: |
2396 | ;dword[ebp+ 8] - error code |
2396 | ;dword[ebp+ 8] - error code |
2397 | align 4 |
2397 | align 4 |
2398 | tl_get_mem_size: ;áåðåò ðàçìåð ïàìÿòè çàíÿòîé ôóíêöèåé tl_save_mem ïðè ñîõðàíåíèè ýëåìåíòîâ |
2398 | tl_get_mem_size: ;áåðåò ðàçìåð ïàìÿòè çàíÿòîé ôóíêöèåé tl_save_mem ïðè ñîõðàíåíèè ýëåìåíòîâ |
2399 | push ebp |
2399 | push ebp |
2400 | mov ebp,esp |
2400 | mov ebp,esp |
2401 | push ebx edi esi |
2401 | push ebx edi esi |
2402 | mov esi,dword[ebp+ 8] |
2402 | mov esi,dword[ebp+ 8] |
2403 | mov edi,dword[ebp+12] |
2403 | mov edi,dword[ebp+12] |
2404 | @@: |
2404 | @@: |
2405 | cmp dword[esi],'tree' |
2405 | cmp dword[esi],'tree' |
2406 | jne @f |
2406 | jne @f |
2407 | xor ebx,ebx |
2407 | xor ebx,ebx |
2408 | mov bx,word[esi+4] |
2408 | mov bx,word[esi+4] |
2409 | add bx,8 ;ðàçìåð äîïîëíèòåëüíîé èíôîðìàöèè îá óçëå (èíäåêñ çàïèñè; èíäåêñ èêîíêè, óðîâåíü, ...) |
2409 | add bx,8 ;ðàçìåð äîïîëíèòåëüíîé èíôîðìàöèè îá óçëå (èíäåêñ çàïèñè; èíäåêñ èêîíêè, óðîâåíü, ...) |
2410 | imul ebx,dword[esi+6] |
2410 | imul ebx,dword[esi+6] |
2411 | add ebx,tl_save_load_heder_size |
2411 | add ebx,tl_save_load_heder_size |
2412 | add esi,ebx |
2412 | add esi,ebx |
2413 | jmp @b |
2413 | jmp @b |
2414 | @@: |
2414 | @@: |
2415 | sub esi,dword[ebp+ 8] |
2415 | sub esi,dword[ebp+ 8] |
2416 | mov dword[ebp+12],esi ;âîçâðàùàåì ðàçìåð áëîêà ïàìÿòè |
2416 | mov dword[ebp+12],esi ;âîçâðàùàåì ðàçìåð áëîêà ïàìÿòè |
2417 | pop esi edi edx |
2417 | pop esi edi edx |
2418 | pop ebp |
2418 | pop ebp |
2419 | ret 4 |
2419 | ret 4 |
2420 | 2420 | ||
2421 | 2421 | ||
2422 | ;ascii scan key |
2422 | ;ascii scan key |
2423 | ; 13 28 Enter |
2423 | ; 13 28 Enter |
2424 | ; 32 57 Space |
2424 | ; 32 57 Space |
2425 | ; 178 72 Up |
2425 | ; 178 72 Up |
2426 | ; 177 80 Down |
2426 | ; 177 80 Down |
2427 | ; 176 75 Left |
2427 | ; 176 75 Left |
2428 | ; 179 77 Right |
2428 | ; 179 77 Right |
2429 | ; 182 83 Delete |
2429 | ; 182 83 Delete |
2430 | ; 184 73 Pg Up |
2430 | ; 184 73 Pg Up |
2431 | ; 183 81 Pg Dn |
2431 | ; 183 81 Pg Dn |
2432 | 2432 | ||
2433 | tl_key_ascii db 13,32,178,177,176,179,182,184,183 |
2433 | tl_key_ascii db 13,32,178,177,176,179,182,184,183 |
2434 | tl_key_scan db 28,57, 72, 80, 75, 77, 83, 73, 81 |
2434 | tl_key_scan db 28,57, 72, 80, 75, 77, 83, 73, 81 |
2435 | 2435 | ||
2436 | txt_capt_cur db 'âப ',0 |
2436 | txt_capt_cur db 'âப ',0 |
2437 | txt_capt_otm db '⬥ë ',0 |
2437 | txt_capt_otm db '⬥ë ',0 |
2438 | 2438 | ||
2439 | ;ýòîò êîä íå ìîé, îí ïðåîáðàçóåò ÷èñëî â ñòðîêó |
2439 | ;ýòîò êîä íå ìîé, îí ïðåîáðàçóåò ÷èñëî â ñòðîêó |
2440 | ;input: |
2440 | ;input: |
2441 | ; eax = value |
2441 | ; eax = value |
2442 | ; edi = string buffer |
2442 | ; edi = string buffer |
2443 | align 4 |
2443 | align 4 |
2444 | tl_convert_to_str: |
2444 | tl_convert_to_str: |
2445 | pushad |
2445 | pushad |
2446 | mov dword[edi+1],0x20202020 |
2446 | mov dword[edi+1],0x20202020 |
2447 | call .str |
2447 | call .str |
2448 | popad |
2448 | popad |
2449 | ret |
2449 | ret |
2450 | 2450 | ||
2451 | align 4 |
2451 | align 4 |
2452 | .str: |
2452 | .str: |
2453 | mov ecx,0x0a ;çàäàåòñÿ ñèñòåìà ñ÷èñëåíèÿ èçìåíÿþòñÿ ðåãèñòðû ebx,eax,ecx,edx âõîäíûå ïàðàìåòðû eax - ÷èñëî |
2453 | mov ecx,0x0a ;çàäàåòñÿ ñèñòåìà ñ÷èñëåíèÿ èçìåíÿþòñÿ ðåãèñòðû ebx,eax,ecx,edx âõîäíûå ïàðàìåòðû eax - ÷èñëî |
2454 | ;ïðåðåâîä ÷èñëà â ASCII ñòðîêó âçîäíûå äàííûå ecx=ñèñòåìà ñ÷èñëåíÿ edi àäðåñ êóäà çàïèñûâàòü, áóäåì ñòðîêó, ïðè÷åì êîíåö ïåðåìåííîé |
2454 | ;ïðåðåâîä ÷èñëà â ASCII ñòðîêó âçîäíûå äàííûå ecx=ñèñòåìà ñ÷èñëåíÿ edi àäðåñ êóäà çàïèñûâàòü, áóäåì ñòðîêó, ïðè÷åì êîíåö ïåðåìåííîé |
2455 | cmp eax,ecx ;ñðàâíèòü åñëè â eax ìåíüøå ÷åì â ecx òî ïåðåéòè íà @@-1 ò.å. íà pop eax |
2455 | cmp eax,ecx ;ñðàâíèòü åñëè â eax ìåíüøå ÷åì â ecx òî ïåðåéòè íà @@-1 ò.å. íà pop eax |
2456 | jb @f |
2456 | jb @f |
2457 | xor edx,edx ;î÷èñòèòü edx |
2457 | xor edx,edx ;î÷èñòèòü edx |
2458 | div ecx ;ðàçäåëèòü - îñòàòîê â edx |
2458 | div ecx ;ðàçäåëèòü - îñòàòîê â edx |
2459 | push edx ;ïîëîæèòü â ñòåê |
2459 | push edx ;ïîëîæèòü â ñòåê |
2460 | ;dec edi ;ñìåùåíèå íåîáõîäèìîå äëÿ çàïèñè ñ êîíöà ñòðîêè |
2460 | ;dec edi ;ñìåùåíèå íåîáõîäèìîå äëÿ çàïèñè ñ êîíöà ñòðîêè |
2461 | call .str;ïåðåéòè íà ñàìó ñåáÿ ò.å. âûçâàòü ñàìó ñåáÿ è òàê äî òîãî ìîìåíòà ïîêà â eax íå ñòàíåò ìåíüøå ÷åì â ecx |
2461 | call .str;ïåðåéòè íà ñàìó ñåáÿ ò.å. âûçâàòü ñàìó ñåáÿ è òàê äî òîãî ìîìåíòà ïîêà â eax íå ñòàíåò ìåíüøå ÷åì â ecx |
2462 | pop eax |
2462 | pop eax |
2463 | @@: ;cmp al,10 ;ïðîâåðèòü íå ìåíüøå ëè çíà÷åíèå â al ÷åì 10 (äëÿ ñèñòåìû ñ÷èñëåíÿ 10 äàííàÿ êîìàíäà - ëèøíàÿ)) |
2463 | @@: ;cmp al,10 ;ïðîâåðèòü íå ìåíüøå ëè çíà÷åíèå â al ÷åì 10 (äëÿ ñèñòåìû ñ÷èñëåíÿ 10 äàííàÿ êîìàíäà - ëèøíàÿ)) |
2464 | ;sbb al,$69 ;- ÷åñòíî äàííàÿ èíñòðóêöèÿ ìåíÿ çàñòàâëÿåò çàäóìàòüñÿ ò.å. ÿ íå çíàþ êàê ýòî ðàáîòàåò |
2464 | ;sbb al,$69 ;- ÷åñòíî äàííàÿ èíñòðóêöèÿ ìåíÿ çàñòàâëÿåò çàäóìàòüñÿ ò.å. ÿ íå çíàþ êàê ýòî ðàáîòàåò |
2465 | ;das ;ïîñëå äàííîé êîìàíäû êàê áû ïðîèñõîäèò óìåíüøåíèå al íà 66h (â êíèãå íàïèñàíî äðóãîå) |
2465 | ;das ;ïîñëå äàííîé êîìàíäû êàê áû ïðîèñõîäèò óìåíüøåíèå al íà 66h (â êíèãå íàïèñàíî äðóãîå) |
2466 | or al,0x30 ;äàííàÿ êîìàíäà êîðî÷å ÷åì äâå âûøå |
2466 | or al,0x30 ;äàííàÿ êîìàíäà êîðî÷å ÷åì äâå âûøå |
2467 | stosb ;çàïèñàòü ýëåìåíò èç ðåãèñòðà al â ÿ÷åêó ïàìÿòè es:edi |
2467 | stosb ;çàïèñàòü ýëåìåíò èç ðåãèñòðà al â ÿ÷åêó ïàìÿòè es:edi |
2468 | ret ;âåðíóòüñÿ ÷åíü èíòåðåñíûé õîä ò.ê. ïîêà â ñòåêå õðàíèòüñÿ êîë-âî âûçîâîâ òî ñòîëüêî ðàç ìû è áóäåì âûçûâàòüñÿ |
2468 | ret ;âåðíóòüñÿ ÷åíü èíòåðåñíûé õîä ò.ê. ïîêà â ñòåêå õðàíèòüñÿ êîë-âî âûçîâîâ òî ñòîëüêî ðàç ìû è áóäåì âûçûâàòüñÿ |
2469 | } |
2469 | } |
2470 | >=>=ch_tim> |
2470 | >=>=ch_tim> |