Subversion Repositories Kolibri OS

Rev

Rev 1227 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1227 Rev 1372
1
;ôàéë ñîçäàí 13.02.2009  Íà êîä ïðèìåíåíà GPL2 ëèöåíçèÿ
1
;ôàéë ñîçäàí 13.02.2009  Íà êîä ïðèìåíåíà GPL2 ëèöåíçèÿ
2
;Ìàêðîñ äëÿ ñèñòåìíîé áèáëèîòåêè box_lib.obj
2
;Ìàêðîñ äëÿ ñèñòåìíîé áèáëèîòåêè box_lib.obj
3
;Optionbox
3
;Optionbox
-
 
4
 
-
 
5
struc option_box point_gr,left,top,op_text_margin,op_size,color,border_color,text_color,text,op_text_length,flags
-
 
6
{        ;áâàãªâãà  ¯ à ¬¥â஢ ¤«ï 祪 ¡®ªá 
-
 
7
op_flag_en=10b
-
 
8
.option_group: dd point_gr
-
 
9
.left: dw left       ;+0 ;¯®«®¦¥­¨¥ ¯® å
-
 
10
.top:  dw top        ;¯®«®¦¥­¨¥ ¯® ã
-
 
11
.ch_text_margin:  dd op_text_margin ;à ááâ®ï­¨¥ ®â ¯àאַ㣮«ì­¨ª  祪 ¡®ªá  ¤® ­ ¤¯¨á¨
-
 
12
.ch_size: dd op_size ;à §¬¥à ª¢ ¤à â  祪 ¡®ªá , ¤«ï ¯à¨¬¥à  12
-
 
13
.color:   dd color   ;梥⠢­ãâਠ祪¡®ªá 
-
 
14
.border_color: dd border_color ;梥â à ¬ª¨
-
 
15
.text_color:   dd text_color   ;梥⠭ ¤¯¨á¨
-
 
16
.text: dd text                 ; ¤à¥á ¢ ª®¤¥ ¯à®£à ¬¬ë £¤¥ à á¯®«®¦¥­ ⥪áâ
-
 
17
.ch_text_length: dd op_text_length ;¤«¨­­  áâப¨ á ᨬ¢®« ¬¨
-
 
18
.flags: dd flags+0   ; ä« £¨
-
 
19
}
4
 
20
 
5
macro use_optionbox_driver	;ìàêðîñû êîòîðûå óïðàâëÿþò ðàáîòîé áîêñà )
21
macro use_optionbox_driver	;ìàêðîñû êîòîðûå óïðàâëÿþò ðàáîòîé áîêñà )
6
{
22
{
7
option_box_draw:
23
option_box_draw:
8
        pusha
24
        pusha
9
 
25
 
10
        mov     eax,dword [esp+36]
26
        mov     eax,dword [esp+36]
11
@@:     mov     edi,dword [eax]
27
@@:     mov     edi,dword [eax]
12
        test    edi,edi
28
        test    edi,edi
13
        je      option_check
29
        je      option_check
14
        call    option_box_draw_box
30
        call    option_box_draw_box
15
        add     eax,4
31
        add     eax,4
16
        jmp    @b 
32
        jmp    @b 
17
 
33
 
18
option_check:
34
option_check:
19
        mov     eax,dword [esp+36]
35
        mov     eax,dword [esp+36]
20
@@:     mov     edi,dword [eax]
36
@@:     mov     edi,dword [eax]
21
        test    edi,edi
37
        test    edi,edi
22
        je      @f
38
        je      @f
23
        
39
        
24
        mov     ebx,dword [edi]
40
        mov     ebx,dword [edi]
25
        mov     ebx,dword [ebx]
41
        mov     ebx,dword [ebx]
26
        cmp     edi,ebx
42
        cmp     edi,ebx
27
        jne     .clear_op
43
        jne     .clear_op
28
        
44
        
29
        pusha
45
        pusha
30
        call    option_box_draw_op
46
        call    option_box_draw_op
31
        popa
47
        popa
32
        add     eax,4
48
        add     eax,4
33
        jmp     @b
49
        jmp     @b
34
 
50
 
35
.clear_op:
51
.clear_op:
36
        pusha
52
        pusha
37
        call    option_box_clear_op
53
        call    option_box_clear_op
38
        popa
54
        popa
39
        add     eax,4
55
        add     eax,4
40
        jmp     @b
56
        jmp     @b
41
 
57
 
42
 
58
 
43
@@:     popa
59
@@:     popa
44
        ret 4 
60
        ret 4 
45
        ; exit âîîáùå :)
61
        ; exit âîîáùå :)
