Subversion Repositories Kolibri OS

Rev

Rev 92 | Rev 227 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 ha 1
sys_getevent:
2
 
3
     call   get_event_for_app
4
     mov    [esp+36],eax
5
     ret
6
 
7
 
8
align 4
9
 
10
sys_wait_event_timeout:
11
 
21 poddubny 12
     mov   ebx,[timer_ticks]
1 ha 13
     add   ebx,eax
21 poddubny 14
     cmp   ebx,[timer_ticks]
1 ha 15
     jna   .swfet2
16
   .swfet1:
17
     call  get_event_for_app
18
     test  eax,eax
19
     jne   .eventoccur_time
20
     call  change_task
21 poddubny 21
     cmp   ebx,[timer_ticks]
1 ha 22
     jg    .swfet1
23
   .swfet2:
24
     xor   eax,eax
25
   .eventoccur_time:
26
     mov   [esp+36],eax
27
     ret
28
 
29
 
30
align 4
31
 
32
sys_waitforevent:
33
 
34
     call  get_event_for_app
35
     test  eax,eax
36
     jne   eventoccur
37
   newwait:
38
 
21 poddubny 39
     mov   eax, [0x3010]
115 poddubny 40
     mov   [eax+TASKDATA.state], byte 5
1 ha 41
     call  change_task
42
 
21 poddubny 43
     mov eax, [event_sched]
44
 
1 ha 45
   eventoccur:
46
     mov   [esp+36],eax
47
     ret
48
 
49
 
50
get_event_for_app:
51
 
52
     pushad
53
 
54
     mov   edi,[0x3010]              ; WINDOW REDRAW
115 poddubny 55
     test  [edi+TASKDATA.event_mask],dword 1
1 ha 56
     jz    no_eventoccur1
21 poddubny 57
     ;mov   edi,[0x3010]
115 poddubny 58
     cmp   [edi-twdw+WDATA.fl_redraw],byte 0
1 ha 59
     je    no_eventoccur1
60
     popad
61
     mov   eax,1
62
     ret
63
   no_eventoccur1:
64
 
21 poddubny 65
     ;mov   edi,[0x3010]              ; KEY IN BUFFER
115 poddubny 66
     test  [edi+TASKDATA.event_mask],dword 2
1 ha 67
     jz    no_eventoccur2
68
     mov   ecx, [0x3000]
69
     movzx edx,word [0xC000+ecx*2]
70
     mov   eax, [0x3004]
71
     cmp   eax,edx
92 diamond 72
     jne   no_eventoccur2x
1 ha 73
     cmp   [0xf400],byte 0
92 diamond 74
     je    no_eventoccur2x
75
   eventoccur2:
1 ha 76
     popad
77
     mov   eax,2
78
     ret
92 diamond 79
   no_eventoccur2x:
80
        mov     eax, hotkey_buffer
81
@@:
82
        cmp     [eax], ecx
83
        jz      eventoccur2
84
        add     eax, 8
85
        cmp     eax, hotkey_buffer+120*8
86
        jb      @b
1 ha 87
   no_eventoccur2:
88
 
21 poddubny 89
     ;mov   edi,[0x3010]              ; BUTTON IN BUFFER
115 poddubny 90
     test  [edi+TASKDATA.event_mask],dword 4
1 ha 91
     jz    no_eventoccur3
21 poddubny 92
     cmp   [0xf500],byte 0
93
     je    no_eventoccur3
1 ha 94
     mov   ecx, [0x3000]
95
     movzx edx, word [0xC000+ecx*2]
96
     mov   eax, [0x3004]
97
     cmp   eax,edx
98
     jnz   no_eventoccur3
99
     popad
100
     mov   eax,[0xf501]
101
     cmp   eax,65535
102
     je    no_event_1
103
     mov   eax,3
104
     ret
105
 
106
    no_event_1:
107
     mov   [window_minimize],1
108
     mov   [0xf500],byte 0
109
     xor   eax, eax
110
     ret
111
 
112
   no_eventoccur3:
21 poddubny 113
 
114
 
115
     ;mov   edi,[0x3010]              ; mouse event
115 poddubny 116
     test  [edi+TASKDATA.event_mask],dword 00100000b
21 poddubny 117
     jz    no_mouse_event
