Subversion Repositories Kolibri OS

Rev

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

Rev 1390 Rev 1401
Line 1... Line 1...
1
; ìàêðîñ äëÿ ñèñòåìíîé áèáëèîòåêè box_lib.obj
1
; ìàêðîñ äëÿ ñèñòåìíîé áèáëèîòåêè box_lib.obj
2
; ýëåìåíò TreeList äëÿ Kolibri OS
2
; ýëåìåíò TreeList äëÿ Kolibri OS
3
; ôàéë ïîñëåäíèé ðàç èçìåíÿëñÿ 05.02.2010 IgorA
3
; ôàéë ïîñëåäíèé ðàç èçìåíÿëñÿ 09.02.2010 IgorA
4
; íà êîä ïðèìåíåíà GPL2 ëèöåíçèÿ
4
; íà êîä ïðèìåíåíà GPL2 ëèöåíçèÿ
Line 5... Line 5...
5
 
5
 
6
 
6
 
Line 14... Line 14...
14
;  tc dd ?   ;+12 âðåì. ñîçäàíèÿ
14
;  tc dd ?   ;+12 âðåì. ñîçäàíèÿ
15
;  td dd ?   ;+16 âðåì. óäàëåíèÿ
15
;  td dd ?   ;+16 âðåì. óäàëåíèÿ
16
;ends
16
;ends
Line 17... Line 17...
17
 
17
 
-
 
18
tl_info_size  equ  word[edi +4] ;ðàçìåð äàííûõ âûäåëÿåìûõ äëÿ êàæäîãî óçëà (ïîëüçîâàòåëüñüêèå äàííûå + òåêñò äëÿ ïîäïèñè)
18
tl_info_size  equ  word[edi +4] ;ðàçìåð äàííûõ âûäåëÿåìûõ äëÿ êàæäîãî óçëà (ïîëüçîâàòåëüñüêèå äàííûå + òåêñò äëÿ ïîäïèñè)
19
tl_info_max_count equ dword[edi+6] ;ìàêñèìàëüíîå êîëè÷åñòâî óçëîâ, êîòîðûå ìîæíî äîáàâèòü â ýëåìåíò
19
tl_style      equ dword[edi+10] ;ñòèëè ýëåìåíòà
20
tl_style      equ dword[edi+10] ;ñòèëè ýëåìåíòà
-
 
21
tl_data_nodes equ dword[edi+14] ;óêàçàòåëü íà ñòðóêòóðû óçëîâ
20
tl_data_nodes equ dword[edi+14] ;óêàçàòåëü íà ñòðóêòóðû óçëîâ
22
tl_data_img   equ dword[edi+18] ;óêàçàòåëü íà èçîáðàæåíèÿ ñ èêîíêàìè óçëîâ
21
tl_img_cx     equ  word[edi+22] ;øèðèíà èêîíîê
23
tl_img_cx     equ  word[edi+22] ;øèðèíà èêîíîê
22
tl_img_cy     equ  word[edi+24] ;âûñîòà èêîíîê
24
tl_img_cy     equ  word[edi+24] ;âûñîòà èêîíîê
23
tl_data_img_sys equ dword[edi+26] ;óêàçàòåëü íà ñèñòåìíûå èçîáðàæåíèÿ (ñòðåëêè, ïëþñèêè)
25
tl_data_img_sys equ dword[edi+26] ;óêàçàòåëü íà ñèñòåìíûå èçîáðàæåíèÿ (ñòðåëêè, ïëþñèêè)
24
tl_ch_tim     equ dword[edi+30] ;êîëè÷åñòâî èçìåíåíèé â ôàéëå
26
tl_ch_tim     equ dword[edi+30] ;êîëè÷åñòâî èçìåíåíèé â ôàéëå
Line 49... Line 51...
49
tl_err_load_info_size   equ 100b ;íå ñîâïàäàåò ðàçìåð èíôîðìàöèîííîé ñòðóêòóðû ïðè îòêðûòèè
51
tl_err_load_info_size   equ 100b ;íå ñîâïàäàåò ðàçìåð èíôîðìàöèîííîé ñòðóêòóðû ïðè îòêðûòèè
50
tl_load_mode_add        equ 0x20000 ;îïöèÿ ñ÷èòûâàíèÿ â ðåæèìå äîáàâëåíèÿ èíôîðìàöèè
52
tl_load_mode_add        equ 0x20000 ;îïöèÿ ñ÷èòûâàíèÿ â ðåæèìå äîáàâëåíèÿ èíôîðìàöèè
51
tl_save_load_heder_size equ 26 ;ðàçìåð çàãîëîâêà äëÿ çàïèñè/÷òåíèÿ ýëåìåíòîâ
53
tl_save_load_heder_size equ 26 ;ðàçìåð çàãîëîâêà äëÿ çàïèñè/÷òåíèÿ ýëåìåíòîâ
Line 52... Line 54...
52
 
