blob: aa70f077a49a1924435e5a0cbd8ab5a25287e399 [file] [log] [blame]
#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