Subversion Repositories Kolibri OS

Rev

Rev 8153 | Rev 8179 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 8153 Rev 8165
Line 77... Line 77...
77
}
77
}
Line 78... Line 78...
78
 
78
 
79
proc @Kolibri@Main$qv
79
proc @Kolibri@Main$qv
80
  and  esp,not 3
80
  and  esp,not 3
81
  sub  esp,1024
81
  sub  esp,1024
82
  mov  eax,9
82
  mov  eax,SF_THREAD_INFO
83
  mov  ebx,esp
83
  mov  ebx,esp
84
  mov  ecx,-1
84
  mov  ecx,-1
85
  int  0x40
85
  int  0x40
86
  mov  ebx,[esp+26]
86
  mov  ebx,[esp+26]
Line 95... Line 95...
95
end if
95
end if
96
  xor  eax,eax
96
  xor  eax,eax
97
  cld
97
  cld
98
  mov  edi,@Kolibri@_ThreadTable
98
  mov  edi,@Kolibri@_ThreadTable
99
  mov  ecx,256
99
  mov  ecx,256
100
  rep stos dword [edi]
100
  rep stosd
101
  mov  esi,@Kolibri@GetPid$qv
101
  mov  esi,@Kolibri@GetPid$qv
102
  mov  edi,@Kolibri@_ThreadSavedBegProc
102
  mov  edi,@Kolibri@_ThreadSavedBegProc
103
  movs dword [edi],[esi]
103
  movsd
104
  movs dword [edi],[esi]
104
  movsd
105
  mov  esi,@Kolibri@GetThreadData$qv
105
  mov  esi,@Kolibri@GetThreadData$qv
106
  movs dword [edi],[esi]
106
  movsd
107
  movs dword [edi],[esi]
107
  movsd
108
  Kolibri_Put_MovEaxVal_Ret  @Kolibri@GetPid$qv,edx
108
  Kolibri_Put_MovEaxVal_Ret  @Kolibri@GetPid$qv,edx
109
if defined KolibriHeapInit
109
if defined KolibriHeapInit
110
  mov  ecx,esp
110
  mov  ecx,esp
111
  push ebx
111
  push ebx
112
  push ecx
112
  push ecx
Line 140... Line 140...
140
  xchg ebp,[esp+8]
140
  xchg ebp,[esp+8]
141
  push esi edi
141
  push esi edi
142
  sub  esp,KOLIBRI_THREAD_DATA_LEN*4
142
  sub  esp,KOLIBRI_THREAD_DATA_LEN*4
143
  mov  [esp],ebx
143
  mov  [esp],ebx
144
  mov  [esp+4],ebp
144
  mov  [esp+4],ebp
145
  mov  eax,40
145
  mov  eax,SF_SET_EVENTS_MASK
146
  mov  ebx,0x27
146
  mov  ebx,0x27
147
  int  0x40
147
  int  0x40
148
  mov  ebx,esp
148
  mov  ebx,esp
149
  cmp  byte [@Kolibri@_ThreadSavedBegProc],0x90
149
  cmp  byte [@Kolibri@_ThreadSavedBegProc],0x90
150
  jz   .main_else_first_check
150
  jz   .main_else_first_check
Line 164... Line 164...
164
  test al,al
164
  test al,al
165
  jnz  .main_test_close_first
165
  jnz  .main_test_close_first
166
  jmp  .main_end
166
  jmp  .main_end
167
.main_close_first:
167
.main_close_first:
168
  btr  dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],31
168
  btr  dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],31
-
 
169
if defined @@KolibriOnClose$qppv
169
  push esp
170
  push esp
170
  call @@KolibriOnClose$qppv
171
  call @@KolibriOnClose$qppv
171
  pop  ecx
172
  pop  ecx
172
  test al,al
173
  test al,al
173
  jnz  .main_end
174
  jnz  .main_end
-
 
175
end if
174
.main_test_close_first:
176
.main_test_close_first:
175
  cmp  dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],0
177
  cmp  dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],0
176
  jl   .main_close_first
178
  jl   .main_close_first
177
;  push esp
179
;  push esp
178
;  push dword 1
180
;  push dword 1
179
;  call @Kolibri@Redraw$qippv
181
;  call @Kolibri@Redraw$qippv
180
;  add	esp,8
182
;  add	esp,8
181
.main_paint_msg:
183
.main_paint_msg:
182
  or   dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],3
184
  or   dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],3
183
  sub  esp,1024
185
  sub  esp,1024
184
  mov  eax,9
186
  mov  eax,SF_THREAD_INFO
185
  mov  ebx,esp
187
  mov  ebx,esp
186
  mov  ecx,-1
188
  mov  ecx,-1
187
  int  0x40
189
  int  0x40
188
  mov  eax,[esp+34]
190
  mov  eax,[esp+34]
189
  mov  ebx,[esp+38]
191
  mov  ebx,[esp+38]
Line 195... Line 197...
195
  cmp  edx,[esp+KOLIBRI_THREAD_DATA_LAST_SY*4]
197
  cmp  edx,[esp+KOLIBRI_THREAD_DATA_LAST_SY*4]
196
  jz   .main_paint
198
  jz   .main_paint
197
.main_size:
199
.main_size:
198
  mov  [esp+KOLIBRI_THREAD_DATA_LAST_SX*4],ecx
200
  mov  [esp+KOLIBRI_THREAD_DATA_LAST_SX*4],ecx
199
  mov  [esp+KOLIBRI_THREAD_DATA_LAST_SY*4],edx
