Subversion Repositories Kolibri OS

Rev

Rev 576 | Rev 701 | Go to most recent revision | Details | Compare with Previous | 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
 
23
public _memset
24
 
25
struc FILEIO
26
{   .cmd            dd ?
27
    .offset         dd ?
28
                    dd ?
29
    .count          dd ?
30
    .buff           dd ?
31
                    db ?
32
    .name           dd ?
33
};
34
 
35
align 4
36
_create_thread@12:
37
.thr_proc    equ esp+4
38
.param       equ esp+8
39
.stack_size  equ esp+12
40
 
41
           mov eax, 68
42
           mov ebx, 12
43
           mov ecx, [.stack_size]
44
           add ecx, 4095
45
           and ecx, -4096
46
           int 0x40
47
           test eax, eax
48
           jz .fail
49
 
50
           lea edx, [eax+ecx-12]
51
           mov [edx], dword .exit_point
52
           mov ebx, [.param]
53
           mov [edx+4], ebx
54
           mov [edx+8], ecx
55
 
56
           mov eax, 51
57
           mov ebx, 1
58
           mov ecx, [.thr_proc]
59
           int 0x40
60
           ret 12
61
.fail:
62
           not eax
63
           ret 12
64
align 4
65
.exit_point:
66
           pop ecx
67
           mov eax, 68
68
           mov ebx, 13
69
           int 0x40
70
           mov eax, -1
71
           int 0x40
72
 
73
restore .thr_proc
74
restore .param
75
restore .stack_size
76
 
77
 
78
align 4
79
proc _get_button_id
80
           mov   eax,17
81
           int   0x40
82
           test  al,al
83
           jnz   @F
84
           shr   eax,8
85
           ret
86
@@:
87
           xor   eax,eax
88
           dec   eax
89
           ret
90
endp
91
 
92
align 4
93
proc _get_fileinfo@8 stdcall, name:dword, info:dword
94
           push ebx
95
           push esi
96
           push edi
97
           xor eax, eax
98
           mov ebx, [name]
99
           mov ecx, [info]
100
 
101
           mov [fileio.cmd], 5
102
           mov [fileio.offset], eax
103
           mov [fileio.offset+4], eax
104
           mov [fileio.count], eax
105
           mov [fileio.buff], ecx
106
           mov byte [fileio.buff+4], al
107
           mov [fileio.name], ebx
108
 
109
           mov eax, 70
110
           lea ebx, [fileio]
111
           int 0x40
112
           pop edi
113
           pop esi
114
           pop ebx
115
           ret
116
endp
117
 
118
align 4
119
proc _read_file@20 stdcall,name:dword, buff:dword, offset:dword,\
120
                                     count:dword,reads:dword
121
           push ebx
122
           push esi
123
           push edi
124
           xor eax, eax
125
           mov ebx, [name]
126
           mov edx, [offset]
127
           mov esi, [buff]
128
           mov edi, [count]
129
 
130
           mov [fileio.cmd], eax
131
           mov [fileio.offset], edx
132
           mov [fileio.offset+4], eax
133
           mov [fileio.count], edi
134
           mov [fileio.buff], esi
135
           mov byte [fileio.buff+4], al
136
           mov [fileio.name], ebx
137
 
138
           mov eax, 70
139
           lea ebx, [fileio]
140
           int 0x40
141
           mov esi, [reads]
142
           test esi, esi
143
           jz @f
144
           mov [esi], ebx
145
@@:
146
           pop edi
147
           pop esi
148
           pop ebx
149
           ret
150
endp
151
 
152
align 4
153
proc _get_key@4 stdcall, key:dword
154
           push ebx
155
           push ecx
156
           mov eax, 2
157
           int 0x40
158
           mov ebx, [key]
159
           mov ecx, eax
160
           shr ecx, 8
161
           mov [ebx], ecx
162
           movzx eax, al
163
           pop ecx
164
           pop ebx
165
           ret
166
endp
167
 
168
 
169
align 4
170
proc _InitHeap@4 stdcall, heap_size:dword
171
                  push ebx
172
                  mov eax, 68
173
                  mov ebx, 11
174
              mov ecx, [heap_size]
175
                  int 0x40
176
                  pop ebx
177
                  ret
178
endp
179
 
180
align 4
181
proc _UserAlloc@4 stdcall, alloc_size:dword
182
                  push ebx
183
                  mov eax, 68
184
                  mov ebx, 12
185
              mov ecx, [alloc_size]
186
                  int 0x40
187
                  pop ebx
188
                  ret
189
endp
190
 
191
align 4
192
proc _CreateThread@8 stdcall, fn:dword, p_stack:dword
193
              push ebx
194
              mov eax, 51
195
              mov ebx, 1
196
              mov ecx, [fn]
197
              mov edx,[p_stack]
198
                  int 0x40
199
                  pop ebx
200
                  ret
201
endp
202
 
203
align 4
204
proc _GetMousePos@4 stdcall,rel_type:dword
205
           push ebx
206
           mov eax, 37
207
           mov ebx, [rel_type]
208
           int 0x40
209
           pop ebx
210
           ret
