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. 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 GCC_F_STP_H 31 #define GCC_F_STP_H 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 /* ! GCC_F_STP_H */ 509