Subversion Repositories Kolibri OS

Rev

Rev 5879 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 5879 Rev 5911
Line 1... Line 1...
1
; ìàêðîñ äëÿ ñèñòåìíîé áèáëèîòåêè box_lib.obj
1
; ¬ ªà®á ¤«ï á¨á⥬­®© ¡¨¡«¨®â¥ª¨ box_lib.obj
2
; ýëåìåíò TreeList äëÿ Kolibri OS
2
; í«¥¬¥­â TreeList ¤«ï Kolibri OS
3
; ôàéë ïîñëåäíèé ðàç èçìåíÿëñÿ 04.11.2015 IgorA
3
; ä ©« ¯®á«¥¤­¨© à § ¨§¬¥­ï«áï 10.11.2015 IgorA
4
; íà êîä ïðèìåíåíà GPL2 ëèöåíçèÿ
4
; ­  ª®¤ ¯à¨¬¥­¥­  GPL2 «¨æ¥­§¨ï
Line 5... Line 5...
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 ¢à¥¬. ᮧ¤ ­¨ï
Line 15... Line 15...
15
;  td dd ?   ;+16 âðåì. óäàëåíèÿ
15
;  td dd ?   ;+16 ¢à¥¬. 㤠«¥­¨ï
16
;ends
16
;ends
Line 17... Line 17...
17
 
17
 
