Main Page | Class Hierarchy | Alphabetical List | Data Structures | Directories | File List | Data Fields | Globals

cpp.h

Go to the documentation of this file.
00001 #define INS 32768       /* input buffer */
00002 #define OBS 4096        /* outbut buffer */
00003 #define NARG    32      /* Max number arguments to a macro */
00004 #define NINCLUDE 32     /* Max number of include directories (-I) */
00005 #define NIF 32      /* depth of nesting of #if */
00006 #ifndef EOF
00007 #define EOF (-1)
00008 #endif
00009 #ifndef NULL
00010 #define NULL    0
00011 #endif
00012 
00013 #ifndef __alpha
00014 typedef unsigned char uchar;
00015 #endif
00016 
00017 enum toktype { END, UNCLASS, NAME, NUMBER, STRING, CCON, NL, WS, DSHARP,
00018         EQ, NEQ, LEQ, GEQ, LSH, RSH, LAND, LOR, PPLUS, MMINUS,
00019         ARROW, SBRA, SKET, LP, RP, DOT, AND, STAR, PLUS, MINUS,
00020         TILDE, NOT, SLASH, PCT, LT, GT, CIRC, OR, QUEST,
00021         COLON, ASGN, COMMA, SHARP, SEMIC, CBRA, CKET,
00022         ASPLUS, ASMINUS, ASSTAR, ASSLASH, ASPCT, ASCIRC, ASLSH,
00023         ASRSH, ASOR, ASAND, ELLIPS,
00024         DSHARP1, NAME1, DEFINED, UMINUS };
00025 
00026 enum kwtype { KIF, KIFDEF, KIFNDEF, KELIF, KELSE, KENDIF, KINCLUDE, KDEFINE,
00027         KUNDEF, KLINE, KERROR, KPRAGMA, KDEFINED,
00028         KLINENO, KFILE, KDATE, KTIME, KSTDC, KEVAL };
00029 
00030 #define ISDEFINED   01  /* has #defined value */
00031 #define ISKW        02  /* is PP keyword */
00032 #define ISUNCHANGE  04  /* can't be #defined in PP */
00033 #define ISMAC       010 /* builtin macro, e.g. __LINE__ */
00034 
00035 #define EOB 0xFE        /* sentinel for end of input buffer */
00036 #define EOFC    0xFD        /* sentinel for end of input file */
00037 #define XPWS    1       /* token flag: white space to assure token sep. */
00038 
00039 typedef struct token {
00040     unsigned char   type;
00041     unsigned char   flag;
00042     unsigned short  hideset;
00043     unsigned int    wslen;
00044     unsigned int    len;
00045     uchar   *t;
00046 } Token;
00047 
00048 typedef struct tokenrow {
00049     Token   *tp;        /* current one to scan */
00050     Token   *bp;        /* base (allocated value) */
00051     Token   *lp;        /* last+1 token used */
00052     int max;        /* number allocated */
00053 } Tokenrow;
00054 
00055 typedef struct source {
00056     char    *filename;  /* name of file of the source */
00057     int line;       /* current line number */
00058     int lineinc;    /* adjustment for \\n lines */
00059     uchar   *inb;       /* input buffer */
00060     uchar   *inp;       /* input pointer */
00061     uchar   *inl;       /* end of input */
00062     int fd;     /* input source */
00063     int ifdepth;    /* conditional nesting in include */
00064     struct  source *next;   /* stack for #include */
00065 } Source;
00066 
00067 typedef struct nlist {
00068     struct nlist *next;
00069     uchar   *name;
00070     int len;
00071     Tokenrow *vp;       /* value as macro */
00072     Tokenrow *ap;       /* list of argument names, if any */
00073     char    val;        /* value as preprocessor name */
00074     char    flag;       /* is defined, is pp name */
00075 } Nlist;
00076 
00077 typedef struct  includelist {
00078     char    deleted;
00079     char    always;
00080     char    *file;
00081 } Includelist;
00082 
00083 #define new(t)  (t *)domalloc(sizeof(t))
00084 #define quicklook(a,b)  (namebit[(a)&077] & (1<<((b)&037)))
00085 #define quickset(a,b)   namebit[(a)&077] |= (1<<((b)&037))
00086 extern  unsigned long namebit[077+1];
00087 
00088 enum errtype { WARNING, ERROR, FATAL };
00089 
00090 void    expandlex(void);
00091 void    fixlex(void);
00092 void    setup(int, char **);
00093 int gettokens(Tokenrow *, int);
00094 int comparetokens(Tokenrow *, Tokenrow *);
00095 Source  *setsource(char *, int, char *);
00096 void    unsetsource(void);
00097 void    puttokens(Tokenrow *);
00098 void    process(Tokenrow *);
00099 void    *domalloc(int);
00100 void    dofree(void *);
00101 void    error(enum errtype, char *, ...);
00102 void    flushout(void);
00103 int fillbuf(Source *);
00104 int trigraph(Source *);
00105 int foldline(Source *);
00106 Nlist   *lookup(Token *, int);
00107 void    control(Tokenrow *);
00108 void    dodefine(Tokenrow *);
00109 void    doadefine(Tokenrow *, int);
00110 void    doinclude(Tokenrow *);
00111 void    doif(Tokenrow *, enum kwtype);
00112 void    expand(Tokenrow *, Nlist *);
00113 void    builtin(Tokenrow *, int);
00114 int gatherargs(Tokenrow *, Tokenrow **, int *);
00115 void    substargs(Nlist *, Tokenrow *, Tokenrow **);
00116 void    expandrow(Tokenrow *, char *);
00117 void    maketokenrow(int, Tokenrow *);
00118 Tokenrow *copytokenrow(Tokenrow *, Tokenrow *);
00119 Token   *growtokenrow(Tokenrow *);
00120 Tokenrow *normtokenrow(Tokenrow *);
00121 void    adjustrow(Tokenrow *, int);
00122 void    movetokenrow(Tokenrow *, Tokenrow *);
00123 void    insertrow(Tokenrow *, int, Tokenrow *);
00124 void    peektokens(Tokenrow *, char *);
00125 void    doconcat(Tokenrow *);
00126 Tokenrow *stringify(Tokenrow *);
00127 int lookuparg(Nlist *, Token *);
00128 long    eval(Tokenrow *, int);
00129 void    genline(void);
00130 void    setempty(Tokenrow *);
00131 void    makespace(Tokenrow *);
00132 char    *outnum(char *, int);
00133 int digit(int);
00134 uchar   *newstring(uchar *, int, int);
00135 int checkhideset(int, Nlist *);
00136 void    prhideset(int);
00137 int newhideset(int, Nlist *);
00138 int unionhideset(int, int);
00139 void    iniths(void);
00140 void    setobjname(char *);
00141 #define rowlen(tokrow)  ((tokrow)->lp - (tokrow)->bp)
00142 
00143 extern  char *outp;
00144 extern  Token   nltoken;
00145 extern  Source *cursource;
00146 extern  char *curtime;
00147 extern  int incdepth;
00148 extern  int ifdepth;
00149 extern  int ifsatisfied[NIF];
00150 extern  int Mflag;
00151 extern  int skipping;
00152 extern  int verbose;
00153 extern  int Cplusplus;
00154 extern  Nlist *kwdefined;
00155 extern  Includelist includelist[NINCLUDE];
00156 extern  char wd[];
00157 
00158 extern int creat(char *, int);
00159 extern int open(char *, int);
00160 extern int close(int);
00161 extern int dup2(int, int);
00162 extern int write(int, char *, size_t);
00163 extern int read(int, char *, size_t);

Generated on Thu Aug 25 12:38:08 2005 for Quake III Arena by  doxygen 1.3.9.1