Subversion Repositories Kolibri OS

Rev

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

Rev 1285 Rev 1303
Line 1... Line 1...
1
; ìàêðîñ äëÿ ñèñòåìíîé áèáëèîòåêè box_lib.obj
1
; ìàêðîñ äëÿ ñèñòåìíîé áèáëèîòåêè box_lib.obj
2
; ýëåìåíò TreeList äëÿ Kolibri OS
2
; ýëåìåíò TreeList äëÿ Kolibri OS
3
; ôàéë ïîñëåäíèé ðàç èçìåíÿëñÿ 24.11.2009 IgorA
3
; ôàéë ïîñëåäíèé ðàç èçìåíÿëñÿ 2.12.2009 IgorA
4
; íà êîä ïðèìåíåíà GPL2 ëèöåíçèÿ
4
; íà êîä ïðèìåíåíà GPL2 ëèöåíçèÿ
Line 5... Line 5...
5
 
5
 
6
 
6
 
Line 30... Line 30...
30
tl_box_left   equ dword[edi+58]
30
tl_box_left   equ dword[edi+58]
31
tl_box_top    equ dword[edi+62]
31
tl_box_top    equ dword[edi+62]
32
tl_box_width  equ dword[edi+66]
32
tl_box_width  equ dword[edi+66]
33
tl_box_height equ dword[edi+70]
33
tl_box_height equ dword[edi+70]
34
tl_capt_cy    equ  word[edi+74] ;âûñîòà ïîäïèñè
34
tl_capt_cy    equ  word[edi+74] ;âûñîòà ïîäïèñè
35
tl_info_capt_offs equ dword[edi+76] ;ñäâèã äëÿ íà÷àëà òåêñòà (ïîäïèñè óçëà)
35
tl_info_capt_offs equ word[edi+76] ;ñäâèã äëÿ íà÷àëà òåêñòà (ïîäïèñè óçëà)
-
 
36
tl_info_capt_len equ word[edi+78] ;äëèííà òåêñòà ïîäïèñè óçëà (åñëè = 0 òî äî êîíöà ñòðóêòóðû)
36
tl_el_focus   equ dword[edi+80] ;óêàçàòåëü íà ñòðóêòóðó ýëåìåíòà â ôîêóñå
37
tl_el_focus   equ dword[edi+80] ;óêàçàòåëü íà ñòðóêòóðó ýëåìåíòà â ôîêóñå
37
tl_p_scrol    equ dword[edi+84] ;óêàçàòåëü íà ñòðóêòóðó ñêðîëëèíãà
38
tl_p_scrol    equ dword[edi+84] ;óêàçàòåëü íà ñòðóêòóðó ñêðîëëèíãà
38
tl_sb_draw    equ dword[edi+88] ;óêàçàòåëü íà ôóíêöèþ ïåðåðèñîâûâàþùóþ ñêðîëëèíã
39
tl_sb_draw    equ dword[edi+88] ;óêàçàòåëü íà ôóíêöèþ ïåðåðèñîâûâàþùóþ ñêðîëëèíã
39
tl_on_press   equ dword[edi+96] ;óêàçàòåëü íà ôóíêöèþ, êîòîðàÿ âûçûâàåòñÿ ïðè íàæàòèè Enter
40
tl_on_press   equ dword[edi+96] ;óêàçàòåëü íà ôóíêöèþ, êîòîðàÿ âûçûâàåòñÿ ïðè íàæàòèè Enter
Line 40... Line 41...
40
 
41
 
41
;êîíñòàíòû ñòèëÿ
42
;êîíñòàíòû ñòèëÿ
42
tl_key_no_edit   equ   1b ;ýëåìåíò íåëüçÿ ðåäàêòèðîâàòü íà êëàâèàòóðå (èçìåíÿòü óðîâíè, óäàëÿòü)
43
tl_key_no_edit   equ   1b ;ýëåìåíò íåëüçÿ ðåäàêòèðîâàòü íà êëàâèàòóðå (èçìåíÿòü óðîâíè, óäàëÿòü)
43
tl_draw_par_line equ  10b ;ðèñîâàòü ëèíèè ê ðîäèòåëüñêîìó óçëó
44
tl_draw_par_line equ  10b ;ðèñîâàòü ëèíèè ê ðîäèòåëüñêîìó óçëó
Line -... Line 45...
-
 
45
tl_list_box_mode equ 100b ;ñòèëü íå îòîáðàæàåò óðîâíè (êàê â ListBox âñå îäíîãî óðîâíÿ)
-
 
46
 
-
 
47
;êîíñòàíòû äëÿ ôóíêöèé
-
 
48
tl_err_save_memory_size equ  10b ;íå õâàòàåò ïàìÿòè äëÿ ñîõðàíåíèÿ ýëåìåíòà
-
 
49
tl_err_load_caption     equ   1b ;â ïàìÿòè íåò çàãîëîâêà 'tree'
-
 
50
tl_err_load_info_size   equ 100b ;íå ñîâïàäàåò ðàçìåð èíôîðìàöèîííîé ñòðóêòóðû ïðè îòêðûòèè
-
 
51
tl_load_mode_add        equ 0x20000 ;îïöèÿ ñ÷èòûâàíèÿ â ðåæèìå äîáàâëåíèÿ èíôîðìàöèè
44
tl_list_box_mode equ 100b ;ñòèëü íå îòîáðàæàåò óðîâíè (êàê â ListBox âñå îäíîãî óðîâíÿ)
52
tl_save_load_heder_size equ 26 ;ðàçìåð çàãîëîâêà äëÿ çàïèñè/÷òåíèÿ ýëåìåíòîâ
45
 
53
 
46
;data_info	 dd ? ;+ 0 óêàçàòåëü íà îñíîâíûå äàíûå
54
;data_info	 dd ? ;+ 0 óêàçàòåëü íà îñíîâíûå äàíûå
47
;info_max_count dd ? ;+ 6 ìàêñèìàëüíîå êîëëè÷åñòâî ñòðóêòóð
55
;info_max_count dd ? ;+ 6 ìàêñèìàëüíîå êîëëè÷åñòâî ñòðóêòóð
48
;data_img	 dd ? ;+18 óêàçàòåëü íà èçîáðàæåíèÿ
56
;data_img	 dd ? ;+18 óêàçàòåëü íà èçîáðàæåíèÿ
Line 49... Line 57...
49
;ls_tim		dd ? ;+34 âðåìÿ ïîñëåäíåãî ñîõðàíåíèÿ
57
;ls_tim		dd ? ;+34 âðåìÿ ïîñëåäíåãî ñîõðàíåíèÿ
50
;on_activate dd ? ;+92 óêàçàòåëü íà ôóíêöèþ ïðè àêòèâèðîâàíèè óçëà
58
;on_activate dd ? ;+92 óêàçàòåëü íà ôóíêöèþ ïðè àêòèâèðîâàíèè óçëà
51
 
59
 
52
struc tree_list info_size,info_max_count,style, img_cx,img_cy,\
60
struc tree_list info_size,info_max_count,style, img_cx,img_cy,\
53
    col_bkg,col_zag,col_txt, box_l,box_t,box_w,box_h, capt_cy,info_capt_offs,\
61
    col_bkg,col_zag,col_txt, box_l,box_t,box_w,box_h, capt_cy,info_capt_offs,\
