Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 2433 → Rev 2434

/kernel/branches/Kolibri-acpi/gui/event.inc
25,7 → 25,7
; FreeEvents.fd=event_start è FreeEvents.bk=event_end
align 4
init_events: ;; used from kernel.asm
stdcall kernel_alloc,EV_SPACE*EVENT.size
stdcall kernel_alloc, EV_SPACE*sizeof.EVENT
or eax,eax
jz .fail
; eax - current event, ebx - previos event below
32,15 → 32,17
mov ecx,EV_SPACE ; current - in allocated space
mov ebx,FreeEvents ; previos - íà÷àëî ñïèñêà
push ebx ; îíî æå è êîíåö ïîòîì áóäåò
@@: mov [ebx+EVENT.fd],eax
@@:
mov [ebx+EVENT.fd], eax
mov [eax+EVENT.bk],ebx
mov ebx,eax ; previos <- current
add eax,EVENT.size ; new current
add eax, sizeof.EVENT ; new current
loop @b
pop eax ; âîò îíî êîíöîì è ñòàëî
mov [ebx+EVENT.fd],eax
mov [eax+EVENT.bk],ebx
.fail: ret
.fail:
ret
 
EVENT_WATCHED equ 0x10000000 ;áèò 28
EVENT_SIGNALED equ 0x20000000 ;áèò 29
87,7 → 89,8
call init_events
popad
jz RemoveEventTo.break ; POPF+RET
@@: mov eax,[eax+EVENT.fd]
@@:
mov eax, [eax+EVENT.fd]
mov [eax+EVENT.magic],'EVNT'
mov [eax+EVENT.destroy],destroy_event.internal
mov [eax+EVENT.state],ecx
97,7 → 100,7
or esi,esi
jz RemoveEventTo
lea edi,[eax+EVENT.code]
mov ecx,EVENT.codesize/4
mov ecx, (sizeof.EVENT -EVENT.code)/4
cld
rep movsd
 
115,7 → 118,8
xchg ecx,[eax+EVENT.fd] ; Self.fd=NewRight, ecx=OldRight
mov [ebx+EVENT.fd],ecx ; OldLeft.fd=OldRight
mov [ecx+EVENT.bk],ebx ; OldRight.bk=OldLeft
.break: popfd
.break:
popfd
ret
 
align 4
151,7 → 155,7
or esi,esi
jz @f
lea edi,[ebx+EVENT.code]
mov ecx,EVENT.codesize/4
mov ecx, (sizeof.EVENT -EVENT.code)/4
cld
rep movsd
@@:
213,9 → 217,11
jne @f
cmp [eax+EVENT.id],ebx
je .ret
@@: pop eax
@@:
pop eax
xor eax,eax
.ret: ret
.ret:
ret
 
 
align 4
254,7 → 260,8
mov [eax+TASKDATA.state], 5
call change_task
mov eax,[esi+APPDATA.wait_param]
@@: ret
@@:
ret
 
align 4
wait_event: ;; EXPORT use
292,10 → 299,10
mov edx, get_event_queue ; wait_test
call Wait_events ; timeout ignored
lea esi,[eax+EVENT.code]
mov ecx,EVENT.codesize/4
mov ecx, (sizeof.EVENT-EVENT.code)/4
cld
rep movsd
mov [edi-EVENT.codesize+2],cl ;clear priority field
mov byte[edi-(sizeof.EVENT-EVENT.code)+2], cl;clear priority field
wait_finish:
test byte[eax+EVENT.state+3], MANUAL_RESET shr 24
jnz get_event_queue.ret ; RET
346,7 → 353,8
mov eax,[ebx+APPOBJ.bk] ; âûáèðàåì ñ êîíöà, ïî ïðèíöèïó FIFO
cmp eax,ebx ; empty ???
je get_event_alone.ret0
.ret: ret
.ret:
ret
 
align 4
get_event_alone:
364,8 → 372,10
test byte[eax+EVENT.state+3], EVENT_SIGNALED shr 24
jnz .ret
or byte[eax+EVENT.state+3], EVENT_WATCHED shr 24
.ret0: xor eax,eax ; NO event!!!
.ret: ret
.ret0:
xor eax, eax; NO event!!!
.ret:
ret
 
align 4
sys_sendwindowmsg: ;; f72
393,7 → 403,8
.result:
setae byte[esp+32] ;ñ÷èòàåì, ÷òî èñõîäíî: dword[esp+32]==72
.retf: ;popfd
.ret: ret
.ret:
ret
 
align 4
sys_getevent: ;; f11
430,6 → 441,7
shl edi,5
add edi,CURRENT_TASK ; edi is assumed as [TASK_BASE]
mov ecx,[edi+TASKDATA.event_mask]
and ecx, 0x7FFFFFFF
.loop: ; ïîêà íå èñ÷åðïàåì âñå áèòû ìàñêè
bsr eax,ecx ; íàõîäèì íåíóëåâîé áèò ìàñêè (31 -> 0)
jz .no_events ; èñ÷åðïàëè âñå áèòû ìàñêè, íî íè÷åãî íå íàøëè ???
452,8 → 464,15
 
.FlagAutoReset: ; retvals: BgrRedraw=5, Mouse=6, IPC=7, Stack=8, Debug=9
cmp eax,5 ; Mouse 5+1=6
jne @f
jne .no_mouse_check
push eax
mov eax, [TASK_BASE]
mov eax, [eax + TASKDATA.event_mask]
test eax, 0x80000000 ; bit 31: active/inactive filter f.40
jz @f
pop eax
jmp .no_mouse_check
@@:
; If the window is captured and moved by the user, then no mouse events!!!
mov al,[mouse.active_sys_window.action]
and al,WINDOW_MOVE_AND_RESIZE_FLAGS
460,7 → 479,7
test al,al
pop eax
jnz .loop
@@:
.no_mouse_check:
btr [ebx+APPDATA.event_mask],eax
jnc .loop
.result: ; retval = eax+1
487,8 → 506,10
jne @f ; not Top ???
cmp [KEY_COUNT],al ; al==1
jae .result ; not empty ???
@@: mov edx, hotkey_buffer
@@: cmp [edx],bh ; bh - slot for testing
@@:
mov edx, hotkey_buffer
@@:
cmp [edx], bh ; bh - slot for testing
je .result
add edx,8
cmp edx, hotkey_buffer+120*8