1- Source extraction program for chew.
2-  Copyright (C) 1990-2024 Free Software Foundation, Inc.
3-  This file is part of BFD, the Binary File Descriptor library.
4
5-  This program is free software; you can redistribute it and/or modify
6-  it under the terms of the GNU General Public License as published by
7-  the Free Software Foundation; either version 3 of the License, or
8-  (at your option) any later version.
9
10-  This program is distributed in the hope that it will be useful,
11-  but WITHOUT ANY WARRANTY; without even the implied warranty of
12-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13-  GNU General Public License for more details.
14
15-  You should have received a copy of the GNU General Public License
16-  along with this program; if not, write to the Free Software
17-  Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
18
19- chew.c keywords defined here put output into bfd-in2.h and libbfd.h or
20- libcoff.h, from comments in the source.  See also doc.str.
21- Output lines generally come from comment lines starting with a dot,
22- or from keywords like SYNOPSIS.  Output switches to bfd-in2.h at the
23- end of each comment.  Use INTERNAL* to output to libbfd.h.
24-
25- EXTERNAL: output to bfd-in2.h, nothing to docs
26- INTERNAL: output to libbfd.h, nothing to docs
27- CODE_FRAGMENT: output to header and docs
28- FUNCTION: output to bfd-in2.h and docs
29- INTERNAL_FUNCTION: output to libbfd.h and docs
30- DEFINITION: alias for FUNCTION, but generally doesn't have SYNOPSIS,
31-	used for structs and other random code
32- INTERNAL_DEFINITION: as above, but output to libbfd.h and docs
33- ENUM* outputs to bfd-in2.h, libbfd.h and docs.
34
35: SYNOPSIS
36	skip_past_newline
37	get_stuff_in_command	
38	translatecomments
39	strip_trailing_newlines
40	remchar
41	" ATTRIBUTE_HIDDEN" internalmode @ catstrif
42	";\n\n" catstr
43	indent
44	maybecatstr
45;
46
47- Ignore stuff that is for the docs.  Output lines starting with dots.
48: ignore
49	skip_past_newline 
50	get_stuff_in_command
51	outputdots
52	maybecatstr
53	;
54
55: CODE_FRAGMENT
56	ignore ;
57
58- Output goes to bfd-in2.h
59: EXTERNAL
60	0 internalmode ! ignore ;
61
62- Output goes to libbfd.h/libcoff.h
63: INTERNAL 
64	1 internalmode ! ignore ;
65
66- input stack { a b } output b if internal, a if external
67: ifinternal
68	"" swap 1 internalmode ! maybecatstr
69	swap
70	"" swap 0 internalmode ! maybecatstr
71	catstr
72	;
73
74- Put note in output string, regardless of internal mode.
75: COMMENT
76	skip_past_newline
77	get_stuff_in_command
78	translatecomments
79	catstr
80	;
81
82- SENUM    enum-type-name
83- ENUM     enum-name
84- ENUMX    addl-enum-name
85- ENUMDOC  doc for preceding enums
86- ENDSENUM max-enum-name
87
88: make_enum_header
89	dup
90	"enum " swap catstr
91	"\n{\n" catstr
92	swap "  _dummy_first_" swap catstr catstr
93	",\n" catstr
94	;
95: make_string_table_header
96	dup
97	"#ifdef _BFD_MAKE_TABLE_" swap catstr swap
98	"\n\nstatic const char *const " swap catstr catstr
99	"_names[] = { \"@@uninitialized@@\",\n" catstr
100	;
101: SENUM
102	skip_past_newline
103	copy_past_newline
104	remchar
105	dup
106	make_enum_header
107	swap
108	make_string_table_header
109	ifinternal
110	catstr
111	get_stuff_in_command catstr
112	translatecomments ;
113: ENDSENUM
114	skip_past_newline
115	copy_past_newline strip_trailing_newlines
116	dup
117	"  " swap catstr "\n};\n" catstr swap
118	" \"@@overflow: " swap catstr "@@\",\n};\n#endif\n\n" catstr
119	ifinternal
120	catstr
121	;
122: make_enumerator
123	"  " swap catstr
124	",\n" catstr
125	;
126: make_enumerator_string
127	"  \"" swap catstr
128	"\",\n" catstr
129	;
130: ENUM
131	skip_past_newline
132	copy_past_newline
133	remchar
134	dup
135	make_enumerator
136	swap
137	make_enumerator_string
138	ifinternal
139	;
140: ENUMX ENUM catstr ;
141: ENUMEQ
142	skip_past_newline
143	"#define "
144	copy_past_newline remchar
145	catstr
146	" "
147	catstr
148	copy_past_newline
149	catstr
150	"" swap 0 internalmode ! maybecatstr
151	;
152: ENUMEQX ENUMEQ catstr ;
153: ENUMDOC
154	skip_past_newline
155	get_stuff_in_command
156	strip_trailing_newlines
157	"  " wrap_comment
158	"\n" swap catstr "\n" catstr
159	- discard it if we're doing internal mode
160	"" swap 0 internalmode ! maybecatstr
161	swap
162	catstr catstr
163	;
164: SECTION ignore ;
165: SUBSECTION ignore ;
166: SUBSUBSECTION ignore ;
167: INODE ignore ;
168: DESCRIPTION ignore ;
169: ENDDD EXTERNAL ;
170: FUNCTION EXTERNAL ;
171: INTERNAL_FUNCTION INTERNAL ;
172: DEFINITION EXTERNAL ;
173: INTERNAL_DEFINITION INTERNAL ;
174