home *** CD-ROM | disk | FTP | other *** search
/ Aminet 6 / Aminet 6 - June 1995.iso / Aminet / dev / gcc / libnixV0_8.lha / gnu / libnix-sources.lha / sources / amiga / misc / LibCreatePool.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-12-12  |  1.3 KB  |  59 lines

  1. #include "pool.h"
  2.  
  3. extern inline void NewList(struct List *list)
  4. {
  5.    LONG *p;
  6.  
  7.    list->lh_TailPred=(struct Node*)list;
  8.    ((LONG *)list)++;
  9.    *(LONG *)list=0;
  10.    p=(LONG *)list; *--p=(LONG)list;
  11. }
  12.  
  13. APTR LibCreatePool(ULONG requirements, ULONG puddleSize, ULONG threshSize)
  14. {
  15.   if (SysBase->LibNode.lib_Version>=39)
  16.     return (CreatePool(requirements,puddleSize,threshSize));
  17.   else
  18.   {
  19.     POOL *pool=NULL;
  20.  
  21.     if (puddleSize>threshSize)
  22.     {
  23.       /* make a multiple of 8 */
  24.       puddleSize=(puddleSize+7)&~7;
  25.       /* alloc pool header */
  26.       if ((pool=(POOL *)AllocMem(sizeof(POOL),MEMF_ANY))!=NULL)
  27.       {
  28.         NewList((struct List *)&pool->PuddleList);
  29.         NewList((struct List *)&pool->ThreshList);
  30.         pool->MemoryFlags=requirements;
  31.         pool->PuddleSize=puddleSize;
  32.         pool->ThreshSize=threshSize;
  33.       }
  34.     }
  35.     return pool;
  36.   }
  37. }
  38.  
  39. VOID LibDeletePool(APTR poolHeader)
  40. {
  41.   if (SysBase->LibNode.lib_Version>=39)
  42.     DeletePool(poolHeader);
  43.   else
  44.     if (poolHeader!=NULL)
  45.     {
  46.       ULONG *pool,size,i;
  47.       struct List *list;
  48.  
  49.       for(i=2,list=(struct List *)&((POOL *)poolHeader)->PuddleList;i;++list,--i)
  50.        {
  51.          while((pool=(ULONG *)RemHead(list))!=NULL)
  52.          {
  53.            size=*(--((ULONG *)pool)); FreeMem(pool,size);
  54.          }
  55.        }
  56.       FreeMem(poolHeader,sizeof(POOL));
  57.     }
  58. }
  59.