Subversion Repositories Kolibri OS

Rev

Rev 7136 | Rev 8869 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 7136 Rev 7510
1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
;;                                                              ;;
2
;;                                                              ;;
3
;; Copyright (C) KolibriOS team 2004-2015. All rights reserved. ;;
3
;; Copyright (C) KolibriOS team 2004-2018. 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
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7
 
7
 
8
$Revision: 7136 $
8
$Revision: 7510 $
9
 
9
 
10
 
10
 
11
LOAD_FROM_FILE  = 0
11
LOAD_FROM_FILE  = 0
12
LOAD_FROM_MEM   = 1
12
LOAD_FROM_MEM   = 1
13
LOAD_INDIRECT   = 2
13
LOAD_INDIRECT   = 2
14
LOAD_SYSTEM     = 3
14
LOAD_SYSTEM     = 3
15
 
15
 
16
struct  BITMAPINFOHEADER
16
struct  BITMAPINFOHEADER
17
        Size                    dd ?
17
        Size                    dd ?
18
        Width                   dd ?
18
        Width                   dd ?
19
        Height                  dd ?
19
        Height                  dd ?
20
        Planes                  dw ?
20
        Planes                  dw ?
21
        BitCount                dw ?
21
        BitCount                dw ?
22
        Compression             dd ?
22
        Compression             dd ?
23
        SizeImage               dd ?
23
        SizeImage               dd ?
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 ?
35
             pBits    dd ?
35
             pBits    dd ?
36
             pAnd     dd ?
36
             pAnd     dd ?
37
             width    dd ?
37
             width    dd ?
38
             height   dd ?
38
             height   dd ?
39
             counter  dd ?
39
             counter  dd ?
40
           endl
40
           endl
41
 
41
 
42
        mov     esi, [src]
42
        mov     esi, [src]
43
        add     esi, [esi+18]
43
        add     esi, [esi+18]
44
        mov     eax, esi
44
        mov     eax, esi
45
 
45
 
46
        cmp     [esi+BITMAPINFOHEADER.BitCount], 24
46
        cmp     [esi+BITMAPINFOHEADER.BitCount], 24
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
align 4
54
.img_2:
54
.img_2:
55
        add     eax, [esi]
55
        add     eax, [esi]
56
        mov     [pQuad], eax
56
        mov     [pQuad], eax
57
        add     eax, 8
57
        add     eax, 8
58
        mov     [pBits], eax
58
        mov     [pBits], eax
59
        add     eax, 128
59
        add     eax, 128
60
        mov     [pAnd], eax
60
        mov     [pAnd], eax
61
        mov     eax, [esi+4]
61
        mov     eax, [esi+4]
62
        mov     [width], eax
62
        mov     [width], eax
63
        mov     ebx, [esi+8]
63
        mov     ebx, [esi+8]
64
        shr     ebx, 1
64
        shr     ebx, 1
65
        mov     [height], ebx
65
        mov     [height], ebx
66
 
66
 
67
        mov     edi, [dst]
67
        mov     edi, [dst]
68
        add     edi, 32*31*4
68
        add     edi, 32*31*4
69
        mov     [rBase], edi
69
        mov     [rBase], edi
70
 
70
 
71
        mov     esi, [pQuad]
71
        mov     esi, [pQuad]
72
;--------------------------------------
72
;--------------------------------------
73
align 4
73
align 4
74
.l21:
74
.l21:
75
        mov     ebx, [pBits]
75
        mov     ebx, [pBits]
76
        mov     ebx, [ebx]
76
        mov     ebx, [ebx]
77
        bswap   ebx
77
        bswap   ebx
78
        mov     eax, [pAnd]
78
        mov     eax, [pAnd]
79
        mov     eax, [eax]
79
        mov     eax, [eax]
80
        bswap   eax
80
        bswap   eax
81
        mov     [counter], 32
81
        mov     [counter], 32
82
;--------------------------------------
82
;--------------------------------------
83
align 4
83
align 4
84
@@:
84
@@:
85
        xor     edx, edx
85
        xor     edx, edx
86
        shl     eax, 1
86
        shl     eax, 1
87
        setc    dl
87
        setc    dl
88
        dec     edx
88
        dec     edx
89
 
89
 
90
        xor     ecx, ecx
90
        xor     ecx, ecx
91
        shl     ebx, 1
91
        shl     ebx, 1
92
        setc    cl
92
        setc    cl
93
        mov     ecx, [esi+ecx*4]
93
        mov     ecx, [esi+ecx*4]
94
        and     ecx, edx
94
        and     ecx, edx
95
        and     edx, 0xFF000000
95
        and     edx, 0xFF000000
96
        or      edx, ecx
96
        or      edx, ecx
97
        mov     [edi], edx
97
        mov     [edi], edx
98
 
98
 
99
        add     edi, 4
99
        add     edi, 4
100
        dec     [counter]
100
        dec     [counter]
101
        jnz     @B
101
        jnz     @B
102
 
102
 
103
        add     [pBits], 4
103
        add     [pBits], 4
104
        add     [pAnd], 4
104
        add     [pAnd], 4
105
        mov     edi, [rBase]
105
        mov     edi, [rBase]
106
        sub     edi, 128
106
        sub     edi, 128
107
        mov     [rBase], edi
107
        mov     [rBase], edi
108
        sub     [height], 1
108
        sub     [height], 1
109
        jnz     .l21
109
        jnz     .l21
110
        ret
110
        ret
111
;--------------------------------------
111
;--------------------------------------
112
align 4
112
align 4
113
.img_4:
113
.img_4:
114
        add     eax, [esi]
114
        add     eax, [esi]
115
        mov     [pQuad], eax
115
        mov     [pQuad], eax
116
        add     eax, 64
116
        add     eax, 64
117
        mov     [pBits], eax
117
        mov     [pBits], eax
118
        add     eax, 0x200
118
        add     eax, 0x200
119
        mov     [pAnd], eax
119
        mov     [pAnd], eax
120
        mov     eax, [esi+4]
120
        mov     eax, [esi+4]
121
        mov     [width], eax
121
        mov     [width], eax
122
        mov     ebx, [esi+8]
122
        mov     ebx, [esi+8]
123
        shr     ebx, 1
123
        shr     ebx, 1
124
        mov     [height], ebx
124
        mov     [height], ebx
125
 
125
 
126
        mov     edi, [dst]
126
        mov     edi, [dst]
127
        add     edi, 32*31*4
127
        add     edi, 32*31*4
128
        mov     [rBase], edi
128
        mov     [rBase], edi
129
 
129
 
130
        mov     esi, [pQuad]
130
        mov     esi, [pQuad]
131
        mov     ebx, [pBits]
131
        mov     ebx, [pBits]
132
;--------------------------------------
132
;--------------------------------------
133
align 4
133
align 4
134
.l4:
134
.l4:
135
        mov     eax, [pAnd]
135
        mov     eax, [pAnd]
136
        mov     eax, [eax]
136
        mov     eax, [eax]
137
        bswap   eax
137
        bswap   eax
138
        mov     [counter], 16
138
        mov     [counter], 16
139
;--------------------------------------
139
;--------------------------------------
140
align 4
140
align 4
141
@@:
141
@@:
142
        xor     edx, edx
142
        xor     edx, edx
143
        shl     eax, 1
143
        shl     eax, 1
144
        setc    dl
144
        setc    dl
145
        dec     edx
145
        dec     edx
146
 
146
 
147
        movzx   ecx, byte [ebx]
147
        movzx   ecx, byte [ebx]
148
        and     cl, 0xF0
148
        and     cl, 0xF0
149
        shr     ecx, 2
149
        shr     ecx, 2
150
        mov     ecx, [esi+ecx]
150
        mov     ecx, [esi+ecx]
151
        and     ecx, edx
151
        and     ecx, edx
152
        and     edx, 0xFF000000
152
        and     edx, 0xFF000000
153
        or      edx, ecx
153
        or      edx, ecx
154
        mov     [edi], edx
154
        mov     [edi], edx
155
 
155
 
156
        xor     edx, edx
156
        xor     edx, edx
157
        shl     eax, 1
157
        shl     eax, 1
158
        setc    dl
158
        setc    dl
159
        dec     edx
159
        dec     edx
160
 
160
 
161
        movzx   ecx, byte [ebx]
161
        movzx   ecx, byte [ebx]
162
        and     cl, 0x0F
162
        and     cl, 0x0F
163
        mov     ecx, [esi+ecx*4]
163
        mov     ecx, [esi+ecx*4]
164
        and     ecx, edx
164
        and     ecx, edx
165
        and     edx, 0xFF000000
165
        and     edx, 0xFF000000
166
        or      edx, ecx
166
        or      edx, ecx
167
        mov     [edi+4], edx
167
        mov     [edi+4], edx
168
 
168
 
169
        inc     ebx
169
        inc     ebx
170
        add     edi, 8
170
        add     edi, 8
171
        dec     [counter]
171
        dec     [counter]
172
        jnz     @B
172
        jnz     @B
173
 
173
 
174
        add     [pAnd], 4
174
        add     [pAnd], 4
175
        mov     edi, [rBase]
175
        mov     edi, [rBase]
176
        sub     edi, 128
176
        sub     edi, 128
177
        mov     [rBase], edi
177
        mov     [rBase], edi
178
        sub     [height], 1
178
        sub     [height], 1
179
        jnz     .l4
179
        jnz     .l4
