| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251 |
- /******************************************************************************
- * FREXXWARE
- * ----------------------------------------------------------------------------
- *
- * Project: Frexx C Preprocessor
- * $Source: /home/user/start/cpp/RCS/cpp.h,v $
- * $Revision: 1.3 $
- * $Date: 1993/12/06 13:51:20 $
- * $Author: start $
- * $State: Exp $
- * $Locker: start $
- *
- * ----------------------------------------------------------------------------
- * $Log: cpp.h,v $
- * Revision 1.3 1993/12/06 13:51:20 start
- * A lot of new stuff (too much to mention)
- *
- * Revision 1.2 1993/11/11 07:16:39 start
- * New stuff
- *
- * Revision 1.2 1993/11/11 07:16:39 start
- * New stuff
- *
- * Revision 1.1 1993/11/03 09:15:59 start
- * Initial revision
- *
- *
- *****************************************************************************/
- /*
- * I n t e r n a l D e f i n i t i o n s f o r C P P
- *
- * In general, definitions in this file should not be changed.
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #ifndef fpp_toupper
- #define fpp_toupper(c) ((c) + ('A' - 'a'))
- #endif /* no fpp_toupper */
- #ifndef fpp_tolower
- #define fpp_tolower(c) ((c) + ('a' - 'A'))
- #endif /* no fpp_tolower */
- #ifndef FPP_TRUE
- #define FPP_TRUE 1
- #define FPP_FALSE 0
- #endif
- #ifndef EOS
- /*
- * This is predefined in Decus C
- */
- #define EOS '\0' /* End of string */
- #endif
- #define EOF_CHAR 0 /* Returned by fpp_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 QUOTE_PARM 0x1C /* Magic quoting operator */
- #define DEF_MAGIC 0x1D /* Magic for #defines */
- #define TOK_SEP 0x1E /* Token concatenation delim. */
- #define COM_SEP 0x1F /* Magic comment separator */
- /*
- * 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 0x7F /* Macro formals start here */
- #ifndef OS9
- #if (PAR_MAC >= 33)
- #error "assertion fails -- PAR_MAC isn't 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 /* FPP_TRUE if compile set at entry */
- #define ELSE_SEEN 2 /* FPP_TRUE when #else processed */
- #define FPP_TRUE_SEEN 4 /* FPP_TRUE when #if FPP_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 generate /* 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
- /*
- * 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
- */
- #include "fpp.h" /* structs and defines */
- #include "cppadd.h" /* Added prototypes for ANSI complience! */
- #ifdef AMIGA
- #include <dos.h>
- extern int _OSERR;
- #endif
- extern char type[]; /* Character classifier */
- #define compiling global->ifstack[0]
- #if DEBUG
- extern int debug; /* Debug level */
- #endif
- extern SIZES size_table[]; /* For #if sizeof sizes */
- #define MAX_SPACE_SIZE 512 /* maximum number of whitespaces possible
- to remember */
|