Subversion Repositories Kolibri OS

Rev

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

Rev 5948 Rev 6972
Line 1... Line 1...
1
; ¬ ªà®á ¤«ï á¨á⥬­®© ¡¨¡«¨®â¥ª¨ box_lib.obj
1
; í«¥¬¥­â TreeList ¤«ï ¡¨¡«¨®â¥ª¨ box_lib.obj
2
; í«¥¬¥­â TreeList ¤«ï Kolibri OS
-
 
3
; ä ©« ¯®á«¥¤­¨© à § ¨§¬¥­ï«áï 03.12.2015 IgorA
-
 
4
; ­  ª®¤ ¯à¨¬¥­¥­  GPL2 «¨æ¥­§¨ï
2
; ­  ª®¤ ¯à¨¬¥­¥­  GPL2 «¨æ¥­§¨ï
-
 
3
; ¯®á«¥¤­ïï ¬®¤¨ä¨ª æ¨ï 12.09.2017 IgorA
Line 5... Line -...
5
 
-
 
6
 
4
 
7
sizeof.TreeList equ 20
5
 
8
;struct TreeList
6
struct TreeNode
9
;  type dw ? ;+ 0 ⨯ í«¥¬¥­â , ¨«¨ ¨­¤¥ªá ¨ª®­ª¨ ¤«ï 㧫 
7
	type dw ? ;+ 0 ⨯ í«¥¬¥­â , ¨«¨ ¨­¤¥ªá ¨ª®­ª¨ ¤«ï 㧫 
10
;  lev db ?  ;+ 2 ã஢¥­ì í«¥¬¥­â 
8
	level db ? ;+ 2 ã஢¥­ì í«¥¬¥­â 
11
;  clo db ?  ;+ 3 ä« £ § ªàëâ¨ï, ¨«¨ ®âªàëâ¨ï (¨¬¥¥â á¬ëá« ¤«ï த¨â¥«ì᪮£® 㧫 )
9
	close db ? ;+ 3 ä« £ § ªàëâ¨ï, ¨«¨ ®âªàëâ¨ï (¨¬¥¥â á¬ëá« ¤«ï த¨â¥«ì᪮£® 㧫 )
12
;  perv dd ? ;+ 4 ¨­¤¥ªá ¯à¥¤ë¤ã饣® í«¥¬¥­â 
10
	perv dd ? ;+ 4 ¨­¤¥ªá ¯à¥¤ë¤ã饣® í«¥¬¥­â 
13
;  next dd ? ;+ 8 ¨­¤¥ªá ¯®á«¥¤ãî饣® í«¥¬¥­â 
11
	next dd ? ;+ 8 ¨­¤¥ªá ¯®á«¥¤ãî饣® í«¥¬¥­â 
14
;  tc dd ?   ;+12 ¢à¥¬. ᮧ¤ ­¨ï
12
	t_create dd ? ;+12 ¢à¥¬. ᮧ¤ ­¨ï
Line 15... Line -...
15
;  td dd ?   ;+16 ¢à¥¬. 㤠«¥­¨ï
-
 
16
;ends
-
 
Line 17... Line 13...
17
 
13
	t_delete dd ? ;+16 ¢à¥¬. 㤠«¥­¨ï
