Subversion Repositories Kolibri OS

Rev

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

Rev 1277 Rev 1283
Line 1... Line 1...
1
; ìàêðîñ äëÿ ñèñòåìíîé áèáëèîòåêè box_lib.obj
1
; ìàêðîñ äëÿ ñèñòåìíîé áèáëèîòåêè box_lib.obj
2
; ýëåìåíò TreeList äëÿ Kolibri OS
2
; ýëåìåíò TreeList äëÿ Kolibri OS
3
; ôàéë ïîñëåäíèé ðàç èçìåíÿëñÿ 20.11.2009 IgorA
3
; ôàéë ïîñëåäíèé ðàç èçìåíÿëñÿ 23.11.2009 IgorA
4
; íà êîä ïðèìåíåíà GPL2 ëèöåíçèÿ
4
; íà êîä ïðèìåíåíà GPL2 ëèöåíçèÿ
Line 5... Line 5...
5
 
5
 
-
 
6
 
-
 
7
sizeof.TreeList equ 20
-
 
8
;struct TreeList
-
 
9
;  type dw ? ;+ 0 òèï ýëåìåíòà, èëè èíäåêñ èêîíêè äëÿ óçëà
-
 
10
;  lev db ?  ;+ 2 óðîâåíü ýëåìåíòà
-
 
11
;  clo db ?  ;+ 3 ôëàã çàêðûòèÿ, èëè îòêðûòèÿ (èìååò ñìûñë äëÿ ðîäèòåëüñêîãî óçëà)
-
 
12
;  perv dd ? ;+ 4 èíäåêñ ïðåäûäóùåãî ýëåìåíòà
-
 
13
;  next dd ? ;+ 8 èíäåêñ ïîñëåäóþùåãî ýëåìåíòà
-
 
14
;  tc dd ?   ;+12 âðåì. ñîçäàíèÿ
Line -... Line 15...
-
 
15
;  td dd ?   ;+16 âðåì. óäàëåíèÿ
6
 
16
;ends
-
 
17
 
7
sizeof.TreeList equ 20
18
tl_info_size  equ  word[edi +4] ;ðàçìåð äàííûõ âûäåëÿåìûõ äëÿ êàæäîãî óçëà (ïîëüçîâàòåëüñüêèå äàííûå + òåêñò äëÿ ïîäïèñè)
8
 
19
tl_style      equ dword[edi+10] ;ñòèëè ýëåìåíòà
9
tl_style      equ dword[edi+10] ;ñòèëè ýëåìåíòà
20
tl_data_nodes equ dword[edi+14] ;óêàçàòåëü íà ñòðóêòóðû óçëîâ
10
tl_img_cx     equ  word[edi+22] ;øèðèíà èêîíîê
21
tl_img_cx     equ  word[edi+22] ;øèðèíà èêîíîê
11
tl_img_cy     equ  word[edi+24] ;âûñîòà èêîíîê
22
tl_img_cy     equ  word[edi+24] ;âûñîòà èêîíîê
Line 19... Line 30...
19
tl_box_left   equ dword[edi+58]
30
tl_box_left   equ dword[edi+58]
20
tl_box_top    equ dword[edi+62]
31
tl_box_top    equ dword[edi+62]
21
tl_box_width  equ dword[edi+66]
32
tl_box_width  equ dword[edi+66]
22
tl_box_height equ dword[edi+70]
33
tl_box_height equ dword[edi+70]
23
tl_capt_cy    equ  word[edi+74] ;âûñîòà ïîäïèñè
34
tl_capt_cy    equ  word[edi+74] ;âûñîòà ïîäïèñè
24
tl_info_capt_offs equ dword[edi+76]
35
tl_info_capt_offs equ dword[edi+76] ;ñäâèã äëÿ íà÷àëà òåêñòà (ïîäïèñè óçëà)
25
tl_el_focus   equ dword[edi+80] ;óêàçàòåëü íà ñòðóêòóðó ýëåìåíòà â ôîêóñå
36
tl_el_focus   equ dword[edi+80] ;óêàçàòåëü íà ñòðóêòóðó ýëåìåíòà â ôîêóñå
26
tl_p_scrol    equ dword[edi+84] ;óêàçàòåëü íà ñòðóêòóðó ñêðîëëèíãà
37
tl_p_scrol    equ dword[edi+84] ;óêàçàòåëü íà ñòðóêòóðó ñêðîëëèíãà
27
tl_sb_draw    equ dword[edi+88] ;óêàçàòåëü íà ôóíêöèþ ïåðåðèñîâûâàþùóþ ñêðîëëèíã
38
tl_sb_draw    equ dword[edi+88] ;óêàçàòåëü íà ôóíêöèþ ïåðåðèñîâûâàþùóþ ñêðîëëèíã
28
tl_on_press   equ dword[edi+96] ;óêàçàòåëü íà ôóíêöèþ, êîòîðàÿ âûçûâàåòñÿ ïðè íàæàòèè Enter
39
tl_on_press   equ dword[edi+96] ;óêàçàòåëü íà ôóíêöèþ, êîòîðàÿ âûçûâàåòñÿ ïðè íàæàòèè Enter
Line 29... Line 40...
29
 
40
 
30
;êîíñòàíòû ñòèëÿ
41
;êîíñòàíòû ñòèëÿ
31
tl_key_no_edit   equ   1b ;ýëåìåíò íåëüçÿ ðåäàêòèðîâàòü íà êëàâèàòóðå (èçìåíÿòü óðîâíè, óäàëÿòü)
42
tl_key_no_edit   equ   1b ;ýëåìåíò íåëüçÿ ðåäàêòèðîâàòü íà êëàâèàòóðå (èçìåíÿòü óðîâíè, óäàëÿòü)
32
tl_draw_par_line equ  10b ;ðèñîâàòü ëèíèè ê ðîäèòåëüñêîìó óçëó
43
tl_draw_par_line equ  10b ;ðèñîâàòü ëèíèè ê ðîäèòåëüñêîìó óçëó
Line 33... Line -...
33
tl_list_box_mode equ 100b ;ñòèëü íå îòîáðàæàåò óðîâíè (êàê â ListBox âñå îäíîãî óðîâíÿ)
-
 
34
 
-
 
35
macro use_tree_list_structs
-
 
