/* $Id: c2man.h,v 2.0.1.19 1996/03/21 08:23:27 greyham Exp greyham $
*
* Definitions for C language manual page generator
*/
#ifndef _C2MAN_H
#define _C2MAN_H
#include "config.h"
#include "symbol.h"
#ifdef I_SYS_TYPES
#include <sys/types.h>
#endif
#ifdef I_STDLIB
#include <stdlib.h>
#endif
#ifdef I_STRING
#include <string.h>
#else
#include <strings.h>
#endif
#include <stdio.h>
#ifdef I_UNISTD
#include <unistd.h>
#endif
#ifdef I_STDDEF
#include <stddef.h>
#endif
#ifdef I_TIME
#include <time.h>
#endif
#ifdef I_SYS_TIME
#include <sys/time.h>
#endif
#ifdef NeXT
#include <libc.h>
#undef ECHO /* lex generates ECHO */
#endif
#ifdef DBMALLOC
#include </usr/local/debug_include/malloc.h>
#endif
#include "confmagic.h"
/* number of spaces in a tab */
#define NUM_TAB_SPACES 4
/* maximum include file nesting */
#define MAX_INC_DEPTH 15
/* maximum number of include directories */
#define MAX_INC_DIR 15
/* maximum number of characters in a text buffer */
#define MAX_TEXT_LENGTH 256
/* Boolean type */
typedef int boolean;
#ifndef TRUE
#define FALSE 0
#define TRUE 1
#endif
/* NULL char *, useful for passing NULL to functions wanting a char * */
#define NULLCP ((char *)0)
/* This is a list of function parameters. */
typedef struct _parameter_list {
struct _parameter *first; /* pointer to first parameter in list */
struct _parameter *last; /* pointer to last parameter in list */
} ParameterList;
/* Declaration specifier flags */
#define DS_NONE 0 /* default */
#define DS_EXTERN 1 /* contains "extern" specifier */
#define DS_STATIC 2 /* contains "static" specifier */
#define DS_CHAR 4 /* contains "char" type specifier */
#define DS_SHORT 8 /* contains "short" type specifier */
#define DS_FLOAT 16 /* contains "float" type specifier */
#define DS_JUNK 32 /* we're not interested in this declaration */
#define DS_INLINE 64 /* makes static look interesting */
/* This structure stores information about a declaration specifier. */
typedef struct _decl_spec {
unsigned short flags; /* flags defined above */
char *text; /* source text */
struct _enumerator_list *enum_list; /* associated enum (if any) */
} DeclSpec;
/* Styles of declaration/definition */
typedef enum {
DECL_SIMPLE, /* simple declaration */
DECL_COMPOUND, /* compound declaration */
DECL_FUNCTION, /* function declaration (prototype) */
DECL_FUNCDEF /* an actual function definition */
} DeclType;
/* This structure stores information about a declarator. */
typedef struct _declarator {
char *name; /* name of variable or function */
char *text; /* source text */
DeclType type; /* style of function declaration */
ParameterList params; /* function parameters */
char *comment; /* description of param or variable */
char *retcomment; /* description of return value */
struct _declarator *head; /* head function declarator */
struct _declarator *func_stack; /* stack of function declarators */
struct _declarator *next; /* next declarator in list */
} Declarator;
/* This is a list of declarators. */
typedef struct _declarator_list {
Declarator *first; /* pointer to first declarator in list */
Declarator *last; /* pointer to last declarator in list */
} DeclaratorList;
/* This structure stores information about a declaration. */
typedef struct _declaration {
DeclSpec decl_spec;
DeclaratorList decl_list;
} Declaration;
/* this structure store information about an enumerator */
typedef struct _enumerator {
char *name; /* name of enum entry */
char *comment; /* description of entry */
char *group_comment; /* general descr. for next few enums in list */
struct _enumerator *next; /* next enumerator in list */
} Enumerator;
/* This is a list of enumerators. */
typedef struct _enumerator_list {
Enumerator *first; /* pointer to first enumerator in list */
Enumerator *last; /* pointer to last enumerator in list */
struct _enumerator_list *next; /* next list in a list-of-lists */
} EnumeratorList;
/* This structure stores information about a function parameter. */
typedef struct _parameter {
DeclSpec decl_spec;
Declarator *declarator;
boolean suppress; /* don't print in grouped page */
boolean duplicate; /* mention fn in grouped page */
struct _parameter *next; /* next parameter in list */
} Parameter;
/* this is an identifier, with surrounding comments (if any) */
typedef struct _identifier {
char *name;
char *comment_before, *comment_after;
} Identifier;
/* parser stack entry type */
typedef union {
char *text;
DeclSpec decl_spec;
Parameter parameter;
ParameterList param_list;
Declarator *declarator;
DeclaratorList decl_list;
Declaration declaration;
Enumerator enumerator;
EnumeratorList *enum_list;
Identifier identifier;
boolean boolean;
} yystype;
/* include files specified by user */
typedef struct _includefile
{
char *name;
struct _includefile *next;
} IncludeFile;
/* output object types */
enum Output_Object
{
#if 0 /* C++ stuff */
OBJECT_CLASS,
OBJECT_STRUCT,
OBJECT_ENUM,
OBJECT_TYPEDEF,
#endif
OBJECT_FUNCTION,
OBJECT_VARIABLE,
OBJECT_STATIC_FUNCTION,
OBJECT_STATIC_VARIABLE,
_OBJECT_NUM
};
struct Output_Object_Info
{
char flag; /* -O flag used to set it */
char *name; /* descriptive name for usage() */
char *extension; /* file extension */
char *subdir; /* subdirectory */
};
/* list of sections to exclude */
typedef struct ExcludeSection
{
char *name;
struct ExcludeSection *next;
} ExcludeSection;
#define YYSTYPE yystype
/* Program options */
extern boolean static_out;
extern boolean variables_out;
extern boolean promote_param;
extern boolean look_at_body_start;
extern boolean body_start_only;
extern const char *decl_spec_prefix, *declarator_prefix, *declarator_suffix;
extern const char *first_param_prefix, *middle_param_prefix, *last_param_suffix;
extern int num_inc_dir;
extern const char *inc_dir[];
extern char *manual_name;
extern const char *progname;
extern char *header_prefix;
extern IncludeFile *first_include;
extern ExcludeSection *first_excluded_section;
extern boolean fixup_comments;
extern char *group_terse;
extern boolean group_together;
extern boolean terse_specified;
extern boolean always_document_params;
extern char *output_dir;
/* Global declarations */
extern int line_num;
extern const char *basefile;
extern Time_t basetime;
extern boolean inbasefile;
extern boolean header_file;
extern SymbolTable *typedef_names;
extern void output_error();
extern void parse_file _((const char *start_file));
extern int errors;
extern const char *manual_section;
extern boolean use_input_name;
extern boolean make_embeddable;
extern struct Output_Object_Info output_object[_OBJECT_NUM];
/* Output a string to standard output. */
#define put_string(s) fputs(s, stdout)
/* a malloc that handles errors, and a free that handles NULL */
#ifndef DBMALLOC
void *safe_malloc _((size_t size));
#else
/* use macro so dbmalloc tells us where safe_malloc is called from */
#define safe_malloc(s) malloc(s)
#endif
#define safe_free(p) do { if (p) free(p); p = NULL; } while(0)
void outmem();
void print_includes _((FILE *f));/* write #include lines */
void yyerror _V((const char *fmt, ...));
char *strduplicate _((const char *s));
int strncmpi _((const char *s1, const char *s2, size_t n));
char *strtoupper _((char *s));
void my_perror _((const char *action, const char *filename));
char *alloc_string _((const char *start, const char *end));
#endif
syntax highlighted by Code2HTML, v. 0.9.1