180
        ret
180
        ret
181
;--------------------------------------
181
;--------------------------------------
182
align 4
182
align 4
183
.img_8:
183
.img_8:
184
        add     eax, [esi]
184
        add     eax, [esi]
185
        mov     [pQuad], eax
185
        mov     [pQuad], eax
186
        add     eax, 1024
186
        add     eax, 1024
187
        mov     [pBits], eax
187
        mov     [pBits], eax
188
        add     eax, 1024
188
        add     eax, 1024
189
        mov     [pAnd], eax
189
        mov     [pAnd], eax
190
        mov     eax, [esi+4]
190
        mov     eax, [esi+4]
191
        mov     [width], eax
191
        mov     [width], eax
192
        mov     ebx, [esi+8]
192
        mov     ebx, [esi+8]
193
        shr     ebx, 1
193
        shr     ebx, 1
194
        mov     [height], ebx
194
        mov     [height], ebx
195
 
195
 
196
        mov     edi, [dst]
196
        mov     edi, [dst]
197
        add     edi, 32*31*4
197
        add     edi, 32*31*4
198
        mov     [rBase], edi
198
        mov     [rBase], edi
199
 
199
 
200
        mov     esi, [pQuad]
200
        mov     esi, [pQuad]
201
        mov     ebx, [pBits]
201
        mov     ebx, [pBits]
202
;--------------------------------------
202
;--------------------------------------
203
align 4
203
align 4
204
.l81:
204
.l81:
205
        mov     eax, [pAnd]
205
        mov     eax, [pAnd]
206
        mov     eax, [eax]
206
        mov     eax, [eax]
207
        bswap   eax
207
        bswap   eax
208
        mov     [counter], 32
208
        mov     [counter], 32
209
;--------------------------------------
209
;--------------------------------------
210
align 4
210
align 4
211
@@:
211
@@:
212
        xor     edx, edx
212
        xor     edx, edx
213
        shl     eax, 1
213
        shl     eax, 1
214
        setc    dl
214
        setc    dl
215
        dec     edx
215
        dec     edx
216
 
216
 
217
        movzx   ecx, byte [ebx]
217
        movzx   ecx, byte [ebx]
218
        mov     ecx, [esi+ecx*4]
218
        mov     ecx, [esi+ecx*4]
219
        and     ecx, edx
219
        and     ecx, edx
220
        and     edx, 0xFF000000
220
        and     edx, 0xFF000000
221
        or      edx, ecx
221
        or      edx, ecx
222
        mov     [edi], edx
222
        mov     [edi], edx
223
 
223
 
224
        inc     ebx
224
        inc     ebx
225
        add     edi, 4
225
        add     edi, 4
226
        dec     [counter]
226
        dec     [counter]
227
        jnz     @B
227
        jnz     @B
228
 
228
 
229
        add     [pAnd], 4
229
        add     [pAnd], 4
230
        mov     edi, [rBase]
230
        mov     edi, [rBase]
231
        sub     edi, 128
231
        sub     edi, 128
232
        mov     [rBase], edi
232
        mov     [rBase], edi
233
        sub     [height], 1
233
        sub     [height], 1
234
        jnz     .l81
234
        jnz     .l81
235
        ret
235
        ret
236
;--------------------------------------
236
;--------------------------------------
237
align 4
237
align 4
238
.img_24:
238
.img_24:
239
        add     eax, [esi]
239
        add     eax, [esi]
240
        mov     [pQuad], eax
240
        mov     [pQuad], eax
241
        add     eax, 0xC00
241
        add     eax, 0xC00
242
        mov     [pAnd], eax
242
        mov     [pAnd], eax
243
        mov     eax, [esi+BITMAPINFOHEADER.Width]
243
        mov     eax, [esi+BITMAPINFOHEADER.Width]
244
        mov     [width], eax
244
        mov     [width], eax
245
        mov     ebx, [esi+BITMAPINFOHEADER.Height]
245
        mov     ebx, [esi+BITMAPINFOHEADER.Height]
246
        shr     ebx, 1
246
        shr     ebx, 1
247
        mov     [height], ebx
247
        mov     [height], ebx
248
 
248
 
249
        mov     edi, [dst]
249
        mov     edi, [dst]
250
        add     edi, 32*31*4
250
        add     edi, 32*31*4
251
        mov     [rBase], edi
251
        mov     [rBase], edi
252
 
252
 
253
        mov     esi, [pAnd]
253
        mov     esi, [pAnd]
254
        mov     ebx, [pQuad]
254
        mov     ebx, [pQuad]
255
;--------------------------------------
255
;--------------------------------------
256
align 4
256
align 4
257
.row_24:
257
.row_24:
258
        mov     eax, [esi]
258
        mov     eax, [esi]
259
        bswap   eax
259
        bswap   eax
260
        mov     [counter], 32
260
        mov     [counter], 32
261
;--------------------------------------
261
;--------------------------------------
262
align 4
262
align 4
263
@@:
263
@@:
264
        xor     edx, edx
264
        xor     edx, edx
265
        shl     eax, 1
265
        shl     eax, 1
266
        setc    dl
266
        setc    dl
267
        dec     edx
267
        dec     edx
268
 
268
 
269
        mov     ecx, [ebx]
269
        mov     ecx, [ebx]
270
        and     ecx, 0x00FFFFFF
270
        and     ecx, 0x00FFFFFF
271
        and     ecx, edx
271
        and     ecx, edx
272
        and     edx, 0xFF000000
272
        and     edx, 0xFF000000
273
        or      edx, ecx
273
        or      edx, ecx
274
        mov     [edi], edx
274
        mov     [edi], edx
275
        add     ebx, 3
275
        add     ebx, 3
276
        add     edi, 4
276
        add     edi, 4
277
        dec     [counter]
277
        dec     [counter]
278
        jnz     @B
278
        jnz     @B
279
 
279
 
280
        add     esi, 4
280
        add     esi, 4
281
        mov     edi, [rBase]
281
        mov     edi, [rBase]
282
        sub     edi, 128
282
        sub     edi, 128
283
        mov     [rBase], edi
283
        mov     [rBase], edi
284
        sub     [height], 1
284
        sub     [height], 1
285
        jnz     .row_24
285
        jnz     .row_24
286
        ret
286
        ret
287
endp
287
endp
288
;------------------------------------------------------------------------------
288
;------------------------------------------------------------------------------
289
align 4
289
align 4
290
proc set_cursor stdcall, hcursor:dword
290
proc set_cursor stdcall, hcursor:dword
291
        mov     eax, [hcursor]
291
        mov     eax, [hcursor]
292
        cmp     [eax+CURSOR.magic], 'CURS'
292
        cmp     [eax+CURSOR.magic], 'CURS'
293
        jne     .fail
293
        jne     .fail
294
;           cmp [eax+CURSOR.size], CURSOR_SIZE
294
;           cmp [eax+CURSOR.size], CURSOR_SIZE
295
;           jne .fail
295
;           jne .fail
296
        mov     ebx, [current_slot]
296
        mov     ebx, [current_slot]
297
        xchg    eax, [ebx+APPDATA.cursor]
297
        xchg    eax, [ebx+APPDATA.cursor]
298
        jmp     .end
298
        jmp     .end
299
;--------------------------------------
299
;--------------------------------------
300
align 4
300
align 4
301
.fail:
301
.fail:
302
        mov     eax, [def_cursor]
302
        mov     eax, [def_cursor]
303
        mov     ebx, [current_slot]
303
        mov     ebx, [current_slot]
304
        xchg    eax, [ebx+APPDATA.cursor]
304
        xchg    eax, [ebx+APPDATA.cursor]
305
align 4
305
align 4
306
.end:
306
.end:
307
        mov     [redrawmouse_unconditional], 1
307
        mov     [redrawmouse_unconditional], 1
308
        call    __sys_draw_pointer
308
        call    __sys_draw_pointer
309
        ret
309
        ret
310
endp
310
endp
311
;------------------------------------------------------------------------------
311
;------------------------------------------------------------------------------
312
align 4
312
align 4
313
; param
313
; param
314
;  eax= pid
314
;  eax= pid
315
;  ebx= src
315
;  ebx= src
316
;  ecx= flags
316
;  ecx= flags
317
 
317
 
318
create_cursor:
318
create_cursor:
319
.src     equ esp
319
.src     equ esp
320
.flags   equ esp+4
320
.flags   equ esp+4
321
.hcursor equ esp+8
321
.hcursor equ esp+8
322
 
322
 
323
        sub     esp, 4         ;space for .hcursor
323
        sub     esp, 4         ;space for .hcursor
324
        push    ecx
324
        push    ecx
325
        push    ebx
325
        push    ebx
326
 
326
 
327
        mov     ebx, eax
327
        mov     ebx, eax
328
        mov     eax, sizeof.CURSOR
328
        mov     eax, sizeof.CURSOR
329
        call    create_kernel_object
329
        call    create_kernel_object
330
        test    eax, eax
330
        test    eax, eax
331
        jz      .fail
331
        jz      .fail
332
 
332
 
333
        mov     [.hcursor], eax
333
        mov     [.hcursor], eax
334
 
334
 
335
        xor     ebx, ebx
335
        xor     ebx, ebx
336
        mov     [eax+CURSOR.magic], 'CURS'
336
        mov     [eax+CURSOR.magic], 'CURS'
337
        mov     [eax+CURSOR.destroy], destroy_cursor
