Bring in a trimmed down gcc-3.4-20040618.
[dragonfly.git] / contrib / gcc-3.4 / gcc / f / str.c
1 /* str.c -- Implementation File (module.c template V1.0)
2    Copyright (C) 1995 Free Software Foundation, Inc.
3    Contributed by James Craig Burley.
4
5 This file is part of GNU Fortran.
6
7 GNU Fortran is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
10 any later version.
11
12 GNU Fortran is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GNU Fortran; see the file COPYING.  If not, write to
19 the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
20 02111-1307, USA.
21
22    Related Modules:
23       None
24
25    Description:
26       Handles recognition of keywords.
27
28    Modifications:
29 */
30
31 /* Include files. */
32
33 #include "proj.h"
34 #include "src.h"
35 #include "str.h"
36 #include "lex.h"
37
38 /* Externals defined here. */
39
40
41 /* Simple definitions and enumerations. */
42
43
44 /* Internal typedefs. */
45
46
47 /* Private include files. */
48
49
50 /* Internal structure definitions. */
51
52
53 /* Static objects accessed by functions in this module. */
54
55
56 /* Static functions (internal). */
57
58
59 /* Internal macros. */
60 \f
61
62 /* ffestr_first -- Look up the first names in a statement
63
64    ffestrFirst kw;
65    ffelexToken t;
66    kw = ffestr_first(t);
67
68    Returns FFESTR_firstNone if no matches, else FFESTR_firstXYZ if the
69    NAME or NAMES token matches XYZ.  t must be a NAME or NAMES token or this
70    routine will crash.
71
72    This routine's code is actually written by a utility called FINI, itself
73    written specifically for the Gnu Fortran project.  FINI takes an input
74    file, in this case "ffe_first.fini", consisting primarily of a
75    list of statements (ASSIGN, IF, DO, DOWHILE), and outputs a C file,
76    "str-1t.j", that contains the definition of the
77    ffestr_first function.  We #include that file here.
78
79    30-Jan-90  JCB  2.0
80       Updated for Fortran 90.
81 */
82
83 #ifndef MAKING_DEPENDENCIES
84 #include "str-1t.j"
85 #endif
86 /* ffestr_format -- Look up format names in a statement
87
88    ffestrFormat kw;
89    ffelexToken t;
90    kw = ffestr_format(t);
91
92    Returns FFESTR_formatNone if no matches, else FFESTR_formatXYZ if the
93    NAME or NAMES token matches XYZ.  t must be a NAME or NAMES token or this
94    routine will crash.
95
96    This routine's code is actually written by a utility called FINI, itself
97    written specifically for the Gnu Fortran project.  FINI takes an input
98    file, in this case "ffe_format.fini", consisting primarily of a
99    list of format keywords (I, F, TL, TR), and outputs a C file,
100    "str-fo.j", that contains the definition of the
101    ffestr_format function.  We #include that file here.
102
103 */
104
105 #ifndef MAKING_DEPENDENCIES
106 #include "str-fo.j"
107 #endif
108 /* ffestr_genio -- Look up genio names in a statement
109
110    ffestrGenio kw;
111    ffelexToken t;
112    kw = ffestr_genio(t);
113
114    Returns FFESTR_genioNone if no matches, else FFESTR_genioXYZ if the
115    NAME or NAMES token matches XYZ.  t must be a NAME or NAMES token or this
116    routine will crash.
117
118    This routine's code is actually written by a utility called FINI, itself
119    written specifically for the Gnu Fortran project.  FINI takes an input
120    file, in this case "ffe_genio.fini", consisting primarily of a
121    list of statement keywords (TO, FUNCTION), and outputs a C file,
122    "str-io.j", that contains the definition of the
123    ffestr_genio function.  We #include that file here.
124
125 */
126
127 #ifndef MAKING_DEPENDENCIES
128 #include "str-io.j"
129 #endif
130 /* ffestr_inquire -- Look up inquire names in a statement
131
132    ffestrInquire kw;
133    ffelexToken t;
134    kw = ffestr_inquire(t);
135
136    Returns FFESTR_inquireNone if no matches, else FFESTR_inquireXYZ if the
137    NAME or NAMES token matches XYZ.  t must be a NAME or NAMES token or this
138    routine will crash.
139
140    This routine's code is actually written by a utility called FINI, itself
141    written specifically for the Gnu Fortran project.  FINI takes an input
142    file, in this case "ffe_inquire.fini", consisting primarily of a
143    list of statement keywords (TO, FUNCTION), and outputs a C file,
144    "str-nq.j", that contains the definition of the
145    ffestr_inquire function.  We #include that file here.
146
147 */
148
149 #ifndef MAKING_DEPENDENCIES
150 #include "str-nq.j"
151 #endif
152 /* ffestr_open -- Look up open names in a statement
153
154    ffestrOpen kw;
155    ffelexToken t;
156    kw = ffestr_open(t);
157
158    Returns FFESTR_openNone if no matches, else FFESTR_openXYZ if the
159    NAME or NAMES token matches XYZ.  t must be a NAME or NAMES token or this
160    routine will crash.
161
162    This routine's code is actually written by a utility called FINI, itself
163    written specifically for the Gnu Fortran project.  FINI takes an input
164    file, in this case "ffe_open.fini", consisting primarily of a
165    list of statement keywords (TO, FUNCTION), and outputs a C file,
166    "str-op.j", that contains the definition of the
167    ffestr_open function.  We #include that file here.
168
169 */
170
171 #ifndef MAKING_DEPENDENCIES
172 #include "str-op.j"
173 #endif
174 /* ffestr_other -- Look up other names in a statement
175
176    ffestrOther kw;
177    ffelexToken t;
178    kw = ffestr_other(t);
179
180    Returns FFESTR_otherNone if no matches, else FFESTR_otherXYZ if the
181    NAME or NAMES token matches XYZ.  t must be a NAME or NAMES token or this
182    routine will crash.
183
184    This routine's code is actually written by a utility called FINI, itself
185    written specifically for the Gnu Fortran project.  FINI takes an input
186    file, in this case "ffe_other.fini", consisting primarily of a
187    list of statement keywords (TO, FUNCTION), and outputs a C file,
188    "str-ot.j", that contains the definition of the
189    ffestr_other function.  We #include that file here.
190
191 */
192
193 #ifndef MAKING_DEPENDENCIES
194 #include "str-ot.j"
195 #endif
196 /* ffestr_second -- Look up the second name in a statement
197
198    ffestrSecond kw;
199    ffelexToken t;
200    kw = ffestr_second(t);
201
202    Returns FFESTR_secondNone if no matches, else FFESTR_secondXYZ if the
203    NAME or NAMES token matches XYZ.  t must be a NAME or NAMES token or this
204    routine will crash.
205
206    This routine's code is actually written by a utility called FINI, itself
207    written specifically for the Gnu Fortran project.  FINI takes an input
208    file, in this case "ffe_second.fini", consisting primarily of a
209    list of statement keywords (TO, FUNCTION), and outputs a C file,
210    "str-2t.j", that contains the definition of the
211    ffestr_second function.  We #include that file here.
212
213 */
214
215 #ifndef MAKING_DEPENDENCIES
216 #include "str-2t.j"
217 #endif