46
 
62
 
47
 
63
 
48
option_box_mouse:
64
option_box_mouse:
49
        pusha
65
        pusha
50
	mcall	37,2
66
	mcall	37,2
51
	test    eax,eax
67
	test    eax,eax
52
	jnz	@f
68
	jnz	@f
53
	popa
69
	popa
54
        ret 4
70
        ret 4
55
@@:
71
@@:
56
        mov     eax,dword [esp+36]
72
        mov     eax,dword [esp+36]
57
@@:     mov     edi,dword [eax]
73
@@:     mov     edi,dword [eax]
58
        test    edi,edi
74
        test    edi,edi
59
        je      option_check
75
        je      option_check
60
        call    option_box_mouse_op
76
        call    option_box_mouse_op
61
        add     eax,4
77
        add     eax,4
62
        jmp    @b 
78
        jmp    @b 
63
 
79
 
64
}
80
}
65
macro use_optionbox_draw
81
macro use_optionbox_draw
66
{
82
{
67
option_box_draw_box:
83
option_box_draw_box:
68
option_group equ [edi]
84
option_group equ [edi]
69
op_left equ [edi+4]    ;êîîðäèíàòà íà÷àëà ðèñîâàíèÿ ïî õ
85
op_left equ [edi+4]    ;êîîðäèíàòà íà÷àëà ðèñîâàíèÿ ïî õ
70
op_top equ [edi+6]     ;êîîðäèíàòà íà÷àëà ðèñîâàíèÿ ïî ó
86
op_top equ [edi+6]     ;êîîðäèíàòà íà÷àëà ðèñîâàíèÿ ïî ó
71
op_text_margin equ [edi+8]      ;=4 ðàññòîÿíèå îò ïðÿìîóãîëüíèêà ÷åê áîêñà äî íàäïèñè 
87
op_text_margin equ [edi+8]      ;=4 ðàññòîÿíèå îò ïðÿìîóãîëüíèêà ÷åê áîêñà äî íàäïèñè 
72
op_size equ [edi+12]             ;12 ðàçìåð êâàäðàòà ÷åê áîêñà 
88
op_size equ [edi+12]             ;12 ðàçìåð êâàäðàòà ÷åê áîêñà 
73
op_color equ [edi+16]
89
op_color equ [edi+16]
74
op_border_color equ [edi+20] ; or [edi+4] ;öâåò ðàìêè checkbox åå ìîæíî çàäàòü ñàìîñòîÿòåëüíî
90
op_border_color equ [edi+20] ; or [edi+4] ;öâåò ðàìêè checkbox åå ìîæíî çàäàòü ñàìîñòîÿòåëüíî
75
op_text_color equ   [edi+24];[edi+4]  ;öâåò òåêñòà
91
op_text_color equ   [edi+24];[edi+4]  ;öâåò òåêñòà
76
op_text_ptr equ [edi+28]    ;óêàçàòåëü íà íà÷àëî òåêñòîâîé ñòðîêè 
92
op_text_ptr equ [edi+28]    ;óêàçàòåëü íà íà÷àëî òåêñòîâîé ñòðîêè 
77
op_text_length equ [edi+32]
93
op_text_length equ [edi+32]
78
op_flags equ [edi+36]       ;ôëàãè
94
op_flags equ [edi+36]       ;ôëàãè
79
 
95
 
80
        pusha   ;ñîõðàíèì âñå ðåãèñòðû
96
        pusha   ;ñîõðàíèì âñå ðåãèñòðû
81
 
97
 
82
        movzx ebx,word op_left 
98
        movzx ebx,word op_left 
83
        shl ebx,16 
99
        shl ebx,16 
84
        add ebx,dword op_size 
100
        add ebx,dword op_size 
85
        movzx ecx,word op_top 
101
        movzx ecx,word op_top 
86
        shl ecx,16 
102
        shl ecx,16 
87
        add ecx,dword op_size 
103
        add ecx,dword op_size 
88
        mov edx,dword op_border_color 
104
        mov edx,dword op_border_color 
89
        mov eax,13 
105
        mov eax,13 
90
        mcall ;ðèñóåì ðàìêó 
106
        mcall ;ðèñóåì ðàìêó 
91
  
107
  
92
        mov edx,dword op_color 
108
        mov edx,dword op_color 
93
        add ebx,1 shl 16 - 2 
109
        add ebx,1 shl 16 - 2 
94
        add ecx,1 shl 16 - 2 
110
        add ecx,1 shl 16 - 2 
95
        mcall ;çàêðàøèâàåì âíóòðåííîñòè ÷åêáîêñà 
111
        mcall ;çàêðàøèâàåì âíóòðåííîñòè ÷åêáîêñà 
96
 
112
 
97
;        mov     eax,dword option_group
113
;        mov     eax,dword option_group
98
;        mov     dword eax,[eax]
114
;        mov     dword eax,[eax]
99
;        cmp     eax,edi
115
;        cmp     eax,edi
100
;        jne     @f
116
;        jne     @f
101
;        call    option_box_draw_op  ;íàðèñîâàòü âêëþ÷åííûé ÷åê áîêñ
117
;        call    option_box_draw_op  ;íàðèñîâàòü âêëþ÷åííûé ÷åê áîêñ
102
 
118
 
103
 
119
 
104
;----------------------------
120
;----------------------------
105
;ðàñ÷åò êóäà áóäåò ïðîèçâåäåí âûâîä òåêñòà
121
;ðàñ÷åò êóäà áóäåò ïðîèçâåäåí âûâîä òåêñòà
106
;----------------------------
122
;----------------------------
107
@@:     movzx ebx,word op_left        ;çàãðóçèòü çíà÷åíèå õ äëÿ ÷åê áîêñà
123
@@:     movzx ebx,word op_left        ;çàãðóçèòü çíà÷åíèå õ äëÿ ÷åê áîêñà
108
        add   ebx,dword op_size
124
        add   ebx,dword op_size
109
        add   ebx,dword op_text_margin;äîáàâèòü ðàçìåð ñòîðîíû è ðàññòîÿíèå íà êîòîðîì íà÷íåòñÿ âûâîä òåêñòà
125
        add   ebx,dword op_text_margin;äîáàâèòü ðàçìåð ñòîðîíû è ðàññòîÿíèå íà êîòîðîì íà÷íåòñÿ âûâîä òåêñòà
110
        shl   ebx,16                ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536)
126
        shl   ebx,16                ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536)