201
  mov  [esp+KOLIBRI_THREAD_DATA_LAST_SY*4],edx
-
 
202
if defined @@KolibriOnSize$qpippv
200
  push edx
203
  push edx
201
  push ecx
204
  push ecx
202
  push ebx
205
  push ebx
203
  push eax
206
  push eax
204
  lea  ecx,[esp+16]
207
  lea  ecx,[esp+16]
205
  mov  edx,esp
208
  mov  edx,esp
206
  push ecx
209
  push ecx
207
  push edx
210
  push edx
208
  call @@KolibriOnSize$qpippv
211
  call @@KolibriOnSize$qpippv
209
  add  esp,24
212
  add  esp,24
-
 
213
end if
210
  test dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],3
214
  test dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],3
211
  jz   .main_cycle
215
  jz   .main_cycle
212
.main_paint:
216
.main_paint:
213
  cmp  dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],0
217
  cmp  dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],0
214
  jl   .main_close
218
  jl   .main_close
215
  push esp
219
  push esp
216
  push dword 0
220
  push dword 0
217
  call @Kolibri@Redraw$qippv
221
  call @Kolibri@Redraw$qippv
218
  add  esp,8
222
  add  esp,8
219
.main_cycle:
223
.main_cycle:
220
  mov  eax,11
224
  mov  eax,SF_CHECK_EVENT
221
.main_message:
225
.main_message:
222
  cmp  dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],0
226
  cmp  dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],0
223
  jl   .main_close
227
  jl   .main_close
224
  int  0x40
228
  int  0x40
225
  test eax,eax
229
  test eax,eax
226
  jnz  .main_on_message
230
  jnz  .main_on_message
227
  cmp  dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],0
231
  cmp  dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],0
228
  jne  .main_paint
232
  jne  .main_paint
-
 
233
if defined @@KolibriOnIdle$qppv
229
  push esp
234
  push esp
230
  call @@KolibriOnIdle$qppv
235
  call @@KolibriOnIdle$qppv
231
  pop  ecx
236
  pop  ecx
-
 
237
else
-
 
238
  or eax,-1
-
 
239
end if
232
  test eax,eax
240
  test eax,eax
233
  jz   .main_cycle
241
  jz   .main_cycle
234
  jl   .main_wait_message
242
  jl   .main_wait_message
235
  mov  ebx,eax
243
  mov  ebx,eax
236
  mov  eax,23
244
  mov  eax,SF_WAIT_EVENT_TIMEOUT
237
  jmp  .main_message
245
  jmp  .main_message
238
.main_wait_message:
246
.main_wait_message:
239
  mov  eax,10
247
  mov  eax,SF_WAIT_EVENT
240
  jmp  .main_message
248
  jmp  .main_message
-
 
249
if defined @@KolibriOnKeyPress$qppv
241
.main_key_press:
250
.main_key_press:
242
  push esp
251
  push esp
243
  call @@KolibriOnKeyPress$qppv
252
  call @@KolibriOnKeyPress$qppv
244
  pop  ecx
253
  pop  ecx
245
  jmp  .main_cycle
254
  jmp  .main_cycle
-
 
255
end if
-
 
256
if defined @@KolibriOnMouse$qppv
246
.main_mouse:
257
.main_mouse:
247
  push esp
258
  push esp
248
  call @@KolibriOnMouse$qppv
259
  call @@KolibriOnMouse$qppv
249
  pop  ecx
260
  pop  ecx
250
  jmp  .main_cycle
261
  jmp  .main_cycle
-
 
262
end if
-
 
263
 
-
 
264
align 4
251
.main_on_message:
265
.main_on_message:
252
  dec  eax
266
  dec  eax
253
  jz   .main_paint_msg
267
  jz   .main_paint_msg
254
  dec  eax
268
  dec  eax
-
 
269
if defined @@KolibriOnKeyPress$qppv
255
  jz   .main_key_press
270
  jz   .main_key_press
-
 
271
else
-
 
272
  jz   .main_cycle
-
 
273
end if
256
  cmp  eax,4
274
  cmp  eax,4
-
 
275
if defined @@KolibriOnMouse$qppv
257
  jz   .main_mouse
276
  jz   .main_mouse
-
 
277
else
-
 
278
  jz   .main_cycle
-
 
279
end if
258
  dec  eax
280
  dec  eax
259
  jnz  .main_cycle
281
  jnz  .main_cycle
-
 
282
 
-
 
283
align 4
260
.main_button:
284
.main_button:
261
  mov  eax,17
285
  mov  eax,SF_GET_BUTTON
262
  int  0x40
286
  int  0x40
-
 
287
  shr  eax,8
-
 
288
  cmp  eax,1
-
 
289
  je   .main_close
-
 
290
if defined @@KolibriOnButton$qlppv
-
 
291
  push esp
263
  test al,al
292
  push eax
-
 
293
  call @@KolibriOnButton$qlppv
-
 
294
  add  esp,8
-
 
295
end if
264
  jnz  .main_cycle
296
  jmp  .main_cycle
265
.main_close:
297
.main_close:
266
  btr  dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],31
298
  btr  dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],31
-
 
299
if defined @@KolibriOnClose$qppv
267
  push esp
300
  push esp
268
  call @@KolibriOnClose$qppv
301
  call @@KolibriOnClose$qppv
269
  pop  ecx
302
  pop  ecx
270
  test al,al
303
  test al,al
271
  jz   .main_button
304
  jz   .main_button
-
 
305
end if
272
.main_end:
306
.main_end:
273
  mov  ebx,esp
307
  mov  ebx,esp
