89 lines · 3.9 KB · C
RawDownload
#ifndef _VBPP_H#define _VBPP_H 1 /* vbpp.h * last change: 17.08.1995 Thorsten Schaaps */ /* strnode-types */#define NORMAL      0          /* anything: brackets,+,-,/,*, etc.. */#define PP_IDENT    1          /* possible identifier               */#define ARGUMENT    2          /* argument: see number              */#define PP_STR      3          /* strings                           */#define NUMBER      4          /* numbers (123,0x00,0L,..)          */#define SPACE       5          /* spaces, tabs, etc.                */#define SPECIAL     6          /* flags=1->#,flags=2->##            */ /* flags for type==SPECIAL */#define NONE        0#define TOSTRING    1          /* #define t(c) #c                   */#define KILLSPACES  2          /* #define t(a,b) a##b               */ struct strnode{  char           *str;         /* the string =8) ah, you guessed that. */  int             len;         /* the length of the string             */  int             flags;       /* flags: see above                     */  int             type;        /* type:  see above                     */  int             number;      /* only valid if type==ARGUMENT         */  struct strnode *prev,*next;  /* pointers to previous and next node or NULL */}; /* Macro-Node-Flags */#define FUNCTION  1     /* for macros changing from line to line, e.g. */                        /*          __LINE__, __FILE__, __TIME__ etc.. */#define PARAMETER 2     /* Macro has arguments                         */#define NODELETE  4     /* Macro cannot be UNDEFined, e.g. __TIME__,   */                        /*          __DATE__, __STDC__                 */#define NOREDEF   8     /* Macro cannot be reDEFINED, (s. above, but   */                        /*          not __STDC__)                      */ /* Function-Numbers for FUNCTION-Macros */#define FUNCLINE  1     /* __LINE__ */#define FUNCFILE  2     /* __FILE__ */#define FUNCDATE  3     /* __DATE__ */#define FUNCTIME  4     /* __TIME__ */       /* __STDC__ is a normal macro, but cannot be deleted */ struct mnode{  char           *name;       /* name, e.g. SQR                         */  char           *args;       /* arguments, e.g. (x)                    */  char           *token;      /* definition as string, e.g. ((x)*(x))   */                              /* BE CAREFULL: may be NULL in the future */  struct strnode *tokenlist;  /* definition as list                     */  int             flags;      /* flags, see above                       */  int             numargs;    /* number of arguments                    */  int             funcnum;    /* number of function (see above)         */  struct mnode   *prev,*next; /* pointers to previos and next node or NULL */}; /* Return-Codes for ExpandList/ExpandArgMakro/CloneArg-Functions */#define OK            0#define OUT_OF_MEM   -1#define NUM_OF_ARGS  -2#define ARG_EXPECTED -3 void            AddMakroNode(struct mnode **, struct mnode *);void            InsertMakroNode(struct mnode **, struct mnode *, struct mnode *);void            RemMakroNode(struct mnode **, struct mnode *);struct mnode   *FindMakroNode(struct mnode *, char *, int);void            DelMakroNode(struct mnode **, struct mnode *);void            DelMakroList(struct mnode **); void            AddStrNode(struct strnode **, struct strnode *, char *);void            RemStrNode(struct strnode **, struct strnode *);/* struct strnode *FindStrNode(struct strnode *, char *, int); */void            DelStrNode(struct strnode **, struct strnode *);void            DelStrList(struct strnode **);struct strnode *CloneStrList(struct strnode *, struct strnode *);struct strnode *DoMakroFunction(struct mnode *); struct strnode *Str2List(char *);int             List2Str(struct strnode *, char *, int); int             ExpandList(struct strnode **); struct mnode   *ParseIdentifier(char *);int             PreParse(void); #endif