18
macro use_tree_list
14
ends
19
{
15
 
20
 
16
 
Line 21... Line 17...
21
;¢ë¤¥«­¨¥ ¯ ¬ï⨠¤«ï áâàãªâãà ᯨ᪠ ¨ ®á­®¢­®© ¨­ä®à¬ æ¨¨ (ª®­áâàãªâ®à)
17
;¢ë¤¥«­¨¥ ¯ ¬ï⨠¤«ï áâàãªâãà ᯨ᪠ ¨ ®á­®¢­®© ¨­ä®à¬ æ¨¨ (ª®­áâàãªâ®à)
22
align 4
18
align 16
23
proc tl_data_init uses eax ecx edi, tlist:dword
19
proc tl_data_init uses eax ecx edi, tlist:dword
24
	mov edi,dword[tlist]
20
	mov edi,[tlist]
25
 
21
 
26
	xor ecx,ecx
22
	xor ecx,ecx
27
	mov cx,tl_info_size
23
	mov cx,tl_info_size
Line 28... Line 24...
28
	imul ecx,tl_info_max_count
24
	imul ecx,tl_info_max_count
29
	invoke mem.alloc,ecx
25
	invoke mem.alloc,ecx
30
	mov tl_data_info,eax ;ª®¯¨à㥬 㪠§ â¥«ì ­  ¯®«ã祭ãî ¯ ¬ïâì ¢ áâàãªâãàã
26
	mov tl_data_info,eax ;ª®¯¨à㥬 㪠§ â¥«ì ­  ¯®«ã祭ãî ¯ ¬ïâì ¢ áâàãªâãàã
31
	mov tl_data_img,0  ;®¡­ã«ï¥¬ 㪠§ â¥«ì 'data_img'
27
	mov tl_data_img,0  ;®¡­ã«ï¥¬ 㪠§ â¥«ì 'data_img'
Line 32... Line 28...
32
	mov tl_data_img_sys,0 ;®¡­ã«ï¥¬ 㪠§ â¥«ì 'data_img_sys'
28
	mov tl_data_img_sys,0 ;®¡­ã«ï¥¬ 㪠§ â¥«ì 'data_img_sys'
Line 62... Line 58...
62
endp
58
endp
Line 63... Line 59...
63
 
59
 
64
;®ç¨á⪠ ¯ ¬ïâ¨ í«¥¬¥­â  (¤¥áâàãªâ®à)
60
;®ç¨á⪠ ¯ ¬ïâ¨ í«¥¬¥­â  (¤¥áâàãªâ®à)
65
align 4
61
align 4
66
proc tl_data_clear uses eax edi, tlist:dword
62
proc tl_data_clear uses eax edi, tlist:dword
67
	mov edi,dword[tlist]
63
	mov edi,[tlist]
68
	cmp tl_data_img,0
64
	cmp tl_data_img,0
69
	je @f
65
	je @f
70
		invoke mem.free,tl_data_img ;ç¨á⪠ á¨á⥬­ëå ¨ª®­®ª
66
		invoke mem.free,tl_data_img ;ç¨á⪠ á¨á⥬­ëå ¨ª®­®ª
71
	@@:
67
	@@:
Line 79... Line 75...
79
endp
75
endp
Line 80... Line 76...
80
 
76
 
81
;®ç¨á⪠ ᯨ᪠ (¨­ä®à¬ æ¨¨)
77
;®ç¨á⪠ ᯨ᪠ (¨­ä®à¬ æ¨¨)
82
align 4
78
align 4
83
proc tl_info_clear uses eax ecx edi, tlist:dword
79
proc tl_info_clear uses eax ecx edi, tlist:dword
84
	mov edi,dword[tlist]
80
	mov edi,[tlist]
85
	mov tl_ch_tim,0
81
	mov tl_ch_tim,0
86
	mov tl_tim_undo,0
82
	mov tl_tim_undo,0
87
	mov tl_cur_pos,0
83
	mov tl_cur_pos,0
88
	mov ecx,sizeof.TreeList
84
	mov ecx,sizeof.TreeNode
89
	imul ecx,tl_info_max_count
85
	imul ecx,tl_info_max_count
90
	mov eax,tl_data_nodes
86
	mov eax,tl_data_nodes
91
	@@:
87
	@@:
92
		mov byte[eax],0 ;ç¨á⨬ 㧫ë 0-¬¨
88
		mov byte[eax],0 ;ç¨á⨬ 㧫ë 0-¬¨
93
		inc eax
89
		inc eax
94
		loop @b
90
		loop @b
95
	mov eax,tl_data_nodes ;㪠§ â¥«ì ­  0-© 㧥«
91
	mov eax,tl_data_nodes ;㪠§ â¥«ì ­  0-© 㧥«
Line 96... Line 92...
96
	mov dword[eax+8],1 ;㪠§ â¥«ì next ¢ 0-¬ 㧫¥ ¯à¨à ¢­¨¢ ¥¬ ª 1
92
	mov dword[eax+TreeNode.next],1 ;㪠§ â¥«ì next ¢ 0-¬ 㧫¥ ¯à¨à ¢­¨¢ ¥¬ ª 1
97
 
93
 
98
	cmp tl_p_scroll,0 ;®¡à ¡®âª  áªà®««¨­£ 
94
	cmp tl_p_scroll,0 ;®¡à ¡®âª  áªà®««¨­£ 
99
	je @f
95
	je @f
Line 105... Line 101...
105
endp
101
endp
Line 106... Line 102...
106
 
102
 
107
;ॠªæ¨ï ­  ª« ¢¨ âãàã
103
;ॠªæ¨ï ­  ª« ¢¨ âãàã
108
align 4
104
align 4
109
proc tl_key uses ebx ecx edi, tlist:dword
105
proc tl_key uses ebx ecx edi, tlist:dword
Line 110... Line 106...
110
	mov edi,dword[tlist]
106
	mov edi,[tlist]
111
 
107
 
112
	mov ebx,tl_el_focus
108
	mov ebx,tl_el_focus
Line 113... Line 109...
113
	cmp dword[ebx],edi
109
	cmp [ebx],edi
114
	jne .no_focus ;í«¥¬¥­â ­¥ ¢ 䮪ãá¥
110
	jne .no_focus ;í«¥¬¥­â ­¥ ¢ 䮪ãá¥
Line 115... Line 111...
115
 
111
 
116
	push eax
112
	push eax
117
	mcall 66,2 ;¯®«ãç¨âì ०¨¬ ¢¢®¤  á ª« ¢¨ âãàë
113
	mcall SF_KEYBOARD,SSF_GET_INPUT_MODE ;¯®«ãç¨âì ०¨¬ ¢¢®¤  á ª« ¢¨ âãàë
118
 
114
 
Line 179... Line 175...
179
 
175
 
180
;ॠªæ¨ï ­  ¬ëèì
176
;ॠªæ¨ï ­  ¬ëèì
181
align 4
177
align 4
182
proc tl_mouse, tlist:dword
178
proc tl_mouse, tlist:dword
183
	pushad
179
	pushad
Line 184... Line 180...
184
	mov edi,dword[tlist]
180
	mov edi,[tlist]
Line 185... Line 181...
185
 
181
 
186
	mcall 37,1 ;ª®®à¤¨­ âë ¬ëè¨ ®â­®á¨â¥«ì­® ®ª­ 
182
	mcall SF_MOUSE_GET,SSF_WINDOW_POSITION ;ª®®à¤¨­ âë ¬ëè¨ ®â­®á¨â¥«ì­® ®ª­ 
187
 
183
 
188
	mov ebx,tl_box_left
184
	mov ebx,tl_box_left
Line 204... Line 200...
204
		add bx,tl_capt_cy
200
		add bx,tl_capt_cy
205
		cmp ax,bx ;¢¥àå­ïï £à ­¨æ  ®ª­  + ¢ëá®â  ¯®¤¯¨á¨
201
		cmp ax,bx ;¢¥àå­ïï £à ­¨æ  ®ª­  + ¢ëá®â  ¯®¤¯¨á¨
206
		jl .test_scroll
202
		jl .test_scroll
Line 207... Line 203...
207
 
203
 
208
push eax ebx
204
push eax ebx
209
	mcall 37,7 ;®¡à ¡®âª  ª®«¥á  ¬ëè¨
205
	mcall SF_MOUSE_GET,SSF_SCROLL_DATA
210
	mov edx,eax
206
	mov edx,eax
211
	xor	ecx,ecx
207
	xor	ecx,ecx
212
	test eax,eax
208
	test eax,eax
213
	jz .mouse_next
209
	jz .mouse_next
Line 224... Line 220...
224
	mov cx,dx ;dx = mouse scroll data horizontal
220
	mov cx,dx ;dx = mouse scroll data horizontal
225
	test ecx,ecx
221
	test ecx,ecx
226
	jz .mouse_next
222
	jz .mouse_next
227
@@:
223
@@:
228
	stdcall tl_cur_next, edi
224
	stdcall tl_cur_next, edi
229
	dec ecx
-
 
230
	jnz @r
225
	loop @r
231
	jmp .mouse_next
226
	jmp .mouse_next
232
;------------------------------------------------
227
;------------------------------------------------
233
.decr: ;¢¥à⨪ «ì­ ï ¯à®ªàã⪠ ®âà¨æ â¥«ì­ ï
228
.decr: ;¢¥à⨪ «ì­ ï ¯à®ªàã⪠ ®âà¨æ â¥«ì­ ï
234
	mov bx,ax ;ax = mouse scroll data vertical
229
	mov bx,ax ;ax = mouse scroll data vertical
235
	jmp @f
230
	jmp @f
Line 239... Line 234...
239
	mov ecx,0xffff
234
	mov ecx,0xffff
240
	sub ecx,ebx
235
	sub ecx,ebx
241
	inc ecx
236
	inc ecx
242
@@:
237
@@:
243
	stdcall tl_cur_perv, edi
238
	stdcall tl_cur_perv, edi
244
	dec ecx
-
 
245
	jnz @r
239
	loop @r
246
;------------------------------------------------
240
;------------------------------------------------
247
.mouse_next:
241
.mouse_next:
248
pop ebx eax
-
 
249
 
-
 
250
		push eax ebx
-
 
251
		mcall 37,2
-
 
Line -... Line 242...
-
 
242
 
252
 
243
		mcall SF_MOUSE_GET,SSF_BUTTON
253
		bt eax,0 ;left mouse button press
244
		bt eax,0 ;left mouse button press
254
		pop ebx eax
245
pop ebx eax
Line 255... Line 246...
255
		jae .no_draw
246
		jae .no_draw
256
 
247
 
Line 257... Line 248...
257
		mov esi,tl_el_focus
248
		mov esi,tl_el_focus
258
		mov dword[esi],edi ;set focus
249
		mov [esi],edi ;set focus
259
 
250
 
260
		; if '+' or '-' press
251
		; if '+' or '-' press
Line 261... Line 252...
261
		mov esi,eax
252
		mov esi,eax
262
		shr esi,16
253
		shr esi,16
263
		sub esi,tl_box_left ;esi = mouse x coord in element window
254
		sub esi,tl_box_left ;esi = mouse x coord in element window
264
 
-
 
265
		and eax,0xffff
255
 
266
		sub ax,bx
256
		and eax,0xffff
267
		xor edx,edx
257
		sub eax,ebx
268
		xor ecx,ecx
258
		xor edx,edx
269
		mov cx,tl_img_cy
259
		movzx ecx,tl_img_cy
270
		div ecx
260
		div ecx
271
		cmp tl_p_scroll,0 ;ãç¨â뢠¥¬ áªà®««¨­£
261
		cmp tl_p_scroll,0 ;ãç¨â뢠¥¬ áªà®««¨­£
Line 272... Line 262...
272
		je @f
262
		je @f
273
			mov edx,tl_p_scroll
263
			mov edx,tl_p_scroll
274
			add eax,dword[edx+sb_offs_position] ;¤®¡ ¢«ï¥¬ áªà®««¨­£ ­  ¢¥àåã
264
			add eax,[edx+sb_offs_position] ;¤®¡ ¢«ï¥¬ áªà®««¨­£ ­  ¢¥àåã
Line 294... Line 284...
294
 
284
 
295
		; if '+' or '-' press
285
		; if '+' or '-' press
296
		call tl_get_cur_node_index ;eax = node index
286
		call tl_get_cur_node_index ;eax = node index
297
		cmp eax,2
287
		cmp eax,2
298
		jl .no_open_close ;ªãàá®à á⮨⠭  ¯ãá⮬ ¬¥áâ¥, ¡¥§ 㧫®¢
288
		jl .no_open_close ;ªãàá®à á⮨⠭  ¯ãá⮬ ¬¥áâ¥, ¡¥§ 㧫®¢
299
		imul eax,sizeof.TreeList
289
		imul eax,sizeof.TreeNode
300
		add eax,tl_data_nodes
290
		add eax,tl_data_nodes
301
		xor bx,bx
291
		xor bx,bx
302
		mov bl,byte[eax+2] ;+2 lev á®å࠭塞 ã஢¥­ì ⥪ã饣® 㧫 
292
		mov bl,byte[eax+TreeNode.level] ;á®å࠭塞 ã஢¥­ì ⥪ã饣® 㧫 
Line 303... Line 293...
303
		inc bx ;+ ¯®«¥ ¤«ï ªãàá®à 
293
		inc bx ;+ ¯®«¥ ¤«ï ªãàá®à 
304
 
294
 
305
		cmp si,tl_img_cx
295
		cmp si,tl_img_cx
Line 322... Line 312...
322
		call tl_draw_caption_cur_pos
312
		call tl_draw_caption_cur_pos
323
		jmp .no_draw
313
		jmp .no_draw
324
;--- mouse event for children scrollbar ----------------------------------------
314
;--- mouse event for children scrollbar ----------------------------------------
325
.test_scroll:
315
.test_scroll:
326
	mov edx,tl_p_scroll
316
	mov edx,tl_p_scroll
327
	cmp edx,0
317
	or edx,edx
328
	je .no_in_wnd ;¯®«ì§®¢ â¥«ì ­¥ ᮧ¤ « ¤®ç¥à­¥£® áªà®««¨­£ 
318
	jz .no_in_wnd ;¯®«ì§®¢ â¥«ì ­¥ ᮧ¤ « ¤®ç¥à­¥£® áªà®««¨­£ 
329
		shr ebx,16
319
		shr ebx,16
330
		add bx,word[edx] ;+0 .size_x
320
		add bx,word[edx] ;+0 .size_x
331
		shl ebx,16
321
		shl ebx,16
332
		cmp eax,ebx ;¯à ¢ ï £à ­¨æ  ®ª­ 
322
		cmp eax,ebx ;¯à ¢ ï £à ­¨æ  ®ª­ 
333
		jg .no_in_wnd
323
		jg .no_in_wnd
Line 334... Line 324...
334
 
324
 
335
		mov eax,dword[edx+sb_offs_max_area]
325
		mov eax,[edx+sb_offs_max_area]
336
		cmp eax,dword[edx+sb_offs_cur_area]
326
		cmp eax,[edx+sb_offs_cur_area]
337
		jbe .no_in_wnd ;¢á¥ ã§«ë ¯®¯ ¤ îâ ¢ ®ª­® áªà®««¨­£ 
327
		jbe .no_in_wnd ;¢á¥ ã§«ë ¯®¯ ¤ îâ ¢ ®ª­® áªà®««¨­£ 
Line 338... Line 328...
338
			stdcall scroll_bar_vertical.mouse, edx ;scrollbar_ver_mouse
328
			stdcall scroll_bar_vertical.mouse, edx ;scrollbar_ver_mouse
339
 
329
 
Line 344... Line 334...
344
			@@:
334
			@@:
345
			cmp dword[edx+sb_offs_delta2],0
335
			cmp dword[edx+sb_offs_delta2],0
346
			jne .no_draw ;¯®¯ «¨ ­  áªà®««¨­£ - ­¥ á­¨¬ ¥¬ 䮪ãá á TreeList
336
			jne .no_draw ;¯®¯ «¨ ­  áªà®««¨­£ - ­¥ á­¨¬ ¥¬ 䮪ãá á TreeList
347
;-------------------------------------------------------------------------------
337
;-------------------------------------------------------------------------------
348
	.no_in_wnd:  ;­¥ ¯®¯ «¨ ¢ ®ª­® - ¯®â¥àï 䮪ãá  (¯à¨ ãá«®¢¨¨ ç⮠䮪ãá ¡ë« ­  ¤ ­­®¬ í¥«¥¬¥­â¥)
338
	.no_in_wnd: ;­¥ ¯®¯ «¨ ¢ ®ª­® - ¯®â¥àï 䮪ãá  (¯à¨ ãá«®¢¨¨ ç⮠䮪ãá ¡ë« ­  ¤ ­­®¬ í¥«¥¬¥­â¥)
349
	mcall 37,2 ;¯à®¢¥à塞 ­ ¦ â®áâì «î¡ëå ª­®¯®ª
339
	mcall SF_MOUSE_GET,SSF_BUTTON
350
	cmp eax,0  ;­¨ç¥£® ­¥ ­ ¦ «¨ eax=0
340
	or eax,eax ;­¨ç¥£® ­¥ ­ ¦ «¨ eax=0
351
	je .no_draw
341
	jz .no_draw
352
		mov ebx,tl_el_focus
342
		mov ebx,tl_el_focus
353
		cmp dword[ebx],edi
343
		cmp [ebx],edi
354
		jne .no_draw ;í«¥¬¥­â ­¥ ¢ 䮪ãá¥
344
		jne .no_draw ;í«¥¬¥­â ­¥ ¢ 䮪ãá¥
355
			mov dword[ebx],0 ;reset focus
345
			mov dword[ebx],0 ;reset focus
356
			mov esi,tl_box_top
346
			mov esi,tl_box_top
357
			add esi,tl_box_height ;esi = coord bottom border
347
			add esi,tl_box_height ;esi = coord bottom border
358
			call tl_draw_cursor ;à¨á㥬 ªãàá®à á ¯®â¥àï­ë¬ 䮪ãᮬ
348
			call tl_draw_cursor ;à¨á㥬 ªãàá®à á ¯®â¥àï­ë¬ 䮪ãᮬ
Line 363... Line 353...
363
endp
353
endp
Line 364... Line 354...
364
 
354
 
365
;®â¬¥­  ¤¥©á⢨ï
355
;®â¬¥­  ¤¥©á⢨ï
366
align 4
356
align 4
367
proc tl_info_undo uses eax edi, tlist:dword
357
proc tl_info_undo uses eax edi, tlist:dword
368
	mov edi,dword[tlist]
358
	mov edi,[tlist]
369
	mov eax,tl_tim_undo
359
	mov eax,tl_tim_undo
370
	cmp tl_ch_tim,eax
360
	cmp tl_ch_tim,eax
371
	jbe @f
361
	jbe @f
372
		inc tl_tim_undo
362
		inc tl_tim_undo
Line 376... Line 366...
376
endp
366
endp
Line 377... Line 367...
377
 
367
 
378
;¯®¢â®à ¤¥©á⢨ï
368
;¯®¢â®à ¤¥©á⢨ï
379
align 4
369
align 4
380
proc tl_info_redo uses edi, tlist:dword
370
proc tl_info_redo uses edi, tlist:dword
381
	mov edi,dword[tlist]
371
	mov edi,[tlist]
382
	cmp tl_tim_undo,1
372
	cmp tl_tim_undo,1
383
	jl @f
373
	jl @f
384
		dec tl_tim_undo
374
		dec tl_tim_undo
385
		call tb_scrol_resize ;®¡à ¡®âª  áªà®««¨­£ 
375
		call tb_scrol_resize ;®¡à ¡®âª  áªà®««¨­£ 
Line 395... Line 385...
395
	jl .no_work
385
	jl .no_work
Line 396... Line 386...
396
 
386
 
397
	push eax ebx ecx edx
387
	push eax ebx ecx edx
398
	mov edx,tl_data_nodes
388
	mov edx,tl_data_nodes
399
	mov ecx,edx
389
	mov ecx,edx
400
	add ecx,sizeof.TreeList
390
	add ecx,sizeof.TreeNode
-
 
391
	call tl_move_next ;long i=node[0].next;
401
	call tl_move_next ;long i=node[0].next;
392
 
402
	mov eax,tl_tim_undo
393
	mov eax,tl_tim_undo
403
	sub tl_ch_tim,eax ;ch_tim-=tim_undo;
-
 
-
 
394
	sub tl_ch_tim,eax ;ch_tim-=tim_undo;
404
	mov eax,tl_ch_tim
395
 
405
	cmp edx,ecx
396
	cmp edx,ecx
406
	jle @f
397
	jle @f
-
 
398
		;if(node[i].tc>ch_tim){ // ¥á«¨ ᮧ¤ ­¨¥ ᨬ¢®«  ¡ë«® ®â¬¥­¥­®
407
		;if(node[i].tc>ch_tim){ // ¥á«¨ ᮧ¤ ­¨¥ ᨬ¢®«  ¡ë«® ®â¬¥­¥­®
399
		mov eax,tl_ch_tim
408
		cmp dword[edx+12],eax
400
		cmp [edx+TreeNode.t_create],eax
409
		jle .no_u1
401
		jle .no_u1
410
			mov dword[edx+12],0
402
			mov dword[edx+TreeNode.t_create],0
Line 411... Line 403...
411
			mov dword[edx+16],0
403
			mov dword[edx+TreeNode.t_delete],0
412
 
404
 
413
			mov ebx, dword[edx+4]
405
			mov ebx, [edx+TreeNode.perv]
414
			imul ebx,sizeof.TreeList
406
			imul ebx,sizeof.TreeNode
415
			add ebx, tl_data_nodes ;.next
407
			add ebx, tl_data_nodes ;.next
Line 416... Line 408...
416
			push dword[edx+8] ;node[node[i].perv].next=node[i].next;
408
			push dword[edx+TreeNode.next] ;node[node[i].perv].next=node[i].next;
417
			pop dword[ebx+8]
409
			pop dword[ebx+TreeNode.next]
418
 
410
 
419
			mov ebx, dword[edx+8]
411
			mov ebx, [edx+TreeNode.next]
420
			imul ebx,sizeof.TreeList
412
			imul ebx,sizeof.TreeNode
421
			add ebx, tl_data_nodes ;.perv
413
			add ebx, tl_data_nodes ;.perv
Line 422... Line 414...
422
			push dword[edx+4] ;node[node[i].next].perv=node[i].perv;
414
			push dword[edx+TreeNode.perv] ;node[node[i].next].perv=node[i].perv;
423
			pop dword[ebx+4]
415
			pop dword[ebx+TreeNode.perv]
424
		.no_u1:
416
		.no_u1:
425
 
417
 
426
		;else if(node[i].td>ch_tim) node[i].td=0; // ¥á«¨ 㤠«¥­¨¥ ᨬ¢®«  ¡ë«® ®â¬¥­¥­®
418
		;else if(node[i].td>ch_tim) node[i].td=0; // ¥á«¨ 㤠«¥­¨¥ ᨬ¢®«  ¡ë«® ®â¬¥­¥­®
427
		cmp dword[edx+16],eax
419
		cmp [edx+TreeNode.t_delete],eax
428
		jle .no_u2
420
		jle .no_u2
429
			mov dword[edx+16],0
421
			mov dword[edx+TreeNode.t_delete],0
430
		.no_u2:
422
		.no_u2:
Line 439... Line 431...
439
;¢ë¢®¤ ᯨ᪠ ­  íªà ­
431
;¢ë¢®¤ ᯨ᪠ ­  íªà ­
440
align 4
432
align 4
441
proc tl_draw, tlist:dword
433
proc tl_draw, tlist:dword
442
	pushad
434
	pushad
443
	;draw dir_list main rect
435
	;draw dir_list main rect
444
	mov edi,dword[tlist]
436
	mov edi,[tlist]
445
	mov ebx,tl_box_left
437
	mov ebx,tl_box_left
446
	shl ebx,16
438
	shl ebx,16
447
	add ebx,tl_box_width
439
	add ebx,tl_box_width
448
	mov ecx,tl_box_top
440
	mov ecx,tl_box_top
449
	shl ecx,16
441
	shl ecx,16
450
	mov cx,tl_capt_cy
442
	mov cx,tl_capt_cy
451
	mov edx,tl_col_zag
443
	mov edx,tl_col_zag
452
	mcall 13 ;draw window caption
444
	mcall SF_DRAW_RECT ;draw window caption
Line 453... Line 445...
453
 
445
 
454
	add ecx,tl_box_top
446
	add ecx,tl_box_top
455
	shl ecx,16
447
	shl ecx,16
456
	add ecx,tl_box_height
448
	add ecx,tl_box_height
457
	sub cx,tl_capt_cy
-
 
458
	mov edx,tl_col_bkg
449
	sub cx,tl_capt_cy
Line 459... Line 450...
459
	int 0x40 ;draw window client rect
450
	mcall ,,,tl_col_bkg ;draw window client rect
460
 
451
 
461
	cmp tl_capt_cy,9 ;9 - minimum caption height
452
	cmp tl_capt_cy,9 ;9 - minimum caption height
462
	jl @f
453
	jl @f
463
	mov ebx,edi ;calculate cursor position
454
	mov ebx,edi ;calculate cursor position
464
	mov eax,tl_cur_pos
455
	mov eax,tl_cur_pos
465
	inc eax
-
 
466
	lea edi,[txt_capt_cur]
456
	inc eax
Line 467... Line 457...
467
	add edi,7
457
	lea edi,[txt_capt_cur.v]
468
	call tl_convert_to_str
458
	stdcall tl_convert_to_str, 5
469
 
459
 
470
	mov edi,ebx
-
 
471
	mov eax,tl_tim_undo
460
	mov edi,ebx
472
	lea edi,[txt_capt_otm]
461
	mov eax,tl_tim_undo
Line 473... Line 462...
473
	add edi,7
462
	lea edi,[txt_capt_otm.v]
474
	call tl_convert_to_str
463
	stdcall tl_convert_to_str, 5
475
	mov edi,ebx ;restore edi
464
	mov edi,ebx ;restore edi
476
 
465
 
477
	mov eax,4 ;draw text captions
466
	mov eax,SF_DRAW_TEXT ;captions
478
	mov ebx,tl_box_left
467
	mov ebx,tl_box_left
Line 494... Line 483...
494
 
483
 
495
	;cycle to nodes
484
	;cycle to nodes
496
	xor eax,eax
485
	xor eax,eax
497
	mov edx,tl_data_nodes
486
	mov edx,tl_data_nodes
498
	mov ecx,edx
487
	mov ecx,edx
Line 499... Line 488...
499
	add ecx,sizeof.TreeList
488
	add ecx,sizeof.TreeNode
500
 
489
 
501
	;*** ¯à®¯ã᪠㧫®¢, ª®â®àë¥ ¯à®¬®â ­ë áªà®««¨­£®¬ ***
490
	;*** ¯à®¯ã᪠㧫®¢, ª®â®àë¥ ¯à®¬®â ­ë áªà®««¨­£®¬ ***
502
	cmp tl_p_scroll,0 ;¥á«¨ ¥áâì 㪠§ â¥«ì ­  áªà®««¨­£
491
	cmp tl_p_scroll,0 ;¥á«¨ ¥áâì 㪠§ â¥«ì ­  áªà®««¨­£
Line 537... Line 526...
537
endp
526
endp
Line 538... Line 527...
538
 
527
 
539
;¯¥à¥å®¤ ­  á«¥¤ã騩 ¢¨¤¨¬ë© 㧥« (¯à®¯ãáª ï § ªàëâë¥)
528
;¯¥à¥å®¤ ­  á«¥¤ã騩 ¢¨¤¨¬ë© 㧥« (¯à®¯ãáª ï § ªàëâë¥)
540
;input:
529
;input:
541
; ecx = pointer to 1 node struct
530
; ecx = pointer to 1 node struct
542
; edx = pointer to some node struct
531
; edx = pointer to node struct
543
; edi = pointer to 'TreeList' struct
532
; edi = pointer to 'TreeList' struct
544
;output:
533
;output:
545
; edx = pointer to next node struct
534
; edx = pointer to next node struct
546
align 4
535
align 4
547
tl_iterat_next:
536
tl_iterat_next:
548
	push bx
537
	push bx
549
	mov bl,0x7f
538
	mov bl,0x7f
550
	cmp byte[edx+3],1
539
	cmp byte[edx+TreeNode.close],1
551
	jne @f
540
	jne @f
552
		mov bl,byte[edx+2]
541
		mov bl,byte[edx+TreeNode.level]
Line 553... Line 542...
553
	@@:
542
	@@:
554
 
543
 
Line 561... Line 550...
561
		cmp edx,ecx
550
		cmp edx,ecx
562
		jle @f
551
		jle @f
563
		call tl_node_not_vis ;¯à®¯ã᪠㤠«¥­­ëå ¨ ®â¬¥­¥­­ëå
552
		call tl_node_not_vis ;¯à®¯ã᪠㤠«¥­­ëå ¨ ®â¬¥­¥­­ëå
564
		cmp al,1
553
		cmp al,1
565
		je .beg0
554
		je .beg0
566
		cmp bl,byte[edx+2] ;¯à®¯ã᪠§ ªàëâëå
555
		cmp bl,byte[edx+TreeNode.level] ;¯à®¯ã᪠§ ªàëâëå
567
		jl .beg0
556
		jl .beg0
568
		@@:
557
		@@:
569
	pop eax
558
	pop eax
570
	pop bx
559
	pop bx
571
	ret
560
	ret
Line 572... Line 561...
572
 
561
 
573
	.else:
562
	.else:
574
		call tl_move_next
563
		call tl_move_next
575
		cmp edx,ecx
564
		cmp edx,ecx
576
		jle .endif
565
		jle .endif
577
		cmp dword[edx+16],0 ;td = 'time delete' -> ¯à®¯ã᪠㤠«¥­­ëå
566
		cmp dword[edx+TreeNode.t_delete],0 ;¯à®¯ã᪠㤠«¥­­ëå
578
		jne .else
567
		jne .else
579
		cmp bl,byte[edx+2] ;¯à®¯ã᪠§ ªàëâëå
568
		cmp bl,byte[edx+TreeNode.level] ;¯à®¯ã᪠§ ªàëâëå
580
		jl .else
569
		jl .else
581
	.endif:
570
	.endif:
582
	pop bx
571
	pop bx
Line 583... Line 572...
583
	ret
572
	ret
584
 
573
 
585
;¯¥à¥å®¤ ­  á«¥¤ã騩 ¢¨¤¨¬ë© 㧥« (¨ ­  § ªàëâë¥ â®¦¥)
574
;¯¥à¥å®¤ ­  á«¥¤ã騩 ¢¨¤¨¬ë© 㧥« (¨ ­  § ªàëâë¥ â®¦¥)
586
;input:
575
;input:
587
; ecx = pointer to 1 node struct
576
; ecx = pointer to 1 node struct
588
; edx = pointer to some node struct
577
; edx = pointer to node struct
589
; edi = pointer to 'TreeList' struct
578
; edi = pointer to 'TreeList' struct
590
;output:
579
;output:
591
; edx = pointer to next visible node struct
580
; edx = pointer to next visible node struct
Line 607... Line 596...
607
	ret
596
	ret
608
	.else:
597
	.else:
609
		call tl_move_next
598
		call tl_move_next
610
		cmp edx,ecx
599
		cmp edx,ecx
611
		jle .endif
600
		jle .endif
612
		cmp dword[edx+16],0 ;td -> time delete
601
		cmp dword[edx+TreeNode.t_delete],0 ;td -> time delete
613
		jne .else
602
		jne .else
614
	.endif:
603
	.endif:
615
	ret
604
	ret
Line 616... Line 605...
616
 
605
 
617
;¯¥à¥å®¤ ­  ¯à¥¤ë¤ã騩 ¢¨¤¨¬ë© 㧥« (¯à®¯ãáª ï § ªàëâë¥)
606
;¯¥à¥å®¤ ­  ¯à¥¤ë¤ã騩 ¢¨¤¨¬ë© 㧥« (¯à®¯ãáª ï § ªàëâë¥)
618
;input:
607
;input:
619
; ecx = pointer to 1 node struct
608
; ecx = pointer to 1 node struct
620
; edx = pointer to some node struct
609
; edx = pointer to node struct
621
; edi = pointer to 'TreeList' struct
610
; edi = pointer to 'TreeList' struct
622
align 4
611
align 4
623
tl_iterat_perv:
-
 
624
	push eax
612
proc tl_iterat_perv uses eax
625
	cmp tl_tim_undo,0
613
	cmp tl_tim_undo,0
Line 626... Line 614...
626
	je .beg1
614
	je .beg1
627
 
615
 
Line 635... Line 623...
635
 
623
 
636
	.beg1:
624
	.beg1:
637
		call tl_move_perv
625
		call tl_move_perv
638
		cmp edx,ecx
626
		cmp edx,ecx
639
		jle @f
627
		jle @f
640
		cmp dword[edx+16],0 ;td = 'time delete' -> ¯à®¯ã᪠㤠«¥­­ëå
628
		cmp dword[edx+TreeNode.t_delete],0 ;td = 'time delete' -> ¯à®¯ã᪠㤠«¥­­ëå
Line 641... Line 629...
641
		jne .beg1
629
		jne .beg1
642
 
630
 
643
	@@:
-
 
644
		call tl_move_max_clo_par
631
	@@:
-
 
632
	call tl_move_max_clo_par
Line 645... Line 633...
645
	pop eax
633
	ret
646
	ret
634
endp
647
 
635
 
648
;­ å®¤¨â த¨â¥«ì᪨© § ªàëâë© ã§¥« ¬ ªá¨¬ «ì­®£® ã஢­ï
636
;­ å®¤¨â த¨â¥«ì᪨© § ªàëâë© ã§¥« ¬ ªá¨¬ «ì­®£® ã஢­ï
649
;input:
637
;input:
650
; edx = pointer to some node struct
638
; edx = pointer to node struct
651
; edi = pointer to 'TreeList' struct
639
; edi = pointer to 'TreeList' struct
652
;output:
640
;output:
653
; edx = pointer closed parent node with maximum level
641
; edx = pointer closed parent node with maximum level
654
align 4
642
align 4
655
proc tl_move_max_clo_par uses eax ebx
643
proc tl_move_max_clo_par uses eax ebx
656
	mov eax,edx
644
	mov eax,edx
657
	xor ebx,ebx
645
	xor ebx,ebx
658
	.beg:
646
	.beg:
659
		call tl_move_par
647
		call tl_move_par
660
		cmp byte[edx+3],1 ;த¨â¥«ì᪨© 㧥« § ªàëâ ?
648
		cmp byte[edx+TreeNode.close],1 ;த¨â¥«ì᪨© 㧥« § ªàëâ ?
661
		jne @f
649
		jne @f
662
			mov eax,edx
650
			mov eax,edx
Line 669... Line 657...
669
	mov edx,eax
657
	mov edx,eax
670
	ret
658
	ret
671
endp
659
endp
Line 672... Line 660...
672
 
660
 
673
;input:
661
;input:
674
; edx = pointer to some node struct
662
; edx = pointer to node struct
675
; edi = pointer to 'TreeList' struct
663
; edi = pointer to 'TreeList' struct
676
;output:
664
;output:
677
; edx = pointer to next node struct
665
; edx = pointer to next node struct
678
align 4
666
align 4
679
tl_move_next:
667
tl_move_next:
680
	mov edx,dword[edx+8]
668
	mov edx,[edx+TreeNode.next]
681
	imul edx,sizeof.TreeList
669
	imul edx,sizeof.TreeNode
682
	add edx,tl_data_nodes
670
	add edx,tl_data_nodes
Line 683... Line 671...
683
	ret
671
	ret
684
 
672
 
685
;input:
673
;input:
686
; edx = pointer to some node struct
674
; edx = pointer to node struct
687
; edi = pointer to 'TreeList' struct
675
; edi = pointer to 'TreeList' struct
688
;output:
676
;output:
689
; edx = pointer to perv node struct
677
; edx = pointer to perv node struct
690
align 4
678
align 4
691
tl_move_perv:
679
tl_move_perv:
692
	mov edx,dword[edx+4]
680
	mov edx,[edx+TreeNode.perv]
693
	imul edx,sizeof.TreeList
681
	imul edx,sizeof.TreeNode
Line 694... Line 682...
694
	add edx,tl_data_nodes
682
	add edx,tl_data_nodes
695
	ret
683
	ret
696
 
684
 
697
;¯¥à¥¤¢¨£ ¥¬áï ­  த¨â¥«ì᪨© 㧥«, ¥á«¨ â ª®£® ­¥â, â® ®áâ ¢«ï¥¬ áâ à®¥ §­ ç¥­¨¥ 㪠§ â¥«ï
685
;¯¥à¥¤¢¨£ ¥¬áï ­  த¨â¥«ì᪨© 㧥«, ¥á«¨ â ª®£® ­¥â, â® ®áâ ¢«ï¥¬ áâ à®¥ §­ ç¥­¨¥ 㪠§ â¥«ï
698
;input:
686
;input:
699
; ecx =
687
; ecx = pointer to 1 node struct
700
; edx = pointer to some node struct
688
; edx = pointer to node struct
701
; edi = pointer to 'TreeList' struct
689
; edi = pointer to 'TreeList' struct
702
;output:
690
;output:
703
; edx = pointer to parent node struct
691
; edx = pointer to parent node struct
704
align 4
692
align 4
705
tl_move_par:
693
tl_move_par:
706
	cmp byte[edx+2],0
694
	cmp byte[edx+TreeNode.level],0
707
	je .end_f ;㧥« 0-£® ã஢­ï ­¥ ¬®¦¥â ¡ëâì ¤®ç¥à­¨¬
695
	je .end_f ;㧥« 0-£® ã஢­ï ­¥ ¬®¦¥â ¡ëâì ¤®ç¥à­¨¬
708
	push eax ebx esi
696
	push eax ebx esi
709
	mov esi,edx ;copy node pointer (edx)
697
	mov esi,edx ;copy node pointer (edx)
710
	mov bl,byte[edx+2]
698
	mov bl,byte[edx+TreeNode.level]
711
	@@:
699
	@@:
712
		call tl_move_perv
700
		call tl_move_perv
713
		cmp edx,ecx
701
		cmp edx,ecx
714
		jle @f ;¢á¥ ¢ëè¥ áâ®ï騥 ã§«ë ­¥ த¨â¥«ì᪨¥
702
		jle @f ;¢á¥ ¢ëè¥ áâ®ï騥 ã§«ë ­¥ த¨â¥«ì᪨¥
715
		call tl_node_not_vis ;¯à®¯ã᪠㤠«¥­­ëå ¨ ®â¬¥­¥­­ëå
703
		call tl_node_not_vis ;¯à®¯ã᪠㤠«¥­­ëå ¨ ®â¬¥­¥­­ëå
716
		cmp al,1
704
		cmp al,1
717
		je @b
705
		je @b
718
		cmp byte[edx+2],bl
706
		cmp byte[edx+TreeNode.level],bl
719
		jl .end_0 ;㤠筮 ­ è«¨ த¨â¥«ì᪨© 㧥«
707
		jl .end_0 ;㤠筮 ­ è«¨ த¨â¥«ì᪨© 㧥«
720
		jmp @b
708
		jmp @b
Line 725... Line 713...
725
	.end_f:
713
	.end_f:
726
	ret
714
	ret
Line 727... Line 715...
727
 
715
 
728
;¯à®¢¥àï¥â ¢¨¤¨¬ë© «¨ 㪠§ ­­ë© 㧥« á ãç¥â®¬: ¤®¡ ¢«¥­¨©, 㤠«¥­¨©, ®â¬¥­ ¤¥©á⢨©
716
;¯à®¢¥àï¥â ¢¨¤¨¬ë© «¨ 㪠§ ­­ë© 㧥« á ãç¥â®¬: ¤®¡ ¢«¥­¨©, 㤠«¥­¨©, ®â¬¥­ ¤¥©á⢨©
729
;input:
717
;input:
730
; edx = pointer to symbol struct
718
; edx = pointer to node struct
731
; edi = pointer to 'TreeList' struct
719
; edi = pointer to 'TreeList' struct
732
;output:
720
;output:
733
; al = 1 if sumbol not visible
721
; al = 1 if sumbol not visible
734
; (node[i].td+tim_Undo<=ch_tim && node[i].td) || (node[i].tc>ch_tim-tim_Undo)
722
; (node[i].td+tim_Undo<=ch_tim && node[i].td) || (node[i].tc>ch_tim-tim_Undo)
735
align 4
723
align 4
736
tl_node_not_vis:
724
tl_node_not_vis:
737
	cmp dword[edx+16],0
725
	cmp dword[edx+TreeNode.t_delete],0
738
	je @f
726
	je @f
739
	mov eax,dword[edx+16] ;eax=node[i].td
727
	mov eax,[edx+TreeNode.t_delete] ;eax=node[i].td
740
	add eax,tl_tim_undo
728
	add eax,tl_tim_undo
741
	cmp eax,tl_ch_tim
729
	cmp eax,tl_ch_tim
742
	jg @f
730
	jg @f
743
		mov al,1
731
		mov al,1
744
		ret
732
		ret
Line 745... Line 733...
745
	@@:
733
	@@:
746
 
734
 
747
	mov eax,tl_ch_tim
735
	mov eax,tl_ch_tim
748
	sub eax,tl_tim_undo
736
	sub eax,tl_tim_undo
749
	cmp dword[edx+12],eax ;tc -> time create
737
	cmp [edx+TreeNode.t_create],eax ;time create
750
	jle @f
738
	jle @f
751
		mov al,1
739
		mov al,1
752
		ret
740
		ret
Line 767... Line 755...
767
	cmp tl_data_img_sys,0 ;ᬮâਬ ¥áâì «¨ 㪠§ â¥«ì ­  ª à⨭ªã á¨á⥬­ëå ¨ª®­®ª
755
	cmp tl_data_img_sys,0 ;ᬮâਬ ¥áâì «¨ 㪠§ â¥«ì ­  ª à⨭ªã á¨á⥬­ëå ¨ª®­®ª
768
	jne @f
756
	jne @f
769
		mov ebx,tl_box_left
757
		mov ebx,tl_box_left
770
		shl ebx,16
758
		shl ebx,16
771
		mov bx,tl_img_cx
759
		mov bx,tl_img_cx
772
		xor ecx,ecx
-
 
773
		mov cx,tl_img_cy
760
		movzx ecx,tl_img_cy
774
		imul ecx,eax
761
		imul ecx,eax
775
		add ecx,tl_box_top
762
		add ecx,tl_box_top
776
		add cx,tl_capt_cy
763
		add cx,tl_capt_cy
Line 777... Line 764...
777
 
764
 
Line 786... Line 773...
786
		jge .crop0
773
		jge .crop0
787
			mov cx,si ;¥á«¨ ªãàá®à ¢¨¤¥­ ç áâ¨ç­® (¯®¯ « ­  ­¨¦­îî £à ­¨æã)
774
			mov cx,si ;¥á«¨ ªãàá®à ¢¨¤¥­ ç áâ¨ç­® (¯®¯ « ­  ­¨¦­îî £à ­¨æã)
788
		.crop0:
775
		.crop0:
Line 789... Line 776...
789
 
776
 
790
		mov edx,tl_col_txt
777
		mov edx,tl_col_txt
791
		mcall 13 ;à¨á㥬 ¯à®á⮩ ¯àאַ㣮«ì­¨ª, â.ª. ­¥â á¨á⥬­ëå ¨ª®­®ª
778
		mcall SF_DRAW_RECT ;à¨á㥬 ¯à®á⮩ ¯àאַ㣮«ì­¨ª, â.ª. ­¥â á¨á⥬­ëå ¨ª®­®ª
792
		jmp .end_f
779
		jmp .end_f
793
	@@:
780
	@@:
794
	mov ebx,tl_data_img_sys
781
	mov ebx,tl_data_img_sys
795
	imul ax,tl_img_cy
782
	imul ax,tl_img_cy
Line 801... Line 788...
801
 
788
 
802
	mov ecx,tl_el_focus ;¯à®¢¥à塞 ¢ 䮪ãá¥ í«¥¬¥­â ¨«¨ ­¥â
789
	mov ecx,tl_el_focus ;¯à®¢¥à塞 ¢ 䮪ãá¥ í«¥¬¥­â ¨«¨ ­¥â
803
	cmp dword[ecx],edi
790
	cmp dword[ecx],edi
804
	je .focus
791
	je .focus
805
		;¥á«¨ ­¥ ¢ 䮪ãᥠᤢ¨£ ¥¬ ª®®à¤¨­ âë ­  ¨ª®­ªã ­¥  ªâ¨¢­®£® ªãàá®à 
-
 
806
		xor eax,eax
-
 
807
		xor ecx,ecx
792
		;¥á«¨ ­¥ ¢ 䮪ãᥠᤢ¨£ ¥¬ ª®®à¤¨­ âë ­  ¨ª®­ªã ­¥  ªâ¨¢­®£® ªãàá®à 
808
		mov cx,tl_img_cx
793
		movzx ecx,tl_img_cx
809
		mov ax,tl_img_cy
794
		movzx eax,tl_img_cy
810
		imul eax,ecx
795
		imul eax,ecx
811
		imul eax,4*3 ;4=icon index 3=rgb
796
		imul eax,4*3 ;4=icon index 3=rgb
812
		add ebx,eax
797
		add ebx,eax
Line 824... Line 809...
824
		cmp si,tl_img_cy
809
		cmp si,tl_img_cy
825
		jge .crop1
810
		jge .crop1
826
			mov cx,si ;¥á«¨ ªãàá®à ¢¨¤¥­ ç áâ¨ç­® (¯®¯ « ­  ­¨¦­îî £à ­¨æã)
811
			mov cx,si ;¥á«¨ ªãàá®à ¢¨¤¥­ ç áâ¨ç­® (¯®¯ « ­  ­¨¦­îî £à ­¨æã)
827
		.crop1:
812
		.crop1:
Line 828... Line 813...
828
 
813
 
829
		mcall 7 ;à¨á㥬 ¨ª®­ªã ªãàá®à 
814
		mcall SF_PUT_IMAGE ;à¨á㥬 ¨ª®­ªã ªãàá®à 
830
	.end_f:
815
	.end_f:
831
	ret
816
	ret
Line 832... Line 817...
832
endp
817
endp
Line 841... Line 826...
841
	cmp eax,0
826
	cmp eax,0
842
	jl .end_f ;ªãàá®à ­ å®¤¨âáï ¢ëè¥ ®ª­ , ¢ ®¡« á⨠¯à®ªàã祭­®© áªà®««¨­£®¬
827
	jl .end_f ;ªãàá®à ­ å®¤¨âáï ¢ëè¥ ®ª­ , ¢ ®¡« á⨠¯à®ªàã祭­®© áªà®««¨­£®¬
843
		mov ebx,tl_box_left
828
		mov ebx,tl_box_left
844
		shl ebx,16
829
		shl ebx,16
845
		mov bx,tl_img_cx
830
		mov bx,tl_img_cx
846
		xor ecx,ecx
-
 
847
		mov cx,tl_img_cy
831
		movzx ecx,tl_img_cy
848
		imul ecx,eax
832
		imul ecx,eax
849
		add ecx,tl_box_top
833
		add ecx,tl_box_top
850
		add cx,tl_capt_cy
834
		add cx,tl_capt_cy
Line 851... Line 835...
851
 
835
 
Line 858... Line 842...
858
		mov cx,tl_img_cy
842
		mov cx,tl_img_cy
859
		cmp si,tl_img_cy
843
		cmp si,tl_img_cy
860
		jge @f
844
		jge @f
861
			mov cx,si ;¥á«¨ ªãàá®à ¢¨¤¥­ ç áâ¨ç­® (¯®¯ « ­  ­¨¦­îî £à ­¨æã)
845
			mov cx,si ;¥á«¨ ªãàá®à ¢¨¤¥­ ç áâ¨ç­® (¯®¯ « ­  ­¨¦­îî £à ­¨æã)
862
		@@:
846
		@@:
863
		mcall 13,,,tl_col_bkg ;à¨á㥬 ¯à®á⮩ ¯àאַ㣮«ì­¨ª á ä®­®¢ë¬ 梥⮬
847
		mcall SF_DRAW_RECT,,,tl_col_bkg ;à¨á㥬 ¯à®á⮩ ¯àאַ㣮«ì­¨ª á ä®­®¢ë¬ 梥⮬
864
	.end_f:
848
	.end_f:
865
	ret
849
	ret
866
endp
850
endp
Line 867... Line 851...
867
 
851
 
Line 884... Line 868...
884
	ret
868
	ret
Line 885... Line 869...
885
 
869
 
886
;à¨áã¥â 㧥« á: ª à⨭ª®©, ¯®¤¯¨áìî, ¨ª®­ª®© ®âªàëâ¨ï/§ ªàëâ¨ï ¨ «¨­¨ï¬¨ ª த¨â. 㧫ã
870
;à¨áã¥â 㧥« á: ª à⨭ª®©, ¯®¤¯¨áìî, ¨ª®­ª®© ®âªàëâ¨ï/§ ªàëâ¨ï ¨ «¨­¨ï¬¨ ª த¨â. 㧫ã
887
;input:
871
;input:
888
; eax = node position (0, ..., max_nodes-scroll_pos) ­¥ ¤® tl_box_height/tl_img_cy
872
; eax = node position (0, ..., max_nodes-scroll_pos) ­¥ ¤® tl_box_height/tl_img_cy
889
; edx = pointer to some node struct
873
; edx = pointer to node struct
890
; edi = pointer to 'TreeList' struct
874
; edi = pointer to 'TreeList' struct
891
; esi = coord of bottom border
875
; esi = coord of bottom border
892
align 4
876
align 4
893
proc tl_draw_node uses eax ebx ecx edx esi
877
proc tl_draw_node uses eax ebx ecx edx esi
894
	mov ebx,1 ;1 - ¬¥áâ® ¯®¤ ªãàá®à
878
	mov ebx,1 ;1 - ¬¥áâ® ¯®¤ ªãàá®à
895
	bt tl_style,2 ;tl_list_box_mode
879
	bt tl_style,2 ;tl_list_box_mode
896
	jc @f
880
	jc @f
897
		inc ebx ;+1 - ¬¥áâ® ¯®¤ §­ ª +,-
881
		inc ebx ;+1 - ¬¥áâ® ¯®¤ §­ ª +,-
898
		add bl,byte[edx+2] ;¤®¡ ¢«ï¥¬ ã஢¥­ì í«¥¬¥­â  ¤«ï ¥£® ãç¥â  ¢ «¥¢®¬ ®âáâ㯥 ¨ª®­ª¨
882
		add bl,byte[edx+TreeNode.level] ;¤®¡ ¢«ï¥¬ ã஢¥­ì í«¥¬¥­â  ¤«ï ¥£® ãç¥â  ¢ «¥¢®¬ ®âáâ㯥 ¨ª®­ª¨
899
	@@:
883
	@@:
900
	imul bx,tl_img_cx
884
	imul bx,tl_img_cx
Line 901... Line 885...
901
	add ebx,tl_box_left
885
	add ebx,tl_box_left
902
 
886
 
903
	shl ebx,16
-
 
904
	mov bx,tl_img_cx
887
	shl ebx,16
905
	xor ecx,ecx
888
	mov bx,tl_img_cx
906
	mov cx,tl_img_cy
889
	movzx ecx,tl_img_cy
907
	imul ecx,eax
890
	imul ecx,eax
908
	add cx,tl_capt_cy
891
	add cx,tl_capt_cy
Line 923... Line 906...
923
	@@:
906
	@@:
924
		call tl_draw_node_caption
907
		call tl_draw_node_caption
925
	.crop:
908
	.crop:
926
	mov esi,ecx ;save ecx
909
	mov esi,ecx ;save ecx
Line -... Line 910...
-
 
910
 
927
 
911
	push edx
928
	cmp tl_data_img,0
912
	cmp tl_data_img,0
929
	jne .draw_img_n
-
 
930
		push edx
-
 
931
		mov edx,tl_col_txt
913
	jne .draw_img_n
932
		mcall 13 ;draw node rect
-
 
933
		pop edx
914
		mcall SF_DRAW_RECT,,,tl_col_txt ;draw node rect
934
	jmp @f
915
		jmp @f
935
	.draw_img_n:
916
	.draw_img_n:
936
	push ebx edx esi
-
 
937
		xor esi,esi
917
	push ebx esi
938
		mov si,word[edx] ;get icon type
918
		movzx esi,word[edx+TreeNode.type] ;get icon type
939
		mov edx,ebx
919
		mov edx,ebx
940
		ror ecx,16
920
		ror ecx,16
941
		mov dx,cx
921
		mov dx,cx
942
		mov cx,bx
922
		mov cx,bx
Line 945... Line 925...
945
		imul bx,tl_img_cx
925
		imul bx,tl_img_cx
946
		imul bx,tl_img_cy
926
		imul bx,tl_img_cy
947
		imul ebx,esi ;esi = icon index
927
		imul ebx,esi ;esi = icon index
948
		add ebx,tl_data_img
928
		add ebx,tl_data_img
Line 949... Line 929...
949
 
929
 
950
		mcall 7 ;draw node icon '-'
930
		mcall SF_PUT_IMAGE ;draw node icon '-'
951
	pop esi edx ebx
931
	pop esi ebx
-
 
932
	@@:
Line 952... Line 933...
952
	@@:
933
	pop edx
953
 
934
 
954
	mov al,byte[edx+2] ;draw minus '-'
935
	mov al,byte[edx+TreeNode.level] ;draw minus '-'
Line 955... Line 936...
955
	mov ecx,tl_data_nodes
936
	mov ecx,tl_data_nodes
956
	add ecx,sizeof.TreeList
937
	add ecx,sizeof.TreeNode
957
 
938
 
958
	mov ah,10 ;get icon index '+' or '-' ?
939
	mov ah,10 ;get icon index '+' or '-' ?
959
	cmp byte[edx+3],1
940
	cmp byte[edx+TreeNode.close],1
Line 960... Line 941...
960
	jne .close
941
	jne .close
Line 972... Line 953...
972
 
953
 
973
;à¨áã¥â ¨ª®­ª¨ ®âªàë⮣® ¨«¨ § ªàë⮣® 㧫  (®¡ëç­® + ¨«¨ -)
954
;à¨áã¥â ¨ª®­ª¨ ®âªàë⮣® ¨«¨ § ªàë⮣® 㧫  (®¡ëç­® + ¨«¨ -)
974
;input:
955
;input:
975
; al = ã஢¥­ì í«¥¬¥­â 
956
; al = ã஢¥­ì í«¥¬¥­â 
976
; ecx = pointer to 1 node struct
957
; ecx = pointer to 1 node struct
977
; edx = pointer to some node struct
958
; edx = pointer to node struct
978
;...
959
;...
979
align 4
960
align 4
980
proc tl_draw_node_icon_opn_clo uses eax ebx ecx edx esi
961
proc tl_draw_node_icon_opn_clo uses eax ebx ecx edx esi
981
	inc al
962
	inc al
982
	call tl_iterat_next_all ;get next visible item
963
	call tl_iterat_next_all ;get next visible item
983
	cmp edx,ecx
964
	cmp edx,ecx
984
	jle @f
965
	jle @f
985
		mov ecx,esi ;load ecx
966
		mov ecx,esi ;load ecx
986
		cmp al,byte[edx+2]
967
		cmp al,byte[edx+TreeNode.level]
987
		jne @f
968
		jne @f
988
		ror ebx,16
969
		ror ebx,16
989
		sub bx,tl_img_cx
970
		sub bx,tl_img_cx
990
		ror ebx,16
971
		ror ebx,16
991
		cmp tl_data_img_sys,0
972
		cmp tl_data_img_sys,0
992
		jne .draw_img_s
973
		jne .draw_img_s
993
			mcall 13,,,tl_col_txt ;draw minus rect, if not system icons
974
			mcall SF_DRAW_RECT,,,tl_col_txt ;draw minus rect, if not system icons
994
			jmp @f
975
			jmp @f
995
		.draw_img_s:
976
		.draw_img_s:
996
		mov ecx,esi ;load ecx
977
		mov ecx,esi ;load ecx
997
		mov edx,ebx
978
		mov edx,ebx
Line 1004... Line 985...
1004
		imul bx,tl_img_cy
985
		imul bx,tl_img_cy
1005
		shr eax,8
986
		shr eax,8
1006
		and eax,0xff
987
		and eax,0xff
1007
		imul ebx,eax ;eax = icon index
988
		imul ebx,eax ;eax = icon index
1008
		add ebx,tl_data_img_sys
989
		add ebx,tl_data_img_sys
1009
		mcall 7 ;draw minus icon '-'
990
		mcall SF_PUT_IMAGE ;draw minus icon '-'
1010
	@@:
991
	@@:
1011
	ret
992
	ret
1012
endp
993
endp
Line 1013... Line 994...
1013
 
994
 
1014
;à¨á®¢ ­¨¥ «¨­¨¨ ª த¨â¥«ì᪮¬ã í«¥¬¥­âã
995
;à¨á®¢ ­¨¥ «¨­¨¨ ª த¨â¥«ì᪮¬ã í«¥¬¥­âã
1015
;input:
996
;input:
1016
; al = ã஢¥­ì í«¥¬¥­â 
997
; al = ã஢¥­ì í«¥¬¥­â 
1017
; ecx = pointer to 1 node struct
998
; ecx = pointer to 1 node struct
1018
; edx = pointer to some node struct
999
; edx = pointer to node struct
1019
;...
1000
;...
1020
align 4
1001
align 4
1021
tl_draw_node_icon_par_lin:
1002
tl_draw_node_icon_par_lin:
1022
	cmp byte[edx+3],1
1003
	cmp byte[edx+TreeNode.close],1
-
 
1004
	je .close
-
 
1005
	or al,al
1023
	je .close
1006
	jz .close
1024
	push eax ebx ecx edx esi
-
 
1025
	cmp al,0
-
 
1026
	je @f
1007
	push eax ebx ecx edx esi
1027
		call tl_iterat_next_all ;get next visible item
1008
		call tl_iterat_next_all ;get next visible item
1028
		cmp edx,ecx
1009
		cmp edx,ecx
1029
		jle .line3 ;if end of list
1010
		jle .line3 ;if end of list
1030
			cmp al,byte[edx+2]
1011
			cmp al,byte[edx+TreeNode.level]
1031
			jne .line3 ;jg ???
1012
			jne .line3 ;jg ???
1032
			mov eax,3 ;line in middle element
1013
			mov eax,3 ;line in middle element
1033
			jmp .line2
1014
			jmp .line2
1034
		.line3:
1015
		.line3:
Line 1039... Line 1020...
1039
		ror ebx,16
1020
		ror ebx,16
1040
		sub bx,tl_img_cx
1021
		sub bx,tl_img_cx
1041
		ror ebx,16
1022
		ror ebx,16
1042
		cmp tl_data_img_sys,0
1023
		cmp tl_data_img_sys,0
1043
		jne .draw_img_s
1024
		jne .draw_img_s
1044
			mcall 13,,,tl_col_txt ;draw minus rect, if not system icons
1025
			mcall SF_DRAW_RECT,,,tl_col_txt ;draw minus rect, if not system icons
1045
			jmp @f
1026
			jmp @f
1046
		.draw_img_s:
1027
		.draw_img_s:
1047
		mov edx,ebx
1028
		mov edx,ebx
1048
		ror ecx,16
1029
		ror ecx,16
1049
		mov dx,cx
1030
		mov dx,cx
Line 1053... Line 1034...
1053
		imul bx,tl_img_cx
1034
		imul bx,tl_img_cx
1054
		imul bx,tl_img_cy
1035
		imul bx,tl_img_cy
Line 1055... Line 1036...
1055
 
1036
 
1056
		imul ebx,eax ;eax = icon index
1037
		imul ebx,eax ;eax = icon index
1057
		add ebx,tl_data_img_sys
1038
		add ebx,tl_data_img_sys
1058
		mcall 7 ;draw line icon
1039
		mcall SF_PUT_IMAGE ;draw line icon
1059
	@@:
1040
		@@:
1060
	pop esi edx ecx ebx eax
1041
	pop esi edx ecx ebx eax
1061
	.close:
1042
	.close:
Line 1062... Line 1043...
1062
	ret
1043
	ret
1063
 
1044
 
1064
 
1045
 
1065
;input:
1046
;input:
1066
; al = ã஢¥­ì í«¥¬¥­â 
1047
; al = ã஢¥­ì í«¥¬¥­â 
1067
; ebx = (node.left shl 16) + tl_img_cx
1048
; ebx = (node.left shl 16) + tl_img_cx
1068
; ecx = pointer to 1 node struct
1049
; ecx = pointer to 1 node struct
1069
; edx = pointer to some node struct
1050
; edx = pointer to node struct
1070
; edi = pointer to 'TreeList' struct
1051
; edi = pointer to 'TreeList' struct
1071
align 4
1052
align 4
1072
proc tl_draw_node_icon_par_lin_up uses eax ebx ecx edx esi
1053
proc tl_draw_node_icon_par_lin_up uses eax ebx ecx edx esi
1073
	cmp tl_data_img_sys,0 ;if not image
1054
	cmp tl_data_img_sys,0 ;if not image
1074
	je @f
1055
	je @f
1075
	cmp al,0
1056
	or al,al
1076
	je @f
1057
	jz @f
1077
		xor esi,esi ;¢ si ¡ã¤¥¬ ­ áç¨â뢠âì ª®«-¢® ¨ª®­®ª, ­ã¦­ëå ¤«ï ¯à®à¨á®¢ª¨ «¨­¨¨
1058
		xor esi,esi ;¢ si ¡ã¤¥¬ ­ áç¨â뢠âì ª®«-¢® ¨ª®­®ª, ­ã¦­ëå ¤«ï ¯à®à¨á®¢ª¨ «¨­¨¨
1078
;--- 横« ¤«ï ¢ëç¨á«¥­¨ï ª®««¨ç¥á⢠ ¢¥à⨪ «ì­ëå «¨­¨© ---
1059
;--- 横« ¤«ï ¢ëç¨á«¥­¨ï ª®««¨ç¥á⢠ ¢¥à⨪ «ì­ëå «¨­¨© ---
1079
		.cycle0:
1060
		.cycle0:
Line 1080... Line 1061...
1080
			call tl_iterat_perv ;get perv visible item
1061
			call tl_iterat_perv ;get perv visible item
1081
			cmp edx,ecx
1062
			cmp edx,ecx
1082
			jle .cycle1 ;if begin of list
1063
			jle .cycle1 ;if begin of list
1083
 
1064
 
1084
			cmp byte[edx+2],al
1065
			cmp byte[edx+TreeNode.level],al
1085
			jle .cycle0end ;ã஢¥­ì ¢¥àå­¥£® í«¥¬¥­â  ­¥ âॡã¥â ¯à®à¨á®¢ª¨
1066
			jle .cycle0end ;ã஢¥­ì ¢¥àå­¥£® í«¥¬¥­â  ­¥ âॡã¥â ¯à®à¨á®¢ª¨
1086
			inc si
1067
			inc si
1087
			jmp .cycle0
1068
			jmp .cycle0
Line 1088... Line 1069...
1088
		.cycle0end:
1069
		.cycle0end:
1089
		cmp si,0 ;si = ª®«-¢® ¨ª®­®ª «¨­¨¨ ª®â®àë¥ ­ã¦­® ­ à¨á®¢ âì ᢥàåã
1070
		or si,si ;si = ª®«-¢® ¨ª®­®ª «¨­¨¨ ª®â®àë¥ ­ã¦­® ­ à¨á®¢ âì ᢥàåã
Line 1108... Line 1089...
1108
		imul bx,tl_img_cy
1089
		imul bx,tl_img_cy
1109
		add ebx,tl_data_img_sys
1090
		add ebx,tl_data_img_sys
Line 1110... Line 1091...
1110
 
1091
 
1111
		add esi,tl_box_top
1092
		add esi,tl_box_top
1112
		add si,tl_capt_cy ;si = ¢¥àå­ïï £à ­¨æ  ®ª­ 
1093
		add si,tl_capt_cy ;si = ¢¥àå­ïï £à ­¨æ  ®ª­ 
1113
		mov eax,7
1094
		mov eax,SF_PUT_IMAGE
1114
;--- 横« ¤«ï à¨á®¢ ­¨ï ¢¥à⨪ «ì­®© «¨­¨¨ ---
1095
;--- 横« ¤«ï à¨á®¢ ­¨ï ¢¥à⨪ «ì­®© «¨­¨¨ ---
1115
		.cycle1:
1096
		.cycle1:
1116
		sub dx,tl_img_cy ;¯®¤­¨¬ ¥¬ ª®®à¤¨­ âã y ¢¢¥àå
1097
		sub dx,tl_img_cy ;¯®¤­¨¬ ¥¬ ª®®à¤¨­ âã y ¢¢¥àå
1117
		cmp dx,si
1098
		cmp dx,si
Line 1132... Line 1113...
1132
align 4
1113
align 4
1133
tl_get_rows_count:
1114
tl_get_rows_count:
1134
	push ecx edx
1115
	push ecx edx
1135
		mov eax,tl_box_height
1116
		mov eax,tl_box_height
1136
		sub ax,tl_capt_cy
1117
		sub ax,tl_capt_cy
1137
		xor ecx,ecx
-
 
1138
		mov cx,tl_img_cy
1118
		movzx ecx,tl_img_cy
1139
		xor edx,edx
1119
		xor edx,edx
1140
		div ecx
1120
		div ecx
1141
	pop edx ecx
1121
	pop edx ecx
1142
	ret
1122
	ret
Line 1143... Line 1123...
1143
 
1123
 
1144
;input:
1124
;input:
1145
; eax = node position
1125
; eax = node position
1146
; ebx = [ª®®à¤¨­ â  ¯® ®á¨ x]*65536 + [img_cx]
1126
; ebx = [ª®®à¤¨­ â  ¯® ®á¨ x]*65536 + [img_cx]
1147
; ecx = [ª®®à¤¨­ â  ¯® ®á¨ y]*65536 + [img_cy]
1127
; ecx = [ª®®à¤¨­ â  ¯® ®á¨ y]*65536 + [img_cy]
1148
; edx = pointer to some node struct
1128
; edx = pointer to node struct
1149
; edi = pointer to TreeInfo struct
1129
; edi = pointer to TreeInfo struct
1150
align 4
1130
align 4
1151
proc tl_draw_node_caption uses ebx ecx edx esi
1131
proc tl_draw_node_caption uses ebx ecx edx esi
1152
	xor esi,esi
1132
	xor esi,esi
Line 1172... Line 1152...
1172
		mov ebx,ecx
1152
		mov ebx,ecx
1173
		add bx,tl_img_cy ;¢ëà ¢­¨¢¨­¨¥ ¯® ­¨¦­¥© £à ­¨æ¥ ¨ª®­ª¨
1153
		add bx,tl_img_cy ;¢ëà ¢­¨¢¨­¨¥ ¯® ­¨¦­¥© £à ­¨æ¥ ¨ª®­ª¨
1174
		sub bx,9 ;®â­¨¬ ¥¬ ¢ëá®âã ⥪áâ 
1154
		sub bx,9 ;®â­¨¬ ¥¬ ¢ëá®âã ⥪áâ 
1175
		mov ecx,tl_col_txt
1155
		mov ecx,tl_col_txt
1176
		and ecx,0xffffff
1156
		and ecx,0xffffff
1177
		mcall 4
1157
		mcall SF_DRAW_TEXT
1178
	@@:
1158
	@@:
1179
	ret
1159
	ret
1180
endp
1160
endp
Line 1181... Line 1161...
1181
 
1161
 
Line 1226... Line 1206...
1226
; tlist - 㪠§ â¥«ì ­  áâàãªâãàã «¨áâ 
1206
; tlist - 㪠§ â¥«ì ­  áâàãªâãàã «¨áâ 
1227
; n_opt - ®¯æ¨¨ ¤®¡ ¢«¥­¨ï
1207
; n_opt - ®¯æ¨¨ ¤®¡ ¢«¥­¨ï
1228
; n_info - 㪠§ â¥«ì ­  ¤®¡ ¢«ï¥¬ë¥ ¤ ­­ë¥
1208
; n_info - 㪠§ â¥«ì ­  ¤®¡ ¢«ï¥¬ë¥ ¤ ­­ë¥
1229
align 4
1209
align 4
1230
proc tl_node_add uses eax ebx ecx edx edi, tlist:dword, n_opt:dword, n_info:dword
1210
proc tl_node_add uses eax ebx ecx edx edi, tlist:dword, n_opt:dword, n_info:dword
1231
	mov edi,dword[tlist]
1211
	mov edi,[tlist]
Line 1232... Line 1212...
1232
 
1212
 
Line 1233... Line 1213...
1233
	call tl_info_set_undo
1213
	call tl_info_set_undo
1234
 
1214
 
1235
	mov ebx,sizeof.TreeList
1215
	mov ebx,sizeof.TreeNode
1236
	imul ebx,tl_info_max_count
1216
	imul ebx,tl_info_max_count
1237
	add ebx,tl_data_nodes
1217
	add ebx,tl_data_nodes
1238
;--
1218
;--
1239
	call tl_get_cur_node_index ;eax=po_t
1219
	call tl_get_cur_node_index ;eax=po_t
1240
	imul eax,sizeof.TreeList
1220
	imul eax,sizeof.TreeNode
1241
	add eax,tl_data_nodes
1221
	add eax,tl_data_nodes
1242
	mov edx,eax
1222
	mov edx,eax
1243
	call tl_move_perv
1223
	call tl_move_perv
1244
	call tl_get_node_index ;eax = index of pointer [edx]
1224
	call tl_get_node_index ;eax = index of pointer [edx]
1245
;--
1225
;--
1246
	mov edx,sizeof.TreeList
1226
	mov edx,sizeof.TreeNode
1247
	shl edx,1
1227
	shl edx,1
1248
	add edx,tl_data_nodes
1228
	add edx,tl_data_nodes
1249
	@@: ;for(i=2;i
1229
	@@: ;for(i=2;i
1250
		cmp dword [edx+12],0
1230
		cmp dword[edx+TreeNode.t_create],0
1251
		jne .u0
1231
		jne .u0
Line 1252... Line 1232...
1252
		cmp dword [edx+16],0
1232
		cmp dword[edx+TreeNode.t_delete],0
1253
		jne .u0
1233
		jne .u0
1254
 
1234
 
1255
		inc tl_ch_tim
1235
		inc tl_ch_tim
1256
		mov ecx,dword[n_opt]
1236
		mov ecx,dword[n_opt]
1257
		ror ecx,16 ;cx = type
1237
		ror ecx,16 ;cx = type
1258
		mov word[edx],cx
1238
		mov word[edx+TreeNode.type],cx
1259
		rol ecx,8 ;cl = close|open
1239
		rol ecx,8 ;cl = close|open
1260
		mov byte[edx+3],cl ;node[i].clo
1240
		mov byte[edx+TreeNode.close],cl ;node[i].clo
1261
		mov byte[edx+2],0 ;node[i].lev=0
1241
		mov byte[edx+TreeNode.level],0 ;node[i].lev=0
1262
		bt tl_style,2 ;tl_list_box_mode
1242
		bt tl_style,2 ;tl_list_box_mode
1263
		jc .l_box_m
1243
		jc .l_box_m
1264
			mov cl,byte[n_opt]
1244
			mov cl,byte[n_opt]
1265
			mov byte[edx+2],cl ;node[i].lev
1245
			mov byte[edx+TreeNode.level],cl ;node[i].lev
1266
		.l_box_m:
1246
		.l_box_m:
1267
		push tl_ch_tim       ;node[i].tc=ch_tim;
1247
		push tl_ch_tim       ;node[i].tc=ch_tim;
1268
		pop dword[edx+12]
1248
		pop dword[edx+TreeNode.t_create]
1269
		mov [edx+4],eax ;node[i].perv=po_t;
1249
		mov [edx+TreeNode.perv],eax ;node[i].perv=po_t;
1270
		;*** copy node data ***
1250
		;*** copy node data ***
1271
		push esi
1251
		push esi
Line 1281... Line 1261...
1281
		mov edi,dword[n_info] ;pointer to node data
1261
		mov edi,dword[n_info] ;pointer to node data
1282
		xchg edi,esi
1262
		xchg edi,esi
1283
		rep movsb
1263
		rep movsb
Line 1284... Line 1264...
1284
 
1264
 
1285
		mov esi,edi
1265
		mov esi,edi
1286
		mov edi,dword[tlist] ;restore edi
1266
		mov edi,[tlist] ;restore edi
1287
		mov cx,tl_info_capt_offs
1267
		mov cx,tl_info_capt_offs
1288
		cmp cx,tl_info_size
1268
		cmp cx,tl_info_size
1289
		jge .no_text_data
1269
		jge .no_text_data
1290
		cmp tl_info_capt_len,0 ;¯à®¢¥à塞 ¥áâì «¨ ®£à ­¨ç¥­¨¥ ­  ¤«¨­­ã áâப¨
1270
		cmp tl_info_capt_len,0 ;¯à®¢¥à塞 ¥áâì «¨ ®£à ­¨ç¥­¨¥ ­  ¤«¨­­ã áâப¨
Line 1299... Line 1279...
1299
		mov byte[esi],0
1279
		mov byte[esi],0
1300
		.no_text_data:
1280
		.no_text_data:
1301
		pop esi ;restore esi
1281
		pop esi ;restore esi
Line 1302... Line 1282...
1302
 
1282
 
1303
		mov ecx,eax
1283
		mov ecx,eax
1304
		imul ecx,sizeof.TreeList
1284
		imul ecx,sizeof.TreeNode
1305
		add ecx,tl_data_nodes ; *** ecx = node[po_t] ***
1285
		add ecx,tl_data_nodes ; *** ecx = node[po_t] ***
1306
		add ecx,8   ; *** ecx = node[po_t].next ***
1286
		add ecx,TreeNode.next ; *** ecx = node[po_t].next ***
1307
		push dword[ecx] ;node[i].next=node[po_t].next;
1287
		push dword[ecx] ;node[i].next=node[po_t].next;
Line 1308... Line 1288...
1308
		pop dword[edx+8]
1288
		pop dword[edx+TreeNode.next]
1309
 
1289
 
1310
		call tl_get_node_index ;*** eax = i ***
1290
		call tl_get_node_index ;*** eax = i ***
1311
		cmp eax,tl_info_max_count
1291
		cmp eax,tl_info_max_count
1312
		jge .u0
1292
		jge .u0
1313
			mov [ecx],eax ;node[po_t].next=i; // áá뫪¨ ¯¥à¥­ ¯à ¢«ï¥¬
1293
			mov [ecx],eax ;node[po_t].next=i; // áá뫪¨ ¯¥à¥­ ¯à ¢«ï¥¬
1314
			mov ecx,[edx+8] ; *** ecx = node[i].next ***
1294
			mov ecx,[edx+TreeNode.next] ; *** ecx = node[i].next ***
1315
			imul ecx,sizeof.TreeList
1295
			imul ecx,sizeof.TreeNode
Line 1316... Line 1296...
1316
			add ecx,tl_data_nodes ; *** ecx = node[node[i].next] ***
1296
			add ecx,tl_data_nodes ; *** ecx = node[node[i].next] ***
1317
			mov [ecx+4],eax ;node[node[i].next].perv=i;
1297
			mov [ecx+TreeNode.perv],eax ;node[node[i].next].perv=i;
1318
 
1298
 
1319
			call tb_scrol_resize ;®¡à ¡®âª  áªà®««¨­£ 
1299
			call tb_scrol_resize ;®¡à ¡®âª  áªà®««¨­£ 
1320
			jmp @f
1300
			jmp @f
1321
		.u0:
1301
		.u0:
1322
		add edx,sizeof.TreeList
1302
		add edx,sizeof.TreeNode
1323
		cmp edx,ebx ;enf of node memory ?
1303
		cmp edx,ebx ;enf of node memory ?
1324
		jle @b
1304
		jle @b
Line 1349... Line 1329...
1349
 
1329
 
1350
;input:
1330
;input:
1351
;n_info - pointer to node info
1331
;n_info - pointer to node info
1352
align 4
1332
align 4
1353
proc tl_node_set_data uses eax ecx edx edi esi, tlist:dword, n_info:dword
1333
proc tl_node_set_data uses eax ecx edx edi esi, tlist:dword, n_info:dword
1354
	mov edi,dword[tlist]
1334
	mov edi,[tlist]
1355
	call tl_get_cur_node_index ;eax=po_t
1335
	call tl_get_cur_node_index ;eax=po_t
1356
	cmp eax,2
1336
	cmp eax,2
1357
	jl @f
1337
	jl @f
1358
		xor ecx,ecx
1338
		xor ecx,ecx
Line 1362... Line 1342...
1362
		mov edi,eax
1342
		mov edi,eax
1363
		mov esi,dword[n_info] ;pointer to node data
1343
		mov esi,dword[n_info] ;pointer to node data
1364
		rep movsb
1344
		rep movsb
Line 1365... Line 1345...
1365
 
1345
 
1366
		mov esi,edi
1346
		mov esi,edi
1367
		mov edi,dword[tlist] ;restore edi
1347
		mov edi,[tlist] ;restore edi
1368
		mov cx,tl_info_capt_offs
1348
		mov cx,tl_info_capt_offs
1369
		cmp cx,tl_info_size
1349
		cmp cx,tl_info_size
1370
		jge .no_text_data
1350
		jge .no_text_data
1371
			mov ax,tl_info_capt_len ;¯à®¢¥à塞 ¥áâì «¨ ®£à ­¨ç¥­¨¥ ­  ¤«¨­­ã ⥪áâ 
1351
			mov ax,tl_info_capt_len ;¯à®¢¥à塞 ¥áâì «¨ ®£à ­¨ç¥­¨¥ ­  ¤«¨­­ã ⥪áâ 
1372
			cmp ax,0
1352
			or ax,ax
1373
			je .no_limit
1353
			jz .no_limit
1374
				add cx,ax ;cx = tl_info_capt_offs + tl_info_capt_len
1354
				add cx,ax ;cx = tl_info_capt_offs + tl_info_capt_len
1375
				and ecx,0xffff
1355
				and ecx,0xffff
1376
				xor eax,eax
1356
				xor eax,eax
1377
				mov ax,tl_info_size
1357
				mov ax,tl_info_size
Line 1392... Line 1372...
1392
; tlist - pointer to 'TreeList' struct
1372
; tlist - pointer to 'TreeList' struct
1393
;output:
1373
;output:
1394
; eax - pointer to node data
1374
; eax - pointer to node data
1395
align 4
1375
align 4
1396
proc tl_node_get_data uses ecx edi, tlist:dword
1376
proc tl_node_get_data uses ecx edi, tlist:dword
1397
	mov edi,dword[tlist]
1377
	mov edi,[tlist]
1398
	call tl_get_cur_node_index ;eax=po_t
1378
	call tl_get_cur_node_index ;eax=po_t
1399
	cmp eax,2
1379
	cmp eax,2
1400
	jl @f
1380
	jl @f
1401
		movzx ecx,tl_info_size
1381
		movzx ecx,tl_info_size
1402
		imul eax,ecx
1382
		imul eax,ecx
Line 1414... Line 1394...
1414
; node_ind - node index
1394
; node_ind - node index
1415
;output:
1395
;output:
1416
; eax - pointer to node info
1396
; eax - pointer to node info
1417
align 4
1397
align 4
1418
proc tl_node_poi_get_info uses ebx ecx edx edi, tlist:dword, node_ind:dword
1398
proc tl_node_poi_get_info uses ebx ecx edx edi, tlist:dword, node_ind:dword
1419
	mov edi,dword[tlist]
1399
	mov edi,[tlist]
1420
	mov ebx,dword[node_ind]
1400
	mov ebx,dword[node_ind]
Line 1421... Line 1401...
1421
 
1401
 
1422
	;cycle to nodes
1402
	;cycle to nodes
1423
	mov edx,tl_data_nodes
1403
	mov edx,tl_data_nodes
1424
	mov ecx,edx
1404
	mov ecx,edx
1425
	add ecx,sizeof.TreeList
1405
	add ecx,sizeof.TreeNode
1426
	@@:
1406
	@@:
1427
		call tl_iterat_next_all
1407
		call tl_iterat_next_all
1428
		cmp edx,ecx
1408
		cmp edx,ecx
1429
		jle @f
1409
		jle @f
Line 1444... Line 1424...
1444
; node_p - node param struct
1424
; node_p - node param struct
1445
;output:
1425
;output:
1446
; eax - pointer to next node struct
1426
; eax - pointer to next node struct
1447
align 4
1427
align 4
1448
proc tl_node_poi_get_next_info uses ecx edx edi, tlist:dword, node_p:dword
1428
proc tl_node_poi_get_next_info uses ecx edx edi, tlist:dword, node_p:dword
1449
	mov edi,dword[tlist]
1429
	mov edi,[tlist]
1450
	mov edx,dword[node_p]
1430
	mov edx,dword[node_p]
Line 1451... Line 1431...
1451
 
1431
 
1452
	mov ecx,tl_data_nodes
1432
	mov ecx,tl_data_nodes
Line 1453... Line 1433...
1453
	add ecx,sizeof.TreeList
1433
	add ecx,sizeof.TreeNode
1454
 
1434
 
1455
	call tl_iterat_next_all
1435
	call tl_iterat_next_all
1456
	cmp edx,ecx
1436
	cmp edx,ecx
Line 1467... Line 1447...
1467
; node_p - node param struct
1447
; node_p - node param struct
1468
;output:
1448
;output:
1469
; eax - pointer
1449
; eax - pointer
1470
align 4
1450
align 4
1471
proc tl_node_poi_get_data uses ecx edx edi, tlist:dword, node_p:dword
1451
proc tl_node_poi_get_data uses ecx edx edi, tlist:dword, node_p:dword
1472
	mov edi,dword[tlist]
1452
	mov edi,[tlist]
1473
	mov edx,dword[node_p]
1453
	mov edx,dword[node_p]
Line 1474... Line 1454...
1474
 
1454
 
1475
	call tl_get_node_index ;eax = node index
1455
	call tl_get_node_index ;eax = node index
1476
	cmp eax,2
1456
	cmp eax,2
Line 1495... Line 1475...
1495
proc tl_get_cur_node_index uses ecx edx
1475
proc tl_get_cur_node_index uses ecx edx
1496
	;cycle to nodes
1476
	;cycle to nodes
1497
	xor eax,eax
1477
	xor eax,eax
1498
	mov edx,tl_data_nodes
1478
	mov edx,tl_data_nodes
1499
	mov ecx,edx
1479
	mov ecx,edx
1500
	add ecx,sizeof.TreeList
1480
	add ecx,sizeof.TreeNode
1501
	@@:
1481
	@@:
1502
		call tl_iterat_next
1482
		call tl_iterat_next
1503
		cmp edx,ecx
1483
		cmp edx,ecx
1504
		jle @f
1484
		jle @f
1505
		cmp eax,tl_cur_pos
1485
		cmp eax,tl_cur_pos
Line 1508... Line 1488...
1508
		jmp @b
1488
		jmp @b
1509
	@@:
1489
	@@:
1510
	mov eax,edx
1490
	mov eax,edx
1511
	sub eax,tl_data_nodes
1491
	sub eax,tl_data_nodes
1512
	xor edx,edx
1492
	xor edx,edx
1513
	mov ecx,sizeof.TreeList
1493
	mov ecx,sizeof.TreeNode
1514
	div ecx
1494
	div ecx
1515
	ret
1495
	ret
1516
endp
1496
endp
Line 1517... Line 1497...
1517
 
1497
 
Line 1525... Line 1505...
1525
tl_get_node_index:
1505
tl_get_node_index:
1526
	push ecx edx
1506
	push ecx edx
1527
	mov eax,edx
1507
	mov eax,edx
1528
	sub eax,tl_data_nodes
1508
	sub eax,tl_data_nodes
1529
	xor edx,edx
1509
	xor edx,edx
1530
	mov ecx,sizeof.TreeList
1510
	mov ecx,sizeof.TreeNode
1531
	div ecx
1511
	div ecx
1532
	pop edx ecx
1512
	pop edx ecx
1533
	ret
1513
	ret
Line 1534... Line 1514...
1534
 
1514
 
1535
;㤠«¨âì 㧥«
1515
;㤠«¨âì 㧥«
1536
align 4
1516
align 4
1537
proc tl_node_delete uses eax edx edi, tlist:dword
1517
proc tl_node_delete uses eax edx edi, tlist:dword
1538
	mov edi,dword[tlist]
1518
	mov edi,[tlist]
1539
	call tl_get_cur_node_index ;eax=po_t
1519
	call tl_get_cur_node_index ;eax=po_t
1540
	cmp eax,2
1520
	cmp eax,2
1541
	jl @f
1521
	jl @f
1542
		imul eax,sizeof.TreeList
1522
		imul eax,sizeof.TreeNode
1543
		add eax,tl_data_nodes
1523
		add eax,tl_data_nodes
1544
		mov edx,eax
1524
		mov edx,eax
1545
		inc tl_ch_tim
1525
		inc tl_ch_tim
1546
		mov eax,tl_ch_tim
1526
		mov eax,tl_ch_tim
1547
		mov dword[edx+16],eax
1527
		mov dword[edx+TreeNode.t_delete],eax
1548
		call tb_scrol_resize ;®¡à ¡®âª  áªà®««¨­£ 
1528
		call tb_scrol_resize ;®¡à ¡®âª  áªà®««¨­£ 
1549
	@@:
1529
	@@:
1550
	ret
1530
	ret
Line 1551... Line 1531...
1551
endp
1531
endp
1552
 
1532
 
1553
;¯®áâ ¢¨âì ªãàá®à ­  ¯¥à¢ë© 㧥«
1533
;¯®áâ ¢¨âì ªãàá®à ­  ¯¥à¢ë© 㧥«
1554
align 4
1534
align 4
1555
proc tl_cur_beg uses edi, tlist:dword
1535
proc tl_cur_beg uses edi, tlist:dword
1556
	mov edi,dword[tlist]
1536
	mov edi,[tlist]
1557
	mov tl_cur_pos,0
1537
	mov tl_cur_pos,0
1558
	cmp tl_p_scroll,0
1538
	cmp tl_p_scroll,0
1559
	je @f
1539
	je @f
Line 1565... Line 1545...
1565
endp
1545
endp
Line 1566... Line 1546...
1566
 
1546
 
1567
;¯¥à¥­¥á⨠ªãàá®à ­  1 ¯®§¨æ¨î ­¨¦¥
1547
;¯¥à¥­¥á⨠ªãàá®à ­  1 ¯®§¨æ¨î ­¨¦¥
1568
align 4
1548
align 4
1569
proc tl_cur_next uses eax ebx edi esi, tlist:dword
1549
proc tl_cur_next uses eax ebx edi esi, tlist:dword
1570
	mov edi,dword[tlist]
1550
	mov edi,[tlist]
1571
	call tl_get_node_count ;eax = node count
1551
	call tl_get_node_count ;eax = node count
1572
	cmp tl_cur_pos,eax
1552
	cmp tl_cur_pos,eax
1573
	jge .no_redraw
1553
	jge .no_redraw
1574
		mov esi,tl_box_top
1554
		mov esi,tl_box_top
Line 1586... Line 1566...
1586
			inc dword[ebx+sb_offs_position]
1566
			inc dword[ebx+sb_offs_position]
1587
			stdcall scroll_bar_vertical.draw,ebx
1567
			stdcall scroll_bar_vertical.draw,ebx
1588
			stdcall tl_draw,dword[tlist] ;¯®«­ ï ¯¥à¥à¨á®¢ª  ®ª­ 
1568
			stdcall tl_draw,dword[tlist] ;¯®«­ ï ¯¥à¥à¨á®¢ª  ®ª­ 
1589
			jmp .no_redraw
1569
			jmp .no_redraw
1590
		@@:
1570
		@@:
1591
		mov edi,dword[tlist] ;restore edi
1571
		mov edi,[tlist] ;restore edi
1592
		call tl_draw_cursor ;¯¥à¥à¨á®¢ª  ªãàá®à 
1572
		call tl_draw_cursor ;¯¥à¥à¨á®¢ª  ªãàá®à 
1593
		call tl_draw_caption_cur_pos
1573
		call tl_draw_caption_cur_pos
1594
	.no_redraw:
1574
	.no_redraw:
1595
	ret
1575
	ret
1596
endp
1576
endp
Line 1605... Line 1585...
1605
push ecx edx
1585
push ecx edx
1606
	;cycle to nodes
1586
	;cycle to nodes
1607
	xor eax,eax
1587
	xor eax,eax
1608
	mov edx,tl_data_nodes
1588
	mov edx,tl_data_nodes
1609
	mov ecx,edx
1589
	mov ecx,edx
1610
	add ecx,sizeof.TreeList
1590
	add ecx,sizeof.TreeNode
1611
	@@:
1591
	@@:
1612
		call tl_iterat_next
1592
		call tl_iterat_next
1613
		cmp edx,ecx
1593
		cmp edx,ecx
1614
		jle @f
1594
		jle @f
1615
		inc eax
1595
		inc eax
Line 1628... Line 1608...
1628
push ecx edx
1608
push ecx edx
1629
	;cycle to nodes
1609
	;cycle to nodes
1630
	xor eax,eax
1610
	xor eax,eax
1631
	mov edx,tl_data_nodes
1611
	mov edx,tl_data_nodes
1632
	mov ecx,edx
1612
	mov ecx,edx
1633
	add ecx,sizeof.TreeList
1613
	add ecx,sizeof.TreeNode
1634
	@@:
1614
	@@:
1635
		call tl_iterat_next_all
1615
		call tl_iterat_next_all
1636
		cmp edx,ecx
1616
		cmp edx,ecx
1637
		jle @f
1617
		jle @f
1638
		inc eax
1618
		inc eax
Line 1642... Line 1622...
1642
	ret
1622
	ret
Line 1643... Line 1623...
1643
 
1623
 
1644
;¯¥à¥­¥á⨠ªãàá®à ­  1 ¯®§¨æ¨î ¢ëè¥
1624
;¯¥à¥­¥á⨠ªãàá®à ­  1 ¯®§¨æ¨î ¢ëè¥
1645
align 4
1625
align 4
1646
proc tl_cur_perv uses eax edi esi, tlist:dword
1626
proc tl_cur_perv uses eax edi esi, tlist:dword
1647
	mov edi,dword[tlist]
1627
	mov edi,[tlist]
1648
	cmp tl_cur_pos,0
1628
	cmp tl_cur_pos,0
1649
	je .no_redraw
1629
	je .no_redraw
1650
		mov esi,tl_box_top
1630
		mov esi,tl_box_top
1651
		add esi,tl_box_height ;esi = coord bottom border
1631
		add esi,tl_box_height ;esi = coord bottom border
Line 1663... Line 1643...
1663
			dec dword[eax+sb_offs_position]
1643
			dec dword[eax+sb_offs_position]
1664
			stdcall scroll_bar_vertical.draw, eax
1644
			stdcall scroll_bar_vertical.draw, eax
1665
			stdcall tl_draw, dword[tlist] ;¯®«­ ï ¯¥à¥à¨á®¢ª  ®ª­ 
1645
			stdcall tl_draw, dword[tlist] ;¯®«­ ï ¯¥à¥à¨á®¢ª  ®ª­ 
1666
			jmp .no_redraw
1646
			jmp .no_redraw
1667
		@@:
1647
		@@:
1668
			mov edi,dword[tlist] ;restore edi
1648
			mov edi,[tlist] ;restore edi
1669
			call tl_draw_cursor ;¯¥à¥à¨á®¢ª  ªãàá®à 
1649
			call tl_draw_cursor ;¯¥à¥à¨á®¢ª  ªãàá®à 
1670
			call tl_draw_caption_cur_pos
1650
			call tl_draw_caption_cur_pos
1671
	.no_redraw:
1651
	.no_redraw:
1672
	ret
1652
	ret
1673
endp
1653
endp
Line 1674... Line 1654...
1674
 
1654
 
1675
;¯¥à¥­¥á⨠ªãàá®à ­  1 áâà ­¨æã ¢ëè¥
1655
;¯¥à¥­¥á⨠ªãàá®à ­  1 áâà ­¨æã ¢ëè¥
1676
align 4
1656
align 4
1677
proc tl_cur_page_up uses eax edi esi, tlist:dword
1657
proc tl_cur_page_up uses eax edi esi, tlist:dword
Line 1678... Line 1658...
1678
	mov edi,dword[tlist]
1658
	mov edi,[tlist]
1679
 
1659
 
1680
	cmp tl_p_scroll,0 ;¥á«¨ ¥áâì 㪠§ â¥«ì ­  áªà®««¨­£
1660
	cmp tl_p_scroll,0 ;¥á«¨ ¥áâì 㪠§ â¥«ì ­  áªà®««¨­£
1681
	je .no_redraw
1661
	je .no_redraw
Line 1713... Line 1693...
1713
align 4
1693
align 4
1714
proc tl_cur_page_down uses eax ebx ecx edi esi, tlist:dword
1694
proc tl_cur_page_down uses eax ebx ecx edi esi, tlist:dword
1715
;eax - ª®«-¢® áâப ­  áâà ­¨æ¥
1695
;eax - ª®«-¢® áâப ­  áâà ­¨æ¥
1716
;ebx - ¬ ªá. ¯®§¨æ¨ï ªãàá®à 
1696
;ebx - ¬ ªá. ¯®§¨æ¨ï ªãàá®à 
1717
;ecx - ¬ ªá. ¯®§¨æ¨ï áªà®««¨­£ 
1697
;ecx - ¬ ªá. ¯®§¨æ¨ï áªà®««¨­£ 
1718
	mov edi,dword[tlist]
1698
	mov edi,[tlist]
1719
	cmp tl_p_scroll,0 ;¥á«¨ ¥áâì 㪠§ â¥«ì ­  áªà®««¨­£
1699
	cmp tl_p_scroll,0 ;¥á«¨ ¥áâì 㪠§ â¥«ì ­  áªà®««¨­£
1720
	je .no_redraw
1700
	je .no_redraw
1721
		mov esi,tl_p_scroll
1701
		mov esi,tl_p_scroll
1722
		call tl_get_node_count ;eax = node count
1702
		call tl_get_node_count ;eax = node count
1723
		mov ebx,eax
1703
		mov ebx,eax
Line 1758... Line 1738...
1758
endp
1738
endp
Line 1759... Line 1739...
1759
 
1739
 
1760
;®âªàëâì/§ ªàëâì 㧥« (à ¡®â ¥â á 㧫 ¬¨ ª®â®àë¥ ¨¬¥îâ ¤®ç¥à­¨¥ 㧫ë)
1740
;®âªàëâì/§ ªàëâì 㧥« (à ¡®â ¥â á 㧫 ¬¨ ª®â®àë¥ ¨¬¥îâ ¤®ç¥à­¨¥ 㧫ë)
1761
align 4
1741
align 4
1762
proc tl_node_close_open uses eax edx edi, tlist:dword
1742
proc tl_node_close_open uses eax edx edi, tlist:dword
1763
	mov edi,dword[tlist]
1743
	mov edi,[tlist]
1764
	call tl_get_cur_node_index ;eax = ¯®§¨æ¨ï 㧫  ­  ª®â®à®¬ á⮨⠪ãàá®à
1744
	call tl_get_cur_node_index ;eax = ¯®§¨æ¨ï 㧫  ­  ª®â®à®¬ á⮨⠪ãàá®à
1765
	cmp eax,2 ;ªãàá®à á⮨⠭  㧫¥ ?
1745
	cmp eax,2 ;ªãàá®à á⮨⠭  㧫¥ ?
1766
	jl @f
1746
	jl @f
1767
		imul eax,sizeof.TreeList
1747
		imul eax,sizeof.TreeNode
1768
		add eax,tl_data_nodes
1748
		add eax,tl_data_nodes
1769
		;eax = 㪠§ â¥«ì ­  áâàãªâãàã 㧫  ¢ë¡à ­­®£® ªãàá®à®¬
1749
		;eax = 㪠§ â¥«ì ­  áâàãªâãàã 㧫  ¢ë¡à ­­®£® ªãàá®à®¬
1770
		push eax
1750
		push eax
1771
			stdcall tl_node_poi_get_next_info, edi,eax
1751
			stdcall tl_node_poi_get_next_info, edi,eax
1772
			mov edx,eax ;edx = 㪠§ â¥«ì ­  áâàãªâãàã 㧫  ª®â®àë© ¨¤¥â ¯®á«¥ 㧫  eax
1752
			mov edx,eax ;edx = 㪠§ â¥«ì ­  áâàãªâãàã 㧫  ª®â®àë© ¨¤¥â ¯®á«¥ 㧫  eax
1773
		pop eax
1753
		pop eax
1774
		cmp edx,0 ;¥áâì «¨ ã§«ë ­¨¦¥ ¢ë¡à ­­®£® ­ ¬¨ ?
1754
		or edx,edx ;¥áâì «¨ ã§«ë ­¨¦¥ ¢ë¡à ­­®£® ­ ¬¨ ?
1775
		je @f
1755
		jz @f
1776
			mov dl,byte[edx+2] ;¡¥à¥¬ ã஢¥­ì ­¨¦­¥£® 㧫 
1756
			mov dl,byte[edx+TreeNode.level] ;¡¥à¥¬ ã஢¥­ì ­¨¦­¥£® 㧫 
1777
			cmp byte[eax+2],dl ;+2 = .lev
1757
			cmp byte[eax+TreeNode.level],dl
1778
			jge @f ;¥á«¨ ­¨¦­¨¥ ã§«ë ¬¥­ì襣® ã஢­ï, §­ ç¨â ®­¨ ­¥ ¤®ç¥à­¨¥, ª®­¥æ ä㭪樨
1758
			jge @f ;¥á«¨ ­¨¦­¨¥ ã§«ë ¬¥­ì襣® ã஢­ï, §­ ç¨â ®­¨ ­¥ ¤®ç¥à­¨¥, ª®­¥æ ä㭪樨
1779
				xor byte[eax+3],1 ;+3 = .clo *** ®âªàë⨥/§ ªàë⨥ 㧫  ***
1759
				xor byte[eax+TreeNode.close],1 ;*** ®âªàë⨥/§ ªàë⨥ 㧫  ***
Line 1780... Line 1760...
1780
				call tb_scrol_resize ;®¡à ¡®âª  áªà®««¨­£ 
1760
				call tb_scrol_resize ;®¡à ¡®âª  áªà®««¨­£ 
1781
 
1761
 
1782
				stdcall tl_draw, edi ;®¡­®¢«¥­¨¥ ®ª­ 
1762
				stdcall tl_draw, edi ;®¡­®¢«¥­¨¥ ®ª­ 
1783
	@@:
1763
	@@:
Line 1784... Line 1764...
1784
	ret
1764
	ret
1785
endp
1765
endp
1786
 
1766
 
1787
;㢥«¨ç¨âì ã஢¥­ì
1767
;㢥«¨ç¨âì ã஢¥­ì
1788
align 4
1768
align 4
1789
proc tl_node_lev_inc uses eax ecx edx edi, tlist:dword
1769
proc tl_node_lev_inc uses eax ecx edx edi, tlist:dword
1790
	mov edi,dword[tlist]
1770
	mov edi,[tlist]
1791
	bt tl_style,2 ;tl_list_box_mode
1771
	bt tl_style,2 ;tl_list_box_mode
1792
	jc @f
1772
	jc @f
1793
	call tl_get_cur_node_index ;eax=po_t
1773
	call tl_get_cur_node_index ;eax=po_t
1794
	cmp eax,2
1774
	cmp eax,2
1795
	jl @f
1775
	jl @f
1796
		mov ecx,tl_data_nodes
1776
		mov ecx,tl_data_nodes
Line 1797... Line 1777...
1797
		imul eax,sizeof.TreeList
1777
		imul eax,sizeof.TreeNode
1798
		add eax,ecx ;eax = pointer to some node struct
1778
		add eax,ecx ;eax = pointer to node struct
1799
		add ecx,sizeof.TreeList ;ecx = pointer to 1 node struct
1779
		add ecx,sizeof.TreeNode ;ecx = pointer to 1 node struct
1800
 
1780
 
1801
		mov edx,eax
1781
		mov edx,eax
1802
		call tl_iterat_perv ;¯à®¢¥à塞 ¥áâì «¨ ¢¥àå­¨© 㧥«
1782
		call tl_iterat_perv ;¯à®¢¥à塞 ¥áâì «¨ ¢¥àå­¨© 㧥«
1803
		cmp edx,ecx
1783
		cmp edx,ecx
1804
		jle @f ;¥á«¨ ¢¥àå­¥£® 㧫  ­¥â ⮠⥪ã騩 㧥« ­¥ ¤¢¨£ ¥¬
1784
		jle @f ;¥á«¨ ¢¥àå­¥£® 㧫  ­¥â ⮠⥪ã騩 㧥« ­¥ ¤¢¨£ ¥¬
1805
		mov cl,byte[edx+2] ;¡¥à¥¬ ã஢¥­ì த¨â¥«ì᪮£® 㧫 
1785
		mov cl,byte[edx+TreeNode.level] ;¡¥à¥¬ ã஢¥­ì த¨â¥«ì᪮£® 㧫 
1806
		inc cl ;¤®¡ ¢«ï¥¬ 1 ¨ ¯®«ãç ¥¬ ¬ ªá¨¬ «ì­®¥ §­ ç¥­¨¥
1786
		inc cl ;¤®¡ ¢«ï¥¬ 1 ¨ ¯®«ãç ¥¬ ¬ ªá¨¬ «ì­®¥ §­ ç¥­¨¥
1807
		cmp byte[eax+2],cl
1787
		cmp byte[eax+TreeNode.level],cl
1808
		jge @f
1788
		jge @f
Line 1809... Line 1789...
1809
			inc byte[eax+2] ;㢥«¨ç¨¢ ¥¬ §­ ç¥­¨¥ 㧫 
1789
			inc byte[eax+TreeNode.level] ;㢥«¨ç¨¢ ¥¬ §­ ç¥­¨¥ 㧫 
1810
	@@:
1790
	@@:
1811
	ret
1791
	ret
1812
endp
1792
endp
1813
 
1793
 
1814
;㬥­ìè¨âì ã஢¥­ì
1794
;㬥­ìè¨âì ã஢¥­ì
1815
align 4
1795
align 4
1816
proc tl_node_lev_dec uses eax edi, tlist:dword
1796
proc tl_node_lev_dec uses eax edi, tlist:dword
1817
	mov edi,dword[tlist]
1797
	mov edi,[tlist]
1818
	call tl_get_cur_node_index ;eax=po_t
1798
	call tl_get_cur_node_index ;eax=po_t
1819
	cmp eax,2
1799
	cmp eax,2
1820
	jl @f
1800
	jl @f
1821
		imul eax,sizeof.TreeList
1801
		imul eax,sizeof.TreeNode
Line 1829... Line 1809...
1829
 
1809
 
1830
;¯¥à¥¬¥é ¥¬ 㧥« ¢¢¥àå
1810
;¯¥à¥¬¥é ¥¬ 㧥« ¢¢¥àå
1831
align 4
1811
align 4
1832
proc tl_node_move_up tlist:dword
1812
proc tl_node_move_up tlist:dword
1833
pushad
1813
pushad
1834
	mov edi,dword[tlist]
1814
	mov edi,[tlist]
1835
	call tl_get_cur_node_index ;eax=po_t
1815
	call tl_get_cur_node_index ;eax=po_t
1836
	cmp eax,2
1816
	cmp eax,2
1837
	jl @f
1817
	jl @f
1838
		mov ebx,eax ;copy index of node struct
1818
		mov ebx,eax ;copy index of node struct
1839
		mov edx,tl_data_nodes
1819
		mov edx,tl_data_nodes
1840
		mov ecx,edx
1820
		mov ecx,edx
1841
		add ecx,sizeof.TreeList
1821
		add ecx,sizeof.TreeNode
1842
		imul eax,sizeof.TreeList
1822
		imul eax,sizeof.TreeNode
1843
		add eax,edx ;eax = pointer to 2 node struct
1823
		add eax,edx ;eax = pointer to 2 node struct
1844
		mov edx,eax ;edx = pointer to 2 node struct
1824
		mov edx,eax ;edx = pointer to 2 node struct
1845
		mov esi,eax ;esi = pointer to 2 node struct
1825
		mov esi,eax ;esi = pointer to 2 node struct
1846
		call tl_iterat_perv ;edx = pointer to 1 node struct
1826
		call tl_iterat_perv ;edx = pointer to 1 node struct
1847
		call tl_get_node_index ;eax = index of 1 node struct
1827
		call tl_get_node_index ;eax = index of 1 node struct
1848
		cmp edx,ecx
1828
		cmp edx,ecx
1849
		jle @f
1829
		jle @f
1850
			cmp dword[edx+8],ebx ;+8 next
1830
			cmp dword[edx+TreeNode.next],ebx
1851
			jne .po8
1831
			jne .po8
1852
				call tl_node_move_po6 ;ã§«ë ¨¤ãâ ¯®¤àï¤ ¬¥­ï¥¬ 6 ááë«®ª
1832
				call tl_node_move_po6 ;ã§«ë ¨¤ãâ ¯®¤àï¤ ¬¥­ï¥¬ 6 ááë«®ª
1853
				jmp .cur_mov
1833
				jmp .cur_mov
1854
			.po8:
1834
			.po8:
Line 1865... Line 1845...
1865
 
1845
 
1866
;¯¥à¥¬¥é ¥¬ 㧥« ¢­¨§
1846
;¯¥à¥¬¥é ¥¬ 㧥« ¢­¨§
1867
align 4
1847
align 4
1868
proc tl_node_move_down tlist:dword
1848
proc tl_node_move_down tlist:dword
1869
pushad
1849
pushad
1870
	mov edi,dword[tlist]
1850
	mov edi,[tlist]
1871
	call tl_get_cur_node_index ;eax=po_t
1851
	call tl_get_cur_node_index ;eax=po_t
1872
	cmp eax,2
1852
	cmp eax,2
1873
	jl @f
1853
	jl @f
1874
		mov ebx,eax ;copy index of node struct
1854
		mov ebx,eax ;copy index of node struct
1875
		mov edx,tl_data_nodes
1855
		mov edx,tl_data_nodes
1876
		mov ecx,edx
1856
		mov ecx,edx
1877
		add ecx,sizeof.TreeList
1857
		add ecx,sizeof.TreeNode
1878
		imul eax,sizeof.TreeList
1858
		imul eax,sizeof.TreeNode
1879
		add eax,edx ;eax = pointer to 1 node struct
1859
		add eax,edx ;eax = pointer to 1 node struct
1880
		mov edx,eax ;edx = pointer to 1 node struct
1860
		mov edx,eax ;edx = pointer to 1 node struct
1881
		mov esi,eax ;esi = pointer to 1 node struct
1861
		mov esi,eax ;esi = pointer to 1 node struct
1882
		call tl_iterat_next ;edx = pointer to 2 node struct
1862
		call tl_iterat_next ;edx = pointer to 2 node struct
1883
		call tl_get_node_index ;eax = index of 2 node struct
1863
		call tl_get_node_index ;eax = index of 2 node struct
1884
		cmp edx,ecx
1864
		cmp edx,ecx
1885
		jle @f
1865
		jle @f
1886
			cmp dword[esi+8],eax ;+8 next
1866
			cmp dword[esi+TreeNode.next],eax
1887
			jne .po8
1867
			jne .po8
1888
				xchg eax,ebx ;¬¥­ï¥ ¯®à冷ª á«¥¤®¢ ­¨ï § ¬¥­ï¥¬ëå 㧫®¢
1868
				xchg eax,ebx ;¬¥­ï¥ ¯®à冷ª á«¥¤®¢ ­¨ï § ¬¥­ï¥¬ëå 㧫®¢
1889
				xchg edx,esi
1869
				xchg edx,esi
1890
				call tl_node_move_po6 ;ã§«ë ¨¤ãâ ¯®¤àï¤ ¬¥­ï¥¬ 6 ááë«®ª
1870
				call tl_node_move_po6 ;ã§«ë ¨¤ãâ ¯®¤àï¤ ¬¥­ï¥¬ 6 ááë«®ª
Line 1901... Line 1881...
1901
 
1881
 
1902
align 4
1882
align 4
1903
tl_node_move_po6:
1883
tl_node_move_po6:
1904
	mov ecx,edx ;save node pointer
1884
	mov ecx,edx ;save node pointer
1905
	call tl_move_perv
1885
	call tl_move_perv
Line 1906... Line 1886...
1906
	mov dword[edx+8],ebx
1886
	mov dword[edx+TreeNode.next],ebx
1907
 
1887
 
1908
	mov edx,esi
1888
	mov edx,esi
1909
	call tl_move_next
1889
	call tl_move_next
Line 1910... Line -...
1910
	mov dword[edx+4],eax
-
 
1911
	mov edx,ecx ;restore node pointer
1890
	mov dword[edx+TreeNode.perv],eax
1912
 
1891
	mov edx,ecx ;restore node pointer
1913
	;+4 perv
-
 
1914
	mov ecx,dword[edx+4]
1892
 
1915
	mov dword[esi+4],ecx
1893
	mov ecx,dword[edx+TreeNode.perv]
Line 1916... Line 1894...
1916
	;+8 next
1894
	mov dword[esi+TreeNode.perv],ecx
1917
	mov ecx,dword[esi+8]
1895
	mov ecx,dword[esi+TreeNode.next]
1918
	mov dword[edx+8],ecx
1896
	mov dword[edx+TreeNode.next],ecx
Line 1919... Line 1897...
1919
 
1897
 
1920
	mov dword[edx+4],ebx
1898
	mov dword[edx+TreeNode.perv],ebx
1921
	mov dword[esi+8],eax
1899
	mov dword[esi+TreeNode.next],eax
Line 1933... Line 1911...
1933
;ecx = ?
1911
;ecx = ?
1934
align 4
1912
align 4
1935
tl_node_move_po8:
1913
tl_node_move_po8:
1936
	mov ecx,edx ;save node pointer
1914
	mov ecx,edx ;save node pointer
1937
	call tl_move_perv
1915
	call tl_move_perv
1938
	mov dword[edx+8],ebx
1916
	mov dword[edx+TreeNode.next],ebx
1939
	mov edx,ecx
1917
	mov edx,ecx
1940
	call tl_move_next
1918
	call tl_move_next
1941
	mov dword[edx+4],ebx
1919
	mov dword[edx+TreeNode.perv],ebx
1942
	mov edx,esi
1920
	mov edx,esi
1943
	call tl_move_perv
1921
	call tl_move_perv
1944
	mov dword[edx+8],eax
1922
	mov dword[edx+TreeNode.next],eax
1945
	mov edx,esi
1923
	mov edx,esi
1946
	call tl_move_next
1924
	call tl_move_next
1947
	mov dword[edx+4],eax
1925
	mov dword[edx+TreeNode.perv],eax
1948
	mov edx,ecx ;restore node pointer
1926
	mov edx,ecx ;restore node pointer
Line 1949... Line -...
1949
 
-
 
1950
	;+4 perv
1927
 
1951
	mov eax,dword[edx+4]
1928
	mov eax,dword[edx+TreeNode.perv]
1952
	mov ebx,dword[esi+4]
1929
	mov ebx,dword[esi+TreeNode.perv]
1953
	xchg eax,ebx
1930
	xchg eax,ebx
1954
	mov dword[edx+4],eax
1931
	mov dword[edx+TreeNode.perv],eax
1955
	mov dword[esi+4],ebx
1932
	mov dword[esi+TreeNode.perv],ebx
1956
	;+8 next
1933
 
1957
	mov eax,dword[edx+8]
1934
	mov eax,dword[edx+TreeNode.next]
1958
	mov ebx,dword[esi+8]
1935
	mov ebx,dword[esi+TreeNode.next]
1959
	xchg eax,ebx
1936
	xchg eax,ebx
1960
	mov dword[edx+8],eax
1937
	mov dword[edx+TreeNode.next],eax
1961
	mov dword[esi+8],ebx
1938
	mov dword[esi+TreeNode.next],ebx
Line 1962... Line 1939...
1962
	ret
1939
	ret
1963
 
1940
 
1964
;input:
1941
;input:
Line 1969... Line 1946...
1969
	jl @f
1946
	jl @f
1970
	pushad
1947
	pushad
1971
		mov ebx,edi ;calculate cursor position
1948
		mov ebx,edi ;calculate cursor position
1972
		mov eax,tl_cur_pos
1949
		mov eax,tl_cur_pos
1973
		inc eax
1950
		inc eax
1974
		lea edi,[txt_capt_cur]
1951
		lea edi,[txt_capt_cur.v]
1975
		add edi,7
-
 
1976
		call tl_convert_to_str
1952
		stdcall tl_convert_to_str, 5
1977
		mov edi,ebx
1953
		mov edi,ebx
Line 1978... Line 1954...
1978
 
1954
 
1979
		mov ebx,tl_box_left
1955
		mov ebx,tl_box_left
1980
		shl ebx,16
1956
		shl ebx,16
1981
		add ebx,5*65536+3
1957
		add ebx,5*65536+3
1982
		add ebx,tl_box_top
1958
		add ebx,tl_box_top
1983
		mov ecx,tl_col_txt
1959
		mov ecx,tl_col_txt
1984
		or  ecx,0xc0000000 ;0x40000000 § ªà è¨¢ âì ä®­ 梥⮬ edi
1960
		or  ecx,0xc0000000 ;0x40000000 § ªà è¨¢ âì ä®­ 梥⮬ edi
1985
		lea edx,[txt_capt_cur]
1961
		lea edx,[txt_capt_cur]
1986
		mov edi,tl_col_zag
1962
		mov edi,tl_col_zag
1987
		mcall 4 ;draw text captions
-
 
1988
 
1963
		mcall SF_DRAW_TEXT ;captions
1989
	popad
1964
	popad
1990
	@@:
1965
	@@:
Line 1991... Line 1966...
1991
	ret
1966
	ret
Line 1997... Line 1972...
1997
; mem_size - memory size
1972
; mem_size - memory size
1998
;output:
1973
;output:
1999
; eax - error code
1974
; eax - error code
2000
align 4
1975
align 4
2001
proc tl_save_mem uses ebx ecx edx edi esi, tlist:dword, opt:dword, h_mem:dword, mem_size:dword
1976
proc tl_save_mem uses ebx ecx edx edi esi, tlist:dword, opt:dword, h_mem:dword, mem_size:dword
2002
	mov esi,dword[h_mem]
1977
	mov esi,[h_mem]
2003
	mov edi,dword[tlist]
1978
	mov edi,[tlist]
Line 2004... Line 1979...
2004
 
1979
 
2005
	cmp dword[opt],0 ;add mode
1980
	cmp dword[opt],0 ;add mode
2006
	je @f
1981
	je @f
2007
		stdcall tl_get_mem_size, edi,esi ;eax = à §¬¥à à ­¥¥ á®åà ­ñ­­ëå ¤ ­­ëå
1982
		stdcall tl_get_mem_size, edi,esi ;eax = à §¬¥à à ­¥¥ á®åà ­ñ­­ëå ¤ ­­ëå
Line 2046... Line 2021...
2046
		add esi,tl_save_load_heder_size ;add header size
2021
		add esi,tl_save_load_heder_size ;add header size
Line 2047... Line 2022...
2047
 
2022
 
2048
		;cycle to nodes
2023
		;cycle to nodes
2049
		mov edx,tl_data_nodes
2024
		mov edx,tl_data_nodes
2050
		mov ecx,edx
2025
		mov ecx,edx
2051
		add ecx,sizeof.TreeList
2026
		add ecx,sizeof.TreeNode
2052
		@@:
2027
		@@:
2053
			call tl_iterat_next_all
2028
			call tl_iterat_next_all
2054
			cmp edx,ecx
2029
			cmp edx,ecx
2055
			jle @f
2030
			jle @f
2056
		;save node params
2031
		;save node params
2057
		call tl_get_node_index ;eax = index of pointer [edx]
2032
		call tl_get_node_index ;eax = index of pointer [edx]
Line 2058... Line 2033...
2058
		mov dword[esi],eax
2033
		mov dword[esi],eax
2059
 
2034
 
2060
		add esi,4
2035
		add esi,4
2061
		mov eax,dword[edx] ;eax = (type; lev; clo)
2036
		mov eax,dword[edx+TreeNode.type] ;eax = (type; level; close)
Line 2062... Line 2037...
2062
		mov dword[esi],eax
2037
		mov dword[esi],eax
Line 2107... Line 2082...
2107
align 4
2082
align 4
2108
proc tl_load_mem uses ebx ecx edx edi esi, tlist:dword, opt:dword, h_mem:dword, mem_size:dword 
2083
proc tl_load_mem uses ebx ecx edx edi esi, tlist:dword, opt:dword, h_mem:dword, mem_size:dword 
2109
locals
2084
locals
2110
	er_code dd ?
2085
	er_code dd ?
2111
endl
2086
endl
2112
	mov esi,dword[h_mem]
2087
	mov esi,[h_mem]
2113
	mov edi,dword[tlist]
2088
	mov edi,[tlist]
Line 2114... Line 2089...
2114
 
2089
 
Line 2115... Line 2090...
2115
	mov dword[er_code],0 ;return error code
2090
	mov dword[er_code],0 ;return error code
2116
 
2091
 
2117
	mov ecx,dword[opt]
2092
	mov ecx,[opt]
2118
	cmp cx,0 ;load in array mode
2093
	or cx,cx ;load in array mode
2119
	je @f
2094
	jz @f
2120
		;stdcall tl_get_mem_size, esi,edi ;¡¥à¥¬ à §¬¥à à ­¥¥ á®åà ­ñ­­ëå ¤ ­­ëå
2095
		;stdcall tl_get_mem_size, esi,edi ;¡¥à¥¬ à §¬¥à à ­¥¥ á®åà ­ñ­­ëå ¤ ­­ëå
2121
		;add esi,eax
2096
		;add esi,eax
2122
		and ecx,0xffff
2097
		and ecx,0xffff
2123
		cld
2098
		cld
2124
		.beg_cycle:
2099
		.beg_cycle:
2125
			cmp dword[esi],'tree'
-
 
2126
			jne .no_tree
2100
			cmp dword[esi],'tree'
2127
			xor ebx,ebx
2101
			jne .no_tree
2128
			mov bx,word[esi+4]
2102
			movzx ebx,word[esi+4]
2129
			add bx,8
2103
			add bx,8
2130
			imul ebx,dword[esi+6]
2104
			imul ebx,dword[esi+6]
2131
			add ebx,tl_save_load_heder_size
2105
			add ebx,tl_save_load_heder_size
Line 2135... Line 2109...
2135
 
2109
 
2136
	cmp dword[esi],'tree'
2110
	cmp dword[esi],'tree'
2137
	jne .no_tree
2111
	jne .no_tree
2138
		bt dword[opt],17 ;load in add mode
2112
		bt dword[opt],17 ;load in add mode
2139
		jc @f
2113
		jc @f
2140
			stdcall tl_info_clear, dword edi
2114
			stdcall tl_info_clear, edi
Line 2141... Line 2115...
2141
		@@:
2115
		@@:
2142
 
2116
 
2143
		xor ebx,ebx
2117
		xor ebx,ebx
2144
		mov bx,word[esi+4] ;info_size
2118
		mov bx,word[esi+4] ;info_size
2145
		cmp bx,tl_info_size
2119
		cmp bx,tl_info_size
2146
		je @f
2120
		je @f
2147
			or dword[er_code],tl_err_load_info_size
2121
			or dword[er_code],tl_err_load_info_size
2148
		@@:
2122
		@@:
2149
		mov ecx,dword[esi+6] ;count nodes
2123
		mov ecx,[esi+6] ;count nodes
2150
		cmp ecx,1
2124
		cmp ecx,1
2151
		jl .end_f
2125
		jl .end_f
Line 2152... Line 2126...
2152
		mov edx,esi ;save header pointer
2126
		mov edx,esi ;save header pointer
2153
		add esi,tl_save_load_heder_size
2127
		add esi,tl_save_load_heder_size
2154
 
2128
 
2155
		cld
2129
		cld
2156
		@@: ;load node params
2130
		@@: ;load node params
2157
			mov eax,dword[esi+4]
2131
			mov eax,dword[esi+4]
2158
			ror eax,16 ;eax - options (type; lev; clo)
2132
			ror eax,16 ;eax - options (type; level; close)
2159
			add esi,8
2133
			add esi,8
2160
			stdcall tl_node_add, edi,eax,esi
2134
			stdcall tl_node_add, edi,eax,esi
Line 2166... Line 2140...
2166
		bt dword[opt],17 ;load in add mode
2140
		bt dword[opt],17 ;load in add mode
2167
		jc .no_tree
2141
		jc .no_tree
2168
			mov eax,dword[edx+14] ;set cursor pos
2142
			mov eax,dword[edx+14] ;set cursor pos
2169
			mov tl_cur_pos,eax
2143
			mov tl_cur_pos,eax
2170
			mov ebx,tl_p_scroll
2144
			mov ebx,tl_p_scroll
2171
			cmp ebx,0
2145
			or ebx,ebx
2172
			je .end_f
2146
			jz .end_f
2173
				mov eax,dword[edx+22] ;set scroll pos
2147
				mov eax,dword[edx+22] ;set scroll pos
2174
				mov dword[ebx+sb_offs_position],eax
2148
				mov dword[ebx+sb_offs_position],eax
2175
				stdcall scroll_bar_vertical.draw, ebx
2149
				stdcall scroll_bar_vertical.draw, ebx
2176
				jmp .end_f
2150
				jmp .end_f
2177
	.no_tree:
2151
	.no_tree:
Line 2184... Line 2158...
2184
;¡¥à¥â à §¬¥à ¯ ¬ï⨠§ ­ï⮩ ä㭪樥© tl_save_mem ¯à¨ á®åà ­¥­¨¨ í«¥¬¥­â®¢
2158
;¡¥à¥â à §¬¥à ¯ ¬ï⨠§ ­ï⮩ ä㭪樥© tl_save_mem ¯à¨ á®åà ­¥­¨¨ í«¥¬¥­â®¢
2185
;output:
2159
;output:
2186
; eax - error code
2160
; eax - error code
2187
align 4
2161
align 4
2188
proc tl_get_mem_size uses ebx edi, tlist:dword, h_mem:dword 
2162
proc tl_get_mem_size uses ebx edi, tlist:dword, h_mem:dword 
2189
	mov edi,dword[tlist]
2163
	mov edi,[tlist]
2190
	mov eax,dword[h_mem]
2164
	mov eax,[h_mem]
2191
	@@:
2165
	@@:
2192
		cmp dword[eax],'tree'
2166
		cmp dword[eax],'tree'
2193
		jne @f
2167
		jne @f
2194
		xor ebx,ebx
2168
		xor ebx,ebx
2195
		mov bx,word[eax+4]
2169
		mov bx,word[eax+4]
Line 2217... Line 2191...
2217
; 183    81 Pg Dn
2191
; 183    81 Pg Dn
Line 2218... Line 2192...
2218
 
2192
 
2219
tl_key_ascii db 13,32,178,177,176,179,182,184,183
2193
tl_key_ascii db 13,32,178,177,176,179,182,184,183
Line 2220... Line 2194...
2220
tl_key_scan  db 28,57, 72, 80, 75, 77, 83, 73, 81
2194
tl_key_scan  db 28,57, 72, 80, 75, 77, 83, 73, 81
-
 
2195
 
2221
 
2196
txt_capt_cur: db '‘âப  '
-
 
2197
.v: db '     ',0
Line -... Line 2198...
-
 
2198
txt_capt_otm: db 'Žâ¬¥­ë '
2222
txt_capt_cur db '‘âப       ',0
2199
.v: db '     ',0
2223
txt_capt_otm db 'Žâ¬¥­ë      ',0
2200
 
2224
 
2201
;description:
2225
;íâ®â ª®¤ ­¥ ¬®©, ®­ ¯à¥®¡à §ã¥â ç¨á«® ¢ áâபã
2202
; ¯à¥à¥¢®¤ ç¨á«  ¢ ASCII áâபã
2226
;input:
2203
;input:
2227
; eax = value
2204
; eax = value
2228
; edi = string buffer
2205
; edi = string buffer
2229
align 4
2206
align 4
-
 
2207
proc tl_convert_to_str, len:dword
-
 
2208
pushad
2230
tl_convert_to_str:
2209
	mov esi,[len]
2231
	pushad
2210
	add esi,edi
2232
		mov dword[edi+1],0x20202020
2211
	dec esi
-
 
2212
	call .str
Line 2233... Line 2213...
2233
		call .str
2213
popad
2234
	popad
2214
	ret
2235
	ret
2215
endp
2236
 
-
 
2237
align 4
2216
 
2238
.str:
2217
align 4
2239
	mov ecx,0x0a ;§ ¤ ¥âáï á¨á⥬  áç¨á«¥­¨ï ¨§¬¥­ïîâáï ॣ¨áâàë ebx,eax,ecx,edx ¢å®¤­ë¥ ¯ à ¬¥âàë eax - ç¨á«®
2218
.str:
2240
		;¯à¥à¥¢®¤ ç¨á«  ¢ ASCII áâப㠢§®¤­ë¥ ¤ ­­ë¥ ecx=á¨á⥬  áç¨á«¥­ï edi  ¤à¥á ªã¤  § ¯¨á뢠âì, ¡ã¤¥¬ áâபã, ¯à¨ç¥¬ ª®­¥æ ¯¥à¥¬¥­­®© 
2219
	mov ecx,10 ;§ ¤ ¥âáï á¨á⥬  áç¨á«¥­¨ï
2241
	cmp eax,ecx  ;áà ¢­¨âì ¥á«¨ ¢ eax ¬¥­ìè¥ ç¥¬ ¢ ecx â® ¯¥à¥©â¨ ­  @@-1 â.¥. ­  pop eax
2220
	cmp eax,ecx  ;áà ¢­¨âì ¥á«¨ ¢ eax ¬¥­ìè¥ ç¥¬ ¢ ecx â® ¯¥à¥©â¨ ­  @@-1 â.¥. ­  pop eax
2242
	jb @f
2221
	jb @f
2243
		xor edx,edx ;®ç¨áâ¨âì edx
2222
		xor edx,edx ;®ç¨áâ¨âì edx
2244
		div ecx     ;à §¤¥«¨âì - ®áâ â®ª ¢ edx
-
 
-
 
2223
		div ecx     ;à §¤¥«¨âì - ®áâ â®ª ¢ edx
-
 
2224
		push edx    ;¯®«®¦¨âì ¢ á⥪
-
 
2225
		call .str   ;¢ë§¢ âì á ¬ã á¥¡ï ¨ â ª ¤® ⮣® ¬®¬¥­â  ¯®ª  ¢ eax ­¥ áâ ­¥â ¬¥­ìè¥ ç¥¬ ¢ ecx
2245
		push edx    ;¯®«®¦¨âì ¢ á⥪
2226
		pop eax
2246
		call .str   ;¢ë§¢ âì á ¬ã á¥¡ï ¨ â ª ¤® ⮣® ¬®¬¥­â  ¯®ª  ¢ eax ­¥ áâ ­¥â ¬¥­ìè¥ ç¥¬ ¢ ecx
2227
	@@:
2247
		pop eax
-
 
-
 
2228
	cmp edi,esi
-
 
2229
	jge @f
2248
	@@: ;cmp al,10 ;¯à®¢¥à¨âì ­¥ ¬¥­ìè¥ «¨ §­ ç¥­¨¥ ¢ al 祬 10 (¤«ï á¨á⥬ë áç¨á«¥­ï 10 ¤ ­­ ï ª®¬ ­¤  - «¨è­ ï))
2230
		or al,0x30  ;¤®¡ ¢«ï¥¬ ᨬ¢®« '0'