4.3BSD/usr/contrib/icon/h/gc.h

Compare this file to the similar file:
Show the results in this format:

/*
 * Definitions and declarations used for storage management.
 */

#define MARK		0100000		/* high-order bit for gc marking */
#define SQLINC		    128		/* increment for s. q. list space */

/*
 * External definitions.
 */

extern unsigned heapneed;		/* stated need for heap space */
extern unsigned strneed;		/* stated need for string space */
extern int *boundary;			/* Icon/C stack boundary address */
extern struct descrip *globals;		/* start of global variables */
extern struct descrip *eglobals;	/* end of global variables */
extern struct descrip *gnames;		/* start of global variable names */
extern struct descrip *egnames;		/* end of global variable names */
extern struct descrip *statics;		/* start of static variables */
extern struct descrip *estatics;	/* end of static variables */
extern struct descrip tended[];		/* tended descriptors, used by lib routines */
extern struct descrip etended[];	/* end of tended descriptors */
extern struct descrip **sqlist;		/* beginning of string qualifier list */
extern struct descrip **sqfree;		/* string qualifier list free pointer */
extern struct descrip **esqlist;  	/* end of string qualifier list */

/*
 * Test if *x is a pointer.
 */
#define isptr(x)     ((!QUAL(*x)) && (VAR(*x) || POINTER(*x))) 
/*
 * Get type of block pointed at by x.
 */
#define blktype(x)   (*(int *)x) 
/*
 * getsize(x) takes the block pointed to by x and if the size of
 *  the block as indicated by bsizes[] is non-zero it returns the
 *  indicated size, otherwise it returns the second word in the
 *  block which should be the size.
 */
#define getsize(x) (bsizes[*(int *)x & ~MARK] ? \
		     bsizes[*(int *)x & ~MARK] : *((int *)x + 1))