Rev 1376 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1376 | Rev 2382 | ||
---|---|---|---|
Line 3... | Line 3... | ||
3 | ;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; |
3 | ;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; |
4 | ;; Copyright (C) MenuetOS 2000-2004 Ville Mikael Turjanmaa ;; |
4 | ;; Copyright (C) MenuetOS 2000-2004 Ville Mikael Turjanmaa ;; |
5 | ;; Distributed under terms of the GNU General Public License ;; |
5 | ;; Distributed under terms of the GNU General Public License ;; |
6 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
6 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
Line 7... | Line 7... | ||
7 | 7 | ||
- | 8 | $Revision: 2382 $ |
|
- | 9 | ||
- | 10 | WINDOW_MOVE_AND_RESIZE_FLAGS = \ |
|
- | 11 | mouse.WINDOW_RESIZE_N_FLAG + \ |
|
- | 12 | mouse.WINDOW_RESIZE_W_FLAG + \ |
|
- | 13 | mouse.WINDOW_RESIZE_S_FLAG + \ |
|
- | 14 | mouse.WINDOW_RESIZE_E_FLAG + \ |
|
Line 8... | Line 15... | ||
8 | $Revision: 1376 $ |
15 | mouse.WINDOW_MOVE_FLAG |
9 | 16 | ||
10 | uglobal |
17 | uglobal |
11 | align 4 |
18 | align 4 |
Line 23... | Line 30... | ||
23 | jz .fail |
30 | jz .fail |
24 | ; eax - current event, ebx - previos event below |
31 | ; eax - current event, ebx - previos event below |
25 | mov ecx,EV_SPACE ; current - in allocated space |
32 | mov ecx, EV_SPACE ; current - in allocated space |
26 | mov ebx,FreeEvents ; previos - íà÷àëî ñïèñêà |
33 | mov ebx, FreeEvents ; previos - íà÷àëî ñïèñêà |
27 | push ebx ; îíî æå è êîíåö ïîòîì áóäåò |
34 | push ebx ; îíî æå è êîíåö ïîòîì áóäåò |
- | 35 | @@: |
|
28 | @@: mov [ebx+EVENT.fd],eax |
36 | mov [ebx+EVENT.fd], eax |
29 | mov [eax+EVENT.bk],ebx |
37 | mov [eax+EVENT.bk], ebx |
30 | mov ebx,eax ; previos <- current |
38 | mov ebx, eax ; previos <- current |
31 | add eax,EVENT.size ; new current |
39 | add eax, EVENT.size ; new current |
32 | loop @b |
40 | loop @b |
33 | pop eax ; âîò îíî êîíöîì è ñòàëî |
41 | pop eax ; âîò îíî êîíöîì è ñòàëî |
34 | mov [ebx+EVENT.fd],eax |
42 | mov [ebx+EVENT.fd], eax |
35 | mov [eax+EVENT.bk],ebx |
43 | mov [eax+EVENT.bk], ebx |
- | 44 | .fail: |
|
36 | .fail: ret |
45 | ret |
Line 37... | Line 46... | ||
37 | 46 | ||
38 | EVENT_WATCHED equ 0x10000000 ;áèò 28 |
47 | EVENT_WATCHED equ 0x10000000 ;áèò 28 |
39 | EVENT_SIGNALED equ 0x20000000 ;áèò 29 |
48 | EVENT_SIGNALED equ 0x20000000 ;áèò 29 |
40 | MANUAL_RESET equ 0x40000000 ;áèò 30 |
49 | MANUAL_RESET equ 0x40000000 ;áèò 30 |
Line 78... | Line 87... | ||
78 | jne @f ; not empty ??? |
87 | jne @f ; not empty ??? |
79 | pushad |
88 | pushad |
80 | call init_events |
89 | call init_events |
81 | popad |
90 | popad |
82 | jz RemoveEventTo.break ; POPF+RET |
91 | jz RemoveEventTo.break ; POPF+RET |
- | 92 | @@: |
|
83 | @@: mov eax,[eax+EVENT.fd] |
93 | mov eax, [eax+EVENT.fd] |
84 | mov [eax+EVENT.magic],'EVNT' |
94 | mov [eax+EVENT.magic], 'EVNT' |
85 | mov [eax+EVENT.destroy],destroy_event.internal |
95 | mov [eax+EVENT.destroy], destroy_event.internal |
86 | mov [eax+EVENT.state],ecx |
96 | mov [eax+EVENT.state], ecx |
87 | mov [eax+EVENT.pid],edx |
97 | mov [eax+EVENT.pid], edx |
88 | inc [event_uid] |
98 | inc [event_uid] |
Line 106... | Line 116... | ||
106 | mov [ecx+EVENT.bk],eax ; NewRight.bk=Self |
116 | mov [ecx+EVENT.bk], eax ; NewRight.bk=Self |
107 | xchg ebx,[eax+EVENT.bk] ; Self.bk=NewLeft, ebx=OldLeft |
117 | xchg ebx, [eax+EVENT.bk] ; Self.bk=NewLeft, ebx=OldLeft |
108 | xchg ecx,[eax+EVENT.fd] ; Self.fd=NewRight, ecx=OldRight |
118 | xchg ecx, [eax+EVENT.fd] ; Self.fd=NewRight, ecx=OldRight |
109 | mov [ebx+EVENT.fd],ecx ; OldLeft.fd=OldRight |
119 | mov [ebx+EVENT.fd], ecx ; OldLeft.fd=OldRight |
110 | mov [ecx+EVENT.bk],ebx ; OldRight.bk=OldLeft |
120 | mov [ecx+EVENT.bk], ebx ; OldRight.bk=OldLeft |
- | 121 | .break: |
|
111 | .break: popfd |
122 | popfd |
112 | ret |
123 | ret |
Line 113... | Line 124... | ||
113 | 124 | ||
114 | align 4 |
125 | align 4 |
115 | NotDummyTest: ;; INTERNAL use (not returned for fail !!!) |
126 | NotDummyTest: ;; INTERNAL use (not returned for fail !!!) |
Line 204... | Line 215... | ||
204 | ; ebx - uid (for Dummy testing) |
215 | ; ebx - uid (for Dummy testing) |
205 | cmp [eax+EVENT.magic],'EVNT' |
216 | cmp [eax+EVENT.magic], 'EVNT' |
206 | jne @f |
217 | jne @f |
207 | cmp [eax+EVENT.id],ebx |
218 | cmp [eax+EVENT.id], ebx |
208 | je .ret |
219 | je .ret |
- | 220 | @@: |
|
209 | @@: pop eax |
221 | pop eax |
210 | xor eax,eax |
222 | xor eax, eax |
- | 223 | .ret: |
|
211 | .ret: ret |
224 | ret |
Line 212... | Line 225... | ||
212 | 225 | ||
213 | 226 | ||
214 | align 4 |
227 | align 4 |
Line 245... | Line 258... | ||
245 | Mov [esi+APPDATA.wait_begin],eax,[timer_ticks] |
258 | Mov [esi+APPDATA.wait_begin],eax,[timer_ticks] |
246 | mov eax,[TASK_BASE] |
259 | mov eax, [TASK_BASE] |
247 | mov [eax+TASKDATA.state], 5 |
260 | mov [eax+TASKDATA.state], 5 |
248 | call change_task |
261 | call change_task |
249 | mov eax,[esi+APPDATA.wait_param] |
262 | mov eax, [esi+APPDATA.wait_param] |
- | 263 | @@: |
|
250 | @@: ret |
264 | ret |
Line 251... | Line 265... | ||
251 | 265 | ||
252 | align 4 |
266 | align 4 |
253 | wait_event: ;; EXPORT use |
267 | wait_event: ;; EXPORT use |
254 | ;info: |
268 | ;info: |
Line 337... | Line 351... | ||
337 | ; eax - àäðåñ îáúåêòà EVENT (=0 => fail) |
351 | ; eax - àäðåñ îáúåêòà EVENT (=0 => fail) |
338 | add ebx,APP_EV_OFFSET |
352 | add ebx, APP_EV_OFFSET |
339 | mov eax,[ebx+APPOBJ.bk] ; âûáèðàåì ñ êîíöà, ïî ïðèíöèïó FIFO |
353 | mov eax, [ebx+APPOBJ.bk] ; âûáèðàåì ñ êîíöà, ïî ïðèíöèïó FIFO |
340 | cmp eax,ebx ; empty ??? |
354 | cmp eax, ebx ; empty ??? |
341 | je get_event_alone.ret0 |
355 | je get_event_alone.ret0 |
- | 356 | .ret: |
|
342 | .ret: ret |
357 | ret |
Line 343... | Line 358... | ||
343 | 358 | ||
344 | align 4 |
359 | align 4 |
345 | get_event_alone: |
360 | get_event_alone: |
346 | ;info: |
361 | ;info: |
Line 355... | Line 370... | ||
355 | ; eax - àäðåñ îáúåêòà EVENT (=0 => fail) |
370 | ; eax - àäðåñ îáúåêòà EVENT (=0 => fail) |
356 | mov eax,[ebx+APPDATA.wait_param] |
371 | mov eax, [ebx+APPDATA.wait_param] |
357 | test byte[eax+EVENT.state+3], EVENT_SIGNALED shr 24 |
372 | test byte[eax+EVENT.state+3], EVENT_SIGNALED shr 24 |
358 | jnz .ret |
373 | jnz .ret |
359 | or byte[eax+EVENT.state+3], EVENT_WATCHED shr 24 |
374 | or byte[eax+EVENT.state+3], EVENT_WATCHED shr 24 |
- | 375 | .ret0: |
|
360 | .ret0: xor eax,eax ; NO event!!! |
376 | xor eax, eax; NO event!!! |
- | 377 | .ret: |
|
361 | .ret: ret |
378 | ret |
Line 362... | Line 379... | ||
362 | 379 | ||
363 | align 4 |
380 | align 4 |
364 | sys_sendwindowmsg: ;; f72 |
381 | sys_sendwindowmsg: ;; f72 |
365 | dec ebx |
382 | dec ebx |
366 | jnz .ret ;subfunction==1 ? |
383 | jnz .ret ;subfunction==1 ? |
367 | ;pushfd ;à íàôèãà? |
384 | ;pushfd ;à íàôèãà? |
368 | cli |
385 | cli |
369 | sub ecx,2 |
386 | sub ecx, 2 |
- | 387 | je .sendkey |
|
370 | je .sendkey |
388 | dec ecx |
371 | loop .retf |
389 | jnz .retf |
372 | .sendbtn: |
390 | .sendbtn: |
373 | cmp byte[BTN_COUNT],1 |
391 | cmp byte[BTN_COUNT], 1 |
374 | jae .result ;overflow |
392 | jae .result ;overflow |
- | 393 | inc byte[BTN_COUNT] |
|
375 | inc byte[BTN_COUNT] |
394 | shl edx, 8 |
376 | mov [BTN_BUFF],edx |
395 | mov [BTN_BUFF], edx |
377 | jmp .result |
396 | jmp .result |
378 | .sendkey: |
397 | .sendkey: |
379 | movzx eax,byte[KEY_COUNT] |
398 | movzx eax, byte[KEY_COUNT] |
Line 382... | Line 401... | ||
382 | inc byte[KEY_COUNT] |
401 | inc byte[KEY_COUNT] |
383 | mov [KEY_COUNT+1+eax],dl |
402 | mov [KEY_COUNT+1+eax], dl |
384 | .result: |
403 | .result: |
385 | setae byte[esp+32] ;ñ÷èòàåì, ÷òî èñõîäíî: dword[esp+32]==72 |
404 | setae byte[esp+32] ;ñ÷èòàåì, ÷òî èñõîäíî: dword[esp+32]==72 |
386 | .retf: ;popfd |
405 | .retf: ;popfd |
- | 406 | .ret: |
|
387 | .ret: ret |
407 | ret |
Line 388... | Line 408... | ||
388 | 408 | ||
389 | align 4 |
409 | align 4 |
390 | sys_getevent: ;; f11 |
410 | sys_getevent: ;; f11 |
391 | mov ebx,[current_slot] ;ïîêà ýòî âîïðîñ, ÷åãî êóäû ñóâàòü.......... |
411 | mov ebx, [current_slot];ïîêà ýòî âîïðîñ, ÷åãî êóäû ñóâàòü.......... |
Line 424... | Line 444... | ||
424 | .loop: ; ïîêà íå èñ÷åðïàåì âñå áèòû ìàñêè |
444 | .loop: ; ïîêà íå èñ÷åðïàåì âñå áèòû ìàñêè |
425 | bsr eax,ecx ; íàõîäèì íåíóëåâîé áèò ìàñêè (31 -> 0) |
445 | bsr eax, ecx ; íàõîäèì íåíóëåâîé áèò ìàñêè (31 -> 0) |
426 | jz .no_events ; èñ÷åðïàëè âñå áèòû ìàñêè, íî íè÷åãî íå íàøëè ??? |
446 | jz .no_events ; èñ÷åðïàëè âñå áèòû ìàñêè, íî íè÷åãî íå íàøëè ??? |
427 | btr ecx,eax ; ñáðàñûâàåì ïðîâåðÿåìûé áèò ìàñêè |
447 | btr ecx, eax ; ñáðàñûâàåì ïðîâåðÿåìûé áèò ìàñêè |
428 | ; ïåðåõîäèì íà îáðàáîò÷èê ýòîãî (eax) áèòà |
448 | ; ïåðåõîäèì íà îáðàáîò÷èê ýòîãî (eax) áèòà |
429 | cmp eax,16 |
- | |
430 | jae .IRQ ; eax=[16..31]=retvals, events irq0..irq15 |
- | |
431 | cmp eax,9 |
449 | cmp eax, 9 |
432 | jae .loop ; eax=[9..15], ignored |
450 | jae .loop ; eax=[9..31], ignored |
433 | cmp eax,3 |
451 | cmp eax, 3 |
434 | je .loop ; eax=3, ignored |
452 | je .loop ; eax=3, ignored |
435 | ja .FlagAutoReset ; eax=[4..8], retvals=eax+1 |
453 | ja .FlagAutoReset ; eax=[4..8], retvals=eax+1 |
436 | cmp eax,1 |
454 | cmp eax, 1 |
437 | jae .BtKy ; eax=[1,2], retvals=eax+1 |
455 | jae .BtKy ; eax=[1,2], retvals=eax+1 |
Line 440... | Line 458... | ||
440 | jne .result |
458 | jne .result |
441 | jmp .loop |
459 | jmp .loop |
442 | .no_events: |
460 | .no_events: |
443 | xor eax,eax |
461 | xor eax, eax |
444 | ret |
462 | ret |
445 | .IRQ: |
463 | |
446 | ;TODO: ñäåëàòü òàê æå, êàê è äëÿ FlagAutoReset (BgrRedraw,Mouse,IPC,Stack,Debug) |
- | |
447 | mov edx,[irq_owner+eax*4-64] ; eax==16+irq |
- | |
448 | cmp edx,[edi+TASKDATA.pid] |
- | |
449 | jne .loop |
- | |
450 | mov edx,eax |
- | |
451 | shl edx,12 |
- | |
452 | cmp dword[IRQ_SAVE+edx-0x10000],0 ; edx==(16+irq)*0x1000 |
- | |
453 | je .loop ; empty ??? |
- | |
454 | ret ; retval = eax |
- | |
455 | .FlagAutoReset: ; retvals: BgrRedraw=5, Mouse=6, IPC=7, Stack=8, Debug=9 |
464 | .FlagAutoReset: ; retvals: BgrRedraw=5, Mouse=6, IPC=7, Stack=8, Debug=9 |
- | 465 | cmp eax, 5; Mouse 5+1=6 |
|
- | 466 | jne @f |
|
- | 467 | push eax |
|
- | 468 | ; If the window is captured and moved by the user, then no mouse events!!! |
|
- | 469 | mov al, [mouse.active_sys_window.action] |
|
- | 470 | and al, WINDOW_MOVE_AND_RESIZE_FLAGS |
|
- | 471 | test al, al |
|
- | 472 | pop eax |
|
- | 473 | jnz .loop |
|
- | 474 | @@: |
|
456 | btr [ebx+APPDATA.event_mask],eax |
475 | btr [ebx+APPDATA.event_mask], eax |
457 | jnc .loop |
476 | jnc .loop |
458 | .result: ; retval = eax+1 |
477 | .result: ; retval = eax+1 |
459 | inc eax |
478 | inc eax |
460 | ret |
479 | ret |
Line 465... | Line 484... | ||
465 | .Buttons: ; eax=2, retval Buttons=3 |
484 | .Buttons: ; eax=2, retval Buttons=3 |
466 | cmp byte[BTN_COUNT],0 |
485 | cmp byte[BTN_COUNT], 0 |
467 | je .loop ; empty ??? |
486 | je .loop ; empty ??? |
468 | cmp edx,[TASK_COUNT] |
487 | cmp edx, [TASK_COUNT] |
469 | jne .loop ; not Top ??? |
488 | jne .loop ; not Top ??? |
- | 489 | mov edx, [BTN_BUFF] |
|
- | 490 | shr edx, 8 |
|
470 | cmp dword[BTN_BUFF],0xFFFF ;-ID for Minimize-Button of Form |
491 | cmp edx, 0xFFFF ;-ID for Minimize-Button of Form |
471 | jne .result |
492 | jne .result |
472 | mov [window_minimize],1 |
493 | mov [window_minimize], 1 |
473 | dec byte[BTN_COUNT] |
494 | dec byte[BTN_COUNT] |
474 | jmp .loop |
495 | jmp .loop |
475 | .Keys: ; eax==1 |
496 | .Keys: ; eax==1 |
476 | cmp edx,[TASK_COUNT] |
497 | cmp edx, [TASK_COUNT] |
477 | jne @f ; not Top ??? |
498 | jne @f ; not Top ??? |
478 | cmp [KEY_COUNT],al ; al==1 |
499 | cmp [KEY_COUNT], al; al==1 |
479 | jae .result ; not empty ??? |
500 | jae .result ; not empty ??? |
- | 501 | @@: |
|
480 | @@: mov edx, hotkey_buffer |
502 | mov edx, hotkey_buffer |
- | 503 | @@: |
|
481 | @@: cmp [edx],bh ; bh - slot for testing |
504 | cmp [edx], bh ; bh - slot for testing |
482 | je .result |
505 | je .result |
483 | add edx,8 |
506 | add edx, 8 |
484 | cmp edx, hotkey_buffer+120*8 |
507 | cmp edx, hotkey_buffer+120*8 |
485 | jb @b |
508 | jb @b |
486 | jmp .loop |
509 | jmp .loop |