274
  lock dec dword [@Kolibri@_ThreadNumber]
308
  lock dec dword [@Kolibri@_ThreadNumber]
275
if defined Kolibri_SegmentExit & defined Kolibri_SegmentExitEnd
309
if defined Kolibri_SegmentExit & defined Kolibri_SegmentExitEnd
276
  jnz  .main_else_last_check
310
  jnz  .main_else_last_check
Line 288... Line 322...
288
  add  esp,12
322
  add  esp,12
289
  lock inc dword [@Kolibri@_ThreadScanCount+4]
323
  lock inc dword [@Kolibri@_ThreadScanCount+4]
290
  mov  ebx,1
324
  mov  ebx,1
291
  jmp  .main_end_wait
325
  jmp  .main_end_wait
292
.main_end_wait_loop:
326
.main_end_wait_loop:
293
  mov  eax,5
327
  mov  eax,SF_SLEEP
294
  int  0x40
328
  int  0x40
295
  shl  ebx,1
329
  shl  ebx,1
296
  cmp  ebx,KOLIBRI_MUTEX_MAX_TIME_WAIT
330
  cmp  ebx,KOLIBRI_MUTEX_MAX_TIME_WAIT
297
  jna  .main_end_wait
331
  jna  .main_end_wait
298
  mov  ebx,KOLIBRI_MUTEX_MAX_TIME_WAIT
332
  mov  ebx,KOLIBRI_MUTEX_MAX_TIME_WAIT
Line 342... Line 376...
342
  pop  ebp
376
  pop  ebp
343
  ret
377
  ret
344
.redraw_begin:
378
.redraw_begin:
345
  push ebx esi edi
379
  push ebx esi edi
346
  and  dword [ebp+KOLIBRI_THREAD_DATA_FLAG*4],0xFFFFFFFC
380
  and  dword [ebp+KOLIBRI_THREAD_DATA_FLAG*4],0xFFFFFFFC
347
  mov  eax,12
381
  mov  eax,SF_REDRAW
348
  mov  ebx,1
382
  mov  ebx,SSF_BEGIN_DRAW
349
  int  0x40
383
  int  0x40
350
  test dl,2
384
  test dl,2
351
  jz   .redraw_picture
385
  jz   .redraw_picture
352
  mov  eax,48
386
  mov  eax,SF_STYLE_SETTINGS
353
  mov  ebx,4
387
  mov  ebx,SSF_GET_SKIN_HEIGHT
354
  int  0x40
388
  int  0x40
355
  mov  ebx,[ebp+KOLIBRI_THREAD_DATA_X*4]
389
  mov  ebx,[ebp+KOLIBRI_THREAD_DATA_X*4]
356
  add  ebx,2*5-1
390
  add  ebx,2*5-1
357
  mov  ecx,[ebp+KOLIBRI_THREAD_DATA_Y*4]
391
  mov  ecx,[ebp+KOLIBRI_THREAD_DATA_Y*4]
358
  add  cx,ax
392
  add  cx,ax
Line 362... Line 396...
362
  xor  eax,eax
396
  xor  eax,eax
363
  int  0x40
397
  int  0x40
364
.redraw_picture:
398
.redraw_picture:
365
  call	@@KolibriOnPaint$qv
399
  call	@@KolibriOnPaint$qv
366
.redraw_end_draw:
400
.redraw_end_draw:
367
  mov  eax,12
401
  mov  eax,SF_REDRAW
368
  mov  ebx,2
402
  mov  ebx,SSF_END_DRAW
369
  int  0x40
403
  int  0x40
370
  pop  edi esi ebx ebp
404
  pop  edi esi ebx ebp
371
  ret
405
  ret
372
endp
406
endp
Line 375... Line 409...
375
  mov  eax,[esp+12]
409
  mov  eax,[esp+12]
376
  mov  ebx,[eax]
410
  mov  ebx,[eax]
377
  mov  ecx,[eax+4]
411
  mov  ecx,[eax+4]
378
  mov  edx,[eax+8]
412
  mov  edx,[eax+8]
379
  mov  esi,[eax+12]
413
  mov  esi,[eax+12]
380
  mov  eax,67
414
  mov  eax,SF_CHANGE_WINDOW
381
  int  0x40
415
  int  0x40
382
  ret
416
  ret
383
endp
417
endp
Line 384... Line 418...
384
 
418
 
385
;proc @Kolibri@Abort$qv
419
proc @Kolibri@ExitDebug$qv
386
;  push dword [@Kolibri@DebugPrefix]
420
  push dword [@Kolibri@DebugPrefix]
387
;  call @Kolibri@DebugPutString$qpxc
421
  call @Kolibri@DebugPutString$qpxc
388
;  mov	dword [esp],Kolibri_abort_string
422
  mov	dword [esp],Kolibri_debug_string
389
;  call @Kolibri@DebugPutString$qpxc
423
  call @Kolibri@DebugPutString$qpxc
-
 
424
  pop	ecx
-
 
425
  jmp  @Kolibri@ExitProcess$qv
-
 
426
endp
390
;  pop	ecx
427
 
391
proc @Kolibri@ExitProcess$qv
428
proc @Kolibri@ExitProcess$qv
392
  lock bts dword [@Kolibri@_ExitProcessNow],0
429
  lock bts dword [@Kolibri@_ExitProcessNow],0
393
  jc   .exit_process_wait
430
  jc   .exit_process_wait
394
  sub  esp,1024
431
  sub  esp,1024
395
  mov  eax,9
432
  mov  eax,SF_THREAD_INFO
396
  mov  ebx,esp
