summaryrefslogtreecommitdiff
path: root/soltools/cpp/cpp.h
diff options
context:
space:
mode:
Diffstat (limited to 'soltools/cpp/cpp.h')
-rw-r--r--soltools/cpp/cpp.h239
1 files changed, 239 insertions, 0 deletions
diff --git a/soltools/cpp/cpp.h b/soltools/cpp/cpp.h
new file mode 100644
index 000000000000..34e18579c35a
--- /dev/null
+++ b/soltools/cpp/cpp.h
@@ -0,0 +1,239 @@
+/* $Id: cpp.h,v 1.4 2006-06-20 05:07:28 hr Exp $ */
+
+#define INS 32768 /* input buffer */
+#define OBS 8092 /* outbut buffer */
+#define NARG 32 /* Max number arguments to a macro */
+#define NINCLUDE 48 /* Max number of include directories (-I) */
+#define NIF 64 /* depth of nesting of #if */
+#define NINC 32 /* depth of nesting of #include */
+
+#ifndef EOF
+#define EOF (-1)
+#endif
+
+#ifndef NULL
+#define NULL 0
+#endif
+
+typedef unsigned char uchar;
+
+enum toktype
+{
+ END, UNCLASS, NAME, NUMBER, STRING, CCON, NL, WS, DSHARP,
+ EQ, NEQ, LEQ, GEQ, LSH, RSH, LAND, LOR, PPLUS, MMINUS,
+ ARROW, SBRA, SKET, LP, RP, DOT, AND, STAR, PLUS, MINUS,
+ TILDE, NOT, SLASH, PCT, LT, GT, CIRC, OR, QUEST,
+ COLON, ASGN, COMMA, SHARP, SEMIC, CBRA, CKET,
+ ASPLUS, ASMINUS, ASSTAR, ASSLASH, ASPCT, ASCIRC, ASLSH,
+ ASRSH, ASOR, ASAND, ELLIPS,
+ DSHARP1, NAME1, NAME2, DEFINED, UMINUS, ARCHITECTURE, IDENT,
+ COMMENT
+};
+
+enum kwtype
+{
+ KIF, KIFDEF, KIFNDEF, KELIF, KELSE, KENDIF, KINCLUDE, KINCLUDENEXT,
+ KIMPORT, KDEFINE, KUNDEF, KLINE, KERROR, KPRAGMA, KIDENT, KDEFINED,
+ KMACHINE, KLINENO, KFILE, KDATE, KTIME, KSTDC, KEVAL
+};
+
+#define ISDEFINED 0x01 /* has #defined value */
+#define ISKW 0x02 /* is PP keyword */
+#define ISUNCHANGE 0x04 /* can't be #defined in PP */
+#define ISMAC 0x08 /* builtin macro, e.g. __LINE__ */
+#define ISARCHITECTURE 0x10 /* architecture */
+#define ISACTIVE 0x80 /* is macro currently expanded */
+
+#define EOB 0xFE /* sentinel for end of input buffer */
+#define EOFC 0xFD /* sentinel for end of input file */
+#define XPWS 1 /* token flag: white space to assure token sep. */
+#define XTWS 2
+
+typedef struct token
+{
+ unsigned char type;
+ unsigned char flag;
+ unsigned int wslen;
+ unsigned int len;
+ uchar *t;
+ unsigned int identifier; /* used from macro processor to identify where a macro becomes valid again. */
+} Token;
+
+typedef struct tokenrow
+{
+ Token *tp; /* current one to scan */
+ Token *bp; /* base (allocated value) */
+ Token *lp; /* last+1 token used */
+ int max; /* number allocated */
+} Tokenrow;
+
+typedef struct source
+{
+ char *filename; /* name of file of the source */
+ int line; /* current line number */
+ int lineinc; /* adjustment for \\n lines */
+ uchar *inb; /* input buffer */
+ uchar *inp; /* input pointer */
+ uchar *inl; /* end of input */
+ int fd; /* input source */
+ int ifdepth; /* conditional nesting in include */
+ int pathdepth;
+ int wrap;
+ struct source *next; /* stack for #include */
+} Source;
+
+typedef struct nlist
+{
+ struct nlist *next;
+ uchar *name;
+ int len;
+ Tokenrow *vp; /* value as macro */
+ Tokenrow *ap; /* list of argument names, if any */
+ char val; /* value as preprocessor name */
+ char flag; /* is defined, is pp name */
+ uchar *loc; /* location of definition */
+} Nlist;
+
+typedef struct includelist
+{
+ char deleted;
+ char always;
+ char *file;
+} Includelist;
+
+typedef struct wraplist
+{
+ char *file;
+} Wraplist;
+
+#define new(t) (t *)domalloc(sizeof(t))
+#define quicklook(a,b) (namebit[(a)&077] & (1<<((b)&037)))
+#define quickset(a,b) namebit[(a)&077] |= (1<<((b)&037))
+extern unsigned long namebit[077 + 1];
+
+enum errtype
+{
+ INFO, WARNING, ERROR, FATAL
+};
+
+
+typedef struct macroValidator
+{
+ Nlist * pMacro;
+ unsigned int nTokenWhereMacroBecomesValid;
+ struct macroValidator *
+ pNext;
+} MacroValidator;
+typedef struct mvl
+{
+ MacroValidator * pFirst;
+ unsigned int nextFreeIdentifier;
+} MacroValidatorList;
+
+void mvl_init(
+ MacroValidatorList *
+ out_pValidators);
+void mvl_destruct(
+ MacroValidatorList *
+ out_pValidators);
+/* Adds MacroValidator to the list.
+*/
+void mvl_add(
+ MacroValidatorList *
+ inout_pValidators,
+ Nlist * in_pMacro,
+ Token * in_pTokenWhereMacroBecomesValid);
+/* Updates all token pointers within the list, when the tokens have
+ moved, by
+ pTokenWhereMacroBecomesValid += in_nNrofTokens;
+ .
+
+void mvl_move(
+ MacroValidatorList *
+ inout_pValidators,
+ int in_nSpace); // in pointer units.
+*/
+/* Checks if one of the validators within the list points to
+ the token in_pTokenToCheck. If so, the macro is set valid and
+ the validator is removed.
+*/
+void mvl_check(
+ MacroValidatorList *
+ inout_pValidators,
+ Token * inout_pTokenToCheck);
+
+void tokenrow_zeroTokenIdentifiers(Tokenrow* trp);
+
+void expandlex(void);
+void fixlex(void);
+void setup(int, char **);
+int gettokens(Tokenrow *, int);
+int comparetokens(Tokenrow *, Tokenrow *);
+Source *setsource(char *, int, int, char *, int);
+void unsetsource(void);
+void puttokens(Tokenrow *);
+void process(Tokenrow *);
+void *domalloc(int);
+void dofree(void *);
+void error(enum errtype, char *,...);
+void flushout(void);
+int fillbuf(Source *);
+int trigraph(Source *);
+int foldline(Source *);
+Nlist *lookup(Token *, int);
+void control(Tokenrow *);
+void dodefine(Tokenrow *);
+void doadefine(Tokenrow *, int);
+void doinclude(Tokenrow *, int, int);
+void doif(Tokenrow *, enum kwtype);
+void expand(Tokenrow *, Nlist *, MacroValidatorList *);
+void builtin(Tokenrow *, int);
+int gatherargs(Tokenrow *, Tokenrow **, int *);
+void substargs(Nlist *, Tokenrow *, Tokenrow **);
+void expandrow(Tokenrow *, char *);
+void maketokenrow(int, Tokenrow *);
+Tokenrow *copytokenrow(Tokenrow *, Tokenrow *);
+Token *growtokenrow(Tokenrow *);
+Tokenrow *normtokenrow(Tokenrow *);
+void adjustrow(Tokenrow *, int);
+void movetokenrow(Tokenrow *, Tokenrow *);
+void insertrow(Tokenrow *, int, Tokenrow *);
+void peektokens(Tokenrow *, char *);
+void doconcat(Tokenrow *);
+Tokenrow *stringify(Tokenrow *);
+int lookuparg(Nlist *, Token *);
+long eval(Tokenrow *, int);
+void genline(void);
+void genimport(char *, int, char *, int);
+void genwrap(int);
+void setempty(Tokenrow *);
+void makespace(Tokenrow *, Token *);
+char *outnum(char *, int);
+int digit(int);
+uchar *newstring(uchar *, int, int);
+
+#define rowlen(tokrow) ((tokrow)->lp - (tokrow)->bp)
+
+extern char *outptr;
+extern Token nltoken;
+extern Source *cursource;
+extern char *curtime;
+extern int incdepth;
+extern int ifdepth;
+extern int ifsatisfied[NIF];
+extern int Mflag;
+extern int Iflag;
+extern int Pflag;
+extern int Aflag;
+extern int Lflag;
+extern int Xflag;
+extern int Vflag;
+extern int Cflag;
+extern int Dflag;
+extern int Cplusplus;
+extern int skipping;
+extern Nlist *kwdefined;
+extern Includelist includelist[NINCLUDE];
+extern Wraplist wraplist[NINCLUDE];
+extern char wd[];
+