home *** CD-ROM | disk | FTP | other *** search
/ Groovy Bytes: Behind the Moon / groovybytes.iso / GROOVY / SND_TOOL / FUNK108A.ZIP / DOS32V30.ZIP / PAL / MALLOC / SETMEM.ASM < prev    next >
Encoding:
Assembly Source File  |  1995-05-20  |  1.9 KB  |  55 lines

  1. ;****************************************************************************
  2. ; Filename: SETMEM.ASM
  3. ;   Author: Peter Andersson
  4. ;  Version: 0.0
  5. ;  Created: 1994.12.25
  6. ;  Updated: 1995.03.12 - Updated to conform with DOS32 v3.0
  7. ;****************************************************************************
  8. ; Copyright Peter Andersson, 1994-1995.
  9. ; All rights reserved.
  10. ;****************************************************************************
  11. ; Function: PVOID @setmem(PVOID blockptr,ULONG blocksize);
  12. ;    Input: Eax, blockptr - memory block pointer
  13. ;           Edx, blocksize - memory block size
  14. ;   Output: pointer to the first available block or NULL if the block size is
  15. ;           too small.
  16. ;  Comment: Sets the current work memory block. It returns a pointer
  17. ;           to the first available block if the block is large enough (see
  18. ;           PALaddalloc for more information). The pointer is of no real use
  19. ;           but indicates that the memory block has been added to the heap.
  20. ;****************************************************************************
  21.  
  22.     Include    STDDEF.INC
  23.     Include    "MEMORY.INC"
  24.  
  25.     Codeseg
  26.  
  27. Proc    setmem  ,2
  28.         Cmp    Edx,2*Size AllocBlock+Size FreeBlock+MEMALIGN
  29.         Jb    @@Exit02            ; Minimum block size
  30.         Mov    [Eax+AllocBlock.BlockSize],Size AllocBlock
  31.         Mov    [Eax+AllocBlock.PrevBlock],0
  32.         Mov    [Eax+AllocBlock.Ident],ALLOCID
  33.         Lea    Ecx,[Eax+Edx-Size AllocBlock]
  34.         Sub    Edx,2*Size AllocBlock
  35.         Mov    [Eax+Size AllocBlock+FreeBlock.PrevBlock],Eax
  36.         Add    Eax,Size AllocBlock
  37.         Mov    [Ecx+AllocBlock.BlockSize],0
  38.         Mov    [Ecx+AllocBlock.Ident],ALLOCID
  39.         Mov    [Ecx+AllocBlock.PrevBlock],Eax
  40.         Mov    [Eax+FreeBlock.BlockSize],Edx
  41.         GetSize    Ecx,Edx
  42.         Mov    Edx,[Ecx]
  43.         Mov    [Ecx],Eax
  44.         Mov    [Eax+FreeBlock.PrevFree],Ecx
  45.         Mov    [Eax+FreeBlock.NextFree],Edx
  46.         Mov    [Edx+FreeBlock.PrevFree],Eax
  47.         Ret
  48.     Align    4
  49. @@Exit02:    Clear    Eax
  50. @@Exit01:    Ret
  51. Endp
  52.  
  53.     End
  54.  
  55.