111
        mov   bx,word op_top        ;çàãðóçèì çíà÷åíèå ïî y
127
        mov   bx,word op_top        ;çàãðóçèì çíà÷åíèå ïî y
112
        add   ebx,op_size
128
        add   ebx,op_size
113
        mov   ecx,dword op_text_color        ;çàãðóçèì öâåò íàäïèñè + flags
129
        mov   ecx,dword op_text_color        ;çàãðóçèì öâåò íàäïèñè + flags
114
        sub   ebx,7        ;äîáàâèì çíà÷åíèå äëèíû ñòîðîíû -9+2
130
        sub   ebx,7        ;äîáàâèì çíà÷åíèå äëèíû ñòîðîíû -9+2
115
        
131
        
116
        mov   edx,dword op_text_ptr                ;óêàæåì àäðåñ îò êóäà íóæíî âûâîäèòü ñòðîêó
132
        mov   edx,dword op_text_ptr                ;óêàæåì àäðåñ îò êóäà íóæíî âûâîäèòü ñòðîêó
117
        mov   esi,dword op_text_length
133
        mov   esi,dword op_text_length
118
        ;âíåñåì â eax çíà÷åíèå âûâîäà íàäïèñè íà êàíâó
134
        ;âíåñåì â eax çíà÷åíèå âûâîäà íàäïèñè íà êàíâó
