Subversion Repositories Kolibri OS

Rev

Rev 1432 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1432 Rev 1476
1
;ôàéë ñîçäàí 13.02.2009  Íà êîä ïðèìåíåíà GPL2 ëèöåíçèÿ
1
;ôàéë ñîçäàí 13.02.2009  Íà êîä ïðèìåíåíà GPL2 ëèöåíçèÿ
2
;Ìàêðîñ äëÿ ñèñòåìíîé áèáëèîòåêè box_lib.obj
2
;Ìàêðîñ äëÿ ñèñòåìíîé áèáëèîòåêè box_lib.obj
3
;Checkbox
3
;Checkbox
4
 
-
 
5
ch_struc_size=36
-
 
6
ch_flag_en=10b ;ýëåìåíò âûáðàí
-
 
7
 
-
 
8
ch_left  equ [edi]         ;êîîðäèíàòà íà÷àëà ðèñîâàíèÿ ïî õ
-
 
9
ch_top   equ [edi+2]       ;êîîðäèíàòà íà÷àëà ðèñîâàíèÿ ïî ó
-
 
10
ch_text_margin equ [edi+4] ;=4 ðàññòîÿíèå îò ïðÿìîóãîëüíèêà ÷åê áîêñà äî íàäïèñè 
-
 
11
ch_size  equ [edi+8]       ;12 ðàçìåð êâàäðàòà ÷åê áîêñà 
-
 
12
ch_color equ [edi+12]      ;öâåò âíóòðè checkbox
-
 
13
ch_border_color equ [edi+16] ; or [edi+4] ;öâåò ðàìêè checkbox åå ìîæíî çàäàòü ñàìîñòîÿòåëüíî
-
 
14
ch_text_color   equ [edi+20] ;[edi+4]  ;öâåò òåêñòà
-
 
15
ch_text_ptr     equ [edi+24] ;óêàçàòåëü íà íà÷àëî òåêñòîâîé ñòðîêè 
-
 
16
ch_text_length  equ [edi+28]
-
 
17
ch_flags equ [edi+32]      ;ôëàãè 
-
 
18
 
4
 