54
 
53
;data_info	 dd ? ;+ 0 óêàçàòåëü íà îñíîâíûå äàíûå
-
 
54
;info_max_count dd ? ;+ 6 ìàêñèìàëüíîå êîëëè÷åñòâî ñòðóêòóð
-
 
55
;data_img	 dd ? ;+18 óêàçàòåëü íà èçîáðàæåíèÿ
55
;data_info	 dd ? ;+ 0 óêàçàòåëü íà îñíîâíûå äàíûå
56
;ls_tim		dd ? ;+34 âðåìÿ ïîñëåäíåãî ñîõðàíåíèÿ
56
;ls_tim		dd ? ;+34 âðåìÿ ïîñëåäíåãî ñîõðàíåíèÿ
Line 57... Line 57...
57
;on_activate dd ? ;+92 óêàçàòåëü íà ôóíêöèþ ïðè àêòèâèðîâàíèè óçëà
57
;on_activate dd ? ;+92 óêàçàòåëü íà ôóíêöèþ ïðè àêòèâèðîâàíèè óçëà
58
 
58
 
Line 131... Line 131...
131
    xor ecx,ecx
131
    xor ecx,ecx
132
    mov cx,tl_info_size
132
    mov cx,tl_info_size
133
    imul ecx,dword[edi+6]
133
    imul ecx,dword[edi+6]
134
    call mem_Alloc
134
    call mem_Alloc
135
    mov dword[edi],eax ;êîïèðóåì óêàçàòåëü íà ïîëó÷åíóþ ïàìÿòü â ñòðóêòóðó
135
    mov dword[edi],eax ;êîïèðóåì óêàçàòåëü íà ïîëó÷åíóþ ïàìÿòü â ñòðóêòóðó
136
    mov dword[edi+18],0 ;îáíóëÿåì óêàçàòåëü 'data_img'
136
    mov tl_data_img,0  ;îáíóëÿåì óêàçàòåëü 'data_img'
137
    mov tl_data_img_sys,0 ;îáíóëÿåì óêàçàòåëü 'data_img_sys'
137
    mov tl_data_img_sys,0 ;îáíóëÿåì óêàçàòåëü 'data_img_sys'
Line 138... Line 138...
138
 
138
 
139
    mov ecx,sizeof.TreeList
139
    mov ecx,sizeof.TreeList
140
    imul ecx,dword[edi+6]
140
    imul ecx,dword[edi+6]
Line 172... Line 172...
172
tl_data_clear: ;î÷èñòêà ïàìÿòè ýëåìåíòà (äåñòðóêòîð)
172
tl_data_clear: ;î÷èñòêà ïàìÿòè ýëåìåíòà (äåñòðóêòîð)
173
  push ebp
173
  push ebp
174
  mov ebp,esp
174
  mov ebp,esp
175
    push ecx edi
175
    push ecx edi
176
    mov edi,dword[ebp+8]
176
    mov edi,dword[ebp+8]
177
    cmp dword[edi+18],0 ;data_img
177
    cmp tl_data_img,0
178
    je @f
178
    je @f
179
      mov ecx,dword[edi+18]
179
      mov ecx,dword[edi+18]
180
      call mem_Free ;÷èñòêà ñèñòåìíûõ èêîíîê
180
      call mem_Free ;÷èñòêà ñèñòåìíûõ èêîíîê
181
    @@:
181
    @@:
182
    cmp tl_data_img_sys,0
182
    cmp tl_data_img_sys,0
Line 325... Line 325...
325
    int 0x40