433
  mov  ebx,esp
397
  mov  ecx,-1
434
  mov  ecx,-1
398
  int  0x40
435
  int  0x40
399
  mov  esi,eax
436
  mov  esi,eax
400
  mov  edi,[esp+30]
437
  mov  edi,[esp+30]
401
.exit_process_loop:
438
.exit_process_loop:
402
  mov  eax,9
439
  mov  eax,SF_THREAD_INFO
403
  mov  ebx,esp
440
  mov  ebx,esp
404
  mov  ecx,esi
441
  mov  ecx,esi
405
  int  0x40
442
  int  0x40
406
  mov  eax,[esp+30]
443
  mov  eax,[esp+30]
Line 420... Line 457...
420
.exit_process_test:
457
.exit_process_test:
421
  test eax,eax
458
  test eax,eax
422
  jz   .exit_process_continue
459
  jz   .exit_process_continue
423
  cmp  ebx,[eax+KOLIBRI_THREAD_DATA_PID*4]
460
  cmp  ebx,[eax+KOLIBRI_THREAD_DATA_PID*4]
424
  jnz  .exit_process_next
461
  jnz  .exit_process_next
425
  mov  eax,18
462
  mov  eax,SF_SYSTEM
426
  mov  ebx,2
463
  mov  ebx,SSF_TERMINATE_THREAD
427
  mov  ecx,esi
464
  mov  ecx,esi
428
  int  0x40
465
  int  0x40
429
.exit_process_continue:
466
.exit_process_continue:
430
  dec  esi
467
  dec  esi
431
  jnl  .exit_process_loop
468
  jnl  .exit_process_loop
Line 438... Line 475...
438
.exit_process_end:
475
.exit_process_end:
439
  mov  dword [@Kolibri@_ThreadMutex],0
476
  mov  dword [@Kolibri@_ThreadMutex],0
440
  or   eax,-1
477
  or   eax,-1
441
  int  0x40
478
  int  0x40
442
.exit_process_wait:
479
.exit_process_wait:
443
  mov  eax,5
480
  mov  eax,SF_SLEEP
444
  mov  ebx,1
481
  mov  ebx,1
445
.exit_process_wait_loop:
482
.exit_process_wait_loop:
446
  cmp  dword [@Kolibri@_ExitProcessNow],0
483
  cmp  dword [@Kolibri@_ExitProcessNow],0
447
  jl   .exit_process_end
484
  jl   .exit_process_end
448
  int  0x40
485
  int  0x40
Line 464... Line 501...
464
  jc   Kolibri_main_end
501
  jc   Kolibri_main_end
465
  jmp  Kolibri_main_cycle
502
  jmp  Kolibri_main_cycle
466
endp
503
endp
Line 467... Line 504...
467
 
504
 
468
proc @Kolibri@Delay$qui uses ebx
505
proc @Kolibri@Delay$qui uses ebx
469
  mov  eax,5
506
  mov  eax,SF_SLEEP
470
  mov  ebx,[esp+8]
507
  mov  ebx,[esp+8]
471
  int  0x40
508
  int  0x40
472
  ret
509
  ret
Line 473... Line 510...
473
endp
510
endp
474
 
511
 
475
proc @Kolibri@Clock$qv uses ebx
512
proc @Kolibri@Clock$qv uses ebx
476
  mov  eax,26
-
 
477
  mov  ebx,9
-
 
478
  int  0x40
-
 
479
  ret
-
 
480
endp
-
 
481
 
-
 
482
proc @Kolibri@GetPackedTime$qv
513
  mov  eax,SF_SYSTEM_GET
483
  mov  eax,3
514
  mov  ebx,SSF_TIME_COUNT
484
  int  0x40
515
  int  0x40
Line 485... Line 516...
485
  ret
516
  ret
486
endp
517
endp
487
 
518
 
488
proc @Kolibri@DrawButton$qllllll uses ebx esi
-
 
489
  mov  eax,8
519
proc @Kolibri@DrawButton$qllllll uses ebx esi
490
  mov  ebx,[esp+12+8]
520
  mov  eax,SF_DEFINE_BUTTON
491
  shl  ebx,16
-
 
492
  mov  bx,[esp+20+8]
521
  mov  ebx,[esp+12-2+8]
493
  mov  ecx,[esp+16+8]
522
  mov  bx,[esp+20+8]
494
  shl  ecx,16
523
  mov  ecx,[esp+16-2+8]
495
  mov  cx,[esp+24+8]
524
  mov  cx,[esp+24+8]
496
  mov  edx,[esp+4+8]
525
  mov  edx,[esp+4+8]
497
  mov  esi,[esp+8+8]
526
  mov  esi,[esp+8+8]
Line -... Line 527...
-
 
527
  int  0x40
-
 
528
  ret 
-
 
529
endp
-
 
530
 
-
 
531
proc @Kolibri@GetPackedTime$qv
-
 
532
  mov  eax,SF_GET_SYS_TIME
498
  int  0x40
533
  int  0x40
499
  ret 
534
  ret
500
endp
535
endp
501
 
536
 
502
proc @Kolibri@GetTime$qpi
537
proc @Kolibri@GetTime$qpi
503
  mov  eax,3
538
  mov  eax,SF_GET_SYS_TIME
504
  int  0x40
539
  int  0x40
Line 524... Line 559...
524
  mov  dword [edx],ecx
559
  mov  dword [edx],ecx
525
  ret
560
  ret
526
endp
561
endp
Line 527... Line 562...
527
 
562
 
528
proc @Kolibri@GetPackedDate$qv
563
proc @Kolibri@GetPackedDate$qv
529
  mov  eax,29