118
     mov   eax,[0x3000]
119
     shl   eax,8
115 poddubny 120
     test  [eax+0x80000+APPDATA.event_mask],dword 00100000b
21 poddubny 121
     jz    no_mouse_event
115 poddubny 122
     and   [eax+0x80000+APPDATA.event_mask],dword 0xffffffff-00100000b
21 poddubny 123
     popad
124
     mov   eax,6
125
     ret
126
   no_mouse_event:
127
 
1 ha 128
 
21 poddubny 129
     ;mov   edi,[0x3010]              ; DESKTOP BACKGROUND REDRAW
115 poddubny 130
     test  [edi+TASKDATA.event_mask],dword 16
1 ha 131
     jz    no_eventoccur5
132
     cmp   [0xfff0],byte 2
133
     jnz   no_eventoccur5
134
     popad
135
     mov   eax,5
136
     ret
137
   no_eventoccur5:
138
 
21 poddubny 139
     ;mov   edi,[0x3010]              ; IPC
115 poddubny 140
     test  [edi+TASKDATA.event_mask],dword 01000000b
1 ha 141
     jz    no_ipc
21 poddubny 142
     mov   eax,[0x3000]
143
     shl   eax,8
115 poddubny 144
     test  [eax+0x80000+APPDATA.event_mask],dword 01000000b
1 ha 145
     jz    no_ipc
115 poddubny 146
     and   [eax+0x80000+APPDATA.event_mask],dword 0xffffffff-01000000b
1 ha 147
     popad
148
     mov   eax,7
149
     ret
150
   no_ipc:
151
 
152
 
21 poddubny 153
     ;mov   edi,[0x3010]              ; STACK
115 poddubny 154
     test  [edi+TASKDATA.event_mask],dword 10000000b
1 ha 155
     jz    no_stack_event
21 poddubny 156
     mov   eax,[0x3000]
157
     shl   eax,8
115 poddubny 158
     test  [eax+0x80000+APPDATA.event_mask],dword 10000000b
1 ha 159
     jz    no_stack_event
115 poddubny 160
     and   [eax+0x80000+APPDATA.event_mask],dword 0xffffffff-10000000b
1 ha 161
     popad
21 poddubny 162
     mov   eax,8
1 ha 163
     ret
164
   no_stack_event:
165
 
115 poddubny 166
     test  byte [edi+TASKDATA.event_mask+1], 1		; DEBUG
40 halyavin 167
     jz    no_debug_event
168
     mov   eax, [0x3000]
169
     shl   eax, 8
115 poddubny 170
     test  byte [eax+0x80000+APPDATA.event_mask+1], byte 1
40 halyavin 171
     jz    no_debug_event
115 poddubny 172
     and   byte [eax+0x80000+APPDATA.event_mask+1], not 1
40 halyavin 173
     popad
174
     mov   eax, 9
175
     ret
176
   no_debug_event:
177
 
115 poddubny 178
     cmp   dword [edi+TASKDATA.event_mask], 0xFFFF
21 poddubny 179
     jbe   no_events
1 ha 180
 
181
     mov   esi,0x2e0000              ; IRQ'S AND DATA
182
     mov   ebx,0x00010000
183
     xor   ecx, ecx
184
   irq_event_test:
185
     mov   edi,[0x3010]
115 poddubny 186
     test  [edi+TASKDATA.event_mask],ebx
1 ha 187
     jz    no_irq_event
188
     mov   edi,ecx
189
     shl   edi,2
190
     add   edi,irq_owner
191
     mov   edx,[edi]
192
     mov   eax,[0x3010]
115 poddubny 193
     mov   eax,[eax+TASKDATA.pid]
1 ha 194
     cmp   edx,eax
195
     jne   no_irq_event
196
     cmp   [esi],dword 0
197
     jz    no_irq_event
198
     mov   eax,ecx
199
     add   eax,16
200
     mov   [esp+28],eax
201
     popad
202
     ret
203
    no_irq_event:
204
     add   esi,0x1000
205
     shl   ebx,1
206
     inc   ecx
207
     cmp   ecx,16
208
     jb    irq_event_test
209
 
21 poddubny 210
   no_events:
1 ha 211
     popad
212
     xor   eax, eax
213
     ret
214