home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 23 / AACD 23.iso / AACD / Programming / tek / mem / initmemhead.c < prev    next >
Encoding:
C/C++ Source or Header  |  2001-05-12  |  940 b   |  50 lines

  1.  
  2. #include "tek/mem.h"
  3.  
  4. /* 
  5. **    TEKlib
  6. **    (C) 2001 TEK neoscientists
  7. **    all rights reserved.
  8. **
  9. **    TBOOL TInitMemHead(TMEMHEAD *mh, TAPTR mem, TUINT size, TTAGITEM *tags)
  10. **
  11. **    init static memory header.
  12. */
  13.  
  14. TBOOL TInitMemHead(TMEMHEAD *mh, TAPTR mem, TUINT size, TTAGITEM *tags)
  15. {
  16.     if (mh && mem && size)
  17.     {
  18.         TUINT align = TALIGN_DEFAULT;
  19.         TUINT memnodesize;
  20.  
  21.         size &= ~align;    
  22.         memnodesize = (sizeof(TMEMNODE) + align) & ~align;
  23.     
  24.         if (size > memnodesize)
  25.         {
  26.             TMEMNODE *p = (TMEMNODE *) mem;
  27.  
  28.             p->next = TNULL;
  29.             p->prev = TNULL;
  30.             p->size = size - memnodesize;
  31.             p->free = size - memnodesize;
  32.             
  33.             mh->mem = (TBYTE *) mem;
  34.             mh->memnodesize = memnodesize;
  35.             mh->align = align;
  36.             mh->freesize = size - memnodesize;
  37.  
  38.             /*
  39.             **    a NULL-handle is required for a MMU built on top of a memheader:
  40.             */
  41.  
  42.             mh->handle.mmu = TNULL;
  43.             mh->handle.destroyfunc = (TDESTROYFUNC) TNULL;
  44.         
  45.             return TTRUE;
  46.         }
  47.     }
  48.     return TFALSE;
  49. }
  50.