49 lines
1.6 KiB
C
49 lines
1.6 KiB
C
|
/*******************************************************************************
|
||
|
* Copyright 1991-1995 by ORCA Software, Inc. *
|
||
|
* *
|
||
|
* All rights reserved. May not be reproduced or distributed, in printed or *
|
||
|
* electronic form, without permission of ORCA Software, Inc. *
|
||
|
*******************************************************************************/
|
||
|
|
||
|
/******************************************************************
|
||
|
Heap module
|
||
|
******************************************************************/
|
||
|
void *heap_malloc(size_t size);
|
||
|
void heap_free(void *p);
|
||
|
void *heap_realloc(void *p, size_t size);
|
||
|
void heap_dbg(char *title);
|
||
|
#define MAX_NODE_SIZE 16000
|
||
|
#define HEAP_SIZE 32000
|
||
|
|
||
|
#define NODE_SET_MAGIC(node) (node->size = 0xFFFF)
|
||
|
#define NODE_IS_MAGIC(node) (node->size == 0xFFFF)
|
||
|
|
||
|
#define NODE_MARK_ALLOCATED(node) (node->size |= 0x8000)
|
||
|
#define NODE_MARK_FREE(node) (node->size &= 0x7FFF)
|
||
|
#define NODE_IS_FREE(node) ( (node->size & 0x8000) == 0 )
|
||
|
|
||
|
#define NODE_SET_SIZE(node, n) (node->size = (node->size & 0x8000) | (n))
|
||
|
#define NODE_GET_SIZE(node) (node->size & 0x7FFF)
|
||
|
|
||
|
#define PTR_IS_GLOBAL(p) ((PTR_LONG(p) & 0xFFFF) == 0)
|
||
|
#define NEXT_NODE(node) ( (NODE *)((char *)node + sizeof(NODE) + NODE_GET_SIZE(node)))
|
||
|
|
||
|
#define PTR_TO_NODE(p) ((NODE *)(p) - 1)
|
||
|
#define NODE_TO_PTR(node) ((char *)(node + 1))
|
||
|
|
||
|
typedef struct _s_node
|
||
|
{
|
||
|
unsigned short size;
|
||
|
} NODE;
|
||
|
|
||
|
typedef struct _s_enode
|
||
|
{
|
||
|
unsigned short size; /* equal to NODE_MAGIC */
|
||
|
struct _s_node *next; /* pointer to next heap */
|
||
|
} E_NODE;
|
||
|
|
||
|
#define ALIGNMENT (sizeof(NODE))
|
||
|
|
||
|
|
||
|
|