Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. ;/***
  2.  
  3. MenuetHeapInit = @@Menuet@_HeapInit$qpvt1t1
  4.  
  5. MenuetHeapAlloc = @@Menuet@Alloc$qui
  6.  
  7. MenuetHeapReAlloc = @@Menuet@ReAlloc$qpvui
  8.  
  9. MenuetHeapFree = @@Menuet@Free$qpv
  10.  
  11. MenuetHeapFreeAndThreadFinish = @Menuet@_FreeAndThreadFinish$qpvpi
  12.  
  13. define @Menuet@_SetUseMemory$qui
  14.   push ebx
  15.   mov  eax,64
  16.   mov  ebx,1
  17.   mov  ecx,[esp+8]
  18.   int  0x40
  19.   pop  ebx
  20.   test eax,eax
  21.   jnz  Menuet_set_use_memory_nomem
  22.   push ecx
  23.   push dword [@Menuet@_MenuetMemBlock]
  24.   call @@MemoryHeap@ResizeBlock$q20MemoryHeap@TMemBlockpv
  25.   add  esp,8
  26.   mov  al,1
  27.   ret
  28. Menuet_set_use_memory_nomem:
  29.   xor  al,al
  30.   ret
  31. enddef
  32.  
  33. define @Menuet@_RecalculateUseMemory$qui
  34.   mov  eax,dword [esp+4]
  35.   mov  ecx,(U_END + 3) and not 3
  36.   cmp  eax,ecx
  37.   jna  Menuet_recalculate_use_memory_min
  38.   push ebx
  39.   sub  eax,ecx
  40.   mov  ebx,6
  41.   mul  ebx
  42.   dec  ebx
  43.   div  ebx
  44.   add  eax,((U_END + 3) and not 3) + 3
  45.   and  eax,not 3
  46.   pop  ebx
  47.   ret
  48. Menuet_recalculate_use_memory_min:
  49.   mov  eax,ecx
  50.   ret
  51. enddef
  52.  
  53. define @Menuet@_FreeAndThreadFinish$qpvpi
  54.   mov  ebx,1
  55.   mov  ecx,[esp+8]
  56.   jmp  Menuet_heap_free_tf_wait
  57. Menuet_heap_free_tf_wait_loop:
  58.   mov  eax,5
  59.   int  0x40
  60.   shl  ebx,1
  61.   cmp  ebx,MENUET_MUTEX_MAX_TIME_WAIT
  62.   jna  Menuet_heap_free_tf_wait
  63.   mov  ebx,MENUET_MUTEX_MAX_TIME_WAIT
  64. Menuet_heap_free_tf_wait:
  65.   cmp  dword [ecx],0
  66.   jnz  @Menuet@ExitProcess$qv
  67.   lock bts dword [@Menuet@_MemHeapMutex],0
  68.   jc   Menuet_heap_free_tf_wait_loop
  69.   push dword [esp+4]
  70.   push @Menuet@_MenuetFreeSpace
  71.   call @@MemoryHeap@Free$qr21MemoryHeap@TFreeSpacepv
  72.   add  esp,8
  73.   mov  byte [@Menuet@_MemHeapMutex],0x40
  74.   or   eax,-1
  75.   int  0x40
  76. enddef
  77.  
  78. macro call func
  79. {
  80.   if func eq @MemoryHeap@_FirstNotZeroBit$qui
  81.     bsf  eax,[esp]
  82.   else if func eq @MemoryHeap@_CopyMemItemArray$quiuiui
  83.     xchg edi,[esp]
  84.     xchg esi,[esp+4]
  85.     mov  ecx,[esp+8]
  86.     cld
  87.     sub  ecx,esi
  88.     shr  ecx,2
  89.     rep movs dword [edi],[esi]
  90.     xchg edi,[esp]
  91.     xchg esi,[esp+4]
  92.   else
  93.     call func
  94.   end if
  95. }
  96.  
  97. @$bnwa$qui = @@Menuet@Alloc$qui
  98. @$bnew$qui = @@Menuet@Alloc$qui
  99.  
  100. @$bdla$qpv = @@Menuet@Free$qpv
  101. @$bdele$qpv = @@Menuet@Free$qpv
  102.  
  103. define @_vector_new_ldtc_$qpvuiuiuit1uit1
  104. .var_2C = -0Ch
  105. .var_28 = -8
  106. .var_24 = -4
  107. .arg_0 = 8
  108. .arg_4 = 0Ch
  109. .arg_8 = 10h
  110. .arg_C = 14h
  111. .arg_10 = 18h
  112.         push    ebp
  113.         mov     ebp, esp
  114.         add     esp, -0Ch
  115.         push    ebx
  116.         push    esi
  117.         push    edi
  118.         mov     edi, [ebp+.arg_10]
  119.         mov     esi, [ebp+.arg_C]
  120.         cmp     dword [ebp+.arg_0], 0
  121.         jnz     .loc_10070
  122.         mov     edx, [ebp+.arg_4]
  123.         imul    edx, [ebp+.arg_8]
  124.         test    esi, 10h
  125.         jz      @f
  126.         add     edx, 4
  127. @@:
  128.         push    edx
  129.         call    @$bnwa$qui
  130.         pop     ecx
  131.         mov     [ebp+.arg_0], eax
  132.         test    eax, eax
  133.         jz      .ret
  134.         mov     dword [ebp+.var_2C], 1
  135.         jmp     @f
  136. .loc_10070:
  137.         and     dword [ebp+.var_2C], 0
  138. @@:
  139.         test    esi, 10h
  140.         jz      @f
  141.         mov     edx, [ebp+.arg_0]
  142.         mov     ecx, [ebp+.arg_8]
  143.         mov     [edx], ecx
  144.         add     dword [ebp+.arg_0], 4
  145. @@:
  146.         mov     eax, [ebp+.arg_0]
  147.         test    edi, edi
  148.         jz      .ret
  149.         mov     ecx, [ebp+.arg_8]
  150.         mov     [ebp+.var_28], ecx
  151.         mov     ebx, eax
  152.         jmp     .loc_100EF
  153. .loc_100B0:
  154.         mov     eax, esi
  155.         and     eax, 7
  156.         dec     eax
  157.         jz      .loc_100CB
  158.         dec     eax
  159.         jz      .loc_100D1
  160.         dec     eax
  161.         jz      .loc_100D6
  162.         dec     eax
  163.         dec     eax
  164.         jz      .loc_100DC
  165.         jmp     $
  166. .loc_100CB:
  167.         push    ebx
  168.         call    edi
  169.         pop     ecx
  170.         jmp     .loc_100EC
  171. .loc_100D1:
  172. .loc_100DC:
  173.         push    ebx
  174.         call    edi
  175.         jmp     .loc_100EC
  176. .loc_100D6:
  177.         mov     eax, ebx
  178.         call    edi
  179. .loc_100EC:
  180.         add     ebx, [ebp+.arg_4]
  181. .loc_100EF:
  182.         dec     dword [ebp+.var_28]
  183.         jns     .loc_100B0
  184.         mov     eax, [ebp+.arg_0]
  185. .ret:
  186.         pop     edi
  187.         pop     esi
  188.         pop     ebx
  189.         mov     esp, ebp
  190.         pop     ebp
  191.         ret
  192. enddef
  193.  
  194. define @_vector_delete_ldtc_$qpvuiuiuit1
  195. .arg_0 = 8
  196. .arg_4 = 0Ch
  197. .arg_8 = 10h
  198. .arg_C = 14h
  199. .arg_10 = 18h
  200.         push    ebp
  201.         mov     ebp, esp
  202.         push    ebx
  203.         push    esi
  204.         push    edi
  205.         mov     edi, [ebp+.arg_C]
  206.         mov     esi, edi
  207.         and     esi, 10h
  208.         and     edi, 8
  209.         cmp     dword [ebp+.arg_0], 0
  210.         jz      .ret
  211.         test    esi, esi
  212.         jz      @f
  213.         mov     ecx, [ebp+.arg_0]
  214.         mov     eax, [ecx-4]
  215.         mov     [ebp+.arg_8], eax
  216. @@:
  217.         mov     ebx, [ebp+.arg_8]
  218.         dec     ebx
  219.         imul    ebx, [ebp+.arg_4]
  220.         add     ebx, [ebp+.arg_0]
  221.         jmp     .loc_100D3
  222. .loc_1008B:
  223.         mov     eax, [ebp+.arg_C]
  224.         and     eax, 7
  225.         dec     eax
  226.         jz      .loc_1009E
  227.         dec     eax
  228.         jz      .loc_100A9
  229.         dec     eax
  230.         jz      .loc_100B1
  231.         dec     eax
  232.         dec     eax
  233.         jz      .loc_100BD
  234.         jmp     $
  235. .loc_1009E:
  236.         push    2
  237.         push    ebx
  238.         call    dword [ebp+.arg_10]
  239.         add     esp, 8
  240.         jmp     .loc_100D0
  241. .loc_100A9:
  242.         push    2
  243.         push    ebx
  244.         call    dword [ebp+.arg_10]
  245.         jmp     .loc_100D0
  246. .loc_100B1:
  247.         mov     edx, 2
  248.         mov     eax, ebx
  249.         call    dword [ebp+.arg_10]
  250.         jmp     .loc_100D0
  251. .loc_100BD:
  252.         push    2
  253.         push    ebx
  254.         call    dword [ebp+.arg_10]
  255. .loc_100D0:
  256.         sub     ebx, [ebp+.arg_4]
  257. .loc_100D3:
  258.         dec     dword [ebp+.arg_8]
  259.         jns     .loc_1008B
  260.         test    esi, esi
  261.         jz      @f
  262.         sub     dword [ebp+.arg_0], 4
  263. @@:
  264.         test    edi, edi
  265.         jz      @f
  266.         push    dword [ebp+.arg_0]
  267.         call    @$bdla$qpv
  268.         pop     ecx
  269.         jmp     .ret
  270. @@:
  271.         mov     eax, [ebp+.arg_0]
  272.         jmp     .reteax
  273. .ret:
  274.         xor     eax, eax
  275. .reteax:
  276.         pop     edi
  277.         pop     esi
  278.         pop     ebx
  279.         mov     esp, ebp
  280.         pop     ebp
  281.         ret
  282. enddef
  283.  
  284. ;/**/
  285.