18
macro use_tree_list
18
macro use_tree_list
19
{
19
{
20
 
20
 
Line 21... Line 21...
21
;âûäåëíèå ïàìÿòè äëÿ ñòðóêòóð ñïèñêà è îñíîâíîé èíôîðìàöèè (êîíñòðóêòîð)
21
;¢ë¤¥«­¨¥ ¯ ¬ï⨠¤«ï áâàãªâãà ᯨ᪠ ¨ ®á­®¢­®© ¨­ä®à¬ æ¨¨ (ª®­áâàãªâ®à)
22
align 4
22
align 4
23
proc tl_data_init uses eax ecx edi, tlist:dword
23
proc tl_data_init uses eax ecx edi, tlist:dword
24
	mov edi,dword[tlist]
24
	mov edi,dword[tlist]
25
 
25
 
26
	xor ecx,ecx
26
	xor ecx,ecx
27
	mov cx,tl_info_size
27
	mov cx,tl_info_size
Line 28... Line 28...
28
	imul ecx,tl_info_max_count
28
	imul ecx,tl_info_max_count
29
	invoke mem.alloc,ecx
29
	invoke mem.alloc,ecx
30
	mov tl_data_info,eax ;êîïèðóåì óêàçàòåëü íà ïîëó÷åíóþ ïàìÿòü â ñòðóêòóðó
30
	mov tl_data_info,eax ;ª®¯¨à㥬 㪠§ â¥«ì ­  ¯®«ã祭ãî ¯ ¬ïâì ¢ áâàãªâãàã
31
	mov tl_data_img,0  ;îáíóëÿåì óêàçàòåëü 'data_img'
31
	mov tl_data_img,0  ;®¡­ã«ï¥¬ 㪠§ â¥«ì 'data_img'
Line 32... Line 32...
32
	mov tl_data_img_sys,0 ;îáíóëÿåì óêàçàòåëü 'data_img_sys'
32
	mov tl_data_img_sys,0 ;®¡­ã«ï¥¬ 㪠§ â¥«ì 'data_img_sys'
Line 33... Line 33...
33
 
33
 
34
	mov ecx,sizeof.TreeList
34
	mov ecx,sizeof.TreeList
35
	imul ecx,tl_info_max_count
35
	imul ecx,tl_info_max_count
36
	invoke mem.alloc,ecx
36
	invoke mem.alloc,ecx
37
	mov tl_data_nodes,eax ;êîïèðóåì óêàçàòåëü íà ïîëó÷åíóþ ïàìÿòü â ñòðóêòóðó
37
	mov tl_data_nodes,eax ;ª®¯¨à㥬 㪠§ â¥«ì ­  ¯®«ã祭ãî ¯ ¬ïâì ¢ áâàãªâãàã
38
 
38
 
39
	stdcall tl_info_clear, edi
39
	stdcall tl_info_clear, edi
40
 
40
 
41
	;íàñòðîéêè äî÷åðíåãî ñêðîëëèíãà
41
	;­ áâனª¨ ¤®ç¥à­¥£® áªà®««¨­£ 
42
	cmp tl_p_scrol,0
42
	cmp tl_p_scroll,0
43
	je @f
43
	je @f
44
		mov eax,tl_p_scrol
44
		mov eax,tl_p_scroll
45
		;*** öâåòîâûå íàñòðîéêè ***
45
		;*** æ¢¥â®¢ë¥ ­ áâனª¨ ***
46
		mov ecx,tl_col_bkg
46
		mov ecx,tl_col_bkg
47
		mov dword[eax+sb_offs_bckg_col],ecx
47
		mov dword[eax+sb_offs_bckg_col],ecx
48
		mov ecx,tl_col_zag
48
		mov ecx,tl_col_zag
49
		mov dword[eax+sb_offs_frnt_col],ecx
49
		mov dword[eax+sb_offs_frnt_col],ecx
Line 59... Line 59...
59
		mov word[eax+6],cx
59
		mov word[eax+6],cx
60
	@@:
60
	@@:
61
	ret
61
	ret
62
endp
62
endp
Line 63... Line 63...
63
 
63
 
64
;î÷èñòêà ïàìÿòè ýëåìåíòà (äåñòðóêòîð)
64
;®ç¨á⪠ ¯ ¬ïâ¨ í«¥¬¥­â  (¤¥áâàãªâ®à)
65
align 4
65
align 4
66
proc tl_data_clear uses edi, tlist:dword
66
proc tl_data_clear uses edi, tlist:dword
67
;uses eax ???
67
;uses eax ???
68
	mov edi,dword[tlist]
68
	mov edi,dword[tlist]
69
	cmp tl_data_img,0
69
	cmp tl_data_img,0
70
	je @f
70
	je @f
71
		invoke mem.free,tl_data_img ;÷èñòêà ñèñòåìíûõ èêîíîê
71
		invoke mem.free,tl_data_img ;ç¨á⪠ á¨á⥬­ëå ¨ª®­®ª
72
	@@:
72
	@@:
73
	cmp tl_data_img_sys,0
73
	cmp tl_data_img_sys,0
74
	je @f
74
	je @f
75
		invoke mem.free,tl_data_img_sys ;÷èñòêà ñèñòåìíûõ èêîíîê
75
		invoke mem.free,tl_data_img_sys ;ç¨á⪠ á¨á⥬­ëå ¨ª®­®ª
76
	@@:
76
	@@:
77
	invoke mem.free,tl_data_info
77
	invoke mem.free,tl_data_info
78
	invoke mem.free,tl_data_nodes
78
	invoke mem.free,tl_data_nodes
79
	ret
79
	ret
Line 80... Line 80...
80
endp
80
endp
81
 
81
 
82
;î÷èñòêà ñïèñêà (èíôîðìàöèè)
82
;®ç¨á⪠ ᯨ᪠ (¨­ä®à¬ æ¨¨)
83
align 4
83
align 4
84
proc tl_info_clear uses eax ecx edi, tlist:dword
84
proc tl_info_clear uses eax ecx edi, tlist:dword
85
	mov edi,dword[tlist]
-
 
86
	mov tl_ch_tim,0
85
	mov edi,dword[tlist]
87
	mov dword[edi+34],0 ;ls_tim
86
	mov tl_ch_tim,0
88
	mov tl_tim_undo,0
87
	mov tl_tim_undo,0
89
	mov tl_cur_pos,0
88
	mov tl_cur_pos,0
90
	mov ecx,sizeof.TreeList
89
	mov ecx,sizeof.TreeList
91
	imul ecx,tl_info_max_count
90
	imul ecx,tl_info_max_count
92
	mov eax,tl_data_nodes
91
	mov eax,tl_data_nodes
93
	@@:
92
	@@:
94
		mov byte[eax],0 ;÷èñòèì óçëû 0-ìè
93
		mov byte[eax],0 ;ç¨á⨬ 㧫ë 0-¬¨
95
		inc eax
94
		inc eax
96
		loop @b
95
		loop @b
Line 97... Line 96...
97
	mov eax,tl_data_nodes ;óêàçàòåëü íà 0-é óçåë
96
	mov eax,tl_data_nodes ;㪠§ â¥«ì ­  0-© 㧥«
98
	mov dword[eax+8],1 ;óêàçàòåëü next â 0-ì óçëå ïðèðàâíèâàåì ê 1
97
	mov dword[eax+8],1 ;㪠§ â¥«ì next ¢ 0-¬ 㧫¥ ¯à¨à ¢­¨¢ ¥¬ ª 1
99
 
98
 
100
	cmp tl_p_scrol,0 ;îáðàáîòêà ñêðîëëèíãà
99
	cmp tl_p_scroll,0 ;®¡à ¡®âª  áªà®««¨­£ 
101
	je @f
100
	je @f
102
		mov eax,tl_p_scrol
101
		mov eax,tl_p_scroll
103
		mov dword[eax+sb_offs_position],0
102
		mov dword[eax+sb_offs_position],0
104
		call tb_scrol_resize
103
		call tb_scrol_resize
Line 105... Line 104...
105
	@@:
104
	@@:
106
	ret
105
	ret
107
endp
106
endp
108
 
107
 
Line 109... Line 108...
109
;ðåàêöèÿ íà êëàâèàòóðó
108
;ॠªæ¨ï ­  ª« ¢¨ âãàã
110
align 4
109
align 4
111
proc tl_key uses ebx ecx edi, tlist:dword
110
proc tl_key uses ebx ecx edi, tlist:dword
Line 112... Line 111...
112
	mov edi,dword[tlist]
111
	mov edi,dword[tlist]
113
 
112
 
Line 114... Line 113...
114
	mov ebx,tl_el_focus
113
	mov ebx,tl_el_focus
115
	cmp dword[ebx],edi
114
	cmp dword[ebx],edi
116
	jne .no_focus ;ýëåìåíò íå â ôîêóñå
115
	jne .no_focus ;í«¥¬¥­â ­¥ ¢ 䮪ãá¥
117
 
116
 
118
	push eax
117
	push eax
119
	mcall 66,2 ;ïîëó÷èòü ðåæèì ââîäà ñ êëàâèàòóðû
118
	mcall 66,2 ;¯®«ãç¨âì ०¨¬ ¢¢®¤  á ª« ¢¨ âãàë
Line 177... Line 176...
177
		stdcall tl_draw, edi
176
		stdcall tl_draw, edi
178
	.no_focus:
177
	.no_focus:
179
	ret
178
	ret
180
endp
179
endp
Line 181... Line 180...
181
 
180
 
182
;ðåàêöèÿ íà ìûøü
181
;ॠªæ¨ï ­  ¬ëèì
183
align 4
182
align 4
184
proc tl_mouse, tlist:dword
183
proc tl_mouse, tlist:dword
185
	pushad
184
	pushad
Line 186... Line 185...
186
	mov edi,dword[tlist]
185
	mov edi,dword[tlist]
Line 187... Line 186...
187
 
186
 
188
	mcall 37,1 ;êîîðäèíàòû ìûøè îòíîñèòåëüíî îêíà
187
	mcall 37,1 ;ª®®à¤¨­ âë ¬ëè¨ ®â­®á¨â¥«ì­® ®ª­ 
189
 
188
 
190
	mov ebx,tl_box_left
189
	mov ebx,tl_box_left
Line 191... Line 190...
191
	shl ebx,16
190
	shl ebx,16
192
	cmp eax,ebx ;ëåâàÿ ãðàíèöà îêíà
191
	cmp eax,ebx ;«¥¢ ï £à ­¨æ  ®ª­ 
193
	jl .no_in_wnd ;.test_scroll íå ïðèìåíÿåì
192
	jl .no_in_wnd ;.test_scroll ­¥ ¯à¨¬¥­ï¥¬
194
 
193
 
195
		shr ebx,16
194
		shr ebx,16
Line 196... Line 195...
196
		add ebx,tl_box_width
195
		add ebx,tl_box_width
197
		shl ebx,16
196
		shl ebx,16
198
		cmp eax,ebx ;ïðàâàÿ ãðàíèöà îêíà
197
		cmp eax,ebx ;¯à ¢ ï £à ­¨æ  ®ª­ 
199
		jg .test_scroll
198
		jg .test_scroll
Line 200... Line 199...
200
 
199
 
201
		mov ebx,tl_box_top
200
		mov ebx,tl_box_top
202
		add ebx,tl_box_height
201
		add ebx,tl_box_height
203
		cmp ax,bx ;íèæíÿÿ ãðàíèöà îêíà
202
		cmp ax,bx ;­¨¦­ïï £à ­¨æ  ®ª­ 
Line 204... Line 203...
204
		jg .test_scroll
203
		jg .test_scroll
205
 
204
 
Line 227... Line 226...
227
		sub ax,bx
226
		sub ax,bx
228
		xor edx,edx
227
		xor edx,edx
229
		xor ecx,ecx
228
		xor ecx,ecx
230
		mov cx,tl_img_cy
229
		mov cx,tl_img_cy
231
		div ecx
230
		div ecx
232
		cmp tl_p_scrol,0 ;ó÷èòûâàåì ñêðîëëèíã
231
		cmp tl_p_scroll,0 ;ãç¨â뢠¥¬ áªà®««¨­£
233
		je @f
232
		je @f
234
			mov edx,tl_p_scrol
233
			mov edx,tl_p_scroll
235
			add eax,dword[edx+sb_offs_position] ;äîáàâëÿåì ñêðîëëèíã íà âåðõó
234
			add eax,dword[edx+sb_offs_position] ;¤®¡ ¢«ï¥¬ áªà®««¨­£ ­  ¢¥àåã
236
		@@:
235
		@@:
Line 237... Line 236...
237
 
236
 
238
		mov ecx,eax
237
		mov ecx,eax
239
		call tl_get_node_count ;eax = node count
238
		call tl_get_node_count ;eax = node count
240
		cmp eax,ecx
239
		cmp eax,ecx
241
		jl @f
240
		jl @f
242
			mov eax,ecx ;åñëè êóðñîð íå âûøåë çà ïðåäåëû óçëîâ, âîññòàíàâëèâàåì ñòàðîå çíà÷åíèå eax
241
			mov eax,ecx ;¥á«¨ ªãàá®à ­¥ ¢ë襫 §  ¯à¥¤¥«ë 㧫®¢, ¢®ááâ ­ ¢«¨¢ ¥¬ áâ à®¥ §­ ç¥­¨¥ eax
Line 243... Line 242...
243
		@@:
242
		@@:
244
 
243
 
245
		cmp eax,tl_cur_pos ;åñëè íîâîå çíà÷åíèå êóðñîðà ñîâïàëî ñ ïðåäûäóùèì
244
		cmp eax,tl_cur_pos ;¥á«¨ ­®¢®¥ §­ ç¥­¨¥ ªãàá®à  ᮢ¯ «® á ¯à¥¤ë¤ã騬
246
		je @f ;òî íå ñòèðàåì êóðñîð
245
		je @f ;â® ­¥ áâ¨à ¥¬ ªãàá®à
247
		push esi
246
		push esi
248
			mov esi,tl_box_top
247
			mov esi,tl_box_top
249
			add esi,tl_box_height ;esi = coord bottom border
248
			add esi,tl_box_height ;esi = coord bottom border
250
			call tl_draw_null_cursor ;ñòèðàåì êóðñîð
249
			call tl_draw_null_cursor ;áâ¨à ¥¬ ªãàá®à
Line 251... Line 250...
251
		pop esi
250
		pop esi
Line 252... Line 251...
252
		@@:
251
		@@:
253
 
252
 
254
		mov tl_cur_pos,eax
253
		mov tl_cur_pos,eax
255
 
254
 
256
		; if '+' or '-' press
255
		; if '+' or '-' press
257
		call tl_get_cur_node_index ;eax = node index
256
		call tl_get_cur_node_index ;eax = node index
258
		cmp eax,2
257
		cmp eax,2
259
		jl .no_open_close ;êóðñîð ñòîèò íà ïóñòîì ìåñòå, áåç óçëîâ
258
		jl .no_open_close ;ªãàá®à á⮨⠭  ¯ãá⮬ ¬¥áâ¥, ¡¥§ 㧫®¢
260
		imul eax,sizeof.TreeList
259
		imul eax,sizeof.TreeList
Line 261... Line 260...
261
		add eax,tl_data_nodes
260
		add eax,tl_data_nodes
262
		xor bx,bx
261
		xor bx,bx
263
		mov bl,byte[eax+2] ;+2 lev ñîõðàíÿåì óðîâåíü òåêóùåãî óçëà
262
		mov bl,byte[eax+2] ;+2 lev á®å࠭塞 ã஢¥­ì ⥪ã饣® 㧫 
264
		inc bx ;+ ïîëå äëÿ êóðñîðà
263
		inc bx ;+ ¯®«¥ ¤«ï ªãàá®à 
265
 
264
 
266
		cmp si,tl_img_cx
265
		cmp si,tl_img_cx
267
		jl .no_open_close ;ìûøåé ïîïàëè íà ëåâîå ïîëå äëÿ êóðñîðà, ãäå òî÷íî íåò '+' è '-'
266
		jl .no_open_close ;¬ë襩 ¯®¯ «¨ ­  «¥¢®¥ ¯®«¥ ¤«ï ªãàá®à , £¤¥ â®ç­® ­¥â '+' ¨ '-'
Line 277... Line 276...
277
			stdcall tl_node_close_open, edi
276
			stdcall tl_node_close_open, edi
278
		.no_open_close:
277
		.no_open_close:
Line 279... Line 278...
279
 
278
 
280
		mov esi,tl_box_top
279
		mov esi,tl_box_top
281
		add esi,tl_box_height ;esi = coord bottom border
280
		add esi,tl_box_height ;esi = coord bottom border
282
		call tl_draw_cursor ;ïåðåðèñîâêà êóðñîðà
281
		call tl_draw_cursor ;¯¥à¥à¨á®¢ª  ªãàá®à 
283
		call tl_draw_caption_cur_pos
282
		call tl_draw_caption_cur_pos
284
		jmp .no_draw
283
		jmp .no_draw
285
;--- mouse event for children scrollbar ----------------------------------------
284
;--- mouse event for children scrollbar ----------------------------------------
286
.test_scroll:
285
.test_scroll:
287
	mov edx,tl_p_scrol
286
	mov edx,tl_p_scroll
288
	cmp edx,0
287
	cmp edx,0
289
	je .no_in_wnd ;ïîëüçîâàòåëü íå ñîçäàë äî÷åðíåãî ñêðîëëèíãà
288
	je .no_in_wnd ;¯®«ì§®¢ â¥«ì ­¥ ᮧ¤ « ¤®ç¥à­¥£® áªà®««¨­£ 
290
		shr ebx,16
289
		shr ebx,16
291
		add bx,word[edx] ;+0 .size_x
290
		add bx,word[edx] ;+0 .size_x
292
		shl ebx,16
291
		shl ebx,16
293
		cmp eax,ebx ;ïðàâàÿ ãðàíèöà îêíà
292
		cmp eax,ebx ;¯à ¢ ï £à ­¨æ  ®ª­ 
Line 294... Line 293...
294
		jg .no_in_wnd
293
		jg .no_in_wnd
295
 
294
 
296
		mov eax,dword[edx+sb_offs_max_area]
295
		mov eax,dword[edx+sb_offs_max_area]
297
		cmp eax,dword[edx+sb_offs_cur_area]
296
		cmp eax,dword[edx+sb_offs_cur_area]
Line 298... Line 297...
298
		jbe .no_in_wnd ;âñå óçëû ïîïàäàþò â îêíî ñêðîëëèíãà
297
		jbe .no_in_wnd ;¢á¥ ã§«ë ¯®¯ ¤ îâ ¢ ®ª­® áªà®««¨­£ 
299
			stdcall scroll_bar_vertical.mouse, edx ;scrollbar_ver_mouse
298
			stdcall scroll_bar_vertical.mouse, edx ;scrollbar_ver_mouse
300
 
299
 
301
			cmp dword[edx+sb_offs_redraw],0
300
			cmp dword[edx+sb_offs_redraw],0
302
			je  @f
301
			je  @f
303
				mov dword[edx+sb_offs_redraw],0
302
				mov dword[edx+sb_offs_redraw],0
304
				stdcall tl_draw, edi ;ïðîèçîøëè èçìåíåíèÿ ñêðîëëèíãà
303
				stdcall tl_draw, edi ;¯à®¨§®è«¨ ¨§¬¥­¥­¨ï áªà®««¨­£ 
305
			@@:
304
			@@:
306
			cmp dword[edx+sb_offs_delta2],0
305
			cmp dword[edx+sb_offs_delta2],0
307
			jne .no_draw ;ïîïàëè íà ñêðîëëèíã - íå ñíèìàåì ôîêóñ ñ TreeList
306
			jne .no_draw ;¯®¯ «¨ ­  áªà®««¨­£ - ­¥ á­¨¬ ¥¬ 䮪ãá á TreeList
308
;-------------------------------------------------------------------------------
307
;-------------------------------------------------------------------------------
309
	.no_in_wnd:  ;íå ïîïàëè â îêíî - ïîòåðÿ ôîêóñà (ïðè óñëîâèè ÷òî ôîêóñ áûë íà äàííîì ýåëåìåíòå)
308
	.no_in_wnd:  ;­¥ ¯®¯ «¨ ¢ ®ª­® - ¯®â¥àï 䮪ãá  (¯à¨ ãá«®¢¨¨ ç⮠䮪ãá ¡ë« ­  ¤ ­­®¬ í¥«¥¬¥­â¥)
Line 310... Line 309...
310
	mcall 37,2 ;ïðîâåðÿåì íàæàòîñòü ëþáûõ êíîïîê
309
	mcall 37,2 ;¯à®¢¥à塞 ­ ¦ â®áâì «î¡ëå ª­®¯®ª
311
	cmp eax,0  ;íè÷åãî íå íàæàëè eax=0
310
	cmp eax,0  ;­¨ç¥£® ­¥ ­ ¦ «¨ eax=0
312
	je .no_draw
311
	je .no_draw
313
 
312
 
314
		mov ebx,tl_el_focus
313
		mov ebx,tl_el_focus
315
		cmp dword[ebx],edi
314
		cmp dword[ebx],edi
316
		jne .no_draw ;ýëåìåíò íå â ôîêóñå
315
		jne .no_draw ;í«¥¬¥­â ­¥ ¢ 䮪ãá¥
317
			mov dword[ebx],0 ;reset focus
316
			mov dword[ebx],0 ;reset focus
Line 318... Line 317...
318
			mov esi,tl_box_top
317
			mov esi,tl_box_top
319
			add esi,tl_box_height ;esi = coord bottom border
318
			add esi,tl_box_height ;esi = coord bottom border
320
			call tl_draw_cursor ;ðèñóåì êóðñîð ñ ïîòåðÿíûì ôîêóñîì
319
			call tl_draw_cursor ;à¨á㥬 ªãàá®à á ¯®â¥àï­ë¬ 䮪ãᮬ
Line 321... Line 320...
321
	.no_draw:
320
	.no_draw:
322
 
321
 
323
	popad
322
	popad
324
	ret
323
	ret
325
endp
324
endp
326
 
325
 
327
;îòìåíà äåéñòâèÿ
326
;®â¬¥­  ¤¥©á⢨ï
328
align 4
327
align 4
329
proc tl_info_undo uses eax edi, tlist:dword
328
proc tl_info_undo uses eax edi, tlist:dword
330
	mov edi,dword[tlist]
329
	mov edi,dword[tlist]
331
	mov eax,tl_tim_undo
330
	mov eax,tl_tim_undo
332
	cmp tl_ch_tim,eax
331
	cmp tl_ch_tim,eax
Line 333... Line 332...
333
	jbe @f
332
	jbe @f
334
		inc tl_tim_undo
333
		inc tl_tim_undo
335
		call tb_scrol_resize ;îáðàáîòêà ñêðîëëèíãà
334
		call tb_scrol_resize ;®¡à ¡®âª  áªà®««¨­£ 
336
	@@:
335
	@@:
337
	ret
336
	ret
338
endp
337
endp
339
 
338
 
340
;ïîâòîð äåéñòâèÿ
339
;¯®¢â®à ¤¥©á⢨ï
341
align 4
340
align 4
342
proc tl_info_redo uses edi, tlist:dword
341
proc tl_info_redo uses edi, tlist:dword
343
	mov edi,dword[tlist]
342
	mov edi,dword[tlist]
Line 344... Line 343...
344
	cmp tl_tim_undo,1
343
	cmp tl_tim_undo,1
345
	jl @f
344
	jl @f
346
		dec tl_tim_undo
345
		dec tl_tim_undo
347
		call tb_scrol_resize ;îáðàáîòêà ñêðîëëèíãà
346
		call tb_scrol_resize ;®¡à ¡®âª  áªà®««¨­£ 
348
	@@:
347
	@@:
349
	ret
348
	ret
Line 362... Line 361...
362
  add ecx,sizeof.TreeList
361
  add ecx,sizeof.TreeList
363
  call tl_move_next ;long i=node[0].next;
362
  call tl_move_next ;long i=node[0].next;
364
  mov eax,tl_tim_undo
363
  mov eax,tl_tim_undo
365
  sub tl_ch_tim,eax ;ch_tim-=tim_undo;
364
  sub tl_ch_tim,eax ;ch_tim-=tim_undo;
366
  mov eax,tl_ch_tim
365
  mov eax,tl_ch_tim
367
  cmp [edi+34],eax ;if(ls_tim>ch_tim)
-
 
368
  jle @f
-
 
369
    mov dword[edi+34],0 ;ls_tim=0
-
 
370
  @@:
-
 
371
    cmp edx,ecx
366
    cmp edx,ecx
372
    jle @f
367
    jle @f
Line 373... Line 368...
373
 
368
 
374
    ;if(node[i].tc>ch_tim){ // åñëè ñîçäàíèå ñèìâîëà áûëî îòìåíåíî
369
    ;if(node[i].tc>ch_tim){ // ¥á«¨ ᮧ¤ ­¨¥ ᨬ¢®«  ¡ë«® ®â¬¥­¥­®
375
    cmp dword[edx+12],eax
370
    cmp dword[edx+12],eax
376
    jle .no_u1
371
    jle .no_u1
377
      mov dword[edx+12],0
372
      mov dword[edx+12],0
Line 389... Line 384...
389
      push dword[edx+4] ;node[node[i].next].perv=node[i].perv;
384
      push dword[edx+4] ;node[node[i].next].perv=node[i].perv;
390
      pop dword[ebx+4]
385
      pop dword[ebx+4]
Line 391... Line 386...
391
 
386
 
Line 392... Line 387...
392
    .no_u1:
387
    .no_u1:
393
 
388
 
394
    ;else if(node[i].td>ch_tim) node[i].td=0; // åñëè óäàëåíèå ñèìâîëà áûëî îòìåíåíî
389
    ;else if(node[i].td>ch_tim) node[i].td=0; // ¥á«¨ 㤠«¥­¨¥ ᨬ¢®«  ¡ë«® ®â¬¥­¥­®
395
    cmp dword[edx+16],eax
390
    cmp dword[edx+16],eax
396
    jle .no_u2
391
    jle .no_u2
Line 409... Line 404...
409
  pop edx ecx ebx eax
404
  pop edx ecx ebx eax
410
  .no_work:
405
  .no_work:
Line 411... Line 406...
411
 
406
 
Line 412... Line 407...
412
  ret
407
  ret
413
 
408
 
414
;âûâîä ñïèñêà íà ýêðàí
409
;¢ë¢®¤ ᯨ᪠ ­  íªà ­
415
align 4
410
align 4
416
proc tl_draw, tlist:dword
411
proc tl_draw, tlist:dword
417
    pushad
412
    pushad
Line 471... Line 466...
471
    xor eax,eax
466
    xor eax,eax
472
    mov edx,tl_data_nodes
467
    mov edx,tl_data_nodes
473
    mov ecx,edx
468
    mov ecx,edx
474
    add ecx,sizeof.TreeList
469
    add ecx,sizeof.TreeList
Line 475... Line 470...
475
 
470
 
476
    ;*** ïðîïóñê óçëîâ, êîòîðûå ïðîìîòàíû ñêðîëëèíãîì ***
471
    ;*** ¯à®¯ã᪠㧫®¢, ª®â®àë¥ ¯à®¬®â ­ë áªà®««¨­£®¬ ***
477
    cmp tl_p_scrol,0 ;åñëè åñòü óêàçàòåëü íà ñêðîëëèíã
472
    cmp tl_p_scroll,0 ;¥á«¨ ¥áâì 㪠§ â¥«ì ­  áªà®««¨­£
478
    je .end_c1
473
    je .end_c1
479
    mov esi,tl_p_scrol
474
    mov esi,tl_p_scroll
480
    cmp dword[esi+sb_offs_position],0 ;åñëè ñêðîëëèíã íà âåðõó, âûõîäèì
475
    cmp dword[esi+sb_offs_position],0 ;¥á«¨ áªà®««¨­£ ­  ¢¥àåã, ¢ë室¨¬
481
    je .end_c1
476
    je .end_c1
482
      @@:
477
      @@:
483
	call tl_iterat_next
478
	call tl_iterat_next
484
	cmp edx,ecx
479
	cmp edx,ecx
Line 501... Line 496...
501
      jmp @b
496
      jmp @b
502
    @@:
497
    @@:
Line 503... Line 498...
503
 
498
 
Line 504... Line 499...
504
    call tl_draw_cursor
499
    call tl_draw_cursor
505
 
500
 
506
    mov edi,tl_p_scrol ;ðèñóåì äî÷åðíèé ñêðîëëèíã
501
    mov edi,tl_p_scroll ;à¨á㥬 ¤®ç¥à­¨© áªà®««¨­£
507
    cmp edi,0          ;äëÿ òîãî ÷òî-áû åãî íå ïðèøëîñü ðèñîâàòü â ïîëüçîâàòåëüñêîé ïðîãðàììå
502
    cmp edi,0          ;¤«ï ⮣® çâ®-¡ë ¥£® ­¥ ¯à¨è«®áì à¨á®¢ âì ¢ ¯®«ì§®¢ â¥«ì᪮© ¯à®£à ¬¬¥
Line 508... Line 503...
508
    je .end_draw       ;åñëè íåò ñêðîëëèíãà âûõîäèì
503
    je .end_draw       ;¥á«¨ ­¥â áªà®««¨­£  ¢ë室¨¬
509
    stdcall scroll_bar_vertical.draw, edi
504
    stdcall scroll_bar_vertical.draw, edi
510
 
505
 
511
    .end_draw:
506
    .end_draw:
Line 512... Line 507...
512
    popad
507
    popad
513
  ret
508
  ret
514
endp
509
endp
515
 
510
 
516
;ïåðåõîä íà ñëåäóùèé âèäèìûé óçåë (ïðîïóñêàÿ çàêðûòûå)
511
;¯¥à¥å®¤ ­  á«¥¤ã騩 ¢¨¤¨¬ë© 㧥« (¯à®¯ãáª ï § ªàëâë¥)
517
;input:
512
;input:
Line 535... Line 530...
535
  push eax
530
  push eax
536
  .beg0:
531
  .beg0:
537
    call tl_move_next
532
    call tl_move_next
538
    cmp edx,ecx
533
    cmp edx,ecx
539
    jle @f
534
    jle @f
540
    call tl_node_not_vis ;ïðîïóñê óäàëåííûõ è îòìåíåííûõ
535
    call tl_node_not_vis ;¯à®¯ã᪠㤠«¥­­ëå ¨ ®â¬¥­¥­­ëå
541
    cmp al,1
536
    cmp al,1
542
    je .beg0
537
    je .beg0
543
    cmp bl,byte[edx+2] ;ïðîïóñê çàêðûòûõ
538
    cmp bl,byte[edx+2] ;¯à®¯ã᪠§ ªàëâëå
544
    jl .beg0
539
    jl .beg0
545
  @@:
540
  @@:
546
  pop eax
541
  pop eax
547
  pop bx
542
  pop bx
548
  ret
543
  ret
Line 549... Line 544...
549
 
544
 
550
  .else:
545
  .else:
551
    call tl_move_next
546
    call tl_move_next
552
    cmp edx,ecx
547
    cmp edx,ecx
553
    jle .endif
548
    jle .endif
554
    cmp dword[edx+16],0 ;td = 'time delete' -> ïðîïóñê óäàëåííûõ
549
    cmp dword[edx+16],0 ;td = 'time delete' -> ¯à®¯ã᪠㤠«¥­­ëå
555
    jne .else
550
    jne .else
556
    cmp bl,byte[edx+2] ;ïðîïóñê çàêðûòûõ
551
    cmp bl,byte[edx+2] ;¯à®¯ã᪠§ ªàëâëå
557
    jl .else
552
    jl .else
558
  .endif:
553
  .endif:
559
  pop bx
554
  pop bx
Line 560... Line 555...
560
  ret
555
  ret
561
 
556
 
562
;ïåðåõîä íà ñëåäóùèé âèäèìûé óçåë (è íà çàêðûòûå òîæå)
557
;¯¥à¥å®¤ ­  á«¥¤ã騩 ¢¨¤¨¬ë© 㧥« (¨ ­  § ªàëâë¥ â®¦¥)
563
;input:
558
;input:
564
; ecx = pointer to 1 node struct
559
; ecx = pointer to 1 node struct
565
; edx = pointer to some node struct
560
; edx = pointer to some node struct
Line 589... Line 584...
589
    cmp dword[edx+16],0 ;td -> time delete
584
    cmp dword[edx+16],0 ;td -> time delete
590
    jne .else
585
    jne .else
591
  .endif:
586
  .endif:
592
  ret
587
  ret
Line 593... Line 588...
593
 
588
 
594
;ïåðåõîä íà ïðåäûäóùèé âèäèìûé óçåë (ïðîïóñêàÿ çàêðûòûå)
589
;¯¥à¥å®¤ ­  ¯à¥¤ë¤ã騩 ¢¨¤¨¬ë© 㧥« (¯à®¯ãáª ï § ªàëâë¥)
595
;input:
590
;input:
596
; ecx = pointer to 1 node struct
591
; ecx = pointer to 1 node struct
597
; edx = pointer to some node struct
592
; edx = pointer to some node struct
598
; edi = pointer to 'TreeList' struct
593
; edi = pointer to 'TreeList' struct
Line 604... Line 599...
604
 
599
 
605
  .beg0:
600
  .beg0:
606
    call tl_move_perv
601
    call tl_move_perv
607
    cmp edx,ecx
602
    cmp edx,ecx
608
    jle @f
603
    jle @f
609
    call tl_node_not_vis ;ïðîïóñê óäàëåííûõ è îòìåíåííûõ
604
    call tl_node_not_vis ;¯à®¯ã᪠㤠«¥­­ëå ¨ ®â¬¥­¥­­ëå
610
    cmp al,1
605
    cmp al,1
Line 611... Line 606...
611
    je .beg0
606
    je .beg0
612
 
607
 
613
  .beg1:
608
  .beg1:
614
    call tl_move_perv
609
    call tl_move_perv
615
    cmp edx,ecx
610
    cmp edx,ecx
616
    jle @f
611
    jle @f
Line 617... Line 612...
617
    cmp dword[edx+16],0 ;td = 'time delete' -> ïðîïóñê óäàëåííûõ
612
    cmp dword[edx+16],0 ;td = 'time delete' -> ¯à®¯ã᪠㤠«¥­­ëå
618
    jne .beg1
613
    jne .beg1
619
 
614
 
620
  @@:
615
  @@:
Line 621... Line 616...
621
    call tl_move_max_clo_par
616
    call tl_move_max_clo_par
622
  pop eax
617
  pop eax
623
  ret
618
  ret
624
 
619
 
625
;íàõîäèò ðîäèòåëüñêèé çàêðûòûé óçåë ìàêñèìàëüíîãî óðîâíÿ
620
;­ å®¤¨â த¨â¥«ì᪨© § ªàëâë© ã§¥« ¬ ªá¨¬ «ì­®£® ã஢­ï
626
;input:
621
;input:
Line 632... Line 627...
632
proc tl_move_max_clo_par uses eax ebx
627
proc tl_move_max_clo_par uses eax ebx
633
  mov eax,edx
628
  mov eax,edx
634
  xor ebx,ebx
629
  xor ebx,ebx
635
  .beg:
630
  .beg:
636
    call tl_move_par
631
    call tl_move_par
637
    cmp byte[edx+3],1 ;ðîäèòåëüñêèé óçåë çàêðûò ?
632
    cmp byte[edx+3],1 ;த¨â¥«ì᪨© 㧥« § ªàëâ ?
638
    jne @f
633
    jne @f
639
      mov eax,edx
634
      mov eax,edx
640
    @@:
635
    @@:
641
    cmp ebx,edx
636
    cmp ebx,edx
642
    je .end_f
637
    je .end_f
Line 669... Line 664...
669
  mov edx,dword[edx+4]
664
	mov edx,dword[edx+4]
670
  imul edx,sizeof.TreeList
665
	imul edx,sizeof.TreeList
671
  add edx,tl_data_nodes
666
	add edx,tl_data_nodes
672
  ret
667
	ret
Line 673... Line 668...
673
 
668
 
674
;ïåðåäâèãàåìñÿ íà ðîäèòåëüñêèé óçåë, åñëè òàêîãî íåò, òî îñòàâëÿåì ñòàðîå çíà÷åíèå óêàçàòåëÿ
669
;¯¥à¥¤¢¨£ ¥¬áï ­  த¨â¥«ì᪨© 㧥«, ¥á«¨ â ª®£® ­¥â, â® ®áâ ¢«ï¥¬ áâ à®¥ §­ ç¥­¨¥ 㪠§ â¥«ï
675
;input:
670
;input:
676
; ecx =
671
; ecx =
677
; edx = pointer to some node struct
672
; edx = pointer to some node struct
678
; edi = pointer to 'TreeList' struct
673
; edi = pointer to 'TreeList' struct
679
;output:
674
;output:
680
; edx = pointer to parent node struct
675
; edx = pointer to parent node struct
681
align 4
676
align 4
682
tl_move_par:
677
tl_move_par:
683
	cmp byte[edx+2],0
678
	cmp byte[edx+2],0
684
	je .end_f ;óçåë 0-ãî óðîâíÿ íå ìîæåò áûòü äî÷åðíèì
679
	je .end_f ;㧥« 0-£® ã஢­ï ­¥ ¬®¦¥â ¡ëâì ¤®ç¥à­¨¬
685
	push eax ebx esi
680
	push eax ebx esi
686
	mov esi,edx ;copy node pointer (edx)
681
	mov esi,edx ;copy node pointer (edx)
687
	mov bl,byte[edx+2]
682
	mov bl,byte[edx+2]
688
	@@:
683
	@@:
689
		call tl_move_perv
684
		call tl_move_perv
690
		cmp edx,ecx
685
		cmp edx,ecx
691
		jle @f ;âñå âûøå ñòîÿùèå óçëû íå ðîäèòåëüñêèå
686
		jle @f ;¢á¥ ¢ëè¥ áâ®ï騥 ã§«ë ­¥ த¨â¥«ì᪨¥
692
		call tl_node_not_vis ;ïðîïóñê óäàëåííûõ è îòìåíåííûõ
687
		call tl_node_not_vis ;¯à®¯ã᪠㤠«¥­­ëå ¨ ®â¬¥­¥­­ëå
693
		cmp al,1
688
		cmp al,1
694
		je @b
689
		je @b
695
		cmp byte[edx+2],bl
690
		cmp byte[edx+2],bl
696
		jl .end_0 ;óäà÷íî íàøëè ðîäèòåëüñêèé óçåë
691
		jl .end_0 ;㤠筮 ­ è«¨ த¨â¥«ì᪨© 㧥«
697
		jmp @b
692
		jmp @b
698
	@@:
693
	@@:
699
		mov esi,ebx ;restore node pointer
694
		mov esi,ebx ;restore node pointer
700
	.end_0:
695
	.end_0:
701
	pop esi ebx eax
696
	pop esi ebx eax
702
	.end_f:
697
	.end_f:
Line 703... Line 698...
703
	ret
698
	ret
704
 
699
 
705
;ïðîâåðÿåò âèäèìûé ëè óêàçàííûé óçåë ñ ó÷åòîì: äîáàâëåíèé, óäàëåíèé, îòìåí äåéñòâèé
700
;¯à®¢¥àï¥â ¢¨¤¨¬ë© «¨ 㪠§ ­­ë© 㧥« á ãç¥â®¬: ¤®¡ ¢«¥­¨©, 㤠«¥­¨©, ®â¬¥­ ¤¥©á⢨©
706
;input:
701
;input:
707
; edx = pointer to symbol struct
702
; edx = pointer to symbol struct
708
; edi = pointer to 'TreeList' struct
703
; edi = pointer to 'TreeList' struct
Line 729... Line 724...
729
    ret
724
    ret
730
  @@:
725
  @@:
731
  xor al,al
726
  xor al,al
732
  ret
727
  ret
Line 733... Line 728...
733
 
728
 
734
;ðèñóåì êóðñîð íà ýêðàíå
729
;à¨á㥬 ªãàá®à ­  íªà ­¥
735
;input:
730
;input:
736
; edi = pointer to TreeInfo struct
731
; edi = pointer to TreeInfo struct
737
; esi = coord bottom border
732
; esi = coord bottom border
738
align 4
733
align 4
739
proc tl_draw_cursor uses eax ebx ecx edx esi
734
proc tl_draw_cursor uses eax ebx ecx edx esi
740
	call tl_get_display_cur_pos ;eax = cursor pos in screen
735
	call tl_get_display_cur_pos ;eax = cursor pos in screen
741
	cmp eax,0
736
	cmp eax,0
Line 742... Line 737...
742
	jl .end_f ;êóðñîð íàõîäèòñÿ âûøå îêíà, â îáëàñòè ïðîêðó÷åííîé ñêðîëëèíãîì
737
	jl .end_f ;ªãàá®à ­ å®¤¨âáï ¢ëè¥ ®ª­ , ¢ ®¡« á⨠¯à®ªàã祭­®© áªà®««¨­£®¬
743
 
738
 
744
	cmp tl_data_img_sys,0 ;ñìîòðèì åñòü ëè óêàçàòåëü íà êàðòèíêó ñèñòåìíûõ èêîíîê
739
	cmp tl_data_img_sys,0 ;ᬮâਬ ¥áâì «¨ 㪠§ â¥«ì ­  ª à⨭ªã á¨á⥬­ëå ¨ª®­®ª
745
	jne @f
740
	jne @f
746
		mov ebx,tl_box_left
741
		mov ebx,tl_box_left
747
		shl ebx,16
742
		shl ebx,16
Line 751... Line 746...
751
		imul ecx,eax
746
		imul ecx,eax
752
		add ecx,tl_box_top
747
		add ecx,tl_box_top
753
		add cx,tl_capt_cy
748
		add cx,tl_capt_cy
Line 754... Line 749...
754
 
749
 
755
		;crop image if on the border
750
		;crop image if on the border
756
		cmp esi,ecx ;åñëè êóðñîð âíèçó è åãî âîîáùå íå âèäíî
751
		cmp esi,ecx ;¥á«¨ ªãàá®à ¢­¨§ã ¨ ¥£® ¢®®¡é¥ ­¥ ¢¨¤­®
Line 757... Line 752...
757
		jl .end_f
752
		jl .end_f
758
 
753
 
759
		sub esi,ecx
754
		sub esi,ecx
760
		shl ecx,16
755
		shl ecx,16
761
		mov cx,tl_img_cy
756
		mov cx,tl_img_cy
762
		cmp si,tl_img_cy
757
		cmp si,tl_img_cy
763
		jge .crop0
758
		jge .crop0
Line 764... Line 759...
764
			mov cx,si ;åñëè êóðñîð âèäåí ÷àñòè÷íî (ïîïàë íà íèæíþþ ãðàíèöó)
759
			mov cx,si ;¥á«¨ ªãàá®à ¢¨¤¥­ ç áâ¨ç­® (¯®¯ « ­  ­¨¦­îî £à ­¨æã)
765
		.crop0:
760
		.crop0:
766
 
761
 
767
		mov edx,tl_col_txt
762
		mov edx,tl_col_txt
768
		mcall 13 ;ðèñóåì ïðîñòîé ïðÿìîóãîëüíèê, ò.ê. íåò ñèñòåìíûõ èêîíîê
763
		mcall 13 ;à¨á㥬 ¯à®á⮩ ¯àאַ㣮«ì­¨ª, â.ª. ­¥â á¨á⥬­ëå ¨ª®­®ª
769
		jmp .end_f
764
		jmp .end_f
770
	@@:
765
	@@:
771
	mov ebx,tl_data_img_sys
766
	mov ebx,tl_data_img_sys
772
	imul ax,tl_img_cy
767
	imul ax,tl_img_cy
773
	mov edx,tl_box_left
768
	mov edx,tl_box_left
774
	shl edx,16
769
	shl edx,16
Line 775... Line 770...
775
	mov dx,ax
770
	mov dx,ax
776
	add edx,tl_box_top
771
	add edx,tl_box_top
777
	add dx,tl_capt_cy
772
	add dx,tl_capt_cy
778
 
773
 
779
	mov ecx,tl_el_focus ;ïðîâåðÿåì â ôîêóñå ýëåìåíò èëè íåò
774
	mov ecx,tl_el_focus ;¯à®¢¥à塞 ¢ 䮪ãá¥ í«¥¬¥­â ¨«¨ ­¥â
780
	cmp dword[ecx],edi
775
	cmp dword[ecx],edi
781
	je .focus
776
	je .focus
782
		;åñëè íå â ôîêóñå ñäâèãàåì êîîðäèíàòû íà èêîíêó íå àêòèâíîãî êóðñîðà
777
		;¥á«¨ ­¥ ¢ 䮪ãᥠᤢ¨£ ¥¬ ª®®à¤¨­ âë ­  ¨ª®­ªã ­¥  ªâ¨¢­®£® ªãàá®à 
783
		xor eax,eax
778
		xor eax,eax
Line 792... Line 787...
792
	mov cx,tl_img_cx
787
	mov cx,tl_img_cx
793
	shl ecx,16
788
	shl ecx,16
794
	mov cx,tl_img_cy
789
	mov cx,tl_img_cy
Line 795... Line 790...
795
 
790
 
796
	;crop image if on the border
791
	;crop image if on the border
797
	cmp si,dx ;åñëè êóðñîð âíèçó è åãî âîîáùå íå âèäíî
792
	cmp si,dx ;¥á«¨ ªãàá®à ¢­¨§ã ¨ ¥£® ¢®®¡é¥ ­¥ ¢¨¤­®
Line 798... Line 793...
798
	jl .end_f
793
	jl .end_f
799
 
794
 
800
		sub si,dx
795
		sub si,dx
801
		cmp si,tl_img_cy
796
		cmp si,tl_img_cy
802
		jge .crop1
797
		jge .crop1
Line 803... Line 798...
803
			mov cx,si ;åñëè êóðñîð âèäåí ÷àñòè÷íî (ïîïàë íà íèæíþþ ãðàíèöó)
798
			mov cx,si ;¥á«¨ ªãàá®à ¢¨¤¥­ ç áâ¨ç­® (¯®¯ « ­  ­¨¦­îî £à ­¨æã)
804
		.crop1:
799
		.crop1:
805
 
800
 
806
		mcall 7 ;ðèñóåì èêîíêó êóðñîðà
801
		mcall 7 ;à¨á㥬 ¨ª®­ªã ªãàá®à 
Line 807... Line 802...
807
	.end_f:
802
	.end_f:
808
	ret
803
	ret
809
endp
804
endp
810
 
805
 
811
;ñòèðàåì êóðñîð íà ýêðàíå
806
;áâ¨à ¥¬ ªãàá®à ­  íªà ­¥
812
;input:
807
;input:
813
; edi = pointer to TreeInfo struct
808
; edi = pointer to TreeInfo struct
814
; esi = coord bottom border
809
; esi = coord bottom border
815
align 4
810
align 4
Line 816... Line 811...
816
proc tl_draw_null_cursor uses eax ebx ecx edx esi
811
proc tl_draw_null_cursor uses eax ebx ecx edx esi
817
    call tl_get_display_cur_pos ;eax = cursor pos in screen
812
    call tl_get_display_cur_pos ;eax = cursor pos in screen
818
    cmp eax,0
813
    cmp eax,0
819
    jl .end_f ;êóðñîð íàõîäèòñÿ âûøå îêíà, â îáëàñòè ïðîêðó÷åííîé ñêðîëëèíãîì
814
    jl .end_f ;ªãàá®à ­ å®¤¨âáï ¢ëè¥ ®ª­ , ¢ ®¡« á⨠¯à®ªàã祭­®© áªà®««¨­£®¬
Line 826... Line 821...
826
    imul ecx,eax
821
    imul ecx,eax
827
    add ecx,tl_box_top
822
    add ecx,tl_box_top
828
    add cx,tl_capt_cy
823
    add cx,tl_capt_cy
Line 829... Line 824...
829
 
824
 
830
    ;crop image if on the border
825
    ;crop image if on the border
831
    cmp esi,ecx ;åñëè êóðñîð âíèçó è åãî âîîáùå íå âèäíî
826
    cmp esi,ecx ;¥á«¨ ªãàá®à ¢­¨§ã ¨ ¥£® ¢®®¡é¥ ­¥ ¢¨¤­®
Line 832... Line 827...
832
    jl .end_f
827
    jl .end_f
833
 
828
 
834
    sub esi,ecx
829
    sub esi,ecx
835
    shl ecx,16
830
    shl ecx,16
836
    mov cx,tl_img_cy
831
    mov cx,tl_img_cy
837
    cmp si,tl_img_cy
832
    cmp si,tl_img_cy
838
    jge @f
833
    jge @f
Line 839... Line 834...
839
      mov cx,si ;åñëè êóðñîð âèäåí ÷àñòè÷íî (ïîïàë íà íèæíþþ ãðàíèöó)
834
      mov cx,si ;¥á«¨ ªãàá®à ¢¨¤¥­ ç áâ¨ç­® (¯®¯ « ­  ­¨¦­îî £à ­¨æã)
840
    @@:
835
    @@:
Line 841... Line 836...
841
 
836
 
842
    mov edx,tl_col_bkg
837
    mov edx,tl_col_bkg
843
    mcall 13 ;ðèñóåì ïðîñòîé ïðÿìîóãîëüíèê ñ ôîíîâûì öâåòîì
838
    mcall 13 ;à¨á㥬 ¯à®á⮩ ¯àאַ㣮«ì­¨ª á ä®­®¢ë¬ 梥⮬
Line 844... Line 839...
844
 
839
 
845
    .end_f:
840
    .end_f:
846
  ret
841
  ret
847
endp
842
endp
848
 
843
 
849
;áåðåò ïîçèöèþ êóðñîðà, îòíîñèòåëüíî ýêðàíà
844
;¡¥à¥â ¯®§¨æ¨î ªãàá®à , ®â­®á¨â¥«ì­® íªà ­ 
850
;input:
845
;input:
851
; edi = pointer to TreeInfo struct
846
; edi = pointer to TreeInfo struct
852
;output:
847
;output:
853
; eax = index
848
; eax = index
854
align 4
849
align 4
855
tl_get_display_cur_pos:
850
tl_get_display_cur_pos:
856
   mov eax,tl_cur_pos
851
   mov eax,tl_cur_pos
857
   cmp tl_p_scrol,0
852
   cmp tl_p_scroll,0
858
   je @f
853
   je @f
859
     push ebx
854
     push ebx
860
       mov ebx,tl_p_scrol
855
       mov ebx,tl_p_scroll
Line 861... Line 856...
861
       mov ebx,dword[ebx+sb_offs_position]
856
       mov ebx,dword[ebx+sb_offs_position]
862
       sub eax,ebx ;îòíèìàåì ïîçèöèþ ñêðîëëèíãà
857
       sub eax,ebx ;®â­¨¬ ¥¬ ¯®§¨æ¨î áªà®««¨­£ 
863
     pop ebx
858
     pop ebx
864
  @@:
859
  @@:
865
  ret
860
  ret
866
 
861
 
867
;ðèñóåò óçåë ñ: êàðòèíêîé, ïîäïèñüþ, èêîíêîé îòêðûòèÿ/çàêðûòèÿ è ëèíèÿìè ê ðîäèò. óçëó
862
;à¨áã¥â 㧥« á: ª à⨭ª®©, ¯®¤¯¨áìî, ¨ª®­ª®© ®âªàëâ¨ï/§ ªàëâ¨ï ¨ «¨­¨ï¬¨ ª த¨â. 㧫ã
868
;input:
863
;input:
869
; eax = node position
864
; eax = node position
870
; edx = pointer to some node struct
865
; edx = pointer to some node struct
871
; edi = pointer to 'TreeList' struct
866
; edi = pointer to 'TreeList' struct
872
; esi = coord of bottom border
867
; esi = coord of bottom border
873
align 4
868
align 4
874
proc tl_draw_node uses eax ebx ecx edx esi
869
proc tl_draw_node uses eax ebx ecx edx esi
875
	mov ebx,1 ;1 - ìåñòî ïîä êóðñîð
870
	mov ebx,1 ;1 - ¬¥áâ® ¯®¤ ªãàá®à
876
	bt tl_style,2 ;tl_list_box_mode
871
	bt tl_style,2 ;tl_list_box_mode
Line 877... Line 872...
877
	jc @f
872
	jc @f
Line 888... Line 883...
888
	imul ecx,eax
883
	imul ecx,eax
889
	add ecx,tl_box_top
884
	add ecx,tl_box_top
890
	add cx,tl_capt_cy
885
	add cx,tl_capt_cy
Line 891... Line 886...
891
 
886
 
892
	;crop image if on the border
887
	;crop image if on the border
893
	cmp esi,ecx ;åñëè óçåë âíèçó è åãî âîîáùå íå âèäíî
888
	cmp esi,ecx ;¥á«¨ 㧥« ¢­¨§ã ¨ ¥£® ¢®®¡é¥ ­¥ ¢¨¤­®
Line 894... Line 889...
894
	jl .end_draw
889
	jl .end_draw
895
 
890
 
896
	sub esi,ecx
891
	sub esi,ecx
897
	shl ecx,16
892
	shl ecx,16
898
	mov cx,tl_img_cy
893
	mov cx,tl_img_cy
899
	cmp si,tl_img_cy
894
	cmp si,tl_img_cy
900
	jge @f
895
	jge @f
901
		mov cx,si ;åñëè óçåë âèäåí ÷àñòè÷íî (ïîïàë íà íèæíþþ ãðàíèöó)
896
		mov cx,si ;¥á«¨ 㧥« ¢¨¤¥­ ç áâ¨ç­® (¯®¯ « ­  ­¨¦­îî £à ­¨æã)
902
		jmp .crop ;ïðîïóñêàåì ðèñîâàíèå íàäïèñè, êîòîðàÿ ñêîðåå âñåãî òîæå âûëåçåò çà íèæíþþ ãðàíèöó
897
		jmp .crop ;¯à®¯ã᪠¥¬ à¨á®¢ ­¨¥ ­ ¤¯¨á¨, ª®â®à ï ᪮॥ ¢á¥£® ⮦¥ ¢ë«¥§¥â §  ­¨¦­îî £à ­¨æã
903
	@@:
898
	@@:
904
		call tl_draw_node_caption
899
		call tl_draw_node_caption
Line 939... Line 934...
939
	cmp byte[edx+3],1
934
	cmp byte[edx+3],1
940
	jne .close
935
	jne .close
941
		dec ah
936
		dec ah
942
	.close:
937
	.close:
Line 943... Line 938...
943
 
938
 
944
	call tl_draw_node_icon_opn_clo ;ðèñîâàíèå èêîíêè îòêðûòîãî èëè çàêðûòîãî óçëà
939
	call tl_draw_node_icon_opn_clo ;à¨á®¢ ­¨¥ ¨ª®­ª¨ ®âªàë⮣® ¨«¨ § ªàë⮣® 㧫 
945
	bt tl_style,1
940
	bt tl_style,1
946
	jae .end_draw
941
	jae .end_draw
947
		call tl_draw_node_icon_par_lin ;ðèñîâàíèå ëèíèè ê ðîäèòåëüñêîìó ýëåìåíòó
942
		call tl_draw_node_icon_par_lin ;à¨á®¢ ­¨¥ «¨­¨¨ ª த¨â¥«ì᪮¬ã í«¥¬¥­âã
948
		call tl_draw_node_icon_par_lin_up ;ðèñîâàíèå âåðòèêàëüíîé ëèíèè ê ðîäèòåëüñêîìó ýëåìåíòó
943
		call tl_draw_node_icon_par_lin_up ;à¨á®¢ ­¨¥ ¢¥à⨪ «ì­®© «¨­¨¨ ª த¨â¥«ì᪮¬ã í«¥¬¥­âã
949
	.end_draw:
944
	.end_draw:
950
	ret
945
	ret
Line 951... Line 946...
951
endp
946
endp
952
 
947
 
953
;ðèñóåò èêîíêè îòêðûòîãî èëè çàêðûòîãî óçëà (îáû÷íî + èëè -)
948
;à¨áã¥â ¨ª®­ª¨ ®âªàë⮣® ¨«¨ § ªàë⮣® 㧫  (®¡ëç­® + ¨«¨ -)
954
;input:
949
;input:
955
; al = óðîâåíü ýëåìåíòà
950
; al = ã஢¥­ì í«¥¬¥­â 
956
; ecx = pointer to 1 node struct
951
; ecx = pointer to 1 node struct
957
; edx = pointer to some node struct
952
; edx = pointer to some node struct
958
;...
953
;...
Line 990... Line 985...
990
      mcall 7 ;draw minus icon '-'
985
      mcall 7 ;draw minus icon '-'
991
    @@:
986
    @@:
992
  ret
987
  ret
993
endp
988
endp
Line 994... Line 989...
994
 
989
 
995
;ðèñîâàíèå ëèíèè ê ðîäèòåëüñêîìó ýëåìåíòó
990
;à¨á®¢ ­¨¥ «¨­¨¨ ª த¨â¥«ì᪮¬ã í«¥¬¥­âã
996
;input:
991
;input:
997
; al = óðîâåíü ýëåìåíòà
992
; al = ã஢¥­ì í«¥¬¥­â 
998
; ecx = pointer to 1 node struct
993
; ecx = pointer to 1 node struct
999
; edx = pointer to some node struct
994
; edx = pointer to some node struct
1000
;...
995
;...
1001
align 4
996
align 4
Line 1049... Line 1044...
1049
  .close:
1044
  .close:
1050
  ret
1045
  ret
Line 1051... Line 1046...
1051
 
1046
 
1052
 
1047
 
1053
;input:
1048
;input:
1054
; al = óðîâåíü ýëåìåíòà
1049
; al = ã஢¥­ì í«¥¬¥­â 
1055
; ecx = pointer to 1 node struct
1050
; ecx = pointer to 1 node struct
1056
; edx = pointer to some node struct
1051
; edx = pointer to some node struct
1057
; edi = pointer to 'TreeList' struct
1052
; edi = pointer to 'TreeList' struct
Line 1062... Line 1057...
1062
    cmp tl_data_img_sys,0 ;if not image
1057
    cmp tl_data_img_sys,0 ;if not image
1063
    je @f
1058
    je @f
1064
    cmp al,0
1059
    cmp al,0
1065
    je @f
1060
    je @f
Line 1066... Line 1061...
1066
 
1061
 
1067
    xor esi,esi ;â si áóäåì íàñ÷èòûâàòü êîë-âî èêîíîê, íóæíûõ äëÿ ïðîðèñîâêè ëèíèè
1062
    xor esi,esi ;¢ si ¡ã¤¥¬ ­ áç¨â뢠âì ª®«-¢® ¨ª®­®ª, ­ã¦­ëå ¤«ï ¯à®à¨á®¢ª¨ «¨­¨¨
1068
;--- öèêë äëÿ âû÷èñëåíèÿ êîëëè÷åñòâà âåðòèêàëüíûõ ëèíèé ---
1063
;--- 横« ¤«ï ¢ëç¨á«¥­¨ï ª®««¨ç¥á⢠ ¢¥à⨪ «ì­ëå «¨­¨© ---
1069
    .cycle0:
1064
    .cycle0:
1070
      call tl_iterat_perv ;get perv visible item
1065
      call tl_iterat_perv ;get perv visible item
1071
      cmp edx,ecx
1066
      cmp edx,ecx
Line 1072... Line 1067...
1072
      jle .cycle1 ;if begin of list
1067
      jle .cycle1 ;if begin of list
1073
 
1068
 
1074
      cmp byte[edx+2],al
1069
      cmp byte[edx+2],al
1075
      jle .cycle0end ;óðîâåíü âåðõíåãî ýëåìåíòà íå òðåáóåò ïðîðèñîâêè
1070
      jle .cycle0end ;ã஢¥­ì ¢¥àå­¥£® í«¥¬¥­â  ­¥ âॡã¥â ¯à®à¨á®¢ª¨
1076
      inc si
1071
      inc si
1077
      jmp .cycle0
1072
      jmp .cycle0
1078
    .cycle0end:
1073
    .cycle0end:
1079
      cmp si,0 ;si = êîë-âî èêîíîê ëèíèè êîòîðûå íóæíî íàðèñîâàòü ñâåðõó
1074
      cmp si,0 ;si = ª®«-¢® ¨ª®­®ª «¨­¨¨ ª®â®àë¥ ­ã¦­® ­ à¨á®¢ âì ᢥàåã
Line 1080... Line 1075...
1080
      je @f
1075
      je @f
1081
      shl esi,16
1076
      shl esi,16
Line 1097... Line 1092...
1097
      imul bx,tl_img_cx
1092
      imul bx,tl_img_cx
1098
      imul bx,tl_img_cy
1093
      imul bx,tl_img_cy
1099
      add ebx,tl_data_img_sys
1094
      add ebx,tl_data_img_sys
Line 1100... Line 1095...
1100
 
1095
 
1101
      add esi,tl_box_top
1096
      add esi,tl_box_top
1102
      add si,tl_capt_cy ;si = âåðõíÿÿ ãðàíèöà îêíà
1097
      add si,tl_capt_cy ;si = ¢¥àå­ïï £à ­¨æ  ®ª­ 
1103
      mov eax,7
1098
      mov eax,7
1104
;--- öèêë äëÿ ðèñîâàíèÿ âåðòèêàëüíîé ëèíèè ---
1099
;--- 横« ¤«ï à¨á®¢ ­¨ï ¢¥à⨪ «ì­®© «¨­¨¨ ---
1105
      .cycle1:
1100
      .cycle1:
1106
      sub dx,tl_img_cy ;ïîäíèìàåì êîîðäèíàòó y ââåðõ
1101
      sub dx,tl_img_cy ;¯®¤­¨¬ ¥¬ ª®®à¤¨­ âã y ¢¢¥àå
1107
      cmp dx,si
1102
      cmp dx,si
1108
      jl @f
1103
      jl @f
1109
        cmp esi,0x10000
1104
        cmp esi,0x10000
1110
        jl @f
1105
        jl @f
1111
        int 0x40 ;draw line icon
1106
        int 0x40 ;draw line icon
1112
        sub esi,0x10000 ;óìåíüøàåì ñ÷åò÷èê èêîíîê
1107
        sub esi,0x10000 ;㬥­ìè ¥¬ áç¥â稪 ¨ª®­®ª
1113
      jmp .cycle1
1108
      jmp .cycle1
1114
    @@:
1109
    @@:
1115
  pop esi
1110
  pop esi
1116
  pop edx ecx ebx eax
1111
  pop edx ecx ebx eax
Line 1132... Line 1127...
1132
  pop edx ecx
1127
  pop edx ecx
1133
  ret
1128
  ret
Line 1134... Line 1129...
1134
 
1129
 
1135
;input:
1130
;input:
1136
; eax = node position
1131
; eax = node position
1137
; ebx = [êîîðäèíàòà ïî îñè x]*65536 + [img_cx]
1132
; ebx = [ª®®à¤¨­ â  ¯® ®á¨ x]*65536 + [img_cx]
1138
; ecx = [êîîðäèíàòà ïî îñè y]*65536 + [img_cy]
1133
; ecx = [ª®®à¤¨­ â  ¯® ®á¨ y]*65536 + [img_cy]
1139
; edx = pointer to some node struct
1134
; edx = pointer to some node struct
1140
; edi = pointer to TreeInfo struct
1135
; edi = pointer to TreeInfo struct
1141
align 4
1136
align 4
1142
tl_draw_node_caption:
1137
tl_draw_node_caption:
Line 1154... Line 1149...
1154
      add si,tl_info_capt_offs
1149
      add si,tl_info_capt_offs
1155
      add esi,tl_data_info
1150
      add esi,tl_data_info
1156
      mov edx,esi
1151
      mov edx,esi
Line 1157... Line 1152...
1157
 
1152
 
1158
      shr ebx,16
1153
      shr ebx,16
1159
      add bx,tl_img_cx ;ñäâèãàåì íàäïèñü ïî ãîðèçîíòàëè --->
1154
      add bx,tl_img_cx ;ᤢ¨£ ¥¬ ­ ¤¯¨áì ¯® £®à¨§®­â «¨ --->
1160
      add bx,3 ;îòñòóï
1155
      add bx,3 ;®âáâã¯
1161
      ;bx = coord. x
1156
      ;bx = coord. x
1162
      call tl_strlen ;eax = strlen
1157
      call tl_strlen ;eax = strlen
1163
      call tl_get_draw_text_len
1158
      call tl_get_draw_text_len
1164
      mov cx,bx
1159
      mov cx,bx
1165
      ror ecx,16
1160
      ror ecx,16
1166
      mov ebx,ecx
1161
      mov ebx,ecx
1167
      add bx,tl_img_cy ;âûðàâíèâèíèå ïî íèæíåé ãðàíèöå èêîíêè
1162
      add bx,tl_img_cy ;¢ëà ¢­¨¢¨­¨¥ ¯® ­¨¦­¥© £à ­¨æ¥ ¨ª®­ª¨
1168
      sub bx,9 ;îòíèìàåì âûñîòó òåêñòà
1163
      sub bx,9 ;®â­¨¬ ¥¬ ¢ëá®âã ⥪áâ 
1169
      mov ecx,tl_col_txt
1164
      mov ecx,tl_col_txt
1170
      and ecx,0xffffff
1165
      and ecx,0xffffff
1171
;      or ecx,0x80000000 ;text is ASCIIZ
1166
;      or ecx,0x80000000 ;text is ASCIIZ
1172
      mcall 4
1167
      mcall 4
Line 1180... Line 1175...
1180
;output:
1175
;output:
1181
; esi = text len
1176
; esi = text len
1182
align 4
1177
align 4
1183
tl_get_draw_text_len:
1178
tl_get_draw_text_len:
1184
  push eax ecx edx
1179
  push eax ecx edx
1185
    mov esi,eax ;áåðåì äëèííó ñòðîêè
1180
    mov esi,eax ;¡¥à¥¬ ¤«¨­­ã áâப¨
Line 1186... Line 1181...
1186
 
1181
 
1187
    mov eax,tl_box_left
1182
    mov eax,tl_box_left
1188
    add eax,tl_box_width
1183
    add eax,tl_box_width
1189
    cmp eax,ebx
1184
    cmp eax,ebx
1190
    jle .text_null ;åñëè ïîäïèñü ïîëíîñòüþ âñÿ çà ýêðàíîì
1185
    jle .text_null ;¥á«¨ ¯®¤¯¨áì ¯®«­®áâìî ¢áï §  íªà ­®¬
1191
    sub eax,ebx
1186
    sub eax,ebx
1192
    xor edx,edx
1187
    xor edx,edx
1193
    mov ecx,6 ;øèðèíà ñèñòåìíîãî øðèôòà
1188
    mov ecx,6 ;è¨à¨­  á¨á⥬­®£® èà¨äâ 
Line 1194... Line 1189...
1194
    div ecx ;ñìîòðèì ñêîëüêî ñèìâîëîâ ìîæåò ïîìåñòèòüñÿ íà ýêðàíå
1189
    div ecx ;ᬮâਬ ᪮«ìª® ᨬ¢®«®¢ ¬®¦¥â ¯®¬¥áâ¨âìáï ­  íªà ­¥
1195
 
1190
 
1196
    cmp esi,eax
1191
    cmp esi,eax
1197
    jl @f
1192
    jl @f
1198
      mov esi,eax ;åñëè äëèííà òåêñòà ìåíüøå, ÷åì âñå ìåñòî ïîä ñòðîêó
1193
      mov esi,eax ;¥á«¨ ¤«¨­­  ⥪áâ  ¬¥­ìè¥, 祬 ¢á¥ ¬¥áâ® ¯®¤ áâபã
1199
    jmp @f
1194
    jmp @f
1200
    .text_null:
1195
    .text_null:
1201
      xor esi,esi
1196
      xor esi,esi
Line 1217... Line 1212...
1217
    jmp @b
1212
    jmp @b
1218
  @@:
1213
  @@:
1219
  sub eax,esi
1214
  sub eax,esi
1220
  ret
1215
  ret
Line 1221... Line 1216...
1221
 
1216
 
1222
;äîáàâèòü óçåë
1217
;¤®¡ ¢¨âì 㧥«
1223
;input:
1218
;input:
1224
; tlist - óêàçàòåëü íà ñòðóêòóðó ëèñòà
1219
; tlist - 㪠§ â¥«ì ­  áâàãªâãàã «¨áâ 
1225
; n_opt - îïöèè äîáàâëåíèÿ
1220
; n_opt - ®¯æ¨¨ ¤®¡ ¢«¥­¨ï
1226
; n_info - óêàçàòåëü íà äîáàâëÿåìûå äàííûå
1221
; n_info - 㪠§ â¥«ì ­  ¤®¡ ¢«ï¥¬ë¥ ¤ ­­ë¥
1227
align 4
1222
align 4
1228
proc tl_node_add uses eax ebx ecx edx edi, n_info:dword, n_opt:dword, tlist:dword
1223
proc tl_node_add uses eax ebx ecx edx edi, tlist:dword, n_opt:dword, n_info:dword
Line 1229... Line 1224...
1229
    mov edi,dword[tlist]
1224
    mov edi,dword[tlist]
Line 1230... Line 1225...
1230
 
1225
 
Line 1284... Line 1279...
1284
	mov esi,edi
1279
	mov esi,edi
1285
	mov edi,dword[tlist] ;restore edi
1280
	mov edi,dword[tlist] ;restore edi
1286
	mov cx,tl_info_capt_offs
1281
	mov cx,tl_info_capt_offs
1287
	cmp cx,tl_info_size
1282
	cmp cx,tl_info_size
1288
	jge .no_text_data
1283
	jge .no_text_data
1289
 cmp tl_info_capt_len,0 ;ïðîâåðÿåì åñòü ëè îãðàíè÷åíèå íà äëèííó ñòðîêè
1284
 cmp tl_info_capt_len,0 ;¯à®¢¥à塞 ¥áâì «¨ ®£à ­¨ç¥­¨¥ ­  ¤«¨­­ã áâப¨
1290
 je .no_len_ogran
1285
 je .no_len_ogran
1291
   add cx,tl_info_capt_len
1286
   add cx,tl_info_capt_len
1292
   and ecx,0xffff
1287
   and ecx,0xffff
1293
   add esi,ecx
1288
   add esi,ecx
1294
   mov cx,tl_info_size
1289
   mov cx,tl_info_size
Line 1308... Line 1303...
1308
 
1303
 
1309
	call tl_get_node_index ;*** eax = i ***
1304
	call tl_get_node_index ;*** eax = i ***
1310
	cmp eax,tl_info_max_count
1305
	cmp eax,tl_info_max_count
Line 1311... Line 1306...
1311
	jge .u0
1306
	jge .u0
1312
 
1307
 
1313
	mov [ecx],eax ;node[po_t].next=i; // ññûëêè ïåðåíàïðàâëÿåì
1308
	mov [ecx],eax ;node[po_t].next=i; // áá뫪¨ ¯¥à¥­ ¯à ¢«ï¥¬
1314
	mov ecx,[edx+8] ; *** ecx = node[i].next ***
1309
	mov ecx,[edx+8] ; *** ecx = node[i].next ***
1315
	imul ecx,sizeof.TreeList
1310
	imul ecx,sizeof.TreeList
Line 1316... Line 1311...
1316
	add ecx,tl_data_nodes ; *** ecx = node[node[i].next] ***
1311
	add ecx,tl_data_nodes ; *** ecx = node[node[i].next] ***
1317
	mov [ecx+4],eax ;node[node[i].next].perv=i;
1312
	mov [ecx+4],eax ;node[node[i].next].perv=i;
1318
 
1313
 
1319
	call tb_scrol_resize ;îáðàáîòêà ñêðîëëèíãà
1314
	call tb_scrol_resize ;®¡à ¡®âª  áªà®««¨­£ 
1320
    jmp @f
1315
    jmp @f
1321
      .u0:
1316
      .u0:
Line 1328... Line 1323...
1328
 
1323
 
1329
;input:
1324
;input:
1330
; edi = pointer to TreeInfo struct
1325
; edi = pointer to TreeInfo struct
1331
align 4
1326
align 4
1332
proc tb_scrol_resize uses eax ecx edx
1327
proc tb_scrol_resize uses eax ecx edx
1333
	cmp tl_p_scrol,0 ;îáðàáîòêà ñêðîëëèíãà
1328
	cmp tl_p_scroll,0 ;®¡à ¡®âª  áªà®««¨­£ 
1334
  je @f
1329
  je @f
1335
    call tl_get_node_count ;eax = node count
1330
    call tl_get_node_count ;eax = node count
1336
    mov ecx,eax
1331
    mov ecx,eax
1337
    call tl_get_rows_count
1332
    call tl_get_rows_count
1338
    cmp ecx,eax
1333
    cmp ecx,eax
1339
    jg .ye_sb
1334
    jg .ye_sb
1340
      xor ecx,ecx
1335
      xor ecx,ecx
Line 1341... Line 1336...
1341
    .ye_sb:
1336
    .ye_sb:
1342
 
1337
 
1343
    mov edx,tl_p_scrol
1338
    mov edx,tl_p_scroll
1344
    mov dword[edx+sb_offs_cur_area],eax
1339
    mov dword[edx+sb_offs_cur_area],eax
1345
    mov dword[edx+sb_offs_max_area],ecx
1340
    mov dword[edx+sb_offs_max_area],ecx
1346
		stdcall scroll_bar_vertical.draw,edx
1341
		stdcall scroll_bar_vertical.draw,edx
1347
  @@:
1342
  @@:
Line 1348... Line 1343...
1348
ret
1343
ret
1349
endp
1344
endp
1350
 
1345
 
1351
;input:
1346
;input:
1352
;n_info - pointer to node info
1347
;n_info - pointer to node info
1353
align 4
1348
align 4
1354
proc tl_node_set_data uses eax ecx edx edi esi, n_info:dword, tlist:dword
1349
proc tl_node_set_data uses eax ecx edx edi esi, tlist:dword, n_info:dword
1355
    mov edi,dword[tlist]
1350
    mov edi,dword[tlist]
1356
    call tl_get_cur_node_index ;eax=po_t
1351
    call tl_get_cur_node_index ;eax=po_t
Line 1367... Line 1362...
1367
      mov esi,edi
1362
      mov esi,edi
1368
      mov edi,dword[tlist] ;restore edi
1363
      mov edi,dword[tlist] ;restore edi
1369
      mov cx,tl_info_capt_offs
1364
      mov cx,tl_info_capt_offs
1370
      cmp cx,tl_info_size
1365
      cmp cx,tl_info_size
1371
      jge .no_text_data
1366
      jge .no_text_data
1372
        mov ax,tl_info_capt_len ;ïðîâåðÿåì åñòü ëè îãðàíè÷åíèå íà äëèííó òåêñòà
1367
        mov ax,tl_info_capt_len ;¯à®¢¥à塞 ¥áâì «¨ ®£à ­¨ç¥­¨¥ ­  ¤«¨­­ã ⥪áâ 
1373
        cmp ax,0
1368
        cmp ax,0
1374
        je .no_limit
1369
        je .no_limit
1375
        add cx,ax ;cx = tl_info_capt_offs + tl_info_capt_len
1370
        add cx,ax ;cx = tl_info_capt_offs + tl_info_capt_len
1376
        and ecx,0xffff
1371
        and ecx,0xffff
1377
        xor eax,eax
1372
        xor eax,eax
1378
        mov ax,tl_info_size
1373
        mov ax,tl_info_size
1379
        cmp eax,ecx
1374
        cmp eax,ecx
1380
        jl .no_limit ;ïîëüçîâàòåëü çàäàë ñëèøêîì áîëüøóþ äëèííó òåêñòà
1375
        jl .no_limit ;¯®«ì§®¢ â¥«ì § ¤ « ᫨誮¬ ¡®«ìèãî ¤«¨­­ã ⥪áâ 
1381
        add esi,ecx
1376
        add esi,ecx
1382
        sub esi,eax
1377
        sub esi,eax
1383
        .no_limit:
1378
        .no_limit:
1384
          dec esi
1379
          dec esi
1385
          mov byte[esi],0 ;îáíóëÿåì ïîñëåäíèé ñèìâîë ïîäïèñè, ÷òî-áû íå ãëþ÷èëî åñëè ïîëüçîâàòåëü çàäàë íåïðàâèëüíóþ ñòðóêòóðó
1380
          mov byte[esi],0 ;®¡­ã«ï¥¬ ¯®á«¥¤­¨© ᨬ¢®« ¯®¤¯¨á¨, çâ®-¡ë ­¥ £«î稫® ¥á«¨ ¯®«ì§®¢ â¥«ì § ¤ « ­¥¯à ¢¨«ì­ãî áâàãªâãàã
1386
      .no_text_data:
1381
      .no_text_data:
Line 1387... Line 1382...
1387
 
1382
 
1388
    @@:
1383
    @@:
1389
	ret
1384
	ret
Line -... Line 1385...
-
 
1385
endp
1390
endp
1386
 
1391
 
1387
;¢§ïâì 㪠§ â¥«ì ­  ¤ ­­ë¥ 㧫  ¯®¤ ªãàá®à®¬
-
 
1388
;input:
-
 
1389
; tlist - pointer to 'TreeList' struct
1392
;input:
1390
;output:
1393
;dword[ebp+ 8] - pointer to 'TreeList' struct
-
 
1394
align 4
-
 
1395
tl_node_get_data: ;âçÿòü óêàçàòåëü íà äàííûå óçëà ïîä êóðñîðîì
-
 
1396
  push ebp
1391
; eax - pointer to node data
1397
  mov ebp,esp
1392
align 4
1398
  push eax ecx edi
1393
proc tl_node_get_data uses ecx edi, tlist:dword
1399
    mov edi,dword[ebp+8]
-
 
1400
    call tl_get_cur_node_index ;eax=po_t
1394
	mov edi,dword[tlist]
1401
    mov dword[ebp+8],0 ;if return 0 pointer
1395
	call tl_get_cur_node_index ;eax=po_t
1402
    cmp eax,2
-
 
1403
    jl @f
1396
	cmp eax,2
1404
      xor ecx,ecx
1397
	jl @f
1405
      mov cx,tl_info_size
1398
		movzx ecx,tl_info_size
1406
      imul eax,ecx
1399
		imul eax,ecx
1407
      add eax,tl_data_info
1400
		add eax,tl_data_info
1408
      mov dword[ebp+8],eax ;return node data pointer
1401
		jmp .end_f ;return node data pointer
1409
    @@:
1402
	@@:
1410
  pop edi ecx eax
1403
	xor eax,eax
-
 
1404
	.end_f:
Line -... Line 1405...
-
 
1405
  ret
1411
  pop ebp
1406
endp
-
 
1407
 
1412
  ret
1408
;¢§ïâì 㪠§ â¥«ì ­  áâàãªâãàã 㧫  ¢ 㪠§ ­­®© ¯®§¨æ¨¨
-
 
1409
;input:
1413
 
1410
; tlist - pointer to 'TreeList' struct
1414
;input:
1411
; node_ind - node index
1415
;dword[ebp+ 8] - node index
1412
;output:
1416
;dword[ebp+12] - pointer to 'TreeList' struct
-
 
1417
align 4
-
 
1418
tl_node_poi_get_info: ;âçÿòü óêàçàòåëü íà ñòðóêòóðó óçëà â óêàçàííîé ïîçèöèè
-
 
1419
  push ebp
1413
; eax - pointer to node info
1420
  mov ebp,esp
1414
align 4
Line 1421... Line 1415...
1421
  push eax ecx edx edi
1415
proc tl_node_poi_get_info uses ebx ecx edi, tlist:dword, node_ind:dword
1422
    mov edi,dword[ebp+12]
1416
	mov edi,dword[tlist]
1423
    mov eax,dword[ebp+8]
1417
	mov ebx,dword[node_ind]
1424
 
1418
 
1425
    ;cycle to nodes
1419
	;cycle to nodes
1426
    mov edx,tl_data_nodes
1420
	mov eax,tl_data_nodes
1427
    mov ecx,edx
1421
	mov ecx,eax
1428
    add ecx,sizeof.TreeList
1422
	add ecx,sizeof.TreeList
1429
    @@:
1423
	@@:
1430
      call tl_iterat_next_all
1424
		call tl_iterat_next_all
1431
      cmp edx,ecx
1425
		cmp eax,ecx
1432
      jle @f
1426
		jle @f
1433
      dec eax
1427
		dec ebx
1434
      cmp eax,0
1428
		cmp ebx,0
1435
      jg @b
1429
		jg @b
1436
      jmp .find
-
 
1437
    @@:
-
 
1438
      xor edx,edx
1430
		jmp .find
1439
    .find:
1431
	@@:
Line -... Line 1432...
-
 
1432
		xor eax,eax
1440
    mov dword[ebp+12],edx
1433
	.find:
-
 
1434
	ret
1441
  pop edi edx ecx eax
1435
endp
-
 
1436
 
1442
  pop ebp
1437
;¢§ïâì 㪠§ â¥«ì ­  á«¥¤ãéãî áâàãªâãàã 㧫 
1443
  ret 4
1438
;input:
1444
 
1439
; tlist - pointer to 'TreeList' struct
1445
;input:
-
 
1446
;dword[ebp+ 8] - node param struct
-
 
1447
;dword[ebp+12] - pointer to 'TreeList' struct
-
 
1448
align 4
1440
; node_p - node param struct
1449
tl_node_poi_get_next_info: ;âçÿòü óêàçàòåëü íà ñëåäóùóþ ñòðóêòóðó óçëà
1441
;output:
Line 1450... Line 1442...
1450
  push ebp
1442
; eax - pointer to next node struct
1451
  mov ebp,esp
1443
align 4
Line 1452... Line 1444...
1452
  push ecx edx edi
1444
proc tl_node_poi_get_next_info uses ecx edx edi, tlist:dword, node_p:dword
1453
    mov edi,dword[ebp+12]
1445
	mov edi,dword[tlist]
1454
    mov edx,dword[ebp+8]
1446
	mov edx,dword[node_p]
1455
 
1447
 
1456
    mov ecx,tl_data_nodes
1448
	mov ecx,tl_data_nodes
-
 
1449
	add ecx,sizeof.TreeList
-
 
1450
 
-
 
1451
	call tl_iterat_next_all
Line 1457... Line 1452...
1457
    add ecx,sizeof.TreeList
1452
	cmp edx,ecx
1458
 
-
 
1459
    call tl_iterat_next_all
-
 
1460
    cmp edx,ecx
-
 
1461
    jg @f
-
 
1462
      xor edx,edx
1453
	jg @f
1463
    @@:
1454
		xor edx,edx
1464
 
1455
	@@:
1465
    mov dword[ebp+12],edx
1456
	mov eax,edx
1466
  pop edi edx ecx
-
 
1467
  pop ebp
1457
	ret
1468
  ret 4
1458
endp
1469
 
1459
 
1470
;input:
1460
;¢§ïâì 㪠§ â¥«ì ­  ¤ ­­ë¥ 㧫 
1471
;dword[ebp+ 8] - node param struct
1461
;input:
Line 1472... Line -...
1472
;dword[ebp+12] - pointer to 'TreeList' struct
-
 
1473
align 4
1462
; tlist - pointer to 'TreeList' struct
1474
tl_node_poi_get_data: ;âçÿòü óêàçàòåëü íà äàííûå óçëà
1463
; node_p - node param struct
1475
  push ebp
1464
;output:
1476
  mov ebp,esp
1465
; eax - pointer
1477
  push eax ecx edx edi
1466
align 4
1478
    mov edi,dword[ebp+12]
1467
proc tl_node_poi_get_data uses ecx edx edi, tlist:dword, node_p:dword
1479
    mov edx,dword[ebp+8]
1468
	mov edi,dword[tlist]
1480
 
1469
	mov edx,dword[node_p]
1481
    mov dword[ebp+12],0
1470
 
1482
    call tl_get_node_index ;eax = node index
1471
    call tl_get_node_index ;eax = node index
1483
    cmp eax,2
1472
    cmp eax,2
1484
    jl @f
1473
    jl @f
-
 
1474
      xor ecx,ecx
Line 1485... Line 1475...
1485
      xor ecx,ecx
1475
      mov cx,tl_info_size
1486
      mov cx,tl_info_size
1476
      imul eax,ecx
1487
      imul eax,ecx
1477
		add eax,tl_data_info
1488
      add eax,dword[edi]
1478
		jmp .end_f ;return node data pointer
1489
      mov dword[ebp+12],eax ;return node data pointer
1479
    @@:
1490
    @@:
1480
		xor eax,eax ;¢®§¢à é ¥¬ 0 ¢ á«ãç ¥ ­¥ 㤠筮£® ¯®¨áª 
Line 1519... Line 1509...
1519
  mov ecx,sizeof.TreeList
1509
	mov ecx,sizeof.TreeList
1520
  div ecx
1510
	div ecx
1521
  ret
1511
	ret
1522
endp
1512
endp
Line 1523... Line 1513...
1523
 
1513
 
1524
;áåðåò ïîçèöèþ óêàçàííîãî ñèìâîëà
1514
;¡¥à¥â ¯®§¨æ¨î 㪠§ ­­®£® ᨬ¢®« 
1525
;input:
1515
;input:
1526
; edx = pointer node memory
1516
; edx = pointer node memory
1527
; edi = pointer 'tl' struct
1517
; edi = pointer 'tl' struct
1528
;output:
1518
;output:
Line 1536... Line 1526...
1536
  mov ecx,sizeof.TreeList
1526
	mov ecx,sizeof.TreeList
1537
  div ecx
1527
	div ecx
1538
  pop edx ecx
1528
	pop edx ecx
1539
  ret
1529
	ret
Line 1540... Line 1530...
1540
 
1530
 
1541
;óäàëèòü óçåë
1531
;㤠«¨âì 㧥«
1542
align 4
1532
align 4
1543
proc tl_node_delete uses eax edx edi, tlist:dword
1533
proc tl_node_delete uses eax edx edi, tlist:dword
1544
	mov edi,dword[tlist]
1534
	mov edi,dword[tlist]
1545
    call tl_get_cur_node_index ;eax=po_t
1535
	call tl_get_cur_node_index ;eax=po_t
Line 1549... Line 1539...
1549
      add eax,tl_data_nodes
1539
		add eax,tl_data_nodes
1550
      mov edx,eax
1540
		mov edx,eax
1551
      inc tl_ch_tim
1541
		inc tl_ch_tim
1552
      mov eax,tl_ch_tim
1542
		mov eax,tl_ch_tim
1553
      mov dword[edx+16],eax
1543
		mov dword[edx+16],eax
1554
      call tb_scrol_resize ;îáðàáîòêà ñêðîëëèíãà
1544
		call tb_scrol_resize ;®¡à ¡®âª  áªà®««¨­£ 
1555
    @@:
1545
	@@:
1556
	ret
1546
	ret
1557
endp
1547
endp
Line 1558... Line 1548...
1558
 
1548
 
1559
;ïîñòàâèòü êóðñîð íà ïåðâûé óçåë
1549
;¯®áâ ¢¨âì ªãàá®à ­  ¯¥à¢ë© 㧥«
1560
align 4
1550
align 4
1561
proc tl_cur_beg uses edi, tlist:dword
1551
proc tl_cur_beg uses edi, tlist:dword
1562
	mov edi,dword[tlist]
1552
	mov edi,dword[tlist]
1563
    mov tl_cur_pos,0
1553
	mov tl_cur_pos,0
1564
    cmp tl_p_scrol,0
1554
	cmp tl_p_scroll,0
1565
    je @f
1555
	je @f
1566
      mov edi,tl_p_scrol
1556
		mov edi,tl_p_scroll
1567
      mov dword[edi+sb_offs_position],0
1557
		mov dword[edi+sb_offs_position],0
1568
		stdcall scroll_bar_vertical.draw, edi
1558
		stdcall scroll_bar_vertical.draw, edi
1569
    @@:
1559
	@@:
1570
	ret
1560
	ret
Line 1571... Line 1561...
1571
endp
1561
endp
1572
 
1562
 
1573
;ïåðåíåñòè êóðñîð íà 1 ïîçèöèþ íèæå
1563
;¯¥à¥­¥á⨠ªãàá®à ­  1 ¯®§¨æ¨î ­¨¦¥
1574
align 4
1564
align 4
1575
proc tl_cur_next uses eax ebx edi esi, tlist:dword
1565
proc tl_cur_next uses eax ebx edi esi, tlist:dword
1576
    mov edi,dword[tlist]
1566
    mov edi,dword[tlist]
1577
    call tl_get_node_count ;eax = node count
1567
    call tl_get_node_count ;eax = node count
1578
    ;inc eax
1568
    ;inc eax
1579
    cmp tl_cur_pos,eax
1569
    cmp tl_cur_pos,eax
1580
    jge .no_redraw
1570
    jge .no_redraw
1581
      mov esi,tl_box_top
1571
      mov esi,tl_box_top
1582
      add esi,tl_box_height ;esi = coord bottom border
1572
      add esi,tl_box_height ;esi = coord bottom border
Line 1583... Line 1573...
1583
      call tl_draw_null_cursor ;ñòèðàåì êóðñîð
1573
      call tl_draw_null_cursor ;áâ¨à ¥¬ ªãàá®à
1584
      inc tl_cur_pos
1574
      inc tl_cur_pos
1585
 
1575
 
1586
    cmp tl_p_scrol,0 ;if not scrol struct
1576
    cmp tl_p_scroll,0 ;if not scrol struct
1587
    je @f
1577
    je @f
1588
    call tl_get_rows_count ;eax = rows count
1578
    call tl_get_rows_count ;eax = rows count
1589
    mov ebx,tl_p_scrol
1579
    mov ebx,tl_p_scroll
1590
    add eax,dword[ebx+sb_offs_position]
1580
    add eax,dword[ebx+sb_offs_position]
1591
    cmp tl_cur_pos,eax
1581
    cmp tl_cur_pos,eax
Line 1592... Line 1582...
1592
    jl @f
1582
    jl @f
1593
      inc dword[ebx+sb_offs_position]
1583
      inc dword[ebx+sb_offs_position]
1594
      stdcall scroll_bar_vertical.draw,ebx
1584
      stdcall scroll_bar_vertical.draw,ebx
1595
 
1585
 
1596
      stdcall tl_draw,dword[tlist] ;ïîëíàÿ ïåðåðèñîâêà îêíà
1586
      stdcall tl_draw,dword[tlist] ;¯®«­ ï ¯¥à¥à¨á®¢ª  ®ª­ 
1597
      jmp .no_redraw
1587
      jmp .no_redraw
1598
    @@:
1588
    @@:
1599
      mov edi,dword[tlist] ;restore edi
1589
      mov edi,dword[tlist] ;restore edi
1600
      call tl_draw_cursor ;ïåðåðèñîâêà êóðñîðà
1590
      call tl_draw_cursor ;¯¥à¥à¨á®¢ª  ªãàá®à 
Line 1601... Line 1591...
1601
      call tl_draw_caption_cur_pos
1591
      call tl_draw_caption_cur_pos
1602
    .no_redraw:
1592
    .no_redraw:
1603
	ret
1593
	ret
1604
endp
1594
endp
1605
 
1595
 
1606
;áåðåò ÷èñëî âñåõ âèäèìûõ óçëîâ (íå ñ÷èòàÿ çàêðûòûõ äî÷åðíèõ)
1596
;¡¥à¥â ç¨á«® ¢á¥å ¢¨¤¨¬ëå 㧫®¢ (­¥ áç¨â ï § ªàëâëå ¤®ç¥à­¨å)
Line 1624... Line 1614...
1624
      jmp @b
1614
		jmp @b
1625
    @@:
1615
	@@:
1626
  pop edx ecx
1616
pop edx ecx
1627
  ret
1617
	ret
Line 1628... Line 1618...
1628
 
1618
 
1629
;áåðåò ÷èñëî âñåõ âèäèìûõ óçëîâ (ñ÷èòàÿ çàêðûòûå äî÷åðíèå)
1619
;¡¥à¥â ç¨á«® ¢á¥å ¢¨¤¨¬ëå 㧫®¢ (áç¨â ï § ªàëâë¥ ¤®ç¥à­¨¥)
1630
;input:
1620
;input:
1631
; edi = pointer 'tl' struct
1621
; edi = pointer 'tl' struct
1632
;output:
1622
;output:
1633
; eax = struct index of current node
1623
; eax = struct index of current node
Line 1647... Line 1637...
1647
      jmp @b
1637
		jmp @b
1648
    @@:
1638
	@@:
1649
  pop edx ecx
1639
pop edx ecx
1650
  ret
1640
	ret
Line 1651... Line 1641...
1651
 
1641
 
1652
;ïåðåíåñòè êóðñîð íà 1 ïîçèöèþ âûøå
1642
;¯¥à¥­¥á⨠ªãàá®à ­  1 ¯®§¨æ¨î ¢ëè¥
1653
align 4
1643
align 4
1654
proc tl_cur_perv uses eax edi esi, tlist:dword
1644
proc tl_cur_perv uses eax edi esi, tlist:dword
1655
    mov edi,dword[tlist]
1645
	mov edi,dword[tlist]
1656
    cmp tl_cur_pos,0
1646
	cmp tl_cur_pos,0
1657
    je .no_redraw
1647
	je .no_redraw
1658
      mov esi,tl_box_top
1648
		mov esi,tl_box_top
1659
      add esi,tl_box_height ;esi = coord bottom border
1649
		add esi,tl_box_height ;esi = coord bottom border
1660
      call tl_draw_null_cursor ;ñòèðàåì êóðñîð
1650
		call tl_draw_null_cursor ;áâ¨à ¥¬ ªãàá®à
Line 1661... Line 1651...
1661
      dec tl_cur_pos ;äâèãàåì êóðñîð ââåðõ
1651
		dec tl_cur_pos ;¤¢¨£ ¥¬ ªãàá®à ¢¢¥àå
1662
 
1652
 
1663
    cmp tl_p_scrol,0 ;åñëè åñòü óêàçàòåëü íà ñêðîëëèíã
1653
		cmp tl_p_scroll,0 ;¥á«¨ ¥áâì 㪠§ â¥«ì ­  áªà®««¨­£
1664
    je @f
1654
		je @f
1665
    mov eax,tl_p_scrol
1655
		mov eax,tl_p_scroll
1666
    cmp dword[eax+sb_offs_position],0 ;åñëè ñêðîëëèíã íà âåðõó, âûõîäèì
1656
		cmp dword[eax+sb_offs_position],0 ;¥á«¨ áªà®««¨­£ ­  ¢¥àåã, ¢ë室¨¬
1667
    je @f
1657
		je @f
1668
    mov edi,tl_cur_pos
1658
		mov edi,tl_cur_pos
1669
    cmp edi,dword[eax+sb_offs_position] ;åñëè êóðñîð óøåë âûøå ñêðîëëèíãà, òîãäà îïóñêàåì ñêðîëëèíã
1659
		cmp edi,dword[eax+sb_offs_position] ;¥á«¨ ªãàá®à ã襫 ¢ëè¥ áªà®««¨­£ , ⮣¤  ®¯ã᪠¥¬ áªà®««¨­£
1670
    jge @f
1660
		jge @f
1671
      dec dword[eax+sb_offs_position]
1661
			dec dword[eax+sb_offs_position]
1672
      stdcall scroll_bar_vertical.draw, eax
1662
			stdcall scroll_bar_vertical.draw, eax
1673
      stdcall tl_draw, dword[tlist] ;ïîëíàÿ ïåðåðèñîâêà îêíà
1663
			stdcall tl_draw, dword[tlist] ;¯®«­ ï ¯¥à¥à¨á®¢ª  ®ª­ 
1674
      jmp .no_redraw
1664
			jmp .no_redraw
1675
    @@:
-
 
1676
      mov edi,dword[tlist] ;restore edi
-
 
1677
      ;mov esi,tl_box_top
1665
		@@:
1678
      ;add esi,tl_box_height ;esi = coord bottom border
1666
			mov edi,dword[tlist] ;restore edi
1679
      call tl_draw_cursor ;ïåðåðèñîâêà êóðñîðà
1667
			call tl_draw_cursor ;¯¥à¥à¨á®¢ª  ªãàá®à 
1680
      call tl_draw_caption_cur_pos
1668
			call tl_draw_caption_cur_pos
1681
    .no_redraw:
1669
	.no_redraw:
Line 1682... Line 1670...
1682
	ret
1670
	ret
1683
endp
1671
endp
1684
 
1672
 
1685
;ïåðåíåñòè êóðñîð íà 1 ñòðàíèöó âûøå
1673
;¯¥à¥­¥á⨠ªãàá®à ­  1 áâà ­¨æã ¢ëè¥
Line 1686... Line 1674...
1686
align 4
1674
align 4
1687
proc tl_cur_page_up uses eax edi esi, tlist:dword
1675
proc tl_cur_page_up uses eax edi esi, tlist:dword
Line 1688... Line 1676...
1688
    mov edi,dword[tlist]
1676
    mov edi,dword[tlist]
1689
 
1677
 
Line 1690... Line 1678...
1690
    cmp tl_p_scrol,0 ;åñëè åñòü óêàçàòåëü íà ñêðîëëèíã
1678
    cmp tl_p_scroll,0 ;¥á«¨ ¥áâì 㪠§ â¥«ì ­  áªà®««¨­£
1691
    je .no_redraw
1679
    je .no_redraw
1692
 
1680
 
1693
    mov esi,tl_p_scrol
1681
    mov esi,tl_p_scroll
1694
    call tl_get_rows_count ;eax = rows count
1682
    call tl_get_rows_count ;eax = rows count
1695
 
1683
 
1696
    cmp tl_cur_pos,0
1684
    cmp tl_cur_pos,0
1697
    jne @f
1685
    jne @f
1698
    cmp dword[esi+sb_offs_position],0 ;åñëè ñêðîëëèíã íà âåðõó, âûõîäèì
1686
    cmp dword[esi+sb_offs_position],0 ;¥á«¨ áªà®««¨­£ ­  ¢¥àåã, ¢ë室¨¬
1699
    jne @f
1687
    jne @f
1700
      jmp .no_redraw
1688
      jmp .no_redraw
1701
    @@:
1689
    @@:
1702
      cmp tl_cur_pos,eax ;ïðîâåðÿåì ïîçèöèþ êóðñîðà è êîë-âî ñòîê íà ñòðàíèöå
1690
      cmp tl_cur_pos,eax ;¯à®¢¥à塞 ¯®§¨æ¨î ªãàá®à  ¨ ª®«-¢® á⮪ ­  áâà ­¨æ¥
Line 1711... Line 1699...
1711
        sub dword[esi+sb_offs_position],eax
1699
        sub dword[esi+sb_offs_position],eax
1712
        jmp .scroll
1700
        jmp .scroll
1713
      @@:
1701
      @@:
1714
        mov dword[esi+sb_offs_position],0
1702
        mov dword[esi+sb_offs_position],0
1715
      .scroll:
1703
      .scroll:
1716
      ;ïåðåðèñîâêè îêíà è ñêðîëëèíãà
1704
      ;¯¥à¥à¨á®¢ª¨ ®ª­  ¨ áªà®««¨­£ 
1717
      stdcall tl_draw, edi ;draw window
1705
      stdcall tl_draw, edi ;draw window
1718
      stdcall scroll_bar_vertical.draw, esi
1706
      stdcall scroll_bar_vertical.draw, esi
1719
    .no_redraw:
1707
    .no_redraw:
1720
	ret
1708
	ret
1721
endp
1709
endp
Line 1722... Line 1710...
1722
 
1710
 
1723
;ïåðåíåñòè êóðñîð íà 1 ñòðàíèöó íèæå
1711
;¯¥à¥­¥á⨠ªãàá®à ­  1 áâà ­¨æã ­¨¦¥
1724
align 4
1712
align 4
1725
proc tl_cur_page_down uses eax ebx ecx edi esi, tlist:dword
1713
proc tl_cur_page_down uses eax ebx ecx edi esi, tlist:dword
1726
;eax - êîë-âî ñòðîê íà ñòðàíèöå
1714
;eax - ª®«-¢® áâப ­  áâà ­¨æ¥
1727
;ebx - ìàêñ. ïîçèöèÿ êóðñîðà
1715
;ebx - ¬ ªá. ¯®§¨æ¨ï ªãàá®à 
1728
;ecx - ìàêñ. ïîçèöèÿ ñêðîëëèíãà
1716
;ecx - ¬ ªá. ¯®§¨æ¨ï áªà®««¨­£ 
Line 1729... Line 1717...
1729
    mov edi,dword[tlist]
1717
    mov edi,dword[tlist]
1730
 
1718
 
Line 1731... Line 1719...
1731
    cmp tl_p_scrol,0 ;åñëè åñòü óêàçàòåëü íà ñêðîëëèíã
1719
    cmp tl_p_scroll,0 ;¥á«¨ ¥áâì 㪠§ â¥«ì ­  áªà®««¨­£
1732
    je .no_redraw
1720
    je .no_redraw
1733
 
1721
 
1734
    mov esi,tl_p_scrol
1722
    mov esi,tl_p_scroll
Line 1735... Line 1723...
1735
    call tl_get_node_count ;eax = node count
1723
    call tl_get_node_count ;eax = node count
1736
    mov ebx,eax
1724
    mov ebx,eax
1737
    call tl_get_rows_count ;eax = rows count
1725
    call tl_get_rows_count ;eax = rows count
1738
 
1726
 
1739
    mov ecx,ebx
1727
    mov ecx,ebx
1740
    inc ecx ;åñëè íèæíèé óçåë âèäåí íà ïîëîâèíó
1728
    inc ecx ;¥á«¨ ­¨¦­¨© 㧥« ¢¨¤¥­ ­  ¯®«®¢¨­ã
1741
    cmp ecx,eax ;if (ecx>eax) { ecx=ecx-eax } else { ecx=0 }
1729
    cmp ecx,eax ;if (ecx>eax) { ecx=ecx-eax } else { ecx=0 }
1742
    jl @f
1730
    jl @f
1743
      sub ecx,eax ;óìåíüøàåì ìàêñèìàëüíóþ ïîçèöèþ ñêðîëëèíãà, òàê ÷òî-áû áûëè âèäíû ïîñëåäíèå óçëû
1731
      sub ecx,eax ;㬥­ìè ¥¬ ¬ ªá¨¬ «ì­ãî ¯®§¨æ¨î áªà®««¨­£ , â ª çâ®-¡ë ¡ë«¨ ¢¨¤­ë ¯®á«¥¤­¨¥ 㧫ë
Line 1744... Line 1732...
1744
      jmp .control
1732
      jmp .control
1745
    @@:
1733
    @@:
1746
      xor ecx,ecx ;ecx=0 - âñå óçëû âëàçÿò â ýêðàí, ñêðîëëèíã íå íóæåí
1734
      xor ecx,ecx ;ecx=0 - ¢á¥ ã§«ë ¢« §ïâ ¢ íªà ­, áªà®««¨­£ ­¥ ­ã¦¥­
1747
    .control:
1735
    .control:
1748
 
1736
 
1749
    cmp tl_cur_pos,ebx ;êóðñîð âíèçó ?
1737
    cmp tl_cur_pos,ebx ;ªãàá®à ¢­¨§ã ?
Line 1750... Line 1738...
1750
    jl @f
1738
    jl @f
1751
    cmp dword[esi+sb_offs_position],ecx ;ñêðîëëèíã âíèçó ?
1739
    cmp dword[esi+sb_offs_position],ecx ;áªà®««¨­£ ¢­¨§ã ?
1752
    jl @f
1740
    jl @f
1753
      jmp .no_redraw
1741
      jmp .no_redraw
1754
    @@:
1742
    @@:
Line 1755... Line 1743...
1755
 
1743
 
1756
      add tl_cur_pos,eax ;ïåðåìåùàåì êóðñîð
1744
      add tl_cur_pos,eax ;¯¥à¥¬¥é ¥¬ ªãàá®à
1757
      cmp tl_cur_pos,ebx
1745
      cmp tl_cur_pos,ebx
1758
      jl @f
1746
      jl @f
1759
        mov tl_cur_pos,ebx
1747
        mov tl_cur_pos,ebx
Line 1760... Line 1748...
1760
      @@:
1748
      @@:
1761
 
1749
 
1762
      add dword[esi+sb_offs_position],eax ;ïåðåìåùàåì ñêðîëëèíã
1750
      add dword[esi+sb_offs_position],eax ;¯¥à¥¬¥é ¥¬ áªà®««¨­£
1763
      cmp dword[esi+sb_offs_position],ecx
1751
      cmp dword[esi+sb_offs_position],ecx
1764
      jl @f
1752
      jl @f
1765
        mov dword[esi+sb_offs_position],ecx
1753
        mov dword[esi+sb_offs_position],ecx
Line 1766... Line 1754...
1766
      @@:
1754
      @@:
1767
 
1755
 
1768
      ;ïåðåðèñîâêè îêíà è ñêðîëëèíãà
1756
      ;¯¥à¥à¨á®¢ª¨ ®ª­  ¨ áªà®««¨­£ 
1769
      stdcall tl_draw, edi ;draw window
1757
      stdcall tl_draw, edi ;draw window
1770
      stdcall scroll_bar_vertical.draw, esi
1758
      stdcall scroll_bar_vertical.draw, esi
1771
    .no_redraw:
1759
    .no_redraw:
1772
	ret
1760
	ret
1773
endp
1761
endp
1774
 
1762
 
1775
;îòêðûòü/çàêðûòü óçåë (ðàáîòàåò ñ óçëàìè êîòîðûå èìåþò äî÷åðíèå óçëû)
1763
;®âªàëâì/§ ªàëâì 㧥« (à ¡®â ¥â á 㧫 ¬¨ ª®â®àë¥ ¨¬¥îâ ¤®ç¥à­¨¥ 㧫ë)
1776
align 4
-
 
1777
proc tl_node_close_open uses eax edx edi, tlist:dword
1764
align 4
1778
	mov edi,dword[tlist]
1765
proc tl_node_close_open uses eax edx edi, tlist:dword
1779
    call tl_get_cur_node_index ;eax = ïîçèöèÿ óçëà íà êîòîðîì ñòîèò êóðñîð
1766
	mov edi,dword[tlist]
-
 
1767
	call tl_get_cur_node_index ;eax = ¯®§¨æ¨ï 㧫  ­  ª®â®à®¬ á⮨⠪ãàá®à
1780
    cmp eax,2 ;êóðñîð ñòîèò íà óçëå ?
1768
	cmp eax,2 ;ªãàá®à á⮨⠭  㧫¥ ?
1781
    jl @f
1769
	jl @f
1782
      imul eax,sizeof.TreeList
1770
		imul eax,sizeof.TreeList
1783
      add eax,tl_data_nodes
1771
		add eax,tl_data_nodes
1784
      ;eax = óêàçàòåëü íà ñòðóêòóðó óçëà âûáðàííîãî êóðñîðîì
1772
		;eax = 㪠§ â¥«ì ­  áâàãªâãàã 㧫  ¢ë¡à ­­®£® ªãàá®à®¬
1785
      push dword edi
1773
		push eax
1786
      push dword eax
1774
			stdcall tl_node_poi_get_next_info, edi,eax
Line 1787... Line 1775...
1787
      call tl_node_poi_get_next_info
1775
			mov edx,eax ;edx = 㪠§ â¥«ì ­  áâàãªâãàã 㧫  ª®â®àë© ¨¤¥â ¯®á«¥ 㧫  eax
1788
      pop dword edx ;edx = óêàçàòåëü íà ñòðóêòóðó óçëà êîòîðûé èäåò ïîñëå óçëà eax
1776
		pop eax
1789
      cmp edx,0 ;åñòü ëè óçëû íèæå âûáðàííîãî íàìè ?
1777
		cmp edx,0 ;¥áâì «¨ ã§«ë ­¨¦¥ ¢ë¡à ­­®£® ­ ¬¨ ?
1790
      je @f
1778
		je @f
Line 1791... Line 1779...
1791
	mov dl,byte[edx+2] ;áåðåì óðîâåíü íèæíåãî óçëà
1779
			mov dl,byte[edx+2] ;¡¥à¥¬ ã஢¥­ì ­¨¦­¥£® 㧫 
1792
	cmp byte[eax+2],dl ;+2 = .lev
1780
			cmp byte[eax+2],dl ;+2 = .lev
1793
	jge @f ;åñëè íèæíèå óçëû ìåíüøåãî óðîâíÿ, çíà÷èò îíè íå äî÷åðíèå, êîíåö ôóíêöèè
1781
			jge @f ;¥á«¨ ­¨¦­¨¥ ã§«ë ¬¥­ì襣® ã஢­ï, §­ ç¨â ®­¨ ­¥ ¤®ç¥à­¨¥, ª®­¥æ ä㭪樨
1794
	  xor byte[eax+3],1 ;+3 = .clo *** îòêðûòèå/çàêðûòèå óçëà ***
1782
				xor byte[eax+3],1 ;+3 = .clo *** ®âªàë⨥/§ ªàë⨥ 㧫  ***
1795
	  call tb_scrol_resize ;îáðàáîòêà ñêðîëëèíãà
1783
				call tb_scrol_resize ;®¡à ¡®âª  áªà®««¨­£ 
1796
 
1784
 
Line 1812... Line 1800...
1812
      imul eax,sizeof.TreeList
1800
		imul eax,sizeof.TreeList
1813
      add eax,ecx ;eax = pointer to some node struct
1801
		add eax,ecx ;eax = pointer to some node struct
1814
      add ecx,sizeof.TreeList ;ecx = pointer to 1 node struct
1802
		add ecx,sizeof.TreeList ;ecx = pointer to 1 node struct
Line 1815... Line 1803...
1815
 
1803
 
1816
      mov edx,eax
1804
		mov edx,eax
1817
      call tl_iterat_perv ;ïðîâåðÿåì åñòü ëè âåðõíèé óçåë
1805
		call tl_iterat_perv ;¯à®¢¥à塞 ¥áâì «¨ ¢¥àå­¨© 㧥«
1818
      cmp edx,ecx
1806
		cmp edx,ecx
1819
      jle @f ;åñëè âåðõíåãî óçëà íåò òî òåêóùèé óçåë íå äâèãàåì
1807
		jle @f ;¥á«¨ ¢¥àå­¥£® 㧫  ­¥â ⮠⥪ã騩 㧥« ­¥ ¤¢¨£ ¥¬
1820
      mov cl,byte[edx+2] ;áåðåì óðîâåíü ðîäèòåëüñêîãî óçëà
1808
		mov cl,byte[edx+2] ;¡¥à¥¬ ã஢¥­ì த¨â¥«ì᪮£® 㧫 
1821
      inc cl ;äîáàâëÿåì 1 è ïîëó÷àåì ìàêñèìàëüíîå çíà÷åíèå
1809
		inc cl ;¤®¡ ¢«ï¥¬ 1 ¨ ¯®«ãç ¥¬ ¬ ªá¨¬ «ì­®¥ §­ ç¥­¨¥
1822
      cmp byte[eax+2],cl
1810
		cmp byte[eax+2],cl
1823
      jge @f
1811
		jge @f
1824
        inc byte[eax+2] ;óâåëè÷èâàåì çíà÷åíèå óçëà
1812
			inc byte[eax+2] ;㢥«¨ç¨¢ ¥¬ §­ ç¥­¨¥ 㧫 
1825
    @@:
1813
	@@:
1826
	ret
1814
	ret
Line 1827... Line 1815...
1827
endp
1815
endp
1828
 
1816
 
1829
;óìåíüøèòü óðîâåíü
1817
;㬥­ìè¨âì ã஢¥­ì
1830
align 4
1818
align 4
1831
proc tl_node_lev_dec uses eax edi, tlist:dword
1819
proc tl_node_lev_dec uses eax edi, tlist:dword
1832
	mov edi,dword[tlist]
1820
	mov edi,dword[tlist]
Line 1840... Line 1828...
1840
      dec byte[eax+2]
1828
		dec byte[eax+2]
1841
    @@:
1829
	@@:
1842
	ret
1830
	ret
1843
endp
1831
endp
Line 1844... Line 1832...
1844
 
1832
 
1845
;ïåðåìåùàåì óçåë ââåðõ
1833
;¯¥à¥¬¥é ¥¬ 㧥« ¢¢¥àå
1846
align 4
1834
align 4
1847
proc tl_node_move_up uses eax ebx ecx edx edi esi, tlist:dword
1835
proc tl_node_move_up uses eax ebx ecx edx edi esi, tlist:dword
1848
    mov edi,dword[tlist]
1836
	mov edi,dword[tlist]
1849
    call tl_get_cur_node_index ;eax=po_t
1837
	call tl_get_cur_node_index ;eax=po_t
Line 1861... Line 1849...
1861
      call tl_get_node_index ;eax = index of 1 node struct
1849
		call tl_get_node_index ;eax = index of 1 node struct
1862
      cmp edx,ecx
1850
		cmp edx,ecx
1863
      jle @f
1851
		jle @f
1864
        cmp dword[edx+8],ebx ;+8 next
1852
			cmp dword[edx+8],ebx ;+8 next
1865
        jne .po8
1853
			jne .po8
1866
          call tl_node_move_po6 ;óçëû èäóò ïîäðÿä ìåíÿåì 6 ññûëîê
1854
				call tl_node_move_po6 ;ã§«ë ¨¤ãâ ¯®¤àï¤ ¬¥­ï¥¬ 6 ááë«®ª
1867
          jmp .cur_mov
1855
				jmp .cur_mov
1868
        .po8:
1856
			.po8:
1869
          call tl_node_move_po8 ;óçëû èäóò íå ïîäðÿä ìåíÿåì 8 ññûëîê
1857
				call tl_node_move_po8 ;ã§«ë ¨¤ãâ ­¥ ¯®¤àï¤ ¬¥­ï¥¬ 8 ááë«®ª
1870
        .cur_mov:
1858
			.cur_mov:
1871
          push dword edi
1859
				push dword edi
1872
          call tl_cur_perv
1860
				call tl_cur_perv
1873
          push dword edi
1861
				push dword edi
1874
          call tl_draw
1862
				call tl_draw
1875
    @@:
1863
	@@:
1876
	ret
1864
	ret
1877
endp
1865
endp
Line 1878... Line 1866...
1878
 
1866
 
1879
;ïåðåìåùàåì óçåë âíèç
1867
;¯¥à¥¬¥é ¥¬ 㧥« ¢­¨§
1880
align 4
1868
align 4
1881
proc tl_node_move_down uses eax ebx ecx edx edi esi, tlist:dword
1869
proc tl_node_move_down uses eax ebx ecx edx edi esi, tlist:dword
1882
    mov edi,dword[tlist]
1870
	mov edi,dword[tlist]
1883
    call tl_get_cur_node_index ;eax=po_t
1871
	call tl_get_cur_node_index ;eax=po_t
Line 1895... Line 1883...
1895
      call tl_get_node_index ;eax = index of 2 node struct
1883
		call tl_get_node_index ;eax = index of 2 node struct
1896
      cmp edx,ecx
1884
		cmp edx,ecx
1897
      jle @f
1885
		jle @f
1898
        cmp dword[esi+8],eax ;+8 next
1886
			cmp dword[esi+8],eax ;+8 next
1899
        jne .po8
1887
			jne .po8
1900
          xchg eax,ebx ;ìåíÿå ïîðÿäîê ñëåäîâàíèÿ çàìåíÿåìûõ óçëîâ
1888
				xchg eax,ebx ;¬¥­ï¥ ¯®à冷ª á«¥¤®¢ ­¨ï § ¬¥­ï¥¬ëå 㧫®¢
1901
          xchg edx,esi
1889
				xchg edx,esi
1902
          call tl_node_move_po6 ;óçëû èäóò ïîäðÿä ìåíÿåì 6 ññûëîê
1890
				call tl_node_move_po6 ;ã§«ë ¨¤ãâ ¯®¤àï¤ ¬¥­ï¥¬ 6 ááë«®ª
1903
          jmp .cur_mov
1891
				jmp .cur_mov
1904
        .po8: ;à òóò ïîðÿäîê ñëåäîâàíèÿ óçëîâ íå ìåíÿåì
1892
			.po8: ;  âãâ ¯®à冷ª á«¥¤®¢ ­¨ï 㧫®¢ ­¥ ¬¥­ï¥¬
1905
          call tl_node_move_po8 ;óçëû èäóò íå ïîäðÿä ìåíÿåì 8 ññûëîê
1893
				call tl_node_move_po8 ;ã§«ë ¨¤ãâ ­¥ ¯®¤àï¤ ¬¥­ï¥¬ 8 ááë«®ª
1906
        .cur_mov:
1894
			.cur_mov:
1907
          stdcall tl_cur_next, edi
1895
				stdcall tl_cur_next, edi
1908
          stdcall tl_draw, edi
1896
				stdcall tl_draw, edi
1909
    @@:
1897
	@@:
1910
	ret
1898
	ret
Line 1978... Line 1966...
1978
; edi = pointer to 'TreeList' struct
1966
; edi = pointer to 'TreeList' struct
1979
align 4
1967
align 4
1980
tl_draw_caption_cur_pos:
1968
tl_draw_caption_cur_pos:
1981
  cmp tl_capt_cy,9 ;9 - minimum caption height
1969
	cmp tl_capt_cy,9 ;9 - minimum caption height
1982
  jl @f
1970
	jl @f
1983
  push eax ebx ecx edx edi esi
1971
	pushad
1984
    mov ebx,edi ;calculate cursor position
1972
		mov ebx,edi ;calculate cursor position
1985
    mov eax,tl_cur_pos
1973
		mov eax,tl_cur_pos
1986
    inc eax
1974
		inc eax
1987
    lea edi,[txt_capt_cur]
1975
		lea edi,[txt_capt_cur]
1988
    add edi,7
1976
		add edi,7
1989
    call tl_convert_to_str
1977
		call tl_convert_to_str
1990
    mov edi,ebx
1978
		mov edi,ebx
Line 1991... Line -...
1991
 
-
 
1992
    mov eax,4 ;draw text captions
1979
 
1993
    mov ebx,tl_box_left
1980
		mov ebx,tl_box_left
1994
    shl ebx,16
1981
		shl ebx,16
1995
    add ebx,5*65536+3
1982
		add ebx,5*65536+3
1996
    add ebx,tl_box_top
1983
		add ebx,tl_box_top
1997
    mov ecx,tl_col_txt
1984
		mov ecx,tl_col_txt
1998
    or	ecx,0xc0000000 ;0x40000000 çàêðàøèâàòü ôîí öâåòîì edi
1985
		or  ecx,0xc0000000 ;0x40000000 § ªà è¨¢ âì ä®­ 梥⮬ edi
1999
    lea edx,[txt_capt_cur]
1986
		lea edx,[txt_capt_cur]
2000
    mov edi,tl_col_zag
1987
		mov edi,tl_col_zag
Line 2001... Line 1988...
2001
    int 0x40
1988
		mcall 4 ;draw text captions
2002
 
1989
 
2003
  pop esi edi edx ecx ebx eax
1990
	popad
Line 2004... Line 1991...
2004
  @@:
1991
	@@:
2005
  ret
-
 
2006
 
1992
	ret
2007
;input:
1993
 
2008
;dword[ebp+ 8] - memory size
1994
;input:
-
 
1995
; tlist - pointer to 'TreeList' struct
2009
;dword[ebp+12] - pointer to memory
1996
; opt - options: 0 - first element, 1 - add next element
2010
;dword[ebp+16] - options: 0 - first element, 1 - add next element
1997
; h_mem - pointer to memory
2011
;dword[ebp+20] - pointer to 'TreeList' struct
1998
; mem_size - memory size
2012
;output:
-
 
2013
;dword[ebp+ 8] - error code
-
 
2014
align 4
-
 
2015
tl_save_mem:
1999
;output:
2016
  push ebp
2000
; eax - error code
2017
  mov ebp,esp
2001
align 4
Line 2018... Line 2002...
2018
    push eax ebx ecx edx edi esi
2002
proc tl_save_mem uses ebx ecx edx edi esi, tlist:dword, opt:dword, h_mem:dword, mem_size:dword
2019
    mov esi,dword[ebp+12]
2003
	mov esi,dword[h_mem]
2020
    mov edi,dword[ebp+20]
-
 
2021
 
-
 
2022
    cmp dword[ebp+16],0 ;add mode
2004
	mov edi,dword[tlist]
2023
    je @f
-
 
2024
      push dword edi
2005
 
2025
      push dword esi
2006
	cmp dword[opt],0 ;add mode
Line 2026... Line 2007...
2026
      call tl_get_mem_size ;áåðåì ðàçìåð ðàíåå ñîõðàí¸ííûõ äàííûõ
2007
	je @f
2027
      pop ebx
2008
		stdcall tl_get_mem_size, edi,esi ;eax = à §¬¥à à ­¥¥ á®åà ­ñ­­ëå ¤ ­­ëå
Line 2028... Line 2009...
2028
      add esi,ebx
2009
		add esi,eax
Line 2029... Line 2010...
2029
    @@:
2010
	@@:
2030
 
2011
 
2031
    xor ebx,ebx
2012
	xor ebx,ebx
2032
    mov bx,tl_info_size
2013
	mov bx,tl_info_size
2033
 
2014
 
2034
    call tl_get_node_count_all ;eax = all node count
2015
	call tl_get_node_count_all ;eax = all node count
2035
 
2016
 
Line 2036... Line 2017...
2036
    mov ecx,eax  ;âû÷èñëÿåì ñêîëüêî ïàìÿòè äîëæíî áûòü çàïîëíåíî
2017
	mov ecx,eax  ;¢ëç¨á«ï¥¬ ᪮«ìª® ¯ ¬ï⨠¤®«¦­® ¡ëâì § ¯®«­¥­®
2037
    imul ecx,ebx ;óìíîæàåì íà ðàçìåð ñòðóêòóðû óçëà
2018
	imul ecx,ebx ;㬭®¦ ¥¬ ­  à §¬¥à áâàãªâãàë 㧫 
2038
    add ecx,tl_save_load_heder_size+1 ;element header +1 end element sumbol
2019
	add ecx,tl_save_load_heder_size+1 ;element header +1 end element sumbol
Line 2057... Line 2038...
2057
 
2038
 
2058
    mov ax,tl_info_capt_len
2039
		mov ax,tl_info_capt_len
Line 2059... Line 2040...
2059
    mov word[esi+20],ax
2040
		mov word[esi+20],ax
2060
 
2041
 
2061
    ;copy scroll position
2042
		;copy scroll position
2062
    mov edx,tl_p_scrol
2043
		mov edx,tl_p_scroll
Line 2063... Line 2044...
2063
    mov eax,dword[edx+sb_offs_position]
2044
		mov eax,dword[edx+sb_offs_position]
Line 2080... Line 2061...
2080
add esi,4
2061
		add esi,4
2081
mov eax,dword[edx] ;eax = (type; lev; clo)
2062
		mov eax,dword[edx] ;eax = (type; lev; clo)
2082
mov dword[esi],eax
2063
		mov dword[esi],eax
2083
add esi,4
2064
		add esi,4
Line 2084... Line 2065...
2084
 
2065
 
2085
stdcall tl_node_poi_get_data, edx,edi
-
 
Line 2086... Line 2066...
2086
pop dword eax
2066
			stdcall tl_node_poi_get_data, edi,edx ;eax - pointer node data
2087
 
2067
 
2088
;call tl_node_copy_data
2068
		;call tl_node_copy_data
2089
push ecx edi
2069
		push ecx edi
Line 2095... Line 2075...
2095
pop edi ecx
2075
		pop edi ecx
2096
;add esi,ebx
2076
		;add esi,ebx
2097
      jmp @b
2077
		jmp @b
2098
    @@:
2078
	@@:
2099
    mov byte[esi],0 ;end of 'treelist'
2079
	mov byte[esi],0 ;end of 'treelist'
2100
    mov dword[ebp+20],0 ;return error code
2080
		xor eax,eax ;return error code
2101
    jmp @f
2081
	jmp @f
2102
      .err_mem_size:
2082
	.err_mem_size:
2103
      or dword[ebp+20],tl_err_save_memory_size
2083
		mov eax,tl_err_save_memory_size
2104
    @@:
2084
	@@:
2105
    pop esi edi edx ecx ebx eax
-
 
2106
  pop ebp
2085
	ret
2107
  ret 12
2086
endp
Line 2108... Line 2087...
2108
 
2087
 
2109
;input:
2088
;input:
-
 
2089
; tlist - pointer to 'TreeList' struct
2110
;dword[ebp+ 8] - memory size
2090
; opt   - options: element index + (2*(add mode)+(init mode)) shl 16
2111
;dword[ebp+12] - pointer to memory
2091
; h_mem - pointer to memory
2112
;word[ebp+16] - options: element index
2092
; mem_size - memory size
2113
;word[ebp+18] - options: 2*(add mode)+(init mode)
2093
;   à §¬¥à ¯ ¬ïâ¨, ¯®ª  ­¥ ¨á¯®«ì§ã¥âáï (­ §­ ç «áï ¤«ï ª®­â஫ï)
2114
;dword[ebp+20] - pointer to 'TreeList' struct
2094
;   ¤«ï ¥£® ¨á¯®«ì§®¢ ­¨ï ­ã¦­® ¤®à ¡®â âì äã­ªæ¨î
2115
;output:
2095
;output:
-
 
2096
; eax - error code
-
 
2097
;memory header format:
-
 
2098
;  +0 - (4) 'tree'
-
 
2099
;  +4 - (2) info size
-
 
2100
;  +6 - (4) count nodes
-
 
2101
; +10 - (4) tlist style
-
 
2102
; +14 - (4) cursor pos
-
 
2103
; +18 - (2) info capt offs
-
 
2104
; +20 - (2) info capt len
-
 
2105
; +22 - (4) scroll pos
-
 
2106
;memory data format:
2116
;dword[ebp+ 8] - error code
2107
; +26 - (info size + 8) * count nodes
-
 
2108
align 4
2117
align 4
2109
proc tl_load_mem uses ebx ecx edx edi esi, tlist:dword, opt:dword, h_mem:dword, mem_size:dword 
2118
tl_load_mem:
2110
locals
2119
  push ebp
2111
	er_code dd ?
2120
  mov ebp,esp
-
 
2121
    push eax ebx ecx edx edi esi
2112
endl
2122
    mov esi,dword[ebp+12]
2113
	mov esi,dword[h_mem]
Line 2123... Line 2114...
2123
    mov edi,dword[ebp+20]
2114
	mov edi,dword[tlist]
Line 2124... Line -...
2124
 
-
 
2125
    mov dword[ebp+20],0 ;return error code
2115
 
2126
 
2116
	mov dword[er_code],0 ;return error code
2127
    xor ecx,ecx
2117
 
2128
    mov cx,word[ebp+16]
-
 
2129
    cmp cx,0 ;load in array mode
-
 
2130
    je @f
2118
	mov ecx,dword[opt]
2131
;      push dword edi
2119
	cmp cx,0 ;load in array mode
2132
;      push dword esi
2120
	je @f
-
 
2121
		;stdcall tl_get_mem_size, esi,edi ;¡¥à¥¬ à §¬¥à à ­¥¥ á®åà ­ñ­­ëå ¤ ­­ëå
2133
;      call tl_get_mem_size ;áåðåì ðàçìåð ðàíåå ñîõðàí¸ííûõ äàííûõ
2122
		;add esi,eax
2134
;      pop ebx
2123
		and ecx,0xffff
2135
;      add esi,ebx
2124
		cld
2136
      .beg_cycle:
2125
		.beg_cycle:
2137
      cmp dword[esi],'tree'
2126
			cmp dword[esi],'tree'
Line 2145... Line 2134...
2145
      loop .beg_cycle
2134
			loop .beg_cycle
2146
    @@:
2135
	@@:
Line 2147... Line 2136...
2147
 
2136
 
2148
    cmp dword[esi],'tree'
2137
	cmp dword[esi],'tree'
2149
    jne .no_tree
2138
	jne .no_tree
2150
      bt word[ebp+18],1 ;load in add mode
2139
		bt dword[opt],17 ;load in add mode
2151
      jc @f
2140
		jc @f
2152
				stdcall tl_info_clear, dword edi
2141
			stdcall tl_info_clear, dword edi
Line 2153... Line 2142...
2153
      @@:
2142
		@@:
2154
 
2143
 
2155
      xor ebx,ebx
2144
		xor ebx,ebx
2156
      mov bx,word[esi+4] ;info_size
2145
		mov bx,word[esi+4] ;info_size
2157
      cmp bx,tl_info_size
2146
		cmp bx,tl_info_size
2158
      je @f
2147
		je @f
2159
        or dword[ebp+20],tl_err_load_info_size
2148
			or dword[er_code],tl_err_load_info_size
2160
      @@:
2149
		@@:
2161
      mov ecx,dword[esi+6] ;count nodes
2150
		mov ecx,dword[esi+6] ;count nodes
2162
      cmp ecx,1
2151
		cmp ecx,1
Line 2167... Line 2156...
2167
		cld
2156
		cld
2168
		@@: ;load node params
2157
		@@: ;load node params
2169
mov eax,dword[esi+4]
2158
			mov eax,dword[esi+4]
2170
			ror eax,16 ;eax - options (type; lev; clo)
2159
			ror eax,16 ;eax - options (type; lev; clo)
2171
add esi,8
2160
			add esi,8
2172
			stdcall tl_node_add, esi,eax,edi
2161
			stdcall tl_node_add, edi,eax,esi
2173
			stdcall tl_cur_next, edi
2162
			stdcall tl_cur_next, edi
2174
;...
2163
;...
2175
add esi,ebx
2164
			add esi,ebx
2176
        loop @b
2165
			loop @b
Line 2177... Line 2166...
2177
 
2166
 
2178
      bt word[ebp+18],1 ;load in add mode
2167
		bt dword[opt],17 ;load in add mode
2179
      jc .no_tree
2168
		jc .no_tree
2180
        mov eax,dword[edx+14] ;set cursor pos
2169
			mov eax,dword[edx+14] ;set cursor pos
2181
        mov tl_cur_pos,eax
-
 
2182
        mov eax,dword[edx+22] ;set scroll pos
2170
			mov tl_cur_pos,eax
2183
        mov ebx,tl_p_scrol
2171
			mov ebx,tl_p_scroll
2184
        cmp ebx,0
2172
			cmp ebx,0
-
 
2173
			je .end_f
2185
        je .end_f
2174
				mov eax,dword[edx+22] ;set scroll pos
2186
          mov dword[ebx+sb_offs_position],eax
2175
				mov dword[ebx+sb_offs_position],eax
2187
				stdcall scroll_bar_vertical.draw, ebx
2176
				stdcall scroll_bar_vertical.draw, ebx
2188
      jmp .end_f
2177
				jmp .end_f
2189
    .no_tree:
2178
	.no_tree:
2190
      mov dword[ebp+20],tl_err_load_caption
2179
	mov dword[er_code],tl_err_load_caption
2191
    .end_f:
2180
	.end_f:
2192
    pop esi edi edx ecx ebx eax
2181
	mov eax,dword[er_code]
2193
  pop ebp
2182
	ret
2194
  ret 12
2183
endp
2195
 
-
 
2196
;input:
-
 
2197
;dword[ebp+ 8] - pointer to memory
2184
 
2198
;dword[ebp+12] - pointer to 'TreeList' struct
2185
;¡¥à¥â à §¬¥à ¯ ¬ï⨠§ ­ï⮩ ä㭪樥© tl_save_mem ¯à¨ á®åà ­¥­¨¨ í«¥¬¥­â®¢
2199
;output:
2186
;output:
2200
;dword[ebp+ 8] - error code
2187
; eax - error code
2201
align 4
-
 
2202
tl_get_mem_size: ;áåðåò ðàçìåð ïàìÿòè çàíÿòîé ôóíêöèåé tl_save_mem ïðè ñîõðàíåíèè ýëåìåíòîâ
-
 
2203
  push ebp
-
 
2204
  mov ebp,esp
2188
align 4
2205
    push ebx edi esi
2189
proc tl_get_mem_size uses ebx edi, tlist:dword, h_mem:dword 
2206
    mov esi,dword[ebp+ 8]
2190
	mov edi,dword[tlist]
2207
    mov edi,dword[ebp+12]
2191
	mov eax,dword[h_mem]
2208
    @@:
2192
	@@:
2209
      cmp dword[esi],'tree'
2193
		cmp dword[eax],'tree'
2210
      jne @f
2194
		jne @f
2211
      xor ebx,ebx
2195
		xor ebx,ebx
2212
      mov bx,word[esi+4]
2196
		mov bx,word[eax+4]
2213
      add bx,8 ;ðàçìåð äîïîëíèòåëüíîé èíôîðìàöèè îá óçëå (èíäåêñ çàïèñè; èíäåêñ èêîíêè, óðîâåíü, ...)
2197
		add bx,8 ;à §¬¥à ¤®¯®«­¨â¥«ì­®© ¨­ä®à¬ æ¨¨ ®¡ 㧫¥ (¨­¤¥ªá § ¯¨á¨; ¨­¤¥ªá ¨ª®­ª¨, ã஢¥­ì, ...)
2214
      imul ebx,dword[esi+6]
2198
		imul ebx,dword[eax+6]
2215
      add ebx,tl_save_load_heder_size
2199
		add ebx,tl_save_load_heder_size
2216
      add esi,ebx
2200
		add eax,ebx
2217
      jmp @b
2201
		jmp @b
2218
    @@:
-
 
2219
    sub esi,dword[ebp+ 8]
2202
	@@:
2220
    mov dword[ebp+12],esi ;âîçâðàùàåì ðàçìåð áëîêà ïàìÿòè
2203
	sub eax,dword[h_mem] ;®â­¨¬ ¥¬ 㪠§ â¥«ì ­  ­ ç «® ¯ ¬ïâ¨
2221
    pop esi edi edx
2204
		;¨ ¯®«ãç ¥¬ à §¬¥à ¡«®ª  ¯ ¬ïâ¨
2222
  pop ebp
2205
	ret
Line 2223... Line 2206...
2223
  ret 4
2206
endp
2224
 
2207
 
2225
 
2208
 
Line 2238... Line 2221...
2238
tl_key_scan  db 28,57, 72, 80, 75, 77, 83, 73, 81
2221
tl_key_scan  db 28,57, 72, 80, 75, 77, 83, 73, 81
Line 2239... Line 2222...
2239
 
2222
 
2240
txt_capt_cur db '‘âப       ',0
2223
txt_capt_cur db '‘âப       ',0
Line 2241... Line 2224...
2241
txt_capt_otm db 'Žâ¬¥­ë      ',0
2224
txt_capt_otm db 'Žâ¬¥­ë      ',0
2242
 
2225
 
2243
;ýòîò êîä íå ìîé, îí ïðåîáðàçóåò ÷èñëî â ñòðîêó
2226
;íâ®â ª®¤ ­¥ ¬®©, ®­ ¯à¥®¡à §ã¥â ç¨á«® ¢ áâபã
2244
;input:
2227
;input:
2245
; eax = value
2228
; eax = value
2246
; edi = string buffer
2229
; edi = string buffer
Line 2252... Line 2235...
2252
  popad
2235
	popad
2253
  ret
2236
	ret
Line 2254... Line 2237...
2254
 
2237
 
2255
align 4
2238
align 4
2256
.str:
2239
.str:
2257
  mov ecx,0x0a ;çàäàåòñÿ ñèñòåìà ñ÷èñëåíèÿ èçìåíÿþòñÿ ðåãèñòðû ebx,eax,ecx,edx âõîäíûå ïàðàìåòðû eax - ÷èñëî
2240
  mov ecx,0x0a ;§ ¤ ¥âáï á¨á⥬  áç¨á«¥­¨ï ¨§¬¥­ïîâáï ॣ¨áâàë ebx,eax,ecx,edx ¢å®¤­ë¥ ¯ à ¬¥âàë eax - ç¨á«®
2258
    ;ïðåðåâîä ÷èñëà â ASCII ñòðîêó âçîäíûå äàííûå ecx=ñèñòåìà ñ÷èñëåíÿ edi àäðåñ êóäà çàïèñûâàòü, áóäåì ñòðîêó, ïðè÷åì êîíåö ïåðåìåííîé 
2241
    ;¯à¥à¥¢®¤ ç¨á«  ¢ ASCII áâப㠢§®¤­ë¥ ¤ ­­ë¥ ecx=á¨á⥬  áç¨á«¥­ï edi  ¤à¥á ªã¤  § ¯¨á뢠âì, ¡ã¤¥¬ áâபã, ¯à¨ç¥¬ ª®­¥æ ¯¥à¥¬¥­­®© 
2259
  cmp eax,ecx  ;ñðàâíèòü åñëè â eax ìåíüøå ÷åì â ecx òî ïåðåéòè íà @@-1 ò.å. íà pop eax
2242
  cmp eax,ecx  ;áà ¢­¨âì ¥á«¨ ¢ eax ¬¥­ìè¥ ç¥¬ ¢ ecx â® ¯¥à¥©â¨ ­  @@-1 â.¥. ­  pop eax
2260
  jb @f
2243
  jb @f
2261
  xor edx,edx  ;î÷èñòèòü edx
2244
  xor edx,edx  ;®ç¨áâ¨âì edx
2262
  div ecx      ;ðàçäåëèòü - îñòàòîê â edx
2245
  div ecx      ;à §¤¥«¨âì - ®áâ â®ª ¢ edx
2263
  push edx     ;ïîëîæèòü â ñòåê
-
 
2264
  ;dec edi             ;ñìåùåíèå íåîáõîäèìîå äëÿ çàïèñè ñ êîíöà ñòðîêè
2246
  push edx     ;¯®«®¦¨âì ¢ á⥪
2265
  call .str;ïåðåéòè íà ñàìó ñåáÿ ò.å. âûçâàòü ñàìó ñåáÿ è òàê äî òîãî ìîìåíòà ïîêà â eax íå ñòàíåò ìåíüøå ÷åì â ecx
2247
  call .str;¯¥à¥©â¨ ­  á ¬ã ᥡï â.¥. ¢ë§¢ âì á ¬ã á¥¡ï ¨ â ª ¤® ⮣® ¬®¬¥­â  ¯®ª  ¢ eax ­¥ áâ ­¥â ¬¥­ìè¥ ç¥¬ ¢ ecx
2266
  pop eax
2248
  pop eax
2267
  @@: ;cmp al,10 ;ïðîâåðèòü íå ìåíüøå ëè çíà÷åíèå â al ÷åì 10 (äëÿ ñèñòåìû ñ÷èñëåíÿ 10 äàííàÿ êîìàíäà - ëèøíàÿ))
-
 
2268
  ;sbb al,$69  ;- ÷åñòíî äàííàÿ èíñòðóêöèÿ ìåíÿ çàñòàâëÿåò çàäóìàòüñÿ ò.å. ÿ íå çíàþ êàê ýòî ðàáîòàåò
-
 
2269
  ;das        ;ïîñëå äàííîé êîìàíäû êàê áû ïðîèñõîäèò óìåíüøåíèå al íà 66h  (â êíèãå íàïèñàíî äðóãîå)
2249
  @@: ;cmp al,10 ;¯à®¢¥à¨âì ­¥ ¬¥­ìè¥ «¨ §­ ç¥­¨¥ ¢ al 祬 10 (¤«ï á¨á⥬ë áç¨á«¥­ï 10 ¤ ­­ ï ª®¬ ­¤  - «¨è­ ï))
2270
  or al,0x30  ;äàííàÿ êîìàíäà êîðî÷å  ÷åì äâå âûøå 
2250
  or al,0x30  ;¤ ­­ ï ª®¬ ­¤  ª®à®ç¥  祬 ¤¢¥ ¢ëè¥ 
2271
  stosb       ;çàïèñàòü ýëåìåíò èç ðåãèñòðà al â ÿ÷åêó ïàìÿòè es:edi
2251
  stosb       ;§ ¯¨á âì í«¥¬¥­â ¨§ ॣ¨áâà  al ¢ ï祪㠯 ¬ï⨠es:edi
2272
  ret         ;âåðíóòüñÿ î÷åíü èíòåðåñíûé õîä ò.ê. ïîêà â ñòåêå õðàíèòüñÿ êîë-âî âûçîâîâ òî ñòîëüêî ðàç ìû è áóäåì âûçûâàòüñÿ
2252
  ret         ;¢¥à­ãâìáï ®ç¥­ì ¨­â¥à¥á­ë© 室 â.ª. ¯®ª  ¢ á⥪¥ åà ­¨âìáï ª®«-¢® ¢ë§®¢®¢ â® á⮫쪮 à § ¬ë ¨ ¡ã¤¥¬ ¢ë§ë¢ âìáï