54
    el_focus, p_scrol,p_sb_draw,on_press {
62
    info_capt_len,el_focus, p_scrol,p_sb_draw,on_press {
55
  .data_info	dd 0
63
  .data_info	dd 0
56
  .info_size	dw info_size
64
  .info_size	dw info_size
Line 66... Line 74...
66
  .tim_undo	 dd 0
74
  .tim_undo	 dd 0
67
  .cur_pos	  dd 0
75
  .cur_pos	  dd 0
68
  .col_bkg	  dd col_bkg
76
  .col_bkg	  dd col_bkg
69
  .col_zag	  dd col_zag
77
  .col_zag	  dd col_zag
70
  .col_txt	  dd col_txt
78
  .col_txt	  dd col_txt
71
  .box_lert   dd box_l
79
  .box_left   dd box_l
72
  .box_top    dd box_t
80
  .box_top    dd box_t
73
  .box_width  dd box_w
81
  .box_width  dd box_w
74
  .box_height dd box_h
82
  .box_height dd box_h
75
  .capt_cy	   dw capt_cy
83
  .capt_cy	   dw capt_cy
76
  .info_capt_offs dd info_capt_offs
84
  .info_capt_offs dw info_capt_offs
-
 
85
  .info_capt_len dw info_capt_len
77
  .el_focus dd el_focus
86
  .el_focus dd el_focus
78
  .p_scrol  dd p_scrol
87
  .p_scrol  dd p_scrol
79
  .p_sb_draw dd p_sb_draw
88
  .p_sb_draw dd p_sb_draw
80
  .on_activate dd 0
89
  .on_activate dd 0
81
  .on_press dd on_press
90
  .on_press dd on_press
Line 203... Line 212...
203
      mov byte[eax],0 ;÷èñòèì óçëû 0-ìè
212
      mov byte[eax],0 ;÷èñòèì óçëû 0-ìè
204
      inc eax
213
      inc eax
205
      loop @b
214
      loop @b
206
    mov eax,tl_data_nodes ;óêàçàòåëü íà 0-é óçåë
215
    mov eax,tl_data_nodes ;óêàçàòåëü íà 0-é óçåë
207
    mov dword[eax+8],1 ;óêàçàòåëü next â 0-ì óçëå ïðèðàâíèâàåì ê 1
216
    mov dword[eax+8],1 ;óêàçàòåëü next â 0-ì óçëå ïðèðàâíèâàåì ê 1
-
 
217
 
208
    call tb_scrol_resize ;îáðàáîòêà ñêðîëëèíãà
218
    cmp tl_p_scrol,0 ;îáðàáîòêà ñêðîëëèíãà
-
 
219
    je @f
-
 
220
      mov eax,tl_p_scrol
-
 
221
      mov dword[eax+24],0 ;+24 .position
-
 
222
      call tb_scrol_resize
-
 
223
    @@:
209
    pop edi ecx eax
224
    pop edi ecx eax
210
  pop ebp
225
  pop ebp
211
  ret 4
226
  ret 4
Line 212... Line 227...
212
 
227
 
213
 
228
 
214
align 4
229
align 4
215
tl_key: ;ðåàêöèÿ íà êëàâèàòóðó
230
tl_key: ;ðåàêöèÿ íà êëàâèàòóðó
216
  push ebp
231
  push ebp
217
  mov ebp,esp
232
  mov ebp,esp
Line 218... Line 233...
218
    push ebx edi
233
    push ebx ecx edi
219
    mov edi,dword[ebp+8]
234
    mov edi,dword[ebp+8]
220
 
235
 
Line -... Line 236...
-
 
236
    mov ebx,tl_el_focus
-
 
237
    cmp dword[ebx],edi
-
 
238
    jne .no_focus ;ýëåìåíò íå â ôîêóñå
-
 
239
 
-
 
240
    push eax
-
 
241
    mov eax,66
-
 
242
    mov ebx,2
-
 
243
    int 0x40  ;ïîëó÷èòü ðåæèì ââîäà ñ êëàâèàòóðû
-
 
244
 
-
 
245
    lea ecx,[tl_key_scan]
-
 
246
    cmp eax,1 ;1 = ñêàíêîäû
-
 
247
    je @f
221
    mov ebx,tl_el_focus
248
      lea ecx,[tl_key_ascii]
222
    cmp dword[ebx],edi
249
    @@:
223
    jne .no_focus ;ýëåìåíò íå â ôîêóñå
250
    pop eax
224
 
251
 
225
    xor bx,bx
252
    xor bx,bx
226
    cmp ah,13 ;Enter
253
    cmp ah,byte[ecx] ;Enter
227
    jne @f
254
    jne @f
228
      cmp tl_on_press,0
255
      cmp tl_on_press,0
229
      je @f
256
      je @f
230
        call tl_on_press
257
        call tl_on_press
231
    @@:
258
    @@:
232
    cmp ah,32 ;Space
259
    cmp ah,byte[ecx+1] ;Space
233
    jne @f
260
    jne @f
234
      push dword edi
261
      push dword edi
235
      call tl_node_close_open
262
      call tl_node_close_open
236
    @@:
263
    @@:
237
    cmp ah,178 ;Up
264
    cmp ah,byte[ecx+2] ;Up
238
    jne @f
265
    jne @f
239
      push dword edi
266
      push dword edi
240
      call tl_cur_perv
267
      call tl_cur_perv
241
    @@:
268
    @@:
242
    cmp ah,177 ;Down
269
    cmp ah,byte[ecx+3] ;Down
-
 
270
    jne @f
-
 
271
      push dword edi
-
 
272
      call tl_cur_next
-
 
273
    @@:
-
 
274
    cmp ah,byte[ecx+7] ;Page Up
-
 
275
    jne @f
-
 
276
      push dword edi
-
 
277
      call tl_cur_page_up
-
 
278
    @@:
-
 
279
    cmp ah,byte[ecx+8] ;Page Down
Line 243... Line 280...
243
    jne @f
280
    jne @f
244
      push dword edi
281
      push dword edi
245
      call tl_cur_next
282
      call tl_cur_page_down
246
    @@:
283
    @@:
247
 
284
 
248
    bt tl_style,0 ;tl_key_no_edit
285
    bt tl_style,0 ;tl_key_no_edit
249
    jc .no_edit
286
    jc .no_edit
250
      cmp ah,176 ;Left
287
      cmp ah,byte[ecx+4] ;Left
251
      jne @f
288
      jne @f
252
	push dword edi
289
	push dword edi
253
	call tl_node_lev_dec
290
	call tl_node_lev_dec
254
	mov bx,1
291
	mov bx,1
255
      @@:
292
      @@:
256
      cmp ah,179 ;Right
293
      cmp ah,byte[ecx+5] ;Right
257
      jne @f
294
      jne @f
258
	push dword edi
295
	push dword edi
259
	call tl_node_lev_inc
296
	call tl_node_lev_inc
260
	mov bx,1
297
	mov bx,1
261
      @@:
298
      @@:
262
      cmp ah,182 ;Delete
299
      cmp ah,byte[ecx+6] ;Delete
Line 271... Line 308...
271
    jne .no_focus
308
    jne .no_focus
272
      push dword edi
309
      push dword edi
273
      call tl_draw
310
      call tl_draw
274
    .no_focus:
311
    .no_focus:
Line 275... Line 312...
275
 
312
 
276
    pop edi ebx
313
    pop edi ecx ebx
277
  pop ebp
314
  pop ebp
Line 278... Line 315...
278
  ret 4
315
  ret 4
279
 
316
 
Line 1111... Line 1148...
1111
tl_draw_node_caption:
1148
tl_draw_node_caption:
1112
    push ebx ecx edx esi
1149
    push ebx ecx edx esi
Line 1113... Line 1150...
1113
 
1150
 
1114
    xor esi,esi
1151
    xor esi,esi
1115
    mov si,tl_info_size
1152
    mov si,tl_info_size
1116
    cmp esi,tl_info_capt_offs
1153
    cmp si,tl_info_capt_offs
Line 1117... Line 1154...
1117
    jle @f ;if caption size <= 0
1154
    jle @f ;if caption size <= 0
1118
 
1155
 
1119
    push eax
1156
    push eax
1120
      call tl_get_node_index ;eax = node index
1157
      call tl_get_node_index ;eax = node index
-
 
1158
      imul esi,eax
1121
      imul esi,eax
1159
    pop eax
1122
    pop eax
-
 
1123
      add esi,dword[edi]
1160
      add si,tl_info_capt_offs
Line 1124... Line 1161...
1124
      add esi,tl_info_capt_offs
1161
      add esi,dword[edi]
1125
      mov edx,esi
1162
      mov edx,esi
1126
 
1163
 
Line 1221... Line 1258...
1221
      jne .u0
1258
      jne .u0
1222
      cmp dword [edx+16],0
1259
      cmp dword [edx+16],0
1223
      jne .u0
1260
      jne .u0
Line 1224... Line 1261...
1224
 
1261
 
1225
	inc  tl_ch_tim
1262
	inc  tl_ch_tim
1226
	push  word[ebp+14] ;get type
1263
	mov cx,word[ebp+14] ;get type
-
 
1264
	mov word[edx],cx
-
 
1265
 mov cl,byte[ebp+13]
1227
	pop   word[edx]
1266
 mov byte[edx+3],cl  ;node[i].clo
1228
	mov   byte[edx+2], 0 ;node[i].lev=0
1267
	mov   byte[edx+2], 0 ;node[i].lev=0
1229
  bt tl_style,2 ;tl_list_box_mode
1268
  bt tl_style,2 ;tl_list_box_mode
1230
  jc .l_box_m
1269
  jc .l_box_m
1231
    mov cl,byte[ebp+12]
1270
    mov cl,byte[ebp+12]
Line 1249... Line 1288...
1249
	xchg edi,esi
1288
	xchg edi,esi
1250
	rep movsb
1289
	rep movsb
Line 1251... Line 1290...
1251
 
1290
 
1252
	mov esi,edi
1291
	mov esi,edi
1253
	mov edi,dword[ebp+16] ;restore edi
1292
	mov edi,dword[ebp+16] ;restore edi
1254
	mov ecx,tl_info_capt_offs
1293
	mov cx,tl_info_capt_offs
1255
	cmp cx,tl_info_size
1294
	cmp cx,tl_info_size
-
 
1295
	jge .no_text_data
-
 
1296
 cmp tl_info_capt_len,0 ;ïðîâåðÿåì åñòü ëè îãðàíè÷åíèå íà äëèííó ñòðîêè
-
 
1297
 je .no_len_ogran
-
 
1298
   add cx,tl_info_capt_len
-
 
1299
   and ecx,0xffff
-
 
1300
   add esi,ecx
-
 
1301
   mov cx,tl_info_size
-
 
1302
   sub esi,ecx
1256
	jge .no_text_data
1303
 .no_len_ogran:
1257
	  dec esi
1304
	  dec esi
1258
	  mov byte[esi],0
1305
	  mov byte[esi],0
1259
	.no_text_data:
1306
	.no_text_data:
Line 1332... Line 1379...
1332
      mov esi,dword[ebp+8] ;pointer to node data
1379
      mov esi,dword[ebp+8] ;pointer to node data
1333
      rep movsb
1380
      rep movsb
Line 1334... Line 1381...
1334
 
1381
 
1335
      mov esi,edi
1382
      mov esi,edi
1336
      mov edi,dword[ebp+12] ;restore edi
1383
      mov edi,dword[ebp+12] ;restore edi
1337
      mov ecx,tl_info_capt_offs
1384
      mov cx,tl_info_capt_offs
1338
      cmp cx,tl_info_size
1385
      cmp cx,tl_info_size
-
 
1386
      jge .no_text_data
-
 
1387
        mov ax,tl_info_capt_len ;ïðîâåðÿåì åñòü ëè îãðàíè÷åíèå íà äëèííó òåêñòà
-
 
1388
        cmp ax,0
-
 
1389
        je .no_limit
-
 
1390
        add cx,ax ;cx = tl_info_capt_offs + tl_info_capt_len
-
 
1391
        and ecx,0xffff
-
 
1392
        xor eax,eax
-
 
1393
        mov ax,tl_info_size
-
 
1394
        cmp eax,ecx
-
 
1395
        jl .no_limit ;ïîëüçîâàòåëü çàäàë ñëèøêîì áîëüøóþ äëèííó òåêñòà
-
 
1396
        add esi,ecx
-
 
1397
        sub esi,eax
1339
      jge .no_text_data
1398
        .no_limit:
1340
	dec esi
-
 
-
 
1399
          dec esi
1341
	mov byte[esi],0
1400
          mov byte[esi],0 ;îáíóëÿåì ïîñëåäíèé ñèìâîë ïîäïèñè, ÷òî-áû íå ãëþ÷èëî åñëè ïîëüçîâàòåëü çàäàë íåïðàâèëüíóþ ñòðóêòóðó
Line 1342... Line 1401...
1342
      .no_text_data:
1401
      .no_text_data:
1343
 
1402
 
1344
    @@:
1403
    @@:
Line 1597... Line 1656...
1597
      jmp @b
1656
      jmp @b
1598
    @@:
1657
    @@:
1599
  pop edx ecx
1658
  pop edx ecx
1600
  ret
1659
  ret
Line -... Line 1660...
-
 
1660
 
-
 
1661
;input:
-
 
1662
; edi = pointer 'tl' struct
-
 
1663
;output:
-
 
1664
; eax = struct index of current node
-
 
1665
align 4
-
 
1666
tl_get_node_count_all: ;áåðåò ÷èñëî âñåõ âèäèìûõ óçëîâ (ñ÷èòàÿ çàêðûòûå äî÷åðíèå)
-
 
1667
  push ecx edx
-
 
1668
    ;cycle to nodes
-
 
1669
    xor eax,eax
-
 
1670
    mov edx,tl_data_nodes
-
 
1671
    mov ecx,edx
-
 
1672
    add ecx,sizeof.TreeList
-
 
1673
    @@:
-
 
1674
      call tl_iterat_next_all
-
 
1675
      cmp edx,ecx
-
 
1676
      jle @f
-
 
1677
      inc eax
-
 
1678
      jmp @b
-
 
1679
    @@:
-
 
1680
  pop edx ecx
-
 
1681
  ret
1601
 
1682
 
1602
align 4
1683
align 4
1603
tl_cur_perv: ;ïåðåíåñòè êóðñîð íà 1 ïîçèöèþ âûøå
1684
tl_cur_perv: ;ïåðåíåñòè êóðñîð íà 1 ïîçèöèþ âûøå
1604
  push ebp
1685
  push ebp
1605
  mov ebp,esp
1686
  mov ebp,esp
Line 1639... Line 1720...
1639
  pop esi edi eax
1720
  pop esi edi eax
1640
  pop ebp
1721
  pop ebp
1641
  ret 4
1722
  ret 4
Line 1642... Line 1723...
1642
 
1723
 
-
 
1724
align 4
-
 
1725
tl_cur_page_up: ;ïåðåíåñòè êóðñîð íà 1 ñòðàíèöó âûøå
-
 
1726
  push ebp
-
 
1727
  mov ebp,esp
-
 
1728
  push eax edi esi
-
 
1729
    mov edi,dword[ebp+8]
-
 
1730
 
-
 
1731
    cmp tl_p_scrol,0 ;åñëè åñòü óêàçàòåëü íà ñêðîëëèíã
-
 
1732
    je .no_redraw
-
 
1733
 
-
 
1734
    mov esi,tl_p_scrol
-
 
1735
    call tl_get_rows_count ;eax = rows count
-
 
1736
 
-
 
1737
    cmp tl_cur_pos,0
-
 
1738
    jne @f
-
 
1739
    cmp dword[esi+24],0 ;åñëè ñêðîëëèíã íà âåðõó, âûõîäèì
-
 
1740
    jne @f
-
 
1741
      jmp .no_redraw
-
 
1742
    @@:
-
 
1743
      cmp tl_cur_pos,eax ;ïðîâåðÿåì ïîçèöèþ êóðñîðà è êîë-âî ñòîê íà ñòðàíèöå
-
 
1744
      jl @f ;åñëè ìåíüøå, òî ïðèðàâíèâàåì ê 0, ÷òî-áû íå îòíÿòü áîëüøå ÷åì íàäî
-
 
1745
        sub tl_cur_pos,eax
-
 
1746
        jmp .cursor
-
 
1747
      @@:
-
 
1748
        mov tl_cur_pos,0
-
 
1749
      .cursor:
-
 
1750
      cmp dword[esi+24],eax
-
 
1751
      jl @f
-
 
1752
        sub dword[esi+24],eax
-
 
1753
        jmp .scroll
-
 
1754
      @@:
-
 
1755
        mov dword[esi+24],0
-
 
1756
      .scroll:
-
 
1757
      ;ïåðåðèñîâêè îêíà è ñêðîëëèíãà
-
 
1758
      push dword edi
-
 
1759
      call tl_draw ;draw window
-
 
1760
      push dword esi
-
 
1761
      mov eax,dword[ebp+8]
-
 
1762
      mov eax,tl_sb_draw ;.redraw
-
 
1763
      call dword[eax]
-
 
1764
    .no_redraw:
-
 
1765
  pop esi edi eax
-
 
1766
  pop ebp
-
 
1767
  ret 4
-
 
1768
 
-
 
1769
align 4
-
 
1770
tl_cur_page_down: ;ïåðåíåñòè êóðñîð íà 1 ñòðàíèöó íèæå
-
 
1771
  push ebp
-
 
1772
  mov ebp,esp
-
 
1773
  push eax ebx ecx edi esi
-
 
1774
;eax - êîë-âî ñòðîê íà ñòðàíèöå
-
 
1775
;ebx - ìàêñ. ïîçèöèÿ êóðñîðà
-
 
1776
;ecx - ìàêñ. ïîçèöèÿ ñêðîëëèíãà
-
 
1777
    mov edi,dword[ebp+8]
-
 
1778
 
-
 
1779
    cmp tl_p_scrol,0 ;åñëè åñòü óêàçàòåëü íà ñêðîëëèíã
-
 
1780
    je .no_redraw
-
 
1781
 
-
 
1782
    mov esi,tl_p_scrol
-
 
1783
    call tl_get_node_count ;eax = node count
-
 
1784
    mov ebx,eax
-
 
1785
    call tl_get_rows_count ;eax = rows count
-
 
1786
 
-
 
1787
    mov ecx,ebx
-
 
1788
    inc ecx ;åñëè íèæíèé óçåë âèäåí íà ïîëîâèíó
-
 
1789
    cmp ecx,eax ;if (ecx>eax) { ecx=ecx-eax } else { ecx=0 }
-
 
1790
    jl @f
-
 
1791
      sub ecx,eax ;óìåíüøàåì ìàêñèìàëüíóþ ïîçèöèþ ñêðîëëèíãà, òàê ÷òî-áû áûëè âèäíû ïîñëåäíèå óçëû
-
 
1792
      jmp .control
-
 
1793
    @@:
-
 
1794
      xor ecx,ecx ;ecx=0 - âñå óçëû âëàçÿò â ýêðàí, ñêðîëëèíã íå íóæåí
-
 
1795
    .control:
-
 
1796
 
-
 
1797
    cmp tl_cur_pos,ebx ;êóðñîð âíèçó ?
-
 
1798
    jl @f
-
 
1799
    cmp dword[esi+24],ecx ;ñêðîëëèíã âíèçó ?
-
 
1800
    jl @f
-
 
1801
      jmp .no_redraw
-
 
1802
    @@:
-
 
1803
 
-
 
1804
      add tl_cur_pos,eax ;ïåðåìåùàåì êóðñîð
-
 
1805
      cmp tl_cur_pos,ebx
-
 
1806
      jl @f
-
 
1807
        mov tl_cur_pos,ebx
-
 
1808
      @@:
-
 
1809
 
-
 
1810
      add dword[esi+24],eax ;ïåðåìåùàåì ñêðîëëèíã
-
 
1811
      cmp dword[esi+24],ecx
-
 
1812
      jl @f
-
 
1813
        mov dword[esi+24],ecx
-
 
1814
      @@:
-
 
1815
 
-
 
1816
      ;ïåðåðèñîâêè îêíà è ñêðîëëèíãà
-
 
1817
      push dword edi
-
 
1818
      call tl_draw ;draw window
-
 
1819
      push dword esi
-
 
1820
      mov eax,dword[ebp+8]
-
 
1821
      mov eax,tl_sb_draw ;.redraw
-
 
1822
      call dword[eax]
-
 
1823
    .no_redraw:
-
 
1824
  pop esi edi ecx ebx eax
-
 
1825
  pop ebp
-
 
1826
  ret 4
-
 
1827
 
1643
align 4
1828
align 4
1644
tl_node_close_open: ;îòêðûòü/çàêðûòü óçåë (ðàáîòàåò ñ óçëàìè êîòîðûå èìåþò äî÷åðíèå óçëû)
1829
tl_node_close_open: ;îòêðûòü/çàêðûòü óçåë (ðàáîòàåò ñ óçëàìè êîòîðûå èìåþò äî÷åðíèå óçëû)
1645
  push ebp
1830
  push ebp
1646
  mov ebp,esp
1831
  mov ebp,esp
1647
  push eax edx edi
1832
  push eax edx edi
Line 1872... Line 2057...
1872
    int 0x40
2057
    int 0x40
1873
  pop esi edi edx ecx ebx eax
2058
  pop esi edi edx ecx ebx eax
1874
  @@:
2059
  @@:
1875
  ret
2060
  ret
Line -... Line 2061...
-
 
2061
 
-
 
2062
;input:
-
 
2063
;dword[ebp+ 8] - memory size
-
 
2064
;dword[ebp+12] - pointer to memory
-
 
2065
;dword[ebp+16] - options: 0 - first element, 1 - add next element
-
 
2066
;dword[ebp+20] - pointer to 'TreeList' struct
-
 
2067
;output:
-
 
2068
;dword[ebp+ 8] - error code
-
 
2069
align 4
-
 
2070
tl_save_mem:
-
 
2071
  push ebp
-
 
2072
  mov ebp,esp
-
 
2073
    push eax ebx ecx edx edi esi
-
 
2074
    mov esi,dword[ebp+12]
-
 
2075
    mov edi,dword[ebp+20]
-
 
2076
 
-
 
2077
    cmp dword[ebp+16],0 ;add mode
-
 
2078
    je @f
-
 
2079
      .beg_cycle:
-
 
2080
      cmp dword[esi],0x65657274 ;0x65657274 = 'tree'
-
 
2081
      jne @f
-
 
2082
      xor ebx,ebx
-
 
2083
      mov bx,word[esi+4]
-
 
2084
      imul ebx,dword[esi+6]
-
 
2085
      add ebx,tl_save_load_heder_size
-
 
2086
      add esi,ebx
-
 
2087
      jmp .beg_cycle
-
 
2088
    @@:
-
 
2089
 
-
 
2090
    xor ebx,ebx
-
 
2091
    mov bx,tl_info_size
-
 
2092
 
-
 
2093
    call tl_get_node_count_all ;eax = all node count
-
 
2094
 
-
 
2095
    mov ecx,eax  ;âû÷èñëÿåì ñêîëüêî ïàìÿòè äîëæíî áûòü çàïîëíåíî
-
 
2096
    imul ecx,ebx ;óìíîæàåì íà ðàçìåð ñòðóêòóðû óçëà
-
 
2097
    add ecx,tl_save_load_heder_size+1 ;element header +1 end element sumbol
-
 
2098
    add ecx,esi  ;äîáàâëÿåì óêàçàòåëü íà íà÷àëî ïàìÿòè (ñ ó÷åòîì ðàíåå çàïèñàííûõ ñòðóêòóð)
-
 
2099
    sub ecx,dword[ebp+12] ;îòíèìàåì óêàçàòåëü íà íà÷àëî ïàìÿòè (áåç ðàíåå çàïèñàííûõ ñòðóêòóð)
-
 
2100
    cmp ecx,dword[ebp+8]  ;ecx = element memory size
-
 
2101
    jg .err_mem_size
-
 
2102
 
-
 
2103
    ;save tree params
-
 
2104
    mov dword[esi],0x65657274 ;0x65657274 = 'tree'
-
 
2105
    mov word[esi+4],bx
-
 
2106
    mov dword[esi+6],eax ;element count
-
 
2107
    add esi,10
-
 
2108
 
-
 
2109
    mov eax,tl_style
-
 
2110
    mov dword[esi],eax
-
 
2111
    add esi,4
-
 
2112
 
-
 
2113
    mov eax,tl_cur_pos
-
 
2114
    mov dword[esi],eax
-
 
2115
    add esi,4
-
 
2116
 
-
 
2117
    mov ax,tl_info_capt_offs
-
 
2118
    mov word[esi],ax
-
 
2119
    add esi,2
-
 
2120
 
-
 
2121
    mov ax,tl_info_capt_len
-
 
2122
    mov word[esi],ax
-
 
2123
    add esi,2+4
-
 
2124
 
-
 
2125
    ;cycle to nodes
-
 
2126
    mov edx,tl_data_nodes
-
 
2127
    mov ecx,edx
-
 
2128
    add ecx,sizeof.TreeList
-
 
2129
    @@:
-
 
2130
      call tl_iterat_next_all
-
 
2131
      cmp edx,ecx
-
 
2132
      jle @f
-
 
2133
;save node params
-
 
2134
call tl_get_node_index ;eax = index of pointer [edx]
-
 
2135
mov dword[esi],eax
-
 
2136
 
-
 
2137
add esi,4
-
 
2138
mov eax,dword[edx] ;eax = (type; lev; clo)
-
 
2139
mov dword[esi],eax
-
 
2140
add esi,4
-
 
2141
 
-
 
2142
;push dword edi
-
 
2143
;call tl_node_get_data
-
 
2144
;pop eax
-
 
2145
push dword edi
-
 
2146
push dword edx
-
 
2147
call tl_node_poi_get_data
-
 
2148
pop dword eax
-
 
2149
 
-
 
2150
;call tl_node_copy_data
-
 
2151
push ecx edi
-
 
2152
  mov edi,eax
-
 
2153
  mov ecx,ebx
-
 
2154
  xchg esi,edi
-
 
2155
  rep movsb
-
 
2156
  mov esi,edi
-
 
2157
pop edi ecx
-
 
2158
;add esi,ebx
-
 
2159
      jmp @b
-
 
2160
    @@:
-
 
2161
    mov byte[esi],0 ;end of 'treelist'
-
 
2162
    mov dword[ebp+20],0 ;return error code
-
 
2163
    jmp @f
-
 
2164
      .err_mem_size:
-
 
2165
      or dword[ebp+20],tl_err_save_memory_size
-
 
2166
    @@:
-
 
2167
    pop esi edi edx ecx ebx eax
-
 
2168
  pop ebp
-
 
2169
  ret 12
-
 
2170
 
-
 
2171
;input:
-
 
2172
;dword[ebp+ 8] - memory size
-
 
2173
;dword[ebp+12] - pointer to memory
-
 
2174
;word[ebp+16] - options: element index
-
 
2175
;word[ebp+18] - options: 2*(add mode)+(init mode)
-
 
2176
;dword[ebp+20] - pointer to 'TreeList' struct
-
 
2177
;output:
-
 
2178
;dword[ebp+ 8] - error code
-
 
2179
align 4
-
 
2180
tl_load_mem:
-
 
2181
  push ebp
-
 
2182
  mov ebp,esp
-
 
2183
    push eax ebx ecx edx edi esi
-
 
2184
    mov esi,dword[ebp+12]
-
 
2185
    mov edi,dword[ebp+20]
-
 
2186
 
-
 
2187
    mov dword[ebp+20],0 ;return error code
-
 
2188
 
-
 
2189
    xor ecx,ecx
-
 
2190
    mov cx,word[ebp+16]
-
 
2191
    cmp cx,0 ;load in array mode
-
 
2192
    je @f
-
 
2193
      .beg_cycle:
-
 
2194
      cmp dword[esi],0x65657274 ;0x65657274 = 'tree'
-
 
2195
      jne .no_tree
-
 
2196
      xor ebx,ebx
-
 
2197
      mov bx,word[esi+4]
-
 
2198
      imul ebx,dword[esi+6]
-
 
2199
      add ebx,tl_save_load_heder_size
-
 
2200
      add esi,ebx
-
 
2201
      loop .beg_cycle
-
 
2202
    @@:
-
 
2203
 
-
 
2204
    cmp dword[esi],0x65657274 ;0x65657274 = 'tree'
-
 
2205
    jne .no_tree
-
 
2206
      bt word[ebp+18],1 ;load in add mode
-
 
2207
      jc @f
-
 
2208
        push dword edi
-
 
2209
        call tl_info_clear
-
 
2210
      @@:
-
 
2211
 
-
 
2212
      xor ebx,ebx
-
 
2213
      mov bx,word[esi+4] ;info_size
-
 
2214
      cmp bx,tl_info_size
-
 
2215
      je @f
-
 
2216
        or dword[ebp+20],tl_err_load_info_size
-
 
2217
      @@:
-
 
2218
      mov ecx,dword[esi+6] ;count nodes
-
 
2219
      cmp ecx,1
-
 
2220
      jl .end_f
-
 
2221
      add esi,tl_save_load_heder_size
-
 
2222
 
-
 
2223
      @@:
-
 
2224
;load node params
-
 
2225
push dword edi
-
 
2226
mov eax,dword[esi+4]
-
 
2227
ror eax,16
-
 
2228
push dword eax ;options (type; lev; clo)
-
 
2229
add esi,8
-
 
2230
push dword esi
-
 
2231
call tl_node_add
-
 
2232
 
-
 
2233
push dword edi
-
 
2234
call tl_cur_next
-
 
2235
;...
-
 
2236
add esi,ebx
-
 
2237
        loop @b
-
 
2238
 
-
 
2239
      jmp .end_f
-
 
2240
    .no_tree:
-
 
2241
      mov dword[ebp+20],tl_err_load_caption
-
 
2242
    .end_f:
-
 
2243
    pop esi edi edx ecx ebx eax
-
 
2244
  pop ebp
-
 
2245
  ret 12
-
 
2246
 
-
 
2247
;ascii scan key
-
 
2248
;  13    28 Enter
-
 
2249
;  32    57 Space
-
 
2250
; 178    72 Up
-
 
2251
; 177    80 Down
-
 
2252
; 176    75 Left
-
 
2253
; 179    77 Right
-
 
2254
; 182    83 Delete
-
 
2255
; 184    73 Pg Up
-
 
2256
; 183    81 Pg Dn
-
 
2257
 
-
 
2258
tl_key_ascii db 13,32,178,177,176,179,182,184,183
-
 
2259
tl_key_scan  db 28,57, 72, 80, 75, 77, 83, 73, 81
1876
 
2260
 
1877
txt_capt_cur db '‘âப ',0
2261
txt_capt_cur db '‘âப ',0
1878
txt_capt_otm db 'Žâ¬¥­ë',0
2262
txt_capt_otm db 'Žâ¬¥­ë',0
1879
}
2263
}