Subversion Repositories Kolibri OS

Rev

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

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