564
  mov  eax,SF_GET_SYS_DATE
530
  int  0x40
565
  int  0x40
531
  ret
566
  ret
Line 532... Line 567...
532
endp
567
endp
533
 
568
 
534
proc @Kolibri@GetDate$qpi
569
proc @Kolibri@GetDate$qpi
535
  mov  eax,29
570
  mov  eax,SF_GET_SYS_DATE
536
  int  0x40
571
  int  0x40
537
  mov  edx,[esp+4]
572
  mov  edx,[esp+4]
538
  movzx ecx,al
573
  movzx ecx,al
Line 556... Line 591...
556
  mov  dword [edx+8],ecx
591
  mov  dword [edx+8],ecx
557
  ret
592
  ret
558
endp
593
endp
Line 559... Line 594...
559
 
594
 
560
proc @Kolibri@ReadCommonColors$qpui uses ebx
595
proc @Kolibri@ReadCommonColors$qpui uses ebx
561
  mov  eax,48
596
  mov  eax,SF_STYLE_SETTINGS
562
  mov  ebx,3
597
  mov  ebx,SSF_GET_COLORS
563
  mov  ecx,[esp+8]
598
  mov  ecx,[esp+8]
564
  mov  edx,40
599
  mov  edx,40
565
  int  0x40
600
  int  0x40
566
  ret
601
  ret
Line 567... Line 602...
567
endp
602
endp
568
 
603
 
569
proc @Kolibri@DrawText$qssipxc uses ebx
604
proc @Kolibri@DrawText$qssipxc uses ebx
570
  mov  eax,4
605
  mov  eax,SF_DRAW_TEXT
571
  mov  ebx,[esp+8-2]
606
  mov  ebx,[esp+8-2]
572
  mov  bx,[esp+12]
607
  mov  bx,[esp+12]
573
  mov  ecx,[esp+16]
608
  mov  ecx,[esp+16]
574
  or   ecx,0x80000000
609
  or   ecx,0x80000000
575
  mov  edx,[esp+20]
610
  mov  edx,[esp+20]
576
  int  0x40
611
  int  0x40
Line -... Line 612...
-
 
612
  ret
-
 
613
endp
-
 
614
 
-
 
615
proc @Kolibri@SetWindowCaption$qpxc uses ebx
-
 
616
  mov  eax,SF_SET_CAPTION
-
 
617
  mov  ebx,2
-
 
618
  mov  ecx,[esp+8]
-
 
619
  int  0x40
577
  ret
620
  ret
578
endp
621
endp
579
 
622
 
580
proc @Kolibri@GetProcessInfo$qpuipct1t1piui uses ebx esi edi
623
proc @Kolibri@GetProcessInfo$qpuipct1t1piui uses ebx esi edi
581
  sub  esp,1024
624
  sub  esp,1024
582
  mov  eax,9
625
  mov  eax,SF_THREAD_INFO
583
  mov  ebx,esp
626
  mov  ebx,esp
584
  mov  ecx,[1024+12+24+esp]
627
  mov  ecx,[1024+12+24+esp]
Line 592... Line 635...
592
.get_proc_info_no_usecpu:
635
.get_proc_info_no_usecpu:
593
  or   edi,[1024+12+8+esp]
636
  or   edi,[1024+12+8+esp]
594
  jz   .get_proc_info_no_name
637
  jz   .get_proc_info_no_name
595
  lea  esi,[esp+10]
638
  lea  esi,[esp+10]
596
  cld
639
  cld
597
  movs dword [edi],[esi]
640
  movsd
598
  movs dword [edi],[esi]
641
  movsd
599
  movs dword [edi],[esi]
642
  movsd
600
  mov  byte [edi],0
643
  mov  byte [edi],0
601
  xor  edi,edi
644
  xor  edi,edi
602
.get_proc_info_no_name:
645
.get_proc_info_no_name:
603
  or   edi,[1024+12+12+esp]
646
  or   edi,[1024+12+12+esp]
604
  jz   .get_proc_info_no_mem
647
  jz   .get_proc_info_no_mem
Line 614... Line 657...
614
.get_proc_info_no_pid:
657
.get_proc_info_no_pid:
615
  or   edi,[1024+12+20+esp]
658
  or   edi,[1024+12+20+esp]
616
  jz   .get_proc_info_no_rect
659
  jz   .get_proc_info_no_rect
617
  lea  esi,[esp+34]
660
  lea  esi,[esp+34]
618
  cld
661
  cld
619
  movs dword [edi],[esi]
662
  movsd
620
  movs dword [edi],[esi]
663
  movsd
621
  movs dword [edi],[esi]
664
  movsd
622
  movs dword [edi],[esi]
665
  movsd
623
  xor  edi,edi
666
  xor  edi,edi
624
.get_proc_info_no_rect:
667
.get_proc_info_no_rect:
625
  add  esp,1024
668
  add  esp,1024
626
  ret
669
  ret
627
endp
670
endp
Line 628... Line 671...
628
 
671
 
629
proc @Kolibri@GetPid$qv uses ebx
672
proc @Kolibri@GetPid$qv uses ebx
630
  sub  esp,1024
673
  sub  esp,1024
631
  mov  eax,9
674
  mov  eax,SF_THREAD_INFO
632
  mov  ebx,esp
675
  mov  ebx,esp
633
  mov  ecx,-1
676
  mov  ecx,-1
634
  int  0x40
677
  int  0x40
635
  mov  eax,[esp+30]
678
  mov  eax,[esp+30]