36
{
44
tl_list_box_mode equ 100b ;ñòèëü íå îòîáðàæàåò óðîâíè (êàê â ListBox âñå îäíîãî óðîâíÿ)
37
struct TreeInfo
-
 
38
  data_info	 dd ? ;+ 0 óêàçàòåëü íà îñíîâíûå äàíûå
45
 
39
  info_size	 dw ? ;+ 4 ðàçìåð èíôîðìàöèîííîé ñòðóêòóðû (ïîëüçîâàòåëüñüêèå äàííûå + òåêñò äëÿ ïîäïèñè)
-
 
40
  info_max_count dd ? ;+ 6 ìàêñèìàëüíîå êîëëè÷åñòâî ñòðóêòóð
-
 
41
  style 	 dd ? ;+10 ñòèëè ýëåìåíòà
46
;data_info	 dd ? ;+ 0 óêàçàòåëü íà îñíîâíûå äàíûå
42
  data_nodes	 dd ? ;+14 óêàçàòåëü íà ñòðóêòóðû óçëîâ
-
 
43
  data_img	 dd ? ;+18 óêàçàòåëü íà èçîáðàæåíèÿ
-
 
44
  img_cx	 dw ? ;+22 øèðèíà èêîíîê
-
 
45
  img_cy	 dw ? ;+24 âûñîòà èêîíîê
-
 
46
  data_img_sys dd ? ;+26 óêàçàòåëü íà ñèñòåìíûå èçîáðàæåíèÿ (ñòðåëêè, ïëþñèêè)
47
;info_max_count dd ? ;+ 6 ìàêñèìàëüíîå êîëëè÷åñòâî ñòðóêòóð
47
  ch_tim		dd ? ;+30 êîëè÷åñòâî èçìåíåíèé â ôàéëå
-
 
48
  ls_tim		dd ? ;+34 âðåìÿ ïîñëåäíåãî ñîõðàíåíèÿ
-
 
49
  tim_undo	 dd ? ;+38 êîëè÷åñòâî îòìåíåííûõ äåéñòâèé
-
 
50
  cur_pos	 dd ? ;+42 ïîçèöèÿ êóðñîðà
-
 
51
  col_bkg	 dd ? ;+46 öâåò ôîíà
-
 
52
  col_zag	 dd ? ;+50 öâåò çàãîëîâêà
-
 
53
  col_txt	 dd ? ;+54 öâåò òåêñòà
-
 
54
  wndMain	BOX ? ;+58 ðàçìåð îêíà äëÿ âûâîäà
-
 
55
  capt_cy	 dw ? ;+74 âûñîòà ïîäïèñè
-
 
56
  info_capt_offs dd ? ;+76 ñäâèã äëÿ íà÷àëà òåêñòà (ïîäïèñè óçëà)
-
 
57
  el_focus dd ? ;+80 óêàçàòåëü íà ñòðóêòóðó ýëåìåíòà â ôîêóñå
-
 
58
  p_scrol dd ?  ;+84 óêàçàòåëü íà ñòðóêòóðó ñêðîëëèíãà
48
;data_img	 dd ? ;+18 óêàçàòåëü íà èçîáðàæåíèÿ
59
  sb_draw dd ?  ;+88 óêàçàòåëü íà ôóíêöèþ ïåðåðèñîâûâàþùóþ ñêðîëëèíã
-
 
60
  on_activate dd ? ;+92 óêàçàòåëü íà ôóíêöèþ ïðè àêòèâèðîâàíèè óçëà
-
 
61
  on_press dd ? ;+96 óêàçàòåëü íà ôóíêöèþ ïðè íàæàòèè Enter
-
 
62
ends
-
 
63
 
-
 
64
struct TreeList
-
 
65
  type dw ? ;+ 0 òèï ýëåìåíòà, èëè èíäåêñ èêîíêè äëÿ óçëà
-
 
66
  lev db ?  ;+ 2 óðîâåíü ýëåìåíòà
-
 
67
  clo db ?  ;+ 3 ôëàã çàêðûòèÿ, èëè îòêðûòèÿ (èìååò ñìûñë äëÿ ðîäèòåëüñêîãî óçëà)
-
 
68
  perv dd ? ;+ 4 èíäåêñ ïðåäûäóùåãî ýëåìåíòà
-
 
69
  next dd ? ;+ 8 èíäåêñ ïîñëåäóþùåãî ýëåìåíòà
-
 
70
  tc dd ?   ;+12 âðåì. ñîçäàíèÿ
-
 
71
  td dd ?   ;+16 âðåì. óäàëåíèÿ
-
 
Line 72... Line 49...
72
ends
49
;ls_tim		dd ? ;+34 âðåìÿ ïîñëåäíåãî ñîõðàíåíèÿ
73
}
50
;on_activate dd ? ;+92 óêàçàòåëü íà ôóíêöèþ ïðè àêòèâèðîâàíèè óçëà
74
 
51
 
75
struc tree_list info_size,info_max_count,style, img_cx,img_cy,\
52
struc tree_list info_size,info_max_count,style, img_cx,img_cy,\
76
    col_bkg,col_zag,col_txt, box_l,box_t,box_w,box_h, capt_cy,info_capt_offs,\
53
    col_bkg,col_zag,col_txt, box_l,box_t,box_w,box_h, capt_cy,info_capt_offs,\
77
    el_focus, p_scrol,p_sb_draw,fun_enter {
54
    el_focus, p_scrol,p_sb_draw,on_press {
78
  .data_info	dd 0
55
  .data_info	dd 0
79
  .info_size	dw info_size
56
  .info_size	dw info_size
Line 99... Line 76...
99
  .info_capt_offs dd info_capt_offs
76
  .info_capt_offs dd info_capt_offs
100
  .el_focus dd el_focus
77
  .el_focus dd el_focus
101
  .p_scrol  dd p_scrol
78
  .p_scrol  dd p_scrol
102
  .p_sb_draw dd p_sb_draw
79
  .p_sb_draw dd p_sb_draw
103
  .on_activate dd 0
80
  .on_activate dd 0
104
  .on_press dd fun_enter
81
  .on_press dd on_press
105
}
82
}
Line 106... Line 83...
106
 
83
 
