diff options
author | Nils Fuhrmann <nf@openoffice.org> | 2001-04-18 09:31:56 +0000 |
---|---|---|
committer | Nils Fuhrmann <nf@openoffice.org> | 2001-04-18 09:31:56 +0000 |
commit | 457f5cb5c0b5a62438a205f6835abd2a51b857f4 (patch) | |
tree | ba4763ba1a0ccae57aef0c3ca8c7e38e317ff76e /rsc/source/rscpp/cpp.h | |
parent | 413042a9b341838b3820bc3da14b498465de35ba (diff) |
Moved from rscpp to rsc
Diffstat (limited to 'rsc/source/rscpp/cpp.h')
-rw-r--r-- | rsc/source/rscpp/cpp.h | 469 |
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 */ |