119
        mov   eax,4
135
        mov   eax,4
120
        mcall                  ;Âûâîä 
136
        mcall                  ;Âûâîä 
121
popa                           ;âîññòàíîâèòü çíà÷åíèÿ ðåãèñòðîâ èç ñòåêà
137
popa                           ;âîññòàíîâèòü çíà÷åíèÿ ðåãèñòðîâ èç ñòåêà
122
ret                            ;âûéäåì èç ïðîöåäóðû
138
ret                            ;âûéäåì èç ïðîöåäóðû
123
 
139
 
124
option_box_clear_op:                      ;î÷èñòêà ÷åê áîêñà
140
option_box_clear_op:                      ;î÷èñòêà ÷åê áîêñà
125
        mov     edx,dword op_color    ;öâåò âíóòðè ÷åê áîêñà
141
        mov     edx,dword op_color    ;öâåò âíóòðè ÷åê áîêñà
126
        jmp     @f              ;áåçóñëîâíûé ïðûæîê íà íèæíþþ ìåòêó @@
142
        jmp     @f              ;áåçóñëîâíûé ïðûæîê íà íèæíþþ ìåòêó @@
127
 
143
 
128
 
144
 
129
option_box_draw_op:            ;íàðèñîâàòü âêëþ÷åííûé ÷åê áîêñ
145
option_box_draw_op:            ;íàðèñîâàòü âêëþ÷åííûé ÷åê áîêñ
130
        mov   edx,dword op_border_color        ;çàãðóçèòü öâåò
146
        mov   edx,dword op_border_color        ;çàãðóçèòü öâåò
131
@@:
147
@@:
132
        movzx ebx,word op_left  ;çàãðóçèòü êîîðäèíàòó ïî õ
148
        movzx ebx,word op_left  ;çàãðóçèòü êîîðäèíàòó ïî õ
133
        mov   eax,dword op_size
149
        mov   eax,dword op_size
134
        mov   bp,ax
150
        mov   bp,ax
135
        shr   eax,2
151
        shr   eax,2
136
        push  ax
152
        push  ax
137
 
153
 
138
        push  ax
154
        push  ax
139
        add   ebx,eax           
155
        add   ebx,eax           
140
        shl   ebx,16            ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536)
156
        shl   ebx,16            ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536)
141
        pop   ax
157
        pop   ax
142
        lea   eax,[eax*2]
158
        lea   eax,[eax*2]
143
        sub   bp,ax             ;ñîõðàíèì ðåãèñòð bx â ðåãèñòðå óêàçàòåëÿ áàçû
159
        sub   bp,ax             ;ñîõðàíèì ðåãèñòð bx â ðåãèñòðå óêàçàòåëÿ áàçû
144
        mov   bx,bp
160
        mov   bx,bp
145
 
161
 
146
        movzx ecx,word op_top ;çàãðóçèòü êîîðäèíàòó ïî ó
162
        movzx ecx,word op_top ;çàãðóçèòü êîîðäèíàòó ïî ó
147
        pop   ax
163
        pop   ax
148
        add   cx,ax         
164
        add   cx,ax         
149
        shl   ecx,16          ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536)
