Subversion Repositories Kolibri OS

Rev

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

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