38extern int match(
char *str,
char **list);
45 struct inclist *file_red,
char *include,
46 boolean dot,
boolean failOK);
69 debug(0, (
"%s, line %d: #%s\n",
89 warning(
"%s, line %d: unknown directive == \"%s\"\n",
112 char *directive, savechar;
118 directive =
line + 1;
119 while (*directive ==
' ' || *directive ==
'\t')
123 while (*p >=
'a' && *p <=
'z')
136 if (
ret ==
ELIF && !parse_it) {
137 while (*p ==
' ' || *p ==
'\t')
142 debug(0, (
"%s, line %d: #elif %s ",
146 debug(0, (
"false...\n"));
152 debug(0, (
"true...\n"));
157 if (
ret < 0 || ! parse_it)
163 while (*p ==
' ' || *p ==
'\t')
171 debug(0, (
"%s, line %d: %s #if %s\n",
176 debug(0, (
"%s, line %d: #%s %s\n",
182 while (isalnum((
int)*p) || *p ==
'_')
187 debug(2, (
"%s, line %d: #include %s\n",
195 debug(3, (
"%s : #includes SYMBOL %s = %s\n",
208 while (*p && *p !=
'"' && *p !=
'<')
214 while (*p && *p !=
'"')
217 while (*p && *p !=
'>')
236 debug(0, (
"%s, line %d: #%s\n",
249 register struct symtab **val;
256 debug(1, (
"%s defined in %s as %s\n",
257 symbol,
file->i_file, (*val)->s_value));
260 for (ip =
file->i_list, i = 0; i < file->i_listlen; i++, ip++)
262 val =
fdefined(symbol, *ip, srcfile);
267 if (val !=
NULL)
break;
269 }
else if (val !=
NULL && srcfile !=
NULL) *srcfile =
file;
277 register struct symtab **val;
280 debug(1, (
"%s defined on command line\n", symbol));
286 debug(1, (
"%s not defined in %s\n", symbol,
file->i_file));
303 int first, last, below;
318 fatalerr(
"malloc()/realloc() failure in insert_defn()\n");
321 last =
file->i_ndefs - 1;
322 while (last >=
first) {
326 register int middle = (
first + last) / 2;
330 s2 =
file->i_defs[middle]->s_name;
331 while (*
s1++ == *
s2++)
332 if (
s2[-1] ==
'\0')
break;
335 if (*--
s1 == *--
s2) {
336 sp =
file->i_defs + middle;
347 below = last = middle - 1;
354 free((*sp)->s_value);
355 (*sp)->s_value =
copy(val);
359 sp =
file->i_defs +
file->i_ndefs++;
360 dest =
file->i_defs + below + 1;
367 fatalerr(
"malloc()/realloc() failure in insert_defn()\n");
380 while (isalnum((
int)*val) || *val ==
'_')
384 while (*val ==
' ' || *val ==
'\t')
394 register int first = 0;
395 register int last =
file->i_ndefs - 1;
397 while (last >=
first) {
401 register int middle = (
first + last) / 2;
405 s2 =
file->i_defs[middle]->s_name;
406 while (*
s1++ == *
s2++)
407 if (
s2[-1] ==
'\0')
break;
410 if (*--
s1 == *--
s2) {
411 return file->i_defs + middle;
428 if ((file1 !=
NULL) && (file2 !=
NULL)) {
430 int last1 = file1->
i_ndefs - 1;
433 int last2 = file2->
i_ndefs - 1;
444 if (i_defs ==
NULL)
return 0;
446 while ((last1 >= first1) && (last2 >= first2)) {
450 if (strcmp(
s1,
s2) < 0)
452 else if (strcmp(
s1,
s2) > 0)
459 while (last1 >= first1) {
462 while (last2 >= first2) {
477 register struct symtab **ptr;
488 register struct symtab **ptr;
490 for (ptr =
file->i_defs; ptr < file->i_defs +
file->i_ndefs; ptr++)
508 file_red, recursion + 1, failOK);
525 file_red, recursion + 1, recfailOK);
538 "line %d: %s !def'd in %s via %s%s\n" :
"",
542 file_red, recursion + 1, failOK);
549 "line %d: %s !def'd in %s via %s%s\n" :
"",
555 file_red, recursion + 1, failOK);
556 else if (type ==
ELIF)
578 warning(
"%s, line %d: incomplete undef == \"%s\"\n",
603 if (file_red !=
file)
605 warning1(
", line %d: unknown directive == \"%s\"\n",
610 if (file_red !=
file)
612 warning1(
", line %d: incomplete include == \"%s\"\n",
#define debug(level, arg)
void warning1(char *,...)
char * rgetline(struct filepointer *)
void fatalerr(char *,...)
void add_include(struct filepointer *filep, struct inclist *file, struct inclist *file_red, char *include, boolean dot, boolean failOK)
struct symtab ** isdefined(register char *symbol, struct inclist *file, struct inclist **srcfile)
int deftype(char *line, struct filepointer *filep, struct inclist *file_red, struct inclist *file, int parse_it)
int cppsetup(char *line, struct filepointer *filep, struct inclist *inc)
int match(char *str, char **list)
void define(char *def, struct inclist *file)
int gobble(register struct filepointer *filep, struct inclist *file, struct inclist *file_red)
int merge2defines(struct inclist *file1, struct inclist *file2)
int zero_value(char *exp, struct filepointer *filep, struct inclist *file_red)
void define2(char *name, char *val, struct inclist *file)
void undefine(char *symbol, register struct inclist *file)
static void inplace_strcpy(char *to, const char *from)
struct symtab ** fdefined(register char *symbol, struct inclist *file, struct inclist **srcfile)
void undefine_all(register struct inclist *file)
int find_includes(struct filepointer *filep, struct inclist *file, struct inclist *file_red, int recursion, boolean failOK)
struct symtab ** slookup(register char *symbol, register struct inclist *file)
struct inclist maininclist