337
        mov     [eax+CURSOR.destroy], destroy_cursor
338
        mov     [eax+CURSOR.hot_x], ebx
338
        mov     [eax+CURSOR.hot_x], ebx
339
        mov     [eax+CURSOR.hot_y], ebx
339
        mov     [eax+CURSOR.hot_y], ebx
340
 
340
 
341
        stdcall kernel_alloc, 0x1000
341
        stdcall kernel_alloc, 0x1000
342
        test    eax, eax
342
        test    eax, eax
343
        jz      .fail
343
        jz      .fail
344
 
344
 
345
        mov     edi, [.hcursor]
345
        mov     edi, [.hcursor]
346
        mov     [edi+CURSOR.base], eax
346
        mov     [edi+CURSOR.base], eax
347
 
347
 
348
        mov     esi, [.src]
348
        mov     esi, [.src]
349
        mov     ebx, [.flags]
349
        mov     ebx, [.flags]
350
        cmp     bx, LOAD_INDIRECT
350
        cmp     bx, LOAD_INDIRECT
351
        je      .indirect
351
        je      .indirect
352
 
352
 
353
        movzx   ecx, word [esi+10]
353
        movzx   ecx, word [esi+10]
354
        movzx   edx, word [esi+12]
354
        movzx   edx, word [esi+12]
355
        mov     [edi+CURSOR.hot_x], ecx
355
        mov     [edi+CURSOR.hot_x], ecx
356
        mov     [edi+CURSOR.hot_y], edx
356
        mov     [edi+CURSOR.hot_y], edx
357
 
357
 
358
        stdcall init_cursor, eax, esi
358
        stdcall init_cursor, eax, esi
359
 
359
 
360
align 4
360
align 4
361
.add_cursor:
361
.add_cursor:
362
        mov     ecx, [.hcursor]
362
        mov     ecx, [.hcursor]
363
        lea     ecx, [ecx+CURSOR.list_next]
363
        lea     ecx, [ecx+CURSOR.list_next]
364
        lea     edx, [_display.cr_list.next]
364
        lea     edx, [_display.cr_list.next]
365
 
365
 
366
        pushfd
366
        pushfd
367
        cli
367
        cli
368
        list_add ecx, edx   ;list_add_tail(new, head)
368
        list_add ecx, edx   ;list_add_tail(new, head)
369
        popfd
369
        popfd
370
 
370
 
371
        mov     eax, [.hcursor]
371
        mov     eax, [.hcursor]
372
        cmp     [_display.init_cursor], 0
372
        cmp     [_display.init_cursor], 0
373
        je      .fail
373
        je      .fail
374
 
374
 
375
        push    eax
375
        push    eax
376
        call    [_display.init_cursor]
376
        call    [_display.init_cursor]
377
        add     esp, 4
377
        add     esp, 4
378
 
378
 
379
        mov     eax, [.hcursor]
379
        mov     eax, [.hcursor]
380
;--------------------------------------
380
;--------------------------------------
381
align 4
381
align 4
382
.fail:
382
.fail:
383
        add     esp, 12
383
        add     esp, 12
384
        ret
384
        ret
385
;--------------------------------------
385
;--------------------------------------
386
align 4
386
align 4
387
.indirect:
387
.indirect:
388
        shr     ebx, 16
388
        shr     ebx, 16
389
        movzx   ecx, bh
389
        movzx   ecx, bh
390
        movzx   edx, bl
390
        movzx   edx, bl
391
        mov     [edi+CURSOR.hot_x], ecx
391
        mov     [edi+CURSOR.hot_x], ecx
392
        mov     [edi+CURSOR.hot_y], edx
392
        mov     [edi+CURSOR.hot_y], edx
393
 
393
 
394
        xchg    edi, eax
394
        xchg    edi, eax
395
        mov     ecx, 1024
395
        mov     ecx, 1024
396
        cld
396
        cld
397
        rep movsd
397
        rep movsd
398
        jmp     .add_cursor
398
        jmp     .add_cursor
399
;------------------------------------------------------------------------------
399
;------------------------------------------------------------------------------
400
align 4
400
align 4
401
proc load_cursor stdcall, src:dword, flags:dword
401
proc load_cursor stdcall, src:dword, flags:dword
402
           locals
402
           locals
403
             handle  dd ?
403
             handle  dd ?
404
           endl
404
           endl
405
 
405
 
406
        xor     eax, eax
406
        xor     eax, eax
407
        cmp     [create_cursor], eax
407
        cmp     [create_cursor], eax
408
        je      .fail2
408
        je      .fail2
409
 
409
 
410
        mov     [handle], eax
410
        mov     [handle], eax
411
        cmp     word [flags], LOAD_FROM_FILE
411
        cmp     word [flags], LOAD_FROM_FILE
412
        jne     @F
412
        jne     @F
413
 
413
 
414
        stdcall load_file, [src]
414
        stdcall load_file, [src]
415
        test    eax, eax
415
        test    eax, eax
416
        jz      .fail
416
        jz      .fail
417
        mov     [src], eax
417
        mov     [src], eax
418
;--------------------------------------
418
;--------------------------------------
419
align 4
419
align 4
420
@@:
420
@@:
421
        push    ebx
421
        push    ebx
422
        push    esi
422
        push    esi
423
        push    edi
423
        push    edi
424
 
424
 
425
        mov     eax, [CURRENT_TASK]
425
        mov     eax, [CURRENT_TASK]
426
        shl     eax, 5
426
        shl     eax, 5
427
        mov     eax, [CURRENT_TASK+eax+4]
427
        mov     eax, [CURRENT_TASK+eax+4]
428
        mov     ebx, [src]
428
        mov     ebx, [src]
429
        mov     ecx, [flags]
429
        mov     ecx, [flags]
430
        call    create_cursor    ;eax, ebx, ecx
430
        call    create_cursor    ;eax, ebx, ecx
431
        mov     [handle], eax
431
        mov     [handle], eax
432
 
432
 
433
        cmp     word [flags], LOAD_FROM_FILE
433
        cmp     word [flags], LOAD_FROM_FILE
434
        jne     .exit
434
        jne     .exit
435
        stdcall kernel_free, [src]
435
        stdcall kernel_free, [src]
436
;--------------------------------------
436
;--------------------------------------
437
align 4
437
align 4
438
.exit:
438
.exit:
439
        pop     edi
439
        pop     edi
440
        pop     esi
440
        pop     esi
441
        pop     ebx
441
        pop     ebx
442
;--------------------------------------
442
;--------------------------------------
443
align 4
443
align 4
444
.fail:
444
.fail:
445
        mov     eax, [handle]
445
        mov     eax, [handle]
446
;--------------------------------------
446
;--------------------------------------
447
align 4
447
align 4
448
.fail2:
448
.fail2:
449
        ret
449
        ret
450
endp
450
endp
451
;------------------------------------------------------------------------------
451
;------------------------------------------------------------------------------
452
align 4
452
align 4
453
proc delete_cursor stdcall, hcursor:dword
453
proc delete_cursor stdcall, hcursor:dword
454
 
454
 
455
;        DEBUGF 1,'K : delete_cursor %x\n', [hcursor]
455
;        DEBUGF 1,'K : delete_cursor %x\n', [hcursor]
456
 
456
 
457
        mov     esi, [hcursor]
457
        mov     esi, [hcursor]
458
 
458
 
459
        cmp     [esi+CURSOR.magic], 'CURS'
459
        cmp     [esi+CURSOR.magic], 'CURS'
460
        jne     .fail
460
        jne     .fail
461
 
461
 
462
        mov     ebx, [CURRENT_TASK]
462
        mov     ebx, [CURRENT_TASK]
463
        shl     ebx, 5
463
        shl     ebx, 5
464
        mov     ebx, [CURRENT_TASK+ebx+4]
464
        mov     ebx, [CURRENT_TASK+ebx+4]
465
        cmp     ebx, [esi+CURSOR.pid]
465
        cmp     ebx, [esi+CURSOR.pid]
466
        jne     .fail
466
        jne     .fail
467
 
467
 
468
        mov     ebx, [current_slot]
468
        mov     ebx, [current_slot]
469
        cmp     esi, [ebx+APPDATA.cursor]
469
        cmp     esi, [ebx+APPDATA.cursor]
470
        jne     @F
470
        jne     @F
471
        mov     eax, [def_cursor]
471
        mov     eax, [def_cursor]
472
        mov     [ebx+APPDATA.cursor], eax
472
        mov     [ebx+APPDATA.cursor], eax
473
;--------------------------------------
473
;--------------------------------------
474
align 4
474
align 4
475
@@:
475
@@:
476
        mov     eax, [hcursor]
476
        mov     eax, [hcursor]
477
        call    [eax+APPOBJ.destroy]
477
        call    [eax+APPOBJ.destroy]
478
;--------------------------------------
478
;--------------------------------------
479
align 4
479
align 4
480
.fail:
480
.fail:
481
        ret
481
        ret
482
endp
482
endp
483
;------------------------------------------------------------------------------
483
;------------------------------------------------------------------------------
484
align 4
484
align 4
485
; param
485
; param
486
;  eax= cursor
486
;  eax= cursor
487
destroy_cursor:
487
destroy_cursor:
488
 
488
 
489
        push    eax
489
        push    eax
490
        stdcall kernel_free, [eax+CURSOR.base]
490
        stdcall kernel_free, [eax+CURSOR.base]
491
 
491
 
