Rev 2384 | Rev 2436 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2384 | Rev 2430 | ||
---|---|---|---|
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: 2384 $ |
8 | $Revision: 2430 $ |
9 | 9 | ||
10 | 10 | ||
Line 24... | Line 24... | ||
24 | XPelsPerMeter dd ? |
24 | XPelsPerMeter dd ? |
25 | YPelsPerMeter dd ? |
25 | YPelsPerMeter dd ? |
26 | ClrUsed dd ? |
26 | ClrUsed dd ? |
27 | ClrImportant dd ? |
27 | ClrImportant dd ? |
28 | ends |
28 | ends |
29 | - | ||
- | 29 | ;------------------------------------------------------------------------------ |
|
30 | align 4 |
30 | align 4 |
31 | proc init_cursor stdcall, dst:dword, src:dword |
31 | proc init_cursor stdcall, dst:dword, src:dword |
32 | locals |
32 | locals |
33 | rBase dd ? |
33 | rBase dd ? |
34 | pQuad dd ? |
34 | pQuad dd ? |
Line 47... | Line 47... | ||
47 | je .img_24 |
47 | je .img_24 |
48 | cmp [esi+BITMAPINFOHEADER.BitCount], 8 |
48 | cmp [esi+BITMAPINFOHEADER.BitCount], 8 |
49 | je .img_8 |
49 | je .img_8 |
50 | cmp [esi+BITMAPINFOHEADER.BitCount], 4 |
50 | cmp [esi+BITMAPINFOHEADER.BitCount], 4 |
51 | je .img_4 |
51 | je .img_4 |
- | 52 | ;-------------------------------------- |
|
52 | 53 | align 4 |
|
53 | .img_2: |
54 | .img_2: |
54 | add eax, [esi] |
55 | add eax, [esi] |
55 | mov [pQuad], eax |
56 | mov [pQuad], eax |
56 | add eax, 8 |
57 | add eax, 8 |
57 | mov [pBits], eax |
58 | mov [pBits], eax |
Line 66... | Line 67... | ||
66 | mov edi, [dst] |
67 | mov edi, [dst] |
67 | add edi, 32*31*4 |
68 | add edi, 32*31*4 |
68 | mov [rBase], edi |
69 | mov [rBase], edi |
Line 69... | Line 70... | ||
69 | 70 | ||
- | 71 | mov esi, [pQuad] |
|
- | 72 | ;-------------------------------------- |
|
70 | mov esi, [pQuad] |
73 | align 4 |
71 | .l21: |
74 | .l21: |
72 | mov ebx, [pBits] |
75 | mov ebx, [pBits] |
73 | mov ebx, [ebx] |
76 | mov ebx, [ebx] |
74 | bswap ebx |
77 | bswap ebx |
75 | mov eax, [pAnd] |
78 | mov eax, [pAnd] |
76 | mov eax, [eax] |
79 | mov eax, [eax] |
77 | bswap eax |
80 | bswap eax |
- | 81 | mov [counter], 32 |
|
- | 82 | ;-------------------------------------- |
|
78 | mov [counter], 32 |
83 | align 4 |
79 | @@: |
84 | @@: |
80 | xor edx, edx |
85 | xor edx, edx |
81 | shl eax, 1 |
86 | shl eax, 1 |
82 | setc dl |
87 | setc dl |
Line 101... | Line 106... | ||
101 | sub edi, 128 |
106 | sub edi, 128 |
102 | mov [rBase], edi |
107 | mov [rBase], edi |
103 | sub [height], 1 |
108 | sub [height], 1 |
104 | jnz .l21 |
109 | jnz .l21 |
105 | ret |
110 | ret |
- | 111 | ;-------------------------------------- |
|
106 | 112 | align 4 |
|
107 | .img_4: |
113 | .img_4: |
108 | add eax, [esi] |
114 | add eax, [esi] |
109 | mov [pQuad], eax |
115 | mov [pQuad], eax |
110 | add eax, 64 |
116 | add eax, 64 |
111 | mov [pBits], eax |
117 | mov [pBits], eax |
Line 121... | Line 127... | ||
121 | add edi, 32*31*4 |
127 | add edi, 32*31*4 |
122 | mov [rBase], edi |
128 | mov [rBase], edi |
Line 123... | Line 129... | ||
123 | 129 | ||
124 | mov esi, [pQuad] |
130 | mov esi, [pQuad] |
- | 131 | mov ebx, [pBits] |
|
- | 132 | ;-------------------------------------- |
|
125 | mov ebx, [pBits] |
133 | align 4 |
126 | .l4: |
134 | .l4: |
127 | mov eax, [pAnd] |
135 | mov eax, [pAnd] |
128 | mov eax, [eax] |
136 | mov eax, [eax] |
129 | bswap eax |
137 | bswap eax |
- | 138 | mov [counter], 16 |
|
- | 139 | ;-------------------------------------- |
|
130 | mov [counter], 16 |
140 | align 4 |
131 | @@: |
141 | @@: |
132 | xor edx, edx |
142 | xor edx, edx |
133 | shl eax, 1 |
143 | shl eax, 1 |
134 | setc dl |
144 | setc dl |
Line 166... | Line 176... | ||
166 | sub edi, 128 |
176 | sub edi, 128 |
167 | mov [rBase], edi |
177 | mov [rBase], edi |
168 | sub [height], 1 |
178 | sub [height], 1 |
169 | jnz .l4 |
179 | jnz .l4 |
170 | ret |
180 | ret |
- | 181 | ;-------------------------------------- |
|
- | 182 | align 4 |
|
171 | .img_8: |
183 | .img_8: |
172 | add eax, [esi] |
184 | add eax, [esi] |
173 | mov [pQuad], eax |
185 | mov [pQuad], eax |
174 | add eax, 1024 |
186 | add eax, 1024 |
175 | mov [pBits], eax |
187 | mov [pBits], eax |
Line 185... | Line 197... | ||
185 | add edi, 32*31*4 |
197 | add edi, 32*31*4 |
186 | mov [rBase], edi |
198 | mov [rBase], edi |
Line 187... | Line 199... | ||
187 | 199 | ||
188 | mov esi, [pQuad] |
200 | mov esi, [pQuad] |
- | 201 | mov ebx, [pBits] |
|
- | 202 | ;-------------------------------------- |
|
189 | mov ebx, [pBits] |
203 | align 4 |
190 | .l81: |
204 | .l81: |
191 | mov eax, [pAnd] |
205 | mov eax, [pAnd] |
192 | mov eax, [eax] |
206 | mov eax, [eax] |
193 | bswap eax |
207 | bswap eax |
- | 208 | mov [counter], 32 |
|
- | 209 | ;-------------------------------------- |
|
194 | mov [counter], 32 |
210 | align 4 |
195 | @@: |
211 | @@: |
196 | xor edx, edx |
212 | xor edx, edx |
197 | shl eax, 1 |
213 | shl eax, 1 |
198 | setc dl |
214 | setc dl |
Line 215... | Line 231... | ||
215 | sub edi, 128 |
231 | sub edi, 128 |
216 | mov [rBase], edi |
232 | mov [rBase], edi |
217 | sub [height], 1 |
233 | sub [height], 1 |
218 | jnz .l81 |
234 | jnz .l81 |
219 | ret |
235 | ret |
- | 236 | ;-------------------------------------- |
|
- | 237 | align 4 |
|
220 | .img_24: |
238 | .img_24: |
221 | add eax, [esi] |
239 | add eax, [esi] |
222 | mov [pQuad], eax |
240 | mov [pQuad], eax |
223 | add eax, 0xC00 |
241 | add eax, 0xC00 |
224 | mov [pAnd], eax |
242 | mov [pAnd], eax |
Line 232... | Line 250... | ||
232 | add edi, 32*31*4 |
250 | add edi, 32*31*4 |
233 | mov [rBase], edi |
251 | mov [rBase], edi |
Line 234... | Line 252... | ||
234 | 252 | ||
235 | mov esi, [pAnd] |
253 | mov esi, [pAnd] |
- | 254 | mov ebx, [pQuad] |
|
- | 255 | ;-------------------------------------- |
|
236 | mov ebx, [pQuad] |
256 | align 4 |
237 | .row_24: |
257 | .row_24: |
238 | mov eax, [esi] |
258 | mov eax, [esi] |
239 | bswap eax |
259 | bswap eax |
- | 260 | mov [counter], 32 |
|
- | 261 | ;-------------------------------------- |
|
240 | mov [counter], 32 |
262 | align 4 |
241 | @@: |
263 | @@: |
242 | xor edx, edx |
264 | xor edx, edx |
243 | shl eax, 1 |
265 | shl eax, 1 |
244 | setc dl |
266 | setc dl |
Line 261... | Line 283... | ||
261 | mov [rBase], edi |
283 | mov [rBase], edi |
262 | sub [height], 1 |
284 | sub [height], 1 |
263 | jnz .row_24 |
285 | jnz .row_24 |
264 | ret |
286 | ret |
265 | endp |
287 | endp |
266 | - | ||
- | 288 | ;------------------------------------------------------------------------------ |
|
267 | align 4 |
289 | align 4 |
268 | proc set_cursor stdcall, hcursor:dword |
290 | proc set_cursor stdcall, hcursor:dword |
269 | mov eax, [hcursor] |
291 | mov eax, [hcursor] |
270 | cmp [eax+CURSOR.magic], 'CURS' |
292 | cmp [eax+CURSOR.magic], 'CURS' |
271 | jne .fail |
293 | jne .fail |
272 | ; cmp [eax+CURSOR.size], CURSOR_SIZE |
294 | ; cmp [eax+CURSOR.size], CURSOR_SIZE |
273 | ; jne .fail |
295 | ; jne .fail |
274 | mov ebx, [current_slot] |
296 | mov ebx, [current_slot] |
275 | xchg eax, [ebx+APPDATA.cursor] |
297 | xchg eax, [ebx+APPDATA.cursor] |
276 | ret |
298 | ret |
- | 299 | ;-------------------------------------- |
|
- | 300 | align 4 |
|
277 | .fail: |
301 | .fail: |
278 | mov eax, [def_cursor] |
302 | mov eax, [def_cursor] |
279 | mov ebx, [current_slot] |
303 | mov ebx, [current_slot] |
280 | xchg eax, [ebx+APPDATA.cursor] |
304 | xchg eax, [ebx+APPDATA.cursor] |
281 | ret |
305 | ret |
282 | endp |
306 | endp |
- | 307 | ;------------------------------------------------------------------------------ |
|
283 | 308 | align 4 |
|
284 | ; param |
309 | ; param |
285 | ; eax= pid |
310 | ; eax= pid |
286 | ; ebx= src |
311 | ; ebx= src |
287 | ; ecx= flags |
312 | ; ecx= flags |
Line 336... | Line 361... | ||
336 | cli |
361 | cli |
337 | list_add ecx, edx ;list_add_tail(new, head) |
362 | list_add ecx, edx ;list_add_tail(new, head) |
338 | popfd |
363 | popfd |
Line 339... | Line 364... | ||
339 | 364 | ||
- | 365 | mov eax, [.hcursor] |
|
- | 366 | ;-------------------------------------- |
|
340 | mov eax, [.hcursor] |
367 | align 4 |
341 | .check_hw: |
368 | .check_hw: |
342 | cmp [_display.init_cursor], 0 |
369 | cmp [_display.init_cursor], 0 |
Line 343... | Line 370... | ||
343 | je .fail |
370 | je .fail |
344 | 371 | ||
345 | push eax |
372 | push eax |
Line 346... | Line 373... | ||
346 | call [_display.init_cursor] |
373 | call [_display.init_cursor] |
- | 374 | add esp, 4 |
|
- | 375 | ||
347 | add esp, 4 |
376 | mov eax, [.hcursor] |
348 | 377 | ;-------------------------------------- |
|
349 | mov eax, [.hcursor] |
378 | align 4 |
- | 379 | .fail: |
|
- | 380 | add esp, 12 |
|
350 | .fail: |
381 | ret |
351 | add esp, 12 |
382 | ;-------------------------------------- |
352 | ret |
383 | align 4 |
353 | .indirect: |
384 | .indirect: |
354 | shr ebx, 16 |
385 | shr ebx, 16 |
Line 360... | Line 391... | ||
360 | xchg edi, eax |
391 | xchg edi, eax |
361 | mov ecx, 1024 |
392 | mov ecx, 1024 |
362 | cld |
393 | cld |
363 | rep movsd |
394 | rep movsd |
364 | jmp .check_hw |
395 | jmp .check_hw |
365 | - | ||
- | 396 | ;------------------------------------------------------------------------------ |
|
366 | align 4 |
397 | align 4 |
367 | proc load_cursor stdcall, src:dword, flags:dword |
398 | proc load_cursor stdcall, src:dword, flags:dword |
368 | locals |
399 | locals |
369 | handle dd ? |
400 | handle dd ? |
370 | endl |
401 | endl |
Line 379... | Line 410... | ||
379 | 410 | ||
380 | stdcall load_file, [src] |
411 | stdcall load_file, [src] |
381 | test eax, eax |
412 | test eax, eax |
382 | jz .fail |
413 | jz .fail |
- | 414 | mov [src], eax |
|
- | 415 | ;-------------------------------------- |
|
383 | mov [src], eax |
416 | align 4 |
384 | @@: |
417 | @@: |
385 | push ebx |
418 | push ebx |
386 | push esi |
419 | push esi |
Line 395... | Line 428... | ||
395 | mov [handle], eax |
428 | mov [handle], eax |
Line 396... | Line 429... | ||
396 | 429 | ||
397 | cmp word [flags], LOAD_FROM_FILE |
430 | cmp word [flags], LOAD_FROM_FILE |
398 | jne .exit |
431 | jne .exit |
- | 432 | stdcall kernel_free, [src] |
|
- | 433 | ;-------------------------------------- |
|
399 | stdcall kernel_free, [src] |
434 | align 4 |
400 | .exit: |
435 | .exit: |
401 | pop edi |
436 | pop edi |
402 | pop esi |
437 | pop esi |
- | 438 | pop ebx |
|
- | 439 | ;-------------------------------------- |
|
403 | pop ebx |
440 | align 4 |
404 | .fail: |
441 | .fail: |
- | 442 | mov eax, [handle] |
|
- | 443 | ;-------------------------------------- |
|
405 | mov eax, [handle] |
444 | align 4 |
406 | .fail2: |
445 | .fail2: |
407 | ret |
446 | ret |
408 | endp |
- | |
- | 447 | endp |
|
409 | 448 | ;------------------------------------------------------------------------------ |
|
410 | align 4 |
449 | align 4 |
411 | proc delete_cursor stdcall, hcursor:dword |
450 | proc delete_cursor stdcall, hcursor:dword |
412 | locals |
451 | locals |
413 | hsrv dd ? |
452 | hsrv dd ? |
Line 431... | Line 470... | ||
431 | mov ebx, [current_slot] |
470 | mov ebx, [current_slot] |
432 | cmp esi, [ebx+APPDATA.cursor] |
471 | cmp esi, [ebx+APPDATA.cursor] |
433 | jne @F |
472 | jne @F |
434 | mov eax, [def_cursor] |
473 | mov eax, [def_cursor] |
435 | mov [ebx+APPDATA.cursor], eax |
474 | mov [ebx+APPDATA.cursor], eax |
- | 475 | ;-------------------------------------- |
|
- | 476 | align 4 |
|
436 | @@: |
477 | @@: |
437 | mov eax, [hcursor] |
478 | mov eax, [hcursor] |
438 | call [eax+APPOBJ.destroy] |
479 | call [eax+APPOBJ.destroy] |
- | 480 | ;-------------------------------------- |
|
- | 481 | align 4 |
|
439 | .fail: |
482 | .fail: |
440 | ret |
483 | ret |
441 | endp |
484 | endp |
- | 485 | ;------------------------------------------------------------------------------ |
|
442 | 486 | align 4 |
|
443 | ; param |
487 | ; param |
444 | ; eax= cursor |
488 | ; eax= cursor |
445 | - | ||
446 | align 4 |
- | |
447 | destroy_cursor: |
489 | destroy_cursor: |
Line 448... | Line 490... | ||
448 | 490 | ||
449 | push eax |
491 | push eax |
Line 458... | Line 500... | ||
458 | popfd |
500 | popfd |
Line 459... | Line 501... | ||
459 | 501 | ||
460 | pop eax |
502 | pop eax |
461 | call destroy_kernel_object |
503 | call destroy_kernel_object |
462 | ret |
- | |
- | 504 | ret |
|
463 | 505 | ;------------------------------------------------------------------------------ |
|
464 | align 4 |
506 | align 4 |
465 | select_cursor: |
507 | select_cursor: |
466 | mov eax, [esp+4] |
508 | mov eax, [esp+4] |
467 | mov [_display.cursor], eax |
509 | mov [_display.cursor], eax |
468 | ret 4 |
- | |
- | 510 | ret 4 |
|
469 | 511 | ;------------------------------------------------------------------------------ |
|
470 | align 4 |
512 | align 4 |
Line 471... | Line 513... | ||
471 | proc restore_24 stdcall, x:dword, y:dword |
513 | proc restore_24 stdcall, x:dword, y:dword |
Line 482... | Line 524... | ||
482 | 524 | ||
483 | mov esi, cur_saved_data |
525 | mov esi, cur_saved_data |
484 | mov ecx, [cur.w] |
526 | mov ecx, [cur.w] |
485 | lea ecx, [ecx+ecx*2] |
527 | lea ecx, [ecx+ecx*2] |
- | 528 | push ecx |
|
- | 529 | ;-------------------------------------- |
|
486 | push ecx |
530 | align 4 |
487 | @@: |
531 | @@: |
488 | mov edi, ebx |
532 | mov edi, ebx |
Line 489... | Line 533... | ||
489 | add ebx, [BytesPerScanLine] |
533 | add ebx, [BytesPerScanLine] |
Line 494... | Line 538... | ||
494 | jnz @B |
538 | jnz @B |
Line 495... | Line 539... | ||
495 | 539 | ||
496 | pop ecx |
540 | pop ecx |
497 | pop edi |
541 | pop edi |
- | 542 | pop esi |
|
- | 543 | ;-------------------------------------- |
|
498 | pop esi |
544 | align 4 |
499 | .ret: |
545 | .ret: |
500 | pop ebx |
546 | pop ebx |
501 | ret |
547 | ret |
502 | endp |
- | |
- | 548 | endp |
|
503 | 549 | ;------------------------------------------------------------------------------ |
|
504 | align 4 |
550 | align 4 |
Line 505... | Line 551... | ||
505 | proc restore_32 stdcall, x:dword, y:dword |
551 | proc restore_32 stdcall, x:dword, y:dword |
Line 513... | Line 559... | ||
513 | 559 | ||
514 | push esi |
560 | push esi |
Line 515... | Line 561... | ||
515 | push edi |
561 | push edi |
- | 562 | ||
- | 563 | mov esi, cur_saved_data |
|
516 | 564 | ;-------------------------------------- |
|
517 | mov esi, cur_saved_data |
565 | align 4 |
518 | @@: |
566 | @@: |
Line 519... | Line 567... | ||
519 | mov edi, ebx |
567 | mov edi, ebx |
520 | add ebx, [BytesPerScanLine] |
568 | add ebx, [BytesPerScanLine] |
521 | 569 | ||
522 | mov ecx, [cur.w] |
570 | mov ecx, [cur.w] |
Line 523... | Line 571... | ||
523 | rep movsd |
571 | rep movsd |
- | 572 | dec edx |
|
- | 573 | jnz @B |
|
524 | dec edx |
574 | |
525 | jnz @B |
575 | pop edi |
526 | 576 | ;-------------------------------------- |
|
527 | pop edi |
577 | align 4 |
528 | .ret: |
578 | .ret: |
529 | pop esi |
- | |
- | 579 | pop esi |
|
530 | pop ebx |
580 | pop ebx |
531 | ret |
581 | ret |
532 | endp |
582 | endp |
533 | 583 | ;------------------------------------------------------------------------------ |
|
534 | align 4 |
584 | align 4 |
Line 574... | Line 624... | ||
574 | mov [cur_saved_base], edx |
624 | mov [cur_saved_base], edx |
Line 575... | Line 625... | ||
575 | 625 | ||
576 | cmp ebx, [Screen_Max_X] |
626 | cmp ebx, [Screen_Max_X] |
577 | jbe @F |
627 | jbe @F |
- | 628 | mov ebx, [Screen_Max_X] |
|
- | 629 | ;-------------------------------------- |
|
578 | mov ebx, [Screen_Max_X] |
630 | align 4 |
579 | @@: |
631 | @@: |
580 | cmp edi, [Screen_Max_Y] |
632 | cmp edi, [Screen_Max_Y] |
581 | jbe @F |
633 | jbe @F |
- | 634 | mov edi, [Screen_Max_Y] |
|
- | 635 | ;-------------------------------------- |
|
582 | mov edi, [Screen_Max_Y] |
636 | align 4 |
583 | @@: |
637 | @@: |
584 | mov [cur.right], ebx |
638 | mov [cur.right], ebx |
Line 585... | Line 639... | ||
585 | mov [cur.bottom], edi |
639 | mov [cur.bottom], edi |
Line 593... | Line 647... | ||
593 | mov [cur.h], edi |
647 | mov [cur.h], edi |
594 | mov [h], edi |
648 | mov [h], edi |
Line 595... | Line 649... | ||
595 | 649 | ||
596 | mov eax, edi |
650 | mov eax, edi |
- | 651 | mov edi, cur_saved_data |
|
- | 652 | ;-------------------------------------- |
|
597 | mov edi, cur_saved_data |
653 | align 4 |
598 | @@: |
654 | @@: |
599 | mov esi, edx |
655 | mov esi, edx |
600 | add edx, [BytesPerScanLine] |
656 | add edx, [BytesPerScanLine] |
601 | mov ecx, [cur.w] |
657 | mov ecx, [cur.w] |
Line 611... | Line 667... | ||
611 | add eax, [_dx] |
667 | add eax, [_dx] |
Line 612... | Line 668... | ||
612 | 668 | ||
613 | mov esi, [hcursor] |
669 | mov esi, [hcursor] |
614 | mov esi, [esi+CURSOR.base] |
670 | mov esi, [esi+CURSOR.base] |
- | 671 | lea edx, [esi+eax*4] |
|
- | 672 | ;-------------------------------------- |
|
615 | lea edx, [esi+eax*4] |
673 | align 4 |
616 | .row: |
674 | .row: |
617 | mov ecx, [cur.w] |
675 | mov ecx, [cur.w] |
618 | mov esi, edx |
676 | mov esi, edx |
619 | mov edi, ebx |
677 | mov edi, ebx |
620 | add edx, 32*4 |
678 | add edx, 32*4 |
- | 679 | add ebx, [BytesPerScanLine] |
|
- | 680 | ;-------------------------------------- |
|
621 | add ebx, [BytesPerScanLine] |
681 | align 4 |
622 | .pix: |
682 | .pix: |
623 | lodsd |
683 | lodsd |
624 | test eax, 0xFF000000 |
684 | test eax, 0xFF000000 |
625 | jz @F |
685 | jz @F |
626 | mov [edi], ax |
686 | mov [edi], ax |
627 | shr eax, 16 |
687 | shr eax, 16 |
- | 688 | mov [edi+2], al |
|
- | 689 | ;-------------------------------------- |
|
628 | mov [edi+2], al |
690 | align 4 |
629 | @@: |
691 | @@: |
630 | add edi, 3 |
692 | add edi, 3 |
631 | dec ecx |
693 | dec ecx |
Line 632... | Line 694... | ||
632 | jnz .pix |
694 | jnz .pix |
633 | 695 | ||
634 | dec [h] |
696 | dec [h] |
635 | jnz .row |
697 | jnz .row |
636 | ret |
- | |
637 | endp |
- | |
- | 698 | ret |
|
638 | 699 | endp |
|
639 | 700 | ;------------------------------------------------------------------------------ |
|
640 | align 4 |
701 | align 4 |
641 | proc move_cursor_32 stdcall, hcursor:dword, x:dword, y:dword |
702 | proc move_cursor_32 stdcall, hcursor:dword, x:dword, y:dword |
642 | locals |
703 | locals |
Line 678... | Line 739... | ||
678 | mov [cur_saved_base], edx |
739 | mov [cur_saved_base], edx |
Line 679... | Line 740... | ||
679 | 740 | ||
680 | cmp ebx, [Screen_Max_X] |
741 | cmp ebx, [Screen_Max_X] |
681 | jbe @F |
742 | jbe @F |
- | 743 | mov ebx, [Screen_Max_X] |
|
- | 744 | ;-------------------------------------- |
|
682 | mov ebx, [Screen_Max_X] |
745 | align 4 |
683 | @@: |
746 | @@: |
684 | cmp edi, [Screen_Max_Y] |
747 | cmp edi, [Screen_Max_Y] |
685 | jbe @F |
748 | jbe @F |
- | 749 | mov edi, [Screen_Max_Y] |
|
- | 750 | ;-------------------------------------- |
|
686 | mov edi, [Screen_Max_Y] |
751 | align 4 |
687 | @@: |
752 | @@: |
688 | mov [cur.right], ebx |
753 | mov [cur.right], ebx |
Line 689... | Line 754... | ||
689 | mov [cur.bottom], edi |
754 | mov [cur.bottom], edi |
Line 697... | Line 762... | ||
697 | mov [cur.h], edi |
762 | mov [cur.h], edi |
698 | mov [h], edi |
763 | mov [h], edi |
Line 699... | Line 764... | ||
699 | 764 | ||
700 | mov eax, edi |
765 | mov eax, edi |
- | 766 | mov edi, cur_saved_data |
|
- | 767 | ;-------------------------------------- |
|
701 | mov edi, cur_saved_data |
768 | align 4 |
702 | @@: |
769 | @@: |
703 | mov esi, edx |
770 | mov esi, edx |
704 | add edx, [BytesPerScanLine] |
771 | add edx, [BytesPerScanLine] |
705 | mov ecx, [cur.w] |
772 | mov ecx, [cur.w] |
Line 714... | Line 781... | ||
714 | add eax, [_dx] |
781 | add eax, [_dx] |
Line 715... | Line 782... | ||
715 | 782 | ||
716 | mov esi, [hcursor] |
783 | mov esi, [hcursor] |
717 | mov esi, [esi+CURSOR.base] |
784 | mov esi, [esi+CURSOR.base] |
- | 785 | lea edx, [esi+eax*4] |
|
- | 786 | ;-------------------------------------- |
|
718 | lea edx, [esi+eax*4] |
787 | align 4 |
719 | .row: |
788 | .row: |
720 | mov ecx, [cur.w] |
789 | mov ecx, [cur.w] |
721 | mov esi, edx |
790 | mov esi, edx |
722 | mov edi, ebx |
791 | mov edi, ebx |
723 | add edx, 32*4 |
792 | add edx, 32*4 |
- | 793 | add ebx, [BytesPerScanLine] |
|
- | 794 | ;-------------------------------------- |
|
724 | add ebx, [BytesPerScanLine] |
795 | align 4 |
725 | .pix: |
796 | .pix: |
726 | lodsd |
797 | lodsd |
727 | test eax, 0xFF000000 |
798 | test eax, 0xFF000000 |
728 | jz @F |
799 | jz @F |
- | 800 | mov [edi], eax |
|
- | 801 | ;-------------------------------------- |
|
729 | mov [edi], eax |
802 | align 4 |
730 | @@: |
803 | @@: |
731 | add edi, 4 |
804 | add edi, 4 |
732 | dec ecx |
805 | dec ecx |
Line 733... | Line 806... | ||
733 | jnz .pix |
806 | jnz .pix |
734 | 807 | ||
735 | dec [h] |
808 | dec [h] |
736 | 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 |
|
Line -... | Line 908... | ||
- | 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 |
|
- | 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 | ;-------------------------------------- |
|
737 | ret |
953 | align 4 |
738 | endp |
954 | .no_mouse_area: |
739 | 955 | ret |
|
740 | 956 | ;------------------------------------------------------------------------------ |
|
741 | align 4 |
- | |
- | 957 | align 4 |
|
742 | get_display: |
958 | get_display: |
743 | mov eax, _display |
959 | mov eax, _display |
744 | ret |
- | |
745 | 960 | ret |
|
746 | align 4 |
961 | ;------------------------------------------------------------------------------ |
Line 747... | Line 962... | ||
747 | init_display: |
962 | align 4 |
748 | 963 | init_display: |
|
Line 762... | Line 977... | ||
762 | cmp [SCR_MODE], word 0x13 |
977 | cmp [SCR_MODE], word 0x13 |
763 | jbe .fail |
978 | jbe .fail |
Line 764... | Line 979... | ||
764 | 979 | ||
765 | test word [SCR_MODE], 0x4000 |
980 | test word [SCR_MODE], 0x4000 |
- | 981 | jz .fail |
|
Line 766... | Line 982... | ||
766 | jz .fail |
982 | ; jmp .fail |
767 | 983 | ||
768 | mov ebx, restore_32 |
984 | mov ebx, restore_32 |
769 | mov ecx, move_cursor_32 |
985 | mov ecx, move_cursor_32 |
Line 773... | Line 989... | ||
773 | 989 | ||
774 | mov ebx, restore_24 |
990 | mov ebx, restore_24 |
775 | mov ecx, move_cursor_24 |
991 | mov ecx, move_cursor_24 |
776 | cmp eax, 24 |
992 | cmp eax, 24 |
- | 993 | jne .fail |
|
- | 994 | ;-------------------------------------- |
|
777 | jne .fail |
995 | align 4 |
778 | @@: |
996 | @@: |
779 | mov [_display.select_cursor], select_cursor |
997 | mov [_display.select_cursor], select_cursor |
780 | 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 781... | Line 1001... | ||
781 | mov [_display.restore_cursor], ebx |
1001 | mov [_display.check_m_pixel], check_mouse_area_for_getpixel_new |
782 | 1002 | ||
783 | 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 |
|
784 | mov [def_cursor], eax |
1006 | ;-------------------------------------- |
785 | ret |
1007 | align 4 |
786 | .fail: |
1008 | .fail: |
787 | xor eax, eax |
1009 | xor eax, eax |
788 | mov [_display.select_cursor], eax |
1010 | mov [_display.select_cursor], eax |
789 | mov [_display.move_cursor], eax |
- | |
790 | ret |
- | |
- | 1011 | mov [_display.move_cursor], eax |
|
791 | 1012 | ret |
|
792 | 1013 | ;------------------------------------------------------------------------------ |
|
793 | align 4 |
1014 | align 4 |
- | 1015 | def_arrow: |