Subversion Repositories Kolibri OS

Rev

Rev 577 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
576 serge 1
format MS COFF
2
 
3
include "proc32.inc"
4
 
5
section '.text' code readable executable
6
 
7
public _InitHeap@4
8
public _UserAlloc@4
9
public _CreateThread@8
10
public _GetMousePos@4
11
public _get_fileinfo@8
12
public _read_file@20
13
public _get_key@4
14
public _get_button_id
15
public _DrawWindow@36
16
public _make_button@24
17
public _draw_bar@20
18
public _write_text@20
19
public _debug_out@4
20
public _debug_out_hex@4
21
public _create_thread@12
22
public _init_ipc@0
23
public _recieve_ipc@0
24
public _send_ipc@8
25
 
26
 
27
public _memset
28
 
29
struc FILEIO
30
{   .cmd            dd ?
31
    .offset         dd ?
32
                    dd ?
33
    .count          dd ?
34
    .buff           dd ?
35
                    db ?
36
    .name           dd ?
37
};
38
 
39
align 4
40
_create_thread@12:
41
.thr_proc    equ esp+4
42
.param       equ esp+8
43
.stack_size  equ esp+12
44
 
45
           mov eax, 68
46
           mov ebx, 12
47
           mov ecx, [.stack_size]
48
           add ecx, 4095
49
           and ecx, -4096
50
           int 0x40
51
           test eax, eax
52
           jz .fail
53
 
54
           lea edx, [eax+ecx-12]
55
           mov [edx], dword .exit_point
56
           mov ebx, [.param]
57
           mov [edx+4], ebx
58
           mov [edx+8], ecx
59
 
60
           mov eax, 51
61
           mov ebx, 1
62
           mov ecx, [.thr_proc]
63
           int 0x40
64
           ret 12
65
.fail:
66
           not eax
67
           ret 12
68
align 4
69
.exit_point:
70
           pop ecx
71
           mov eax, 68
72
           mov ebx, 13
73
           int 0x40
74
           mov eax, -1
75
           int 0x40
76
 
77
restore .thr_proc
78
restore .param
79
restore .stack_size
80
 
81
 
82
align 4
83
proc _get_button_id
84
           mov   eax,17
85
           int   0x40
86
           test  al,al
87
           jnz   @F
88
           shr   eax,8
89
           ret
90
@@:
91
           xor   eax,eax
92
           dec   eax
93
           ret
94
endp
95
 
96
align 4
97
proc _get_fileinfo@8 stdcall, name:dword, info:dword
98
           push ebx
99
           push esi
100
           push edi
101
           xor eax, eax
102
           mov ebx, [name]
103
           mov ecx, [info]
104
 
105
           mov [fileio.cmd], 5
106
           mov [fileio.offset], eax
107
           mov [fileio.offset+4], eax
108
           mov [fileio.count], eax
109
           mov [fileio.buff], ecx
110
           mov byte [fileio.buff+4], al
111
           mov [fileio.name], ebx
112
 
113
           mov eax, 70
114
           lea ebx, [fileio]
115
           int 0x40
116
           pop edi
117
           pop esi
118
           pop ebx
119
           ret
120
endp
121
 
122
align 4
123
proc _read_file@20 stdcall,name:dword, buff:dword, offset:dword,\
124
                                     count:dword,reads:dword
125
           push ebx
126
           push esi
127
           push edi
128
           xor eax, eax
129
           mov ebx, [name]
130
           mov edx, [offset]
131
           mov esi, [buff]
132
           mov edi, [count]
133
 
134
           mov [fileio.cmd], eax
135
           mov [fileio.offset], edx
136
           mov [fileio.offset+4], eax
137
           mov [fileio.count], edi
138
           mov [fileio.buff], esi
139
           mov byte [fileio.buff+4], al
140
           mov [fileio.name], ebx
141
 
142
           mov eax, 70
143
           lea ebx, [fileio]
144
           int 0x40
145
           mov esi, [reads]
146
           test esi, esi
147
           jz @f
148
           mov [esi], ebx
149
@@:
150
           pop edi
151
           pop esi
152
           pop ebx
153
           ret
154
endp
155
 
156
align 4
157
proc _get_key@4 stdcall, key:dword
158
           push ebx
159
           push ecx
160
           mov eax, 2
161
           int 0x40
162
           mov ebx, [key]
163
           mov ecx, eax
164
           shr ecx, 8
165
           mov [ebx], ecx
166
           movzx eax, al
167
           pop ecx
168
           pop ebx
169
           ret
170
endp
171
 
172
 
173
align 4
174
proc _InitHeap@4 stdcall, heap_size:dword
175
                  push ebx
176
                  mov eax, 68
177
                  mov ebx, 11
178
              mov ecx, [heap_size]
179
                  int 0x40
180
                  pop ebx
181
                  ret