492
        mov     eax, [esp]
492
        mov     eax, [esp]
493
        lea     eax, [eax+CURSOR.list_next]
493
        lea     eax, [eax+CURSOR.list_next]
494
 
494
 
495
        pushfd
495
        pushfd
496
        cli
496
        cli
497
        list_del eax
497
        list_del eax
498
        popfd
498
        popfd
499
 
499
 
500
        pop     eax
500
        pop     eax
501
        call    destroy_kernel_object
501
        call    destroy_kernel_object
502
        ret
502
        ret
503
;------------------------------------------------------------------------------
503
;------------------------------------------------------------------------------
504
align 4
504
align 4
505
select_cursor:
505
select_cursor:
506
        mov     eax, [esp+4]
506
        mov     eax, [esp+4]
507
        mov     [_display.cursor], eax
507
        mov     [_display.cursor], eax
508
        ret     4
508
        ret     4
509
;------------------------------------------------------------------------------
509
;------------------------------------------------------------------------------
510
align 4
510
align 4
511
proc restore_24 stdcall, x:dword, y:dword
511
proc restore_24 stdcall, x:dword, y:dword
512
 
512
 
513
        push    ebx
513
        push    ebx
514
 
514
 
515
        mov     ebx, [cur_saved_base]
515
        mov     ebx, [cur_saved_base]
516
        mov     edx, [cur.h]
516
        mov     edx, [cur.h]
517
        test    edx, edx
517
        test    edx, edx
518
        jz      .ret
518
        jz      .ret
519
 
519
 
520
        push    esi
520
        push    esi
521
        push    edi
521
        push    edi
522
 
522
 
523
        mov     esi, cur_saved_data
523
        mov     esi, cur_saved_data
524
        mov     ecx, [cur.w]
524
        mov     ecx, [cur.w]
525
        lea     ecx, [ecx+ecx*2]
525
        lea     ecx, [ecx+ecx*2]
526
        push    ecx
526
        push    ecx
527
;--------------------------------------
527
;--------------------------------------
528
align 4
528
align 4
529
@@:
529
@@:
530
        mov     edi, ebx
530
        mov     edi, ebx
531
        add     ebx, [_display.lfb_pitch]
531
        add     ebx, [_display.lfb_pitch]
532
 
532
 
533
        mov     ecx, [esp]
533
        mov     ecx, [esp]
534
        rep movsb
534
        rep movsb
535
        dec     edx
535
        dec     edx
536
        jnz     @B
536
        jnz     @B
537
 
537
 
538
        pop     ecx
538
        pop     ecx
539
        pop     edi
539
        pop     edi
540
        pop     esi
540
        pop     esi
541
;--------------------------------------
541
;--------------------------------------
542
align 4
542
align 4
543
.ret:
543
.ret:
544
        pop     ebx
544
        pop     ebx
545
        ret
545
        ret
546
endp
546
endp
547
;------------------------------------------------------------------------------
547
;------------------------------------------------------------------------------
548
align 4
548
align 4
549
proc restore_32 stdcall, x:dword, y:dword
549
proc restore_32 stdcall, x:dword, y:dword
550
 
550
 
551
        push    ebx
551
        push    ebx
552
 
552
 
553
        mov     ebx, [cur_saved_base]
553
        mov     ebx, [cur_saved_base]
554
        mov     edx, [cur.h]
554
        mov     edx, [cur.h]
555
        test    edx, edx
555
        test    edx, edx
556
        jz      .ret
556
        jz      .ret
557
 
557
 
558
        push    esi
558
        push    esi
559
        push    edi
559
        push    edi
560
 
560
 
561
        mov     esi, cur_saved_data
561
        mov     esi, cur_saved_data
562
;--------------------------------------
562
;--------------------------------------
563
align 4
563
align 4
564
@@:
564
@@:
565
        mov     edi, ebx
565
        mov     edi, ebx
566
        add     ebx, [_display.lfb_pitch]
566
        add     ebx, [_display.lfb_pitch]
567
 
567
 
568
        mov     ecx, [cur.w]
568
        mov     ecx, [cur.w]
569
        rep movsd
569
        rep movsd
570
        dec     edx
570
        dec     edx
571
        jnz     @B
571
        jnz     @B
572
 
572
 
573
        pop     edi
573
        pop     edi
574
        pop     esi
574
        pop     esi
575
 
575
 
576
;--------------------------------------
576
;--------------------------------------
577
align 4
577
align 4
578
.ret:
578
.ret:
579
        pop     ebx
579
        pop     ebx
580
        ret
580
        ret
581
endp
581
endp
582
;------------------------------------------------------------------------------
582
;------------------------------------------------------------------------------
583
align 4
583
align 4
584
proc restore_16 stdcall, x:dword, y:dword
584
proc restore_16 stdcall, x:dword, y:dword
585
 
585
 
586
        push    ebx
586
        push    ebx
587
 
587
 
588
        mov     ebx, [cur_saved_base]
588
        mov     ebx, [cur_saved_base]
589
        mov     edx, [cur.h]
589
        mov     edx, [cur.h]
590
        test    edx, edx
590
        test    edx, edx
591
        jz      .ret
591
        jz      .ret
592
 
592
 
593
        push    esi
593
        push    esi
594
        push    edi
594
        push    edi
595
 
595
 
596
        mov     esi, cur_saved_data
596
        mov     esi, cur_saved_data
597
;--------------------------------------
597
;--------------------------------------
598
align 4
598
align 4
599
@@:
599
@@:
600
        mov     edi, ebx
600
        mov     edi, ebx
601
        add     ebx, [_display.lfb_pitch]
601
        add     ebx, [_display.lfb_pitch]
602
 
602
 
603
        mov     ecx, [cur.w]
603
        mov     ecx, [cur.w]
604
        rep movsw
604
        rep movsw
605
        dec     edx
605
        dec     edx
606
        jnz     @B
606
        jnz     @B
607
 
607
 
608
        pop     edi
608
        pop     edi
609
        pop     esi
609
        pop     esi
610
 
610
 
611
;--------------------------------------
611
;--------------------------------------
612
align 4
612
align 4
613
.ret:
613
.ret:
614
        pop     ebx
614
        pop     ebx
615
        ret
615
        ret
616
endp
616
endp
617
;------------------------------------------------------------------------------
617
;------------------------------------------------------------------------------
618
align 4
618
align 4
619
proc move_cursor_24 stdcall, hcursor:dword, x:dword, y:dword
619
proc move_cursor_24 stdcall, hcursor:dword, x:dword, y:dword
620
           locals
620
           locals
621
             h      dd ?
621
             h      dd ?
622
             _dx     dd ?
622
             _dx     dd ?
623
             _dy     dd ?
623
             _dy     dd ?
624
           endl
624
           endl
625
 
625
 
626
        mov     esi, [hcursor]
626
        mov     esi, [hcursor]
627
        mov     ecx, [x]
627
        mov     ecx, [x]
628
        mov     eax, [y]
628
        mov     eax, [y]
629
;        mov     ebx, [BytesPerScanLine]
629
;        mov     ebx, [BytesPerScanLine]
630
 
630
 
631
        xor     edx, edx
631
        xor     edx, edx
632
        sub     ecx, [esi+CURSOR.hot_x]
632
        sub     ecx, [esi+CURSOR.hot_x]
633
        lea     ebx, [ecx+32-1]
633
        lea     ebx, [ecx+32-1]
634
        mov     [x], ecx
634
        mov     [x], ecx
635
        sets    dl
635
        sets    dl
636
        dec     edx
636
        dec     edx
637
        and     ecx, edx      ;clip x to 0<=x
637
        and     ecx, edx      ;clip x to 0<=x
638
        mov     [cur.left], ecx
638
        mov     [cur.left], ecx
639
        mov     edi, ecx
639
        mov     edi, ecx
640
        sub     edi, [x]
640
        sub     edi, [x]
641
        mov     [_dx], edi
641
        mov     [_dx], edi
642
 
642
 
643
        xor     edx, edx
643
        xor     edx, edx
644
        sub     eax, [esi+CURSOR.hot_y]
644
        sub     eax, [esi+CURSOR.hot_y]
645
        lea     edi, [eax+32-1]
645
        lea     edi, [eax+32-1]
646
        mov     [y], eax
646
        mov     [y], eax
647
        sets    dl
647
        sets    dl
648
        dec     edx
648
        dec     edx
649
        and     eax, edx      ;clip y to 0<=y
649
        and     eax, edx      ;clip y to 0<=y
650
        mov     [cur.top], eax
650
        mov     [cur.top], eax
651
        mov     edx, eax
651
        mov     edx, eax
652
        sub     edx, [y]
652
        sub     edx, [y]
653
        mov     [_dy], edx
653
        mov     [_dy], edx
654
 
654
 
655
;        mul     dword [BytesPerScanLine]
655
;        mul     dword [BytesPerScanLine]
656
        mov     eax, [BPSLine_calc_area+eax*4]
656
        mov     eax, [BPSLine_calc_area+eax*4]
657
        lea     edx, [LFB_BASE+ecx*3]
657
        lea     edx, [LFB_BASE+ecx*3]
658
        add     edx, eax
658
        add     edx, eax
659
        mov     [cur_saved_base], edx
659
        mov     [cur_saved_base], edx
660
 
660
 
661
        cmp     ebx, [_display.width]
661
        cmp     ebx, [_display.width]
662
        jb      @F
662
        jb      @F