325
    int 0x40
Line 326... Line 326...
326
 
326
 
327
    mov ebx,tl_box_left
327
    mov ebx,tl_box_left
328
    shl ebx,16
328
    shl ebx,16
329
    cmp eax,ebx ;ëåâàÿ ãðàíèöà îêíà
329
    cmp eax,ebx ;ëåâàÿ ãðàíèöà îêíà
Line 330... Line 330...
330
    jl .test_scroll
330
    jl .no_in_wnd ;.test_scroll
331
 
331
 
332
    mov ebx,tl_box_left
332
    mov ebx,tl_box_left
333
    add ebx,tl_box_width
333
    add ebx,tl_box_width
Line 571... Line 571...
571
 
571
 
572
align 4
572
align 4
573
tl_draw: ;âûâîä ñïèñêà íà ýêðàí
573
tl_draw: ;âûâîä ñïèñêà íà ýêðàí
574
  push ebp
574
  push ebp
575
  mov ebp,esp
575
  mov ebp,esp
576
    push eax ebx ecx edx edi esi
576
    pushad
577
    ;draw dir_list main rect
577
    ;draw dir_list main rect
578
    mov edi,dword[ebp+8]
578
    mov edi,dword[ebp+8]
579
    mov ebx,tl_box_left
579
    mov ebx,tl_box_left
580
    shl ebx,16
580
    shl ebx,16
Line 668... Line 668...
668
    je .end_draw       ;åñëè íåò ñêðîëëèíãà âûõîäèì
668
    je .end_draw       ;åñëè íåò ñêðîëëèíãà âûõîäèì
669
    push dword edi
669
    push dword edi
670
    call scroll_bar_vertical.draw
670
    call scroll_bar_vertical.draw
Line 671... Line 671...
671
 
671
 
672
    .end_draw:
672
    .end_draw:
673
    pop esi edi edx ecx ebx eax
673
    popad
674
  pop ebp
674
  pop ebp
Line 675... Line 675...
675
  ret 4
675
  ret 4
676
 
676
 
Line 753... Line 753...
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
 
-
 
759
;  mov bl,byte[edx+2]
-
 
760
 
-
 
761
  cmp tl_tim_undo,0
758
  cmp tl_tim_undo,0
762
  je .beg1
759
  je .beg1
Line 763... Line -...
763
 
-
 
764
  push eax
760
 
765
  .beg0:
761
  .beg0:
766
    call tl_move_perv
762
    call tl_move_perv
767
    cmp edx,ecx
763
    cmp edx,ecx
768
    jle @f
764
    jle @f
Line 1026... Line 1022...
1026
  ret
1022
  ret
Line 1027... Line 1023...
1027
 
1023
 
1028
;input:
1024
;input:
1029
; eax = node position
1025
; eax = node position
1030
; edx = pointer to some node struct
1026
; edx = pointer to some node struct
1031
; edi = pointer to TreeInfo struct
1027
; edi = pointer to 'TreeList' struct
1032
; esi = coord of bottom border
1028
; esi = coord of bottom border
1033
align 4
1029
align 4
1034
tl_draw_node:
1030
tl_draw_node:
Line 1065... Line 1061...
1065
    @@:
1061
    @@:
1066
      call tl_draw_node_caption
1062
      call tl_draw_node_caption
1067
    .crop:
1063
    .crop:
1068
    mov esi,ecx ;save ecx
1064
    mov esi,ecx ;save ecx
Line 1069... Line 1065...
1069
 
1065
 
1070
    cmp dword[edi+18],0 ;data_img
1066
    cmp tl_data_img,0
1071
    jne .draw_img_n
1067
    jne .draw_img_n
1072
    push edx
1068
    push edx
1073
      mov edx,tl_col_txt
1069
      mov edx,tl_col_txt
1074
      mov eax,13
1070
      mov eax,13
Line 1086... Line 1082...
1086
      ror ecx,16
1082
      ror ecx,16
1087
      mov ebx,3 ;rgb = 3 bytes
1083
      mov ebx,3 ;rgb = 3 bytes
1088
      imul bx,tl_img_cx
1084
      imul bx,tl_img_cx
1089
      imul bx,tl_img_cy
