home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d5xx / d541 / gifmachine.lha / GIFMachine / Sources / mymem.c < prev    next >
C/C++ Source or Header  |  1991-09-17  |  1KB  |  63 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.  
  10. #include <clib/alib_protos.h>
  11.  
  12. #include <clib/exec_protos.h>
  13. #include <pragmas/exec_lib.h>
  14.  
  15. struct MyMem {
  16.     struct MinNode mm_Node;
  17.     ULONG mm_Size;
  18. };
  19.  
  20. struct MinList Mem[2];
  21. UWORD CurrentMem;
  22.  
  23. void InitMemory(void)
  24. {
  25.     NewList((struct List *)&Mem[0]);
  26.     NewList((struct List *)&Mem[1]);
  27.     CurrentMem = 0;
  28. }
  29.  
  30. char *MyAlloc(ULONG size)
  31. {
  32.     register struct MyMem *theMemory;
  33.     register ULONG newsize;
  34.  
  35.     newsize = size + sizeof(struct MyMem);
  36.  
  37.     if (!(theMemory = (struct MyMem *)AllocMem(newsize, MEMF_PUBLIC|MEMF_CLEAR)))
  38.         return NULL;
  39.  
  40.     AddTail((struct List *)&Mem[CurrentMem], (struct Node *)&theMemory->mm_Node);
  41.     theMemory->mm_Size = newsize;
  42.  
  43.     return (char *)theMemory + sizeof(struct MyMem);
  44. }
  45.  
  46. void MyFree(char *MemPtr)
  47. {
  48.     register struct MyMem *theMemory;
  49.  
  50.     theMemory = (struct MyMem *)(MemPtr - sizeof(struct MyMem));
  51.  
  52.     Remove((struct Node *)&theMemory->mm_Node);
  53.     FreeMem((char *)theMemory, theMemory->mm_Size);
  54. }
  55.  
  56. void FreeAll(UWORD memlist)
  57. {
  58.     register struct MyMem *theMemory;
  59.  
  60.     while (theMemory = (struct MyMem *)RemTail((struct List *)&Mem[memlist]))
  61.         FreeMem((char *)theMemory, theMemory->mm_Size);
  62. }
  63.