Subversion Repositories Kolibri OS

Rev

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

Rev 1401 Rev 1402
Line 1... Line 1...
1
; ìàêðîñ äëÿ ñèñòåìíîé áèáëèîòåêè box_lib.obj
1
; ìàêðîñ äëÿ ñèñòåìíîé áèáëèîòåêè box_lib.obj
2
; ýëåìåíò TreeList äëÿ Kolibri OS
2
; ýëåìåíò TreeList äëÿ Kolibri OS
3
; ôàéë ïîñëåäíèé ðàç èçìåíÿëñÿ 09.02.2010 IgorA
3
; ôàéë ïîñëåäíèé ðàç èçìåíÿëñÿ 10.02.2010 IgorA
4
; íà êîä ïðèìåíåíà GPL2 ëèöåíçèÿ
4
; íà êîä ïðèìåíåíà GPL2 ëèöåíçèÿ
Line 5... Line 5...
5
 
5
 
6
 
6
 
Line 679... Line 679...
679
; edx = pointer to some node struct
679
; edx = pointer to some node struct
680
; edi = pointer to 'TreeList' struct
680
; edi = pointer to 'TreeList' struct
681
;output:
681
;output:
682
; edx = pointer to next node struct
682
; edx = pointer to next node struct
683
align 4
683
align 4
684
tl_iterat_next:
684
tl_iterat_next: ;ïåðåõîä íà ñëåäóùèé âèäèìûé óçåë (ïðîïóñêàÿ çàêðûòûå)
685
  push bx
685
  push bx
686
  mov bl,0x7f
686
  mov bl,0x7f
687
  cmp byte[edx+3],1
687
  cmp byte[edx+3],1
688
  jne @f
688
  jne @f
689
    mov bl,byte[edx+2]
689
    mov bl,byte[edx+2]
Line 722... Line 722...
722
;input:
722
;input:
723
; ecx = pointer to 1 node struct
723
; ecx = pointer to 1 node struct
724
; edx = pointer to some node struct
724
; edx = pointer to some node struct
725
; edi = pointer to 'TreeList' struct
725
; edi = pointer to 'TreeList' struct
726
align 4
726
align 4
727
tl_iterat_next_all:
727
tl_iterat_next_all: ;ïåðåõîä íà ñëåäóùèé âèäèìûé óçåë (è íà çàêðûòûå òîæå)
728
  cmp tl_tim_undo,0
728
  cmp tl_tim_undo,0
729
  je .else
729
  je .else
Line 730... Line 730...
730
 
730
 
731
  push eax
731
  push eax
Line 751... Line 751...
751
;input:
751
;input:
752
; ecx = pointer to 1 node struct
752
; ecx = pointer to 1 node struct
753
; edx = pointer to some node struct
753
; edx = pointer to some node struct
754
; edi = pointer to 'TreeList' struct
754
; edi = pointer to 'TreeList' struct
755
align 4
755
align 4
756
tl_iterat_perv:
756
tl_iterat_perv: ;ïåðåõîä íà ïðåäûäóùèé âèäèìûé óçåë (ïðîïóñêàÿ çàêðûòûå)
757
  push eax
757
  push eax
758
  cmp tl_tim_undo,0
758
  cmp tl_tim_undo,0
759
  je .beg1
759
  je .beg1
Line 760... Line 760...
760
 
760
 
Line 863... Line 863...
863
; edi = pointer to 'TreeList' struct
863
; edi = pointer to 'TreeList' struct
864
;output:
864
;output:
865
; al = 1 if sumbol not visible
865
; al = 1 if sumbol not visible
866
; (node[i].td+tim_Undo<=ch_tim && node[i].td) || (node[i].tc>ch_tim-tim_Undo)
866
; (node[i].td+tim_Undo<=ch_tim && node[i].td) || (node[i].tc>ch_tim-tim_Undo)
867
align 4
867
align 4
868
tl_node_not_vis:
-
 
