masterfix OOO330: #i10000# BrOffice removed
[LibreOffice.git] / soltools / cpp / cpp.h
blob34e18579c35a58dbb19b4d98a148dfeff8e927f1
1 /* $Id: cpp.h,v 1.4 2006-06-20 05:07:28 hr Exp $ */
3 #define INS 32768 /* input buffer */
4 #define OBS 8092 /* outbut buffer */
5 #define NARG 32 /* Max number arguments to a macro */
6 #define NINCLUDE 48 /* Max number of include directories (-I) */
7 #define NIF 64 /* depth of nesting of #if */
8 #define NINC 32 /* depth of nesting of #include */
10 #ifndef EOF
11 #define EOF (-1)
12 #endif
14 #ifndef NULL
15 #define NULL 0
16 #endif
18 typedef unsigned char uchar;
20 enum toktype
22 END, UNCLASS, NAME, NUMBER, STRING, CCON, NL, WS, DSHARP,
23 EQ, NEQ, LEQ, GEQ, LSH, RSH, LAND, LOR, PPLUS, MMINUS,
24 ARROW, SBRA, SKET, LP, RP, DOT, AND, STAR, PLUS, MINUS,
25 TILDE, NOT, SLASH, PCT, LT, GT, CIRC, OR, QUEST,
26 COLON, ASGN, COMMA, SHARP, SEMIC, CBRA, CKET,
27 ASPLUS, ASMINUS, ASSTAR, ASSLASH, ASPCT, ASCIRC, ASLSH,
28 ASRSH, ASOR, ASAND, ELLIPS,
29 DSHARP1, NAME1, NAME2, DEFINED, UMINUS, ARCHITECTURE, IDENT,
30 COMMENT
33 enum kwtype
35 KIF, KIFDEF, KIFNDEF, KELIF, KELSE, KENDIF, KINCLUDE, KINCLUDENEXT,
36 KIMPORT, KDEFINE, KUNDEF, KLINE, KERROR, KPRAGMA, KIDENT, KDEFINED,
37 KMACHINE, KLINENO, KFILE, KDATE, KTIME, KSTDC, KEVAL
40 #define ISDEFINED 0x01 /* has #defined value */
41 #define ISKW 0x02 /* is PP keyword */
42 #define ISUNCHANGE 0x04 /* can't be #defined in PP */
43 #define ISMAC 0x08 /* builtin macro, e.g. __LINE__ */
44 #define ISARCHITECTURE 0x10 /* architecture */
45 #define ISACTIVE 0x80 /* is macro currently expanded */
47 #define EOB 0xFE /* sentinel for end of input buffer */
48 #define EOFC 0xFD /* sentinel for end of input file */
49 #define XPWS 1 /* token flag: white space to assure token sep. */
50 #define XTWS 2
52 typedef struct token
54 unsigned char type;
55 unsigned char flag;
56 unsigned int wslen;
57 unsigned int len;
58 uchar *t;
59 unsigned int identifier; /* used from macro processor to identify where a macro becomes valid again. */
60 } Token;
62 typedef struct tokenrow
64 Token *tp; /* current one to scan */
65 Token *bp; /* base (allocated value) */
66 Token *lp; /* last+1 token used */
67 int max; /* number allocated */
68 } Tokenrow;
70 typedef struct source
72 char *filename; /* name of file of the source */
73 int line; /* current line number */
74 int lineinc; /* adjustment for \\n lines */
75 uchar *inb; /* input buffer */
76 uchar *inp; /* input pointer */
77 uchar *inl; /* end of input */
78 int fd; /* input source */
79 int ifdepth; /* conditional nesting in include */
80 int pathdepth;
81 int wrap;
82 struct source *next; /* stack for #include */
83 } Source;
85 typedef struct nlist
87 struct nlist *next;
88 uchar *name;
89 int len;
90 Tokenrow *vp; /* value as macro */
91 Tokenrow *ap; /* list of argument names, if any */
92 char val; /* value as preprocessor name */
93 char flag; /* is defined, is pp name */
94 uchar *loc; /* location of definition */
95 } Nlist;
97 typedef struct includelist
99 char deleted;
100 char always;
101 char *file;
102 } Includelist;
104 typedef struct wraplist
106 char *file;
107 } Wraplist;
109 #define new(t) (t *)domalloc(sizeof(t))
110 #define quicklook(a,b) (namebit[(a)&077] & (1<<((b)&037)))
111 #define quickset(a,b) namebit[(a)&077] |= (1<<((b)&037))
112 extern unsigned long namebit[077 + 1];
114 enum errtype
116 INFO, WARNING, ERROR, FATAL
120 typedef struct macroValidator
122 Nlist * pMacro;
123 unsigned int nTokenWhereMacroBecomesValid;
124 struct macroValidator *
125 pNext;
126 } MacroValidator;
127 typedef struct mvl
129 MacroValidator * pFirst;
130 unsigned int nextFreeIdentifier;
131 } MacroValidatorList;
133 void mvl_init(
134 MacroValidatorList *
135 out_pValidators);
136 void mvl_destruct(
137 MacroValidatorList *
138 out_pValidators);
139 /* Adds MacroValidator to the list.
141 void mvl_add(
142 MacroValidatorList *
143 inout_pValidators,
144 Nlist * in_pMacro,
145 Token * in_pTokenWhereMacroBecomesValid);
146 /* Updates all token pointers within the list, when the tokens have
147 moved, by
148 pTokenWhereMacroBecomesValid += in_nNrofTokens;
151 void mvl_move(
152 MacroValidatorList *
153 inout_pValidators,
154 int in_nSpace); // in pointer units.
156 /* Checks if one of the validators within the list points to
157 the token in_pTokenToCheck. If so, the macro is set valid and
158 the validator is removed.
160 void mvl_check(
161 MacroValidatorList *
162 inout_pValidators,
163 Token * inout_pTokenToCheck);
165 void tokenrow_zeroTokenIdentifiers(Tokenrow* trp);
167 void expandlex(void);
168 void fixlex(void);
169 void setup(int, char **);
170 int gettokens(Tokenrow *, int);
171 int comparetokens(Tokenrow *, Tokenrow *);
172 Source *setsource(char *, int, int, char *, int);
173 void unsetsource(void);
174 void puttokens(Tokenrow *);
175 void process(Tokenrow *);
176 void *domalloc(int);
177 void dofree(void *);
178 void error(enum errtype, char *,...);
179 void flushout(void);
180 int fillbuf(Source *);
181 int trigraph(Source *);
182 int foldline(Source *);
183 Nlist *lookup(Token *, int);
184 void control(Tokenrow *);
185 void dodefine(Tokenrow *);
186 void doadefine(Tokenrow *, int);
187 void doinclude(Tokenrow *, int, int);
188 void doif(Tokenrow *, enum kwtype);
189 void expand(Tokenrow *, Nlist *, MacroValidatorList *);
190 void builtin(Tokenrow *, int);
191 int gatherargs(Tokenrow *, Tokenrow **, int *);
192 void substargs(Nlist *, Tokenrow *, Tokenrow **);
193 void expandrow(Tokenrow *, char *);
194 void maketokenrow(int, Tokenrow *);
195 Tokenrow *copytokenrow(Tokenrow *, Tokenrow *);
196 Token *growtokenrow(Tokenrow *);
197 Tokenrow *normtokenrow(Tokenrow *);
198 void adjustrow(Tokenrow *, int);
199 void movetokenrow(Tokenrow *, Tokenrow *);
200 void insertrow(Tokenrow *, int, Tokenrow *);
201 void peektokens(Tokenrow *, char *);
202 void doconcat(Tokenrow *);
203 Tokenrow *stringify(Tokenrow *);
204 int lookuparg(Nlist *, Token *);
205 long eval(Tokenrow *, int);
206 void genline(void);
207 void genimport(char *, int, char *, int);
208 void genwrap(int);
209 void setempty(Tokenrow *);
210 void makespace(Tokenrow *, Token *);
211 char *outnum(char *, int);
212 int digit(int);
213 uchar *newstring(uchar *, int, int);
215 #define rowlen(tokrow) ((tokrow)->lp - (tokrow)->bp)
217 extern char *outptr;
218 extern Token nltoken;
219 extern Source *cursource;
220 extern char *curtime;
221 extern int incdepth;
222 extern int ifdepth;
223 extern int ifsatisfied[NIF];
224 extern int Mflag;
225 extern int Iflag;
226 extern int Pflag;
227 extern int Aflag;
228 extern int Lflag;
229 extern int Xflag;
230 extern int Vflag;
231 extern int Cflag;
232 extern int Dflag;
233 extern int Cplusplus;
234 extern int skipping;
235 extern Nlist *kwdefined;
236 extern Includelist includelist[NINCLUDE];
237 extern Wraplist wraplist[NINCLUDE];
238 extern char wd[];