663
        mov     ebx, [_display.width]
663
        mov     ebx, [_display.width]
664
;--------------------------------------
664
;--------------------------------------
665
align 4
665
align 4
666
@@:
666
@@:
667
        cmp     edi, [_display.height]
667
        cmp     edi, [_display.height]
668
        jb      @F
668
        jb      @F
669
        mov     edi, [_display.height]
669
        mov     edi, [_display.height]
670
;--------------------------------------
670
;--------------------------------------
671
align 4
671
align 4
672
@@:
672
@@:
673
 
673
 
674
        sub     ebx, [x]
674
        sub     ebx, [x]
675
        sub     edi, [y]
675
        sub     edi, [y]
676
        sub     ebx, [_dx]
676
        sub     ebx, [_dx]
677
        sub     edi, [_dy]
677
        sub     edi, [_dy]
678
 
678
 
679
        mov     [cur.w], ebx
679
        mov     [cur.w], ebx
680
        mov     [cur.h], edi
680
        mov     [cur.h], edi
681
        mov     [h], edi
681
        mov     [h], edi
682
 
682
 
683
        mov     eax, edi
683
        mov     eax, edi
684
        mov     edi, cur_saved_data
684
        mov     edi, cur_saved_data
685
;--------------------------------------
685
;--------------------------------------
686
align 4
686
align 4
687
@@:
687
@@:
688
        mov     esi, edx
688
        mov     esi, edx
689
        add     edx, [_display.lfb_pitch]
689
        add     edx, [_display.lfb_pitch]
690
        mov     ecx, [cur.w]
690
        mov     ecx, [cur.w]
691
        lea     ecx, [ecx+ecx*2]
691
        lea     ecx, [ecx+ecx*2]
692
        rep movsb
692
        rep movsb
693
        dec     eax
693
        dec     eax
694
        jnz     @B
694
        jnz     @B
695
 
695
 
696
;draw cursor
696
;draw cursor
697
        mov     ebx, [cur_saved_base]
697
        mov     ebx, [cur_saved_base]
698
        mov     eax, [_dy]
698
        mov     eax, [_dy]
699
        shl     eax, 5
699
        shl     eax, 5
700
        add     eax, [_dx]
700
        add     eax, [_dx]
701
 
701
 
702
        mov     esi, [hcursor]
702
        mov     esi, [hcursor]
703
        mov     esi, [esi+CURSOR.base]
703
        mov     esi, [esi+CURSOR.base]
704
        lea     edx, [esi+eax*4]
704
        lea     edx, [esi+eax*4]
705
;--------------------------------------
705
;--------------------------------------
706
align 4
706
align 4
707
.row:
707
.row:
708
        mov     ecx, [cur.w]
708
        mov     ecx, [cur.w]
709
        mov     esi, edx
709
        mov     esi, edx
710
        mov     edi, ebx
710
        mov     edi, ebx
711
        add     edx, 32*4
711
        add     edx, 32*4
712
        add     ebx, [_display.lfb_pitch]
712
        add     ebx, [_display.lfb_pitch]
713
;--------------------------------------
713
;--------------------------------------
714
align 4
714
align 4
715
.pix:
715
.pix:
716
        lodsd
716
        lodsd
717
        test    eax, 0xFF000000
717
        test    eax, 0xFF000000
718
        jz      @F
718
        jz      @F
719
        mov     [edi], ax
719
        mov     [edi], ax
720
        shr     eax, 16
720
        shr     eax, 16
721
        mov     [edi+2], al
721
        mov     [edi+2], al
722
;--------------------------------------
722
;--------------------------------------
723
align 4
723
align 4
724
@@:
724
@@:
725
        add     edi, 3
725
        add     edi, 3
726
        dec     ecx
726
        dec     ecx
727
        jnz     .pix
727
        jnz     .pix
728
 
728
 
729
        dec     [h]
729
        dec     [h]
730
        jnz     .row
730
        jnz     .row
731
        ret
731
        ret
732
endp
732
endp
733
;------------------------------------------------------------------------------
733
;------------------------------------------------------------------------------
734
align 4
734
align 4
735
proc move_cursor_32 stdcall, hcursor:dword, x:dword, y:dword
735
proc move_cursor_32 stdcall, hcursor:dword, x:dword, y:dword
736
           locals
736
           locals
737
             h      dd ?
737
             h      dd ?
738
             _dx     dd ?
738
             _dx     dd ?
739
             _dy     dd ?
739
             _dy     dd ?
740
           endl
740
           endl
741
 
741
 
742
        mov     esi, [hcursor]
742
        mov     esi, [hcursor]
743
        mov     ecx, [x]
743
        mov     ecx, [x]
744
        mov     eax, [y]
744
        mov     eax, [y]
745
 
745
 
746
        xor     edx, edx
746
        xor     edx, edx
747
        sub     ecx, [esi+CURSOR.hot_x]
747
        sub     ecx, [esi+CURSOR.hot_x]
748
        lea     ebx, [ecx+32-1]
748
        lea     ebx, [ecx+32-1]
749
        mov     [x], ecx
749
        mov     [x], ecx
750
        sets    dl
750
        sets    dl
751
        dec     edx
751
        dec     edx
752
        and     ecx, edx      ;clip x to 0<=x
752
        and     ecx, edx      ;clip x to 0<=x
753
        mov     [cur.left], ecx
753
        mov     [cur.left], ecx
754
        mov     edi, ecx
754
        mov     edi, ecx
755
        sub     edi, [x]
755
        sub     edi, [x]
756
        mov     [_dx], edi
756
        mov     [_dx], edi
757
 
757
 
758
        xor     edx, edx
758
        xor     edx, edx
759
        sub     eax, [esi+CURSOR.hot_y]
759
        sub     eax, [esi+CURSOR.hot_y]
760
        lea     edi, [eax+32-1]
760
        lea     edi, [eax+32-1]
761
        mov     [y], eax
761
        mov     [y], eax
762
        sets    dl
762
        sets    dl
763
        dec     edx
763
        dec     edx
764
        and     eax, edx      ;clip y to 0<=y
764
        and     eax, edx      ;clip y to 0<=y
765
        mov     [cur.top], eax
765
        mov     [cur.top], eax
766
        mov     edx, eax
766
        mov     edx, eax
767
        sub     edx, [y]
767
        sub     edx, [y]
768
        mov     [_dy], edx
768
        mov     [_dy], edx
769
 
769
 
770
;        mul     dword [BytesPerScanLine]
770
;        mul     dword [BytesPerScanLine]
771
        mov     eax, [BPSLine_calc_area+eax*4]
771
        mov     eax, [BPSLine_calc_area+eax*4]
772
        lea     edx, [LFB_BASE+eax+ecx*4]
772
        lea     edx, [LFB_BASE+eax+ecx*4]
773
        mov     [cur_saved_base], edx
773
        mov     [cur_saved_base], edx
774
 
774
 
775
        cmp     ebx, [_display.width]
775
        cmp     ebx, [_display.width]
776
        jb      @F
776
        jb      @F
777
        mov     ebx, [_display.width]
777
        mov     ebx, [_display.width]
778
;--------------------------------------
778
;--------------------------------------
779
align 4
779
align 4
780
@@:
780
@@:
781
        cmp     edi, [_display.height]
781
        cmp     edi, [_display.height]
782
        jb      @F
782
        jb      @F
783
        mov     edi, [_display.height]
783
        mov     edi, [_display.height]
784
;--------------------------------------
784
;--------------------------------------
785
align 4
785
align 4
786
@@:
786
@@:
787
        sub     ebx, [x]
787
        sub     ebx, [x]
788
        sub     edi, [y]
788
        sub     edi, [y]
789
        sub     ebx, [_dx]
789
        sub     ebx, [_dx]
790
        sub     edi, [_dy]
790
        sub     edi, [_dy]
791
 
791
 
792
        mov     [cur.w], ebx
792
        mov     [cur.w], ebx
793
        mov     [cur.h], edi
793
        mov     [cur.h], edi
794
        mov     [h], edi
794
        mov     [h], edi
795
 
795
 
796
        mov     eax, edi
796
        mov     eax, edi
797
        mov     edi, cur_saved_data
797
        mov     edi, cur_saved_data
798
;--------------------------------------
798
;--------------------------------------
799
align 4
799
align 4
800
@@:
800
@@:
801
        mov     esi, edx
801
        mov     esi, edx
802
        add     edx, [_display.lfb_pitch]
802
        add     edx, [_display.lfb_pitch]
803
        mov     ecx, [cur.w]
803
        mov     ecx, [cur.w]
804
        rep movsd
804
        rep movsd
805
        dec     eax
805
        dec     eax
806
        jnz     @B
806
        jnz     @B
807
 
807
 
808
;draw cursor
808
;draw cursor
809
        mov     ebx, [cur_saved_base]
809
        mov     ebx, [cur_saved_base]
810
        mov     eax, [_dy]
810
        mov     eax, [_dy]
811
        shl     eax, 5
811
        shl     eax, 5
812
        add     eax, [_dx]
812
        add     eax, [_dx]
813
 
813
 
814
        mov     esi, [hcursor]
814
        mov     esi, [hcursor]
815
        mov     esi, [esi+CURSOR.base]
815
        mov     esi, [esi+CURSOR.base]
816
        lea     edx, [esi+eax*4]
816
        lea     edx, [esi+eax*4]