1085
      imul bx,tl_img_cy
1090
      imul ebx,esi ;esi = icon index
1086
      imul ebx,esi ;esi = icon index
1091
      add ebx,dword[edi+18] ;data_img
1087
      add ebx,tl_data_img
Line 1092... Line 1088...
1092
 
1088
 
1093
      mov eax,7
1089
      mov eax,7
1094
      int 0x40 ;draw node icon '-'
1090
      int 0x40 ;draw node icon '-'
1095
    pop esi edx ebx
1091
    pop esi edx ebx
Line 1114... Line 1110...
1114
  pop esi edx ecx ebx eax
1110
  pop esi edx ecx ebx eax
1115
  ret
1111
  ret
Line 1116... Line 1112...
1116
 
1112
 
1117
;input:
1113
;input:
-
 
1114
; ecx = pointer to 1 node struct
1118
; ecx = pointer to 1 node struct
1115
; edx = pointer to some node struct
1119
;...
1116
;...
1120
align 4
1117
align 4
1121
tl_draw_node_icon_opn_clo: ;ðèñóåò èêîíêè îòêðûòîãî èëè çàêðûòîãî óçëà (îáû÷íî + èëè -)
1118
tl_draw_node_icon_opn_clo: ;ðèñóåò èêîíêè îòêðûòîãî èëè çàêðûòîãî óçëà (îáû÷íî + èëè -)
1122
  push eax ebx ecx edx esi
1119
  push eax ebx ecx edx esi
Line 1156... Line 1153...
1156
  pop esi edx ecx ebx eax
1153
  pop esi edx ecx ebx eax
1157
  ret
1154
  ret
Line 1158... Line 1155...
1158
 
1155
 
1159
;input:
1156
;input:
-
 
1157
; al = óðîâåíü ýëåìåíòà
-
 
1158
; ecx = pointer to 1 node struct
1160
; al = óðîâåíü ýëåìåíòà
1159
; edx = pointer to some node struct
1161
;...
1160
;...
1162
align 4
1161
align 4
1163
tl_draw_node_icon_par_lin:
1162
tl_draw_node_icon_par_lin:
1164
  cmp byte[edx+3],1
1163
  cmp byte[edx+3],1
Line 1211... Line 1210...
1211
  pop esi edx ecx ebx eax
1210
  pop esi edx ecx ebx eax
1212
  .close:
1211
  .close:
1213
  ret
1212
  ret
Line 1214... Line -...
1214
 
-
 
1215
 
1213
 
1216
 
1214
 
1217
;icon:
1215
;input:
-
 
1216
; al = óðîâåíü ýëåìåíòà
-
 
1217
; ecx = pointer to 1 node struct
1218
; al = óðîâåíü ýëåìåíòà
1218
; edx = pointer to some node struct
1219
;...
1219
; edi = pointer to 'TreeList' struct
1220
align 4
1220
align 4
-
 
1221
tl_draw_node_icon_par_lin_up:
1221
tl_draw_node_icon_par_lin_up:
1222
  push eax ebx ecx edx
1222
  push eax ebx ecx edx esi
1223
  push esi
1223
    cmp tl_data_img_sys,0 ;if not image
1224
    cmp tl_data_img_sys,0 ;if not image
1224
    je @f
1225
    je @f
Line 1225... Line -...
1225
    cmp al,0
-
 
1226
    je @f
1226
    cmp al,0
-
 
1227
    je @f
1227
 
1228
 
1228
;---------
1229
    xor esi,esi ;â si áóäåì íàñ÷èòûâàòü êîë-âî èêîíîê, íóæíûõ äëÿ ïðîðèñîâêè ëèíèè
1229
    xor esi,esi ;â si áóäåì íàñ÷èòûâàòü êîë-âî èêîíîê, íóæíûõ äëÿ ïðîðèñîâêè ëèíèè
1230
;--- öèêë äëÿ âû÷èñëåíèÿ êîëëè÷åñòâà âåðòèêàëüíûõ ëèíèé ---
1230
    .cycle0:
1231
    .cycle0:
Line 1231... Line 1232...
1231
      call tl_iterat_perv ;get perv visible item
1232
      call tl_iterat_perv ;get perv visible item
