diff options
Diffstat (limited to 'rsc/source/rscpp/cpp.h')
-rw-r--r-- | rsc/source/rscpp/cpp.h | 415 |
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 |