2 * Copyright (c) 1995-1997, Index Data.
3 * See the file LICENSE for details.
4 * Sebastian Hammer, Adam Dickmeiss
7 * Revision 1.3 1997-07-21 12:47:38 adam
8 * Moved definition of nmem_control and nmem_block.
10 * Revision 1.2 1995/12/13 13:44:37 quinn
11 * Modified Data1-system to use nmem
13 * Revision 1.1 1995/11/13 09:27:52 quinn
14 * Fiddling with the variant stuff.
20 * This is a simple and fairly wasteful little module for nibble memory
21 * allocation. Evemtually we'll put in something better.
27 #define NMEM_CHUNK (10*1024)
29 static nmem_block *freelist = 0; /* global freelists */
30 static nmem_control *cfreelist = 0;
32 static void free_block(nmem_block *p)
39 * acquire a block with a minimum of size free bytes.
41 static nmem_block *get_block(int size)
45 for (r = freelist, l = 0; r; l = r, r = r->next)
59 r = xmalloc(sizeof(*r));
60 r->buf = xmalloc(r->size = get);
66 void nmem_reset(NMEM n)
75 n->blocks = n->blocks->next;
81 void *nmem_malloc(NMEM n, int size)
89 if (!p || p->size - p->top < size)
97 p->top += (size + (sizeof(long) - 1)) & ~(sizeof(long) - 1);
102 int nmem_total(NMEM n)
107 NMEM nmem_create(void)
112 cfreelist = cfreelist->next;
114 r = xmalloc(sizeof(*r));
121 void nmem_destroy(NMEM n)