diff options
Diffstat (limited to 'c2man.h')
-rw-r--r-- | c2man.h | 284 |
1 files changed, 284 insertions, 0 deletions
@@ -0,0 +1,284 @@ +/* $Id: c2man.h,v 1.1 2004-05-03 05:17:48 behdad Exp $ + * + * 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 |