165
        shl   ecx,16          ;ñäâèíåì íà 16 ðàçðÿäîâ â ëåâî (óìíîæèì íà 65536)
150
        mov   cx,bp           ;çàãðóçèì çíà÷åíèÿ ðåãèñòðà óêàçàòåëÿ áàçû â cx
166
        mov   cx,bp           ;çàãðóçèì çíà÷åíèÿ ðåãèñòðà óêàçàòåëÿ áàçû â cx
151
        mov   eax,13          ;â eax - çíà÷åíèÿ ôóíêöèè äëÿ âûâîäà ïîëîñû ò.å. ïî ñóòè ïðÿìîóãîëüíèêà, êîòîðûé îòîáðàæàåò âêëþ÷åííûé êîìïîíåíò ÷åê áîêñ
167
        mov   eax,13          ;â eax - çíà÷åíèÿ ôóíêöèè äëÿ âûâîäà ïîëîñû ò.å. ïî ñóòè ïðÿìîóãîëüíèêà, êîòîðûé îòîáðàæàåò âêëþ÷åííûé êîìïîíåíò ÷åê áîêñ
152
        mcall            ;âûâîä
168
        mcall            ;âûâîä
153
ret                                ;âûéòè èç ïðîöåäóðû
169
ret                                ;âûéòè èç ïðîöåäóðû
154
}
170
}
155
 
171
 
156
 
172
 
