
struct { 
/***/	short word; 
};

struct {		/*"put stack", currently gathering args*/
/***/	short prev;	/*previous frame ptr, self-relative*/
/***/	short pan;	/*argument number of arg being collected*/
/***/	short pa0;	/*self-relative ptr oo arg0*/
#define pend 6
};

struct {		/*"get stack", currently expanding macros*/
/***/	short prev;	/* prev frame ptr, self-realtive*/
/***/	short mframe;	/* ptr to macro definition frame*/
/***/	short mchar;	/* next char relative to def. frame*/
/***/	short marg;	/* 0 or ptr to next arg char reltive to gf*/
/***/	short ga0;	/* arg0 ptr self-rel*/
};

struct {		/*"definition stack"*/
/***/	short prev;	/* prev frame ptr, self-relative*/
/***/	short dswitch;	/* builtin func code, neg for dead definition*/
/***/	short dtext;	/* definition text prt rel to df*/
/***/	short dident;	/* first char of identifier naming def*/
#define dend 6
};

char metas[];
#define lquote metas[0]
#define rquote metas[1]
#define sharp metas[2]
#define colon metas[3]
#define semi metas[4]
#define comma metas[5]
#define dollar metas[6]
#define NMETA 7

char one[];
int rescan;
int traceflag;
int trashflag;		/* nonzero when dead def'n exist*/

int lp;			/* arg collection level (out level)*/
int lg;			/*input level (get level) */
int lq;		/*quote level*/
int l9;			/*apparent call level within arg 9*/

char c;			/*current input character*/

char *pf;		/*put stack frame ptr*/
char *pe;		/*put stack end*/
char *pmax;		/*top of put stack*/
char p0[];		/*put stack*/

char *gf;		/*get stack frame ptr*/
char *ge;		/*get stack end*/
char *gmax;		/*get stack limit*/
char g0[];		/*get stack*/

char *df;		/*definition stack frame ptr*/
char *de;		/*def stack end*/
char *dmax;		/*def stack limit*/
char d0[];		/*def stack*/

char dummy[];		/*dummy empty macro*/

/***/ char *lookup(), *move(), *arg();
