struct { int word; }; struct { /*"put stack", currently gathering args*/ int prev; /*previous frame ptr, self-relative*/ int pan; /*argument number of arg being collected*/ int pa0; /*self-relative ptr oo arg0*/ #define pend 6 }; struct { /*"get stack", currently expanding macros*/ int prev; /* prev frame ptr, self-realtive*/ int mframe; /* ptr to macro definition frame*/ int mchar; /* next char relative to def. frame*/ int marg; /* 0 or ptr to next arg char reltive to gf*/ int ga0; /* arg0 ptr self-rel*/ }; struct { /*"definition stack"*/ int prev; /* prev frame ptr, self-relative*/ int dswitch; /* builtin func code, neg for dead definition*/ int dtext; /* definition text prt rel to df*/ int 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*/