Rev 1635 | Rev 2439 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1635 | Rev 2434 | ||
---|---|---|---|
Line 3... | Line 3... | ||
3 | ;; Copyright (C) KolibriOS team 2004-2008. All rights reserved. ;; |
3 | ;; Copyright (C) KolibriOS team 2004-2008. All rights reserved. ;; |
4 | ;; Distributed under terms of the GNU General Public License ;; |
4 | ;; Distributed under terms of the GNU General Public License ;; |
5 | ;; ;; |
5 | ;; ;; |
6 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
6 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
Line 7... | Line 7... | ||
7 | 7 | ||
Line 8... | Line 8... | ||
8 | $Revision: 1316 $ |
8 | $Revision: 2434 $ |
9 | 9 | ||
10 | 10 | ||
11 | LOAD_FROM_FILE equ 0 |
11 | LOAD_FROM_FILE equ 0 |
Line 12... | Line 12... | ||
12 | LOAD_FROM_MEM equ 1 |
12 | LOAD_FROM_MEM equ 1 |
13 | LOAD_INDIRECT equ 2 |
13 | LOAD_INDIRECT equ 2 |
14 | LOAD_SYSTEM equ 3 |
14 | LOAD_SYSTEM equ 3 |
15 | 15 | ||
16 | struc BITMAPINFOHEADER { |
16 | struct BITMAPINFOHEADER |
17 | .biSize dd ? ; DWORD |
17 | Size dd ? |
18 | .biWidth dd ? ; LONG |
18 | Width dd ? |
19 | .biHeight dd ? ; LONG |
19 | Height dd ? |
20 | .biPlanes dw ? ; WORD |
20 | Planes dw ? |
21 | .biBitCount dw ? ; WORD |
21 | BitCount dw ? |
22 | .biCompression dd ? ; DWORD |
22 | Compression dd ? |
23 | .biSizeImage dd ? ; DWORD |
23 | SizeImage dd ? |
24 | .biXPelsPerMeter dd ? ; LONG |
24 | XPelsPerMeter dd ? |
25 | .biYPelsPerMeter dd ? ; LONG |
- | |
26 | .biClrUsed dd ? ; DWORD |
- | |
27 | .biClrImportant dd ? ; DWORD |
25 | YPelsPerMeter dd ? |
28 | } |
- | |
29 | - | ||
30 | virtual at 0 |
26 | ClrUsed dd ? |
31 | BI BITMAPINFOHEADER |
27 | ClrImportant dd ? |
32 | end virtual |
28 | ends |
33 | 29 | ;------------------------------------------------------------------------------ |
|
34 | align 4 |
30 | align 4 |
Line 45... | Line 41... | ||
45 | 41 | ||
46 | mov esi, [src] |
42 | mov esi, [src] |
47 | add esi,[esi+18] |
43 | add esi, [esi+18] |
Line 48... | Line 44... | ||
48 | mov eax,esi |
44 | mov eax, esi |
49 | 45 | ||
50 | cmp [esi+BI.biBitCount], 24 |
46 | cmp [esi+BITMAPINFOHEADER.BitCount], 24 |
51 | je .img_24 |
47 | je .img_24 |
52 | cmp [esi+BI.biBitCount], 8 |
48 | cmp [esi+BITMAPINFOHEADER.BitCount], 8 |
53 | je .img_8 |
49 | je .img_8 |
- | 50 | cmp [esi+BITMAPINFOHEADER.BitCount], 4 |
|
54 | cmp [esi+BI.biBitCount], 4 |
51 | je .img_4 |
55 | je .img_4 |
52 | ;-------------------------------------- |
56 | 53 | align 4 |
|
57 | .img_2: |
54 | .img_2: |
58 | add eax, [esi] |
55 | add eax, [esi] |
59 | mov [pQuad],eax |
56 | mov [pQuad], eax |
Line 70... | Line 67... | ||
70 | mov edi, [dst] |
67 | mov edi, [dst] |
71 | add edi, 32*31*4 |
68 | add edi, 32*31*4 |
72 | mov [rBase],edi |
69 | mov [rBase], edi |
Line 73... | Line 70... | ||
73 | 70 | ||
- | 71 | mov esi, [pQuad] |
|
- | 72 | ;-------------------------------------- |
|
74 | mov esi,[pQuad] |
73 | align 4 |
75 | .l21: |
74 | .l21: |
76 | mov ebx, [pBits] |
75 | mov ebx, [pBits] |
77 | mov ebx, [ebx] |
76 | mov ebx, [ebx] |
78 | bswap ebx |
77 | bswap ebx |
79 | mov eax, [pAnd] |
78 | mov eax, [pAnd] |
80 | mov eax, [eax] |
79 | mov eax, [eax] |
81 | bswap eax |
80 | bswap eax |
- | 81 | mov [counter], 32 |
|
- | 82 | ;-------------------------------------- |
|
82 | mov [counter], 32 |
83 | align 4 |
83 | @@: |
84 | @@: |
84 | xor edx, edx |
85 | xor edx, edx |
85 | shl eax,1 |
86 | shl eax, 1 |
86 | setc dl |
87 | setc dl |
Line 105... | Line 106... | ||
105 | sub edi,128 |
106 | sub edi, 128 |
106 | mov [rBase],edi |
107 | mov [rBase], edi |
107 | sub [height],1 |
108 | sub [height], 1 |
108 | jnz .l21 |
109 | jnz .l21 |
109 | ret |
110 | ret |
- | 111 | ;-------------------------------------- |
|
110 | 112 | align 4 |
|
111 | .img_4: |
113 | .img_4: |
112 | add eax, [esi] |
114 | add eax, [esi] |
113 | mov [pQuad],eax |
115 | mov [pQuad], eax |
114 | add eax,64 |
116 | add eax, 64 |
115 | mov [pBits],eax |
117 | mov [pBits], eax |
Line 125... | Line 127... | ||
125 | add edi, 32*31*4 |
127 | add edi, 32*31*4 |
126 | mov [rBase],edi |
128 | mov [rBase], edi |
Line 127... | Line 129... | ||
127 | 129 | ||
128 | mov esi,[pQuad] |
130 | mov esi, [pQuad] |
- | 131 | mov ebx, [pBits] |
|
- | 132 | ;-------------------------------------- |
|
129 | mov ebx, [pBits] |
133 | align 4 |
130 | .l4: |
134 | .l4: |
131 | mov eax, [pAnd] |
135 | mov eax, [pAnd] |
132 | mov eax, [eax] |
136 | mov eax, [eax] |
133 | bswap eax |
137 | bswap eax |
- | 138 | mov [counter], 16 |
|
- | 139 | ;-------------------------------------- |
|
134 | mov [counter], 16 |
140 | align 4 |
135 | @@: |
141 | @@: |
136 | xor edx, edx |
142 | xor edx, edx |
137 | shl eax,1 |
143 | shl eax, 1 |
138 | setc dl |
144 | setc dl |
Line 170... | Line 176... | ||
170 | sub edi,128 |
176 | sub edi, 128 |
171 | mov [rBase],edi |
177 | mov [rBase], edi |
172 | sub [height],1 |
178 | sub [height], 1 |
173 | jnz .l4 |
179 | jnz .l4 |
174 | ret |
180 | ret |
- | 181 | ;-------------------------------------- |
|
- | 182 | align 4 |
|
175 | .img_8: |
183 | .img_8: |
176 | add eax, [esi] |
184 | add eax, [esi] |
177 | mov [pQuad],eax |
185 | mov [pQuad], eax |
178 | add eax,1024 |
186 | add eax, 1024 |
179 | mov [pBits],eax |
187 | mov [pBits], eax |
Line 189... | Line 197... | ||
189 | add edi, 32*31*4 |
197 | add edi, 32*31*4 |
190 | mov [rBase],edi |
198 | mov [rBase], edi |
Line 191... | Line 199... | ||
191 | 199 | ||
192 | mov esi,[pQuad] |
200 | mov esi, [pQuad] |
- | 201 | mov ebx, [pBits] |
|
- | 202 | ;-------------------------------------- |
|
193 | mov ebx, [pBits] |
203 | align 4 |
194 | .l81: |
204 | .l81: |
195 | mov eax, [pAnd] |
205 | mov eax, [pAnd] |
196 | mov eax, [eax] |
206 | mov eax, [eax] |
197 | bswap eax |
207 | bswap eax |
- | 208 | mov [counter], 32 |
|
- | 209 | ;-------------------------------------- |
|
198 | mov [counter], 32 |
210 | align 4 |
199 | @@: |
211 | @@: |
200 | xor edx, edx |
212 | xor edx, edx |
201 | shl eax,1 |
213 | shl eax, 1 |
202 | setc dl |
214 | setc dl |
Line 219... | Line 231... | ||
219 | sub edi,128 |
231 | sub edi, 128 |
220 | mov [rBase],edi |
232 | mov [rBase], edi |
221 | sub [height],1 |
233 | sub [height], 1 |
222 | jnz .l81 |
234 | jnz .l81 |
223 | ret |
235 | ret |
- | 236 | ;-------------------------------------- |
|
- | 237 | align 4 |
|
224 | .img_24: |
238 | .img_24: |
225 | add eax, [esi] |
239 | add eax, [esi] |
226 | mov [pQuad],eax |
240 | mov [pQuad], eax |
227 | add eax, 0xC00 |
241 | add eax, 0xC00 |
228 | mov [pAnd],eax |
242 | mov [pAnd], eax |
229 | mov eax,[esi+BI.biWidth] |
243 | mov eax, [esi+BITMAPINFOHEADER.Width] |
230 | mov [width],eax |
244 | mov [width], eax |
231 | mov ebx,[esi+BI.biHeight] |
245 | mov ebx, [esi+BITMAPINFOHEADER.Height] |
232 | shr ebx,1 |
246 | shr ebx, 1 |
233 | mov [height],ebx |
247 | mov [height], ebx |
Line 234... | Line 248... | ||
234 | 248 | ||
235 | mov edi, [dst] |
249 | mov edi, [dst] |
236 | add edi, 32*31*4 |
250 | add edi, 32*31*4 |
Line 237... | Line 251... | ||
237 | mov [rBase],edi |
251 | mov [rBase], edi |
238 | 252 | ||
- | 253 | mov esi, [pAnd] |
|
- | 254 | mov ebx, [pQuad] |
|
239 | mov esi,[pAnd] |
255 | ;-------------------------------------- |
240 | mov ebx, [pQuad] |
256 | align 4 |
241 | .row_24: |
257 | .row_24: |
242 | mov eax, [esi] |
258 | mov eax, [esi] |
- | 259 | bswap eax |
|
- | 260 | mov [counter], 32 |
|
243 | bswap eax |
261 | ;-------------------------------------- |
244 | mov [counter], 32 |
262 | align 4 |
245 | @@: |
263 | @@: |
246 | xor edx, edx |
264 | xor edx, edx |
247 | shl eax,1 |
265 | shl eax, 1 |
Line 265... | Line 283... | ||
265 | mov [rBase],edi |
283 | mov [rBase], edi |
266 | sub [height],1 |
284 | sub [height], 1 |
267 | jnz .row_24 |
285 | jnz .row_24 |
268 | ret |
286 | ret |
269 | endp |
287 | endp |
270 | - | ||
- | 288 | ;------------------------------------------------------------------------------ |
|
271 | align 4 |
289 | align 4 |
272 | proc set_cursor stdcall, hcursor:dword |
290 | proc set_cursor stdcall, hcursor:dword |
273 | mov eax, [hcursor] |
291 | mov eax, [hcursor] |
274 | cmp [eax+CURSOR.magic], 'CURS' |
292 | cmp [eax+CURSOR.magic], 'CURS' |
275 | jne .fail |
293 | jne .fail |
276 | ; cmp [eax+CURSOR.size], CURSOR_SIZE |
294 | ; cmp [eax+CURSOR.size], CURSOR_SIZE |
277 | ; jne .fail |
295 | ; jne .fail |
278 | mov ebx, [current_slot] |
296 | mov ebx, [current_slot] |
279 | xchg eax, [ebx+APPDATA.cursor] |
297 | xchg eax, [ebx+APPDATA.cursor] |
280 | ret |
298 | ret |
- | 299 | ;-------------------------------------- |
|
- | 300 | align 4 |
|
281 | .fail: |
301 | .fail: |
282 | mov eax, [def_cursor] |
302 | mov eax, [def_cursor] |
283 | mov ebx, [current_slot] |
303 | mov ebx, [current_slot] |
284 | xchg eax, [ebx+APPDATA.cursor] |
304 | xchg eax, [ebx+APPDATA.cursor] |
285 | ret |
305 | ret |
286 | endp |
306 | endp |
- | 307 | ;------------------------------------------------------------------------------ |
|
287 | 308 | align 4 |
|
288 | ; param |
309 | ; param |
289 | ; eax= pid |
310 | ; eax= pid |
290 | ; ebx= src |
311 | ; ebx= src |
291 | ; ecx= flags |
312 | ; ecx= flags |
Line 298... | Line 319... | ||
298 | sub esp, 4 ;space for .hcursor |
319 | sub esp, 4 ;space for .hcursor |
299 | push ecx |
320 | push ecx |
300 | push ebx |
321 | push ebx |
Line 301... | Line 322... | ||
301 | 322 | ||
302 | mov ebx, eax |
323 | mov ebx, eax |
303 | mov eax, CURSOR.sizeof |
324 | mov eax, sizeof.CURSOR |
304 | call create_kernel_object |
325 | call create_kernel_object |
305 | test eax, eax |
326 | test eax, eax |
Line 306... | Line 327... | ||
306 | jz .fail |
327 | jz .fail |
Line 330... | Line 351... | ||
330 | mov [edi+CURSOR.hot_x], ecx |
351 | mov [edi+CURSOR.hot_x], ecx |
331 | mov [edi+CURSOR.hot_y], edx |
352 | mov [edi+CURSOR.hot_y], edx |
Line 332... | Line 353... | ||
332 | 353 | ||
Line 333... | Line 354... | ||
333 | stdcall init_cursor, eax, esi |
354 | stdcall init_cursor, eax, esi |
334 | 355 | ||
335 | mov eax, [.hcursor] |
356 | mov ecx, [.hcursor] |
Line 336... | Line 357... | ||
336 | lea eax, [eax+CURSOR.list_next] |
357 | lea ecx, [ecx+CURSOR.list_next] |
337 | lea edx, [_display.cr_list.next] |
358 | lea edx, [_display.cr_list.next] |
338 | - | ||
339 | pushfd |
- | |
340 | cli |
- | |
341 | mov ecx, [edx] |
359 | |
342 | - | ||
343 | mov [eax], ecx |
- | |
344 | mov [eax+4], edx |
- | |
345 | 360 | pushfd |
|
Line 346... | Line 361... | ||
346 | mov [ecx+4], eax |
361 | cli |
- | 362 | list_add ecx, edx ;list_add_tail(new, head) |
|
- | 363 | popfd |
|
347 | mov [edx], eax |
364 | |
348 | popfd |
365 | mov eax, [.hcursor] |
349 | 366 | ;-------------------------------------- |
|
Line 350... | Line 367... | ||
350 | mov eax, [.hcursor] |
367 | align 4 |
351 | .check_hw: |
368 | .check_hw: |
352 | cmp [_display.init_cursor], 0 |
369 | cmp [_display.init_cursor], 0 |
Line 353... | Line 370... | ||
353 | je .fail |
370 | je .fail |
- | 371 | ||
- | 372 | push eax |
|
354 | 373 | call [_display.init_cursor] |
|
355 | push eax |
374 | add esp, 4 |
356 | call [_display.init_cursor] |
375 | |
- | 376 | mov eax, [.hcursor] |
|
- | 377 | ;-------------------------------------- |
|
357 | add esp, 4 |
378 | align 4 |
358 | 379 | .fail: |
|
359 | mov eax, [.hcursor] |
380 | add esp, 12 |
360 | .fail: |
381 | ret |
361 | add esp, 12 |
382 | ;-------------------------------------- |
Line 370... | Line 391... | ||
370 | xchg edi, eax |
391 | xchg edi, eax |
371 | mov ecx, 1024 |
392 | mov ecx, 1024 |
372 | cld |
393 | cld |
373 | rep movsd |
394 | rep movsd |
374 | jmp .check_hw |
395 | jmp .check_hw |
375 | - | ||
- | 396 | ;------------------------------------------------------------------------------ |
|
376 | align 4 |
397 | align 4 |
377 | proc load_cursor stdcall, src:dword, flags:dword |
398 | proc load_cursor stdcall, src:dword, flags:dword |
378 | locals |
399 | locals |
379 | handle dd ? |
400 | handle dd ? |
380 | endl |
401 | endl |
Line 389... | Line 410... | ||
389 | 410 | ||
390 | stdcall load_file, [src] |
411 | stdcall load_file, [src] |
391 | test eax, eax |
412 | test eax, eax |
392 | jz .fail |
413 | jz .fail |
- | 414 | mov [src], eax |
|
- | 415 | ;-------------------------------------- |
|
393 | mov [src], eax |
416 | align 4 |
394 | @@: |
417 | @@: |
395 | push ebx |
418 | push ebx |
396 | push esi |
419 | push esi |
Line 405... | Line 428... | ||
405 | mov [handle], eax |
428 | mov [handle], eax |
Line 406... | Line 429... | ||
406 | 429 | ||
407 | cmp word [flags], LOAD_FROM_FILE |
430 | cmp word [flags], LOAD_FROM_FILE |
408 | jne .exit |
431 | jne .exit |
- | 432 | stdcall kernel_free, [src] |
|
- | 433 | ;-------------------------------------- |
|
409 | stdcall kernel_free, [src] |
434 | align 4 |
410 | .exit: |
435 | .exit: |
411 | pop edi |
436 | pop edi |
412 | pop esi |
437 | pop esi |
- | 438 | pop ebx |
|
- | 439 | ;-------------------------------------- |
|
413 | pop ebx |
440 | align 4 |
414 | .fail: |
441 | .fail: |
- | 442 | mov eax, [handle] |
|
- | 443 | ;-------------------------------------- |
|
415 | mov eax, [handle] |
444 | align 4 |
416 | .fail2: |
445 | .fail2: |
417 | ret |
446 | ret |
418 | endp |
- | |
- | 447 | endp |
|
419 | 448 | ;------------------------------------------------------------------------------ |
|
420 | align 4 |
449 | align 4 |
421 | proc delete_cursor stdcall, hcursor:dword |
450 | proc delete_cursor stdcall, hcursor:dword |
422 | locals |
451 | locals |
423 | hsrv dd ? |
452 | hsrv dd ? |
Line 441... | Line 470... | ||
441 | mov ebx, [current_slot] |
470 | mov ebx, [current_slot] |
442 | cmp esi, [ebx+APPDATA.cursor] |
471 | cmp esi, [ebx+APPDATA.cursor] |
443 | jne @F |
472 | jne @F |
444 | mov eax, [def_cursor] |
473 | mov eax, [def_cursor] |
445 | mov [ebx+APPDATA.cursor], eax |
474 | mov [ebx+APPDATA.cursor], eax |
- | 475 | ;-------------------------------------- |
|
- | 476 | align 4 |
|
446 | @@: |
477 | @@: |
447 | mov eax, [hcursor] |
478 | mov eax, [hcursor] |
448 | call [eax+APPOBJ.destroy] |
479 | call [eax+APPOBJ.destroy] |
- | 480 | ;-------------------------------------- |
|
- | 481 | align 4 |
|
449 | .fail: |
482 | .fail: |
450 | ret |
483 | ret |
451 | endp |
484 | endp |
- | 485 | ;------------------------------------------------------------------------------ |
|
452 | 486 | align 4 |
|
453 | ; param |
487 | ; param |
454 | ; eax= cursor |
488 | ; eax= cursor |
455 | - | ||
456 | align 4 |
- | |
457 | destroy_cursor: |
489 | destroy_cursor: |
Line 458... | Line 490... | ||
458 | 490 | ||
459 | push eax |
491 | push eax |
460 | stdcall kernel_free, [eax+CURSOR.base] |
- | |
Line -... | Line 492... | ||
- | 492 | stdcall kernel_free, [eax+CURSOR.base] |
|
- | 493 | ||
- | 494 | mov eax, [esp] |
|
- | 495 | lea eax, [eax+CURSOR.list_next] |
|
- | 496 | ||
- | 497 | pushfd |
|
- | 498 | cli |
|
- | 499 | list_del eax |
|
- | 500 | popfd |
|
461 | pop eax |
501 | |
462 | 502 | pop eax |
|
463 | call destroy_kernel_object |
- | |
- | 503 | call destroy_kernel_object |
|
464 | ret |
504 | ret |
465 | 505 | ;------------------------------------------------------------------------------ |
|
466 | align 4 |
506 | align 4 |
467 | select_cursor: |
507 | select_cursor: |
468 | mov eax, [esp+4] |
508 | mov eax, [esp+4] |
469 | mov [_display.cursor], eax |
- | |
- | 509 | mov [_display.cursor], eax |
|
470 | ret 4 |
510 | ret 4 |
471 | 511 | ;------------------------------------------------------------------------------ |
|
Line 472... | Line 512... | ||
472 | align 4 |
512 | align 4 |
Line 484... | Line 524... | ||
484 | 524 | ||
485 | mov esi, cur_saved_data |
525 | mov esi, cur_saved_data |
486 | mov ecx, [cur.w] |
526 | mov ecx, [cur.w] |
487 | lea ecx, [ecx+ecx*2] |
527 | lea ecx, [ecx+ecx*2] |
- | 528 | push ecx |
|
- | 529 | ;-------------------------------------- |
|
488 | push ecx |
530 | align 4 |
489 | @@: |
531 | @@: |
490 | mov edi, ebx |
532 | mov edi, ebx |
Line 491... | Line 533... | ||
491 | add ebx, [BytesPerScanLine] |
533 | add ebx, [BytesPerScanLine] |
Line 496... | Line 538... | ||
496 | jnz @B |
538 | jnz @B |
Line 497... | Line 539... | ||
497 | 539 | ||
498 | pop ecx |
540 | pop ecx |
499 | pop edi |
541 | pop edi |
- | 542 | pop esi |
|
- | 543 | ;-------------------------------------- |
|
500 | pop esi |
544 | align 4 |
501 | .ret: |
545 | .ret: |
502 | pop ebx |
546 | pop ebx |
503 | ret |
547 | ret |
504 | endp |
- | |
- | 548 | endp |
|
505 | 549 | ;------------------------------------------------------------------------------ |
|
506 | align 4 |
550 | align 4 |
Line 507... | Line 551... | ||
507 | proc restore_32 stdcall, x:dword, y:dword |
551 | proc restore_32 stdcall, x:dword, y:dword |
Line 515... | Line 559... | ||
515 | 559 | ||
516 | push esi |
560 | push esi |
Line 517... | Line 561... | ||
517 | push edi |
561 | push edi |
- | 562 | ||
- | 563 | mov esi, cur_saved_data |
|
518 | 564 | ;-------------------------------------- |
|
519 | mov esi, cur_saved_data |
565 | align 4 |
520 | @@: |
566 | @@: |
Line 521... | Line 567... | ||
521 | mov edi, ebx |
567 | mov edi, ebx |
522 | add ebx, [BytesPerScanLine] |
568 | add ebx, [BytesPerScanLine] |
523 | 569 | ||
524 | mov ecx, [cur.w] |
570 | mov ecx, [cur.w] |
Line 525... | Line 571... | ||
525 | rep movsd |
571 | rep movsd |
- | 572 | dec edx |
|
- | 573 | jnz @B |
|
526 | dec edx |
574 | |
527 | jnz @B |
575 | pop edi |
528 | 576 | ;-------------------------------------- |
|
529 | pop edi |
577 | align 4 |
530 | .ret: |
578 | .ret: |
531 | pop esi |
- | |
- | 579 | pop esi |
|
532 | pop ebx |
580 | pop ebx |
533 | ret |
581 | ret |
534 | endp |
582 | endp |
535 | 583 | ;------------------------------------------------------------------------------ |
|
536 | align 4 |
584 | align 4 |
Line 576... | Line 624... | ||
576 | mov [cur_saved_base],edx |
624 | mov [cur_saved_base], edx |
Line 577... | Line 625... | ||
577 | 625 | ||
578 | cmp ebx, [Screen_Max_X] |
626 | cmp ebx, [Screen_Max_X] |
579 | jbe @F |
627 | jbe @F |
- | 628 | mov ebx, [Screen_Max_X] |
|
- | 629 | ;-------------------------------------- |
|
580 | mov ebx, [Screen_Max_X] |
630 | align 4 |
581 | @@: |
631 | @@: |
582 | cmp edi, [Screen_Max_Y] |
632 | cmp edi, [Screen_Max_Y] |
583 | jbe @F |
633 | jbe @F |
- | 634 | mov edi, [Screen_Max_Y] |
|
- | 635 | ;-------------------------------------- |
|
584 | mov edi, [Screen_Max_Y] |
636 | align 4 |
585 | @@: |
637 | @@: |
586 | mov [cur.right], ebx |
638 | mov [cur.right], ebx |
Line 587... | Line 639... | ||
587 | mov [cur.bottom], edi |
639 | mov [cur.bottom], edi |
Line 595... | Line 647... | ||
595 | mov [cur.h], edi |
647 | mov [cur.h], edi |
596 | mov [h], edi |
648 | mov [h], edi |
Line 597... | Line 649... | ||
597 | 649 | ||
598 | mov eax, edi |
650 | mov eax, edi |
- | 651 | mov edi, cur_saved_data |
|
- | 652 | ;-------------------------------------- |
|
599 | mov edi, cur_saved_data |
653 | align 4 |
600 | @@: |
654 | @@: |
601 | mov esi, edx |
655 | mov esi, edx |
602 | add edx, [BytesPerScanLine] |
656 | add edx, [BytesPerScanLine] |
603 | mov ecx, [cur.w] |
657 | mov ecx, [cur.w] |
Line 613... | Line 667... | ||
613 | add eax, [_dx] |
667 | add eax, [_dx] |
Line 614... | Line 668... | ||
614 | 668 | ||
615 | mov esi, [hcursor] |
669 | mov esi, [hcursor] |
616 | mov esi, [esi+CURSOR.base] |
670 | mov esi, [esi+CURSOR.base] |
- | 671 | lea edx, [esi+eax*4] |
|
- | 672 | ;-------------------------------------- |
|
617 | lea edx, [esi+eax*4] |
673 | align 4 |
618 | .row: |
674 | .row: |
619 | mov ecx, [cur.w] |
675 | mov ecx, [cur.w] |
620 | mov esi, edx |
676 | mov esi, edx |
621 | mov edi, ebx |
677 | mov edi, ebx |
622 | add edx, 32*4 |
678 | add edx, 32*4 |
- | 679 | add ebx, [BytesPerScanLine] |
|
- | 680 | ;-------------------------------------- |
|
623 | add ebx, [BytesPerScanLine] |
681 | align 4 |
624 | .pix: |
682 | .pix: |
625 | lodsd |
683 | lodsd |
626 | test eax, 0xFF000000 |
684 | test eax, 0xFF000000 |
627 | jz @F |
685 | jz @F |
628 | mov [edi], ax |
686 | mov [edi], ax |
629 | shr eax, 16 |
687 | shr eax, 16 |
- | 688 | mov [edi+2], al |
|
- | 689 | ;-------------------------------------- |
|
630 | mov [edi+2],al |
690 | align 4 |
631 | @@: |
691 | @@: |
632 | add edi, 3 |
692 | add edi, 3 |
633 | dec ecx |
693 | dec ecx |
Line 634... | Line 694... | ||
634 | jnz .pix |
694 | jnz .pix |
635 | 695 | ||
636 | dec [h] |
696 | dec [h] |
637 | jnz .row |
697 | jnz .row |
638 | ret |
- | |
639 | endp |
- | |
- | 698 | ret |
|
640 | 699 | endp |
|
641 | 700 | ;------------------------------------------------------------------------------ |
|
642 | align 4 |
701 | align 4 |
643 | proc move_cursor_32 stdcall, hcursor:dword, x:dword, y:dword |
702 | proc move_cursor_32 stdcall, hcursor:dword, x:dword, y:dword |
644 | locals |
703 | locals |
Line 680... | Line 739... | ||
680 | mov [cur_saved_base],edx |
739 | mov [cur_saved_base], edx |
Line 681... | Line 740... | ||
681 | 740 | ||
682 | cmp ebx, [Screen_Max_X] |
741 | cmp ebx, [Screen_Max_X] |
683 | jbe @F |
742 | jbe @F |
- | 743 | mov ebx, [Screen_Max_X] |
|
- | 744 | ;-------------------------------------- |
|
684 | mov ebx, [Screen_Max_X] |
745 | align 4 |
685 | @@: |
746 | @@: |
686 | cmp edi, [Screen_Max_Y] |
747 | cmp edi, [Screen_Max_Y] |
687 | jbe @F |
748 | jbe @F |
- | 749 | mov edi, [Screen_Max_Y] |
|
- | 750 | ;-------------------------------------- |
|
688 | mov edi, [Screen_Max_Y] |
751 | align 4 |
689 | @@: |
752 | @@: |
690 | mov [cur.right], ebx |
753 | mov [cur.right], ebx |
Line 691... | Line 754... | ||
691 | mov [cur.bottom], edi |
754 | mov [cur.bottom], edi |
Line 699... | Line 762... | ||
699 | mov [cur.h], edi |
762 | mov [cur.h], edi |
700 | mov [h], edi |
763 | mov [h], edi |
Line 701... | Line 764... | ||
701 | 764 | ||
702 | mov eax, edi |
765 | mov eax, edi |
- | 766 | mov edi, cur_saved_data |
|
- | 767 | ;-------------------------------------- |
|
703 | mov edi, cur_saved_data |
768 | align 4 |
704 | @@: |
769 | @@: |
705 | mov esi, edx |
770 | mov esi, edx |
706 | add edx, [BytesPerScanLine] |
771 | add edx, [BytesPerScanLine] |
707 | mov ecx, [cur.w] |
772 | mov ecx, [cur.w] |
Line 716... | Line 781... | ||
716 | add eax, [_dx] |
781 | add eax, [_dx] |
Line 717... | Line 782... | ||
717 | 782 | ||
718 | mov esi, [hcursor] |
783 | mov esi, [hcursor] |
719 | mov esi, [esi+CURSOR.base] |
784 | mov esi, [esi+CURSOR.base] |
- | 785 | lea edx, [esi+eax*4] |
|
- | 786 | ;-------------------------------------- |
|
720 | lea edx, [esi+eax*4] |
787 | align 4 |
721 | .row: |
788 | .row: |
722 | mov ecx, [cur.w] |
789 | mov ecx, [cur.w] |
723 | mov esi, edx |
790 | mov esi, edx |
724 | mov edi, ebx |
791 | mov edi, ebx |
725 | add edx, 32*4 |
792 | add edx, 32*4 |
- | 793 | add ebx, [BytesPerScanLine] |
|
- | 794 | ;-------------------------------------- |
|
726 | add ebx, [BytesPerScanLine] |
795 | align 4 |
727 | .pix: |
796 | .pix: |
728 | lodsd |
797 | lodsd |
729 | test eax, 0xFF000000 |
798 | test eax, 0xFF000000 |
730 | jz @F |
799 | jz @F |
- | 800 | mov [edi], eax |
|
- | 801 | ;-------------------------------------- |
|
731 | mov [edi], eax |
802 | align 4 |
732 | @@: |
803 | @@: |
733 | add edi, 4 |
804 | add edi, 4 |
734 | dec ecx |
805 | dec ecx |
Line 735... | Line 806... | ||
735 | jnz .pix |
806 | jnz .pix |
736 | 807 | ||
737 | dec [h] |
808 | dec [h] |
738 | jnz .row |
809 | jnz .row |
- | 810 | ret |
|
- | 811 | endp |
|
- | 812 | ;------------------------------------------------------------------------------ |
|
- | 813 | align 4 |
|
- | 814 | check_mouse_area_for_getpixel_new: |
|
- | 815 | ; in: |
|
- | 816 | ; eax = x |
|
- | 817 | ; ebx = y |
|
- | 818 | ; out: |
|
- | 819 | ; ecx = new color |
|
- | 820 | ;-------------------------------------- |
|
- | 821 | ; check for Y |
|
- | 822 | cmp bx, [Y_UNDER_subtraction_CUR_hot_y] |
|
- | 823 | jb .no_mouse_area |
|
- | 824 | ||
- | 825 | cmp bx, [Y_UNDER_sub_CUR_hot_y_add_curh] |
|
- | 826 | jae .no_mouse_area |
|
- | 827 | ;-------------------------------------- |
|
- | 828 | ; check for X |
|
- | 829 | cmp ax, [X_UNDER_subtraction_CUR_hot_x] |
|
- | 830 | jb .no_mouse_area |
|
- | 831 | ||
- | 832 | cmp ax, [X_UNDER_sub_CUR_hot_x_add_curh] |
|
- | 833 | jae .no_mouse_area |
|
- | 834 | ;-------------------------------------- |
|
- | 835 | push eax ebx |
|
- | 836 | ; offset X |
|
- | 837 | mov ecx, [X_UNDER_subtraction_CUR_hot_x] |
|
- | 838 | sub eax, ecx ; x1 |
|
- | 839 | ; offset Y |
|
- | 840 | mov ecx, [Y_UNDER_subtraction_CUR_hot_y] |
|
- | 841 | sub ebx, ecx ; y1 |
|
- | 842 | ;-------------------------------------- |
|
- | 843 | ; ebx = offset y |
|
- | 844 | ; eax = offset x |
|
- | 845 | imul ebx, [cur.w] ;y |
|
- | 846 | add eax, ebx |
|
- | 847 | mov ebx, eax |
|
- | 848 | shl eax, 2 |
|
- | 849 | cmp [ScreenBPP], byte 32 |
|
- | 850 | je @f |
|
- | 851 | sub eax, ebx |
|
- | 852 | ;-------------------------------------- |
|
- | 853 | align 4 |
|
- | 854 | @@: |
|
- | 855 | add eax, cur_saved_data |
|
- | 856 | mov ecx, [eax] |
|
- | 857 | and ecx, 0xffffff |
|
- | 858 | add ecx, 0xff000000 |
|
- | 859 | pop ebx eax |
|
- | 860 | ret |
|
- | 861 | ;-------------------------------------- |
|
- | 862 | align 4 |
|
- | 863 | .no_mouse_area: |
|
- | 864 | xor ecx, ecx |
|
- | 865 | ret |
|
- | 866 | ;----------------------------------------------------------------------------- |
|
- | 867 | align 4 |
|
- | 868 | check_mouse_area_for_putpixel_new: |
|
- | 869 | ; in: |
|
- | 870 | ; ecx = x shl 16 + y |
|
- | 871 | ; eax = color |
|
- | 872 | ; out: |
|
- | 873 | ; eax = new color |
|
- | 874 | ;-------------------------------------- |
|
- | 875 | ; check for Y |
|
- | 876 | cmp cx, [Y_UNDER_subtraction_CUR_hot_y] |
|
- | 877 | jb .no_mouse_area |
|
- | 878 | ||
- | 879 | cmp cx, [Y_UNDER_sub_CUR_hot_y_add_curh] |
|
- | 880 | jae .no_mouse_area |
|
- | 881 | ||
- | 882 | rol ecx, 16 |
|
- | 883 | ;-------------------------------------- |
|
- | 884 | ; check for X |
|
- | 885 | cmp cx, [X_UNDER_subtraction_CUR_hot_x] |
|
- | 886 | jb .no_mouse_area |
|
- | 887 | ||
- | 888 | cmp cx, [X_UNDER_sub_CUR_hot_x_add_curh] |
|
- | 889 | jae .no_mouse_area |
|
- | 890 | ;-------------------------------------- |
|
- | 891 | align 4 |
|
- | 892 | .1: |
|
- | 893 | push eax |
|
- | 894 | ; offset X |
|
- | 895 | mov ax, [X_UNDER_subtraction_CUR_hot_x] |
|
- | 896 | sub cx, ax ; x1 |
|
- | 897 | ror ecx, 16 |
|
- | 898 | ; offset Y |
|
- | 899 | mov ax, [Y_UNDER_subtraction_CUR_hot_y] |
|
- | 900 | sub cx, ax ; y1 |
|
- | 901 | ;-------------------------------------- |
|
- | 902 | ; ecx = (offset x) shl 16 + (offset y) |
|
- | 903 | push ebx |
|
- | 904 | mov ebx, ecx |
|
- | 905 | shr ebx, 16 ; x |
|
- | 906 | and ecx, 0xffff ; y |
|
- | 907 | ; ecx = offset y |
|
- | 908 | ; ebx = offset x |
|
- | 909 | mov eax, [esp + 4] |
|
- | 910 | ||
- | 911 | push ebx ecx |
|
- | 912 | imul ecx, [cur.w] ;y |
|
- | 913 | add ecx, ebx |
|
- | 914 | mov ebx, ecx |
|
- | 915 | shl ecx, 2 |
|
- | 916 | cmp [ScreenBPP], byte 24 |
|
- | 917 | je .24 |
|
- | 918 | and eax, 0xFFFFFF |
|
- | 919 | mov [ecx + cur_saved_data], eax ;store new color to |
|
- | 920 | jmp @f |
|
- | 921 | ;-------------------------------------- |
|
- | 922 | align 4 |
|
- | 923 | .24: |
|
- | 924 | sub ecx, ebx |
|
- | 925 | mov [ecx + cur_saved_data], ax ;store new color to |
|
- | 926 | shr eax, 16 |
|
- | 927 | mov [ecx + cur_saved_data + 2], al ;store new color to |
|
- | 928 | ;-------------------------------------- |
|
- | 929 | align 4 |
|
Line -... | Line 930... | ||
- | 930 | @@: |
|
- | 931 | pop ecx ebx |
|
Line -... | Line 932... | ||
- | 932 | ||
- | 933 | shl ecx, 5 |
|
- | 934 | add ecx, ebx |
|
- | 935 | ||
- | 936 | mov eax, [current_cursor] |
|
- | 937 | mov eax, [eax+CURSOR.base] |
|
- | 938 | lea eax, [eax+ecx*4] |
|
- | 939 | mov eax, [eax] |
|
- | 940 | ||
- | 941 | pop ebx |
|
- | 942 | ||
- | 943 | test eax, 0xFF000000 |
|
- | 944 | jz @f |
|
- | 945 | ||
- | 946 | pop ecx |
|
- | 947 | ret |
|
- | 948 | ;-------------------------------------- |
|
- | 949 | align 4 |
|
- | 950 | @@: |
|
- | 951 | pop eax |
|
- | 952 | ;-------------------------------------- |
|
739 | ret |
953 | align 4 |
740 | endp |
954 | .no_mouse_area: |
741 | 955 | ret |
|
742 | 956 | ;------------------------------------------------------------------------------ |
|
743 | align 4 |
- | |
- | 957 | align 4 |
|
744 | get_display: |
958 | get_display: |
745 | mov eax, _display |
959 | mov eax, _display |
746 | ret |
- | |
747 | 960 | ret |
|
748 | align 4 |
961 | ;------------------------------------------------------------------------------ |
Line 749... | Line 962... | ||
749 | init_display: |
962 | align 4 |
750 | 963 | init_display: |
|
Line 764... | Line 977... | ||
764 | cmp [SCR_MODE],word 0x13 |
977 | cmp [SCR_MODE], word 0x13 |
765 | jbe .fail |
978 | jbe .fail |
Line 766... | Line 979... | ||
766 | 979 | ||
767 | test word [SCR_MODE], 0x4000 |
980 | test word [SCR_MODE], 0x4000 |
- | 981 | jz .fail |
|
Line 768... | Line 982... | ||
768 | jz .fail |
982 | ; jmp .fail |
769 | 983 | ||
770 | mov ebx, restore_32 |
984 | mov ebx, restore_32 |
771 | mov ecx, move_cursor_32 |
985 | mov ecx, move_cursor_32 |
Line 775... | Line 989... | ||
775 | 989 | ||
776 | mov ebx, restore_24 |
990 | mov ebx, restore_24 |
777 | mov ecx, move_cursor_24 |
991 | mov ecx, move_cursor_24 |
778 | cmp eax, 24 |
992 | cmp eax, 24 |
- | 993 | jne .fail |
|
- | 994 | ;-------------------------------------- |
|
779 | jne .fail |
995 | align 4 |
780 | @@: |
996 | @@: |
781 | mov [_display.select_cursor], select_cursor |
997 | mov [_display.select_cursor], select_cursor |
782 | mov [_display.move_cursor], ecx |
998 | mov [_display.move_cursor], ecx |
- | 999 | mov [_display.restore_cursor], ebx |
|
- | 1000 | mov [_display.check_mouse], check_mouse_area_for_putpixel_new |
|
Line 783... | Line 1001... | ||
783 | mov [_display.restore_cursor], ebx |
1001 | mov [_display.check_m_pixel], check_mouse_area_for_getpixel_new |
784 | 1002 | ||
785 | stdcall load_cursor, def_arrow, dword LOAD_FROM_MEM |
1003 | stdcall load_cursor, def_arrow, dword LOAD_FROM_MEM |
- | 1004 | mov [def_cursor], eax |
|
- | 1005 | ret |
|
786 | mov [def_cursor], eax |
1006 | ;-------------------------------------- |
787 | ret |
1007 | align 4 |
788 | .fail: |
1008 | .fail: |
789 | xor eax, eax |
1009 | xor eax, eax |
790 | mov [_display.select_cursor], eax |
1010 | mov [_display.select_cursor], eax |
791 | mov [_display.move_cursor], eax |
- | |
792 | ret |
- | |
793 | - | ||
794 | - | ||
795 | - | ||
796 | - | ||
797 | - | ||
798 | - | ||
799 | - | ||
800 | - | ||
- | 1011 | mov [_display.move_cursor], eax |
|
801 | 1012 | ret |
|
802 | 1013 | ;------------------------------------------------------------------------------ |
|
803 | align 4 |
1014 | align 4 |
- | 1015 | def_arrow: |