1232
      cmp edx,ecx
1233
      cmp edx,ecx
1233
      jle .cycle1 ;if begin of list
1234
      jle .cycle1 ;if begin of list
1234
 
1235
 
1235
      cmp byte[edx+2],al
1236
      cmp byte[edx+2],al
1236
      jle .cycle1 ;óðîâåíü âåðõíåãî ýëåìåíòà íå òðåáóåò ïðîðèñîâêè
1237
      jle .cycle0end ;óðîâåíü âåðõíåãî ýëåìåíòà íå òðåáóåò ïðîðèñîâêè
1237
      inc si
1238
      inc si
1238
      jmp .cycle0
1239
      jmp .cycle0
Line 1239... Line 1240...
1239
    .cycle1:
1240
    .cycle0end:
Line 1255... Line 1256...
1255
      ror ecx,16
1256
      ror ecx,16
1256
      mov cx,tl_img_cy ;restore size y (if crop)
1257
      mov cx,tl_img_cy ;restore size y (if crop)
1257
      mov ebx,3 ;rgb = 3 bytes
1258
      mov ebx,3 ;rgb = 3 bytes
1258
      imul bx,tl_img_cx
1259
      imul bx,tl_img_cx
1259
      imul bx,tl_img_cy
1260
      imul bx,tl_img_cy
1260
      ;imul ebx,1
-
 
1261
      add ebx,tl_data_img_sys
1261
      add ebx,tl_data_img_sys
Line 1262... Line 1262...
1262
 
1262
 
1263
      add esi,tl_box_top
1263
      add esi,tl_box_top
1264
      add si,tl_capt_cy ;si = âåðõíÿÿ ãðàíèöà îêíà
1264
      add si,tl_capt_cy ;si = âåðõíÿÿ ãðàíèöà îêíà
1265
      mov eax,7
1265
      mov eax,7
1266
;---------
1266
;--- öèêë äëÿ ðèñîâàíèÿ âåðòèêàëüíîé ëèíèè ---
1267
      .cycle2:
1267
      .cycle1:
1268
      sub dx,tl_img_cy ;ïîäíèìàåì êîîðäèíàòó y ââåðõ
1268
      sub dx,tl_img_cy ;ïîäíèìàåì êîîðäèíàòó y ââåðõ
1269
      cmp dx,si
1269
      cmp dx,si
1270
      jl @f
-
 
1271
;        int 0x40 ;draw line icon
1270
      jl @f
1272
        cmp esi,0x10000
1271
        cmp esi,0x10000
1273
        jl @f
1272
        jl @f
1274
        int 0x40 ;draw line icon
1273
        int 0x40 ;draw line icon
1275
        sub esi,0x10000 ;óìåíüøàåì ñ÷åò÷èê èêîíîê
1274
        sub esi,0x10000 ;óìåíüøàåì ñ÷åò÷èê èêîíîê
1276
      jmp .cycle2
1275
      jmp .cycle1
-
 
1276
    @@:
1277
    @@:
1277
  pop esi
1278
  pop esi edx ecx ebx eax
1278
  pop edx ecx ebx eax
Line 1279... Line 1279...
1279
  ret
1279
  ret
1280
 
1280
 
1281
;input:
1281
;input:
Line 1468... Line 1468...
1468
	add ecx,8   ; *** ecx = node[po_t].next ***
1468
	add ecx,8   ; *** ecx = node[po_t].next ***
1469
	push dword [ecx] ;node[i].next=node[po_t].next;
1469
	push dword [ecx] ;node[i].next=node[po_t].next;
1470
	pop dword [edx+8]
1470
	pop dword [edx+8]
Line 1471... Line 1471...
1471
 
1471
 
1472
	call tl_get_node_index ;*** eax = i ***
1472
	call tl_get_node_index ;*** eax = i ***
1473
	cmp eax,dword[edi+6] ;info_max_count
1473
	cmp eax,tl_info_max_count
Line 1474... Line 1474...
1474
	jge .u0
1474
	jge .u0
1475
 
1475
 
1476
	mov [ecx],eax ;node[po_t].next=i; // ññûëêè ïåðåíàïðàâëÿåì
1476
	mov [ecx],eax ;node[po_t].next=i; // ññûëêè ïåðåíàïðàâëÿåì
Line 2006... Line 2006...
2006
 
2006
 
2007
align 4
2007
align 4
2008
tl_node_lev_inc: ;óâåëè÷èòü óðîâåíü
2008
tl_node_lev_inc: ;óâåëè÷èòü óðîâåíü
2009
  push ebp
2009
  push ebp
2010
  mov ebp,esp
2010
  mov ebp,esp
2011
  push eax edx edi
2011
  push eax ecx edx edi
2012
    mov edi,dword[ebp+8]
2012
    mov edi,dword[ebp+8]
2013
    bt tl_style,2 ;tl_list_box_mode
2013
    bt tl_style,2 ;tl_list_box_mode
2014
    jc @f
2014
    jc @f
2015
    call tl_get_cur_node_index ;eax=po_t
2015
    call tl_get_cur_node_index ;eax=po_t
2016
    cmp eax,2
2016
    cmp eax,2
-
 
2017
    jl @f
2017
    jl @f
2018
      mov ecx,tl_data_nodes
2018
      imul eax,sizeof.TreeList
2019
      imul eax,sizeof.TreeList
-
 
2020
      add eax,ecx ;eax = pointer to some node struct
-
 
2021
      add ecx,sizeof.TreeList ;ecx = pointer to 1 node struct
2019
      add eax,tl_data_nodes
2022
 
-
 
2023
      mov edx,eax
-
 
2024
      call tl_iterat_perv ;ïðîâåðÿåì åñòü ëè âåðõíèé óçåë
-
 
2025
      cmp edx,ecx
-
 
2026
      jle @f ;åñëè âåðõíåãî óçëà íå òî òåêóùèé óçåë íå äâèãàåì
2020
      mov edx,eax
2027
 
2021
      inc word[edx+2]
2028
      inc word[eax+2]
2022
    @@:
2029
    @@:
2023
  pop edi edx eax
2030
  pop edi edx ecx eax
2024
  pop ebp
2031
  pop ebp
Line 2025... Line 2032...
2025
  ret 4
2032
  ret 4
2026
 
2033
 
2027
align 4
2034
align 4
2028
tl_node_lev_dec: ;óìåíüøèòü óðîâåíü
2035
tl_node_lev_dec: ;óìåíüøèòü óðîâåíü
2029
  push ebp
2036
  push ebp
2030
  mov ebp,esp
2037
  mov ebp,esp
2031
  push eax edx edi
2038
  push eax edi
2032
    mov edi,dword[ebp+8]
2039
    mov edi,dword[ebp+8]
2033
    call tl_get_cur_node_index ;eax=po_t
2040
    call tl_get_cur_node_index ;eax=po_t
2034
    cmp eax,2
2041
    cmp eax,2
2035
    jl @f
2042
    jl @f
2036
      imul eax,sizeof.TreeList
-
 
2037
      add eax,tl_data_nodes
2043
      imul eax,sizeof.TreeList
2038
      mov edx,eax
2044
      add eax,tl_data_nodes
2039
      cmp word[edx+2],0
2045
      cmp word[eax+2],0
2040
      je @f
2046
      je @f
2041
      dec word[edx+2]
2047
      dec word[eax+2]
2042
    @@:
2048
    @@:
2043
  pop edi edx eax
2049
  pop edi eax
Line 2044... Line 2050...
2044
  pop ebp
2050
  pop ebp
2045
  ret 4
2051
  ret 4
Line 2462... Line 2468...
2462
 
2468
 
2463
;ýòîò êîä íå ìîé, îí ïðåîáðàçóåò ÷èñëî â ñòðîêó
2469
;ýòîò êîä íå ìîé, îí ïðåîáðàçóåò ÷èñëî â ñòðîêó
2464
;input:
2470
;input:
2465
; eax = value
2471
; eax = value
2466
; edi = string buffer
-
 
2467
;output:
-
 
2468
; edi =
2472
; edi = string buffer
2469
align 4
2473
align 4
2470
tl_convert_to_str:
2474
tl_convert_to_str:
2471
  pushad
2475
  pushad
2472
    mov dword[edi+1],0x20202020
2476
    mov dword[edi+1],0x20202020