107
;-----------------------------------------------------------------------------
84
;-----------------------------------------------------------------------------
108
;ôóíêöèÿ äëÿ âûäåëåíèÿ ïàìÿòè
85
;ôóíêöèÿ äëÿ âûäåëåíèÿ ïàìÿòè
Line 142... Line 119...
142
  mov ebp,esp
119
  mov ebp,esp
143
  push eax ecx edi
120
  push eax ecx edi
144
    mov edi,dword[ebp+8]
121
    mov edi,dword[ebp+8]
Line 145... Line 122...
145
 
122
 
146
    xor ecx,ecx
123
    xor ecx,ecx
147
    mov cx,word[edi+4]
124
    mov cx,tl_info_size
148
    imul ecx,dword[edi+6]
125
    imul ecx,dword[edi+6]
149
    call mem_Alloc
126
    call mem_Alloc
150
    mov dword[edi],eax ;êîïèðóåì óêàçàòåëü íà ïîëó÷åíóþ ïàìÿòü â ñòðóêòóðó
127
    mov dword[edi],eax ;êîïèðóåì óêàçàòåëü íà ïîëó÷åíóþ ïàìÿòü â ñòðóêòóðó
151
    mov dword[edi+18],0 ;îáíóëÿåì óêàçàòåëü 'data_img'
128
    mov dword[edi+18],0 ;îáíóëÿåì óêàçàòåëü 'data_img'
Line 152... Line 129...
152
    mov tl_data_img_sys,0 ;îáíóëÿåì óêàçàòåëü 'data_img_sys'
129
    mov tl_data_img_sys,0 ;îáíóëÿåì óêàçàòåëü 'data_img_sys'
153
 
130
 
154
    mov ecx,sizeof.TreeList
131
    mov ecx,sizeof.TreeList
155
    imul ecx,dword[edi+6]
132
    imul ecx,dword[edi+6]
Line 156... Line 133...
156
    call mem_Alloc
133
    call mem_Alloc
157
    mov dword[edi+14],eax ;êîïèðóåì óêàçàòåëü íà ïîëó÷åíóþ ïàìÿòü â ñòðóêòóðó
134
    mov tl_data_nodes,eax ;êîïèðóåì óêàçàòåëü íà ïîëó÷åíóþ ïàìÿòü â ñòðóêòóðó
Line 158... Line 135...
158
 
135
 
Line 200... Line 177...
200
      call mem_Free ;÷èñòêà ñèñòåìíûõ èêîíîê
177
      call mem_Free ;÷èñòêà ñèñòåìíûõ èêîíîê
201
    @@:
178
    @@:
202
    mov ecx,dword[edi]
179
    mov ecx,dword[edi]
203
    call mem_Free
180
    call mem_Free
Line 204... Line 181...
204
 
181
 
205
    mov ecx,dword[edi+14]
182
    mov ecx,tl_data_nodes
206
    call mem_Free
183
    call mem_Free
207
    pop edi ecx
184
    pop edi ecx
208
  pop ebp
185
  pop ebp
Line 219... Line 196...
219
    mov tl_tim_undo,0
196
    mov tl_tim_undo,0
220
    mov tl_cur_pos,0
197
    mov tl_cur_pos,0
221
    ;xor ecx,ecx
198
    ;xor ecx,ecx
222
    mov ecx,sizeof.TreeList
199
    mov ecx,sizeof.TreeList
223
    imul ecx,dword[edi+6]
200
    imul ecx,dword[edi+6]
224
    mov eax,dword[edi+14]
201
    mov eax,tl_data_nodes
225
    @@:
202
    @@:
226
      mov byte[eax],0 ;÷èñòèì óçëû 0-ìè
203
      mov byte[eax],0 ;÷èñòèì óçëû 0-ìè
227
      inc eax
204
      inc eax
228
      loop @b
205
      loop @b
229
    mov eax,dword[edi+14] ;óêàçàòåëü íà 1-é óçåë
206
    mov eax,tl_data_nodes ;óêàçàòåëü íà 0-é óçåë
230
    mov dword[eax+8],1 ;óêàçàòåëü next â 1-ì óçëå ïðèðàâíèâàåì ê 1
207
    mov dword[eax+8],1 ;óêàçàòåëü next â 0-ì óçëå ïðèðàâíèâàåì ê 1
231
    call tb_scrol_resize ;îáðàáîòêà ñêðîëëèíãà
208
    call tb_scrol_resize ;îáðàáîòêà ñêðîëëèíãà
232
    pop edi ecx eax
209
    pop edi ecx eax
233
  pop ebp
210
  pop ebp
234
  ret 4
211
  ret 4
Line 312... Line 289...
312
    int 0x40
289
    int 0x40
Line 313... Line 290...
313
 
290
 
314
    bt eax,0 ;left mouse button press
291
    bt eax,0 ;left mouse button press
Line 315... Line -...
315
    jae .no_draw
-
 
316
 
-
 
317
    mov ebx,tl_el_focus
-
 
318
    mov dword[ebx],edi ;set focus
292
    jae .no_draw
319
 
293
 
320
    mov eax,37
294
    mov eax,37
Line 321... Line 295...
321
    mov ebx,1
295
    mov ebx,1
Line 340... Line 314...
340
    sub ebx,tl_box_height
314
    sub ebx,tl_box_height
341
    add bx,tl_capt_cy
315
    add bx,tl_capt_cy
342
    cmp ax,bx ;âåðõíÿÿ ãðàíèöà îêíà + âûñîòà ïîäïèñè
316
    cmp ax,bx ;âåðõíÿÿ ãðàíèöà îêíà + âûñîòà ïîäïèñè
343
    jl .no_in_wnd
317
    jl .no_in_wnd
Line -... Line 318...
-
 
318
 
-
 
319
    mov esi,tl_el_focus
-
 
320
    mov dword[esi],edi ;set focus
344
 
321
 
345
    ; if '+' or '-' press
322
    ; if '+' or '-' press
346
    mov esi,eax
323
    mov esi,eax
347
    shr esi,16
324
    shr esi,16
Line 364... Line 341...
364
    cmp eax,ecx
341
    cmp eax,ecx
365
    jl @f
342
    jl @f
366
      mov eax,ecx ;åñëè êóðñîð íå âûøåë çà ïðåäåëû óçëîâ, âîññòàíàâëèâàåì ñòàðîå çíà÷åíèå eax