211
endp
212
 
213
 
214
align 4
215
proc _DrawWindow@36 stdcall, x:dword, y:dword, sx:dword, sy:dword,\
216
                               workcolor:dword, style:dword, captioncolor:dword,\
217
                               windowtype:dword, bordercolor:dword
218
           push ebx edi esi
219
           mov ebx, [x]
220
           mov ecx, [y]
221
           shl ebx, 16
222
           shl ecx, 16
223
           mov bx, word [sx]
224
           mov cx,  word [sy]
225
           mov  edx,[style]
226
           shl  edx,24
227
           add  edx,[workcolor]
228
           mov  esi,[windowtype]
229
           shl  esi,24
230
           add  esi,[captioncolor]
231
           mov  edi,[bordercolor]
232
           xor  eax,eax
233
           int  0x40
234
           pop esi edi ebx
235
           ret
236
endp
237
 
238
align 4
239
_make_button@24:
240
;arg1 - x
241
;arg2 - y
242
;arg3 - xsize
243
;arg4 - ysize
244
;arg5 - id
245
;arg6 - color
246
 
247
  push  ebx esi
248
  mov   ebx,[esp+12]
249
  shl   ebx,16
250
  mov   bx,[esp+20]
251
  mov   ecx,[esp+16]
252
  shl   ecx,16
253
  mov   cx,[esp+24]
254
  mov   edx,[esp+28]
255
  mov   esi,[esp+32]
256
  mov   eax,8
257
  int   0x40
258
  pop   esi ebx
259
  ret   24
260
 
261
align 4
262
_draw_bar@20:
263
;arg1 - x
264
;arg2 - y
265
;arg3 - xsize
266
;arg4 - ysize
267
;arg5 - color
268
  push  ebx
269
  mov   eax,13
270
  mov   ebx,[esp+8]
271
  shl   ebx,16
272
  mov   bx,[esp+16]
273
  mov   ecx,[esp+12]
274
  shl   ecx,16
275
  mov   cx,[esp+20]
276
  mov   edx,[esp+24]
277
  int   0x40
278
  pop   ebx
279
  ret   20
280
 
281
_write_text@20:
282
;arg1 - x
283
;arg2 - y
284
;arg3 - color
285
;arg4 - text
286
;arg5 - len
287
  push  ebx esi
288
  mov   eax,4
289
  mov   ebx,[esp+12]
290
  shl   ebx,16
291
  mov   bx,[esp+16]
292
  mov   ecx,[esp+20]
293
  mov   edx,[esp+24]
294
  mov   esi,[esp+28]
295
  int   0x40
296
  pop   esi ebx
297
  ret   20
298
 
299
align 4
300
proc _debug_out@4 stdcall, val:dword
301
           push ebx
302
           mov  ecx,[val]
303
           mov  ebx,1
304
           mov  eax,63
305
           int  0x40
306
           pop ebx
307
           ret
308
endp
309
 
310
align 4
311
proc _debug_out_hex@4 stdcall val:dword
312
           locals
313
             count dd ?
314
           endl
315
 
316
           mov [count], 8
317
.new_char:
318
           rol [val], 4
319
           mov ecx, [val]
320
           and ecx, 0x0f
321
           mov cl,byte [__hexdigits+ecx]
322
           mov eax, 63
323
           mov ebx, 1
324
           int 0x40
325
           dec [count]
326
           jnz .new_char
327
           ret
328
endp
329
 
330
align 4
331
_memset:
332
           mov     edx,[esp + 0ch]
333
           mov     ecx,[esp + 4]
334
 
335
           test    edx,edx
336
           jz      short toend
337
 
338
           xor     eax,eax
339
           mov     al,[esp + 8]
340
 
341
           push    edi
342
           mov     edi,ecx
343
 
344
           cmp     edx,4
345
           jb      tail
346
 
347
           neg     ecx
348
           and     ecx,3
349
           jz      short dwords
350
 
351
           sub     edx,ecx
352
adjust_loop:
353
           mov     [edi],al
354
           add     edi,1
355
           sub     ecx,1
356
           jnz     adjust_loop
357
 
358
dwords:
359
        mov     ecx,eax
360
        shl     eax,8
361
        add     eax,ecx
362
        mov     ecx,eax
363
        shl     eax,10h
364
        add     eax,ecx
365
 
366
        mov     ecx,edx
367
        and     edx,3
368
        shr     ecx,2
369
        jz      tail
370
 
371
                cld
372
        rep     stosd
373
main_loop_tail:
374
        test    edx,edx
375
        jz      finish
376
 
377
 
378
tail:
379
        mov     [edi],al
380
        add     edi,1
381
 
382
        sub     edx,1
383
        jnz     tail
384
 
385
finish:
386
        mov     eax,[esp + 8]
387
        pop     edi
388
 
389
        ret
390
 
391
toend:
392
        mov     eax,[esp + 4]
393
 
394
        ret
395
 
396
 
397
public __fltused
398
__fltused    dd 0
399
 
400
align 4
401
__hexdigits db '0123456789ABCDEF'
402
 
403
align 4
404
fileio FILEIO
405