Rev 8236 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 8236 | Rev 8283 | ||
---|---|---|---|
1 | ;const int |
1 | ;const int |
2 | KOLIBRI_BORDER_SIZE = 4; |
2 | KOLIBRI_BORDER_SIZE = 4; |
3 | ;const int |
3 | ;const int |
4 | KOLIBRI_HEADER_SIZE = 20; |
4 | KOLIBRI_HEADER_SIZE = 20; |
5 | 5 | ||
6 | ;const int |
6 | ;const int |
7 | KOLIBRI_THREAD_DATA_USER = 0; // Thread data begin from the user dword |
7 | KOLIBRI_THREAD_DATA_USER = 0; // Thread data begin from the user dword |
8 | ;const int |
8 | ;const int |
9 | KOLIBRI_THREAD_DATA_ST_BEGIN = 1; // Stack beginning follows after the user dword |
9 | KOLIBRI_THREAD_DATA_ST_BEGIN = 1; // Stack beginning follows after the user dword |
10 | ;const int |
10 | ;const int |
11 | KOLIBRI_THREAD_DATA_NEXT = 2; |
11 | KOLIBRI_THREAD_DATA_NEXT = 2; |
12 | ;const int |
12 | ;const int |
13 | KOLIBRI_THREAD_DATA_PID = 3; |
13 | KOLIBRI_THREAD_DATA_PID = 3; |
14 | ;const int |
14 | ;const int |
15 | KOLIBRI_THREAD_DATA_FLAG = 4; |
15 | KOLIBRI_THREAD_DATA_FLAG = 4; |
16 | ;const int |
16 | ;const int |
17 | KOLIBRI_THREAD_DATA_X = 5; |
17 | KOLIBRI_THREAD_DATA_X = 5; |
18 | ;const int |
18 | ;const int |
19 | KOLIBRI_THREAD_DATA_Y = 6; |
19 | KOLIBRI_THREAD_DATA_Y = 6; |
20 | ;const int |
20 | ;const int |
21 | KOLIBRI_THREAD_DATA_C_WINDOW = 7; |
21 | KOLIBRI_THREAD_DATA_C_WINDOW = 7; |
22 | ;const int |
22 | ;const int |
23 | KOLIBRI_THREAD_DATA_C_HEADER = 8; |
23 | KOLIBRI_THREAD_DATA_C_HEADER = 8; |
24 | ;const int |
24 | ;const int |
25 | KOLIBRI_THREAD_DATA_C_BORDER = 9; |
25 | KOLIBRI_THREAD_DATA_C_BORDER = 9; |
26 | ;const int |
26 | ;const int |
27 | KOLIBRI_THREAD_DATA_C_TITLE = 10; |
27 | KOLIBRI_THREAD_DATA_C_TITLE = 10; |
28 | ;const int |
28 | ;const int |
29 | KOLIBRI_THREAD_DATA_TITLE = 11; |
29 | KOLIBRI_THREAD_DATA_TITLE = 11; |
30 | ;const int |
30 | ;const int |
31 | KOLIBRI_THREAD_DATA_PICTURE = 12; |
31 | KOLIBRI_THREAD_DATA_PICTURE = 12; |
32 | ;const int |
32 | ;const int |
33 | KOLIBRI_THREAD_DATA_SZ_PICT = 13; |
33 | KOLIBRI_THREAD_DATA_SZ_PICT = 13; |
34 | ;const int |
34 | ;const int |
35 | KOLIBRI_THREAD_DATA_LAST_SX = 14; |
35 | KOLIBRI_THREAD_DATA_LAST_SX = 14; |
36 | ;const int |
36 | ;const int |
37 | KOLIBRI_THREAD_DATA_LAST_SY = 15; |
37 | KOLIBRI_THREAD_DATA_LAST_SY = 15; |
38 | ;const int |
38 | ;const int |
39 | KOLIBRI_THREAD_DATA_LEN = 16; |
39 | KOLIBRI_THREAD_DATA_LEN = 16; |
40 | 40 | ||
41 | ;const int |
41 | ;const int |
42 | KOLIBRI_MUTEX_MAX_TIME_WAIT = 20; |
42 | KOLIBRI_MUTEX_MAX_TIME_WAIT = 20; |
43 | 43 | ||
44 | ;/*** |
44 | ;/*** |
45 | 45 | ||
46 | macro segment name |
46 | macro segment name |
47 | { |
47 | { |
48 | segment name |
48 | segment name |
49 | if name eq _init_ | name eq _INIT_ |
49 | if name eq _init_ | name eq _INIT_ |
50 | Kolibri_SegmentInit: |
50 | Kolibri_SegmentInit: |
51 | else if name eq _exit_ | name eq _EXIT_ |
51 | else if name eq _exit_ | name eq _EXIT_ |
52 | Kolibri_SegmentExit: |
52 | Kolibri_SegmentExit: |
53 | end if |
53 | end if |
54 | } |
54 | } |
55 | 55 | ||
56 | macro endseg name |
56 | macro endseg name |
57 | { |
57 | { |
58 | if name eq _init_ | name eq _INIT_ |
58 | if name eq _init_ | name eq _INIT_ |
59 | Kolibri_SegmentInitEnd: |
59 | Kolibri_SegmentInitEnd: |
60 | else if name eq _exit_ | name eq _EXIT_ |
60 | else if name eq _exit_ | name eq _EXIT_ |
61 | Kolibri_SegmentExitEnd: |
61 | Kolibri_SegmentExitEnd: |
62 | end if |
62 | end if |
63 | endseg name |
63 | endseg name |
64 | } |
64 | } |
65 | 65 | ||
66 | macro Kolibri_Put_MovEaxVal_Ret address,val |
66 | macro Kolibri_Put_MovEaxVal_Ret address,val |
67 | { |
67 | { |
68 | mov byte [address],0xB8 |
68 | mov byte [address],0xB8 |
69 | mov dword [address+4],0xC089C300 |
69 | mov dword [address+4],0xC089C300 |
70 | mov dword [address+1],val |
70 | mov dword [address+1],val |
71 | } |
71 | } |
- | 72 | ||
72 | 73 | align 4 |
|
73 | proc @Kolibri@Main$qv |
74 | proc @Kolibri@Main$qv |
74 | and esp,not 3 |
75 | and esp,not 3 |
75 | sub esp,1024 |
76 | sub esp,1024 |
76 | mov eax,SF_THREAD_INFO |
77 | mov eax,SF_THREAD_INFO |
77 | mov ebx,esp |
78 | mov ebx,esp |
78 | mov ecx,-1 |
79 | mov ecx,-1 |
79 | int 0x40 |
80 | int 0x40 |
80 | mov ebx,[esp+process_information.used_memory] |
81 | mov ebx,[esp+process_information.used_memory] |
81 | mov edx,[esp+process_information.PID] |
82 | mov edx,[esp+process_information.PID] |
82 | lea eax,[ebx-0x20] |
83 | lea eax,[ebx-0x20] |
83 | add esp,1024 |
84 | add esp,1024 |
84 | cmp esp,eax |
85 | cmp esp,eax |
85 | cmova esp,eax |
86 | cmova esp,eax |
86 | and esp,not 3 |
87 | and esp,not 3 |
87 | xor eax,eax |
88 | xor eax,eax |
88 | cld |
89 | cld |
89 | mov edi,@Kolibri@_ThreadTable |
90 | mov edi,@Kolibri@_ThreadTable |
90 | mov ecx,256 |
91 | mov ecx,256 |
91 | rep stosd |
92 | rep stosd |
92 | mov esi,@Kolibri@GetPid$qv |
93 | mov esi,@Kolibri@GetPid$qv |
93 | mov edi,@Kolibri@_ThreadSavedBegProc |
94 | mov edi,@Kolibri@_ThreadSavedBegProc |
94 | movsd |
95 | movsd |
95 | movsd |
96 | movsd |
96 | mov esi,@Kolibri@GetThreadData$qv |
97 | mov esi,@Kolibri@GetThreadData$qv |
97 | movsd |
98 | movsd |
98 | movsd |
99 | movsd |
99 | Kolibri_Put_MovEaxVal_Ret @Kolibri@GetPid$qv,edx |
100 | Kolibri_Put_MovEaxVal_Ret @Kolibri@GetPid$qv,edx |
100 | if defined KolibriHeapInit |
101 | if defined KolibriHeapInit |
101 | call KolibriHeapInit ; Initialize a dynamic heap |
102 | call KolibriHeapInit ; Initialize a dynamic heap |
102 | end if |
103 | end if |
103 | xor eax,eax |
104 | xor eax,eax |
104 | push eax |
105 | push eax |
105 | push eax |
106 | push eax |
106 | call @Kolibri@ThreadMain$qpvt1 |
107 | call @Kolibri@ThreadMain$qpvt1 |
107 | .ThreadFinish: |
108 | .ThreadFinish: |
108 | add esp,8 |
109 | add esp,8 |
109 | if defined KolibriHeapFreeAndThreadFinish |
110 | if defined KolibriHeapFreeAndThreadFinish |
110 | test eax,eax |
111 | test eax,eax |
111 | jz .ThreadFinish_end |
112 | jz .ThreadFinish_end |
112 | push dword @Kolibri@_ExitProcessNow |
113 | push dword @Kolibri@_ExitProcessNow |
113 | push eax |
114 | push eax |
114 | call KolibriHeapFreeAndThreadFinish ; Free the given memory and finish the thread, |
115 | call KolibriHeapFreeAndThreadFinish ; Free the given memory and finish the thread, |
115 | end if ; should exit process if second argument points to not zero. |
116 | end if ; should exit process if second argument points to not zero. |
116 | .ThreadFinish_end: |
117 | .ThreadFinish_end: |
117 | or eax,-1 |
118 | or eax,-1 |
118 | int 0x40 |
119 | int 0x40 |
119 | endp |
120 | endp |
- | 121 | ||
120 | 122 | align 4 |
|
121 | proc @Kolibri@ThreadMain$qpvt1 |
123 | proc @Kolibri@ThreadMain$qpvt1 |
122 | xchg ebx,[esp+4] |
124 | xchg ebx,[esp+4] |
123 | xchg ebp,[esp+8] |
125 | xchg ebp,[esp+8] |
124 | push esi edi |
126 | push esi edi |
125 | sub esp,KOLIBRI_THREAD_DATA_LEN*4 |
127 | sub esp,KOLIBRI_THREAD_DATA_LEN*4 |
126 | mov [esp],ebx |
128 | mov [esp],ebx |
127 | mov [esp+4],ebp |
129 | mov [esp+4],ebp |
128 | mov eax,SF_SET_EVENTS_MASK |
130 | mov eax,SF_SET_EVENTS_MASK |
129 | mov ebx,0x27 |
131 | mov ebx,0x27 |
130 | int 0x40 |
132 | int 0x40 |
131 | mov ebx,esp |
133 | mov ebx,esp |
132 | cmp byte [@Kolibri@_ThreadSavedBegProc],0x90 |
134 | cmp byte [@Kolibri@_ThreadSavedBegProc],0x90 |
133 | jz .main_else_first_check |
135 | jz .main_else_first_check |
134 | Kolibri_Put_MovEaxVal_Ret @Kolibri@GetThreadData$qv,esp |
136 | Kolibri_Put_MovEaxVal_Ret @Kolibri@GetThreadData$qv,esp |
135 | if defined Kolibri_SegmentInit & defined Kolibri_SegmentInitEnd |
137 | if defined Kolibri_SegmentInit & defined Kolibri_SegmentInitEnd |
136 | push Kolibri_SegmentInitEnd |
138 | push Kolibri_SegmentInitEnd |
137 | push Kolibri_SegmentInit |
139 | push Kolibri_SegmentInit |
138 | jmp .main_after_first_check |
140 | jmp .main_after_first_check |
139 | end if |
141 | end if |
140 | .main_else_first_check: |
142 | .main_else_first_check: |
141 | xor eax,eax |
143 | xor eax,eax |
142 | push eax eax |
144 | push eax eax |
143 | .main_after_first_check: |
145 | .main_after_first_check: |
144 | push ebx |
146 | push ebx |
145 | call @@Kolibri@_CallStart$qppvpvt2 |
147 | call @@Kolibri@_CallStart$qppvpvt2 |
146 | add esp,12 |
148 | add esp,12 |
147 | test al,al |
149 | test al,al |
148 | jnz .main_test_close_first |
150 | jnz .main_test_close_first |
149 | jmp .main_end |
151 | jmp .main_end |
150 | .main_close_first: |
152 | .main_close_first: |
151 | btr dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],31 |
153 | btr dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],31 |
152 | if defined @@KolibriOnClose$qppv |
154 | if defined @@KolibriOnClose$qppv |
153 | push esp |
155 | push esp |
154 | call @@KolibriOnClose$qppv |
156 | call @@KolibriOnClose$qppv |
155 | pop ecx |
157 | pop ecx |
156 | test al,al |
158 | test al,al |
157 | jnz .main_end |
159 | jnz .main_end |
158 | end if |
160 | end if |
159 | .main_test_close_first: |
161 | .main_test_close_first: |
160 | cmp dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],0 |
162 | cmp dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],0 |
161 | jl .main_close_first |
163 | jl .main_close_first |
162 | ; push esp |
164 | ; push esp |
163 | ; push dword 1 |
165 | ; push dword 1 |
164 | ; call @Kolibri@Redraw$qippv |
166 | ; call @Kolibri@Redraw$qippv |
165 | ; add esp,8 |
167 | ; add esp,8 |
166 | .main_paint_msg: |
168 | .main_paint_msg: |
167 | or dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],3 |
169 | or dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],3 |
168 | sub esp,1024 |
170 | sub esp,1024 |
169 | mov eax,SF_THREAD_INFO |
171 | mov eax,SF_THREAD_INFO |
170 | mov ebx,esp |
172 | mov ebx,esp |
171 | mov ecx,-1 |
173 | mov ecx,-1 |
172 | int 0x40 |
174 | int 0x40 |
173 | mov eax,[esp+process_information.box.left] |
175 | mov eax,[esp+process_information.box.left] |
174 | mov ebx,[esp+process_information.box.top] |
176 | mov ebx,[esp+process_information.box.top] |
175 | mov ecx,[esp+process_information.box.width] |
177 | mov ecx,[esp+process_information.box.width] |
176 | mov edx,[esp+process_information.box.height] |
178 | mov edx,[esp+process_information.box.height] |
177 | add esp,1024 |
179 | add esp,1024 |
178 | cmp ecx,[esp+KOLIBRI_THREAD_DATA_LAST_SX*4] |
180 | cmp ecx,[esp+KOLIBRI_THREAD_DATA_LAST_SX*4] |
179 | jnz .main_size |
181 | jnz .main_size |
180 | cmp edx,[esp+KOLIBRI_THREAD_DATA_LAST_SY*4] |
182 | cmp edx,[esp+KOLIBRI_THREAD_DATA_LAST_SY*4] |
181 | jz .main_paint |
183 | jz .main_paint |
182 | .main_size: |
184 | .main_size: |
183 | mov [esp+KOLIBRI_THREAD_DATA_LAST_SX*4],ecx |
185 | mov [esp+KOLIBRI_THREAD_DATA_LAST_SX*4],ecx |
184 | mov [esp+KOLIBRI_THREAD_DATA_LAST_SY*4],edx |
186 | mov [esp+KOLIBRI_THREAD_DATA_LAST_SY*4],edx |
185 | if defined @@KolibriOnSize$qpippv |
187 | if defined @@KolibriOnSize$qpippv |
186 | push edx |
188 | push edx |
187 | push ecx |
189 | push ecx |
188 | push ebx |
190 | push ebx |
189 | push eax |
191 | push eax |
190 | lea ecx,[esp+16] |
192 | lea ecx,[esp+16] |
191 | mov edx,esp |
193 | mov edx,esp |
192 | push ecx |
194 | push ecx |
193 | push edx |
195 | push edx |
194 | call @@KolibriOnSize$qpippv |
196 | call @@KolibriOnSize$qpippv |
195 | add esp,24 |
197 | add esp,24 |
196 | end if |
198 | end if |
197 | test dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],3 |
199 | test dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],3 |
198 | jz .main_cycle |
200 | jz .main_cycle |
199 | .main_paint: |
201 | .main_paint: |
200 | cmp dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],0 |
202 | cmp dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],0 |
201 | jl .main_close |
203 | jl .main_close |
202 | push esp |
204 | push esp |
203 | push dword 0 |
205 | push dword 0 |
204 | call @Kolibri@Redraw$qippv |
206 | call @Kolibri@Redraw$qippv |
205 | add esp,8 |
207 | add esp,8 |
206 | .main_cycle: |
208 | .main_cycle: |
207 | mov eax,SF_CHECK_EVENT |
209 | mov eax,SF_CHECK_EVENT |
208 | .main_message: |
210 | .main_message: |
209 | cmp dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],0 |
211 | cmp dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],0 |
210 | jl .main_close |
212 | jl .main_close |
211 | int 0x40 |
213 | int 0x40 |
212 | test eax,eax |
214 | test eax,eax |
213 | jnz .main_on_message |
215 | jnz .main_on_message |
214 | cmp dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],0 |
216 | cmp dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],0 |
215 | jne .main_paint |
217 | jne .main_paint |
216 | if defined @@KolibriOnIdle$qppv |
218 | if defined @@KolibriOnIdle$qppv |
217 | push esp |
219 | push esp |
218 | call @@KolibriOnIdle$qppv |
220 | call @@KolibriOnIdle$qppv |
219 | pop ecx |
221 | pop ecx |
220 | else |
222 | else |
221 | or eax,-1 |
223 | or eax,-1 |
222 | end if |
224 | end if |
223 | test eax,eax |
225 | test eax,eax |
224 | jz .main_cycle |
226 | jz .main_cycle |
225 | jl .main_wait_message |
227 | jl .main_wait_message |
226 | mov ebx,eax |
228 | mov ebx,eax |
227 | mov eax,SF_WAIT_EVENT_TIMEOUT |
229 | mov eax,SF_WAIT_EVENT_TIMEOUT |
228 | jmp .main_message |
230 | jmp .main_message |
229 | .main_wait_message: |
231 | .main_wait_message: |
230 | mov eax,SF_WAIT_EVENT |
232 | mov eax,SF_WAIT_EVENT |
231 | jmp .main_message |
233 | jmp .main_message |
232 | if defined @@KolibriOnKeyPress$qppv |
234 | if defined @@KolibriOnKeyPress$qppv |
233 | .main_key_press: |
235 | .main_key_press: |
234 | push esp |
236 | push esp |
235 | call @@KolibriOnKeyPress$qppv |
237 | call @@KolibriOnKeyPress$qppv |
236 | pop ecx |
238 | pop ecx |
237 | jmp .main_cycle |
239 | jmp .main_cycle |
238 | end if |
240 | end if |
239 | if defined @@KolibriOnMouse$qppv |
241 | if defined @@KolibriOnMouse$qppv |
240 | .main_mouse: |
242 | .main_mouse: |
241 | push esp |
243 | push esp |
242 | call @@KolibriOnMouse$qppv |
244 | call @@KolibriOnMouse$qppv |
243 | pop ecx |
245 | pop ecx |
244 | jmp .main_cycle |
246 | jmp .main_cycle |
245 | end if |
247 | end if |
246 | 248 | ||
247 | align 4 |
249 | align 4 |
248 | .main_on_message: |
250 | .main_on_message: |
249 | dec eax |
251 | dec eax |
250 | jz .main_paint_msg |
252 | jz .main_paint_msg |
251 | dec eax |
253 | dec eax |
252 | if defined @@KolibriOnKeyPress$qppv |
254 | if defined @@KolibriOnKeyPress$qppv |
253 | jz .main_key_press |
255 | jz .main_key_press |
254 | else |
256 | else |
255 | jz .main_cycle |
257 | jz .main_cycle |
256 | end if |
258 | end if |
257 | cmp eax,4 |
259 | cmp eax,4 |
258 | if defined @@KolibriOnMouse$qppv |
260 | if defined @@KolibriOnMouse$qppv |
259 | jz .main_mouse |
261 | jz .main_mouse |
260 | else |
262 | else |
261 | jz .main_cycle |
263 | jz .main_cycle |
262 | end if |
264 | end if |
263 | dec eax |
265 | dec eax |
264 | jnz .main_cycle |
266 | jnz .main_cycle |
265 | 267 | ||
266 | align 4 |
268 | align 4 |
267 | .main_button: |
269 | .main_button: |
268 | mov eax,SF_GET_BUTTON |
270 | mov eax,SF_GET_BUTTON |
269 | int 0x40 |
271 | int 0x40 |
270 | shr eax,8 |
272 | shr eax,8 |
271 | cmp eax,1 |
273 | cmp eax,1 |
272 | je .main_close |
274 | je .main_close |
273 | if defined @@KolibriOnButton$qlppv |
275 | if defined @@KolibriOnButton$qlppv |
274 | push esp |
276 | push esp |
275 | push eax |
277 | push eax |
276 | call @@KolibriOnButton$qlppv |
278 | call @@KolibriOnButton$qlppv |
277 | add esp,8 |
279 | add esp,8 |
278 | end if |
280 | end if |
279 | jmp .main_cycle |
281 | jmp .main_cycle |
280 | .main_close: |
282 | .main_close: |
281 | btr dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],31 |
283 | btr dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],31 |
282 | if defined @@KolibriOnClose$qppv |
284 | if defined @@KolibriOnClose$qppv |
283 | push esp |
285 | push esp |
284 | call @@KolibriOnClose$qppv |
286 | call @@KolibriOnClose$qppv |
285 | pop ecx |
287 | pop ecx |
286 | test al,al |
288 | test al,al |
287 | jz .main_button |
289 | jz .main_button |
288 | end if |
290 | end if |
289 | .main_end: |
291 | .main_end: |
290 | mov ebx,esp |
292 | mov ebx,esp |
291 | lock dec dword [@Kolibri@_ThreadNumber] |
293 | lock dec dword [@Kolibri@_ThreadNumber] |
292 | if defined Kolibri_SegmentExit & defined Kolibri_SegmentExitEnd |
294 | if defined Kolibri_SegmentExit & defined Kolibri_SegmentExitEnd |
293 | jnz .main_else_last_check |
295 | jnz .main_else_last_check |
294 | push Kolibri_SegmentExitEnd |
296 | push Kolibri_SegmentExitEnd |
295 | push Kolibri_SegmentExit |
297 | push Kolibri_SegmentExit |
296 | jmp .main_after_last_check |
298 | jmp .main_after_last_check |
297 | end if |
299 | end if |
298 | .main_else_last_check: |
300 | .main_else_last_check: |
299 | xor eax,eax |
301 | xor eax,eax |
300 | push eax |
302 | push eax |
301 | push eax |
303 | push eax |
302 | .main_after_last_check: |
304 | .main_after_last_check: |
303 | push ebx |
305 | push ebx |
304 | call @@Kolibri@_RemoveThreadData$qppvpvt2 |
306 | call @@Kolibri@_RemoveThreadData$qppvpvt2 |
305 | add esp,12 |
307 | add esp,12 |
306 | lock inc dword [@Kolibri@_ThreadScanCount+4] |
308 | lock inc dword [@Kolibri@_ThreadScanCount+4] |
307 | mov ebx,1 |
309 | mov ebx,1 |
308 | jmp .main_end_wait |
310 | jmp .main_end_wait |
309 | .main_end_wait_loop: |
311 | .main_end_wait_loop: |
310 | mov eax,SF_SLEEP |
312 | mov eax,SF_SLEEP |
311 | int 0x40 |
313 | int 0x40 |
312 | shl ebx,1 |
314 | shl ebx,1 |
313 | cmp ebx,KOLIBRI_MUTEX_MAX_TIME_WAIT |
315 | cmp ebx,KOLIBRI_MUTEX_MAX_TIME_WAIT |
314 | jna .main_end_wait |
316 | jna .main_end_wait |
315 | mov ebx,KOLIBRI_MUTEX_MAX_TIME_WAIT |
317 | mov ebx,KOLIBRI_MUTEX_MAX_TIME_WAIT |
316 | .main_end_wait: |
318 | .main_end_wait: |
317 | cmp dword [@Kolibri@_ExitProcessNow],0 |
319 | cmp dword [@Kolibri@_ExitProcessNow],0 |
318 | jnz @Kolibri@ExitProcess$qv |
320 | jnz @Kolibri@ExitProcess$qv |
319 | cmp dword [@Kolibri@_ThreadScanCount],0 |
321 | cmp dword [@Kolibri@_ThreadScanCount],0 |
320 | jnz .main_end_wait_loop |
322 | jnz .main_end_wait_loop |
321 | lock dec dword [@Kolibri@_ThreadScanCount+4] |
323 | lock dec dword [@Kolibri@_ThreadScanCount+4] |
322 | mov ebp,[esp+4] |
324 | mov ebp,[esp+4] |
323 | mov ebx,[esp] |
325 | mov ebx,[esp] |
324 | add esp,KOLIBRI_THREAD_DATA_LEN*4 |
326 | add esp,KOLIBRI_THREAD_DATA_LEN*4 |
325 | mov eax,ebp |
327 | mov eax,ebp |
326 | pop edi esi |
328 | pop edi esi |
327 | xchg ebp,[esp+8] |
329 | xchg ebp,[esp+8] |
328 | xchg ebx,[esp+4] |
330 | xchg ebx,[esp+4] |
329 | ret |
331 | ret |
330 | endp |
332 | endp |
- | 333 | ||
331 | 334 | align 4 |
|
332 | proc @Kolibri@Redraw$qippv |
335 | proc @Kolibri@Redraw$qippv |
333 | push ebp |
336 | push ebp |
334 | mov ebp,[esp+12] |
337 | mov ebp,[esp+12] |
335 | mov edx,[ebp+KOLIBRI_THREAD_DATA_FLAG*4] |
338 | mov edx,[ebp+KOLIBRI_THREAD_DATA_FLAG*4] |
336 | cmp dword [esp+8],0 |
339 | cmp dword [esp+8],0 |
337 | jl .redraw_only_inv |
340 | jl .redraw_only_inv |
338 | jz .redraw_no_frame |
341 | jz .redraw_no_frame |
339 | or dl,2 |
342 | or dl,2 |
340 | .redraw_no_frame: |
343 | .redraw_no_frame: |
341 | bt edx,30 |
344 | bt edx,30 |
342 | jnc .redraw_begin |
345 | jnc .redraw_begin |
343 | or dl,1 |
346 | or dl,1 |
344 | mov [ebp+KOLIBRI_THREAD_DATA_FLAG*4],edx |
347 | mov [ebp+KOLIBRI_THREAD_DATA_FLAG*4],edx |
345 | jmp .redraw_end |
348 | jmp .redraw_end |
346 | .redraw_only_inv: |
349 | .redraw_only_inv: |
347 | test dl,3 |
350 | test dl,3 |
348 | jnz .redraw_no_frame |
351 | jnz .redraw_no_frame |
349 | .redraw_end: |
352 | .redraw_end: |
350 | pop ebp |
353 | pop ebp |
351 | ret |
354 | ret |
352 | .redraw_begin: |
355 | .redraw_begin: |
353 | push ebx esi edi |
356 | push ebx esi edi |
354 | and dword [ebp+KOLIBRI_THREAD_DATA_FLAG*4],0xFFFFFFFC |
357 | and dword [ebp+KOLIBRI_THREAD_DATA_FLAG*4],0xFFFFFFFC |
355 | mov eax,SF_REDRAW |
358 | mov eax,SF_REDRAW |
356 | mov ebx,SSF_BEGIN_DRAW |
359 | mov ebx,SSF_BEGIN_DRAW |
357 | int 0x40 |
360 | int 0x40 |
358 | test dl,2 |
361 | test dl,2 |
359 | jz .redraw_picture |
362 | jz .redraw_picture |
360 | mov eax,SF_STYLE_SETTINGS |
363 | mov eax,SF_STYLE_SETTINGS |
361 | mov ebx,SSF_GET_SKIN_HEIGHT |
364 | mov ebx,SSF_GET_SKIN_HEIGHT |
362 | int 0x40 |
365 | int 0x40 |
363 | mov ebx,[ebp+KOLIBRI_THREAD_DATA_X*4] |
366 | mov ebx,[ebp+KOLIBRI_THREAD_DATA_X*4] |
364 | add ebx,2*5-1 |
367 | add ebx,2*5-1 |
365 | mov ecx,[ebp+KOLIBRI_THREAD_DATA_Y*4] |
368 | mov ecx,[ebp+KOLIBRI_THREAD_DATA_Y*4] |
366 | add cx,ax |
369 | add cx,ax |
367 | add ecx,5-1 |
370 | add ecx,5-1 |
368 | mov edx,[ebp+KOLIBRI_THREAD_DATA_C_WINDOW*4] |
371 | mov edx,[ebp+KOLIBRI_THREAD_DATA_C_WINDOW*4] |
369 | mov edi,[ebp+KOLIBRI_THREAD_DATA_TITLE*4] |
372 | mov edi,[ebp+KOLIBRI_THREAD_DATA_TITLE*4] |
370 | xor eax,eax ;SF_CREATE_WINDOW |
373 | xor eax,eax ;SF_CREATE_WINDOW |
371 | int 0x40 |
374 | int 0x40 |
372 | .redraw_picture: |
375 | .redraw_picture: |
373 | call @@KolibriOnPaint$qv |
376 | call @@KolibriOnPaint$qv |
374 | .redraw_end_draw: |
377 | .redraw_end_draw: |
375 | mov eax,SF_REDRAW |
378 | mov eax,SF_REDRAW |
376 | mov ebx,SSF_END_DRAW |
379 | mov ebx,SSF_END_DRAW |
377 | int 0x40 |
380 | int 0x40 |
378 | pop edi esi ebx ebp |
381 | pop edi esi ebx ebp |
379 | ret |
382 | ret |
380 | endp |
383 | endp |
- | 384 | ||
381 | 385 | align 4 |
|
382 | proc @Kolibri@MoveWindow$qxpxi uses ebx esi |
386 | proc @Kolibri@MoveWindow$qxpxi uses ebx esi |
383 | mov eax,[esp+12] |
387 | mov eax,[esp+12] |
384 | mov ebx,[eax] |
388 | mov ebx,[eax] |
385 | mov ecx,[eax+4] |
389 | mov ecx,[eax+4] |
386 | mov edx,[eax+8] |
390 | mov edx,[eax+8] |
387 | mov esi,[eax+12] |
391 | mov esi,[eax+12] |
388 | mov eax,SF_CHANGE_WINDOW |
392 | mov eax,SF_CHANGE_WINDOW |
389 | int 0x40 |
393 | int 0x40 |
390 | ret |
394 | ret |
391 | endp |
395 | endp |
- | 396 | ||
392 | 397 | align 4 |
|
393 | proc @Kolibri@ExitDebug$qv |
398 | proc @Kolibri@ExitDebug$qv |
394 | push dword [@Kolibri@DebugPrefix] |
399 | push dword [@Kolibri@DebugPrefix] |
395 | call @Kolibri@DebugPutString$qpxc |
400 | call @Kolibri@DebugPutString$qpxc |
396 | mov dword [esp],Kolibri_debug_string |
401 | mov dword [esp],Kolibri_debug_string |
397 | call @Kolibri@DebugPutString$qpxc |
402 | call @Kolibri@DebugPutString$qpxc |
398 | pop ecx |
403 | pop ecx |
399 | jmp @Kolibri@ExitProcess$qv |
404 | jmp @Kolibri@ExitProcess$qv |
400 | endp |
405 | endp |
- | 406 | ||
401 | 407 | align 4 |
|
402 | proc @Kolibri@ExitProcess$qv |
408 | proc @Kolibri@ExitProcess$qv |
403 | lock bts dword [@Kolibri@_ExitProcessNow],0 |
409 | lock bts dword [@Kolibri@_ExitProcessNow],0 |
404 | jc .exit_process_wait |
410 | jc .exit_process_wait |
405 | sub esp,1024 |
411 | sub esp,1024 |
406 | mov eax,SF_THREAD_INFO |
412 | mov eax,SF_THREAD_INFO |
407 | mov ebx,esp |
413 | mov ebx,esp |
408 | mov ecx,-1 |
414 | mov ecx,-1 |
409 | int 0x40 |
415 | int 0x40 |
410 | mov esi,eax |
416 | mov esi,eax |
411 | mov edi,[esp+process_information.PID] |
417 | mov edi,[esp+process_information.PID] |
412 | .exit_process_loop: |
418 | .exit_process_loop: |
413 | mov eax,SF_THREAD_INFO |
419 | mov eax,SF_THREAD_INFO |
414 | mov ebx,esp |
420 | mov ebx,esp |
415 | mov ecx,esi |
421 | mov ecx,esi |
416 | int 0x40 |
422 | int 0x40 |
417 | mov eax,[esp+process_information.PID] |
423 | mov eax,[esp+process_information.PID] |
418 | cmp eax,edi |
424 | cmp eax,edi |
419 | jz .exit_process_continue |
425 | jz .exit_process_continue |
420 | mov ebx,eax |
426 | mov ebx,eax |
421 | or bl,15 |
427 | or bl,15 |
422 | inc ebx |
428 | inc ebx |
423 | jz .exit_process_continue |
429 | jz .exit_process_continue |
424 | mov ebx,eax |
430 | mov ebx,eax |
425 | call Kolibri_HashInt |
431 | call Kolibri_HashInt |
426 | movzx eax,al |
432 | movzx eax,al |
427 | mov eax,dword [@Kolibri@_ThreadTable+eax*4] |
433 | mov eax,dword [@Kolibri@_ThreadTable+eax*4] |
428 | jmp .exit_process_test |
434 | jmp .exit_process_test |
429 | .exit_process_next: |
435 | .exit_process_next: |
430 | mov eax,dword [eax+KOLIBRI_THREAD_DATA_NEXT*4] |
436 | mov eax,dword [eax+KOLIBRI_THREAD_DATA_NEXT*4] |
431 | .exit_process_test: |
437 | .exit_process_test: |
432 | test eax,eax |
438 | test eax,eax |
433 | jz .exit_process_continue |
439 | jz .exit_process_continue |
434 | cmp ebx,[eax+KOLIBRI_THREAD_DATA_PID*4] |
440 | cmp ebx,[eax+KOLIBRI_THREAD_DATA_PID*4] |
435 | jnz .exit_process_next |
441 | jnz .exit_process_next |
436 | mov eax,SF_SYSTEM |
442 | mov eax,SF_SYSTEM |
437 | mov ebx,SSF_TERMINATE_THREAD |
443 | mov ebx,SSF_TERMINATE_THREAD |
438 | mov ecx,esi |
444 | mov ecx,esi |
439 | int 0x40 |
445 | int 0x40 |
440 | .exit_process_continue: |
446 | .exit_process_continue: |
441 | dec esi |
447 | dec esi |
442 | jnl .exit_process_loop |
448 | jnl .exit_process_loop |
443 | add esp,1024 |
449 | add esp,1024 |
444 | mov dword [@Kolibri@_ExitProcessNow],-1 |
450 | mov dword [@Kolibri@_ExitProcessNow],-1 |
445 | if defined EMULATOR |
451 | if defined EMULATOR |
446 | int3 |
452 | int3 |
447 | call 0x76543210 |
453 | call 0x76543210 |
448 | end if |
454 | end if |
449 | .exit_process_end: |
455 | .exit_process_end: |
450 | mov dword [@Kolibri@_ThreadMutex],0 |
456 | mov dword [@Kolibri@_ThreadMutex],0 |
451 | or eax,-1 |
457 | or eax,-1 |
452 | int 0x40 |
458 | int 0x40 |
453 | .exit_process_wait: |
459 | .exit_process_wait: |
454 | mov eax,SF_SLEEP |
460 | mov eax,SF_SLEEP |
455 | mov ebx,1 |
461 | mov ebx,1 |
456 | .exit_process_wait_loop: |
462 | .exit_process_wait_loop: |
457 | cmp dword [@Kolibri@_ExitProcessNow],0 |
463 | cmp dword [@Kolibri@_ExitProcessNow],0 |
458 | jl .exit_process_end |
464 | jl .exit_process_end |
459 | int 0x40 |
465 | int 0x40 |
460 | shl ebx,1 |
466 | shl ebx,1 |
461 | cmp ebx,KOLIBRI_MUTEX_MAX_TIME_WAIT |
467 | cmp ebx,KOLIBRI_MUTEX_MAX_TIME_WAIT |
462 | jna .exit_process_wait_loop |
468 | jna .exit_process_wait_loop |
463 | mov ebx,KOLIBRI_MUTEX_MAX_TIME_WAIT |
469 | mov ebx,KOLIBRI_MUTEX_MAX_TIME_WAIT |
464 | jmp .exit_process_wait_loop |
470 | jmp .exit_process_wait_loop |
465 | endp |
471 | endp |
- | 472 | ||
466 | 473 | align 4 |
|
467 | proc @Kolibri@ExitThread$qppv |
474 | proc @Kolibri@ExitThread$qppv |
468 | mov esp,[esp+4] |
475 | mov esp,[esp+4] |
469 | jmp @Kolibri@ThreadMain$qpvt1.main_end |
476 | jmp @Kolibri@ThreadMain$qpvt1.main_end |
470 | endp |
477 | endp |
- | 478 | ||
471 | 479 | align 4 |
|
472 | proc @Kolibri@ReturnMessageLoop$qppv |
480 | proc @Kolibri@ReturnMessageLoop$qppv |
473 | mov esp,[esp+4] |
481 | mov esp,[esp+4] |
474 | bt dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],30 |
482 | bt dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],30 |
475 | jc @Kolibri@ThreadMain$qpvt1.main_end |
483 | jc @Kolibri@ThreadMain$qpvt1.main_end |
476 | jmp @Kolibri@ThreadMain$qpvt1.main_cycle |
484 | jmp @Kolibri@ThreadMain$qpvt1.main_cycle |
477 | endp |
485 | endp |
- | 486 | ||
478 | 487 | align 4 |
|
479 | proc @Kolibri@Delay$qui uses ebx |
488 | proc @Kolibri@Delay$qui uses ebx |
480 | mov eax,SF_SLEEP |
489 | mov eax,SF_SLEEP |
481 | mov ebx,[esp+8] |
490 | mov ebx,[esp+8] |
482 | int 0x40 |
491 | int 0x40 |
483 | ret |
492 | ret |
484 | endp |
493 | endp |
- | 494 | ||
485 | 495 | align 4 |
|
486 | proc @Kolibri@Clock$qv uses ebx |
496 | proc @Kolibri@Clock$qv uses ebx |
487 | mov eax,SF_SYSTEM_GET |
497 | mov eax,SF_SYSTEM_GET |
488 | mov ebx,SSF_TIME_COUNT |
498 | mov ebx,SSF_TIME_COUNT |
489 | int 0x40 |
499 | int 0x40 |
490 | ret |
500 | ret |
491 | endp |
501 | endp |
- | 502 | ||
492 | 503 | align 4 |
|
493 | proc @Kolibri@DrawButton$qllllll uses ebx esi |
504 | proc @Kolibri@DrawButton$qllllll uses ebx esi |
494 | mov eax,SF_DEFINE_BUTTON |
505 | mov eax,SF_DEFINE_BUTTON |
495 | mov ebx,[esp+12-2+8] |
506 | mov ebx,[esp+12-2+8] |
496 | mov bx,[esp+20+8] |
507 | mov bx,[esp+20+8] |
497 | mov ecx,[esp+16-2+8] |
508 | mov ecx,[esp+16-2+8] |
498 | mov cx,[esp+24+8] |
509 | mov cx,[esp+24+8] |
499 | mov edx,[esp+4+8] |
510 | mov edx,[esp+4+8] |
500 | mov esi,[esp+8+8] |
511 | mov esi,[esp+8+8] |
501 | int 0x40 |
512 | int 0x40 |
502 | ret |
513 | ret |
503 | endp |
514 | endp |
- | 515 | ||
504 | 516 | align 4 |
|
505 | proc @Kolibri@GetPackedTime$qv |
517 | proc @Kolibri@GetPackedTime$qv |
506 | mov eax,SF_GET_SYS_TIME |
518 | mov eax,SF_GET_SYS_TIME |
507 | int 0x40 |
519 | int 0x40 |
508 | ret |
520 | ret |
509 | endp |
521 | endp |
- | 522 | ||
510 | 523 | align 4 |
|
511 | proc @Kolibri@GetTime$qpi |
524 | proc @Kolibri@GetTime$qpi |
512 | mov eax,SF_GET_SYS_TIME |
525 | mov eax,SF_GET_SYS_TIME |
513 | int 0x40 |
526 | int 0x40 |
514 | mov edx,[esp+4] |
527 | mov edx,[esp+4] |
515 | movzx ecx,al |
528 | movzx ecx,al |
516 | shr ecx,4 |
529 | shr ecx,4 |
517 | and al,0x0F |
530 | and al,0x0F |
518 | imul ecx,10 |
531 | imul ecx,10 |
519 | add cl,al |
532 | add cl,al |
520 | mov dword [edx+8],ecx |
533 | mov dword [edx+8],ecx |
521 | mov cl,ah |
534 | mov cl,ah |
522 | shr ecx,4 |
535 | shr ecx,4 |
523 | and ah,0x0F |
536 | and ah,0x0F |
524 | imul ecx,10 |
537 | imul ecx,10 |
525 | add cl,ah |
538 | add cl,ah |
526 | mov dword [edx+4],ecx |
539 | mov dword [edx+4],ecx |
527 | bswap eax |
540 | bswap eax |
528 | mov cl,ah |
541 | mov cl,ah |
529 | shr ecx,4 |
542 | shr ecx,4 |
530 | and ah,0x0F |
543 | and ah,0x0F |
531 | imul ecx,10 |
544 | imul ecx,10 |
532 | add cl,ah |
545 | add cl,ah |
533 | mov dword [edx],ecx |
546 | mov dword [edx],ecx |
534 | ret |
547 | ret |
535 | endp |
548 | endp |
- | 549 | ||
536 | 550 | align 4 |
|
537 | proc @Kolibri@GetPackedDate$qv |
551 | proc @Kolibri@GetPackedDate$qv |
538 | mov eax,SF_GET_SYS_DATE |
552 | mov eax,SF_GET_SYS_DATE |
539 | int 0x40 |
553 | int 0x40 |
540 | ret |
554 | ret |
541 | endp |
555 | endp |
- | 556 | ||
542 | 557 | align 4 |
|
543 | proc @Kolibri@GetDate$qpi |
558 | proc @Kolibri@GetDate$qpi |
544 | mov eax,SF_GET_SYS_DATE |
559 | mov eax,SF_GET_SYS_DATE |
545 | int 0x40 |
560 | int 0x40 |
546 | mov edx,[esp+4] |
561 | mov edx,[esp+4] |
547 | movzx ecx,al |
562 | movzx ecx,al |
548 | shr ecx,4 |
563 | shr ecx,4 |
549 | and al,0x0F |
564 | and al,0x0F |
550 | imul ecx,10 |
565 | imul ecx,10 |
551 | add cl,al |
566 | add cl,al |
552 | mov dword [edx+4],ecx |
567 | mov dword [edx+4],ecx |
553 | mov cl,ah |
568 | mov cl,ah |
554 | shr ecx,4 |
569 | shr ecx,4 |
555 | and ah,0x0F |
570 | and ah,0x0F |
556 | imul ecx,10 |
571 | imul ecx,10 |
557 | add cl,ah |
572 | add cl,ah |
558 | mov dword [edx],ecx |
573 | mov dword [edx],ecx |
559 | bswap eax |
574 | bswap eax |
560 | mov cl,ah |
575 | mov cl,ah |
561 | shr ecx,4 |
576 | shr ecx,4 |
562 | and ah,0x0F |
577 | and ah,0x0F |
563 | imul ecx,10 |
578 | imul ecx,10 |
564 | add cl,ah |
579 | add cl,ah |
565 | mov dword [edx+8],ecx |
580 | mov dword [edx+8],ecx |
566 | ret |
581 | ret |
567 | endp |
582 | endp |
- | 583 | ||
568 | 584 | align 4 |
|
569 | proc @Kolibri@ReadCommonColors$qpui uses ebx |
585 | proc @Kolibri@ReadCommonColors$qpui uses ebx |
570 | mov eax,SF_STYLE_SETTINGS |
586 | mov eax,SF_STYLE_SETTINGS |
571 | mov ebx,SSF_GET_COLORS |
587 | mov ebx,SSF_GET_COLORS |
572 | mov ecx,[esp+8] |
588 | mov ecx,[esp+8] |
573 | mov edx,40 |
589 | mov edx,40 |
574 | int 0x40 |
590 | int 0x40 |
575 | ret |
591 | ret |
576 | endp |
592 | endp |
- | 593 | ||
577 | 594 | align 4 |
|
578 | proc @Kolibri@DrawText$qssipxc uses ebx |
595 | proc @Kolibri@DrawText$qssipxc uses ebx |
579 | mov eax,SF_DRAW_TEXT |
596 | mov eax,SF_DRAW_TEXT |
580 | mov ebx,[esp+8-2] |
597 | mov ebx,[esp+8-2] |
581 | mov bx,[esp+12] |
598 | mov bx,[esp+12] |
582 | mov ecx,[esp+16] |
599 | mov ecx,[esp+16] |
583 | or ecx,0x80000000 |
600 | or ecx,0x80000000 |
584 | mov edx,[esp+20] |
601 | mov edx,[esp+20] |
585 | int 0x40 |
602 | int 0x40 |
586 | ret |
603 | ret |
587 | endp |
604 | endp |
- | 605 | ||
- | 606 | align 4 |
|
- | 607 | proc @Kolibri@DrawRect$qlllll uses ebx |
|
- | 608 | mov eax,SF_DRAW_RECT |
|
- | 609 | mov ebx,[esp+8-2] |
|
- | 610 | mov bx,[esp+16] |
|
- | 611 | mov ecx,[esp+12-2] |
|
- | 612 | mov cx,[esp+20] |
|
- | 613 | mov edx,[esp+24] |
|
- | 614 | int 0x40 |
|
- | 615 | ret |
|
- | 616 | endp |
|
- | 617 | ||
588 | 618 | align 4 |
|
589 | proc @Kolibri@PutImage$qpucllll uses ebx |
619 | proc @Kolibri@PutImage$qpucllll uses ebx |
590 | mov eax,SF_PUT_IMAGE |
620 | mov eax,SF_PUT_IMAGE |
591 | mov ebx,[esp+8] |
621 | mov ebx,[esp+8] |
592 | mov ecx,[esp+20-2] |
622 | mov ecx,[esp+20-2] |
593 | mov cx,[esp+24] |
623 | mov cx,[esp+24] |
594 | mov edx,[esp+12-2] |
624 | mov edx,[esp+12-2] |
595 | mov dx,[esp+16] |
625 | mov dx,[esp+16] |
596 | int 0x40 |
626 | int 0x40 |
597 | ret |
627 | ret |
598 | endp |
628 | endp |
- | 629 | ||
599 | 630 | align 4 |
|
600 | proc @Kolibri@SetWindowCaption$qpxc uses ebx |
631 | proc @Kolibri@SetWindowCaption$qpxc uses ebx |
601 | mov eax,SF_SET_CAPTION |
632 | mov eax,SF_SET_CAPTION |
602 | mov ebx,2 |
633 | mov ebx,2 |
603 | mov ecx,[esp+8] |
634 | mov ecx,[esp+8] |
604 | int 0x40 |
635 | int 0x40 |
605 | ret |
636 | ret |
606 | endp |
637 | endp |
- | 638 | ||
607 | 639 | align 4 |
|
608 | proc @Kolibri@GetProcessInfo$qpuipct1t1piui uses ebx esi edi |
640 | proc @Kolibri@GetProcessInfo$qpuipct1t1piui uses ebx esi edi |
609 | sub esp,1024 |
641 | sub esp,1024 |
610 | mov eax,SF_THREAD_INFO |
642 | mov eax,SF_THREAD_INFO |
611 | mov ebx,esp |
643 | mov ebx,esp |
612 | mov ecx,[1024+12+24+esp] |
644 | mov ecx,[1024+12+24+esp] |
613 | int 0x40 |
645 | int 0x40 |
614 | xor edi,edi |
646 | xor edi,edi |
615 | or edi,[1024+12+4+esp] |
647 | or edi,[1024+12+4+esp] |
616 | jz .get_proc_info_no_usecpu |
648 | jz .get_proc_info_no_usecpu |
617 | mov ecx,[esp] |
649 | mov ecx,[esp] |
618 | mov [edi],ecx |
650 | mov [edi],ecx |
619 | xor edi,edi |
651 | xor edi,edi |
620 | .get_proc_info_no_usecpu: |
652 | .get_proc_info_no_usecpu: |
621 | or edi,[1024+12+8+esp] |
653 | or edi,[1024+12+8+esp] |
622 | jz .get_proc_info_no_name |
654 | jz .get_proc_info_no_name |
623 | lea esi,[esp+process_information.process_name] |
655 | lea esi,[esp+process_information.process_name] |
624 | cld |
656 | cld |
625 | movsd |
657 | movsd |
626 | movsd |
658 | movsd |
627 | movsd |
659 | movsd |
628 | mov byte [edi],0 |
660 | mov byte [edi],0 |
629 | xor edi,edi |
661 | xor edi,edi |
630 | .get_proc_info_no_name: |
662 | .get_proc_info_no_name: |
631 | or edi,[1024+12+12+esp] |
663 | or edi,[1024+12+12+esp] |
632 | jz .get_proc_info_no_mem |
664 | jz .get_proc_info_no_mem |
633 | mov ecx,[esp+process_information.used_memory] |
665 | mov ecx,[esp+process_information.used_memory] |
634 | mov [edi],ecx |
666 | mov [edi],ecx |
635 | xor edi,edi |
667 | xor edi,edi |
636 | .get_proc_info_no_mem: |
668 | .get_proc_info_no_mem: |
637 | or edi,[1024+12+16+esp] |
669 | or edi,[1024+12+16+esp] |
638 | jz .get_proc_info_no_pid |
670 | jz .get_proc_info_no_pid |
639 | mov ecx,[esp+process_information.PID] |
671 | mov ecx,[esp+process_information.PID] |
640 | mov [edi],ecx |
672 | mov [edi],ecx |
641 | xor edi,edi |
673 | xor edi,edi |
642 | .get_proc_info_no_pid: |
674 | .get_proc_info_no_pid: |
643 | or edi,[1024+12+20+esp] |
675 | or edi,[1024+12+20+esp] |
644 | jz .get_proc_info_no_rect |
676 | jz .get_proc_info_no_rect |
645 | lea esi,[esp+process_information.box] |
677 | lea esi,[esp+process_information.box] |
646 | cld |
678 | cld |
647 | movsd |
679 | movsd |
648 | movsd |
680 | movsd |
649 | movsd |
681 | movsd |
650 | movsd |
682 | movsd |
651 | xor edi,edi |
683 | xor edi,edi |
652 | .get_proc_info_no_rect: |
684 | .get_proc_info_no_rect: |
653 | add esp,1024 |
685 | add esp,1024 |
654 | ret |
686 | ret |
655 | endp |
687 | endp |
- | 688 | ||
656 | 689 | align 4 |
|
657 | proc @Kolibri@GetPid$qv uses ebx |
690 | proc @Kolibri@GetPid$qv uses ebx |
658 | sub esp,1024 |
691 | sub esp,1024 |
659 | mov eax,SF_THREAD_INFO |
692 | mov eax,SF_THREAD_INFO |
660 | mov ebx,esp |
693 | mov ebx,esp |
661 | mov ecx,-1 |
694 | mov ecx,-1 |
662 | int 0x40 |
695 | int 0x40 |
663 | mov eax,[esp+30] |
696 | mov eax,[esp+process_information.PID] |
664 | add esp,1024 |
697 | add esp,1024 |
665 | ret |
698 | ret |
666 | endp |
699 | endp |
- | 700 | ||
667 | 701 | align 4 |
|
668 | proc @Kolibri@GetPid$qppv |
702 | proc @Kolibri@GetPid$qppv |
669 | mov ecx,[esp+4] |
703 | mov ecx,[esp+4] |
670 | mov eax,[ecx+KOLIBRI_THREAD_DATA_PID*4] |
704 | mov eax,[ecx+KOLIBRI_THREAD_DATA_PID*4] |
671 | ret |
705 | ret |
672 | endp |
706 | endp |
- | 707 | ||
673 | 708 | align 4 |
|
674 | proc @Kolibri@_HashByte$qui |
709 | proc @Kolibri@_HashByte$qui |
675 | @Kolibri@_HashWord$qui: |
710 | @Kolibri@_HashWord$qui: |
676 | @Kolibri@_HashDword$qui: |
711 | @Kolibri@_HashDword$qui: |
677 | mov eax,[esp+4] |
712 | mov eax,[esp+4] |
678 | Kolibri_HashInt: |
713 | Kolibri_HashInt: |
679 | mul dword [Kolibri_hash_int_val0] |
714 | mul dword [Kolibri_hash_int_val0] |
680 | xor eax,edx |
715 | xor eax,edx |
681 | bswap eax |
716 | bswap eax |
682 | mul dword [Kolibri_hash_int_val1] |
717 | mul dword [Kolibri_hash_int_val1] |
683 | shrd eax,edx,14 |
718 | shrd eax,edx,14 |
684 | bswap eax |
719 | bswap eax |
685 | lea eax,[eax+4*eax] |
720 | lea eax,[eax+4*eax] |
686 | ror eax,9 |
721 | ror eax,9 |
687 | ret |
722 | ret |
688 | endp |
723 | endp |
689 | 724 | ||
690 | if defined @Kolibri@_HashByte$qui | defined @Kolibri@_HashWord$qui | defined @Kolibri@_HashDword$qui |
725 | if defined @Kolibri@_HashByte$qui | defined @Kolibri@_HashWord$qui | defined @Kolibri@_HashDword$qui |
691 | Kolibri_hash_int_val0: |
726 | Kolibri_hash_int_val0: |
692 | dd 0xA82F94C5 |
727 | dd 0xA82F94C5 |
693 | Kolibri_hash_int_val1: |
728 | Kolibri_hash_int_val1: |
694 | dd 0x9193780B |
729 | dd 0x9193780B |
695 | end if |
730 | end if |
- | 731 | ||
696 | 732 | align 4 |
|
697 | proc @Kolibri@GetThreadData$qv |
733 | proc @Kolibri@GetThreadData$qv |
698 | call @Kolibri@GetPid$qv |
734 | call @Kolibri@GetPid$qv |
699 | push eax |
735 | push eax |
700 | call @Kolibri@GetThreadData$qui |
736 | call @Kolibri@GetThreadData$qui |
701 | pop ecx |
737 | pop ecx |
702 | ret |
738 | ret |
703 | endp |
739 | endp |
- | 740 | ||
704 | 741 | align 4 |
|
705 | proc @Kolibri@GetThreadData$qui |
742 | proc @Kolibri@GetThreadData$qui |
706 | mov eax,[esp+4] |
743 | mov eax,[esp+4] |
707 | call Kolibri_HashInt |
744 | call Kolibri_HashInt |
708 | movzx eax,al |
745 | movzx eax,al |
709 | cmp dword [@Kolibri@_ThreadScanCount+4],0 |
746 | cmp dword [@Kolibri@_ThreadScanCount+4],0 |
710 | jnz .get_thread_data_wait |
747 | jnz .get_thread_data_wait |
711 | .get_thread_data_nowait: |
748 | .get_thread_data_nowait: |
712 | lock inc dword [@Kolibri@_ThreadScanCount] |
749 | lock inc dword [@Kolibri@_ThreadScanCount] |
713 | mov eax,dword [@Kolibri@_ThreadTable+eax*4] |
750 | mov eax,dword [@Kolibri@_ThreadTable+eax*4] |
714 | mov ecx,[esp+4] |
751 | mov ecx,[esp+4] |
715 | jmp .get_thread_data_test |
752 | jmp .get_thread_data_test |
716 | .get_thread_data_loop: |
753 | .get_thread_data_loop: |
717 | mov eax,dword [eax+KOLIBRI_THREAD_DATA_NEXT*4] |
754 | mov eax,dword [eax+KOLIBRI_THREAD_DATA_NEXT*4] |
718 | .get_thread_data_test: |
755 | .get_thread_data_test: |
719 | test eax,eax |
756 | test eax,eax |
720 | jz .get_thread_data_end |
757 | jz .get_thread_data_end |
721 | cmp ecx,[eax+KOLIBRI_THREAD_DATA_PID*4] |
758 | cmp ecx,[eax+KOLIBRI_THREAD_DATA_PID*4] |
722 | jnz .get_thread_data_loop |
759 | jnz .get_thread_data_loop |
723 | .get_thread_data_end: |
760 | .get_thread_data_end: |
724 | lock dec dword [@Kolibri@_ThreadScanCount] |
761 | lock dec dword [@Kolibri@_ThreadScanCount] |
725 | ret |
762 | ret |
726 | .get_thread_data_wait: |
763 | .get_thread_data_wait: |
727 | push eax ebx |
764 | push eax ebx |
728 | mov eax,SF_SLEEP |
765 | mov eax,SF_SLEEP |
729 | mov ebx,1 |
766 | mov ebx,1 |
730 | .get_thread_data_wait_loop: |
767 | .get_thread_data_wait_loop: |
731 | int 0x40 |
768 | int 0x40 |
732 | cmp dword [@Kolibri@_ThreadScanCount+4],0 |
769 | cmp dword [@Kolibri@_ThreadScanCount+4],0 |
733 | jz .get_thread_data_wait_end |
770 | jz .get_thread_data_wait_end |
734 | shl ebx,1 |
771 | shl ebx,1 |
735 | cmp ebx,KOLIBRI_MUTEX_MAX_TIME_WAIT |
772 | cmp ebx,KOLIBRI_MUTEX_MAX_TIME_WAIT |
736 | jna .get_thread_data_wait_loop |
773 | jna .get_thread_data_wait_loop |
737 | mov ebx,KOLIBRI_MUTEX_MAX_TIME_WAIT |
774 | mov ebx,KOLIBRI_MUTEX_MAX_TIME_WAIT |
738 | jmp .get_thread_data_wait_loop |
775 | jmp .get_thread_data_wait_loop |
739 | .get_thread_data_wait_end: |
776 | .get_thread_data_wait_end: |
740 | pop ebx eax |
777 | pop ebx eax |
741 | jmp .get_thread_data_nowait |
778 | jmp .get_thread_data_nowait |
742 | endp |
779 | endp |
- | 780 | ||
743 | 781 | align 4 |
|
744 | proc @Kolibri@_GetSkinHeader$qv uses ebx |
782 | proc @Kolibri@_GetSkinHeader$qv uses ebx |
745 | mov eax,SF_STYLE_SETTINGS |
783 | mov eax,SF_STYLE_SETTINGS |
746 | mov ebx,SSF_GET_SKIN_HEIGHT |
784 | mov ebx,SSF_GET_SKIN_HEIGHT |
747 | int 0x40 |
785 | int 0x40 |
748 | ret |
786 | ret |
749 | endp |
787 | endp |
- | 788 | ||
750 | 789 | align 4 |
|
751 | proc @Kolibri@GetScreenSize$qrust1 |
790 | proc @Kolibri@GetScreenSize$qrust1 |
752 | mov eax,SF_GET_SCREEN_SIZE |
791 | mov eax,SF_GET_SCREEN_SIZE |
753 | int 0x40 |
792 | int 0x40 |
754 | mov ecx,[esp+8] |
793 | mov ecx,[esp+8] |
755 | mov word [ecx],ax |
794 | mov word [ecx],ax |
756 | mov ecx,[esp+4] |
795 | mov ecx,[esp+4] |
757 | shr eax,16 |
796 | shr eax,16 |
758 | mov word [ecx],ax |
797 | mov word [ecx],ax |
759 | ret |
798 | ret |
760 | endp |
799 | endp |
- | 800 | ||
761 | 801 | align 4 |
|
762 | proc Kolibri_MutexLockNoWait |
802 | proc Kolibri_MutexLockNoWait |
763 | pop eax |
803 | pop eax |
764 | xor al,al |
804 | xor al,al |
765 | ret |
805 | ret |
766 | endp |
806 | endp |
- | 807 | ||
767 | 808 | align 4 |
|
768 | proc Kolibri_MutexLockWait uses ebx |
809 | proc Kolibri_MutexLockWait uses ebx |
769 | mov eax,SF_SLEEP |
810 | mov eax,SF_SLEEP |
770 | xor ebx,ebx |
811 | xor ebx,ebx |
771 | .lock_wait_cycle: |
812 | .lock_wait_cycle: |
772 | int 0x40 |
813 | int 0x40 |
773 | shl byte [ecx],1 |
814 | shl byte [ecx],1 |
774 | jz .lock_wait_cycle |
815 | jz .lock_wait_cycle |
775 | mov al,1 |
816 | mov al,1 |
776 | ret |
817 | ret |
777 | endp |
818 | endp |
- | 819 | ||
778 | 820 | align 4 |
|
779 | proc Kolibri_MutexLockWaitTime |
821 | proc Kolibri_MutexLockWaitTime |
780 | cmp dword [esp+12],0 |
822 | cmp dword [esp+12],0 |
781 | jng .MutexLockWait |
823 | jng .MutexLockWait |
782 | push ebx edx |
824 | push ebx edx |
783 | mov edx,[esp+20] |
825 | mov edx,[esp+20] |
784 | mov eax,SF_SYSTEM_GET |
826 | mov eax,SF_SYSTEM_GET |
785 | mov ebx,SSF_TIME_COUNT |
827 | mov ebx,SSF_TIME_COUNT |
786 | int 0x40 |
828 | int 0x40 |
787 | add edx,eax |
829 | add edx,eax |
788 | .lock_wait_time_cycle: |
830 | .lock_wait_time_cycle: |
789 | mov eax,SF_SLEEP |
831 | mov eax,SF_SLEEP |
790 | xor ebx,ebx |
832 | xor ebx,ebx |
791 | int 0x40 |
833 | int 0x40 |
792 | shl byte [ecx],1 |
834 | shl byte [ecx],1 |
793 | jnz .lock_wait_time_ret_true |
835 | jnz .lock_wait_time_ret_true |
794 | mov eax,SF_SYSTEM_GET |
836 | mov eax,SF_SYSTEM_GET |
795 | mov ebx,SSF_TIME_COUNT |
837 | mov ebx,SSF_TIME_COUNT |
796 | int 0x40 |
838 | int 0x40 |
797 | cmp eax,edx |
839 | cmp eax,edx |
798 | js .lock_wait_time_cycle |
840 | js .lock_wait_time_cycle |
799 | pop edx ebx eax |
841 | pop edx ebx eax |
800 | xor al,al |
842 | xor al,al |
801 | ret |
843 | ret |
802 | .lock_wait_time_ret_true: |
844 | .lock_wait_time_ret_true: |
803 | pop edx ebx |
845 | pop edx ebx |
804 | mov al,1 |
846 | mov al,1 |
805 | ret |
847 | ret |
806 | endp |
848 | endp |
- | 849 | ||
807 | 850 | align 4 |
|
808 | proc Kolibri_MutexLock |
851 | proc Kolibri_MutexLock |
809 | shl byte [ecx],1 |
852 | shl byte [ecx],1 |
810 | jnz .lock_first |
853 | jnz .lock_first |
811 | call eax |
854 | call eax |
812 | .lock_first: |
855 | .lock_first: |
813 | mov al,1 |
856 | mov al,1 |
814 | ret |
857 | ret |
815 | endp |
858 | endp |
- | 859 | ||
816 | 860 | align 4 |
|
817 | proc @Kolibri@TryLock$qp14Kolibri@TMutex |
861 | proc @Kolibri@TryLock$qp14Kolibri@TMutex |
818 | mov eax,Kolibri_MutexLockNoWait |
862 | mov eax,Kolibri_MutexLockNoWait |
819 | mov ecx,[esp+4] |
863 | mov ecx,[esp+4] |
820 | jmp Kolibri_MutexLock |
864 | jmp Kolibri_MutexLock |
821 | endp |
865 | endp |
- | 866 | ||
822 | 867 | align 4 |
|
823 | proc @Kolibri@Lock$qp14Kolibri@TMutex |
868 | proc @Kolibri@Lock$qp14Kolibri@TMutex |
824 | mov eax,Kolibri_MutexLockWait |
869 | mov eax,Kolibri_MutexLockWait |
825 | mov ecx,[esp+4] |
870 | mov ecx,[esp+4] |
826 | jmp Kolibri_MutexLock |
871 | jmp Kolibri_MutexLock |
827 | endp |
872 | endp |
- | 873 | ||
828 | 874 | align 4 |
|
829 | proc @Kolibri@LockTime$qp14Kolibri@TMutexi |
875 | proc @Kolibri@LockTime$qp14Kolibri@TMutexi |
830 | mov eax,Kolibri_MutexLockWaitTime |
876 | mov eax,Kolibri_MutexLockWaitTime |
831 | mov ecx,[esp+4] |
877 | mov ecx,[esp+4] |
832 | jmp Kolibri_MutexLock |
878 | jmp Kolibri_MutexLock |
833 | endp |
879 | endp |
- | 880 | ||
834 | 881 | align 4 |
|
835 | proc @Kolibri@UnLock$qp14Kolibri@TMutex |
882 | proc @Kolibri@UnLock$qp14Kolibri@TMutex |
836 | mov ecx,[esp+4] |
883 | mov ecx,[esp+4] |
837 | shr byte [ecx],1 |
884 | shr byte [ecx],1 |
838 | jz .unlock_pause |
885 | jz .unlock_pause |
839 | ret |
886 | ret |
840 | .unlock_pause: |
887 | .unlock_pause: |
841 | mov byte [ecx],0x40 |
888 | mov byte [ecx],0x40 |
842 | push ebx |
889 | push ebx |
843 | mov eax,SF_SLEEP |
890 | mov eax,SF_SLEEP |
844 | xor ebx,ebx |
891 | xor ebx,ebx |
845 | int 0x40 |
892 | int 0x40 |
846 | pop ebx |
893 | pop ebx |
847 | ret |
894 | ret |
848 | endp |
895 | endp |
- | 896 | ||
849 | 897 | align 4 |
|
850 | proc Kolibri_MutexLockRec |
898 | proc Kolibri_MutexLockRec |
851 | shl byte [ecx],1 |
899 | shl byte [ecx],1 |
852 | jng .lock_first |
900 | jng .lock_first |
853 | cmp dword [ecx+4],edx |
901 | cmp dword [ecx+4],edx |
854 | jz .lock_rec_self |
902 | jz .lock_rec_self |
855 | call eax |
903 | call eax |
856 | .lock_rec_first: |
904 | .lock_rec_first: |
857 | mov al,1 |
905 | mov al,1 |
858 | mov dword [ecx+4],edx |
906 | mov dword [ecx+4],edx |
859 | ret |
907 | ret |
860 | .lock_rec_self: |
908 | .lock_rec_self: |
861 | mov al,1 |
909 | mov al,1 |
862 | add dword [ecx],0x100 |
910 | add dword [ecx],0x100 |
863 | jc .lock_rec_overflow |
911 | jc .lock_rec_overflow |
864 | ret |
912 | ret |
865 | .lock_rec_overflow: |
913 | .lock_rec_overflow: |
866 | push dword [@Kolibri@DebugPrefix] |
914 | push dword [@Kolibri@DebugPrefix] |
867 | call @Kolibri@DebugPutString$qpxc |
915 | call @Kolibri@DebugPutString$qpxc |
868 | mov dword [esp],Kolibri_try_lock_rec_overflow_string |
916 | mov dword [esp],Kolibri_try_lock_rec_overflow_string |
869 | call @Kolibri@DebugPutString$qpxc |
917 | call @Kolibri@DebugPutString$qpxc |
870 | pop ecx |
918 | pop ecx |
871 | jmp @Kolibri@ExitDebug$qv |
919 | jmp @Kolibri@ExitDebug$qv |
872 | endp |
920 | endp |
- | 921 | ||
873 | 922 | align 4 |
|
874 | proc @Kolibri@TryLock$qp16Kolibri@TRecMutexui |
923 | proc @Kolibri@TryLock$qp16Kolibri@TRecMutexui |
875 | mov eax,Kolibri_MutexLockNoWait |
924 | mov eax,Kolibri_MutexLockNoWait |
876 | mov ecx,[esp+4] |
925 | mov ecx,[esp+4] |
877 | mov edx,[esp+8] |
926 | mov edx,[esp+8] |
878 | jmp Kolibri_MutexLockRec |
927 | jmp Kolibri_MutexLockRec |
879 | endp |
928 | endp |
- | 929 | ||
880 | 930 | align 4 |
|
881 | proc @Kolibri@Lock$qp16Kolibri@TRecMutexui |
931 | proc @Kolibri@Lock$qp16Kolibri@TRecMutexui |
882 | mov eax,Kolibri_MutexLockWait |
932 | mov eax,Kolibri_MutexLockWait |
883 | mov ecx,[esp+4] |
933 | mov ecx,[esp+4] |
884 | mov edx,[esp+8] |
934 | mov edx,[esp+8] |
885 | jmp Kolibri_MutexLockRec |
935 | jmp Kolibri_MutexLockRec |
886 | endp |
936 | endp |
- | 937 | ||
887 | 938 | align 4 |
|
888 | proc @Kolibri@LockTime$qp16Kolibri@TRecMutexiui |
939 | proc @Kolibri@LockTime$qp16Kolibri@TRecMutexiui |
889 | mov eax,Kolibri_MutexLockWaitTime |
940 | mov eax,Kolibri_MutexLockWaitTime |
890 | mov ecx,[esp+4] |
941 | mov ecx,[esp+4] |
891 | mov edx,[esp+12] |
942 | mov edx,[esp+12] |
892 | jmp Kolibri_MutexLockRec |
943 | jmp Kolibri_MutexLockRec |
893 | endp |
944 | endp |
- | 945 | ||
894 | 946 | align 4 |
|
895 | proc @Kolibri@UnLock$qp16Kolibri@TRecMutexui |
947 | proc @Kolibri@UnLock$qp16Kolibri@TRecMutexui |
896 | mov ecx,[esp+4] |
948 | mov ecx,[esp+4] |
897 | mov edx,[esp+8] |
949 | mov edx,[esp+8] |
898 | cmp dword [ecx+4],edx |
950 | cmp dword [ecx+4],edx |
899 | jnz .unlock_rec_notlocked |
951 | jnz .unlock_rec_notlocked |
900 | sub dword [ecx],0x100 |
952 | sub dword [ecx],0x100 |
901 | jnc .unlock_rec_end |
953 | jnc .unlock_rec_end |
902 | add dword [ecx],0x100 |
954 | add dword [ecx],0x100 |
903 | shl byte [ecx],1 |
955 | shl byte [ecx],1 |
904 | shr byte [ecx],2 |
956 | shr byte [ecx],2 |
905 | jng .unlock_rec_pause |
957 | jng .unlock_rec_pause |
906 | .unlock_rec_end: |
958 | .unlock_rec_end: |
907 | ret |
959 | ret |
908 | .unlock_rec_pause: |
960 | .unlock_rec_pause: |
909 | mov byte [ecx],0x20 |
961 | mov byte [ecx],0x20 |
910 | push ebx |
962 | push ebx |
911 | mov eax,SF_SLEEP |
963 | mov eax,SF_SLEEP |
912 | xor ebx,ebx |
964 | xor ebx,ebx |
913 | int 0x40 |
965 | int 0x40 |
914 | pop ebx |
966 | pop ebx |
915 | ret |
967 | ret |
916 | .unlock_rec_notlocked: |
968 | .unlock_rec_notlocked: |
917 | push dword [@Kolibri@DebugPrefix] |
969 | push dword [@Kolibri@DebugPrefix] |
918 | call @Kolibri@DebugPutString$qpxc |
970 | call @Kolibri@DebugPutString$qpxc |
919 | mov dword [esp],Kolibri_unlock_rec_notlocked_string |
971 | mov dword [esp],Kolibri_unlock_rec_notlocked_string |
920 | call @Kolibri@DebugPutString$qpxc |
972 | call @Kolibri@DebugPutString$qpxc |
921 | pop ecx |
973 | pop ecx |
922 | jmp @Kolibri@ExitDebug$qv |
974 | jmp @Kolibri@ExitDebug$qv |
923 | endp |
975 | endp |
- | 976 | ||
924 | 977 | align 4 |
|
925 | proc @Kolibri@DebugPutChar$qc |
978 | proc @Kolibri@DebugPutChar$qc |
926 | mov cl,byte [esp+4] |
979 | mov cl,byte [esp+4] |
927 | cmp cl,13 |
980 | cmp cl,13 |
928 | jz .debug_put_char_ret |
981 | jz .debug_put_char_ret |
929 | push ebx |
982 | push ebx |
930 | cmp cl,10 |
983 | cmp cl,10 |
931 | jz .debug_put_char_enter |
984 | jz .debug_put_char_enter |
932 | .debug_put_char_after_cmp: |
985 | .debug_put_char_after_cmp: |
933 | mov eax,SF_BOARD |
986 | mov eax,SF_BOARD |
934 | mov ebx,SSF_DEBUG_WRITE |
987 | mov ebx,SSF_DEBUG_WRITE |
935 | int 0x40 |
988 | int 0x40 |
936 | pop ebx |
989 | pop ebx |
937 | .debug_put_char_ret: |
990 | .debug_put_char_ret: |
938 | ret |
991 | ret |
939 | .debug_put_char_enter: |
992 | .debug_put_char_enter: |
940 | mov cl,13 |
993 | mov cl,13 |
941 | mov eax,SF_BOARD |
994 | mov eax,SF_BOARD |
942 | mov ebx,SSF_DEBUG_WRITE |
995 | mov ebx,SSF_DEBUG_WRITE |
943 | int 0x40 |
996 | int 0x40 |
944 | mov cl,10 |
997 | mov cl,10 |
945 | jmp .debug_put_char_after_cmp |
998 | jmp .debug_put_char_after_cmp |
946 | endp |
999 | endp |
- | 1000 | ||
947 | 1001 | align 4 |
|
948 | proc @Kolibri@DebugPutString$qpxc uses esi |
1002 | proc @Kolibri@DebugPutString$qpxc uses esi |
949 | push dword 0 |
1003 | push dword 0 |
950 | mov esi,dword [esp+12] |
1004 | mov esi,dword [esp+12] |
951 | jmp .debug_put_string_test |
1005 | jmp .debug_put_string_test |
952 | .debug_put_string_loop: |
1006 | .debug_put_string_loop: |
953 | mov dword [esp],eax |
1007 | mov dword [esp],eax |
954 | call @Kolibri@DebugPutChar$qc |
1008 | call @Kolibri@DebugPutChar$qc |
955 | inc esi |
1009 | inc esi |
956 | .debug_put_string_test: |
1010 | .debug_put_string_test: |
957 | xor eax,eax |
1011 | xor eax,eax |
958 | or al,[esi] |
1012 | or al,[esi] |
959 | test al,al |
1013 | test al,al |
960 | jnz .debug_put_string_loop |
1014 | jnz .debug_put_string_loop |
961 | pop ecx |
1015 | pop ecx |
962 | ret |
1016 | ret |
963 | endp |
1017 | endp |
- | 1018 | ||
964 | 1019 | align 4 |
|
965 | proc @Kolibri@GetKey$qv |
1020 | proc @Kolibri@GetKey$qv |
966 | mov eax,SF_GET_KEY |
1021 | mov eax,SF_GET_KEY |
967 | int 0x40 |
1022 | int 0x40 |
968 | test al,al |
1023 | test al,al |
969 | jnz .get_key_eof |
1024 | jnz .get_key_eof |
970 | movzx eax,ah |
1025 | movzx eax,ah |
971 | ret |
1026 | ret |
972 | .get_key_eof: |
1027 | .get_key_eof: |
973 | mov eax,SF_TERMINATE_PROCESS |
1028 | mov eax,SF_TERMINATE_PROCESS |
974 | ret |
1029 | ret |
975 | endp |
1030 | endp |
- | 1031 | ||
976 | 1032 | align 4 |
|
977 | proc @Kolibri@GetMouseButton$qv uses ebx |
1033 | proc @Kolibri@GetMouseButton$qv uses ebx |
978 | mov eax,SF_MOUSE_GET |
1034 | mov eax,SF_MOUSE_GET |
979 | mov ebx,SSF_BUTTON |
1035 | mov ebx,SSF_BUTTON |
980 | int 0x40 |
1036 | int 0x40 |
981 | ret |
1037 | ret |
982 | endp |
1038 | endp |
- | 1039 | ||
983 | 1040 | align 4 |
|
984 | proc @Kolibri@GetMousePosition$qrst1o uses ebx |
1041 | proc @Kolibri@GetMousePosition$qrst1o uses ebx |
985 | mov eax,SF_MOUSE_GET |
1042 | mov eax,SF_MOUSE_GET |
986 | xor ebx,ebx ;SSF_SCREEN_POSITION |
1043 | xor ebx,ebx ;SSF_SCREEN_POSITION |
987 | cmp byte [esp+16],0 |
1044 | cmp byte [esp+16],0 |
988 | jnz .get_mouse_pos_absolute |
1045 | jnz .get_mouse_pos_absolute |
989 | inc ebx |
1046 | inc ebx |
990 | .get_mouse_pos_absolute: |
1047 | .get_mouse_pos_absolute: |
991 | int 0x40 |
1048 | int 0x40 |
992 | mov ecx,[esp+12] |
1049 | mov ecx,[esp+12] |
993 | mov word [ecx],ax |
1050 | mov word [ecx],ax |
994 | mov ecx,[esp+8] |
1051 | mov ecx,[esp+8] |
995 | shr eax,16 |
1052 | shr eax,16 |
996 | mov word [ecx],ax |
1053 | mov word [ecx],ax |
997 | ret |
1054 | ret |
998 | endp |
1055 | endp |
- | 1056 | ||
999 | 1057 | align 4 |
|
1000 | proc @Kolibri@WasThreadCreated$qv |
1058 | proc @Kolibri@WasThreadCreated$qv |
1001 | cmp byte [@Kolibri@_ThreadSavedBegProc],0x90 |
1059 | cmp byte [@Kolibri@_ThreadSavedBegProc],0x90 |
1002 | setz al |
1060 | setz al |
1003 | ret |
1061 | ret |
1004 | endp |
1062 | endp |
- | 1063 | ||
1005 | 1064 | align 4 |
|
1006 | proc @Kolibri@CreateThread$qpvuit1 |
1065 | proc @Kolibri@CreateThread$qpvuit1 |
1007 | push ebx |
1066 | push ebx |
1008 | mov edx,[esp+16] |
1067 | mov edx,[esp+16] |
1009 | mov ebx,[esp+12] |
1068 | mov ebx,[esp+12] |
1010 | test edx,edx |
1069 | test edx,edx |
1011 | jnz .create_thread_after_new |
1070 | jnz .create_thread_after_new |
1012 | if defined KolibriHeapAlloc |
1071 | if defined KolibriHeapAlloc |
1013 | cmp ebx,4096 |
1072 | cmp ebx,4096 |
1014 | jnb .create_thread_alloc |
1073 | jnb .create_thread_alloc |
1015 | mov ebx,STACKSIZE |
1074 | mov ebx,STACKSIZE |
1016 | .create_thread_alloc: |
1075 | .create_thread_alloc: |
1017 | push ebx |
1076 | push ebx |
1018 | call KolibriHeapAlloc ; Create new dynamic memory of the given size |
1077 | call KolibriHeapAlloc ; Create new dynamic memory of the given size |
1019 | pop ecx |
1078 | pop ecx |
1020 | test eax,eax |
1079 | test eax,eax |
1021 | jnz .create_thread_mem_created |
1080 | jnz .create_thread_mem_created |
1022 | end if |
1081 | end if |
1023 | or eax,-1 |
1082 | or eax,-1 |
1024 | jmp .create_thread_end |
1083 | jmp .create_thread_end |
1025 | .create_thread_mem_created: |
1084 | .create_thread_mem_created: |
1026 | lea edx,[eax+ebx] |
1085 | lea edx,[eax+ebx] |
1027 | .create_thread_after_new: |
1086 | .create_thread_after_new: |
1028 | neg ebx |
1087 | neg ebx |
1029 | jz .create_thread_test_first |
1088 | jz .create_thread_test_first |
1030 | add ebx,edx |
1089 | add ebx,edx |
1031 | .create_thread_test_first: |
1090 | .create_thread_test_first: |
1032 | cmp byte [@Kolibri@_ThreadSavedBegProc],0x90 |
1091 | cmp byte [@Kolibri@_ThreadSavedBegProc],0x90 |
1033 | jnz .create_thread_init |
1092 | jnz .create_thread_init |
1034 | .create_thread_fill_stack: |
1093 | .create_thread_fill_stack: |
1035 | lock inc dword [@Kolibri@_ThreadNumber] |
1094 | lock inc dword [@Kolibri@_ThreadNumber] |
1036 | and edx,not 3 |
1095 | and edx,not 3 |
1037 | sub edx,12 |
1096 | sub edx,12 |
1038 | mov ecx,[esp+8] |
1097 | mov ecx,[esp+8] |
1039 | mov dword [edx+8],ebx |
1098 | mov dword [edx+8],ebx |
1040 | mov dword [edx+4],ecx |
1099 | mov dword [edx+4],ecx |
1041 | mov dword [edx],Kolibri_ThreadFinish |
1100 | mov dword [edx],Kolibri_ThreadFinish |
1042 | mov eax,SF_CREATE_THREAD |
1101 | mov eax,SF_CREATE_THREAD |
1043 | mov ebx,1 |
1102 | mov ebx,1 |
1044 | mov ecx,@Kolibri@ThreadMain$qpvt1 |
1103 | mov ecx,@Kolibri@ThreadMain$qpvt1 |
1045 | int 0x40 |
1104 | int 0x40 |
1046 | mov ebx,eax |
1105 | mov ebx,eax |
1047 | or bl,15 |
1106 | or bl,15 |
1048 | inc ebx |
1107 | inc ebx |
1049 | jnz .create_thread_end |
1108 | jnz .create_thread_end |
1050 | lock dec dword [@Kolibri@_ThreadNumber] |
1109 | lock dec dword [@Kolibri@_ThreadNumber] |
1051 | if defined KolibriHeapFree |
1110 | if defined KolibriHeapFree |
1052 | or ebx,[edx+8] |
1111 | or ebx,[edx+8] |
1053 | jz .create_thread_end |
1112 | jz .create_thread_end |
1054 | push ebx |
1113 | push ebx |
1055 | call KolibriHeapFree ; Delete the given dynamic memory |
1114 | call KolibriHeapFree ; Delete the given dynamic memory |
1056 | pop ecx |
1115 | pop ecx |
1057 | end if |
1116 | end if |
1058 | .create_thread_end: |
1117 | .create_thread_end: |
1059 | pop ebx |
1118 | pop ebx |
1060 | ret |
1119 | ret |
1061 | .create_thread_init: |
1120 | .create_thread_init: |
1062 | push esi edi |
1121 | push esi edi |
1063 | cld |
1122 | cld |
1064 | mov esi,@Kolibri@_ThreadSavedBegProc |
1123 | mov esi,@Kolibri@_ThreadSavedBegProc |
1065 | mov edi,@Kolibri@GetPid$qv |
1124 | mov edi,@Kolibri@GetPid$qv |
1066 | movsd |
1125 | movsd |
1067 | movsd |
1126 | movsd |
1068 | mov edi,@Kolibri@GetThreadData$qv |
1127 | mov edi,@Kolibri@GetThreadData$qv |
1069 | movsd |
1128 | movsd |
1070 | movsd |
1129 | movsd |
1071 | mov eax,0x90909090 |
1130 | mov eax,0x90909090 |
1072 | mov edi,@Kolibri@_ThreadSavedBegProc |
1131 | mov edi,@Kolibri@_ThreadSavedBegProc |
1073 | stosd |
1132 | stosd |
1074 | stosd |
1133 | stosd |
1075 | stosd |
1134 | stosd |
1076 | stosd |
1135 | stosd |
1077 | pop edi esi |
1136 | pop edi esi |
1078 | jmp .create_thread_fill_stack |
1137 | jmp .create_thread_fill_stack |
1079 | endp |
1138 | endp |
- | 1139 | ||
1080 | 1140 | align 4 |
|
1081 | proc @Kolibri@_FileAccess$qp21Kolibri@FileInfoBlock uses ebx |
1141 | proc @Kolibri@_FileAccess$qp21Kolibri@FileInfoBlock uses ebx |
1082 | mov eax,SF_FILE |
1142 | mov eax,SF_FILE |
1083 | mov ebx,[esp+8] |
1143 | mov ebx,[esp+8] |
1084 | int 0x40 |
1144 | int 0x40 |
1085 | mov ecx,[esp+8] |
1145 | mov ecx,[esp+8] |
1086 | mov [ecx],ebx |
1146 | mov [ecx],ebx |
1087 | ret |
1147 | ret |
1088 | endp |
1148 | endp |
1089 | 1149 | ||
1090 | if defined Kolibri_debug_string |
1150 | if defined Kolibri_debug_string |
1091 | Kolibri_debug_string: |
1151 | Kolibri_debug_string: |
1092 | db 'Abnormal program termination.',10,0 |
1152 | db 'Abnormal program termination.',10,0 |
1093 | end if |
1153 | end if |
1094 | 1154 | ||
1095 | if defined Kolibri_MutexLockRec |
1155 | if defined Kolibri_MutexLockRec |
1096 | Kolibri_try_lock_rec_overflow_string: |
1156 | Kolibri_try_lock_rec_overflow_string: |
1097 | db 'Recursive mutex lock count overflow.',10,0 |
1157 | db 'Recursive mutex lock count overflow.',10,0 |
1098 | end if |
1158 | end if |
1099 | 1159 | ||
1100 | if defined @Kolibri@UnLock$qp16Kolibri@TRecMutexui |
1160 | if defined @Kolibri@UnLock$qp16Kolibri@TRecMutexui |
1101 | Kolibri_unlock_rec_notlocked_string: |
1161 | Kolibri_unlock_rec_notlocked_string: |
1102 | db 'Recursive mutex unlock error.',10,0 |
1162 | db 'Recursive mutex unlock error.',10,0 |
1103 | end if |
1163 | end if |
1104 | 1164 | ||
1105 | include "kos_lib.inc" |
1165 | include "kos_lib.inc" |
1106 | 1166 | ||
1107 | ;/**/ |
1167 | ;/**/ |