19
macro use_checkbox_draw
5
macro use_checkbox_draw
20
{
6
{
21
check_box_draw:
7
check_box_draw:
22
       pusha   ;ñîõðàíèì âñå ðåãèñòðû
8
       pusha   ;ñîõðàíèì âñå ðåãèñòðû
23
       mov     edi,dword [esp+36]
9
       mov     edi,dword [esp+36]
24
       mov eax,13 
10
       mov eax,13 
25
       movzx ebx,word ch_left 
11
       movzx ebx,word ch_left 
26
       shl ebx,16 
12
       shl ebx,16 
27
       add ebx,ch_size 
13
       add ebx,ch_size 
28
       mov ecx,ch_top 
14
       mov ecx,ch_top 
29
       shl ecx,16 
15
       shl ecx,16 
30
       add ecx,dword ch_size 
16
       add ecx,dword ch_size 
31
       mov edx,dword ch_border_color 
17
       mov edx,dword ch_border_color 
32
       mcall ;ðèñóåì ðàìêó 
18
       mcall ;ðèñóåì ðàìêó 
33
 
19
 
34
       mov edx,dword ch_color 
20
       mov edx,dword ch_color 
35
       add ebx,1 shl 16 - 2 
21
       add ebx,1 shl 16 - 2 
36
       add ecx,1 shl 16 - 2 
22
       add ecx,1 shl 16 - 2 
37
       mcall ;çàêðàøèâàåì âíóòðåííîñòè ÷åêáîêñà 
23
       mcall ;çàêðàøèâàåì âíóòðåííîñòè ÷åêáîêñà 
38
 
24
 
39
       test dword ch_flags,2  ;äîñòàòü çíà÷åíèå áèòà èç ïåðåìåííîé è ïîìåñòèòü â  ôëàã CF 
25
       test dword ch_flags,2  ;äîñòàòü çíà÷åíèå áèòà èç ïåðåìåííîé è ïîìåñòèòü â  ôëàã CF 
40
       jz   @f                ;â åñëè CF=1, òî âûïîëíèì ñëåäóþùóþ ïðîöåäóðó èíà÷å ïåðåéòè íà íèæíþþ @@
26
       jz   @f                ;â åñëè CF=1, òî âûïîëíèì ñëåäóþùóþ ïðîöåäóðó èíà÷å ïåðåéòè íà íèæíþþ @@
41
       call check_box_draw_ch  ;íàðèñîâàòü âêëþ÷åííûé ÷åê áîêñ
27
       call check_box_draw_ch  ;íàðèñîâàòü âêëþ÷åííûé ÷åê áîêñ
42
@@:
28
@@:
43
;----------------------------
29
;----------------------------
44
;ðàñ÷åò êóäà áóäåò ïðîèçâåäåí âûâîä òåêñòà
30
;ðàñ÷åò êóäà áóäåò ïðîèçâåäåí âûâîä òåêñòà
45
;----------------------------
31
;----------------------------
46
        movzx ebx,word ch_left        ;çàãðóçèòü çíà÷åíèå õ äëÿ ÷åê áîêñà
32
        movzx ebx,word ch_left        ;çàãðóçèòü çíà÷åíèå õ äëÿ ÷åê áîêñà
47
        add   ebx,dword ch_size
33
        add   ebx,dword ch_size
48
        add   ebx,dword ch_text_margin;äîáàâèòü ðàçìåð ñòîðîíû è ðàññòîÿíèå íà êîòîðîì íà÷íåòñÿ âûâîä òåêñòà
34
        add   ebx,dword ch_text_margin;äîáàâèòü ðàçìåð ñòîðîíû è ðàññòîÿíèå íà êîòîðîì íà÷íåòñÿ âûâîä òåêñòà
49
        shl   ebx,16                ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536)
35
        shl   ebx,16                ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536)
50
        mov   bx,word ch_top        ;çàãðóçèì çíà÷åíèå ïî y
36
        mov   bx,word ch_top        ;çàãðóçèì çíà÷åíèå ïî y
51
        add   ebx,ch_size
37
        add   ebx,ch_size
52
        mov   ecx,dword ch_text_color        ;çàãðóçèì öâåò íàäïèñè + flags
38
        mov   ecx,dword ch_text_color        ;çàãðóçèì öâåò íàäïèñè + flags
53
        sub   ebx,7        ;äîáàâèì çíà÷åíèå äëèíû ñòîðîíû -9+2
39
        sub   ebx,7        ;äîáàâèì çíà÷åíèå äëèíû ñòîðîíû -9+2
54
        
40
        
55
        mov   edx,dword ch_text_ptr                ;óêàæåì àäðåñ îò êóäà íóæíî âûâîäèòü ñòðîêó
41
        mov   edx,dword ch_text_ptr                ;óêàæåì àäðåñ îò êóäà íóæíî âûâîäèòü ñòðîêó
56
        mov   esi,dword ch_text_length
42
        mov   esi,dword ch_text_length
57
        ;âíåñåì â eax çíà÷åíèå âûâîäà íàäïèñè íà êàíâó
43
        ;âíåñåì â eax çíà÷åíèå âûâîäà íàäïèñè íà êàíâó
58
        mov   eax,4
44
        mov   eax,4
59
        mcall                  ;Âûâîä 
45
        mcall                  ;Âûâîä 
60
popa                              ;âîññòàíîâèòü çíà÷åíèÿ ðåãèñòðîâ èç ñòåêà
46
popa                              ;âîññòàíîâèòü çíà÷åíèÿ ðåãèñòðîâ èç ñòåêà
61
ret 4                             ;âûéäåì èç ïðîöåäóðû
47
ret 4                             ;âûéäåì èç ïðîöåäóðû
62
 