817
;--------------------------------------
817
;--------------------------------------
818
align 4
818
align 4
819
.row:
819
.row:
820
        mov     ecx, [cur.w]
820
        mov     ecx, [cur.w]
821
        mov     esi, edx
821
        mov     esi, edx
822
        mov     edi, ebx
822
        mov     edi, ebx
823
        add     edx, 32*4
823
        add     edx, 32*4
824
        add     ebx, [_display.lfb_pitch]
824
        add     ebx, [_display.lfb_pitch]
825
;--------------------------------------
825
;--------------------------------------
826
align 4
826
align 4
827
.pix:
827
.pix:
828
        lodsd
828
        lodsd
829
        test    eax, 0xFF000000
829
        test    eax, 0xFF000000
830
        jz      @F
830
        jz      @F
831
        mov     [edi], eax
831
        mov     [edi], eax
832
;--------------------------------------
832
;--------------------------------------
833
align 4
833
align 4
834
@@:
834
@@:
835
        add     edi, 4
835
        add     edi, 4
836
        dec     ecx
836
        dec     ecx
837
        jnz     .pix
837
        jnz     .pix
838
 
838
 
839
        dec     [h]
839
        dec     [h]
840
        jnz     .row
840
        jnz     .row
841
        ret
841
        ret
842
endp
842
endp
843
;------------------------------------------------------------------------------
843
;------------------------------------------------------------------------------
844
align 4
844
align 4
845
proc move_cursor_16 stdcall, hcursor:dword, x:dword, y:dword
845
proc move_cursor_16 stdcall, hcursor:dword, x:dword, y:dword
846
           locals
846
           locals
847
             h      dd ?
847
             h      dd ?
848
             _dx     dd ?
848
             _dx     dd ?
849
             _dy     dd ?
849
             _dy     dd ?
850
           endl
850
           endl
851
 
851
 
852
        mov     esi, [hcursor]
852
        mov     esi, [hcursor]
853
        mov     ecx, [x]
853
        mov     ecx, [x]
854
        mov     eax, [y]
854
        mov     eax, [y]
855
 
855
 
856
        xor     edx, edx
856
        xor     edx, edx
857
        sub     ecx, [esi+CURSOR.hot_x]
857
        sub     ecx, [esi+CURSOR.hot_x]
858
        lea     ebx, [ecx+32-1]
858
        lea     ebx, [ecx+32-1]
859
        mov     [x], ecx
859
        mov     [x], ecx
860
        sets    dl
860
        sets    dl
861
        dec     edx
861
        dec     edx
862
        and     ecx, edx      ;clip x to 0<=x
862
        and     ecx, edx      ;clip x to 0<=x
863
        mov     [cur.left], ecx
863
        mov     [cur.left], ecx
864
        mov     edi, ecx
864
        mov     edi, ecx
865
        sub     edi, [x]
865
        sub     edi, [x]
866
        mov     [_dx], edi
866
        mov     [_dx], edi
867
 
867
 
868
        xor     edx, edx
868
        xor     edx, edx
869
        sub     eax, [esi+CURSOR.hot_y]
869
        sub     eax, [esi+CURSOR.hot_y]
870
        lea     edi, [eax+32-1]
870
        lea     edi, [eax+32-1]
871
        mov     [y], eax
871
        mov     [y], eax
872
        sets    dl
872
        sets    dl
873
        dec     edx
873
        dec     edx
874
        and     eax, edx      ;clip y to 0<=y
874
        and     eax, edx      ;clip y to 0<=y
875
        mov     [cur.top], eax
875
        mov     [cur.top], eax
876
        mov     edx, eax
876
        mov     edx, eax
877
        sub     edx, [y]
877
        sub     edx, [y]
878
        mov     [_dy], edx
878
        mov     [_dy], edx
879
 
879
 
880
;        mul     dword [BytesPerScanLine]
880
;        mul     dword [BytesPerScanLine]
881
        mov     eax, [BPSLine_calc_area+eax*4]
881
        mov     eax, [BPSLine_calc_area+eax*4]
882
        lea     edx, [LFB_BASE+eax+ecx*2]
882
        lea     edx, [LFB_BASE+eax+ecx*2]
883
        mov     [cur_saved_base], edx
883
        mov     [cur_saved_base], edx
884
 
884
 
885
        cmp     ebx, [_display.width]
885
        cmp     ebx, [_display.width]
886
        jb      @F
886
        jb      @F
887
        mov     ebx, [_display.width]
887
        mov     ebx, [_display.width]
888
;--------------------------------------
888
;--------------------------------------
889
align 4
889
align 4
890
@@:
890
@@:
891
        cmp     edi, [_display.height]
891
        cmp     edi, [_display.height]
892
        jb      @F
892
        jb      @F
893
        mov     edi, [_display.height]
893
        mov     edi, [_display.height]
894
;--------------------------------------
894
;--------------------------------------
895
align 4
895
align 4
896
@@:
896
@@:
897
        sub     ebx, [x]
897
        sub     ebx, [x]
898
        sub     edi, [y]
898
        sub     edi, [y]
899
        sub     ebx, [_dx]
899
        sub     ebx, [_dx]
900
        sub     edi, [_dy]
900
        sub     edi, [_dy]
901
 
901
 
902
        mov     [cur.w], ebx
902
        mov     [cur.w], ebx
903
        mov     [cur.h], edi
903
        mov     [cur.h], edi
904
        mov     [h], edi
904
        mov     [h], edi
905
 
905
 
906
        mov     eax, edi
906
        mov     eax, edi
907
        mov     edi, cur_saved_data
907
        mov     edi, cur_saved_data
908
;--------------------------------------
908
;--------------------------------------
909
align 4
909
align 4
910
@@:
910
@@:
911
        mov     esi, edx
911
        mov     esi, edx
912
        add     edx, [_display.lfb_pitch]
912
        add     edx, [_display.lfb_pitch]
913
        mov     ecx, [cur.w]
913
        mov     ecx, [cur.w]
914
 
914
 
915
        rep movsw
915
        rep movsw
916
        dec     eax
916
        dec     eax
917
        jnz     @B
917
        jnz     @B
918
 
918
 
919
;draw cursor
919
;draw cursor
920
        mov     ebx, [cur_saved_base]
920
        mov     ebx, [cur_saved_base]
921
        mov     eax, [_dy]
921
        mov     eax, [_dy]
922
        shl     eax, 5
922
        shl     eax, 5
923
        add     eax, [_dx]
923
        add     eax, [_dx]
924
 
924
 
925
        mov     esi, [hcursor]
925
        mov     esi, [hcursor]
926
        mov     esi, [esi+CURSOR.base]
926
        mov     esi, [esi+CURSOR.base]
927
        lea     edx, [esi+eax*4]
927
        lea     edx, [esi+eax*4]
928
;--------------------------------------
928
;--------------------------------------
929
align 4
929
align 4
930
.row:
930
.row:
931
        mov     ecx, [cur.w]
931
        mov     ecx, [cur.w]
932
        mov     esi, edx
932
        mov     esi, edx
933
        mov     edi, ebx
933
        mov     edi, ebx
934
        add     edx, 32*4
934
        add     edx, 32*4
935
        add     ebx, [_display.lfb_pitch]
935
        add     ebx, [_display.lfb_pitch]
936
;--------------------------------------
936
;--------------------------------------
937
align 4
937
align 4
938
.pix:
938
.pix:
939
        lodsd
939
        lodsd
940
        test    eax, 0xFF000000
940
        test    eax, 0xFF000000
941
        jz      @F
941
        jz      @F
942
; convert to 16 bpp and store to real LFB
942
; convert to 16 bpp and store to real LFB
943
        and     eax, 00000000111110001111110011111000b
943
        and     eax, 00000000111110001111110011111000b
944
        shr     ah, 2
944
        shr     ah, 2
945
        shr     ax, 3
945
        shr     ax, 3
946
        ror     eax, 8
946
        ror     eax, 8
947
        add     al, ah
947
        add     al, ah
948
        rol     eax, 8
948
        rol     eax, 8
949
        mov     [edi], ax
949
        mov     [edi], ax
950
;--------------------------------------
950
;--------------------------------------
951
align 4
951
align 4
952
@@:
952
@@:
953
        add     edi, 2
953
        add     edi, 2
954
        dec     ecx
954
        dec     ecx
955
        jnz     .pix
955
        jnz     .pix
956
 
956
 
957
        dec     [h]
957
        dec     [h]
958
        jnz     .row
958
        jnz     .row
959
        ret
959
        ret
960
endp
960
endp
961
;------------------------------------------------------------------------------
961
;------------------------------------------------------------------------------
962
align 4
962
align 4
963
check_mouse_area_for_getpixel_new:
963
check_mouse_area_for_getpixel_new:
964
; in:
964
; in:
965
; eax = x
965
; eax = x
966
; ebx = y
966
; ebx = y
967
; out:
967
; out:
968
; ecx = new color
968
; ecx = new color
969
;--------------------------------------
969
;--------------------------------------
970
; check for Y
970
; check for Y
971
        cmp     bx, [Y_UNDER_subtraction_CUR_hot_y]
971
        cmp     bx, [Y_UNDER_subtraction_CUR_hot_y]
972
        jb      .no_mouse_area
972
        jb      .no_mouse_area
973
 
973
 
974
        cmp     bx, [Y_UNDER_sub_CUR_hot_y_add_curh]
974
        cmp     bx, [Y_UNDER_sub_CUR_hot_y_add_curh]
