Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4336 GerdtR 1
;ret eax=numIcon
2
proc AddIcon stdcall,x,y,lpIcon,lpName,lpExeFile,lpParams
3
	push	ebx edi esi
4
 
5
	mov	eax,[x]
6
	mov	ebx,[y]
7
 
8
	xor	edx,edx
9
	test	eax,8000h
10
	jnz	@f
11
	mov	dx,[wsW]    ;если надо, то преобразовываем в
12
	shr	edx,1		;отрицательные координаты
13
	add	dx,[wsX]
14
	cmp	eax,edx
15
	jbe	@f
16
	sub	ax,[wsW]
17
	inc	eax
18
      @@:
19
 
20
	test	ebx,8000h
21
	jnz	@f
22
	mov	dx,[wsY]
23
	shr	edx,1
24
	add	dx,[wsH]
25
	cmp	ebx,edx
26
	jbe	@f
27
	sub	bx,[wsH]
28
	inc	ebx
29
      @@:
30
				;поправка на случай выхода за край экрана
31
 
32
	test	eax,8000h
33
	jnz	@f
34
	mov	dx,[wsXe]
35
	sub	edx,ICON_SIZE
36
	cmp	eax,edx
37
	jbe	@f
38
	mov	eax,edx
39
     @@:
40
 
41
	test	ebx,8000h
42
	jnz	@f
43
	mov	dx,[wsYe]
44
	sub	edx,ICON_SIZE
45
	cmp	ebx,edx
46
	jbe	@f
47
	mov	ebx,edx
48
     @@:
49
 
50
	mov	[x],eax
51
	mov	[y],ebx
52
 
53
	xor	al,al
54
	or	ecx,-1
55
	mov	edi,[lpName]
56
	repne	scasb
57
	sub	edi,[lpName]
58
	mov	ebx,edi
59
	mov	edi,[lpExeFile]
60
	repne	scasb
61
	sub	edi,[lpExeFile]
62
	add	ebx,edi
63
	mov	edi,[lpParams]
64
	repne	scasb
65
	sub	edi,[lpParams]
66
	add	ebx,edi
67
	mov	edi,[lpIcon]
68
	repne	scasb
69
	sub	edi,[lpIcon]
70
	add	ebx,edi
71
	add	ebx,4
72
	mov	ecx,dword[SizeData]
73
	add	ecx,ebx
74
	mov	edx,[IconsOffs]
75
	mcall	68,20
76
 
77
	mov	edx,dword[SizeData]
78
	mov	dword[SizeData],ecx
79
	mov	dword[BegData],eax
80
	mov	edi,eax
81
	add	edi,edx
82
	mov	esi,[lpName]
83
    @@: lodsb
84
	stosb
85
	test	al,al
86
	jnz	@b
87
 
88
	mov	esi,[lpExeFile]
89
    @@: lodsb
90
	stosb
91
	test	al,al
92
	jnz	@b
93
 
94
	mov	esi,[lpParams]
95
    @@: lodsb
96
	stosb
97
	test	al,al
98
	jnz	@b
99
 
100
	mov	esi,[lpIcon]
101
    @@: lodsb
102
	stosb
103
	test	al,al
104
	jnz	@b
105
 
106
	mov	eax,[x]
107
	mov	ebx,[y]
108
	shl	eax,16
109
	mov	ax,bx
110
	mov	dword[edi],eax
111
 
112
	stdcall FillIconsOffs
113
 
114
	pop	esi edi ebx
115
	ret
116
endp
117
 
118
proc EditIcon stdcall,NumIcon,lpIcon,lpName,lpExeFile,lpParams
119
	push	edi
120
	mov	eax,[NumIcon]
121
	mov	edi,[IconsOffs+eax*4]
122
	xor	al,al
123
	or	ecx,-1
124
	repne	scasb
125
	repne	scasb
126
	repne	scasb
127
	repne	scasb
128
	push	dword[edi]
129
	stdcall DelIcon,[NumIcon]
130
	pop	edx
131
	xor	eax,eax
132
	mov	ax,dx
133
	shr	edx,16
134
	stdcall AddIcon,edx,eax,DAreaIcon,DAreaName,DAreaPath,DAreaParams
135
	pop	edi
136
	ret
137
endp
138
 
139
proc SetPosition stdcall,NumIcon,x,y
140
	push	edi
141
	mov	eax,[NumIcon]
142
	mov	edi,[IconsOffs+eax*4]
143
	xor	al,al
144
	or	ecx,-1
145
	repne	scasb
