summaryrefslogtreecommitdiff
path: root/rsc/source/rscpp/cpp.h
diff options
context:
space:
mode:
authorNils Fuhrmann <nf@openoffice.org>2001-04-18 09:31:56 +0000
committerNils Fuhrmann <nf@openoffice.org>2001-04-18 09:31:56 +0000
commit457f5cb5c0b5a62438a205f6835abd2a51b857f4 (patch)
treeba4763ba1a0ccae57aef0c3ca8c7e38e317ff76e /rsc/source/rscpp/cpp.h
parent413042a9b341838b3820bc3da14b498465de35ba (diff)
Moved from rscpp to rsc
Diffstat (limited to 'rsc/source/rscpp/cpp.h')
-rw-r--r--rsc/source/rscpp/cpp.h469
1 files changed, 469 insertions, 0 deletions
diff --git a/rsc/source/rscpp/cpp.h b/rsc/source/rscpp/cpp.h
new file mode 100644
index 000000000000..c6fadfbe5f49
--- /dev/null
+++ b/rsc/source/rscpp/cpp.h
@@ -0,0 +1,469 @@
+/*************************************************************************
+ *
+ * $RCSfile: cpp.h,v $
+ *
+ * $Revision: 1.1 $
+ *
+ * last change: $Author: nf $ $Date: 2001-04-18 10:31:56 $
+ *
+ * The Contents of this file are made available subject to the terms of
+ * either of the following licenses
+ *
+ * - GNU Lesser General Public License Version 2.1
+ * - Sun Industry Standards Source License Version 1.1
+ *
+ * Sun Microsystems Inc., October, 2000
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2000 by Sun Microsystems, Inc.
+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library 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 for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ *
+ * Sun Industry Standards Source License Version 1.1
+ * =================================================
+ * The contents of this file are subject to the Sun Industry Standards
+ * Source License Version 1.1 (the "License"); You may not use this file
+ * except in compliance with the License. You may obtain a copy of the
+ * License at http://www.openoffice.org/license.html.
+ *
+ * Software provided under this License is provided on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ * See the License for the specific provisions governing your rights and
+ * obligations concerning the Software.
+ *
+ * The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+ *
+ * Copyright: 2000 by Sun Microsystems, Inc.
+ *
+ * All Rights Reserved.
+ *
+ * Contributor(s): _______________________________________
+ *
+ *
+ ************************************************************************/
+
+
+#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 */
+#ifdef DEBUG
+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, */
+ short size; /* this is the datum size value */
+ short 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 */
+#ifdef DEBUG
+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();
+
+#if defined(ZTC) || defined(MAC) || defined(WNT) || defined(BLC)
+
+#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 */
+int output( int c );
+sharp();
+cppmain();
+#ifdef DEBUG
+#ifdef EVALDEFS
+int outputEval( int c );
+#endif
+#endif
+
+
+/* cpp2.c */
+int control( int counter );
+doinclude();
+dodefine();
+doif( int hash );
+openinclude( char *, int );
+hasdirectory(char *, char * );
+openfile( char * );
+
+/* cpp3.c */
+int openfiles( char *filename );
+int addfile( FILE *fp, char *filename );
+int setincdirs();
+int AddInclude( char *pIncStr );
+int getredirection( int argc, char **argv );
+zap_uc( char *ap );
+
+int initdefines();
+dooptions( int argc, char *argv[] );
+int readoptions(char* filename, char*** pfargv);
+
+/* cpp4.c */
+dodefines();
+checkparm( int c, DEFBUF *dp );
+int expcollect();
+int expstuff( DEFBUF *dp );
+
+#if STRING_FORMAL
+stparmscan( int delim, DEFBUF *dp);
+#else
+stparmscan( int delim);
+#endif
+#ifdef DEBUG
+dumpparm( char *why );
+#endif
+
+doundef();
+textput( char *text );
+charput( int c );
+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 */
+
+skipnl();
+skipws();
+scanid( int c );
+int macroid( int c );
+int catenate();
+int scanstring( int c, int (*outfun)( int c ) );
+scannumber( int c, int (*outfun)( int c ) );
+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 );
+dunpdef( char *why );
+dumpadef( char *why, DEFBUF *dp);
+int get();
+int cget();
+unget();
+ungetstring( char *text );
+domsg( char *severity, char *format, void *arg);
+cerror( char *format, char *sarg);
+cwarn( char *format, char *sarg);
+cfatal( char *format, char *sarg);
+cierror( char *format, int n);
+ciwarn( char *format, int n);
+#ifdef DEBUG
+dumpdef( char *why );
+dumpadef( char *why, DEFBUF *dp );
+#endif
+
+#else /* not ZTC || not MAC || || not WNT || not BLC */
+
+extern char *getmem(); /* Get memory or die. */
+extern DEFBUF *lookid(); /* Look for a #define'd thing */
+extern DEFBUF *defendel(); /* Symbol table enter/delete */
+extern char *savestring(); /* Stuff string in malloc mem. */
+extern char *strcpy();
+extern char *strcat();
+extern char *strrchr();
+extern char *strchr();
+#if ! ( defined UNX && defined ALPHA )
+extern long time();
+#endif
+/* extern char *sprintf(); */ /* Lint needs this */
+
+#endif /* ZTC */