summaryrefslogtreecommitdiff
path: root/rsc/source/rscpp/cpp.h
diff options
context:
space:
mode:
Diffstat (limited to 'rsc/source/rscpp/cpp.h')
-rw-r--r--rsc/source/rscpp/cpp.h415
1 files changed, 415 insertions, 0 deletions
diff --git a/rsc/source/rscpp/cpp.h b/rsc/source/rscpp/cpp.h
new file mode 100644
index 000000000000..11327d4fb9d1
--- /dev/null
+++ b/rsc/source/rscpp/cpp.h
@@ -0,0 +1,415 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+
+#ifndef TRUE
+#define TRUE 1
+#define FALSE 0
+#endif
+
+/* in cpp1.c: file-pointer auf stdout oder file */
+extern FILE *pCppOut; /* BP */
+#define PUTCHAR( d ) fprintf( pCppOut, "%c", (d) ) /* BP */
+#if OSL_DEBUG_LEVEL > 1
+extern FILE *pDefOut; /* ER */
+#ifdef EVALDEFS
+#define NEVALBUF 2048
+#endif
+#endif
+
+/* limit for reading commandfiles */
+#define PARALIMIT 100
+
+#ifndef EOS
+/*
+ * This is predefined in Decus C
+ */
+#define EOS '\0' /* End of string */
+#endif
+#define EOF_CHAR 0 /* Returned by get() on eof */
+#define NULLST ((char *) NULL) /* Pointer to nowhere (linted) */
+#define DEF_NOARGS (-1) /* #define foo vs #define foo() */
+
+/*
+ * The following may need to change if the host system doesn't use ASCII.
+ */
+#define DEF_MAGIC 0x1D /* Magic for #defines */
+#define TOK_SEP 0x1E /* Token concatenation delim. */
+#define COM_SEP 0x1F /* Magic comment separator */
+
+#ifdef EBCDIC
+#define HT 0x05 /* horizontal tab */
+#define NL 0x15 /* new line */
+#define CR 0x0D /* carriage return */
+#define DEL 0x07
+#else
+#define HT 0x09 /* horizontal tab */
+#define NL 0x0A /* new line */
+#define CR 0x0D /* carriage return */
+#define DEL 0x7F
+#endif
+
+
+#ifdef SOLAR
+#define MAC_PARM 0x01 /* Macro formals start here */
+#else
+/*
+ * Note -- in Ascii, the following will map macro formals onto DEL + the
+ * C1 control character region (decimal 128 .. (128 + PAR_MAC)) which will
+ * be ok as long as PAR_MAC is less than 33). Note that the last PAR_MAC
+ * value is reserved for string substitution.
+ */
+
+#define MAC_PARM DEL /* Macro formals start here */
+#if PAR_MAC >= 33
+ assertion fails -- PAR_MAC is not less than 33
+#endif
+#endif
+#define LASTPARM (PAR_MAC - 1)
+
+/*
+ * Character type codes.
+ */
+
+#define INV 0 /* Invalid, must be zero */
+#define OP_EOE INV /* End of expression */
+#define DIG 1 /* Digit */
+#define LET 2 /* Identifier start */
+#define FIRST_BINOP OP_ADD
+#define OP_ADD 3
+#define OP_SUB 4
+#define OP_MUL 5
+#define OP_DIV 6
+#define OP_MOD 7
+#define OP_ASL 8
+#define OP_ASR 9
+#define OP_AND 10 /* &, not && */
+#define OP_OR 11 /* |, not || */
+#define OP_XOR 12
+#define OP_EQ 13
+#define OP_NE 14
+#define OP_LT 15
+#define OP_LE 16
+#define OP_GE 17
+#define OP_GT 18
+#define OP_ANA 19 /* && */
+#define OP_ORO 20 /* || */
+#define OP_QUE 21 /* ? */
+#define OP_COL 22 /* : */
+#define OP_CMA 23 /* , (relevant?) */
+#define LAST_BINOP OP_CMA /* Last binary operand */
+/*
+ * The following are unary.
+ */
+#define FIRST_UNOP OP_PLU /* First Unary operand */
+#define OP_PLU 24 /* + (draft ANSI standard) */
+#define OP_NEG 25 /* - */
+#define OP_COM 26 /* ~ */
+#define OP_NOT 27 /* ! */
+#define LAST_UNOP OP_NOT
+#define OP_LPA 28 /* ( */
+#define OP_RPA 29 /* ) */
+#define OP_END 30 /* End of expression marker */
+#define OP_MAX (OP_END + 1) /* Number of operators */
+#define OP_FAIL (OP_END + 1) /* For error returns */
+
+/*
+ * The following are for lexical scanning only.
+ */
+
+#define QUO 65 /* Both flavors of quotation */
+#define DOT 66 /* . might start a number */
+#define SPA 67 /* Space and tab */
+#define BSH 68 /* Just a backslash */
+#define END 69 /* EOF */
+
+/*
+ * These bits are set in ifstack[]
+ */
+#define WAS_COMPILING 1 /* TRUE if compile set at entry */
+#define ELSE_SEEN 2 /* TRUE when #else processed */
+#define TRUE_SEEN 4 /* TRUE when #if TRUE processed */
+
+/*
+ * Define bits for the basic types and their adjectives
+ */
+
+#define T_CHAR 1
+#define T_INT 2
+#define T_FLOAT 4
+#define T_DOUBLE 8
+#define T_SHORT 16
+#define T_LONG 32
+#define T_SIGNED 64
+#define T_UNSIGNED 128
+#define T_PTR 256 /* Pointer */
+#define T_FPTR 512 /* Pointer to functions */
+
+/*
+ * The DEFBUF structure stores information about #defined
+ * macros. Note that the defbuf->repl information is always
+ * in malloc storage.
+ */
+
+typedef struct defbuf {
+ struct defbuf *link; /* Next define in chain */
+ char *repl; /* -> replacement */
+ int hash; /* Symbol table hash */
+ int nargs; /* For define(args) */
+ char name[1]; /* #define name */
+} DEFBUF;
+
+/*
+ * The FILEINFO structure stores information about open files
+ * and macros being expanded.
+ */
+
+typedef struct fileinfo {
+ char *bptr; /* Buffer pointer */
+ int line; /* for include or macro */
+ FILE *fp; /* File if non-null */
+ struct fileinfo *parent; /* Link to includer */
+ char *filename; /* File/macro name */
+ char *progname; /* From #line statement */
+ unsigned int unrecur; /* For macro recursion */
+ char buffer[1]; /* current input line */
+} FILEINFO;
+
+/*
+ * The SIZES structure is used to store the values for #if sizeof
+ */
+
+typedef struct sizes {
+ short bits; /* If this bit is set, */
+ int size; /* this is the datum size value */
+ int psize; /* this is the pointer size */
+} SIZES;
+/*
+ * nomacarg is a built-in #define on Decus C.
+ */
+
+#ifdef nomacarg
+#define cput output /* cput concatenates tokens */
+#else
+#if COMMENT_INVISIBLE
+#define cput(c) { if (c != TOK_SEP && c != COM_SEP) PUTCHAR(c); }
+#else
+#define cput(c) { if (c != TOK_SEP) PUTCHAR(c); }
+#endif
+#endif
+
+#ifndef nomacarg
+#define streq(s1, s2) (strcmp(s1, s2) == 0)
+#endif
+
+/*
+ * Error codes. VMS uses system definitions.
+ * Decus C codes are defined in stdio.h.
+ * Others are cooked to order.
+ */
+
+#if HOST == SYS_VMS
+#include <ssdef.h>
+#include <stsdef.h>
+#define IO_NORMAL (SS$_NORMAL | STS$M_INHIB_MSG)
+#define IO_ERROR SS$_ABORT
+#endif
+/*
+ * Note: IO_NORMAL and IO_ERROR are defined in the Decus C stdio.h file
+ */
+#ifndef IO_NORMAL
+#define IO_NORMAL 0
+#endif
+#ifndef IO_ERROR
+#define IO_ERROR 1
+#endif
+
+/*
+ * Externs
+ */
+
+extern int line; /* Current line number */
+extern int wrongline; /* Force #line to cc pass 1 */
+extern char type[]; /* Character classifier */
+extern char token[IDMAX + 1]; /* Current input token */
+extern int instring; /* TRUE if scanning string */
+extern int inmacro; /* TRUE if scanning #define */
+extern int errors; /* Error counter */
+extern int recursion; /* Macro depth counter */
+extern char ifstack[BLK_NEST]; /* #if information */
+#define compiling ifstack[0]
+extern char *ifptr; /* -> current ifstack item */
+extern char *incdir[NINCLUDE]; /* -i directories */
+extern char **incend; /* -> active end of incdir */
+extern int cflag; /* -C option (keep comments) */
+extern int eflag; /* -E option (ignore errors) */
+extern int nflag; /* -N option (no pre-defines) */
+extern int rec_recover; /* unwind recursive macros */
+extern char *preset[]; /* Standard predefined symbols */
+extern char *magic[]; /* Magic predefined symbols */
+extern FILEINFO *infile; /* Current input file */
+extern char work[NWORK + 1]; /* #define scratch */
+extern char *workp; /* Free space in work */
+#if OSL_DEBUG_LEVEL > 1
+extern int debug; /* Debug level */
+/* ER dump & evaluate #define's */
+extern int bDumpDefs; /* TRUE if #define's dump req. */
+extern int bIsInEval; /* TRUE if #define dumping now */
+#ifdef EVALDEFS
+extern char EvalBuf[NEVALBUF + 1]; /* evaluation buffer */
+extern int nEvalOff; /* offset to free buffer pos */
+#endif
+#endif
+extern int keepcomments; /* Don't remove comments if set */
+extern SIZES size_table[]; /* For #if sizeof sizes */
+
+#ifdef NOMAIN /* BP */
+#ifndef _NO_PROTO
+int start_cpp( int argc, char *argv[] );
+#endif
+#define MAIN start_cpp /* fuer die cpp.lib muss main() geandert werden */
+#else
+#ifdef WNT
+#define MAIN __cdecl main
+#else
+#define MAIN main
+#endif
+#endif
+
+
+void InitCpp1();
+void InitCpp2();
+void InitCpp3();
+void InitCpp4();
+void InitCpp5();
+void InitCpp6();
+
+#define HELLO() fprintf( stderr, "[Hello at %s, %d] ", __FILE__, __LINE__ )
+
+#ifndef _STDIO_H
+#include <stdio.h>
+#endif
+
+#ifndef _STDLIB_H
+#include <stdlib.h>
+#endif
+
+#ifndef _STRING_H
+#include <string.h>
+#endif
+
+/* cpp1.c */
+void output( int c );
+void sharp();
+void cppmain();
+#if OSL_DEBUG_LEVEL > 1
+#ifdef EVALDEFS
+int outputEval( int c );
+#endif
+#endif
+
+
+/* cpp2.c */
+int control( int counter );
+void doinclude();
+void dodefine();
+void doif( int hash );
+int openinclude( char *, int );
+int hasdirectory(char *, char * );
+int openfile( char * );
+
+/* cpp3.c */
+int openfiles( char *filename );
+void addfile( FILE *fp, char *filename );
+void setincdirs();
+int AddInclude( char *pIncStr );
+int getredirection( int argc, char **argv );
+void zap_uc( char *ap );
+
+void initdefines();
+int dooptions( int argc, char *argv[] );
+int readoptions(char* filename, char*** pfargv);
+
+/* cpp4.c */
+void dodefines();
+void checkparm( int c, DEFBUF *dp );
+int expcollect();
+void expstuff( DEFBUF *dp );
+
+#if STRING_FORMAL
+void stparmscan( int delim, DEFBUF *dp);
+#else
+void stparmscan( int delim);
+#endif
+#if OSL_DEBUG_LEVEL > 1
+void dumpparm( char *why );
+#endif
+
+void doundef();
+void textput( char *text );
+void charput( int c );
+void expand( DEFBUF *tokenp );
+
+/* cpp5.c */
+int eval();
+int evallex(int);
+int *evaleval(int *, int, int );
+int evalchar(int);
+int dosizeof();
+int evalnum( int c );
+int bittest( int );
+
+/* cpp6.c */
+
+void skipnl();
+int skipws();
+void scanid( int c );
+int macroid( int c );
+int catenate();
+int scanstring( int c, void (*outfun)( int c ) );
+void scannumber( int c, void (*outfun)( int c ) );
+void save( int c );
+char *savestring( char *text );
+FILEINFO *getfile( int bufsize, char *name);
+char *getmem( int size );
+DEFBUF *lookid( int c );
+DEFBUF *defendel( char *name, int delete );
+void dunpdef( char *why );
+void dumpadef( char *why, DEFBUF *dp);
+int get();
+int cget();
+void unget();
+void ungetstring( char *text );
+void cerror( char *format, char *sarg);
+void cwarn( char *format, char *sarg);
+void cfatal( char *format, char *sarg);
+void cierror( char *format, int n);
+void ciwarn( char *format, int n);
+#if OSL_DEBUG_LEVEL > 1
+void dumpdef( char *why );
+void dumpadef( char *why, DEFBUF *dp );
+#endif