Subversion Repositories Kolibri OS

Rev

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: