Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
205 heavyiron 1
macro use_check_box
2
{
3
ch_text_margin=3
4
ch_size=10
5
ch_left equ [edi]
6
ch_top equ [edi+2]
7
ch_color equ [edi+4]
8
ch_border_color equ [edi+8]
9
ch_text_color equ [edi+12]
10
ch_text_ptr equ [edi+16]
11
ch_flags equ [edi+20]
12
check_box:
13
.draw:
14
pusha
15
	mov	eax,38
16
	mov	bx,ch_left
17
	push	bx
18
	shl	ebx,16
19
	pop	bx
20
	mov	cx,ch_top
21
	push	cx
22
	shl	ecx,16
23
	pop	cx
24
	push	cx
25
	add	cx,ch_size
26
	mov	edx,ch_border_color
27
	int	0x40
28
	push	bx
29
	add	bx,ch_size
30
	ror	ebx,16
31
	add	bx,ch_size
32
	int	0x40
33
	pop	bx
34
	pop	cx
35
	int	0x40
36
	add	cx,ch_size
37
	push	cx
38
	shl	ecx,16
39
	pop	cx
40
	int	0x40
41
 
42
	mov	eax,13
43
	mov	bx,ch_left
44
	inc	bx
45
	shl	ebx,16
46
	mov	bx,ch_size
47
	dec	bx
48
	push	bx
49
	mov	cx,ch_top
50
	inc	cx
51
	shl	ecx,16
52
	pop	cx
53
	mov	edx,ch_color
54
	int	0x40
55
 
56
	bt	dword ch_flags,1
57
	jnc	@f
58
	call	.draw_ch
59
@@:
60
 
61
	call	.get_text_n
62
	mov	bx,ch_left
63
	add	bx,(ch_size+ch_text_margin)
64
	shl	ebx,16
65
	mov	bx,ch_top
66
	add	bx,(ch_size-9+2)
67
	mov	ecx,ch_text_color
68
	mov	eax,4
69
	int	0x40
70
popa
71
ret
72
 
73
.get_text_n:
74
	push	eax
75
	xor	esi,esi
76
	mov	edx,ch_text_ptr
77
@@:
78
	mov	ah,[edx+esi]
79
	inc	esi
80
	test	ah,ah
81
	jnz	@b
82
	dec	esi
83
	pop	eax
84
ret
85
 
86
.clear_ch:
87
	mov	edx,ch_color
88
	jmp	@f
89
.draw_ch:
90
	mov	edx,ch_border_color
91
@@:
92
	mov	bx,ch_left
93
	add	bx,(ch_size/3)
94
	shl	ebx,16
95
	mov	bx,(ch_size/2)
96
	push	bx
97
	mov	cx,ch_top
98
	add	cx,(ch_size/3)
99
	shl	ecx,16
100
	pop	cx
101
	mov	eax,13
102
	int	0x40
103
ret
104
 
105
.mouse:
106
pusha
107
	mov	eax,37
108
	mov	ebx,2
109
	int	0x40
110
	bt	eax,0
111
	jc	@f
112
	btr	dword ch_flags,2
113
	popa
114
	ret
115
@@:
116
	bts	dword ch_flags,2
117
	jc	.mouse_end
118
	call	.get_text_n
119
	imul	esi,6
120
	add	si,ch_text_margin
121
	mov	eax,37
122
	xor	ebx,ebx
123
	inc	ebx
124
	int	0x40
125
	mov	bx,ch_top
126
	cmp	ax,bx
127
	jl	.mouse_end
128
	add	bx,ch_size
129
	cmp	ax,bx
130
	jg	.mouse_end
131
	shr	eax,16
132
	mov	bx,ch_left
133
	cmp	ax,bx
134
	jl	.mouse_end
135
	add	bx,ch_size
136
	add	bx,si
137
	cmp	ax,bx
138
	jg	.mouse_end
139
 
140
	bts	dword ch_flags,1
141
	jc	@f
142
	call	.draw_ch
143
	jmp	.mouse_end
144
@@:
145
	btr	dword ch_flags,1
146
	call	.clear_ch
147
.mouse_end:
148
popa
149
ret
150
}
151
 
152
struc check_box left,top,color,border_color,text_color,text,flags
153
{
154
.left: dw left	;+0
155
.top: dw top	;+2
156
.color: dd color ;+4
157
.border_color: dd border_color ;+8
158
.text_color: dd text_color     ;+12
159
.text: dd text	     ;+16
160
.flags: dd flags+0   ;+20
161
}
162
 
163
ch_struc_size=24
164
macro draw_check_boxes start,end
165
{
166
	mov	edi,start
167
	mov	ecx,((end-start)/ch_struc_size)
168
@@:
169
	call	check_box.draw
170
	add	edi,ch_struc_size
171
	loop	@b
172
}
173
 
174
macro mouse_check_boxes start,end
175
{
176
	mov	edi,start
177
	mov	ecx,((end-start)/ch_struc_size)
178
@@:
179
	call	check_box.mouse
180
	add	edi,ch_struc_size
181
	loop	@b
182
}
183
 
184
macro check_boxes_set_sys_color start,end,color_table
185
{
186
	mov	edi,start
187
	mov	ecx,((end-start)/ch_struc_size)
188
	mov	esi,color_table
189
@@:
190
	push	dword [esi+32]
191
	pop	dword ch_text_color
192
	push	dword [esi+36]
193
	pop	dword ch_border_color
194
	add	edi,ch_struc_size
195
	loop	@b
196
}