home *** CD-ROM | disk | FTP | other *** search
/ Otherware / Otherware_1_SB_Development.iso / amiga / misc / icalc.lzh / icalc / src / memory.c < prev    next >
C/C++ Source or Header  |  1991-09-29  |  1KB  |  77 lines

  1. /*
  2. *    icalc - complex-expression parser
  3. *
  4. *    Memory routines to ease garbage collection when errors occur
  5. *    with parsing.
  6. *
  7. *    (C) Martin W Scott, 1991.
  8. */
  9.  
  10. #include <stdlib.h>
  11. #include "memory.h"
  12.  
  13.  
  14. static RemKey **gkey;
  15.  
  16. void *emalloc(n)        /* check return from malloc() */
  17.     unsigned n;
  18. {
  19.     extern void execerror(char *, char *);
  20.     char *p;
  21.  
  22.     if ((p = malloc(n)) == NULL)
  23.         execerror("out of memory", NULL);
  24.  
  25.     return p;
  26. }
  27.  
  28. RemKey **rem_setkey(k)        /* set key to be used for malloc's */
  29.     RemKey **k;
  30. {
  31.     RemKey **oldkey = gkey;
  32.     gkey = k;
  33.     return oldkey;
  34. }
  35.  
  36. void *rem_malloc(size)        /* allocate memory, tag to list */ 
  37.     unsigned int size;
  38. {
  39.     RemKey *k;
  40.  
  41.     k = emalloc(sizeof(RemKey));
  42.     k->ptr = emalloc(size);
  43.     k->next = *gkey;
  44.     *gkey = k;
  45.  
  46.     return k->ptr;
  47. }
  48.  
  49. void rem_freeall()        /* free all memory associated with a key */
  50. {
  51.     RemKey *k;
  52.  
  53.     while (*gkey)
  54.     {
  55.         k = (*gkey)->next;
  56.         free((*gkey)->ptr);
  57.         free(*gkey);
  58.         *gkey = k;
  59.     }
  60. }
  61.  
  62.  
  63. /* just free 'remember' info */
  64. /* not being used in current implementation */
  65. /********
  66. void rem_freelinks()    
  67. {
  68.     RemKey *k;
  69.  
  70.     while (*gkey)
  71.     {
  72.         k = (*gkey)->next;
  73.         free(*gkey);
  74.         *gkey = k;
  75.     }
  76. }
  77. *********/