Line 657... Line 700...
657
  lea  eax,[eax+4*eax]
700
  lea  eax,[eax+4*eax]
658
  ror  eax,9
701
  ror  eax,9
659
  ret
702
  ret
660
endp
703
endp
Line -... Line 704...
-
 
704
 
661
 
705
if defined @Kolibri@_HashByte$qui | defined @Kolibri@_HashWord$qui | defined @Kolibri@_HashDword$qui
662
Kolibri_hash_int_val0:
706
Kolibri_hash_int_val0:
663
  dd   0xA82F94C5
707
  dd   0xA82F94C5
664
Kolibri_hash_int_val1:
708
Kolibri_hash_int_val1:
-
 
709
  dd   0x9193780B
Line 665... Line 710...
665
  dd   0x9193780B
710
end if
666
 
711
 
667
proc @Kolibri@GetThreadData$qv
712
proc @Kolibri@GetThreadData$qv
668
  call @Kolibri@GetPid$qv
713
  call @Kolibri@GetPid$qv
Line 693... Line 738...
693
.get_thread_data_end:
738
.get_thread_data_end:
694
  lock dec dword [@Kolibri@_ThreadScanCount]
739
  lock dec dword [@Kolibri@_ThreadScanCount]
695
  ret
740
  ret
696
.get_thread_data_wait:
741
.get_thread_data_wait:
697
  push eax ebx
742
  push eax ebx
698
  mov  eax,5
743
  mov  eax,SF_SLEEP
699
  mov  ebx,1
744
  mov  ebx,1
700
.get_thread_data_wait_loop:
745
.get_thread_data_wait_loop:
701
  int  0x40
746
  int  0x40
702
  cmp  dword [@Kolibri@_ThreadScanCount+4],0
747
  cmp  dword [@Kolibri@_ThreadScanCount+4],0
703
  jz   .get_thread_data_wait_end
748
  jz   .get_thread_data_wait_end
Line 710... Line 755...
710
  pop  ebx eax
755
  pop  ebx eax
711
  jmp .get_thread_data_nowait
756
  jmp .get_thread_data_nowait
712
endp
757
endp
Line 713... Line 758...
713
 
758
 
714
proc @Kolibri@_GetSkinHeader$qv uses ebx
759
proc @Kolibri@_GetSkinHeader$qv uses ebx
715
  mov  eax,48
760
  mov  eax,SF_STYLE_SETTINGS
716
  mov  ebx,4
761
  mov  ebx,SSF_GET_SKIN_HEIGHT
717
  int  0x40
762
  int  0x40
718
  ret
763
  ret
Line 719... Line 764...
719
endp
764
endp
720
 
765
 
721
proc @Kolibri@GetScreenSize$qrust1
766
proc @Kolibri@GetScreenSize$qrust1
722
  mov  eax,14
767
  mov  eax,SF_GET_SCREEN_SIZE
723
  int  0x40
768
  int  0x40
724
  mov  ecx,[esp+8]
769
  mov  ecx,[esp+8]
725
  mov  word [ecx],ax
770
  mov  word [ecx],ax
Line 734... Line 779...
734
  xor  al,al
779
  xor  al,al
735
  ret
780
  ret
736
endp
781
endp
Line 737... Line 782...
737
 
782
 
738
proc Kolibri_MutexLockWait uses ebx
783
proc Kolibri_MutexLockWait uses ebx
739
  mov  eax,5
784
  mov  eax,SF_SLEEP
740
  xor  ebx,ebx
785
  xor  ebx,ebx
741
.lock_wait_cycle:
786
.lock_wait_cycle:
742
  int  0x40
787
  int  0x40
743
  shl  byte [ecx],1
788
  shl  byte [ecx],1
Line 749... Line 794...
749
proc Kolibri_MutexLockWaitTime
794
proc Kolibri_MutexLockWaitTime
750
  cmp  dword [esp+12],0
795
  cmp  dword [esp+12],0
751
  jng  .MutexLockWait
796
  jng  .MutexLockWait
752
  push ebx edx
797
  push ebx edx
753
  mov  edx,[esp+20]
798
  mov  edx,[esp+20]
754
  mov  eax,26
799
  mov  eax,SF_SYSTEM_GET
755
  mov  ebx,9
800
  mov  ebx,SSF_TIME_COUNT
756
  int  0x40
801
  int  0x40
757
  add  edx,eax
802
  add  edx,eax
758
.lock_wait_time_cycle:
803
.lock_wait_time_cycle:
759
  mov  eax,5
804
  mov  eax,SF_SLEEP
760
  xor  ebx,ebx
805
  xor  ebx,ebx
761
  int  0x40
806
  int  0x40
762
  shl  byte [ecx],1
807
  shl  byte [ecx],1
763
  jnz  .lock_wait_time_ret_true
808
  jnz  .lock_wait_time_ret_true
764
  mov  eax,26
809
  mov  eax,SF_SYSTEM_GET
765
  mov  ebx,9
810
  mov  ebx,SSF_TIME_COUNT
766
  int  0x40
811
  int  0x40
767
  cmp  eax,edx
812
  cmp  eax,edx
768
  js   .lock_wait_time_cycle
813
  js   .lock_wait_time_cycle
769
  pop  edx ebx eax
814
  pop  edx ebx eax
770
  xor  al,al
815
  xor  al,al
Line 808... Line 853...
808
  jz   .unlock_pause
853
  jz   .unlock_pause
809
  ret
854
  ret
810
.unlock_pause:
855
.unlock_pause:
811
  mov  byte [ecx],0x40