182
endp
183
 
184
align 4
185
proc _UserAlloc@4 stdcall, alloc_size:dword
186
                  push ebx
187
                  mov eax, 68
188
                  mov ebx, 12
189
              mov ecx, [alloc_size]
190
                  int 0x40
191
                  pop ebx
192
                  ret
193
endp
194
 
195
align 4
196
proc _CreateThread@8 stdcall, fn:dword, p_stack:dword
197
              push ebx
198
              mov eax, 51
199
              mov ebx, 1
200
              mov ecx, [fn]
201
              mov edx,[p_stack]
202
                  int 0x40
203
                  pop ebx
204
                  ret
205
endp
206
 
207
align 4
208
proc _GetMousePos@4 stdcall,rel_type:dword
209
           push ebx
210
           mov eax, 37
211
           mov ebx, [rel_type]
212
           int 0x40
213
           pop ebx
214
           ret
215
endp
216
 
217
 
218
align 4
219
proc _DrawWindow@36 stdcall, x:dword, y:dword, sx:dword, sy:dword,\
220
                               workcolor:dword, style:dword, captioncolor:dword,\
221
                               windowtype:dword, bordercolor:dword
222
           push ebx edi esi
223
           mov ebx, [x]
224
           mov ecx, [y]
225
           shl ebx, 16
226
           shl ecx, 16
227
           mov bx, word [sx]
228
           mov cx,  word [sy]
229
           mov  edx,[style]
230
           shl  edx,24
231
           add  edx,[workcolor]
232
           mov  esi,[windowtype]
233
           shl  esi,24
234
           add  esi,[captioncolor]
235
           mov  edi,[bordercolor]
236
           xor  eax,eax
237
           int  0x40
238
           pop esi edi ebx
239
           ret
240
endp
241
 
242
align 4
243
_make_button@24:
244
;arg1 - x
245
;arg2 - y
246
;arg3 - xsize
247
;arg4 - ysize
248
;arg5 - id
249
;arg6 - color
250
 
251
  push  ebx esi
252
  mov   ebx,[esp+12]
253
  shl   ebx,16
254
  mov   bx,[esp+20]
255
  mov   ecx,[esp+16]
256
  shl   ecx,16
257
  mov   cx,[esp+24]
258
  mov   edx,[esp+28]
259
  mov   esi,[esp+32]
260
  mov   eax,8
261
  int   0x40
262
  pop   esi ebx
263
  ret   24
264
 
265
align 4
266
_draw_bar@20:
267
;arg1 - x
268
;arg2 - y
269
;arg3 - xsize
270
;arg4 - ysize
271
;arg5 - color
272
  push  ebx
273
  mov   eax,13
274
  mov   ebx,[esp+8]
275
  shl   ebx,16
276
  mov   bx,[esp+16]
277
  mov   ecx,[esp+12]
278
  shl   ecx,16
279
  mov   cx,[esp+20]
280
  mov   edx,[esp+24]
281
  int   0x40
282
  pop   ebx
283
  ret   20
284
 
285
_write_text@20:
286
;arg1 - x
287
;arg2 - y
288
;arg3 - color
289
;arg4 - text
290
;arg5 - len
291
  push  ebx esi
292
  mov   eax,4
293
  mov   ebx,[esp+12]
294
  shl   ebx,16
295
  mov   bx,[esp+16]
296
  mov   ecx,[esp+20]
297
  mov   edx,[esp+24]
298
  mov   esi,[esp+28]
299
  int   0x40
300
  pop   esi ebx
301
  ret   20
302
 
303
align 4
304
proc _debug_out@4 stdcall, val:dword
305
           push ebx
306
           mov  ecx,[val]
307
           mov  ebx,1
308
           mov  eax,63
309
           int  0x40
310
           pop ebx
311
           ret
312
endp
313
 
314
align 4
315
proc _debug_out_hex@4 stdcall val:dword
316
           locals
317
             count dd ?
318
           endl
319
 
320
           mov [count], 8
321
.new_char:
322
           rol [val], 4
323
           mov ecx, [val]
324
           and ecx, 0x0f
325
           mov cl,byte [__hexdigits+ecx]
326
           mov eax, 63
327
           mov ebx, 1
328
           int 0x40
329
           dec [count]
330
           jnz .new_char
331
           ret
332
endp
333
 
334
align 4
335
_memset:
336
           mov     edx,[esp + 0ch]
337
           mov     ecx,[esp + 4]
338
 
339
           test    edx,edx
340
           jz      short toend
341
 
342
           xor     eax,eax
343
           mov     al,[esp + 8]
344
 
345
           push    edi
346
           mov     edi,ecx
347
 
348
           cmp     edx,4
349
           jb      tail
350
 
351
           neg     ecx
352
           and     ecx,3
353
           jz      short dwords
354
 
355
           sub     edx,ecx