146
	repne	scasb
147
	repne	scasb
148
	repne	scasb
149
	mov	eax,[x]
150
	shl	eax,16
151
	mov	ax,word[y]
152
	mov	dword[edi],eax
153
	pop	edi
154
	ret
155
endp
156
 
157
proc GetNumIcon stdcall,x,y,NumIconI  ;номер иконки, который проверять не надо или -1
158
local posX:WORD,\
159
      posY:WORD
160
	push	ebx edi
161
	mov	ecx,[MaxNumIcon]
162
	test	ecx,ecx
163
	jnz	@f
164
	or	eax,-1
165
	pop	edi ebx
166
	ret
167
     @@:
168
 
169
	mov	ebx,ecx
170
	dec	ebx
171
   .TestIcon:
172
	cmp	dword[NumIconI],-1
173
	je	@f
174
 
175
	cmp	ebx,[NumIconI]
176
	jne	@f
177
	dec	ebx
178
	dec	ecx
179
	test	ecx,ecx
180
	jz	.NoIcon
181
     @@:
182
 
183
	push	ecx
184
 
185
	or	ecx,-1
186
	xor	al,al
187
	mov	edi,[IconsOffs+ebx*4]
188
	repne	scasb
189
	repne	scasb
190
	repne	scasb
191
	repne	scasb
192
 
193
	mov	ax,[edi+2]
194
	test	ax,8000h
195
	jz	@f
196
	add	ax,[wsXe]
197
	jmp	.gni1
198
      @@:
199
	add	ax,[wsX]
200
     .gni1:
201
	mov	[posX],ax
202
 
203
	mov	ax,[edi]
204
	test	ax,8000h
205
	jz	@f
206
	add	ax,[wsYe]
207
	jmp	.gni2
208
      @@:
209
	add	ax,[wsY]
210
     .gni2:
211
 
212
	mov	[posY],ax
213
 
214
	mov	eax,[x]
215
	mov	edx,[y]
216
 
217
	cmp	ax,[posX]
218
	jb	@f
219
	add	word[posX],ICON_SIZE
220
	cmp	ax,[posX]
221
	ja	@f
222
 
223
	cmp	dx,[posY]
224
	jb	@f
225
	add	word[posY],ICON_SIZE
226
	cmp	dx,[posY]
227
	ja	@f
228
 
229
	jmp	.OkIcon
230
     @@:
231
 
232
	dec	ebx
233
	pop	ecx
234
 
235
	;loop    .TestIcon
236
	dec	ecx
237
	jnz	.TestIcon
238
	jmp	.NoIcon
239
   .OkIcon:
240
	mov	eax,ebx
241
	pop	edi ebx
242
	ret
243
   .NoIcon:
244
	or	eax,-1
245
	pop	edi ebx
246
	ret
247
endp
248
 
249
proc DelIcon stdcall,NumIcon
250
	push	ebx edi esi
251
 
252
	cmp	[MaxNumIcon],0
253
	je	.end
254
 
255
	cmp	[MaxNumIcon],1
256
	je	.OhneIco
257
 
258
	mov	ebx,[NumIcon]
259
 
260
	mov	eax,[MaxNumIcon]
261
	dec	eax
262
	mov	[MaxNumIcon],eax
263
	cmp	ebx,eax
264
	je	@f
265
 
266
	shl	ebx,2
267
 
268
	mov	ecx,dword[BegData]
269
	add	ecx,dword[SizeData]
270
	sub	ecx,[IconsOffs+4+ebx]
271
 
272
	mov	edx,[IconsOffs+4+ebx]
273
	sub	edx,[IconsOffs+ebx]
274
	sub	dword[SizeData],edx
275
 
276
	mov	esi,[IconsOffs+4+ebx]
277
	mov	edi,[IconsOffs+ebx]
278
	rep	movsb
279
	jmp	.endDel
280
 
281
     @@:
282
	mov	ecx,dword[BegData]
283
	add	ecx,dword[SizeData]
284
	sub	ecx,[IconsOffs+ebx*4]
285
	sub	dword[SizeData],ecx
286
 
287
  .endDel:
288
	stdcall FillIconsOffs
289
	jmp	.end
290
 
291
.OhneIco:
292
	mov	edi,[BegData]
293
	mov	[SizeData],0
294
	mov	dword[edi],0
295
	mov	[MaxNumIcon],0
296
	mov	dword[IconsOffs],0
297
   .end:
298
	mcall	15,3
299
	pop	esi edi ebx
300
	ret
301
endp