975
        jae     .no_mouse_area
975
        jae     .no_mouse_area
976
;--------------------------------------
976
;--------------------------------------
977
; check for X
977
; check for X
978
        cmp     ax, [X_UNDER_subtraction_CUR_hot_x]
978
        cmp     ax, [X_UNDER_subtraction_CUR_hot_x]
979
        jb      .no_mouse_area
979
        jb      .no_mouse_area
980
 
980
 
981
        cmp     ax, [X_UNDER_sub_CUR_hot_x_add_curh]
981
        cmp     ax, [X_UNDER_sub_CUR_hot_x_add_curh]
982
        jae     .no_mouse_area
982
        jae     .no_mouse_area
983
;--------------------------------------
983
;--------------------------------------
984
        push    eax ebx
984
        push    eax ebx
985
; offset X
985
; offset X
986
        movzx   ecx, word [X_UNDER_subtraction_CUR_hot_x]
986
        movzx   ecx, word [X_UNDER_subtraction_CUR_hot_x]
987
        sub     eax, ecx        ; x1
987
        sub     eax, ecx        ; x1
988
; offset Y
988
; offset Y
989
        movzx   ecx, word [Y_UNDER_subtraction_CUR_hot_y]
989
        movzx   ecx, word [Y_UNDER_subtraction_CUR_hot_y]
990
        sub     ebx, ecx        ; y1
990
        sub     ebx, ecx        ; y1
991
;--------------------------------------
991
;--------------------------------------
992
; ebx = offset y
992
; ebx = offset y
993
; eax = offset x
993
; eax = offset x
994
        imul    ebx, [cur.w]     ;y
994
        imul    ebx, [cur.w]     ;y
995
        add     eax, ebx
995
        add     eax, ebx
996
        mov     ebx, eax
996
        mov     ebx, eax
997
        shl     eax, 2
997
        shl     eax, 2
998
        cmp     byte [_display.bits_per_pixel], 32
998
        cmp     byte [_display.bits_per_pixel], 32
999
        je      @f
999
        je      @f
1000
        sub     eax, ebx
1000
        sub     eax, ebx
1001
        cmp     byte [_display.bits_per_pixel], 24
1001
        cmp     byte [_display.bits_per_pixel], 24
1002
        je      @f
1002
        je      @f
1003
        sub     eax, ebx
1003
        sub     eax, ebx
-
 
1004
        add     eax, cur_saved_data
-
 
1005
        mov     ecx, [eax]
-
 
1006
        shl     ecx, 3
-
 
1007
        ror     ecx, 8
-
 
1008
        shl     cx, 2
-
 
1009
        ror     ecx, 8
-
 
1010
        shl     cl, 3
-
 
1011
        rol     ecx, 16
-
 
1012
        or      ecx, 0xff000000
-
 
1013
        pop     ebx eax
-
 
1014
        ret
-
 
1015
 
1004
;--------------------------------------
1016
;--------------------------------------
1005
align 4
1017
align 4
1006
@@:
1018
@@:
1007
        add     eax, cur_saved_data
1019
        add     eax, cur_saved_data
1008
        mov     ecx, [eax]
1020
        mov     ecx, [eax]
1009
        and     ecx, 0xffffff
-
 
1010
        add     ecx, 0xff000000
1021
        or      ecx, 0xff000000
1011
        pop     ebx eax
1022
        pop     ebx eax
1012
        ret
1023
        ret
1013
;--------------------------------------
1024
;--------------------------------------
1014
align 4
1025
align 4
1015
.no_mouse_area:
1026
.no_mouse_area:
1016
        xor     ecx, ecx
1027
        xor     ecx, ecx
1017
        ret
1028
        ret
1018
;-----------------------------------------------------------------------------
1029
;-----------------------------------------------------------------------------
1019
align 4
1030
align 4
1020
check_mouse_area_for_putpixel_new:
1031
check_mouse_area_for_putpixel_new:
1021
; in:
1032
; in:
1022
; ecx = x shl 16 + y
1033
; ecx = x shl 16 + y
1023
; eax = color
1034
; eax = color
1024
; out:
1035
; out:
1025
; eax = new color
1036
; eax = new color
1026
;--------------------------------------
1037
;--------------------------------------
1027
; check for Y
1038
; check for Y
1028
        cmp     cx, [Y_UNDER_sub_CUR_hot_y_add_curh]
1039
        cmp     cx, [Y_UNDER_sub_CUR_hot_y_add_curh]
1029
        jae     .no_mouse_area
1040
        jae     .no_mouse_area
1030
 
1041
 
1031
        sub     cx, [Y_UNDER_subtraction_CUR_hot_y]
1042
        sub     cx, [Y_UNDER_subtraction_CUR_hot_y]
1032
        jb      .no_mouse_area
1043
        jb      .no_mouse_area
1033
 
1044
 
1034
        rol     ecx, 16
1045
        rol     ecx, 16
1035
;--------------------------------------
1046
;--------------------------------------
1036
; check for X
1047
; check for X
1037
        cmp     cx, [X_UNDER_sub_CUR_hot_x_add_curh]
1048
        cmp     cx, [X_UNDER_sub_CUR_hot_x_add_curh]
1038
        jae     .no_mouse_area
1049
        jae     .no_mouse_area
1039
 
1050
 
1040
        sub     cx, [X_UNDER_subtraction_CUR_hot_x]
1051
        sub     cx, [X_UNDER_subtraction_CUR_hot_x]
1041
        jb      .no_mouse_area
1052
        jb      .no_mouse_area
1042
 
1053
 
1043
        ror     ecx, 16
1054
        ror     ecx, 16
1044
;--------------------------------------
1055
;--------------------------------------
1045
align 4
1056
align 4
1046
.1:
1057
.1:
1047
        push    eax
1058
        push    eax
1048
;--------------------------------------
1059
;--------------------------------------
1049
; ecx = (offset x) shl 16 + (offset y)
1060
; ecx = (offset x) shl 16 + (offset y)
1050
        push    ebx
1061
        push    ebx
1051
        mov     ebx, ecx
1062
        mov     ebx, ecx
1052
        shr     ebx, 16        ; x
1063
        shr     ebx, 16        ; x
1053
        and     ecx, 0xffff    ; y
1064
        and     ecx, 0xffff    ; y
1054
 
1065
 
1055
        cmp     ecx, [cur.h]
1066
        cmp     ecx, [cur.h]
1056
        jae     @f
1067
        jae     @f
1057
 
1068
 
1058
        cmp     ebx, [cur.w]
1069
        cmp     ebx, [cur.w]
1059
        jb      .ok
1070
        jb      .ok
1060
;--------------------------------------
1071
;--------------------------------------
1061
align 4
1072
align 4
1062
@@:
1073
@@:
1063
;        DEBUGF  1, "K : SHIT HAPPENS: %x %x \n", ecx,ebx
1074
;        DEBUGF  1, "K : SHIT HAPPENS: %x %x \n", ecx,ebx
1064
        pop     ebx
1075
        pop     ebx
1065
        jmp     .sh   ; SORRY! SHIT HAPPENS!
1076
        jmp     .sh   ; SORRY! SHIT HAPPENS!
1066
;--------------------------------------
1077
;--------------------------------------
1067
align 4
1078
align 4
1068
.ok:
1079
.ok:
1069
; ecx = offset y
1080
; ecx = offset y
1070
; ebx = offset x
1081
; ebx = offset x
1071
        push    ebx ecx
1082
        push    ebx ecx
1072
        imul    ecx, [cur.w]    ;y
1083
        imul    ecx, [cur.w]    ;y
1073
        add     ecx, ebx
1084
        add     ecx, ebx
1074
        mov     ebx, ecx
1085
        mov     ebx, ecx
1075
        shl     ecx, 2
1086
        shl     ecx, 2
1076
        cmp     byte [_display.bits_per_pixel], 16
1087
        cmp     byte [_display.bits_per_pixel], 16
1077
        je      .16
1088
        je      .16
1078
        cmp     byte [_display.bits_per_pixel], 24
1089
        cmp     byte [_display.bits_per_pixel], 24
1079
        je      .24
1090
        je      .24
1080
        and     eax, 0xFFFFFF
1091
        and     eax, 0xFFFFFF
1081
        mov     [ecx + cur_saved_data], eax   ;store new color  to
1092
        mov     [ecx + cur_saved_data], eax   ;store new color  to
1082
        jmp     @f
1093
        jmp     @f
1083
;--------------------------------------
1094
;--------------------------------------
1084
align 4
1095
align 4
1085
.16:
1096
.16:
1086
        sub     ecx, ebx
1097
        sub     ecx, ebx
1087
        sub     ecx, ebx
1098
        sub     ecx, ebx
1088
; convert to 16 bpp and store to real LFB
1099
; convert to 16 bpp and store to real LFB
1089
        and     eax, 00000000111110001111110011111000b
1100
        and     eax, 00000000111110001111110011111000b
1090
        shr     ah, 2
1101
        shr     ah, 2
1091
        shr     ax, 3
1102
        shr     ax, 3
1092
        ror     eax, 8
1103
        ror     eax, 8
1093
        add     al, ah
1104
        add     al, ah
1094
        rol     eax, 8
1105
        rol     eax, 8
1095
        mov     [ecx + cur_saved_data], ax      ;store new color  to
1106
        mov     [ecx + cur_saved_data], ax      ;store new color  to
