Subversion Repositories Kolibri OS

Rev

Rev 576 | Rev 799 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  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.  
  406.  
  407.  
  408.  
  409.