Quake-III-Arena

Quake III Arena GPL Source Release
Log | Files | Refs

cpp.h (4758B)


      1 #define	INS	32768		/* input buffer */
      2 #define	OBS	4096		/* outbut buffer */
      3 #define	NARG	32		/* Max number arguments to a macro */
      4 #define	NINCLUDE 32		/* Max number of include directories (-I) */
      5 #define	NIF	32		/* depth of nesting of #if */
      6 #ifndef EOF
      7 #define	EOF	(-1)
      8 #endif
      9 #ifndef NULL
     10 #define NULL	0
     11 #endif
     12 
     13 #ifndef __alpha
     14 typedef unsigned char uchar;
     15 #endif
     16 
     17 enum toktype { END, UNCLASS, NAME, NUMBER, STRING, CCON, NL, WS, DSHARP,
     18 		EQ, NEQ, LEQ, GEQ, LSH, RSH, LAND, LOR, PPLUS, MMINUS,
     19 		ARROW, SBRA, SKET, LP, RP, DOT, AND, STAR, PLUS, MINUS,
     20 		TILDE, NOT, SLASH, PCT, LT, GT, CIRC, OR, QUEST,
     21 		COLON, ASGN, COMMA, SHARP, SEMIC, CBRA, CKET,
     22 		ASPLUS, ASMINUS, ASSTAR, ASSLASH, ASPCT, ASCIRC, ASLSH,
     23 		ASRSH, ASOR, ASAND, ELLIPS,
     24 		DSHARP1, NAME1, DEFINED, UMINUS };
     25 
     26 enum kwtype { KIF, KIFDEF, KIFNDEF, KELIF, KELSE, KENDIF, KINCLUDE, KDEFINE,
     27 		KUNDEF, KLINE, KERROR, KPRAGMA, KDEFINED,
     28 		KLINENO, KFILE, KDATE, KTIME, KSTDC, KEVAL };
     29 
     30 #define	ISDEFINED	01	/* has #defined value */
     31 #define	ISKW		02	/* is PP keyword */
     32 #define	ISUNCHANGE	04	/* can't be #defined in PP */
     33 #define	ISMAC		010	/* builtin macro, e.g. __LINE__ */
     34 
     35 #define	EOB	0xFE		/* sentinel for end of input buffer */
     36 #define	EOFC	0xFD		/* sentinel for end of input file */
     37 #define	XPWS	1		/* token flag: white space to assure token sep. */
     38 
     39 typedef struct token {
     40 	unsigned char	type;
     41 	unsigned char 	flag;
     42 	unsigned short	hideset;
     43 	unsigned int	wslen;
     44 	unsigned int	len;
     45 	uchar	*t;
     46 } Token;
     47 
     48 typedef struct tokenrow {
     49 	Token	*tp;		/* current one to scan */
     50 	Token	*bp;		/* base (allocated value) */
     51 	Token	*lp;		/* last+1 token used */
     52 	int	max;		/* number allocated */
     53 } Tokenrow;
     54 
     55 typedef struct source {
     56 	char	*filename;	/* name of file of the source */
     57 	int	line;		/* current line number */
     58 	int	lineinc;	/* adjustment for \\n lines */
     59 	uchar	*inb;		/* input buffer */
     60 	uchar	*inp;		/* input pointer */
     61 	uchar	*inl;		/* end of input */
     62 	int	fd;		/* input source */
     63 	int	ifdepth;	/* conditional nesting in include */
     64 	struct	source *next;	/* stack for #include */
     65 } Source;
     66 
     67 typedef struct nlist {
     68 	struct nlist *next;
     69 	uchar	*name;
     70 	int	len;
     71 	Tokenrow *vp;		/* value as macro */
     72 	Tokenrow *ap;		/* list of argument names, if any */
     73 	char	val;		/* value as preprocessor name */
     74 	char	flag;		/* is defined, is pp name */
     75 } Nlist;
     76 
     77 typedef	struct	includelist {
     78 	char	deleted;
     79 	char	always;
     80 	char	*file;
     81 } Includelist;
     82 
     83 #define	new(t)	(t *)domalloc(sizeof(t))
     84 #define	quicklook(a,b)	(namebit[(a)&077] & (1<<((b)&037)))
     85 #define	quickset(a,b)	namebit[(a)&077] |= (1<<((b)&037))
     86 extern	unsigned long namebit[077+1];
     87 
     88 enum errtype { WARNING, ERROR, FATAL };
     89 
     90 void	expandlex(void);
     91 void	fixlex(void);
     92 void	setup(int, char **);
     93 int	gettokens(Tokenrow *, int);
     94 int	comparetokens(Tokenrow *, Tokenrow *);
     95 Source	*setsource(char *, int, char *);
     96 void	unsetsource(void);
     97 void	puttokens(Tokenrow *);
     98 void	process(Tokenrow *);
     99 void	*domalloc(int);
    100 void	dofree(void *);
    101 void	error(enum errtype, char *, ...);
    102 void	flushout(void);
    103 int	fillbuf(Source *);
    104 int	trigraph(Source *);
    105 int	foldline(Source *);
    106 Nlist	*lookup(Token *, int);
    107 void	control(Tokenrow *);
    108 void	dodefine(Tokenrow *);
    109 void	doadefine(Tokenrow *, int);
    110 void	doinclude(Tokenrow *);
    111 void	doif(Tokenrow *, enum kwtype);
    112 void	expand(Tokenrow *, Nlist *);
    113 void	builtin(Tokenrow *, int);
    114 int	gatherargs(Tokenrow *, Tokenrow **, int *);
    115 void	substargs(Nlist *, Tokenrow *, Tokenrow **);
    116 void	expandrow(Tokenrow *, char *);
    117 void	maketokenrow(int, Tokenrow *);
    118 Tokenrow *copytokenrow(Tokenrow *, Tokenrow *);
    119 Token	*growtokenrow(Tokenrow *);
    120 Tokenrow *normtokenrow(Tokenrow *);
    121 void	adjustrow(Tokenrow *, int);
    122 void	movetokenrow(Tokenrow *, Tokenrow *);
    123 void	insertrow(Tokenrow *, int, Tokenrow *);
    124 void	peektokens(Tokenrow *, char *);
    125 void	doconcat(Tokenrow *);
    126 Tokenrow *stringify(Tokenrow *);
    127 int	lookuparg(Nlist *, Token *);
    128 long	eval(Tokenrow *, int);
    129 void	genline(void);
    130 void	setempty(Tokenrow *);
    131 void	makespace(Tokenrow *);
    132 char	*outnum(char *, int);
    133 int	digit(int);
    134 uchar	*newstring(uchar *, int, int);
    135 int	checkhideset(int, Nlist *);
    136 void	prhideset(int);
    137 int	newhideset(int, Nlist *);
    138 int	unionhideset(int, int);
    139 void	iniths(void);
    140 void	setobjname(char *);
    141 #define	rowlen(tokrow)	((tokrow)->lp - (tokrow)->bp)
    142 
    143 extern	char *outp;
    144 extern	Token	nltoken;
    145 extern	Source *cursource;
    146 extern	char *curtime;
    147 extern	int incdepth;
    148 extern	int ifdepth;
    149 extern	int ifsatisfied[NIF];
    150 extern	int Mflag;
    151 extern	int skipping;
    152 extern	int verbose;
    153 extern	int Cplusplus;
    154 extern	Nlist *kwdefined;
    155 extern	Includelist includelist[NINCLUDE];
    156 extern	char wd[];
    157 
    158 extern int creat(char *, int);
    159 extern int open(char *, int);
    160 extern int close(int);
    161 extern int dup2(int, int);
    162 extern int write(int, char *, size_t);
    163 extern int read(int, char *, size_t);