356
adjust_loop:
357
           mov     [edi],al
358
           add     edi,1
359
           sub     ecx,1
360
           jnz     adjust_loop
361
 
362
dwords:
363
        mov     ecx,eax
364
        shl     eax,8
365
        add     eax,ecx
366
        mov     ecx,eax
367
        shl     eax,10h
368
        add     eax,ecx
369
 
370
        mov     ecx,edx
371
        and     edx,3
372
        shr     ecx,2
373
        jz      tail
374
 
375
                cld
376
        rep     stosd
377
main_loop_tail:
378
        test    edx,edx
379
        jz      finish
380
 
381
 
382
tail:
383
        mov     [edi],al
384
        add     edi,1
385
 
386
        sub     edx,1
387
        jnz     tail
388
 
389
finish:
390
        mov     eax,[esp + 8]
391
        pop     edi
392
 
393
        ret
394
 
395
toend:
396
        mov     eax,[esp + 4]
397
 
398
        ret
399
 
400
public _allmul
401
 
402
_allmul:
403
        mov eax, [esp+8]
404
        mov ecx, [esp+16]
405
        or ecx,eax
406
        mov ecx, [esp+12]
407
        jnz .hard
408
        mov eax, [esp+4]
409
        mul ecx
410
        ret 16
411
.hard:
412
        push ebx
413
        mul ecx
414
        mov ebx,eax
415
        mov eax, [esp+8]
416
        mul dword [esp+20]
417
        add ebx,eax
418
        mov eax,[esp+8]
419
        mul ecx
420
        add edx,ebx
421
        pop ebx
422
        ret 16
423
 
424
align 4
425
_allshr:
426
        cmp cl,64
427
        jae .sign
428
 
429
        cmp cl, 32
430
        jae .MORE32
431
        shrd eax,edx,cl
432
        sar edx,cl
433
        ret
434
.MORE32:
435
        mov     eax,edx
436
        sar     edx,31
437
        and     cl,31
438
        sar     eax,cl
439
        ret
440
.sign:
441
        sar     edx,31
442
        mov     eax,edx
443
        ret
444
 
445
public __ftol2_sse
446
 
447
align 4
448
__ftol2_sse:
449
           push ebp
450
           mov ebp, esp
451
           sub esp, 20
452
           and esp, 0xFFFFFFF0
453
           fld st0
454
           fst dword [esp+18]
455
           fistp qword [esp+10]
456
           fild qword [esp+10]
457
           mov edx, [esp+18]
458
           mov eax, [esp+10]
459
           test eax, eax
460
           jz .QnaNZ
461
 
462
.not_QnaNZ:
463
           fsubp st1, st0
464
           test edx, edx
465
           jns .pos
466
           fstp dword [esp]
467
           mov ecx, [esp]
468
           xor ecx, 0x80000000
469
           add ecx, 0x7FFFFFFF
470
           adc eax, 0
471
           mov edx, [esp+14]
472
           adc edx, 0
473
           jmp .exit
474
.pos:
475
           fstp dword [esp]
476
           mov ecx, [esp]
477
           add ecx, 0x7FFFFFFF
478
           sbb eax, 0
479
           jmp .exit
480
.QnaNZ:
481
           mov edx, [esp+14]
482
           test edx, 0x7FFFFFFF
483
           jne .not_QnaNZ
484
           fstp dword [esp+18]
485
           fstp dword [esp+18]
486
.exit:
487
           leave
488
           ret
489
 
490
public __fltused
491
__fltused    dd 0
492
 
493
align 4
494
__hexdigits db '0123456789ABCDEF'
495
 
496
align 4
497
fileio FILEIO
498
 
499
 
500
align 4
501
_init_ipc@0:
502
           push ebx
503
           mov eax, 60
504
           mov ebx, 1
505
           mov ecx, ipc_buff
506
           mov edx, (5*4+1024)
507
           int 0x40
508
           pop ebx
509
           ret
510
 
511
align 4
512
_recieve_ipc@0:
513
           mov [ipc_buff.size], 8
514
           mov eax, ipc_buff.sender
515
           ret
516
align 4
517
proc _send_ipc@8 stdcall, dst:dword, code:dword
518
           push ebx
519
           push esi
520
 
521
           mov eax, 60
522
           mov ebx, 2
523
           mov ecx, [dst]
524
           lea edx, [code]
525
           mov esi, 4
526
           int 0x40
527
           pop esi
528
           pop ebx
529
           ret
530
endp
531
 
532
;align 4
533
;ipc_ctrl:
534
;  .pid        dd ?
535
;  .size       dd 4
536
;  .msg        dd ?
537
 
538
align 4
539
ipc_buff:
540
  .lock       dd 0
541
  .size       dd 8
542
  .sender     dd ?
543
  .msg_size   dd ?
544
  .msg        dd ?
545
  .data       rb 1024