/*********************************************************************** * * * This software is part of the ast package * * Copyright (c) 1986-2008 AT&T Intellectual Property * * and is licensed under the * * Common Public License, Version 1.0 * * by AT&T Intellectual Property * * * * A copy of the License is available at * * http://www.opensource.org/licenses/cpl1.0.txt * * (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) * * * * Information and Software Systems Research * * AT&T Research * * Florham Park NJ * * * * Glenn Fowler * * * ***********************************************************************/ #pragma prototyped /* * Glenn Fowler * AT&T Research * * preprocessor data * * intended to be a conforming implementation of the translation phases * (2.1.1.2) 1,2,3,4 and 6 of the "American National Standard for * Information Systems -- Programming Language -- C", ANSI X3.159-1989. * * STANDARD INTERPRETATION: * * include files are forced to preserve #if nesting levels * support for this is found in the recursive description for * include file processing in the translation phases * * ID"..." produces two tokens: {ID}{"..."} * ID'...' produces two tokens: {ID}{'...'} * * COMPATIBILITY: * * only sane Reiser compatibility is implemented * * strange handling of `\newline', especially in directives, * is not implemented * * dissappearing comments used as concatenation operators work * only within macro bodies */ static const char id[] = "\n@(#)$Id: libpp (AT&T Research) 2007-06-12 $\0\n"; #include "pplib.h" #ifndef IDNAME #define IDNAME "pp" #endif static char addbuf[MAXTOKEN+1]; /* ADD buffer */ static char argsbuf[MAXTOKEN+1]; /* predicate args */ static char catbuf[MAXTOKEN+1]; /* catenation buffer */ static char hidebuf[MAXTOKEN+1]; /* pp:hide buffer */ static char outbuf[2*(PPBUFSIZ+MAXTOKEN)];/* output buffer */ static char pathbuf[MAXTOKEN+1]; /* full path of last #include */ static char tmpbuf[MAXTOKEN+1]; /* very temporary buffer */ static char tokbuf[2*MAXTOKEN+1]; /* token buffer */ static char valbuf[MAXTOKEN+1]; /* builtin macro value buffer */ static char optflags[X_last_option+1];/* OPT_* flags indexed by X_* */ static char null[1]; static struct ppinstk instack = /* input stream stack */ { &null[0] /* nextchr */ }; static struct ppdirs stddir = /* standard include directory */ { PPSTANDARD, 0, 1, INC_STANDARD, TYPE_INCLUDE|TYPE_DIRECTORY|TYPE_HOSTED }; static struct ppdirs firstdir = /* first include directory */ { "", &stddir, 0, INC_PREFIX, TYPE_INCLUDE|TYPE_DIRECTORY }; struct ppglobals pp = { /* public globals */ &id[10], /* version */ "", /* lineid */ "/dev/stdout", /* outfile */ IDNAME, /* pass */ &tokbuf[0], /* token */ 0, /* symbol */ /* exposed for the output macros */ &outbuf[0], /* outb */ &outbuf[0], /* outbuf */ &outbuf[0], /* outp */ &outbuf[PPBUFSIZ], /* oute */ 0, /* offset */ /* public context */ &firstdir, /* lcldirs */ &firstdir, /* stddirs */ 0, /* flags */ 0, /* symtab */ /* private context */ 0, /* context */ 0, /* state */ ALLMULTIPLE|CATLITERAL, /* mode */ PREFIX, /* option */ 0, /* test */ 0, /* filedeps.sp */ 0, /* filedeps.flags */ &firstdir, /* firstdir */ &firstdir, /* lastdir */ 0, /* hide */ 0, /* column */ -1, /* pending */ 0, /* firstfile */ 0, /* lastfile */ 0, /* ignore */ 0, /* probe */ 0, /* filtab */ 0, /* prdtab */ 0, /* date */ 0, /* time */ 0, /* maps */ 0, /* ro_state */ 0, /* ro_mode */ 0, /* ro_option */ {0}, /* cdir */ {0}, /* hostdir */ 0, /* ppdefault */ 0, /* firstindex */ 0, /* lastindex */ 0, /* firstop */ 0, /* lastop */ 0, /* firsttx */ 0, /* lasttx */ 0, /* arg_file */ 0, /* arg_mode */ 0, /* arg_style */ 0, /* c */ 0, /* hosted */ 0, /* ignoresrc */ 0, /* initialized */ 0, /* standalone */ 0, /* spare_1 */ /* library private globals */ "\"08/11/94\"", /* checkpoint (with quotes!) */ 128, /* constack */ &instack, /* in */ &addbuf[0], /* addp */ &argsbuf[0], /* args */ &addbuf[0], /* addbuf */ &catbuf[0], /* catbuf */ 0, /* hdrbuf */ &hidebuf[0], /* hidebuf */ &pathbuf[0], /* path */ &tmpbuf[0], /* tmpbuf */ &valbuf[0], /* valbuf */ &optflags[0], /* optflags */ '\n', /* lastout */ /* the rest are implicitly initialized */ }; char ppctype[UCHAR_MAX];