48
 
63
check_box_clear_ch:                        ;î÷èñòêà ÷åê áîêñà
49
check_box_clear_ch:                        ;î÷èñòêà ÷åê áîêñà
64
        mov   edx,dword ch_color   ;öâåò âíóòðè ÷åê áîêñà
50
        mov   edx,dword ch_color   ;öâåò âíóòðè ÷åê áîêñà
65
        jmp   @f             ;áåçóñëîâíûé ïðûæîê íà íèæíþþ ìåòêó @@
51
        jmp   @f             ;áåçóñëîâíûé ïðûæîê íà íèæíþþ ìåòêó @@
66
check_box_draw_ch:            ;íàðèñîâàòü âêëþ÷åííûé ÷åê áîêñ
52
check_box_draw_ch:            ;íàðèñîâàòü âêëþ÷åííûé ÷åê áîêñ
67
        mov   edx,dword ch_border_color        ;çàãðóçèòü öâåò
53
        mov   edx,dword ch_border_color        ;çàãðóçèòü öâåò
68
@@:
54
@@:
69
        movzx ebx,word ch_left  ;çàãðóçèòü êîîðäèíàòó ïî õ
55
        movzx ebx,word ch_left  ;çàãðóçèòü êîîðäèíàòó ïî õ
70
        mov   eax,dword ch_size
56
        mov   eax,dword ch_size
71
        mov   bp,ax
57
        mov   bp,ax
72
        shr   eax,2
58
        shr   eax,2
73
        push  ax
59
        push  ax
74
 
60
 
75
        push  ax
61
        push  ax
76
        add   ebx,eax           
62
        add   ebx,eax           
77
        shl   ebx,16            ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536)
63
        shl   ebx,16            ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536)
78
        pop   ax
64
        pop   ax
79
        lea   eax,[eax*2]
65
        lea   eax,[eax*2]
80
        sub   bp,ax             ;ñîõðàíèì ðåãèñòð bx â ðåãèñòðå óêàçàòåëÿ áàçû
66
        sub   bp,ax             ;ñîõðàíèì ðåãèñòð bx â ðåãèñòðå óêàçàòåëÿ áàçû
81
        mov   bx,bp
67
        mov   bx,bp
82
 
68
 
83
        movzx ecx,word ch_top ;çàãðóçèòü êîîðäèíàòó ïî ó
69
        movzx ecx,word ch_top ;çàãðóçèòü êîîðäèíàòó ïî ó
84
        pop   ax
70
        pop   ax
85
        add   cx,ax         
71
        add   cx,ax         
86
        shl   ecx,16          ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536)
72
        shl   ecx,16          ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536)
87
        mov   cx,bp           ;çàãðóçèì çíà÷åíèÿ ðåãèñòðà óêàçàòåëÿ áàçû â cx
73
        mov   cx,bp           ;çàãðóçèì çíà÷åíèÿ ðåãèñòðà óêàçàòåëÿ áàçû â cx
88
        mov   eax,13          ;â eax - çíà÷åíèÿ ôóíêöèè äëÿ âûâîäà ïîëîñû ò.å. ïî ñóòè ïðÿìîóãîëüíèêà, êîòîðûé îòîáðàæàåò âêëþ÷åííûé êîìïîíåíò ÷åê áîêñ
74
        mov   eax,13          ;â eax - çíà÷åíèÿ ôóíêöèè äëÿ âûâîäà ïîëîñû ò.å. ïî ñóòè ïðÿìîóãîëüíèêà, êîòîðûé îòîáðàæàåò âêëþ÷åííûé êîìïîíåíò ÷åê áîêñ
89
        mcall            ;âûâîä
75
        mcall            ;âûâîä
90
ret                                ;âûéòè èç ïðîöåäóðû
76
ret                                ;âûéòè èç ïðîöåäóðû
91
}
77
}
92
 