856
  mov  byte [ecx],0x40
812
  push ebx
857
  push ebx
813
  mov  eax,5
858
  mov  eax,SF_SLEEP
814
  xor  ebx,ebx
859
  xor  ebx,ebx
815
  int  0x40
860
  int  0x40
816
  pop  ebx
861
  pop  ebx
817
  ret
862
  ret
818
endp
863
endp
Line 836... Line 881...
836
  push dword [@Kolibri@DebugPrefix]
881
  push dword [@Kolibri@DebugPrefix]
837
  call @Kolibri@DebugPutString$qpxc
882
  call @Kolibri@DebugPutString$qpxc
838
  mov  dword [esp],Kolibri_try_lock_rec_overflow_string
883
  mov  dword [esp],Kolibri_try_lock_rec_overflow_string
839
  call @Kolibri@DebugPutString$qpxc
884
  call @Kolibri@DebugPutString$qpxc
840
  pop  ecx
885
  pop  ecx
841
  jmp  @Kolibri@Abort$qv
886
  jmp  @Kolibri@ExitDebug$qv
842
endp
887
endp
Line 843... Line 888...
843
 
888
 
844
proc @Kolibri@TryLock$qp16Kolibri@TRecMutexui
889
proc @Kolibri@TryLock$qp16Kolibri@TRecMutexui
845
  mov  eax,Kolibri_MutexLockNoWait
890
  mov  eax,Kolibri_MutexLockNoWait
Line 876... Line 921...
876
.unlock_rec_end:
921
.unlock_rec_end:
877
  ret
922
  ret
878
.unlock_rec_pause:
923
.unlock_rec_pause:
879
  mov  byte [ecx],0x20
924
  mov  byte [ecx],0x20
880
  push ebx
925
  push ebx
881
  mov  eax,5
926
  mov  eax,SF_SLEEP
882
  xor  ebx,ebx
927
  xor  ebx,ebx
883
  int  0x40
928
  int  0x40
884
  pop  ebx
929
  pop  ebx
885
  ret
930
  ret
886
.unlock_rec_notlocked:
931
.unlock_rec_notlocked:
887
  push dword [@Kolibri@DebugPrefix]
932
  push dword [@Kolibri@DebugPrefix]
888
  call @Kolibri@DebugPutString$qpxc
933
  call @Kolibri@DebugPutString$qpxc
889
  mov  dword [esp],Kolibri_unlock_rec_notlocked_string
934
  mov  dword [esp],Kolibri_unlock_rec_notlocked_string
890
  call @Kolibri@DebugPutString$qpxc
935
  call @Kolibri@DebugPutString$qpxc
891
  pop  ecx
936
  pop  ecx
892
  jmp  @Kolibri@Abort$qv
937
  jmp  @Kolibri@ExitDebug$qv
893
endp
938
endp
Line 894... Line 939...
894
 
939
 
895
proc @Kolibri@DebugPutChar$qc
940
proc @Kolibri@DebugPutChar$qc
896
  mov  cl,byte [esp+4]
941
  mov  cl,byte [esp+4]
897
  cmp  cl,13
942
  cmp  cl,13
898
  jz   .debug_put_char_ret
943
  jz   .debug_put_char_ret
899
  push ebx
944
  push ebx
900
  cmp  cl,10
945
  cmp  cl,10
901
  jz   .debug_put_char_enter
946
  jz   .debug_put_char_enter
902
.debug_put_char_after_cmp:
947
.debug_put_char_after_cmp:
903
  mov  eax,63
948
  mov  eax,SF_BOARD
904
  mov  ebx,1
949
  mov  ebx,SSF_DEBUG_WRITE
905
  int  0x40
950
  int  0x40
906
  pop  ebx
951
  pop  ebx
907
.debug_put_char_ret:
952
.debug_put_char_ret:
908
  ret
953
  ret
909
.debug_put_char_enter:
954
.debug_put_char_enter:
910
  mov  cl,13
955
  mov  cl,13
911
  mov  eax,63
956
  mov  eax,SF_BOARD
912
  mov  ebx,1
957
  mov  ebx,SSF_DEBUG_WRITE
913
  int  0x40
958
  int  0x40
914
  mov  cl,10
959
  mov  cl,10
915
  jmp  .debug_put_char_after_cmp
960
  jmp  .debug_put_char_after_cmp
Line 916... Line 961...
916
endp
961
endp
917
 
-
 
918
proc @Kolibri@DebugPutString$qpxc
962
 
919
  push esi
963
proc @Kolibri@DebugPutString$qpxc uses esi
920
  push dword 0
964
  push dword 0
921
  mov  esi,dword [esp+12]
965
  mov  esi,dword [esp+12]
922
  jmp  .debug_put_string_test
966
  jmp  .debug_put_string_test
Line 927... Line 971...
927
.debug_put_string_test:
971
.debug_put_string_test:
928
  xor  eax,eax
972
  xor  eax,eax
929
  or   al,[esi]
973
  or   al,[esi]
930
  test al,al
974
  test al,al
931
  jnz  .debug_put_string_loop
975
  jnz  .debug_put_string_loop
932
  pop  ecx esi
976
  pop  ecx
933
  ret
977
  ret
934
endp
978
endp
Line 935... Line 979...
935
 
979
 
936
proc @Kolibri@GetKey$qv
980
proc @Kolibri@GetKey$qv
937
  mov  eax,2
981
  mov  eax,SF_GET_KEY
938
  int  0x40
982
  int  0x40
939
  test al,al
983
  test al,al
940
  jnz  .get_key_eof
984
  jnz  .get_key_eof
