00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include <stdio.h>
00019
00020 typedef struct sstring
00021 {
00022 char *base;
00023 char *ptr;
00024 char *limit;
00025 } sstring;
00026
00027 #define INIT_SSTRING(STR) ((STR)->base = 0, (STR)->ptr = 0, (STR)->limit = 0)
00028 #define FREE_SSTRING(STR) do { if ((STR)->base) free (STR)->base; } while(0)
00029 #define SSTRING_PUT(STR, C) do {\
00030 if ((STR)->limit <= (STR)->ptr) make_sstring_space (STR, 1); \
00031 *(STR)->ptr++ = (C); } while (0)
00032 #define SSTRING_LENGTH(STR) ((STR)->ptr - (STR)->base)
00033 #define MAKE_SSTRING_SPACE(STR, COUNT) \
00034 if ((STR)->limit - (STR)->ptr < (COUNT)) make_sstring_space (STR, COUNT);
00035
00036 #ifndef _PARAMS
00037 #if defined(ANSI_PROTOTYPES) || defined(__cplusplus)
00038 #define _PARAMS(args) args
00039 #else
00040 #define _PARAMS(args) ()
00041 #endif
00042 #endif
00043
00044 struct partial_proto;
00045 struct fn_decl
00046 {
00047 const char *fname;
00048 const char *rtype;
00049 const char *params;
00050 struct partial_proto *partial;
00051 };
00052
00053 struct cpp_token;
00054
00055 extern int lineno;
00056 extern void sstring_append _PARAMS((sstring *, sstring *));
00057 extern void make_sstring_space _PARAMS((sstring *, int));
00058 extern int skip_spaces _PARAMS((FILE *, int));
00059 extern int scan_ident _PARAMS((FILE *, sstring *, int));
00060 extern int scan_string _PARAMS((FILE *, sstring *, int));
00061 extern int read_upto _PARAMS((FILE *, sstring *, int));
00062 extern unsigned long hash _PARAMS((const char *));
00063 extern void recognized_function _PARAMS((const struct cpp_token *,
00064 unsigned int, int, int));
00065 extern void recognized_extern _PARAMS((const struct cpp_token *));
00066 extern unsigned int hashstr _PARAMS((const char *, unsigned int));
00067
00068 struct cpp_reader;
00069 extern int scan_decls _PARAMS((struct cpp_reader *, int, char **));
00070
00071
00072 #define IDENTIFIER_TOKEN 300
00073 #define CHAR_TOKEN 301
00074 #define STRING_TOKEN 302
00075 #define INT_TOKEN 303
00076 extern int get_token _PARAMS ((FILE *, sstring *));
00077
00078
00079 extern int source_lineno;
00080 extern sstring source_filename;
00081
00082 extern int lineno;