-
 
868
tl_node_not_vis: ;ïðîâåðÿåò âèäèìûé ëè óêàçàííûé óçåë ñ ó÷åòîì: äîáàâëåíèé, óäàëåíèé, îòìåí äåéñòâèé
869
  cmp dword[edx+16],0
869
  cmp dword[edx+16],0
870
  je @f
870
  je @f
871
  mov eax,dword[edx+16] ;eax=node[i].td
871
  mov eax,dword[edx+16] ;eax=node[i].td
872
  add eax,tl_tim_undo
872
  add eax,tl_tim_undo
873
  cmp eax,tl_ch_tim
873
  cmp eax,tl_ch_tim
Line 1025... Line 1025...
1025
; eax = node position
1025
; eax = node position
1026
; edx = pointer to some node struct
1026
; edx = pointer to some node struct
1027
; edi = pointer to 'TreeList' struct
1027
; edi = pointer to 'TreeList' struct
1028
; esi = coord of bottom border
1028
; esi = coord of bottom border
1029
align 4
1029
align 4
1030
tl_draw_node:
-
 
-
 
1030
tl_draw_node: ;ðèñóåò óçåë ñ: êàðòèíêîé, ïîäïèñüþ, èêîíêîé îòêðûòèÿ/çàêðûòèÿ è ëèíèÿìè ê ðîäèò. óçëó
1031
  push eax ebx ecx edx esi
1031
  push eax ebx ecx edx esi
Line 1032... Line 1032...
1032
 
1032
 
1033
    mov ebx,1 ;1 - ìåñòî ïîä êóðñîð è ïîä çíàê +,-
1033
    mov ebx,1 ;1 - ìåñòî ïîä êóðñîð è ïîä çíàê +,-
1034
    bt tl_style,2 ;tl_list_box_mode
1034
    bt tl_style,2 ;tl_list_box_mode
Line 1099... Line 1099...
1099
    cmp byte[edx+3],1
1099
    cmp byte[edx+3],1
1100
    jne .close
1100
    jne .close
1101
      dec ah
1101
      dec ah
1102
    .close:
1102
    .close:
Line 1103... Line 1103...
1103
 
1103
 
1104
    call tl_draw_node_icon_opn_clo
1104
    call tl_draw_node_icon_opn_clo ;ðèñîâàíèå èêîíêè îòêðûòîãî èëè çàêðûòîãî óçëà
1105
    bt tl_style,1
1105
    bt tl_style,1
1106
    jae .end_draw
1106
    jae .end_draw
1107
      call tl_draw_node_icon_par_lin
1107
      call tl_draw_node_icon_par_lin ;ðèñîâàíèå ëèíèè ê ðîäèòåëüñêîìó ýëåìåíòó
1108
      call tl_draw_node_icon_par_lin_up
1108
      call tl_draw_node_icon_par_lin_up ;ðèñîâàíèå âåðòèêàëüíîé ëèíèè ê ðîäèòåëüñêîìó ýëåìåíòó
1109
    .end_draw:
1109
    .end_draw:
1110
  pop esi edx ecx ebx eax
1110
  pop esi edx ecx ebx eax
Line 1111... Line 1111...
1111
  ret
1111
  ret
Line 1157... Line 1157...
1157
; al = óðîâåíü ýëåìåíòà
1157
; al = óðîâåíü ýëåìåíòà
1158
; ecx = pointer to 1 node struct
1158
; ecx = pointer to 1 node struct
1159
; edx = pointer to some node struct
1159
; edx = pointer to some node struct
1160
;...
1160
;...
1161
align 4
1161
align 4
1162
tl_draw_node_icon_par_lin:
1162
tl_draw_node_icon_par_lin: ;ðèñîâàíèå ëèíèè ê ðîäèòåëüñêîìó ýëåìåíòó
1163
  cmp byte[edx+3],1