941
  movzx eax,ah
985
  movzx eax,ah
942
  ret
986
  ret
943
.get_key_eof:
987
.get_key_eof:
944
  mov  eax,-1
988
  mov  eax,SF_TERMINATE_PROCESS
945
  ret
989
  ret
Line 946... Line 990...
946
endp
990
endp
947
 
991
 
948
proc @Kolibri@GetMouseButton$qv uses ebx
992
proc @Kolibri@GetMouseButton$qv uses ebx
949
  mov  eax,37
993
  mov  eax,SF_MOUSE_GET
950
  mov  ebx,2
994
  mov  ebx,SSF_BUTTON
951
  int  0x40
995
  int  0x40
Line 952... Line 996...
952
  ret
996
  ret
953
endp
997
endp
954
 
998
 
955
proc @Kolibri@GetMousePosition$qrst1o uses ebx
999
proc @Kolibri@GetMousePosition$qrst1o uses ebx
956
  mov  eax,37
1000
  mov  eax,SF_MOUSE_GET
957
  xor  ebx,ebx
1001
  xor  ebx,ebx ;SSF_SCREEN_POSITION
958
  cmp  byte [esp+16],0
1002
  cmp  byte [esp+16],0
959
  jnz  .get_mouse_pos_absolute
1003
  jnz  .get_mouse_pos_absolute
Line 1008... Line 1052...
1008
  sub  edx,12
1052
  sub  edx,12
1009
  mov  ecx,[esp+8]
1053
  mov  ecx,[esp+8]
1010
  mov  dword [edx+8],ebx
1054
  mov  dword [edx+8],ebx
1011
  mov  dword [edx+4],ecx
1055
  mov  dword [edx+4],ecx
1012
  mov  dword [edx],Kolibri_ThreadFinish
1056
  mov  dword [edx],Kolibri_ThreadFinish
1013
  mov  eax,51
1057
  mov  eax,SF_CREATE_THREAD
1014
  mov  ebx,1
1058
  mov  ebx,1
1015
  mov  ecx,@Kolibri@ThreadMain$qpvt1
1059
  mov  ecx,@Kolibri@ThreadMain$qpvt1
1016
  int  0x40
1060
  int  0x40
1017
  mov  ebx,eax
1061
  mov  ebx,eax
1018
  or   bl,15
1062
  or   bl,15
Line 1032... Line 1076...
1032
.create_thread_init:
1076
.create_thread_init:
1033
  push esi edi
1077
  push esi edi
1034
  cld
1078
  cld
1035
  mov  esi,@Kolibri@_ThreadSavedBegProc
1079
  mov  esi,@Kolibri@_ThreadSavedBegProc
1036
  mov  edi,@Kolibri@GetPid$qv
1080
  mov  edi,@Kolibri@GetPid$qv
1037
  movs dword [edi],[esi]
1081
  movsd
1038
  movs dword [edi],[esi]
1082
  movsd
1039
  mov  edi,@Kolibri@GetThreadData$qv
1083
  mov  edi,@Kolibri@GetThreadData$qv
1040
  movs dword [edi],[esi]
1084
  movsd
1041
  movs dword [edi],[esi]
1085
  movsd
1042
  mov  eax,0x90909090
1086
  mov  eax,0x90909090
1043
  mov  edi,@Kolibri@_ThreadSavedBegProc
1087
  mov  edi,@Kolibri@_ThreadSavedBegProc
1044
  stos dword [edi]
1088
  stosd
1045
  stos dword [edi]
1089
  stosd
1046
  stos dword [edi]
1090
  stosd
1047
  stos dword [edi]
1091
  stosd
1048
  pop  edi esi
1092
  pop  edi esi
1049
  jmp  .create_thread_fill_stack
1093
  jmp  .create_thread_fill_stack
1050
endp
1094
endp
Line 1051... Line 1095...
1051
 
1095
 
1052
proc @Kolibri@_FileAccess$qpv uses ebx
1096
proc @Kolibri@_FileAccess$qpv uses ebx
1053
  mov  eax,70
1097
  mov  eax,SF_FILE
1054
  mov  ebx,[esp+8]
1098
  mov  ebx,[esp+8]
1055
  int  0x40
1099
  int  0x40
1056
  mov  ecx,[esp+8]
1100
  mov  ecx,[esp+8]
1057
  mov  [ecx],ebx
1101
  mov  [ecx],ebx
1058
  ret
1102
  ret
Line -... Line 1103...
-
 
1103
endp
1059
endp
1104
 
1060
 
1105
if defined Kolibri_debug_string
-
 
1106
Kolibri_debug_string:
-
 
1107
  db 'Abnormal program termination.',10,0
-
 
1108
end if
1061
Kolibri_abort_string:
1109
 
1062
  db 'Abnormal program termination.',10,0
1110
if defined Kolibri_MutexLockRec
-
 
1111
Kolibri_try_lock_rec_overflow_string:
-
 
1112
  db 'Recursive mutex lock count overflow.',10,0
-
 
1113
end if
1063
Kolibri_try_lock_rec_overflow_string:
1114
 
1064
  db 'Recursive mutex lock count overflow.',10,0
1115
if defined @Kolibri@UnLock$qp16Kolibri@TRecMutexui
-
 
1116
Kolibri_unlock_rec_notlocked_string:
Line 1065... Line 1117...
1065
Kolibri_unlock_rec_notlocked_string:
1117
  db 'Recursive mutex unlock error.',10,0
Line 1066... Line 1118...
1066
  db 'Recursive mutex unlock error.',10,0
1118
end if