157
macro use_optionbox_mouse
173
macro use_optionbox_mouse
158
{
174
{
159
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
175
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
160
;Îáðàáîò÷èê mouse
176
;Îáðàáîò÷èê mouse
161
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
177
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
162
option_box_mouse_op:                 ;îáðàáîòêà ìûøè 
178
option_box_mouse_op:                 ;îáðàáîòêà ìûøè 
163
pusha
179
pusha
164
        mov     esi,dword op_text_length ;çàãðóçèòü êîë-âî ñèìâîëîâ â òåêñòîâîé ñòðîêå
180
        mov     esi,dword op_text_length ;çàãðóçèòü êîë-âî ñèìâîëîâ â òåêñòîâîé ñòðîêå
165
        ;Óìíîæåíèå íà 6 Áûñòðîå óìíîæåíèå ìîæíî âîñïîëüçîâàòüñÿ ëþáûì ìç ìåòîäîâ, íî íà ñòàðûõ Ïðîöåññîðàõ (386,486,P1)áûñòðåå áóäåò ñ èíñòðóêöèåé Lea
181
        ;Óìíîæåíèå íà 6 Áûñòðîå óìíîæåíèå ìîæíî âîñïîëüçîâàòüñÿ ëþáûì ìç ìåòîäîâ, íî íà ñòàðûõ Ïðîöåññîðàõ (386,486,P1)áûñòðåå áóäåò ñ èíñòðóêöèåé Lea
166
;        lea    esi,[eax*2+eax]
182
;        lea    esi,[eax*2+eax]
167
;        shl    eax,1
183
;        shl    eax,1
168
        imul    esi,6               ; èëè ìîæíî è òàê óìíîæèòü íà 6
184
        imul    esi,6               ; èëè ìîæíî è òàê óìíîæèòü íà 6
169
        xor     ebx,ebx
185
        xor     ebx,ebx
170
        add     esi,dword op_text_margin   ;äîáàâèòü 3 - ðàññòîÿíèå îò ÷åê áîêñà äî íàäïèñè
186
        add     esi,dword op_text_margin   ;äîáàâèòü 3 - ðàññòîÿíèå îò ÷åê áîêñà äî íàäïèñè
171
        
187
        
172
        mov     eax,37          ;ïîëó÷èì êîîðäèíàòû ìûøêè 
188
        mov     eax,37          ;ïîëó÷èì êîîðäèíàòû ìûøêè 
173
        inc     ebx             ;äîáàâèòü 1
189
        inc     ebx             ;äîáàâèòü 1
174
        mcall                ;ïîëó÷èòü êîîðäèíàòû êóðñîðà îòíîñèòåëüíî îêíà 
190
        mcall                ;ïîëó÷èòü êîîðäèíàòû êóðñîðà îòíîñèòåëüíî îêíà 
175
 
191
 
176
        movzx   ebx,word op_top           ;çàãðóçèòü â bx çíà÷åíèå êîîðäèíàòû ó
192
        movzx   ebx,word op_top           ;çàãðóçèòü â bx çíà÷åíèå êîîðäèíàòû ó
177
        cmp     ax,bx               ;ñðàâíèòü ñ ñ êîîðäèíàòîé êóðñîðà
193
        cmp     ax,bx               ;ñðàâíèòü ñ ñ êîîðäèíàòîé êóðñîðà
178
        jl      option_box_mouse_end          ;SF <> OF åñëè ìåíüøå 
194
        jl      option_box_mouse_end          ;SF <> OF åñëè ìåíüøå 
179
        add     ebx,dword op_size          ;äîáàâèòü ðàçìåð 
195
        add     ebx,dword op_size          ;äîáàâèòü ðàçìåð 
180
        cmp     ax,bx               ;ñðàâíèòü
196
        cmp     ax,bx               ;ñðàâíèòü
181
        jg      option_box_mouse_end          ;ZF = 0 è SF = OF åñëè áîëüøå 
197
        jg      option_box_mouse_end          ;ZF = 0 è SF = OF åñëè áîëüøå 
182
        
198
        
183
        shr     eax,16              ;ðàçäåëèì íà 65536 èëè ïðîñòî ñäâèíåì áèòû íà 16 çíà÷åíèé
199
        shr     eax,16              ;ðàçäåëèì íà 65536 èëè ïðîñòî ñäâèíåì áèòû íà 16 çíà÷åíèé
184
        movzx   ebx,word op_left          ;ïðîèçâåäåì àíàëîãè÷íîå ñðàâíåíèå
200
        movzx   ebx,word op_left          ;ïðîèçâåäåì àíàëîãè÷íîå ñðàâíåíèå
185
        cmp     ax,bx                ;ñðàâíèòü ðåãèñòðû
201
        cmp     ax,bx                ;ñðàâíèòü ðåãèñòðû
186
        jl      option_box_mouse_end           ;åñëè ìåíüøå
202
        jl      option_box_mouse_end           ;åñëè ìåíüøå
187
        add     ebx,dword op_size          ;äîáàâèòü äëèíó ñòîðîíû ïðÿìîóãîëüíèêà
203
        add     ebx,dword op_size          ;äîáàâèòü äëèíó ñòîðîíû ïðÿìîóãîëüíèêà
188
        add     ebx,esi              ;Ó÷åñòü â çíà÷åíèè ïî õ åùå è äëèíó íàäïèñè ê ÷åêáîêñó
204
        add     ebx,esi              ;Ó÷åñòü â çíà÷åíèè ïî õ åùå è äëèíó íàäïèñè ê ÷åêáîêñó
189
        cmp     ax,bx                ;ñòðàâíèòü ðåãèñòðû
205
        cmp     ax,bx                ;ñòðàâíèòü ðåãèñòðû
190
        jg      option_box_mouse_end           ;åñëè áîëüøå 
206
        jg      option_box_mouse_end           ;åñëè áîëüøå 
191
        mov     eax,dword option_group
207
        mov     eax,dword option_group
192
        mov     [eax],edi
208
        mov     [eax],edi
193
 
209
 
194
option_box_mouse_end:
210
option_box_mouse_end:
195
popa                              ;âîññòàíîâèòü ðåãèñòðû èç ñòåêà
211
popa                              ;âîññòàíîâèòü ðåãèñòðû èç ñòåêà
196
ret                               ;âûéòè
212
ret                               ;âûéòè
197
 
213
 
198
}
214
}