home *** CD-ROM | disk | FTP | other *** search
/ Fish 'n' More 2 / fishmore-publicdomainlibraryvol.ii1991xetec.iso / disks / disk405.lzh / GIFMachine / Sources / mymem.c < prev    next >
C/C++ Source or Header  |  1990-11-17  |  1KB  |  59 lines

  1. /* Copyright 1990 by Christopher A. Wichura.
  2.    See file GIFMachine.doc for full description of rights.
  3. */
  4.  
  5. #include <exec/types.h>
  6. #include <exec/lists.h>
  7. #include <exec/nodes.h>
  8. #include <exec/memory.h>
  9. #include <proto/exec.h>
  10.  
  11. struct MyMem {
  12.     struct MinNode mm_Node;
  13.     ULONG mm_Size;
  14. };
  15.  
  16. struct MinList Mem[2];
  17. UWORD CurrentMem;
  18.  
  19. void InitMemory(void)
  20. {
  21.     NewList((struct List *)&Mem[0]);
  22.     NewList((struct List *)&Mem[1]);
  23.     CurrentMem = 0;
  24. }
  25.  
  26. char *MyAlloc(ULONG size)
  27. {
  28.     register struct MyMem *theMemory;
  29.     register ULONG newsize;
  30.  
  31.     newsize = size + sizeof(struct MyMem);
  32.  
  33.     if (!(theMemory = (struct MyMem *)AllocMem(newsize, MEMF_PUBLIC|MEMF_CLEAR)))
  34.         return NULL;
  35.  
  36.     AddTail((struct List *)&Mem[CurrentMem], (struct Node *)&theMemory->mm_Node);
  37.     theMemory->mm_Size = newsize;
  38.  
  39.     return (char *)theMemory + sizeof(struct MyMem);
  40. }
  41.  
  42. void MyFree(char *MemPtr)
  43. {
  44.     register struct MyMem *theMemory;
  45.  
  46.     theMemory = (struct MyMem *)(MemPtr - sizeof(struct MyMem));
  47.  
  48.     Remove((struct Node *)&theMemory->mm_Node);
  49.     FreeMem((char *)theMemory, theMemory->mm_Size);
  50. }
  51.  
  52. void FreeAll(UWORD memlist)
  53. {
  54.     register struct MyMem *theMemory;
  55.  
  56.     while (theMemory = (struct MyMem *)RemTail((struct List *)&Mem[memlist]))
  57.         FreeMem((char *)theMemory, theMemory->mm_Size);
  58. }
  59.