]>
Commit | Line | Data |
---|---|---|
5ff904cd JL |
1 | /* stp.h -- Private #include File (module.h template V1.0) |
2 | Copyright (C) 1995 Free Software Foundation, Inc. | |
3 | Contributed by James Craig Burley (burley@gnu.ai.mit.edu). | |
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 | Owning Modules: | |
23 | stp.c | |
24 | ||
25 | Modifications: | |
26 | */ | |
27 | ||
28 | /* Allow multiple inclusion to work. */ | |
29 | ||
30 | #ifndef _H_f_stp | |
31 | #define _H_f_stp | |
32 | ||
33 | /* Simple definitions and enumerations. */ | |
34 | ||
35 | enum _ffestp_acceptix_ | |
36 | { | |
37 | FFESTP_acceptixFORMAT, | |
38 | FFESTP_acceptix | |
39 | }; | |
40 | typedef enum _ffestp_acceptix_ ffestpAcceptIx; | |
41 | ||
42 | enum _ffestp_attrib_ | |
43 | { | |
44 | #if FFESTR_F90 | |
45 | FFESTP_attribALLOCATABLE, | |
46 | #endif | |
47 | FFESTP_attribDIMENSION, | |
48 | FFESTP_attribEXTERNAL, | |
49 | #if FFESTR_F90 | |
50 | FFESTP_attribINTENT, | |
51 | #endif | |
52 | FFESTP_attribINTRINSIC, | |
53 | #if FFESTR_F90 | |
54 | FFESTP_attribOPTIONAL, | |
55 | #endif | |
56 | FFESTP_attribPARAMETER, | |
57 | #if FFESTR_F90 | |
58 | FFESTP_attribPOINTER, | |
59 | #endif | |
60 | #if FFESTR_F90 | |
61 | FFESTP_attribPRIVATE, | |
62 | FFESTP_attribPUBLIC, | |
63 | #endif | |
64 | FFESTP_attribSAVE, | |
65 | #if FFESTR_F90 | |
66 | FFESTP_attribTARGET, | |
67 | #endif | |
68 | FFESTP_attrib | |
69 | }; | |
70 | typedef enum _ffestp_attrib_ ffestpAttrib; | |
71 | ||
72 | enum _ffestp_beruix_ | |
73 | { | |
74 | FFESTP_beruixERR, | |
75 | FFESTP_beruixIOSTAT, | |
76 | FFESTP_beruixUNIT, | |
77 | FFESTP_beruix | |
78 | }; | |
79 | typedef enum _ffestp_beruix_ ffestpBeruIx; | |
80 | ||
81 | enum _ffestp_closeix_ | |
82 | { | |
83 | FFESTP_closeixERR, | |
84 | FFESTP_closeixIOSTAT, | |
85 | FFESTP_closeixSTATUS, | |
86 | FFESTP_closeixUNIT, | |
87 | FFESTP_closeix | |
88 | }; | |
89 | typedef enum _ffestp_closeix_ ffestpCloseIx; | |
90 | ||
91 | enum _ffestp_deleteix_ | |
92 | { | |
93 | FFESTP_deleteixERR, | |
94 | FFESTP_deleteixIOSTAT, | |
95 | FFESTP_deleteixREC, | |
96 | FFESTP_deleteixUNIT, | |
97 | FFESTP_deleteix | |
98 | }; | |
99 | typedef enum _ffestp_deleteix_ ffestpDeleteIx; | |
100 | ||
101 | enum _ffestp_findix_ | |
102 | { | |
103 | FFESTP_findixERR, | |
104 | FFESTP_findixIOSTAT, | |
105 | FFESTP_findixREC, | |
106 | FFESTP_findixUNIT, | |
107 | FFESTP_findix | |
108 | }; | |
109 | typedef enum _ffestp_findix_ ffestpFindIx; | |
110 | ||
111 | enum _ffestp_inquireix_ | |
112 | { | |
113 | FFESTP_inquireixACCESS, | |
114 | FFESTP_inquireixACTION, | |
115 | FFESTP_inquireixBLANK, | |
116 | FFESTP_inquireixCARRIAGECONTROL, | |
117 | FFESTP_inquireixDEFAULTFILE, | |
118 | FFESTP_inquireixDELIM, | |
119 | FFESTP_inquireixDIRECT, | |
120 | FFESTP_inquireixERR, | |
121 | FFESTP_inquireixEXIST, | |
122 | FFESTP_inquireixFILE, | |
123 | FFESTP_inquireixFORM, | |
124 | FFESTP_inquireixFORMATTED, | |
125 | FFESTP_inquireixIOLENGTH, | |
126 | FFESTP_inquireixIOSTAT, | |
127 | FFESTP_inquireixKEYED, | |
128 | FFESTP_inquireixNAME, | |
129 | FFESTP_inquireixNAMED, | |
130 | FFESTP_inquireixNEXTREC, | |
131 | FFESTP_inquireixNUMBER, | |
132 | FFESTP_inquireixOPENED, | |
133 | FFESTP_inquireixORGANIZATION, | |
134 | FFESTP_inquireixPAD, | |
135 | FFESTP_inquireixPOSITION, | |
136 | FFESTP_inquireixREAD, | |
137 | FFESTP_inquireixREADWRITE, | |
138 | FFESTP_inquireixRECL, | |
139 | FFESTP_inquireixRECORDTYPE, | |
140 | FFESTP_inquireixSEQUENTIAL, | |
141 | FFESTP_inquireixUNFORMATTED, | |
142 | FFESTP_inquireixUNIT, | |
143 | FFESTP_inquireixWRITE, | |
144 | FFESTP_inquireix | |
145 | }; | |
146 | typedef enum _ffestp_inquireix_ ffestpInquireIx; | |
147 | ||
148 | enum _ffestp_openix_ | |
149 | { | |
150 | FFESTP_openixACCESS, | |
151 | FFESTP_openixACTION, | |
152 | FFESTP_openixASSOCIATEVARIABLE, | |
153 | FFESTP_openixBLANK, | |
154 | FFESTP_openixBLOCKSIZE, | |
155 | FFESTP_openixBUFFERCOUNT, | |
156 | FFESTP_openixCARRIAGECONTROL, | |
157 | FFESTP_openixDEFAULTFILE, | |
158 | FFESTP_openixDELIM, | |
159 | FFESTP_openixDISPOSE, | |
160 | FFESTP_openixERR, | |
161 | FFESTP_openixEXTENDSIZE, | |
162 | FFESTP_openixFILE, | |
163 | FFESTP_openixFORM, | |
164 | FFESTP_openixINITIALSIZE, | |
165 | FFESTP_openixIOSTAT, | |
166 | FFESTP_openixKEY, | |
167 | FFESTP_openixMAXREC, | |
168 | FFESTP_openixNOSPANBLOCKS, | |
169 | FFESTP_openixORGANIZATION, | |
170 | FFESTP_openixPAD, | |
171 | FFESTP_openixPOSITION, | |
172 | FFESTP_openixREADONLY, | |
173 | FFESTP_openixRECL, | |
174 | FFESTP_openixRECORDTYPE, | |
175 | FFESTP_openixSHARED, | |
176 | FFESTP_openixSTATUS, | |
177 | FFESTP_openixUNIT, | |
178 | FFESTP_openixUSEROPEN, | |
179 | FFESTP_openix | |
180 | }; | |
181 | typedef enum _ffestp_openix_ ffestpOpenIx; | |
182 | ||
183 | enum _ffestp_printix_ | |
184 | { | |
185 | FFESTP_printixFORMAT, | |
186 | FFESTP_printix | |
187 | }; | |
188 | typedef enum _ffestp_printix_ ffestpPrintIx; | |
189 | ||
190 | enum _ffestp_readix_ | |
191 | { | |
192 | FFESTP_readixADVANCE, | |
193 | FFESTP_readixEND, | |
194 | FFESTP_readixEOR, | |
195 | FFESTP_readixERR, | |
196 | FFESTP_readixFORMAT, /* Or NAMELIST (use expr info to | |
197 | distinguish). */ | |
198 | FFESTP_readixIOSTAT, | |
199 | FFESTP_readixKEYEQ, | |
200 | FFESTP_readixKEYGE, | |
201 | FFESTP_readixKEYGT, | |
202 | FFESTP_readixKEYID, | |
203 | FFESTP_readixNULLS, | |
204 | FFESTP_readixREC, | |
205 | FFESTP_readixSIZE, | |
206 | FFESTP_readixUNIT, | |
207 | FFESTP_readix | |
208 | }; | |
209 | typedef enum _ffestp_readix_ ffestpReadIx; | |
210 | ||
211 | enum _ffestp_rewriteix_ | |
212 | { | |
213 | FFESTP_rewriteixERR, | |
214 | FFESTP_rewriteixFMT, | |
215 | FFESTP_rewriteixIOSTAT, | |
216 | FFESTP_rewriteixUNIT, | |
217 | FFESTP_rewriteix | |
218 | }; | |
219 | typedef enum _ffestp_rewriteix_ ffestpRewriteIx; | |
220 | ||
221 | enum _ffestp_typeix_ | |
222 | { | |
223 | FFESTP_typeixFORMAT, | |
224 | FFESTP_typeix | |
225 | }; | |
226 | typedef enum _ffestp_typeix_ ffestpTypeIx; | |
227 | ||
228 | enum _ffestp_vxtcodeix_ | |
229 | { | |
230 | FFESTP_vxtcodeixB, | |
231 | FFESTP_vxtcodeixC, | |
232 | FFESTP_vxtcodeixERR, | |
233 | FFESTP_vxtcodeixF, | |
234 | FFESTP_vxtcodeixIOSTAT, | |
235 | FFESTP_vxtcodeix | |
236 | }; | |
237 | typedef enum _ffestp_vxtcodeix_ ffestpVxtcodeIx; | |
238 | ||
239 | enum _ffestp_writeix_ | |
240 | { | |
241 | FFESTP_writeixADVANCE, | |
242 | FFESTP_writeixEOR, | |
243 | FFESTP_writeixERR, | |
244 | FFESTP_writeixFORMAT, /* Or NAMELIST (use expr info to | |
245 | distinguish). */ | |
246 | FFESTP_writeixIOSTAT, | |
247 | FFESTP_writeixREC, | |
248 | FFESTP_writeixUNIT, | |
249 | FFESTP_writeix | |
250 | }; | |
251 | typedef enum _ffestp_writeix_ ffestpWriteIx; | |
252 | ||
253 | #if FFESTR_F90 | |
254 | enum _ffestp_definedoperator_ | |
255 | { | |
256 | FFESTP_definedoperatorNone, /* INTERFACE generic-name. */ | |
257 | FFESTP_definedoperatorOPERATOR, /* INTERFACE | |
258 | OPERATOR(defined-operator). */ | |
259 | FFESTP_definedoperatorASSIGNMENT, /* INTERFACE ASSIGNMENT(=). */ | |
260 | FFESTP_definedoperatorPOWER, | |
261 | FFESTP_definedoperatorMULT, | |
262 | FFESTP_definedoperatorADD, | |
263 | FFESTP_definedoperatorCONCAT, | |
264 | FFESTP_definedoperatorDIVIDE, | |
265 | FFESTP_definedoperatorSUBTRACT, | |
266 | FFESTP_definedoperatorNOT, | |
267 | FFESTP_definedoperatorAND, | |
268 | FFESTP_definedoperatorOR, | |
269 | FFESTP_definedoperatorEQV, | |
270 | FFESTP_definedoperatorNEQV, | |
271 | FFESTP_definedoperatorEQ, | |
272 | FFESTP_definedoperatorNE, | |
273 | FFESTP_definedoperatorLT, | |
274 | FFESTP_definedoperatorLE, | |
275 | FFESTP_definedoperatorGT, | |
276 | FFESTP_definedoperatorGE, | |
277 | FFESTP_definedoperator | |
278 | }; | |
279 | typedef enum _ffestp_definedoperator_ ffestpDefinedOperator; | |
280 | #endif | |
281 | ||
282 | enum _ffestp_dimtype_ | |
283 | { | |
284 | FFESTP_dimtypeNONE, | |
285 | FFESTP_dimtypeKNOWN, /* Known-bounds dimension list. */ | |
286 | FFESTP_dimtypeADJUSTABLE, /* Adjustable dimension list. */ | |
287 | FFESTP_dimtypeASSUMED, /* Assumed dimension list (known except for | |
288 | last). */ | |
289 | FFESTP_dimtypeADJUSTABLEASSUMED, /* Both. */ | |
290 | FFESTP_dimtype | |
291 | }; | |
292 | typedef enum _ffestp_dimtype_ ffestpDimtype; | |
293 | ||
294 | enum _ffestp_formattype_ | |
295 | { | |
296 | FFESTP_formattypeNone, | |
297 | FFESTP_formattypeI, | |
298 | FFESTP_formattypeB, | |
299 | FFESTP_formattypeO, | |
300 | FFESTP_formattypeZ, | |
301 | FFESTP_formattypeF, | |
302 | FFESTP_formattypeE, | |
303 | FFESTP_formattypeEN, | |
304 | FFESTP_formattypeG, | |
305 | FFESTP_formattypeL, | |
306 | FFESTP_formattypeA, | |
307 | FFESTP_formattypeD, | |
308 | FFESTP_formattypeQ, | |
309 | FFESTP_formattypeDOLLAR, /* $ (V-extension). */ | |
310 | FFESTP_formattypeP, | |
311 | FFESTP_formattypeT, | |
312 | FFESTP_formattypeTL, | |
313 | FFESTP_formattypeTR, | |
314 | FFESTP_formattypeX, | |
315 | FFESTP_formattypeS, | |
316 | FFESTP_formattypeSP, | |
317 | FFESTP_formattypeSS, | |
318 | FFESTP_formattypeBN, | |
319 | FFESTP_formattypeBZ, | |
320 | FFESTP_formattypeH, /* Hollerith, used only for error-reporting. */ | |
321 | FFESTP_formattypeSLASH, | |
322 | FFESTP_formattypeCOLON, | |
323 | FFESTP_formattypeR1016, /* char-literal-constant or cHchars. */ | |
324 | FFESTP_formattypeFORMAT, /* [r](format-item-list). */ | |
325 | FFESTP_formattype | |
326 | }; | |
327 | typedef enum _ffestp_formattype_ ffestpFormatType; | |
328 | ||
329 | enum _ffestp_type_ | |
330 | { | |
331 | FFESTP_typeNone, | |
332 | FFESTP_typeINTEGER, | |
333 | FFESTP_typeREAL, | |
334 | FFESTP_typeCOMPLEX, | |
335 | FFESTP_typeLOGICAL, | |
336 | FFESTP_typeCHARACTER, | |
337 | FFESTP_typeDBLPRCSN, | |
338 | FFESTP_typeDBLCMPLX, | |
339 | FFESTP_typeBYTE, | |
340 | FFESTP_typeWORD, | |
341 | #if FFESTR_F90 | |
342 | FFESTP_typeTYPE, | |
343 | #endif | |
344 | FFESTP_type | |
345 | }; | |
346 | typedef enum _ffestp_type_ ffestpType; | |
347 | ||
348 | /* Typedefs. */ | |
349 | ||
350 | typedef struct _ffest_accept_stmt_ ffestpAcceptStmt; | |
351 | typedef struct _ffest_beru_stmt_ ffestpBeruStmt; | |
352 | typedef struct _ffest_close_stmt_ ffestpCloseStmt; | |
353 | typedef struct _ffest_delete_stmt_ ffestpDeleteStmt; | |
354 | typedef struct _ffestp_file ffestpFile; | |
355 | typedef struct _ffest_find_stmt_ ffestpFindStmt; | |
356 | typedef struct _ffest_inquire_stmt_ ffestpInquireStmt; | |
357 | typedef struct _ffest_open_stmt_ ffestpOpenStmt; | |
358 | typedef struct _ffest_print_stmt_ ffestpPrintStmt; | |
359 | typedef struct _ffest_read_stmt_ ffestpReadStmt; | |
360 | typedef struct _ffest_rewrite_stmt_ ffestpRewriteStmt; | |
361 | typedef struct _ffest_type_stmt_ ffestpTypeStmt; | |
362 | typedef struct _ffest_vxtcode_stmt_ ffestpVxtcodeStmt; | |
363 | typedef struct _ffest_write_stmt_ ffestpWriteStmt; | |
364 | ||
365 | /* Include files needed by this one. */ | |
366 | ||
367 | #include "bld.h" | |
368 | #include "lab.h" | |
369 | #include "lex.h" | |
370 | #include "stp.h" | |
371 | #include "stt.h" | |
372 | ||
373 | /* Structure definitions. */ | |
374 | ||
375 | struct _ffestp_file | |
376 | { | |
377 | bool kw_or_val_present; /* If FALSE, all else is n/a. */ | |
378 | bool kw_present; /* Indicates whether kw has a token. */ | |
379 | bool value_present; /* Indicates whether value/expr are valid. */ | |
380 | bool value_is_label; /* TRUE if expr has no expression, value is | |
381 | NUMBER. */ | |
382 | ffelexToken kw; /* The keyword, iff kw_or_val_present && | |
383 | kw_present. */ | |
384 | ffelexToken value; /* The value, iff kw_or_val_present && | |
385 | value_present. */ | |
386 | union | |
387 | { | |
388 | ffebld expr; /* The expr, iff kw_or_val_present && | |
389 | value_present && !value_is_label. */ | |
390 | ffelab label; /* The label, iff kw_or_val_present && | |
391 | value_present && value_is_label. */ | |
392 | } | |
393 | u; | |
394 | }; | |
395 | ||
396 | struct _ffest_accept_stmt_ | |
397 | { | |
398 | ffestpFile accept_spec[FFESTP_acceptix]; | |
399 | }; | |
400 | ||
401 | struct _ffest_beru_stmt_ | |
402 | { | |
403 | ffestpFile beru_spec[FFESTP_beruix]; | |
404 | }; | |
405 | ||
406 | struct _ffest_close_stmt_ | |
407 | { | |
408 | ffestpFile close_spec[FFESTP_closeix]; | |
409 | }; | |
410 | ||
411 | struct _ffest_delete_stmt_ | |
412 | { | |
413 | ffestpFile delete_spec[FFESTP_deleteix]; | |
414 | }; | |
415 | ||
416 | struct _ffest_find_stmt_ | |
417 | { | |
418 | ffestpFile find_spec[FFESTP_findix]; | |
419 | }; | |
420 | ||
421 | struct _ffest_imp_list_ | |
422 | { | |
423 | ffesttImpList next; | |
424 | ffesttImpList previous; | |
425 | ffelexToken first; | |
426 | ffelexToken last; /* NULL if a single letter. */ | |
427 | }; | |
428 | ||
429 | struct _ffest_inquire_stmt_ | |
430 | { | |
431 | ffestpFile inquire_spec[FFESTP_inquireix]; | |
432 | }; | |
433 | ||
434 | struct _ffest_open_stmt_ | |
435 | { | |
436 | ffestpFile open_spec[FFESTP_openix]; | |
437 | }; | |
438 | ||
439 | struct _ffest_print_stmt_ | |
440 | { | |
441 | ffestpFile print_spec[FFESTP_printix]; | |
442 | }; | |
443 | ||
444 | struct _ffest_read_stmt_ | |
445 | { | |
446 | ffestpFile read_spec[FFESTP_readix]; | |
447 | }; | |
448 | ||
449 | struct _ffest_rewrite_stmt_ | |
450 | { | |
451 | ffestpFile rewrite_spec[FFESTP_rewriteix]; | |
452 | }; | |
453 | ||
454 | struct _ffest_type_stmt_ | |
455 | { | |
456 | ffestpFile type_spec[FFESTP_typeix]; | |
457 | }; | |
458 | ||
459 | struct _ffest_vxtcode_stmt_ | |
460 | { | |
461 | ffestpFile vxtcode_spec[FFESTP_vxtcodeix]; | |
462 | }; | |
463 | ||
464 | struct _ffest_write_stmt_ | |
465 | { | |
466 | ffestpFile write_spec[FFESTP_writeix]; | |
467 | }; | |
468 | ||
469 | union _ffestp_fileu_ | |
470 | { | |
471 | ffestpAcceptStmt accept; | |
472 | ffestpBeruStmt beru; | |
473 | ffestpCloseStmt close; | |
474 | ffestpDeleteStmt delete; | |
475 | ffestpFindStmt find; | |
476 | ffestpInquireStmt inquire; | |
477 | ffestpOpenStmt open; | |
478 | ffestpPrintStmt print; | |
479 | ffestpReadStmt read; | |
480 | ffestpRewriteStmt rewrite; | |
481 | ffestpTypeStmt type; | |
482 | ffestpVxtcodeStmt vxtcode; | |
483 | ffestpWriteStmt write; | |
484 | }; | |
485 | ||
486 | /* Global objects accessed by users of this module. */ | |
487 | ||
488 | extern union _ffestp_fileu_ ffestp_file; | |
489 | ||
490 | /* Declare functions with prototypes. */ | |
491 | ||
492 | ||
493 | /* Define macros. */ | |
494 | ||
495 | #define ffestp_init_0() | |
496 | #define ffestp_init_1() | |
497 | #define ffestp_init_2() | |
498 | #define ffestp_init_3() | |
499 | #define ffestp_init_4() | |
500 | #define ffestp_terminate_0() | |
501 | #define ffestp_terminate_1() | |
502 | #define ffestp_terminate_2() | |
503 | #define ffestp_terminate_3() | |
504 | #define ffestp_terminate_4() | |
505 | ||
506 | /* End of #include file. */ | |
507 | ||
508 | #endif |