1096
        jmp     @f
1107
        jmp     @f
1097
;--------------------------------------
1108
;--------------------------------------
1098
align 4
1109
align 4
1099
.24:
1110
.24:
1100
        sub     ecx, ebx
1111
        sub     ecx, ebx
1101
        mov     [ecx + cur_saved_data], ax      ;store new color  to
1112
        mov     [ecx + cur_saved_data], ax      ;store new color  to
1102
        shr     eax, 16
1113
        shr     eax, 16
1103
        mov     [ecx + cur_saved_data + 2], al  ;store new color  to
1114
        mov     [ecx + cur_saved_data + 2], al  ;store new color  to
1104
;--------------------------------------
1115
;--------------------------------------
1105
align 4
1116
align 4
1106
@@:
1117
@@:
1107
        pop     ecx ebx
1118
        pop     ecx ebx
1108
 
1119
 
1109
        shl     ecx, 5
1120
        shl     ecx, 5
1110
        add     ecx, ebx
1121
        add     ecx, ebx
1111
 
1122
 
1112
        mov     eax, [current_cursor]
1123
        mov     eax, [current_cursor]
1113
        mov     eax, [eax+CURSOR.base]
1124
        mov     eax, [eax+CURSOR.base]
1114
        lea     eax, [eax+ecx*4]
1125
        lea     eax, [eax+ecx*4]
1115
        mov     eax, [eax]
1126
        mov     eax, [eax]
1116
 
1127
 
1117
        pop     ebx
1128
        pop     ebx
1118
 
1129
 
1119
        test    eax, 0xFF000000
1130
        test    eax, 0xFF000000
1120
        jz      @f
1131
        jz      @f
1121
 
1132
 
1122
        add     esp, 4
1133
        add     esp, 4
1123
        ret
1134
        ret
1124
;--------------------------------------
1135
;--------------------------------------
1125
align 4
1136
align 4
1126
.sh:
1137
.sh:
1127
        mov     ecx, -1
1138
        mov     ecx, -1
1128
;--------------------------------------
1139
;--------------------------------------
1129
align 4
1140
align 4
1130
@@:
1141
@@:
1131
        pop     eax
1142
        pop     eax
1132
;--------------------------------------
1143
;--------------------------------------
1133
align 4
1144
align 4
1134
.no_mouse_area:
1145
.no_mouse_area:
1135
        ret
1146
        ret
1136
;------------------------------------------------------------------------------
1147
;------------------------------------------------------------------------------
1137
align 4
1148
align 4
1138
get_display:
1149
get_display:
1139
        mov     eax, _display
1150
        mov     eax, _display
1140
        ret
1151
        ret
1141
;------------------------------------------------------------------------------
1152
;------------------------------------------------------------------------------
1142
align 4
1153
align 4
1143
init_display:
1154
init_display:
1144
        xor     eax, eax
1155
        xor     eax, eax
1145
        mov     edi, _display
1156
        mov     edi, _display
1146
 
1157
 
1147
        mov     [edi+display_t.init_cursor], eax
1158
        mov     [edi+display_t.init_cursor], eax
1148
        mov     [edi+display_t.select_cursor], eax
1159
        mov     [edi+display_t.select_cursor], eax
1149
        mov     [edi+display_t.show_cursor], eax
1160
        mov     [edi+display_t.show_cursor], eax
1150
        mov     [edi+display_t.move_cursor], eax
1161
        mov     [edi+display_t.move_cursor], eax
1151
        mov     [edi+display_t.restore_cursor], eax
1162
        mov     [edi+display_t.restore_cursor], eax
1152
 
1163
 
1153
        lea     ecx, [edi+display_t.cr_list.next]
1164
        lea     ecx, [edi+display_t.cr_list.next]
1154
        mov     [edi+display_t.cr_list.next], ecx
1165
        mov     [edi+display_t.cr_list.next], ecx
1155
        mov     [edi+display_t.cr_list.prev], ecx
1166
        mov     [edi+display_t.cr_list.prev], ecx
1156
 
1167
 
1157
        cmp     [SCR_MODE], word 0x13
1168
        cmp     [SCR_MODE], word 0x13
1158
        jbe     .fail
1169
        jbe     .fail
1159
 
1170
 
1160
        test    word [SCR_MODE], 0x4000
1171
        test    word [SCR_MODE], 0x4000
1161
        jz      .fail
1172
        jz      .fail
1162
 
1173
 
1163
        mov     ebx, restore_32
1174
        mov     ebx, restore_32
1164
        mov     ecx, move_cursor_32
1175
        mov     ecx, move_cursor_32
1165
        mov     edx, Vesa20_putpixel32_new
1176
        mov     edx, Vesa20_putpixel32_new
1166
        mov     eax, [_display.bits_per_pixel]
1177
        mov     eax, [_display.bits_per_pixel]
1167
        cmp     al, 32
1178
        cmp     al, 32
1168
        jne     .not_32bpp
1179
        jne     .not_32bpp
1169
 
1180
 
1170
.set:
1181
.set:
1171
        mov     [_display.select_cursor], select_cursor
1182
        mov     [_display.select_cursor], select_cursor
1172
        mov     [_display.move_cursor], ecx
1183
        mov     [_display.move_cursor], ecx
1173
        mov     [_display.restore_cursor], ebx
1184
        mov     [_display.restore_cursor], ebx
1174
        mov     [_display.check_mouse], check_mouse_area_for_putpixel_new
1185
        mov     [_display.check_mouse], check_mouse_area_for_putpixel_new
1175
        mov     [_display.check_m_pixel], check_mouse_area_for_getpixel_new
1186
        mov     [_display.check_m_pixel], check_mouse_area_for_getpixel_new
1176
 
1187
 
1177
        cmp     [PUTPIXEL], dword VGA_putpixel
1188
        cmp     [PUTPIXEL], dword VGA_putpixel
1178
        je      @f
1189
        je      @f
1179
        mov     [PUTPIXEL], edx
1190
        mov     [PUTPIXEL], edx
1180
@@:
1191
@@:
1181
        stdcall load_cursor, clock_arrow, dword LOAD_FROM_MEM
1192
        stdcall load_cursor, clock_arrow, dword LOAD_FROM_MEM
1182
        mov     [def_cursor_clock], eax
1193
        mov     [def_cursor_clock], eax
1183
        stdcall load_cursor, def_arrow, dword LOAD_FROM_MEM
1194
        stdcall load_cursor, def_arrow, dword LOAD_FROM_MEM
1184
        mov     [def_cursor], eax
1195
        mov     [def_cursor], eax
1185
        ret
1196
        ret
1186
 
1197
 
1187
.not_32bpp:
1198
.not_32bpp:
1188
        cmp     al, 24
1199
        cmp     al, 24
1189
        jne     .not_24bpp
1200
        jne     .not_24bpp
1190
 
1201
 
1191
        mov     ebx, restore_24
1202
        mov     ebx, restore_24
1192
        mov     ecx, move_cursor_24
1203
        mov     ecx, move_cursor_24
1193
        mov     edx, Vesa20_putpixel24_new
1204
        mov     edx, Vesa20_putpixel24_new
1194
        jmp     .set
1205
        jmp     .set
1195
 
1206
 
1196
.not_24bpp:
1207
.not_24bpp:
1197
        cmp     al, 16
1208
        cmp     al, 16
1198
        jne     .not_16bpp
1209
        jne     .not_16bpp
1199
        mov     ebx, restore_16
1210
        mov     ebx, restore_16
1200
        mov     ecx, move_cursor_16
1211
        mov     ecx, move_cursor_16
1201
        mov     edx, Vesa20_putpixel16_new
1212
        mov     edx, Vesa20_putpixel16_new
1202
        jmp     .set
1213
        jmp     .set
1203
 
1214
 
1204
.not_16bpp:
1215
.not_16bpp:
1205
;        cmp     al, 15
1216
;        cmp     al, 15
1206
;        jne     .fail
1217
;        jne     .fail
1207
;        mov     ebx, restore_15
1218
;        mov     ebx, restore_15
1208
;        mov     ecx, move_cursor_15
1219
;        mov     ecx, move_cursor_15
1209
;        mov     edx, Vesa20_putpixel15_new
1220
;        mov     edx, Vesa20_putpixel15_new
1210
;        jmp     .set
1221
;        jmp     .set
1211
 
1222
 
1212
.fail:
1223
.fail:
1213
        xor     eax, eax
1224
        xor     eax, eax
1214
        mov     [_display.select_cursor], eax
1225
        mov     [_display.select_cursor], eax
1215
        mov     [_display.move_cursor], eax
1226
        mov     [_display.move_cursor], eax
1216
        ret
1227
        ret
1217
;------------------------------------------------------------------------------
1228
;------------------------------------------------------------------------------
1218
align 4
1229
align 4
1219
def_arrow:
1230
def_arrow:
1220
  file 'arrow.cur'
1231
  file 'arrow.cur'
1221
;------------------------------------------------------------------------------
1232
;------------------------------------------------------------------------------
1222
align 4
1233
align 4
1223
clock_arrow:
1234
clock_arrow:
1224
  file 'arrow_clock.cur'
1235
  file 'arrow_clock.cur'
1225
;------------------------------------------------------------------------------
1236
;------------------------------------------------------------------------------
1226
>
1237
>
1227
>
1238
>
1228
>
1239
>
1229
>
1240
>
1230
>
1241
>
1231
>
1242
>