343
      mov eax,ecx ;åñëè êóðñîð íå âûøåë çà ïðåäåëû óçëîâ, âîññòàíàâëèâàåì ñòàðîå çíà÷åíèå eax
367
    @@:
344
    @@:
Line 368... Line -...
368
 
-
 
369
    mov ebx,0x80000000 ;ñòàâèì ôëàã äëÿ âûõîäà áåç îáíîâëåíèÿ
345
 
370
    cmp eax,tl_cur_pos ;åñëè íîâîå çíà÷åíèå êóðñîðà ñîâïàëî ñ ïðåäûäóùèì
346
    cmp eax,tl_cur_pos ;åñëè íîâîå çíà÷åíèå êóðñîðà ñîâïàëî ñ ïðåäûäóùèì
-
 
347
    je @f ;òî íå ñòèðàåì êóðñîð
371
    je @f	       ;òî ìîæåì âûéòè áåç îáíîâëåíèÿ îêíà
348
    push esi
-
 
349
      mov esi,tl_box_top
-
 
350
      add esi,tl_box_height ;esi = coord bottom border
-
 
351
      call tl_draw_null_cursor ;ñòèðàåì êóðñîð
372
      xor ebx,ebx
352
    pop esi
Line 373... Line 353...
373
    @@:
353
    @@:
Line 374... Line 354...
374
 
354
 
375
    mov tl_cur_pos,eax
355
    mov tl_cur_pos,eax
376
 
356
 
377
    ; if '+' or '-' press
357
    ; if '+' or '-' press
378
    call tl_get_cur_node_index ;eax = node index
358
    call tl_get_cur_node_index ;eax = node index
379
    cmp eax,2
359
    cmp eax,2
380
    jl .no_open_close ;êóðñîð ñòîèò íà ïóñòîì ìåñòå, áåç óçëîâ
360
    jl .no_open_close ;êóðñîð ñòîèò íà ïóñòîì ìåñòå, áåç óçëîâ
381
    imul eax,sizeof.TreeList
361
    imul eax,sizeof.TreeList
382
    add eax,dword[edi+14] ;+14 óêàçàòåëü íà ñòðóêòóðû óçëîâ
362
    add eax,tl_data_nodes
Line 383... Line 363...
383
    xor bx,bx
363
    xor bx,bx
Line 397... Line 377...
397
 
377
 
398
      push dword edi
378
      push dword edi
399
      call tl_node_close_open
379
      call tl_node_close_open
Line 400... Line 380...
400
    .no_open_close:
380
    .no_open_close:
401
 
-
 
402
    bt ebx,31
381
 
403
    jc .no_draw
382
      mov esi,tl_box_top
404
      push dword edi
383
      add esi,tl_box_height ;esi = coord bottom border
405
      call tl_draw
384
      call tl_draw_cursor ;ïåðåðèñîâêà êóðñîðà
406
      jmp .no_draw
385
      jmp .no_draw
-
 
386
    .no_in_wnd: ;íå ïîïàëè â îêíî - ïîòåðÿ ôîêóñà (ïðè óñëîâèè ÷òî ôîêóñ áûë íà äàííîì ýåëåìåíòå)
-
 
387
      mov ebx,tl_el_focus
407
    .no_in_wnd: ;íå ïîïàëè â îêíî - ïîòåðÿ ôîêóñà
388
      cmp dword[ebx],edi
408
      mov ebx,tl_el_focus
389
      jne .no_draw ;ýëåìåíò íå â ôîêóñå
Line 409... Line 390...
409
      mov dword[ebx],0 ;reset focus
390
        mov dword[ebx],0 ;reset focus
410
    .no_draw:
391
    .no_draw:
Line 454... Line 435...
454
;  mov [dragk],0 ;çàêàí÷èâàåì âûäåëåíèå îò êëàâèàòóðû
435
;  mov [dragk],0 ;çàêàí÷èâàåì âûäåëåíèå îò êëàâèàòóðû
455
  cmp tl_tim_undo,1
436
  cmp tl_tim_undo,1
456
  jl .no_work
437
  jl .no_work
Line 457... Line 438...
457
 
438
 
458
  push eax ebx ecx edx
439
  push eax ebx ecx edx
459
  mov edx,dword[edi+14]
440
  mov edx,tl_data_nodes
460
  mov ecx,edx
441
  mov ecx,edx
461
  add ecx,sizeof.TreeList
442
  add ecx,sizeof.TreeList
462
  call tl_move_next ;long i=tex[0].next;
443
  call tl_move_next ;long i=node[0].next;
463
  mov eax,tl_tim_undo
444
  mov eax,tl_tim_undo
464
  sub tl_ch_tim,eax ;ch_tim-=tim_undo;
445
  sub tl_ch_tim,eax ;ch_tim-=tim_undo;
465
  mov eax,tl_ch_tim
446
  mov eax,tl_ch_tim
466
  cmp [edi+34],eax ;if(ls_tim>ch_tim)
447
  cmp [edi+34],eax ;if(ls_tim>ch_tim)
467
  jle @f
448
  jle @f
468
    mov dword[edi+34],0 ;ls_tim=0
449
    mov dword[edi+34],0 ;ls_tim=0
469
  @@:
450
  @@:
470
    cmp edx,ecx
451
    cmp edx,ecx
Line 471... Line 452...
471
    jle @f
452
    jle @f
472
 
453
 
