4.4BSD/usr/src/old/as.tahoe/asscan.h

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

/*
 *	Copyright (c) 1982 Regents of the University of California
 *	@(#)asscan.h 4.9 6/30/83
 */
/*
 *	The character scanner is called to fill up one token buffer
 *
 *	However, once the tokens are filled up by the
 *	character scanner, they are used in both the first and the second
 *	pass.  Holes created by .stab removal are replaced
 *	with 'skip' tokens that direct the second pass to ignore the
 *	following tokens.
 */

#define TOKBUFLG		4096
#define MAXTAHOE			32		
#define SAFETY			16

#define AVAILTOKS		TOKBUFLG -\
		sizeof(int) -\
		sizeof (struct tokbufdesc *) -\
		MAXTAHOE - SAFETY

struct tokbufdesc{
	int		tok_count;		/*absolute byte length*/
	struct		tokbufdesc *tok_next;
	char		toks[AVAILTOKS];
	char		bufovf[MAXTAHOE + SAFETY];
};
/*
 *	Definitions for handling tokens in the intermediate file
 *	buffers.
 *
 *	We want to have the compiler produce the efficient auto increment
 *	instruction for stepping through the buffer of tokens.  We must
 *	fool the type checker into thinking that a pointer can point
 *	to various size things.
 */

typedef int inttoktype;
/* typedef char inttoktype; */
typedef char bytetoktype;

typedef char *ptrall;			/*all uses will be type cast*/
typedef u_short lgtype;			/*for storing length of strings or skiping*/
/*
 *	defintions for putting various typed values
 *	into the intermediate buffers
 *	ptr will ALWAYS be of type ptrall
 */

#define ptype(type, ptr, val)	\
		(ptr) = (char *)((int)((ptr) + sizeof(type)-1)&~(sizeof(type)-1)), \
		*(type *)(ptr) = (val),	(ptr) += sizeof(type)

#define	pchar(ptr, val)		*(ptr)++  = (val)
#define	puchar(ptr, val)	*(ptr)++  = (val)

#define	pshort(ptr, val)	ptype (short, ptr, val)
#define	plgtype(ptr, val)	ptype (lgtype, ptr, val)
#define	pushort(ptr, val)	ptype (u_short, ptr, val)
#define	pint(ptr, val)		ptype (int, ptr, val)
#define	puint(ptr, val)		ptype (u_int, ptr, val)
#define	plong(ptr, val)		ptype (long, ptr, val)
#define	pulong(ptr, val)	ptype (u_int, ptr, val)
#define	pnumber(ptr, val)	ptype (Bignum, ptr, val)
#define	pptr(ptr, val)		ptype (int, ptr, val)
#define	popcode(ptr, val)	*(ptr)++  = (val)
#define	ptoken(ptr, val)	*(ptr)++  = (val)
#define	pskiplg(ptr, val)	ptype (lgtype, ptr, val)


#define gtype(type, ptr, val)	\
		(ptr) = (char *)((int)((ptr) + sizeof(type)-1)&~(sizeof(type)-1)), \
		(val) = *(type *)(ptr)  ,	(ptr) += sizeof(type)

#define	gchar(val, ptr)		(val) = *(ptr)++
#define	guchar(val, ptr)	(val) = *(ptr)++

#define	gshort(val, ptr)	gtype (short, ptr, val)
#define	glgtype(ptr, val)	gtype (lgtype, ptr, val)
#define	gushort(val, ptr)	gtype (u_short, ptr, val)
#define	gint(val, ptr)		gtype (int, ptr, val)
#define	guint(val, ptr)		gtype (u_int, ptr, val)
#define	glong(val, ptr)		gtype (long, ptr, val)
#define	gulong(val, ptr)	gtype (u_int, ptr, val)
#define	gnumber(val, ptr)	gtype (Bignum, ptr, val)
#define	gptr(val, ptr)		gtype (int, ptr, val)
#define	gopcode(val, ptr)	(val) = *(ptr)++
#define	gtoken(val, ptr)	(val) = *(ptr)++
#define	gskiplg(val, ptr)	gtype (lgtype, ptr, val)


extern	ptrall tokptr;	/*the next token to consume, call by copy*/
extern	ptrall tokub;	/*current upper bound in the current buffer*/