/******************************************************************************* * Copyright 1991-1996 by ORCA Software, Inc. * * * * All rights reserved. May not be reproduced or distributed, in printed or * * electronic form, without permission of ORCA Software, Inc. May not be * * distributed as object code, separately or linked with other object modules, * * without permission. * *******************************************************************************/ /****************************************************************** 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))