Subversion Repositories Kolibri OS

Rev

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: