Subversion Repositories Kolibri OS

Rev

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

Rev 8129 Rev 8133
Line 2... Line 2...
2
MENUET_BORDER_SIZE = 4;
2
MENUET_BORDER_SIZE = 4;
3
;const int
3
;const int
4
MENUET_HEADER_SIZE = 20;
4
MENUET_HEADER_SIZE = 20;
Line 5... Line 5...
5
 
5
 
6
;const int
6
;const int
7
MENUET_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
MENUET_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
MENUET_THREAD_DATA_NEXT     = 2;
11
KOLIBRI_THREAD_DATA_NEXT     = 2;
12
;const int
12
;const int
13
MENUET_THREAD_DATA_PID	    = 3;
13
KOLIBRI_THREAD_DATA_PID	    = 3;
14
;const int
14
;const int
15
MENUET_THREAD_DATA_FLAG     = 4;
15
KOLIBRI_THREAD_DATA_FLAG     = 4;
16
;const int
16
;const int
17
MENUET_THREAD_DATA_X	    = 5;
17
KOLIBRI_THREAD_DATA_X	    = 5;
18
;const int
18
;const int
19
MENUET_THREAD_DATA_Y	    = 6;
19
KOLIBRI_THREAD_DATA_Y	    = 6;
20
;const int
20
;const int
21
MENUET_THREAD_DATA_C_WINDOW = 7;
21
KOLIBRI_THREAD_DATA_C_WINDOW = 7;
22
;const int
22
;const int
23
MENUET_THREAD_DATA_C_HEADER = 8;
23
KOLIBRI_THREAD_DATA_C_HEADER = 8;
24
;const int
24
;const int
25
MENUET_THREAD_DATA_C_BORDER = 9;
25
KOLIBRI_THREAD_DATA_C_BORDER = 9;
26
;const int
26
;const int
27
MENUET_THREAD_DATA_C_TITLE  = 10;
27
KOLIBRI_THREAD_DATA_C_TITLE  = 10;
28
;const int
28
;const int
29
MENUET_THREAD_DATA_TITLE    = 11;
29
KOLIBRI_THREAD_DATA_TITLE    = 11;
30
;const int
30
;const int
31
MENUET_THREAD_DATA_PICTURE  = 12;
31
KOLIBRI_THREAD_DATA_PICTURE  = 12;
32
;const int
32
;const int
33
MENUET_THREAD_DATA_SZ_PICT  = 13;
33
KOLIBRI_THREAD_DATA_SZ_PICT  = 13;
34
;const int
34
;const int
35
MENUET_THREAD_DATA_LAST_SX  = 14;
35
KOLIBRI_THREAD_DATA_LAST_SX  = 14;
36
;const int
36
;const int
37
MENUET_THREAD_DATA_LAST_SY  = 15;
37
KOLIBRI_THREAD_DATA_LAST_SY  = 15;
38
;const int
38
;const int
Line 39... Line 39...
39
MENUET_THREAD_DATA_LEN	    = 16;
39
KOLIBRI_THREAD_DATA_LEN	    = 16;
40
 
40
 
Line 41... Line 41...
41
;const int
41
;const int
42
MENUET_MUTEX_MAX_TIME_WAIT  = 20;
42
MENUET_MUTEX_MAX_TIME_WAIT  = 20;
Line 43... Line 43...
43
 
43
 
44
;const int
44
;const int
Line 45... Line 45...
45
MENUET_FILE_BLOCK_SIZE	    = 512;
45
KOLIBRI_FILE_BLOCK_SIZE	    = 512;
Line 46... Line 46...
46
 
46
 
47
;const int
47
;const int
Line 137... Line 137...
137
 
137
 
138
proc @Kolibri@ThreadMain$qpvt1
138
proc @Kolibri@ThreadMain$qpvt1
139
  xchg ebx,[esp+4]
139
  xchg ebx,[esp+4]
140
  xchg ebp,[esp+8]
140
  xchg ebp,[esp+8]
141
  push esi edi
141
  push esi edi
142
  sub  esp,MENUET_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,40
146
  mov  ebx,0x27
146
  mov  ebx,0x27
Line 163... Line 163...
163
  add  esp,12
163
  add  esp,12
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+MENUET_THREAD_DATA_FLAG*4],31
168
  btr  dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],31
169
  push esp
169
  push esp
170
  call @@MenuetOnClose$qppv
170
  call @@KolibriOnClose$qppv
171
  pop  ecx
171
  pop  ecx
172
  test al,al
172
  test al,al
173
  jnz  .main_end
173
  jnz  .main_end
174
.main_test_close_first:
174
.main_test_close_first:
175
  cmp  dword [esp+MENUET_THREAD_DATA_FLAG*4],0
175
  cmp  dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],0
176
  jl   .main_close_first
176
  jl   .main_close_first
177
  push esp
177
  push esp
178
  push dword 1
178
  push dword 1
179
  call @Kolibri@Redraw$qippv
179
  call @Kolibri@Redraw$qippv
180
  add  esp,8
180
  add  esp,8
181
.main_paint_msg:
181
.main_paint_msg:
182
  or   dword [esp+MENUET_THREAD_DATA_FLAG*4],3
182
  or   dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],3
183
  sub  esp,1024
183
  sub  esp,1024
184
  mov  eax,9
184
  mov  eax,9
185
  mov  ebx,esp
185
  mov  ebx,esp
186
  mov  ecx,-1
186
  mov  ecx,-1
187
  int  0x40
187
  int  0x40
188
  mov  eax,[esp+34]
188
  mov  eax,[esp+34]
189
  mov  ebx,[esp+38]
189
  mov  ebx,[esp+38]
190
  mov  ecx,[esp+42]
190
  mov  ecx,[esp+42]
191
  mov  edx,[esp+46]
191
  mov  edx,[esp+46]
192
  add  esp,1024
192
  add  esp,1024
193
  cmp  ecx,[esp+MENUET_THREAD_DATA_LAST_SX*4]
193
  cmp  ecx,[esp+KOLIBRI_THREAD_DATA_LAST_SX*4]
194
  jnz  .main_size
194
  jnz  .main_size
195
  cmp  edx,[esp+MENUET_THREAD_DATA_LAST_SY*4]
195
  cmp  edx,[esp+KOLIBRI_THREAD_DATA_LAST_SY*4]
196
  jz   .main_paint
196
  jz   .main_paint
197
.main_size:
197
.main_size:
198
  mov  [esp+MENUET_THREAD_DATA_LAST_SX*4],ecx
198
  mov  [esp+KOLIBRI_THREAD_DATA_LAST_SX*4],ecx
199
  mov  [esp+MENUET_THREAD_DATA_LAST_SY*4],edx
199
  mov  [esp+KOLIBRI_THREAD_DATA_LAST_SY*4],edx
200
  push edx
200
  push edx
201
  push ecx
201
  push ecx
202
  push ebx
202
  push ebx
203
  push eax
203
  push eax
204
  lea  ecx,[esp+16]
204
  lea  ecx,[esp+16]
205
  mov  edx,esp
205
  mov  edx,esp
206
  push ecx
206
  push ecx
207
  push edx
207
  push edx
208
  call @@MenuetOnSize$qpippv
208
  call @@KolibriOnSize$qpippv
209
  add  esp,24
209
  add  esp,24
210
  test dword [esp+MENUET_THREAD_DATA_FLAG*4],3
210
  test dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],3
211
  jz   .main_cycle
211
  jz   .main_cycle
212
.main_paint:
212
.main_paint:
213
  cmp  dword [esp+MENUET_THREAD_DATA_FLAG*4],0
213
  cmp  dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],0
214
  jl   .main_close
214
  jl   .main_close
215
  push esp
215
  push esp
216
  push dword 0
216
  push dword 0
217
  call @Kolibri@Redraw$qippv
217
  call @Kolibri@Redraw$qippv
218
  add  esp,8
218
  add  esp,8
219
.main_cycle:
219
.main_cycle:
220
  mov  eax,11
220
  mov  eax,11
221
.main_message:
221
.main_message:
222
  cmp  dword [esp+MENUET_THREAD_DATA_FLAG*4],0
222
  cmp  dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],0
223
  jl   .main_close
223
  jl   .main_close
224
  int  0x40
224
  int  0x40
225
  test eax,eax
225
  test eax,eax
226
  jnz  .main_on_message
226
  jnz  .main_on_message
227
  cmp  dword [esp+MENUET_THREAD_DATA_FLAG*4],0
227
  cmp  dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],0
228
  jne  .main_paint
228
  jne  .main_paint
229
  push esp
229
  push esp
230
  call @@MenuetOnIdle$qppv
230
  call @@KolibriOnIdle$qppv
231
  pop  ecx
231
  pop  ecx
232
  test eax,eax
232
  test eax,eax
233
  jz   .main_cycle
233
  jz   .main_cycle
234
  jl   .main_wait_message
234
  jl   .main_wait_message
235
  mov  ebx,eax
235
  mov  ebx,eax
Line 238... Line 238...
238
.main_wait_message:
238
.main_wait_message:
239
  mov  eax,10
239
  mov  eax,10
240
  jmp  .main_message
240
  jmp  .main_message
241
.main_key_press:
241
.main_key_press:
242
  push esp
242
  push esp
243
  call @@MenuetOnKeyPress$qppv
243
  call @@KolibriOnKeyPress$qppv
244
  pop  ecx
244
  pop  ecx
245
  jmp  .main_cycle
245
  jmp  .main_cycle
246
.main_mouse:
246
.main_mouse:
247
  push esp
247
  push esp
248
  call @@MenuetOnMouse$qppv
248
  call @@KolibriOnMouse$qppv
249
  pop  ecx
249
  pop  ecx
250
  jmp  .main_cycle
250
  jmp  .main_cycle
251
.main_on_message:
251
.main_on_message:
252
  dec  eax
252
  dec  eax
253
  jz   .main_paint_msg
253
  jz   .main_paint_msg
Line 261... Line 261...
261
  mov  eax,17
261
  mov  eax,17
262
  int  0x40
262
  int  0x40
263
  test al,al
263
  test al,al
264
  jnz  .main_cycle
264
  jnz  .main_cycle
265
.main_close:
265
.main_close:
266
  btr  dword [esp+MENUET_THREAD_DATA_FLAG*4],31
266
  btr  dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],31
267
  push esp
267
  push esp
268
  call @@MenuetOnClose$qppv
268
  call @@KolibriOnClose$qppv
269
  pop  ecx
269
  pop  ecx
270
  test al,al
270
  test al,al
271
  jz   .main_button
271
  jz   .main_button
272
.main_end:
272
.main_end:
273
  mov  ebx,esp
273
  mov  ebx,esp
Line 302... Line 302...
302
  cmp  dword [@Kolibri@_ThreadScanCount],0
302
  cmp  dword [@Kolibri@_ThreadScanCount],0
303
  jnz  .main_end_wait_loop
303
  jnz  .main_end_wait_loop
304
  lock dec dword [@Kolibri@_ThreadScanCount+4]
304
  lock dec dword [@Kolibri@_ThreadScanCount+4]
305
  mov  ebp,[esp+4]
305
  mov  ebp,[esp+4]
306
  mov  ebx,[esp]
306
  mov  ebx,[esp]
307
  add  esp,MENUET_THREAD_DATA_LEN*4
307
  add  esp,KOLIBRI_THREAD_DATA_LEN*4
308
  mov  eax,ebp
308
  mov  eax,ebp
309
  pop  edi esi
309
  pop  edi esi
310
  xchg ebp,[esp+8]
310
  xchg ebp,[esp+8]
311
  xchg ebx,[esp+4]
311
  xchg ebx,[esp+4]
312
  ret
312
  ret
Line 322... Line 322...
322
}
322
}
Line 323... Line 323...
323
 
323
 
324
proc @Kolibri@Redraw$qippv
324
proc @Kolibri@Redraw$qippv
325
  push ebp
325
  push ebp
326
  mov  ebp,[esp+12]
326
  mov  ebp,[esp+12]
327
  mov  edx,[ebp+MENUET_THREAD_DATA_FLAG*4]
327
  mov  edx,[ebp+KOLIBRI_THREAD_DATA_FLAG*4]
328
  cmp  dword [esp+8],0
328
  cmp  dword [esp+8],0
329
  jl   .redraw_only_inv
329
  jl   .redraw_only_inv
330
  jz   .redraw_no_frame
330
  jz   .redraw_no_frame
331
  or   dl,2
331
  or   dl,2
332
.redraw_no_frame:
332
.redraw_no_frame:
333
  bt   edx,30
333
  bt   edx,30
334
  jnc  .redraw_begin
334
  jnc  .redraw_begin
335
  or   dl,1
335
  or   dl,1
336
  mov  [ebp+MENUET_THREAD_DATA_FLAG*4],edx
336
  mov  [ebp+KOLIBRI_THREAD_DATA_FLAG*4],edx
337
  jmp  .redraw_end
337
  jmp  .redraw_end
338
.redraw_only_inv:
338
.redraw_only_inv:
339
  test dl,3
339
  test dl,3
340
  jnz  .redraw_no_frame
340
  jnz  .redraw_no_frame
341
.redraw_end:
341
.redraw_end:
342
  pop  ebp
342
  pop  ebp
343
  ret
343
  ret
344
.redraw_begin:
344
.redraw_begin:
345
  push ebx esi edi
345
  push ebx esi edi
346
  and  dword [ebp+MENUET_THREAD_DATA_FLAG*4],0xFFFFFFFC
346
  and  dword [ebp+KOLIBRI_THREAD_DATA_FLAG*4],0xFFFFFFFC
347
  test dl,2
347
  test dl,2
348
  jz   .redraw_picture
348
  jz   .redraw_picture
349
  mov  eax,12
349
  mov  eax,12
350
  mov  ebx,1
350
  mov  ebx,1
351
  int  0x40
351
  int  0x40
352
  xor  eax,eax
352
  xor  eax,eax
353
  mov  ebx,[ebp+MENUET_THREAD_DATA_X*4]
353
  mov  ebx,[ebp+KOLIBRI_THREAD_DATA_X*4]
354
  mov  ecx,[ebp+MENUET_THREAD_DATA_Y*4]
354
  mov  ecx,[ebp+KOLIBRI_THREAD_DATA_Y*4]
355
  mov  edx,[ebp+MENUET_THREAD_DATA_C_WINDOW*4]
355
  mov  edx,[ebp+KOLIBRI_THREAD_DATA_C_WINDOW*4]
356
  mov  esi,[ebp+MENUET_THREAD_DATA_C_HEADER*4]
356
  mov  esi,[ebp+KOLIBRI_THREAD_DATA_C_HEADER*4]
357
  mov  edi,[ebp+MENUET_THREAD_DATA_C_BORDER*4]
357
  mov  edi,[ebp+KOLIBRI_THREAD_DATA_C_BORDER*4]
358
  int  0x40
358
  int  0x40
359
  mov  edx,[ebp+MENUET_THREAD_DATA_TITLE*4]
359
  mov  edx,[ebp+KOLIBRI_THREAD_DATA_TITLE*4]
360
  test edx,edx
360
  test edx,edx
361
  jz   .window_defined
361
  jz   .window_defined
362
  mov  edi,edx
362
  mov  edi,edx
363
  mov  ecx,0xFFFFFFFF
363
  mov  ecx,0xFFFFFFFF
Line 368... Line 368...
368
  mov  esi,ecx
368
  mov  esi,ecx
369
  dec  esi
369
  dec  esi
370
  jz   .window_defined
370
  jz   .window_defined
371
  mov  eax,4
371
  mov  eax,4
372
  mov  ebx,0x00070007
372
  mov  ebx,0x00070007
373
  mov  ecx,[ebp+MENUET_THREAD_DATA_C_TITLE*4]
373
  mov  ecx,[ebp+KOLIBRI_THREAD_DATA_C_TITLE*4]
374
  int  0x40
374
  int  0x40
375
.window_defined:
375
.window_defined:
376
  mov  eax,12
376
  mov  eax,12
377
  mov  ebx,2
377
  mov  ebx,2
378
  int  0x40
378
  int  0x40
379
.redraw_picture:
379
.redraw_picture:
380
  mov  eax,12
380
  mov  eax,12
381
  mov  ebx,2
381
  mov  ebx,2
382
  int  0x40
382
  int  0x40
383
  mov  esi,[ebp+MENUET_THREAD_DATA_PICTURE*4]
383
  mov  esi,[ebp+KOLIBRI_THREAD_DATA_PICTURE*4]
384
  test esi,esi
384
  test esi,esi
385
  jz   .redraw_end_draw
385
  jz   .redraw_end_draw
386
  mov  ecx,[ebp+MENUET_THREAD_DATA_SZ_PICT*4]
386
  mov  ecx,[ebp+KOLIBRI_THREAD_DATA_SZ_PICT*4]
387
  jecxz .redraw_end_draw
387
  jecxz .redraw_end_draw
388
  mov  al,byte [ebp+MENUET_THREAD_DATA_C_WINDOW*4+3]
388
  mov  al,byte [ebp+KOLIBRI_THREAD_DATA_C_WINDOW*4+3]
389
  and  al,15
389
  and  al,15
390
  mov  edx,MENUET_BORDER_SIZE*65536+MENUET_HEADER_SIZE
390
  mov  edx,MENUET_BORDER_SIZE*65536+MENUET_HEADER_SIZE
391
  cmp  al,3
391
  cmp  al,3
392
  jnz  .redraw_no_skin
392
  jnz  .redraw_no_skin
393
  mov  eax,48
393
  mov  eax,48
Line 446... Line 446...
446
  call Menuet_HashInt
446
  call Menuet_HashInt
447
  movzx eax,al
447
  movzx eax,al
448
  mov  eax,dword [@Kolibri@_ThreadTable+eax*4]
448
  mov  eax,dword [@Kolibri@_ThreadTable+eax*4]
449
  jmp  .exit_process_test
449
  jmp  .exit_process_test
450
.exit_process_next:
450
.exit_process_next:
451
  mov  eax,dword [eax+MENUET_THREAD_DATA_NEXT*4]
451
  mov  eax,dword [eax+KOLIBRI_THREAD_DATA_NEXT*4]
452
.exit_process_test:
452
.exit_process_test:
453
  test eax,eax
453
  test eax,eax
454
  jz   .exit_process_continue
454
  jz   .exit_process_continue
455
  cmp  ebx,[eax+MENUET_THREAD_DATA_PID*4]
455
  cmp  ebx,[eax+KOLIBRI_THREAD_DATA_PID*4]
456
  jnz  .exit_process_next
456
  jnz  .exit_process_next
457
  mov  eax,18
457
  mov  eax,18
458
  mov  ebx,2
458
  mov  ebx,2
459
  mov  ecx,esi
459
  mov  ecx,esi
460
  int  0x40
460
  int  0x40
Line 490... Line 490...
490
  jmp  Menuet_main_end
490
  jmp  Menuet_main_end
491
endp
491
endp
Line 492... Line 492...
492
 