78
 
93
 
79
 
94
macro use_checkbox_mouse
80
macro use_checkbox_mouse
95
{
81
{
96
 
82
 
97
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
83
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
98
;Îáðàáîò÷èê mouse
84
;Îáðàáîò÷èê mouse
99
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
85
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
100
check_box_mouse:      ;îáðàáîòêà ìûøè 
86
check_box_mouse:      ;îáðàáîòêà ìûøè 
101
pusha
87
pusha
102
        mov     edi,dword [esp+36]
88
        mov     edi,dword [esp+36]
103
        mov     eax,37           ;áóäåì ÷òî òî äåëàòü åñëè ó íàñ ÷òî - íèòü íàæàòî
89
        mov     eax,37           ;áóäåì ÷òî òî äåëàòü åñëè ó íàñ ÷òî - íèòü íàæàòî
104
        mov     ebx,2            ;âíåñòè â ðåãèñòð çíà÷åíèå 2
90
        mov     ebx,2            ;âíåñòè â ðåãèñòð çíà÷åíèå 2
105
        mcall             ;ïðîâåðêà íå íàæàë ëè ïîëüçîâàòåëü êíîïêó ìûøêè
91
        mcall             ;ïðîâåðêà íå íàæàë ëè ïîëüçîâàòåëü êíîïêó ìûøêè
106
        test    eax,eax   ;ïðîâåðêà åñëè ó íàñ â eax=0, òî óñòàíîâèì ôëàã è âûéäåì
92
        test    eax,eax   ;ïðîâåðêà åñëè ó íàñ â eax=0, òî óñòàíîâèì ôëàã è âûéäåì
107
        jnz     @f         ;ïåðåéòè íà íèæíþþ ìåòêó @@
93
        jnz     @f         ;ïåðåéòè íà íèæíþþ ìåòêó @@
108
        btr     dword ch_flags,2  ;èçâëå÷åíèå çíà÷åíèÿ çàäàííîãî áèòà â ôëàã cf è èçìåíåíèå åãî çíà÷åíèÿ íà íóëåâîå. 
94
        btr     dword ch_flags,2  ;èçâëå÷åíèå çíà÷åíèÿ çàäàííîãî áèòà â ôëàã cf è èçìåíåíèå åãî çíà÷åíèÿ íà íóëåâîå. 
109
        jmp     check_box_mouse_end
95
        jmp     check_box_mouse_end
110
        
96
        
111
@@:
97
@@:
112
        bts  dword ch_flags,2   ;ïðîâåðêà ôëàãà ò.å. ïåðåíîñ â cf çíà÷åíèå áèòà è óñòàíîâêà áèòà â ñîñòîÿíèå âêëþ÷åíî
98
        bts  dword ch_flags,2   ;ïðîâåðêà ôëàãà ò.å. ïåðåíîñ â cf çíà÷åíèå áèòà è óñòàíîâêà áèòà â ñîñòîÿíèå âêëþ÷åíî
113
        jc   check_box_mouse_end         ;åñëè CF=1 òî ïåðåéòè  â êîíåö ò.å. ýòî âûõîä
99
        jc   check_box_mouse_end         ;åñëè CF=1 òî ïåðåéòè  â êîíåö ò.å. ýòî âûõîä
114
        mov  esi,dword ch_text_length ;çàãðóçèòü êîë-âî ñèìâîëîâ â òåêñòîâîé ñòðîêå
100
        mov  esi,dword ch_text_length ;çàãðóçèòü êîë-âî ñèìâîëîâ â òåêñòîâîé ñòðîêå
115
        ;Óìíîæåíèå íà 6 Áûñòðîå óìíîæåíèå ìîæíî âîñïîëüçîâàòüñÿ ëþáûì ìç ìåòîäîâ, íî íà ñòàðûõ Ïðîöåññîðàõ (386,486,P1)áûñòðåå áóäåò ñ èíñòðóêöèåé Lea
101
        ;Óìíîæåíèå íà 6 Áûñòðîå óìíîæåíèå ìîæíî âîñïîëüçîâàòüñÿ ëþáûì ìç ìåòîäîâ, íî íà ñòàðûõ Ïðîöåññîðàõ (386,486,P1)áûñòðåå áóäåò ñ èíñòðóêöèåé Lea
116
        lea esi,[eax*3]  
102
        lea esi,[eax*3]  
117
        shl esi,1
103
        shl esi,1
118
;        imul esi,6             ; èëè ìîæíî è òàê óìíîæèòü íà 6
104
;        imul esi,6             ; èëè ìîæíî è òàê óìíîæèòü íà 6
119
        add  esi,dword ch_text_margin ;äîáàâèòü 3 - ðàññòîÿíèå îò ÷åê áîêñà äî íàäïèñè
105
        add  esi,dword ch_text_margin ;äîáàâèòü 3 - ðàññòîÿíèå îò ÷åê áîêñà äî íàäïèñè
120
 
106
 
121
        mov  eax,37             ;ïîëó÷èì êîîðäèíàòû ìûøêè 
107
        mov  eax,37             ;ïîëó÷èì êîîðäèíàòû ìûøêè 
122
        mov  ebx,1              ;äîáàâèòü 1
108
        mov  ebx,1              ;äîáàâèòü 1
123
        mcall               ;ïîëó÷èòü êîîðäèíàòû êóðñîðà îòíîñèòåëüíî îêíà 
109
        mcall               ;ïîëó÷èòü êîîðäèíàòû êóðñîðà îòíîñèòåëüíî îêíà 
124
        
110
        
125
        movzx ebx,word ch_top  ;çàãðóçèòü â bx çíà÷åíèå êîîðäèíàòû ó
111
        movzx ebx,word ch_top  ;çàãðóçèòü â bx çíà÷åíèå êîîðäèíàòû ó
126
        cmp   ax,bx              ;ñðàâíèòü ñ ñ êîîðäèíàòîé êóðñîðà
112
        cmp   ax,bx              ;ñðàâíèòü ñ ñ êîîðäèíàòîé êóðñîðà
127
        jl   check_box_mouse_end          ;SF <> OF åñëè ìåíüøå 
113
        jl   check_box_mouse_end          ;SF <> OF åñëè ìåíüøå 
128
        add   ebx,dword ch_size        ;äîáàâèòü ðàçìåð 
114
        add   ebx,dword ch_size        ;äîáàâèòü ðàçìåð 
129
        cmp   ax,bx              ;ñðàâíèòü
115
        cmp   ax,bx              ;ñðàâíèòü
130
        jg   check_box_mouse_end          ;ZF = 0 è SF = OF åñëè áîëüøå 
116
        jg   check_box_mouse_end          ;ZF = 0 è SF = OF åñëè áîëüøå 
131
             
117
             
132
        shr   eax,16              ;ðàçäåëèì íà 65536 èëè ïðîñòî ñäâèíåì áèòû íà 16 çíà÷åíèé
118
        shr   eax,16              ;ðàçäåëèì íà 65536 èëè ïðîñòî ñäâèíåì áèòû íà 16 çíà÷åíèé
133
        movzx ebx,word ch_left  ;ïðîèçâåäåì àíàëîãè÷íîå ñðàâíåíèå
119
        movzx ebx,word ch_left  ;ïðîèçâåäåì àíàëîãè÷íîå ñðàâíåíèå
134
        cmp   ax,bx            ;ñðàâíèòü ðåãèñòðû
120
        cmp   ax,bx            ;ñðàâíèòü ðåãèñòðû
135
        jl   check_box_mouse_end        ;åñëè ìåíüøå
121
        jl   check_box_mouse_end        ;åñëè ìåíüøå
136
        add   ebx,dword ch_size      ;äîáàâèòü äëèíó ñòîðîíû ïðÿìîóãîëüíèêà
122
        add   ebx,dword ch_size      ;äîáàâèòü äëèíó ñòîðîíû ïðÿìîóãîëüíèêà
137
        add   ebx,esi          ;Ó÷åñòü â çíà÷åíèè ïî õ åùå è äëèíó íàäïèñè ê ÷åêáîêñó
123
        add   ebx,esi          ;Ó÷åñòü â çíà÷åíèè ïî õ åùå è äëèíó íàäïèñè ê ÷åêáîêñó
138
        cmp   ax,bx            ;ñòðàâíèòü ðåãèñòðû
124
        cmp   ax,bx            ;ñòðàâíèòü ðåãèñòðû
139
        jg   check_box_mouse_end        ;åñëè áîëüøå 
125
        jg   check_box_mouse_end        ;åñëè áîëüøå 
140
 
126
 
141
        bts  dword ch_flags,1  ;èçâëå÷åíèå çíà÷åíèÿ çàäàííîãî áèòà â ôëàã cf è èçìåíåíèå åãî çíà÷åíèÿ íà 1. 
127
        bts  dword ch_flags,1  ;èçâëå÷åíèå çíà÷åíèÿ çàäàííîãî áèòà â ôëàã cf è èçìåíåíèå åãî çíà÷åíèÿ íà 1. 
142
        jc   @f                ;CF=1 òî ïåðåéòè íà íèæíþþ @@
128
        jc   @f                ;CF=1 òî ïåðåéòè íà íèæíþþ @@
143
        
129
        
144
        call check_box_draw_ch        ;îòîáðàçèòü âêëþ÷åííûé ÷åê áîêñ
130
        call check_box_draw_ch        ;îòîáðàçèòü âêëþ÷åííûé ÷åê áîêñ
145
;        mov   dword [esp+24],1 ;äàëüíåéøàÿ ïðîâåðêà ÷åê áîêñîâ áåñìûñëåíà, ïî ýòîìó â ñòåê, ãäå ðàñïîëàãàåòñÿ ecx ïîìåñòèòì 0 
131
;        mov   dword [esp+24],1 ;äàëüíåéøàÿ ïðîâåðêà ÷åê áîêñîâ áåñìûñëåíà, ïî ýòîìó â ñòåê, ãäå ðàñïîëàãàåòñÿ ecx ïîìåñòèòì 0 
146
        jmp  check_box_mouse_end       ;âûéòè 
132
        jmp  check_box_mouse_end       ;âûéòè 
147
@@:
133
@@:
148
        btr   word ch_flags,1  ;èçâëå÷åíèå çíà÷åíèÿ çàäàííîãî áèòà â ôëàã cf è èçìåíåíèå åãî çíà÷åíèÿ íà íóëåâîå. 
134
        btr   word ch_flags,1  ;èçâëå÷åíèå çíà÷åíèÿ çàäàííîãî áèòà â ôëàã cf è èçìåíåíèå åãî çíà÷åíèÿ íà íóëåâîå. 
149
        call check_box_clear_ch         ;âûêëþ÷èòü ÷åê áîêñ ò.å. íà ìåñòå çàêðàøåííîãî ïðÿìîóãîëüíèêà îòîáðàçèòü öâåò ôîíà.
135
        call check_box_clear_ch         ;âûêëþ÷èòü ÷åê áîêñ ò.å. íà ìåñòå çàêðàøåííîãî ïðÿìîóãîëüíèêà îòîáðàçèòü öâåò ôîíà.
150
check_box_mouse_end:
136
check_box_mouse_end:
151
popa                                ;âîññòàíîâèòü ðåãèñòðû èç ñòåêà
137
popa                                ;âîññòàíîâèòü ðåãèñòðû èç ñòåêà
152
ret  4                              ;âûéòè
138
ret  4                              ;âûéòè
153
}
139
}