1163
  cmp byte[edx+3],1
1164
  je .close
1164
  je .close
1165
  push eax ebx ecx edx esi
1165
  push eax ebx ecx edx esi
1166
    cmp al,0
1166
    cmp al,0
1167
    je @f
1167
    je @f
Line 2021... Line 2021...
2021
      add ecx,sizeof.TreeList ;ecx = pointer to 1 node struct
2021
      add ecx,sizeof.TreeList ;ecx = pointer to 1 node struct
Line 2022... Line 2022...
2022
 
2022
 
2023
      mov edx,eax
2023
      mov edx,eax
2024
      call tl_iterat_perv ;ïðîâåðÿåì åñòü ëè âåðõíèé óçåë
2024
      call tl_iterat_perv ;ïðîâåðÿåì åñòü ëè âåðõíèé óçåë
2025
      cmp edx,ecx
2025
      cmp edx,ecx
2026
      jle @f ;åñëè âåðõíåãî óçëà íå òî òåêóùèé óçåë íå äâèãàåì
-
 
-
 
2026
      jle @f ;åñëè âåðõíåãî óçëà íåò òî òåêóùèé óçåë íå äâèãàåì
-
 
2027
      mov cl,byte[edx+2] ;áåðåì óðîâåíü ðîäèòåëüñêîãî óçëà
2027
 
2028
      inc cl ;äîáàâëÿåì 1 è ïîëó÷àåì ìàêñèìàëüíîå çíà÷åíèå
-
 
2029
      cmp byte[eax+2],cl
-
 
2030
      jge @f
2028
      inc word[eax+2]
2031
        inc byte[eax+2] ;óâåëè÷èâàåì çíà÷åíèå óçëà
2029
    @@:
2032
    @@:
2030
  pop edi edx ecx eax
2033
  pop edi edx ecx eax
2031
  pop ebp
2034
  pop ebp
Line 2040... Line 2043...
2040
    call tl_get_cur_node_index ;eax=po_t
2043
    call tl_get_cur_node_index ;eax=po_t
2041
    cmp eax,2
2044
    cmp eax,2
2042
    jl @f
2045
    jl @f
2043
      imul eax,sizeof.TreeList
2046
      imul eax,sizeof.TreeList
2044
      add eax,tl_data_nodes
2047
      add eax,tl_data_nodes
2045
      cmp word[eax+2],0
2048
      cmp byte[eax+2],0
2046
      je @f
2049
      je @f
2047
      dec word[eax+2]
2050
      dec byte[eax+2]
2048
    @@:
2051
    @@:
2049
  pop edi eax
2052
  pop edi eax
2050
  pop ebp
2053
  pop ebp
2051
  ret 4
2054
  ret 4
Line 2256... Line 2259...
2256
    sub ecx,dword[ebp+12] ;îòíèìàåì óêàçàòåëü íà íà÷àëî ïàìÿòè (áåç ðàíåå çàïèñàííûõ ñòðóêòóð)
2259
    sub ecx,dword[ebp+12] ;îòíèìàåì óêàçàòåëü íà íà÷àëî ïàìÿòè (áåç ðàíåå çàïèñàííûõ ñòðóêòóð)
2257
    cmp ecx,dword[ebp+8]  ;ecx = element memory size
2260
    cmp ecx,dword[ebp+8]  ;ecx = element memory size
2258
    jg .err_mem_size
2261
    jg .err_mem_size
Line 2259... Line 2262...
2259
 
2262
 
2260
    ;save tree params (in header)
2263
    ;save tree params (in header)
2261
    mov dword[esi],0x65657274 ;0x65657274 = 'tree'
2264
    mov dword[esi],'tree'
2262
    mov word[esi+4],bx
2265
    mov word[esi+4],bx
Line 2263... Line 2266...
2263
    mov dword[esi+6],eax ;element count
2266
    mov dword[esi+6],eax ;element count
2264
 
2267