#ifdef __GNUC__
# define UNUSED __attribute__((__unused__))
#else
# define UNUSED
#endif
#define MACROTYPE 1
#define DEFINETYPE 2
#define EVALTYPE 3
#define SUBSTRTYPE 4
#define IFELSETYPE 5
#define LENTYPE 6
#define CHANGEQUOTETYPE 7
#define SYSCMDTYPE 8
#define UNDEFINETYPE 9
#define INCLUDETYPE 10
#define SINCLUDETYPE 11
#define PASTETYPE 12
#define SPASTETYPE 13
#define INCRTYPE 14
#define IFDEFTYPE 15
#define PUSHDEFTYPE 16
#define POPDEFTYPE 17
#define SHIFTTYPE 18
#define DECRTYPE 19
#define DIVERTTYPE 20
#define UNDIVERTTYPE 21
#define DIVNUMTYPE 22
#define MKSTEMPTYPE 23
#define ERRPRINTTYPE 24
#define M4WRAPTYPE 25
#define TRANSLITTYPE 26
#define DNLTYPE 27
#define DUMPDEFTYPE 28
#define CHANGECOMTYPE 29
#define INDEXTYPE 30
#define SYSVALTYPE 31
#define M4EXITTYPE 32
#define DEFNTYPE 33
#define SELFTYPE 34
#define INDIRTYPE 35
#define BUILTINTYPE 36
#define PATSUBSTTYPE 37
#define FILENAMETYPE 38
#define LINETYPE 39
#define REGEXPTYPE 40
#define ESYSCMDTYPE 41
#define TRACEONTYPE 42
#define TRACEOFFTYPE 43
#define FORMATTYPE 44
#define BUILTIN_MARKER "__builtin_"
#define TYPEMASK 63
#define RECDEF 256
#define NOARGS 512
#define NEEDARGS 1024
#define ARGFLAG '$'
#define LPAREN '('
#define RPAREN ')'
#define LQUOTE '`'
#define RQUOTE '\''
#define COMMA ','
#define SCOMMT '#'
#define ECOMMT '\n'
#define EOS '\0'
#define MAXINP 10
#define MAXOUT 10
#define BUFSIZE 4096
#define INITSTACKMAX 4096
#define STRSPMAX 4096
#define MAXTOK 512
#define HASHSIZE 199
#define MAXCCHARS 5
#define ALL 1
#define TOP 0
#ifndef TRUE
#define TRUE 1
#endif
#ifndef FALSE
#define FALSE 0
#endif
#define cycle for(;;)
typedef struct ndblock *ndptr;
struct macro_definition {
struct macro_definition *next;
char *defn;
unsigned int type;
};
struct ndblock {
unsigned int builtin_type;
unsigned int trace_flags;
struct macro_definition *d;
char name[1];
};
typedef union {
int sfra;
char *sstr;
} stae;
struct input_file {
FILE *file;
char *name;
unsigned long lineno;
unsigned long synch_lineno;
int c;
};
#define STORAGE_STRSPACE 0
#define STORAGE_MACRO 1
#define STORAGE_OTHER 2
#define CURRENT_NAME (infile[ilevel].name)
#define CURRENT_LINE (infile[ilevel].lineno)
#define TOKEN_LINE(f) ((f)->lineno - ((f)->c == '\n' ? 1 : 0))
#define gpbc() (bp > bufbase) ? *--bp : obtain_char(infile+ilevel)
#define pushf(x) \
do { \
if ((size_t)++sp == STACKMAX) \
enlarge_stack();\
mstack[sp].sfra = (x); \
sstack[sp] = STORAGE_OTHER; \
} while (0)
#define pushs(x) \
do { \
if ((size_t)++sp == STACKMAX) \
enlarge_stack();\
mstack[sp].sstr = (x); \
sstack[sp] = STORAGE_STRSPACE; \
} while (0)
#define pushs1(x) \
do { \
if ((size_t)++sp == STACKMAX) \
enlarge_stack();\
mstack[sp].sstr = (x); \
sstack[sp] = STORAGE_OTHER; \
} while (0)
#define pushdef(p) \
do { \
if ((size_t)++sp == STACKMAX) \
enlarge_stack();\
mstack[sp].sstr = macro_getdef(p)->defn;\
sstack[sp] = STORAGE_MACRO; \
} while (0)
#define PARLEV (mstack[fp].sfra)
#define CALTYP (mstack[fp-2].sfra)
#define TRACESTATUS (mstack[fp-1].sfra)
#define PREVEP (mstack[fp+3].sstr)
#define PREVSP (fp-4)
#define PREVFP (mstack[fp-3].sfra)
#define VERSION 20260610