492
 
493
proc @Kolibri@ReturnMessageLoop$qppv,@Kolibri@ThreadMain$qpvt1
493
proc @Kolibri@ReturnMessageLoop$qppv,@Kolibri@ThreadMain$qpvt1
494
  mov  esp,[esp+4]
494
  mov  esp,[esp+4]
495
  bt   dword [esp+MENUET_THREAD_DATA_FLAG*4],30
495
  bt   dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],30
496
  jc   Menuet_main_end
496
  jc   Menuet_main_end
497
  jmp  Menuet_main_cycle
497
  jmp  Menuet_main_cycle
Line 498... Line 498...
498
endp
498
endp
Line 582... Line 582...
582
  mov  edx,40
582
  mov  edx,40
583
  int  0x40
583
  int  0x40
584
  ret
584
  ret
585
endp
585
endp
Line -... Line 586...
-
 
586
 
-
 
587
proc @Kolibri@DrawText$qssipxc uses ebx
-
 
588
  mov  eax,4
-
 
589
  mov  ebx,[esp+8-2]
-
 
590
  mov  bx,[esp+12]
-
 
591
  mov  ecx,[esp+16]
-
 
592
  or   ecx,0x80000000
-
 
593
  mov  edx,[esp+20]
-
 
594
  int  0x40
-
 
595
  ret
-
 
596
endp
586
 
597
 
587
proc @Kolibri@GetProcessInfo$qpuipct1t1piui uses ebx esi edi
598
proc @Kolibri@GetProcessInfo$qpuipct1t1piui uses ebx esi edi
588
  sub  esp,1024
599
  sub  esp,1024
589
  mov  eax,9
600
  mov  eax,9
590
  mov  ebx,esp
601
  mov  ebx,esp
Line 644... Line 655...
644
  ret
655
  ret
645
endp
656
endp
Line 646... Line 657...
646
 
657
 
647
proc @Kolibri@GetPid$qppv
658
proc @Kolibri@GetPid$qppv
648
  mov  ecx,[esp+4]
659
  mov  ecx,[esp+4]
649
  mov  eax,[ecx+MENUET_THREAD_DATA_PID*4]
660
  mov  eax,[ecx+KOLIBRI_THREAD_DATA_PID*4]
650
  ret
661
  ret
Line 651... Line 662...
651
endp
662
endp
652
 
663
 
Line 689... Line 700...
689
  lock inc dword [@Kolibri@_ThreadScanCount]
700
  lock inc dword [@Kolibri@_ThreadScanCount]
690
  mov  eax,dword [@Kolibri@_ThreadTable+eax*4]
701
  mov  eax,dword [@Kolibri@_ThreadTable+eax*4]
691
  mov  ecx,[esp+4]
702
  mov  ecx,[esp+4]
692
  jmp  .get_thread_data_test
703
  jmp  .get_thread_data_test
693
.get_thread_data_loop:
704
.get_thread_data_loop:
694
  mov  eax,dword [eax+MENUET_THREAD_DATA_NEXT*4]
705
  mov  eax,dword [eax+KOLIBRI_THREAD_DATA_NEXT*4]
695
.get_thread_data_test:
706
.get_thread_data_test:
696
  test eax,eax
707
  test eax,eax
697
  jz   .get_thread_data_end
708
  jz   .get_thread_data_end
698
  cmp  ecx,[eax+MENUET_THREAD_DATA_PID*4]
709
  cmp  ecx,[eax+KOLIBRI_THREAD_DATA_PID*4]
699
  jnz  .get_thread_data_loop
710
  jnz  .get_thread_data_loop
700
.get_thread_data_end:
711
.get_thread_data_end:
701
  lock dec dword [@Kolibri@_ThreadScanCount]
712
  lock dec dword [@Kolibri@_ThreadScanCount]
702
  ret
713
  ret
703
.get_thread_data_wait:
714
.get_thread_data_wait: