
: SYNOPSIS
	skip_past_newline
	get_stuff_in_command	
	paramstuff
	indent
	maybecatstr
;

: ignore
	skip_past_newline 
	get_stuff_in_command
	outputdots
	maybecatstr
	;

: CODE_FRAGMENT
	ignore ;

: external
	0 internalmode ignore ;

: internal 
	1 internalmode ignore ;

- input stack { a b } output b if internal, a if external
: ifinternal
	"" swap 1 internalmode maybecatstr
	swap
	"" swap 0 internalmode maybecatstr
	catstr
	;

- Put note in output string, regardless of internal mode.
: COMMENT
	skip_past_newline
	get_stuff_in_command
	translatecomments
	catstr
	;

- SENUM    enum-type-name
- ENUM     enum-name
- ENUMX    addl-enum-name
- ENUMDOC  doc for preceding enums
- ENDSENUM max-enum-name

: make_enum_header
	dup
	"enum " swap catstr
	" {\n" catstr
	swap "  _dummy_first_" swap catstr catstr
	",\n" catstr
	;
: make_string_table_header
	dup
	"#ifdef _BFD_MAKE_TABLE_" swap catstr swap
	"\n\nstatic const char *const " swap catstr catstr
	"_names[] = { \"@@uninitialized@@\",\n" catstr
	;
: SENUM
	skip_past_newline
	copy_past_newline
	remchar
	dup
	make_enum_header
	swap
	make_string_table_header
	ifinternal
	catstr
	get_stuff_in_command catstr
	translatecomments ;
: ENDSENUM
	skip_past_newline
	copy_past_newline strip_trailing_newlines
	dup
	"  " swap catstr " };\n" catstr	swap
	" \"@@overflow: " swap catstr "@@\",\n};\n#endif\n\n" catstr
	ifinternal
	catstr
	;
: make_enumerator
	"  " swap catstr
	",\n" catstr
	;
: make_enumerator_string
	"  \"" swap catstr
	"\",\n" catstr
	;
: ENUM
	skip_past_newline
	copy_past_newline
	remchar
	dup
	make_enumerator
	swap
	make_enumerator_string
	ifinternal
	;
: ENUMX ENUM catstr ;
: ENUMEQ
	skip_past_newline
	"#define "
	copy_past_newline remchar
	catstr
	" "
	catstr
	copy_past_newline
	catstr
	"" swap 0 internalmode maybecatstr
	;
: ENUMEQX ENUMEQ catstr ;
: ENUMDOC
	skip_past_newline
	get_stuff_in_command
	strip_trailing_newlines
	"\n{* " swap catstr " *}\n" catstr
	translatecomments
	- discard it if we're doing internal mode
	"" swap 0 internalmode maybecatstr
	swap
	catstr catstr
	;
: ENDDD external ;
: SECTION ignore ;
: SUBSECTION ignore ;
: SUBSUBSECTION ignore ;
: INTERNAL_DEFINITION internal ;
: DESCRIPTION ignore ;
: FUNCTION external ;
: RETURNS ignore ;
: TYPEDEF external ;
: INTERNAL_FUNCTION internal ;
: INTERNAL internal ;
: INODE ignore ;
