1
/* $Id: cproto.h,v 4.6 1998/01/19 00:49:16 cthuang Exp $
3
* Declarations for C function prototype generator
14
#if HAVE_LIBDMALLOC || HAVE_LIBDBMALLOC || defined(DOALLOC)
20
#define NEW(type) (type *)0
22
#define NEW(type) (type *)xmalloc(sizeof(type))
25
/* Useful constants (mainly to avoid problems balancing parentheses...) */
26
#define ELLIPSIS "..."
33
#define COMMENT_BEGIN "/*"
34
#define COMMENT_END "*/"
39
/* Source file text */
41
char text[MAX_TEXT_SIZE]; /* source text */
42
long begin; /* offset in temporary file */
45
/* This is a list of function parameters. */
46
typedef struct parameter_list {
47
struct parameter *first; /* pointer to first parameter in list */
48
struct parameter *last; /* pointer to last parameter in list */
49
long begin_comment; /* begin offset of comment */
50
long end_comment; /* end offset of comment */
51
char *comment; /* comment at start of parameter list */
54
/* Declaration specifier flags */
55
#define DS_NONE 0 /* default */
56
#define DS_EXTERN 1 /* contains "extern" specifier */
57
#define DS_STATIC 2 /* contains "static" specifier */
58
#define DS_CHAR 4 /* contains "char" type specifier */
59
#define DS_SHORT 8 /* contains "short" type specifier */
60
#define DS_FLOAT 16 /* contains "float" type specifier */
61
#define DS_JUNK 32 /* we're not interested in this declaration */
63
/* This structure stores information about a declaration specifier. */
64
typedef struct decl_spec {
65
unsigned short flags; /* flags defined above */
66
char *text; /* source text */
67
long begin; /* offset in temporary file */
70
/* Styles of function definitions */
72
#define FUNC_UNKNOWN -1 /* unspecified */
74
#define FUNC_UNKNOWN 0 /* unspecified (same as FUNC_NONE) */
76
#define FUNC_NONE 0 /* not a function definition */
77
#define FUNC_TRADITIONAL 1 /* traditional style */
78
#define FUNC_ANSI 2 /* ANSI style */
79
#define FUNC_BOTH 3 /* both styles */
80
typedef int FuncDefStyle;
82
/* This structure stores information about a declarator. */
83
typedef struct declarator {
84
char *name; /* name of variable or function */
85
char *text; /* source text */
86
long begin; /* offset in temporary file */
87
long begin_comment; /* begin offset of comment */
88
long end_comment; /* end offset of comment */
89
FuncDefStyle func_def; /* style of function definition */
90
ParameterList params; /* function parameters */
91
boolean pointer; /* TRUE if it declares a pointer */
92
struct declarator *head; /* head function declarator */
93
struct declarator *func_stack; /* stack of function declarators */
94
struct declarator *next; /* next declarator in list */
97
/* This is a list of declarators. */
98
typedef struct declarator_list {
99
Declarator *first; /* pointer to first declarator in list */
100
Declarator *last; /* pointer to last declarator in list */
103
/* This structure stores information about a function parameter. */
104
typedef struct parameter {
105
struct parameter *next; /* next parameter in list */
107
Declarator *declarator;
108
char *comment; /* comment following the parameter */
111
/* parser stack entry type */
115
Parameter *parameter;
116
ParameterList param_list;
117
Declarator *declarator;
118
DeclaratorList decl_list;
121
/* Prototype styles */
123
#define PROTO_ANSI_LLIB -2 /* form ANSI lint-library source */
124
#define PROTO_LINTLIBRARY -1 /* form lint-library source */
126
#define PROTO_NONE 0 /* do not output any prototypes */
127
#define PROTO_TRADITIONAL 1 /* comment out parameters */
128
#define PROTO_ABSTRACT 2 /* comment out parameter names */
129
#define PROTO_ANSI 3 /* ANSI C prototype */
130
typedef int PrototypeStyle;
132
#define ansiLintLibrary() (proto_style == PROTO_ANSI_LLIB)
133
#define knrLintLibrary() (proto_style == PROTO_LINTLIBRARY)
134
#define lintLibrary() (knrLintLibrary() || ansiLintLibrary())
136
/* The role of a function declarator */
137
#define FUNC_OTHER 0 /* miscellaneous declaration */
138
#define FUNC_PROTO 1 /* prototype */
139
#define FUNC_DEF 2 /* function definition */
140
typedef int FuncDeclRole;
142
/* Prototype/function definition output formats */
143
#define FMT_OTHER 0 /* miscellaneous */
144
#define FMT_PROTO 1 /* prototype */
145
#define FMT_FUNC 2 /* function definition */
146
#define FMT_FUNC_COMMENT 3 /* func. def. with parameter comments */
147
typedef int FuncFormatType;
149
/* select scope of declarations to output */
150
#define SCOPE_STATIC 1 /* only output declarations with local scope */
151
#define SCOPE_EXTERN 2 /* only output declarations with global scope */
152
#define SCOPE_ALL 3 /* output all declarations */
155
/* Prototype/function definition output format */
156
typedef struct func_format {
157
char *decl_spec_prefix; /* output before declaration specifier */
158
char *declarator_prefix; /* output before declarator name */
159
char *declarator_suffix; /* output before '(' of parameter list */
160
char *first_param_prefix; /* output before first parameter */
161
char *middle_param_prefix; /* output before each subsequent parameter */
162
char *last_param_suffix; /* output after last parameter */
165
/* Program options */
166
extern boolean extern_out;
167
extern Scope scope_out;
169
extern boolean types_out;
170
extern boolean lint_shadowed;
172
extern boolean variables_out;
173
extern boolean promote_param;
174
extern PrototypeStyle proto_style;
175
extern FuncDefStyle func_style;
176
extern boolean proto_macro;
177
extern boolean define_macro;
178
extern char *macro_name;
179
extern boolean proto_comments;
180
extern boolean file_comments;
181
extern boolean quiet;
182
extern char *func_directive;
183
extern int num_inc_dir;
184
extern char *inc_dir[];
185
extern FuncFormat fmt[4];
187
/* Global declarations */
188
extern char *progname;
189
extern int varargs_num; /* supports varargs-comment */
190
extern char *varargs_str; /* additional info, such as PRINTFLIKEnn */
191
extern int extern_in; /* supports "LINT_EXTERNnn" */
192
extern int exitlike_func; /* supports noreturn-attribute */
193
extern int in_include; /* current include-level */
194
extern int debug_trace;
195
extern char base_file[];
199
extern void ExitProgram ARGS((int code));
200
#define exit(code) ExitProgram(code)
204
extern char *xMalloc ARGS((unsigned n, char *f, int l));
205
extern char *xStrdup ARGS((char *s, char *f, int l));
206
#define xmalloc(n) xMalloc(n, __FILE__, __LINE__)
207
#define xstrdup(s) xStrdup(s, __FILE__, __LINE__)
209
extern char *xmalloc ARGS((unsigned n));
210
extern char *xstrdup ARGS((char *src));
212
#endif /* !HAVE_LIBDMALLOC */
213
extern void put_error ARGS((void));
214
extern int is_path_sep ARGS((int ch));
215
extern char *trim_path_sep ARGS((char *s));
219
extern void put_string ARGS((FILE *outf, char *s));
220
extern void put_char ARGS((FILE *outf, int c));
221
extern void put_newline ARGS((FILE *outf));
222
extern void put_blankline ARGS((FILE *outf));
223
extern void put_padded ARGS((FILE *outf, char *s));
224
extern void fmt_library ARGS((int code));
225
extern void begin_tracking ARGS((void));
226
extern int already_declared ARGS((char *name));
227
extern void track_in ARGS((void));
228
extern int want_typedef ARGS((void));
229
extern void begin_typedef ARGS((void));
230
extern void copy_typedef ARGS((char *s));
231
extern void end_typedef ARGS((void));
232
extern void imply_typedef ARGS((char *s));
233
extern char *implied_typedef ARGS((void));
234
extern void indent ARGS((FILE *outf));
235
extern int lint_ellipsis ARGS((Parameter *p));
237
extern void flush_varargs ARGS((void));
239
#define flush_varargs() /* nothing */
241
extern void ellipsis_varargs ARGS((Declarator *d));
242
extern char *supply_parm ARGS((int count));
243
extern int is_actual_func ARGS((Declarator *d));
244
extern void put_body ARGS((FILE *outf, DeclSpec *decl_spec, Declarator *declarator));
246
extern void free_lintlibs ARGS((void));
249
#define put_string(fp,S) fputs(S, fp)
250
#define put_char(fp,C) fputc(C, fp)
251
#define put_padded(fp,S) fprintf(fp, "%s ", S)
252
#define put_body(fp,s,d) put_string(fp,";\n")
254
#define begin_typedef()
255
#define copy_typedef()
256
#define end_typedef()
257
#define imply_typedef(s)
258
#define implied_typedef() ((char *)0)
262
extern char *strkey ARGS((char *src, char *key));
263
extern void strcut ARGS((char *src, char *key));
266
extern boolean is_typedef_name ARGS((char *name));
267
extern char *cur_file_name ARGS((void));
268
extern unsigned cur_line_num ARGS((void));
269
extern FILE *cur_tmp_file ARGS((void));
270
extern void cur_file_changed ARGS((void));
271
extern long cur_begin_comment ARGS((void));
272
extern char *cur_text ARGS((void));
273
extern void pop_file ARGS((int closed));
274
extern void init_parser ARGS((void));
275
extern void process_file ARGS((FILE *infile, char *name));
277
extern void free_parser ARGS((void));
280
#endif /* CPROTO_H */