/*	$NetBSD: bounds.h,v 1.2 1994/10/26 08:46:04 cgd Exp $	*/

#if defined(CHECKBOUNDS)

#undef CHECKBOUNDS

#define CHECKBOUNDS(a, i)	\
	{\
		if((((a) + (i)) < (a)) || \
			(((a) + (i)) >= ((a) + (sizeof(a) / sizeof(*(a)))))) \
		{ \
			printf("index " #i " (%d) exceeded bounds of " #a ", '%s' line %d.\n", \
				(i), __FILE__, __LINE__); \
			printf("halting...\n"); \
			/*asm("	stop	#0x2700");*/ \
		} \
	}

#define CHECKPOINTER(a, p)	\
	{\
		if(((p) < (a)) || \
			((p) >= ((a) + (sizeof(a) / sizeof(*(a)))))) \
		{ \
			printf("pointer " #p " (0x%X) exceeded bounds of " #a " (0x%X), '%s' line %d.\n", \
				, (p), (a), (i), __FILE__, __LINE__); \
			printf("halting...\n"); \
			/*asm("	stop	#0x2700");*/ \
		} \
	}

#else /* !defined(CHECKBOUNDS) */

#define CHECKBOUNDS(a, i)
#define CHECKPOINTER(a, p)

#endif /* defined(CHECKBOUNDS) */