473
    ;if(tex[i].tc>ch_tim){ // åñëè ñîçäàíèå ñèìâîëà áûëî îòìåíåíî
454
    ;if(node[i].tc>ch_tim){ // åñëè ñîçäàíèå ñèìâîëà áûëî îòìåíåíî
474
    cmp dword[edx+12],eax
455
    cmp dword[edx+12],eax
475
    jle .no_u1
456
    jle .no_u1
Line 476... Line 457...
476
      mov dword[edx+12],0
457
      mov dword[edx+12],0
477
      mov dword[edx+16],0
458
      mov dword[edx+16],0
478
 
459
 
479
      mov ebx, dword[edx+4]
460
      mov ebx, dword[edx+4]
480
      imul ebx,sizeof.TreeList
461
      imul ebx,sizeof.TreeList
Line 481... Line 462...
481
      add ebx, dword[edi+14] ;.next
462
      add ebx, tl_data_nodes ;.next
482
      push dword[edx+8] ;tex[tex[i].perv].next=tex[i].next;
463
      push dword[edx+8] ;node[node[i].perv].next=node[i].next;
483
      pop dword[ebx+8]
464
      pop dword[ebx+8]
484
 
465
 
485
      mov ebx, dword[edx+8]
466
      mov ebx, dword[edx+8]
Line 486... Line 467...
486
      imul ebx,sizeof.TreeList
467
      imul ebx,sizeof.TreeList
Line 487... Line 468...
487
      add ebx, dword[edi+14] ;.perv
468
      add ebx, tl_data_nodes ;.perv
488
      push dword[edx+4] ;tex[tex[i].next].perv=tex[i].perv;
469
      push dword[edx+4] ;node[node[i].next].perv=node[i].perv;
489
      pop dword[ebx+4]
470
      pop dword[ebx+4]
490
 
471
 
491
    .no_u1:
472
    .no_u1:
Line 586... Line 567...
586
;@@:
567
;@@:
587
;---debug---
568
;---debug---
Line 588... Line 569...
588
 
569
 
589
    ;cycle to nodes
570
    ;cycle to nodes
590
    xor eax,eax
571
    xor eax,eax
591
    mov edx,dword[edi+14] ;+14 óêàçàòåëü íà ñòðóêòóðû óçëîâ
572
    mov edx,tl_data_nodes
592
    mov ecx,edx
573
    mov ecx,edx
Line 593... Line 574...
593
    add ecx,sizeof.TreeList
574
    add ecx,sizeof.TreeList
594
 
575
 
Line 748... Line 729...
748
; edx = pointer to next node struct
729
; edx = pointer to next node struct
749
align 4
730
align 4
750
tl_move_next:
731
tl_move_next:
751
  mov edx,dword[edx+8]
732
  mov edx,dword[edx+8]
752
  imul edx,sizeof.TreeList
733
  imul edx,sizeof.TreeList
753
  add edx,dword[edi+14]
734
  add edx,tl_data_nodes
754
  ret
735
  ret
Line 755... Line 736...
755
 
736
 
756
;input:
737
;input:
757
; edx = pointer to some node struct
738
; edx = pointer to some node struct
Line 760... Line 741...
760
; edx = pointer to perv node struct
741
; edx = pointer to perv node struct
761
align 4
742
align 4
762
tl_move_perv:
743
tl_move_perv:
763
  mov edx,dword[edx+4]
744
  mov edx,dword[edx+4]
764
  imul edx,sizeof.TreeList
745
  imul edx,sizeof.TreeList
765
  add edx,dword[edi+14]
746
  add edx,tl_data_nodes
766
  ret
747
  ret
Line 767... Line 748...
767
 
748
 
768
;input:
749
;input:
769
; edx = pointer to symbol struct
750
; edx = pointer to symbol struct
770
; edi = pointer to 'TreeList' struct
751
; edi = pointer to 'TreeList' struct
771
;output:
752
;output:
772
; al = 1 if sumbol not visible
753
; al = 1 if sumbol not visible
773
; (tex[i].td+tim_Undo<=ch_tim && tex[i].td) || (tex[i].tc>ch_tim-tim_Undo)
754
; (node[i].td+tim_Undo<=ch_tim && node[i].td) || (node[i].tc>ch_tim-tim_Undo)
774
align 4
755
align 4
775
tl_node_not_vis:
756
tl_node_not_vis:
776
  cmp dword[edx+16],0
757
  cmp dword[edx+16],0
777
  je @f
758
  je @f
778
  mov eax,dword[edx+16] ;eax=tex[i].td
759
  mov eax,dword[edx+16] ;eax=node[i].td
779
  add eax,tl_tim_undo
760
  add eax,tl_tim_undo
780
  cmp eax,tl_ch_tim
761
  cmp eax,tl_ch_tim
781
  jg @f
762
  jg @f
782
    mov al,1
763
    mov al,1
Line 984... Line 965...
984
      int 0x40 ;draw node icon '-'
965
      int 0x40 ;draw node icon '-'
985
    pop esi edx ebx
966
    pop esi edx ebx
986
    @@:
967
    @@:
Line 987... Line 968...
987
 
968
 
988
    mov al,byte[edx+2] ;draw minus '-'
969
    mov al,byte[edx+2] ;draw minus '-'
989
    mov ecx,dword[edi+14]
970
    mov ecx,tl_data_nodes
Line 990... Line 971...
990
    add ecx,sizeof.TreeList
971
    add ecx,sizeof.TreeList
991
 
972
 
992
    mov ah,10 ;get icon index '+' or '-' ?
973
    mov ah,10 ;get icon index '+' or '-' ?
Line 1126... Line 1107...
1126
align 4
1107
align 4
1127
tl_draw_node_caption:
1108
tl_draw_node_caption:
1128
    push ebx ecx edx esi
1109
    push ebx ecx edx esi
Line 1129... Line 1110...
1129
 
1110
 
1130
    xor esi,esi
1111
    xor esi,esi
1131
    mov si,word[edi+4];info_size
1112
    mov si,tl_info_size
1132
    cmp esi,tl_info_capt_offs
1113
    cmp esi,tl_info_capt_offs
Line 1133... Line 1114...
1133
    jle @f ;if caption size <= 0
1114
    jle @f ;if caption size <= 0
1134
 
1115
 
Line 1218... Line 1199...
1218
 
1199
 
Line 1219... Line 1200...
1219
    call tl_info_set_undo
1200
    call tl_info_set_undo
1220
 
1201
 
1221
    mov ebx,sizeof.TreeList
1202
    mov ebx,sizeof.TreeList
1222
    imul ebx,dword[edi+6] ;+6 ìàêñ. êîëè÷åñòâî óçëîâ
1203
    imul ebx,dword[edi+6] ;+6 ìàêñ. êîëè÷åñòâî óçëîâ
1223
    add ebx,dword[edi+14] ;+14 óêàçàòåëü íà ñòðóêòóðû óçëîâ
1204
    add ebx,tl_data_nodes
1224
;--
1205
;--
1225
    call tl_get_cur_node_index ;eax=po_t
1206
    call tl_get_cur_node_index ;eax=po_t
1226
    imul eax,sizeof.TreeList
1207
    imul eax,sizeof.TreeList
1227
    add eax,dword[edi+14] ;+14 óêàçàòåëü íà ñòðóêòóðû óçëîâ
1208
    add eax,tl_data_nodes
1228
    mov edx,eax
1209
    mov edx,eax
1229
    call tl_move_perv
1210
    call tl_move_perv
1230
    call tl_get_node_index ;eax = index of pointer [edx]
1211
    call tl_get_node_index ;eax = index of pointer [edx]
1231
;--
1212
;--
1232
    mov edx,sizeof.TreeList
1213
    mov edx,sizeof.TreeList
1233
    shl edx,1
1214
    shl edx,1
1234
    add edx,dword[edi+14] ;+14 óêàçàòåëü íà ñòðóêòóðû óçëîâ
1215
    add edx,tl_data_nodes
1235
    @@: ;for(i=2;i
1216
    @@: ;for(i=2;i
1236
      cmp dword [edx+12],0
1217
      cmp dword [edx+12],0
1237
      jne .u0
1218
      jne .u0
Line 1238... Line 1219...
1238
      cmp dword [edx+16],0
1219
      cmp dword [edx+16],0
1239
      jne .u0
1220
      jne .u0
1240
 
1221
 
1241
	inc  tl_ch_tim
1222
	inc  tl_ch_tim
-
 
1223
	push  word[ebp+14] ;get type
-
 
1224
	pop   word[edx]
-
 
1225
	mov   byte[edx+2], 0 ;node[i].lev=0
-
 
1226
  bt tl_style,2 ;tl_list_box_mode
-
 
1227
  jc .l_box_m
1242
	push  word[ebp+14] ;get type
1228
    mov cl,byte[ebp+12]
1243
	pop   word[edx]
1229
    mov byte[edx+2],cl  ;node[i].lev
1244
	mov   byte[edx+2], 0 ;node[i].lev=0
1230
  .l_box_m:
1245
	push tl_ch_tim       ;node[i].tc=ch_tim;
1231
	push tl_ch_tim       ;node[i].tc=ch_tim;
1246
	pop  dword[edx+12]
1232
	pop  dword[edx+12]
1247
	mov  dword[edx+4], eax ;node[i].perv=po_t;
1233
	mov  dword[edx+4], eax ;node[i].perv=po_t;
1248
	;*** copy node data ***
1234
	;*** copy node data ***
1249
	push esi
1235
	push esi
Line 1250... Line 1236...
1250
	xor ecx,ecx
1236
	xor ecx,ecx
1251
	mov cx,word[edi+4];info_size
1237
	mov cx,tl_info_size
1252
	mov esi,ecx
1238
	mov esi,ecx
Line 1261... Line 1247...
1261
	rep movsb
1247
	rep movsb
Line 1262... Line 1248...
1262
 
1248
 
1263
	mov esi,edi
1249
	mov esi,edi
1264
	mov edi,dword[ebp+16] ;restore edi
1250
	mov edi,dword[ebp+16] ;restore edi
1265
	mov ecx,tl_info_capt_offs
1251
	mov ecx,tl_info_capt_offs
1266
	cmp cx,word[edi+4] ;+4 info_size
1252
	cmp cx,tl_info_size
1267
	jge .no_text_data
1253
	jge .no_text_data
1268
	  dec esi
1254
	  dec esi
1269
	  mov byte[esi],0
1255
	  mov byte[esi],0
1270
	.no_text_data:
1256
	.no_text_data:
Line 1271... Line 1257...
1271
	pop esi ;restore esi
1257
	pop esi ;restore esi
1272
 
1258
 
1273
	mov ecx,eax
1259
	mov ecx,eax
1274
	imul ecx,sizeof.TreeList
1260
	imul ecx,sizeof.TreeList
1275
	add ecx,dword[edi+14] ; *** ecx = tex[po_t] ***
1261
	add ecx,tl_data_nodes ; *** ecx = node[po_t] ***
1276
	add ecx,8   ; *** ecx = tex[po_t].next ***
1262
	add ecx,8   ; *** ecx = node[po_t].next ***
Line 1277... Line 1263...
1277
	push dword [ecx] ;tex[i].next=tex[po_t].next;
1263
	push dword [ecx] ;node[i].next=node[po_t].next;
1278
	pop dword [edx+8]
1264
	pop dword [edx+8]
1279
 
1265
 
Line 1280... Line 1266...
1280
	call tl_get_node_index ;*** eax = i ***
1266
	call tl_get_node_index ;*** eax = i ***
1281
	cmp eax,dword[edi+6] ;info_max_count
1267
	cmp eax,dword[edi+6] ;info_max_count
1282
	jge .u0
1268
	jge .u0
1283
 
1269
 
1284
	mov [ecx],eax ;tex[po_t].next=i; // ññûëêè ïåðåíàïðàâëÿåì
1270
	mov [ecx],eax ;node[po_t].next=i; // ññûëêè ïåðåíàïðàâëÿåì
Line 1285... Line 1271...
1285
	mov ecx,[edx+8] ; *** ecx = tex[i].next ***
1271
	mov ecx,[edx+8] ; *** ecx = node[i].next ***
1286
	imul ecx,sizeof.TreeList
1272
	imul ecx,sizeof.TreeList
1287
	add ecx,dword[edi+14] ; *** ecx = tex[tex[i].next] ***
1273
	add ecx,tl_data_nodes ; *** ecx = node[node[i].next] ***
1288
	mov [ecx+4],eax ;tex[tex[i].next].perv=i;
1274
	mov [ecx+4],eax ;node[node[i].next].perv=i;
Line 1334... Line 1320...
1334
    mov edi,dword[ebp+12]
1320
    mov edi,dword[ebp+12]
1335
    call tl_get_cur_node_index ;eax=po_t
1321
    call tl_get_cur_node_index ;eax=po_t
1336
    cmp eax,2
1322
    cmp eax,2
1337
    jl @f
1323
    jl @f
1338
      xor ecx,ecx
1324
      xor ecx,ecx
1339
      mov cx,word[edi+4];info_size
1325
      mov cx,tl_info_size
1340
      imul eax,ecx
1326
      imul eax,ecx
1341
      add eax,dword[edi]
1327
      add eax,dword[edi]
1342
      mov edi,eax
1328
      mov edi,eax
1343
      mov esi,dword[ebp+8] ;pointer to node data
1329
      mov esi,dword[ebp+8] ;pointer to node data
1344
      rep movsb
1330
      rep movsb
Line 1345... Line 1331...
1345
 
1331
 
1346
      mov esi,edi
1332
      mov esi,edi
1347
      mov edi,dword[ebp+12] ;restore edi
1333
      mov edi,dword[ebp+12] ;restore edi
1348
      mov ecx,tl_info_capt_offs
1334
      mov ecx,tl_info_capt_offs
1349
      cmp cx,word[edi+4] ;+4 info_size
1335
      cmp cx,tl_info_size
1350
      jge .no_text_data
1336
      jge .no_text_data
1351
	dec esi
1337
	dec esi
1352
	mov byte[esi],0
1338
	mov byte[esi],0
Line 1368... Line 1354...
1368
    call tl_get_cur_node_index ;eax=po_t
1354
    call tl_get_cur_node_index ;eax=po_t
1369
    mov dword[ebp+8],0 ;if return 0 pointer
1355
    mov dword[ebp+8],0 ;if return 0 pointer
1370
    cmp eax,2
1356
    cmp eax,2
1371
    jl @f
1357
    jl @f
1372
      xor ecx,ecx
1358
      xor ecx,ecx
1373
      mov cx,word[edi+4];info_size
1359
      mov cx,tl_info_size
1374
      imul eax,ecx
1360
      imul eax,ecx
1375
      add eax,dword[edi]
1361
      add eax,dword[edi]
1376
      mov dword[ebp+8],eax ;return node data pointer
1362
      mov dword[ebp+8],eax ;return node data pointer
1377
    @@:
1363
    @@:
1378
  pop edi ecx eax
1364
  pop edi ecx eax
Line 1389... Line 1375...
1389
  push eax ecx edx edi
1375
  push eax ecx edx edi
1390
    mov edi,dword[ebp+12]
1376
    mov edi,dword[ebp+12]
1391
    mov eax,dword[ebp+8]
1377
    mov eax,dword[ebp+8]
Line 1392... Line 1378...
1392
 
1378
 
1393
    ;cycle to nodes
1379
    ;cycle to nodes
1394
    mov edx,dword[edi+14] ;+14 óêàçàòåëü íà ñòðóêòóðû óçëîâ
1380
    mov edx,tl_data_nodes
1395
    mov ecx,edx
1381
    mov ecx,edx
1396
    add ecx,sizeof.TreeList
1382
    add ecx,sizeof.TreeList
1397
    @@:
1383
    @@:
1398
      call tl_iterat_next_all
1384
      call tl_iterat_next_all
Line 1419... Line 1405...
1419
  mov ebp,esp
1405
  mov ebp,esp
1420
  push ecx edx edi
1406
  push ecx edx edi
1421
    mov edi,dword[ebp+12]
1407
    mov edi,dword[ebp+12]
1422
    mov edx,dword[ebp+8]
1408
    mov edx,dword[ebp+8]
Line 1423... Line 1409...
1423
 
1409
 
1424
    mov ecx,dword[edi+14] ;+14 óêàçàòåëü íà ñòðóêòóðû óçëîâ
1410
    mov ecx,tl_data_nodes
Line 1425... Line 1411...
1425
    add ecx,sizeof.TreeList
1411
    add ecx,sizeof.TreeList
1426
 
1412
 
1427
    call tl_iterat_next_all
1413
    call tl_iterat_next_all
Line 1449... Line 1435...
1449
    mov dword[ebp+12],0
1435
    mov dword[ebp+12],0
1450
    call tl_get_node_index ;eax = node index
1436
    call tl_get_node_index ;eax = node index
1451
    cmp eax,2
1437
    cmp eax,2
1452
    jl @f
1438
    jl @f
1453
      xor ecx,ecx
1439
      xor ecx,ecx
1454
      mov cx,word[edi+4];info_size
1440
      mov cx,tl_info_size
1455
      imul eax,ecx
1441
      imul eax,ecx
1456
      add eax,dword[edi]
1442
      add eax,dword[edi]
1457
      mov dword[ebp+12],eax ;return node data pointer
1443
      mov dword[ebp+12],eax ;return node data pointer
1458
    @@:
1444
    @@:
1459
  pop edi ecx eax
1445
  pop edi ecx eax
Line 1467... Line 1453...
1467
align 4
1453
align 4
1468
tl_get_cur_node_index: ;áåðåò ïîçèöèþ ïîä êóðñîðîì
1454
tl_get_cur_node_index: ;áåðåò ïîçèöèþ ïîä êóðñîðîì
1469
  push ecx edx
1455
  push ecx edx
1470
    ;cycle to nodes
1456
    ;cycle to nodes
1471
    xor eax,eax
1457
    xor eax,eax
1472
    mov edx,dword[edi+14] ;+14 óêàçàòåëü íà ñòðóêòóðû óçëîâ
1458
    mov edx,tl_data_nodes
1473
    mov ecx,edx
1459
    mov ecx,edx
1474
    add ecx,sizeof.TreeList
1460
    add ecx,sizeof.TreeList
1475
    @@:
1461
    @@:
1476
      call tl_iterat_next
1462
      call tl_iterat_next
1477
      cmp edx,ecx
1463
      cmp edx,ecx
Line 1480... Line 1466...
1480
      je @f
1466
      je @f
1481
      inc eax
1467
      inc eax
1482
      jmp @b
1468
      jmp @b
1483
    @@:
1469
    @@:
1484
  mov eax,edx
1470
  mov eax,edx
1485
  sub eax,dword[edi+14] ;+14 óêàçàòåëü íà ñòðóêòóðû óçëîâ
1471
  sub eax,tl_data_nodes
1486
  xor edx,edx
1472
  xor edx,edx
1487
  mov ecx,sizeof.TreeList
1473
  mov ecx,sizeof.TreeList
1488
  div ecx
1474
  div ecx
1489
  pop edx ecx
1475
  pop edx ecx
1490
  ret
1476
  ret
Line 1496... Line 1482...
1496
; eax = struct index of current node
1482
; eax = struct index of current node
1497
align 4
1483
align 4
1498
tl_get_node_index: ;áåðåò ïîçèöèþ óêàçàííîãî ñèìâîëà
1484
tl_get_node_index: ;áåðåò ïîçèöèþ óêàçàííîãî ñèìâîëà
1499
  push ecx edx
1485
  push ecx edx
1500
  mov eax,edx
1486
  mov eax,edx
1501
  sub eax,dword[edi+14] ;+14 óêàçàòåëü íà ñòðóêòóðû óçëîâ
1487
  sub eax,tl_data_nodes
1502
  xor edx,edx
1488
  xor edx,edx
1503
  mov ecx,sizeof.TreeList
1489
  mov ecx,sizeof.TreeList
1504
  div ecx
1490
  div ecx
1505
  pop edx ecx
1491
  pop edx ecx
1506
  ret
1492
  ret
Line 1513... Line 1499...
1513
    mov edi,dword[ebp+8]
1499
    mov edi,dword[ebp+8]
1514
    call tl_get_cur_node_index ;eax=po_t
1500
    call tl_get_cur_node_index ;eax=po_t
1515
    cmp eax,2
1501
    cmp eax,2
1516
    jl @f
1502
    jl @f
1517
      imul eax,sizeof.TreeList
1503
      imul eax,sizeof.TreeList
1518
      add eax,dword[edi+14] ;+14 óêàçàòåëü íà ñòðóêòóðû óçëîâ
1504
      add eax,tl_data_nodes
1519
      mov edx,eax
1505
      mov edx,eax
1520
      inc tl_ch_tim
1506
      inc tl_ch_tim
1521
      mov eax,tl_ch_tim
1507
      mov eax,tl_ch_tim
1522
      mov dword[edx+16],eax
1508
      mov dword[edx+16],eax
1523
      call tb_scrol_resize ;îáðàáîòêà ñêðîëëèíãà
1509
      call tb_scrol_resize ;îáðàáîòêà ñêðîëëèíãà
Line 1594... Line 1580...
1594
align 4
1580
align 4
1595
tl_get_node_count: ;áåðåò ÷èñëî âñåõ âèäèìûõ óçëîâ (íå ñ÷èòàÿ çàêðûòûõ äî÷åðíèõ)
1581
tl_get_node_count: ;áåðåò ÷èñëî âñåõ âèäèìûõ óçëîâ (íå ñ÷èòàÿ çàêðûòûõ äî÷åðíèõ)
1596
  push ecx edx
1582
  push ecx edx
1597
    ;cycle to nodes
1583
    ;cycle to nodes
1598
    xor eax,eax
1584
    xor eax,eax
1599
    mov edx,dword[edi+14] ;+14 óêàçàòåëü íà ñòðóêòóðû óçëîâ
1585
    mov edx,tl_data_nodes
1600
    mov ecx,edx
1586
    mov ecx,edx
1601
    add ecx,sizeof.TreeList
1587
    add ecx,sizeof.TreeList
1602
    @@:
1588
    @@:
1603
      call tl_iterat_next
1589
      call tl_iterat_next
1604
      cmp edx,ecx
1590
      cmp edx,ecx
Line 1657... Line 1643...
1657
    mov edi,dword[ebp+8]
1643
    mov edi,dword[ebp+8]
1658
    call tl_get_cur_node_index ;eax = ïîçèöèÿ óçëà íà êîòîðîì ñòîèò êóðñîð
1644
    call tl_get_cur_node_index ;eax = ïîçèöèÿ óçëà íà êîòîðîì ñòîèò êóðñîð
1659
    cmp eax,2 ;êóðñîð ñòîèò íà óçëå ?
1645
    cmp eax,2 ;êóðñîð ñòîèò íà óçëå ?
1660
    jl @f
1646
    jl @f
1661
      imul eax,sizeof.TreeList
1647
      imul eax,sizeof.TreeList
1662
      add eax,dword[edi+14] ;+14 óêàçàòåëü íà ñòðóêòóðû óçëîâ
1648
      add eax,tl_data_nodes
1663
      ;eax = óêàçàòåëü íà ñòðóêòóðó óçëà âûáðàííîãî êóðñîðîì
1649
      ;eax = óêàçàòåëü íà ñòðóêòóðó óçëà âûáðàííîãî êóðñîðîì
1664
      push dword edi
1650
      push dword edi
1665
      push dword eax
1651
      push dword eax
1666
      call tl_node_poi_get_next_info
1652
      call tl_node_poi_get_next_info
1667
      pop dword edx ;edx = óêàçàòåëü íà ñòðóêòóðó óçëà êîòîðûé èäåò ïîñëå óçëà eax
1653
      pop dword edx ;edx = óêàçàòåëü íà ñòðóêòóðó óçëà êîòîðûé èäåò ïîñëå óçëà eax
Line 1690... Line 1676...
1690
    jc @f
1676
    jc @f
1691
    call tl_get_cur_node_index ;eax=po_t
1677
    call tl_get_cur_node_index ;eax=po_t
1692
    cmp eax,2
1678
    cmp eax,2
1693
    jl @f
1679
    jl @f
1694
      imul eax,sizeof.TreeList
1680
      imul eax,sizeof.TreeList
1695
      add eax,dword[edi+14] ;+14 óêàçàòåëü íà ñòðóêòóðû óçëîâ
1681
      add eax,tl_data_nodes
1696
      mov edx,eax
1682
      mov edx,eax
1697
      inc word[edx+2]
1683
      inc word[edx+2]
1698
    @@:
1684
    @@:
1699
  pop edi edx eax
1685
  pop edi edx eax
1700
  pop ebp
1686
  pop ebp
Line 1708... Line 1694...
1708
    mov edi,dword[ebp+8]
1694
    mov edi,dword[ebp+8]
1709
    call tl_get_cur_node_index ;eax=po_t
1695
    call tl_get_cur_node_index ;eax=po_t
1710
    cmp eax,2
1696
    cmp eax,2
1711
    jl @f
1697
    jl @f
1712
      imul eax,sizeof.TreeList
1698
      imul eax,sizeof.TreeList
1713
      add eax,dword[edi+14] ;+14 óêàçàòåëü íà ñòðóêòóðû óçëîâ
1699
      add eax,tl_data_nodes
1714
      mov edx,eax
1700
      mov edx,eax
1715
      cmp word[edx+2],0
1701
      cmp word[edx+2],0
1716
      je @f
1702
      je @f
1717
      dec word[edx+2]
1703
      dec word[edx+2]
1718
    @@:
1704
    @@: