509 lines
12 KiB
C
509 lines
12 KiB
C
/* stp.h -- Private #include File (module.h template V1.0)
|
|
Copyright (C) 1995 Free Software Foundation, Inc.
|
|
Contributed by James Craig Burley (burley@gnu.org).
|
|
|
|
This file is part of GNU Fortran.
|
|
|
|
GNU Fortran is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 2, or (at your option)
|
|
any later version.
|
|
|
|
GNU Fortran is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with GNU Fortran; see the file COPYING. If not, write to
|
|
the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
|
|
02111-1307, USA.
|
|
|
|
Owning Modules:
|
|
stp.c
|
|
|
|
Modifications:
|
|
*/
|
|
|
|
/* Allow multiple inclusion to work. */
|
|
|
|
#ifndef _H_f_stp
|
|
#define _H_f_stp
|
|
|
|
/* Simple definitions and enumerations. */
|
|
|
|
enum _ffestp_acceptix_
|
|
{
|
|
FFESTP_acceptixFORMAT,
|
|
FFESTP_acceptix
|
|
};
|
|
typedef enum _ffestp_acceptix_ ffestpAcceptIx;
|
|
|
|
enum _ffestp_attrib_
|
|
{
|
|
#if FFESTR_F90
|
|
FFESTP_attribALLOCATABLE,
|
|
#endif
|
|
FFESTP_attribDIMENSION,
|
|
FFESTP_attribEXTERNAL,
|
|
#if FFESTR_F90
|
|
FFESTP_attribINTENT,
|
|
#endif
|
|
FFESTP_attribINTRINSIC,
|
|
#if FFESTR_F90
|
|
FFESTP_attribOPTIONAL,
|
|
#endif
|
|
FFESTP_attribPARAMETER,
|
|
#if FFESTR_F90
|
|
FFESTP_attribPOINTER,
|
|
#endif
|
|
#if FFESTR_F90
|
|
FFESTP_attribPRIVATE,
|
|
FFESTP_attribPUBLIC,
|
|
#endif
|
|
FFESTP_attribSAVE,
|
|
#if FFESTR_F90
|
|
FFESTP_attribTARGET,
|
|
#endif
|
|
FFESTP_attrib
|
|
};
|
|
typedef enum _ffestp_attrib_ ffestpAttrib;
|
|
|
|
enum _ffestp_beruix_
|
|
{
|
|
FFESTP_beruixERR,
|
|
FFESTP_beruixIOSTAT,
|
|
FFESTP_beruixUNIT,
|
|
FFESTP_beruix
|
|
};
|
|
typedef enum _ffestp_beruix_ ffestpBeruIx;
|
|
|
|
enum _ffestp_closeix_
|
|
{
|
|
FFESTP_closeixERR,
|
|
FFESTP_closeixIOSTAT,
|
|
FFESTP_closeixSTATUS,
|
|
FFESTP_closeixUNIT,
|
|
FFESTP_closeix
|
|
};
|
|
typedef enum _ffestp_closeix_ ffestpCloseIx;
|
|
|
|
enum _ffestp_deleteix_
|
|
{
|
|
FFESTP_deleteixERR,
|
|
FFESTP_deleteixIOSTAT,
|
|
FFESTP_deleteixREC,
|
|
FFESTP_deleteixUNIT,
|
|
FFESTP_deleteix
|
|
};
|
|
typedef enum _ffestp_deleteix_ ffestpDeleteIx;
|
|
|
|
enum _ffestp_findix_
|
|
{
|
|
FFESTP_findixERR,
|
|
FFESTP_findixIOSTAT,
|
|
FFESTP_findixREC,
|
|
FFESTP_findixUNIT,
|
|
FFESTP_findix
|
|
};
|
|
typedef enum _ffestp_findix_ ffestpFindIx;
|
|
|
|
enum _ffestp_inquireix_
|
|
{
|
|
FFESTP_inquireixACCESS,
|
|
FFESTP_inquireixACTION,
|
|
FFESTP_inquireixBLANK,
|
|
FFESTP_inquireixCARRIAGECONTROL,
|
|
FFESTP_inquireixDEFAULTFILE,
|
|
FFESTP_inquireixDELIM,
|
|
FFESTP_inquireixDIRECT,
|
|
FFESTP_inquireixERR,
|
|
FFESTP_inquireixEXIST,
|
|
FFESTP_inquireixFILE,
|
|
FFESTP_inquireixFORM,
|
|
FFESTP_inquireixFORMATTED,
|
|
FFESTP_inquireixIOLENGTH,
|
|
FFESTP_inquireixIOSTAT,
|
|
FFESTP_inquireixKEYED,
|
|
FFESTP_inquireixNAME,
|
|
FFESTP_inquireixNAMED,
|
|
FFESTP_inquireixNEXTREC,
|
|
FFESTP_inquireixNUMBER,
|
|
FFESTP_inquireixOPENED,
|
|
FFESTP_inquireixORGANIZATION,
|
|
FFESTP_inquireixPAD,
|
|
FFESTP_inquireixPOSITION,
|
|
FFESTP_inquireixREAD,
|
|
FFESTP_inquireixREADWRITE,
|
|
FFESTP_inquireixRECL,
|
|
FFESTP_inquireixRECORDTYPE,
|
|
FFESTP_inquireixSEQUENTIAL,
|
|
FFESTP_inquireixUNFORMATTED,
|
|
FFESTP_inquireixUNIT,
|
|
FFESTP_inquireixWRITE,
|
|
FFESTP_inquireix
|
|
};
|
|
typedef enum _ffestp_inquireix_ ffestpInquireIx;
|
|
|
|
enum _ffestp_openix_
|
|
{
|
|
FFESTP_openixACCESS,
|
|
FFESTP_openixACTION,
|
|
FFESTP_openixASSOCIATEVARIABLE,
|
|
FFESTP_openixBLANK,
|
|
FFESTP_openixBLOCKSIZE,
|
|
FFESTP_openixBUFFERCOUNT,
|
|
FFESTP_openixCARRIAGECONTROL,
|
|
FFESTP_openixDEFAULTFILE,
|
|
FFESTP_openixDELIM,
|
|
FFESTP_openixDISPOSE,
|
|
FFESTP_openixERR,
|
|
FFESTP_openixEXTENDSIZE,
|
|
FFESTP_openixFILE,
|
|
FFESTP_openixFORM,
|
|
FFESTP_openixINITIALSIZE,
|
|
FFESTP_openixIOSTAT,
|
|
FFESTP_openixKEY,
|
|
FFESTP_openixMAXREC,
|
|
FFESTP_openixNOSPANBLOCKS,
|
|
FFESTP_openixORGANIZATION,
|
|
FFESTP_openixPAD,
|
|
FFESTP_openixPOSITION,
|
|
FFESTP_openixREADONLY,
|
|
FFESTP_openixRECL,
|
|
FFESTP_openixRECORDTYPE,
|
|
FFESTP_openixSHARED,
|
|
FFESTP_openixSTATUS,
|
|
FFESTP_openixUNIT,
|
|
FFESTP_openixUSEROPEN,
|
|
FFESTP_openix
|
|
};
|
|
typedef enum _ffestp_openix_ ffestpOpenIx;
|
|
|
|
enum _ffestp_printix_
|
|
{
|
|
FFESTP_printixFORMAT,
|
|
FFESTP_printix
|
|
};
|
|
typedef enum _ffestp_printix_ ffestpPrintIx;
|
|
|
|
enum _ffestp_readix_
|
|
{
|
|
FFESTP_readixADVANCE,
|
|
FFESTP_readixEND,
|
|
FFESTP_readixEOR,
|
|
FFESTP_readixERR,
|
|
FFESTP_readixFORMAT, /* Or NAMELIST (use expr info to
|
|
distinguish). */
|
|
FFESTP_readixIOSTAT,
|
|
FFESTP_readixKEYEQ,
|
|
FFESTP_readixKEYGE,
|
|
FFESTP_readixKEYGT,
|
|
FFESTP_readixKEYID,
|
|
FFESTP_readixNULLS,
|
|
FFESTP_readixREC,
|
|
FFESTP_readixSIZE,
|
|
FFESTP_readixUNIT,
|
|
FFESTP_readix
|
|
};
|
|
typedef enum _ffestp_readix_ ffestpReadIx;
|
|
|
|
enum _ffestp_rewriteix_
|
|
{
|
|
FFESTP_rewriteixERR,
|
|
FFESTP_rewriteixFMT,
|
|
FFESTP_rewriteixIOSTAT,
|
|
FFESTP_rewriteixUNIT,
|
|
FFESTP_rewriteix
|
|
};
|
|
typedef enum _ffestp_rewriteix_ ffestpRewriteIx;
|
|
|
|
enum _ffestp_typeix_
|
|
{
|
|
FFESTP_typeixFORMAT,
|
|
FFESTP_typeix
|
|
};
|
|
typedef enum _ffestp_typeix_ ffestpTypeIx;
|
|
|
|
enum _ffestp_vxtcodeix_
|
|
{
|
|
FFESTP_vxtcodeixB,
|
|
FFESTP_vxtcodeixC,
|
|
FFESTP_vxtcodeixERR,
|
|
FFESTP_vxtcodeixF,
|
|
FFESTP_vxtcodeixIOSTAT,
|
|
FFESTP_vxtcodeix
|
|
};
|
|
typedef enum _ffestp_vxtcodeix_ ffestpVxtcodeIx;
|
|
|
|
enum _ffestp_writeix_
|
|
{
|
|
FFESTP_writeixADVANCE,
|
|
FFESTP_writeixEOR,
|
|
FFESTP_writeixERR,
|
|
FFESTP_writeixFORMAT, /* Or NAMELIST (use expr info to
|
|
distinguish). */
|
|
FFESTP_writeixIOSTAT,
|
|
FFESTP_writeixREC,
|
|
FFESTP_writeixUNIT,
|
|
FFESTP_writeix
|
|
};
|
|
typedef enum _ffestp_writeix_ ffestpWriteIx;
|
|
|
|
#if FFESTR_F90
|
|
enum _ffestp_definedoperator_
|
|
{
|
|
FFESTP_definedoperatorNone, /* INTERFACE generic-name. */
|
|
FFESTP_definedoperatorOPERATOR, /* INTERFACE
|
|
OPERATOR(defined-operator). */
|
|
FFESTP_definedoperatorASSIGNMENT, /* INTERFACE ASSIGNMENT(=). */
|
|
FFESTP_definedoperatorPOWER,
|
|
FFESTP_definedoperatorMULT,
|
|
FFESTP_definedoperatorADD,
|
|
FFESTP_definedoperatorCONCAT,
|
|
FFESTP_definedoperatorDIVIDE,
|
|
FFESTP_definedoperatorSUBTRACT,
|
|
FFESTP_definedoperatorNOT,
|
|
FFESTP_definedoperatorAND,
|
|
FFESTP_definedoperatorOR,
|
|
FFESTP_definedoperatorEQV,
|
|
FFESTP_definedoperatorNEQV,
|
|
FFESTP_definedoperatorEQ,
|
|
FFESTP_definedoperatorNE,
|
|
FFESTP_definedoperatorLT,
|
|
FFESTP_definedoperatorLE,
|
|
FFESTP_definedoperatorGT,
|
|
FFESTP_definedoperatorGE,
|
|
FFESTP_definedoperator
|
|
};
|
|
typedef enum _ffestp_definedoperator_ ffestpDefinedOperator;
|
|
#endif
|
|
|
|
enum _ffestp_dimtype_
|
|
{
|
|
FFESTP_dimtypeNONE,
|
|
FFESTP_dimtypeKNOWN, /* Known-bounds dimension list. */
|
|
FFESTP_dimtypeADJUSTABLE, /* Adjustable dimension list. */
|
|
FFESTP_dimtypeASSUMED, /* Assumed dimension list (known except for
|
|
last). */
|
|
FFESTP_dimtypeADJUSTABLEASSUMED, /* Both. */
|
|
FFESTP_dimtype
|
|
};
|
|
typedef enum _ffestp_dimtype_ ffestpDimtype;
|
|
|
|
enum _ffestp_formattype_
|
|
{
|
|
FFESTP_formattypeNone,
|
|
FFESTP_formattypeI,
|
|
FFESTP_formattypeB,
|
|
FFESTP_formattypeO,
|
|
FFESTP_formattypeZ,
|
|
FFESTP_formattypeF,
|
|
FFESTP_formattypeE,
|
|
FFESTP_formattypeEN,
|
|
FFESTP_formattypeG,
|
|
FFESTP_formattypeL,
|
|
FFESTP_formattypeA,
|
|
FFESTP_formattypeD,
|
|
FFESTP_formattypeQ,
|
|
FFESTP_formattypeDOLLAR, /* $ (V-extension). */
|
|
FFESTP_formattypeP,
|
|
FFESTP_formattypeT,
|
|
FFESTP_formattypeTL,
|
|
FFESTP_formattypeTR,
|
|
FFESTP_formattypeX,
|
|
FFESTP_formattypeS,
|
|
FFESTP_formattypeSP,
|
|
FFESTP_formattypeSS,
|
|
FFESTP_formattypeBN,
|
|
FFESTP_formattypeBZ,
|
|
FFESTP_formattypeH, /* Hollerith, used only for error-reporting. */
|
|
FFESTP_formattypeSLASH,
|
|
FFESTP_formattypeCOLON,
|
|
FFESTP_formattypeR1016, /* char-literal-constant or cHchars. */
|
|
FFESTP_formattypeFORMAT, /* [r](format-item-list). */
|
|
FFESTP_formattype
|
|
};
|
|
typedef enum _ffestp_formattype_ ffestpFormatType;
|
|
|
|
enum _ffestp_type_
|
|
{
|
|
FFESTP_typeNone,
|
|
FFESTP_typeINTEGER,
|
|
FFESTP_typeREAL,
|
|
FFESTP_typeCOMPLEX,
|
|
FFESTP_typeLOGICAL,
|
|
FFESTP_typeCHARACTER,
|
|
FFESTP_typeDBLPRCSN,
|
|
FFESTP_typeDBLCMPLX,
|
|
FFESTP_typeBYTE,
|
|
FFESTP_typeWORD,
|
|
#if FFESTR_F90
|
|
FFESTP_typeTYPE,
|
|
#endif
|
|
FFESTP_type
|
|
};
|
|
typedef enum _ffestp_type_ ffestpType;
|
|
|
|
/* Typedefs. */
|
|
|
|
typedef struct _ffest_accept_stmt_ ffestpAcceptStmt;
|
|
typedef struct _ffest_beru_stmt_ ffestpBeruStmt;
|
|
typedef struct _ffest_close_stmt_ ffestpCloseStmt;
|
|
typedef struct _ffest_delete_stmt_ ffestpDeleteStmt;
|
|
typedef struct _ffestp_file ffestpFile;
|
|
typedef struct _ffest_find_stmt_ ffestpFindStmt;
|
|
typedef struct _ffest_inquire_stmt_ ffestpInquireStmt;
|
|
typedef struct _ffest_open_stmt_ ffestpOpenStmt;
|
|
typedef struct _ffest_print_stmt_ ffestpPrintStmt;
|
|
typedef struct _ffest_read_stmt_ ffestpReadStmt;
|
|
typedef struct _ffest_rewrite_stmt_ ffestpRewriteStmt;
|
|
typedef struct _ffest_type_stmt_ ffestpTypeStmt;
|
|
typedef struct _ffest_vxtcode_stmt_ ffestpVxtcodeStmt;
|
|
typedef struct _ffest_write_stmt_ ffestpWriteStmt;
|
|
|
|
/* Include files needed by this one. */
|
|
|
|
#include "bld.h"
|
|
#include "lab.h"
|
|
#include "lex.h"
|
|
#include "stp.h"
|
|
#include "stt.h"
|
|
|
|
/* Structure definitions. */
|
|
|
|
struct _ffestp_file
|
|
{
|
|
bool kw_or_val_present; /* If FALSE, all else is n/a. */
|
|
bool kw_present; /* Indicates whether kw has a token. */
|
|
bool value_present; /* Indicates whether value/expr are valid. */
|
|
bool value_is_label; /* TRUE if expr has no expression, value is
|
|
NUMBER. */
|
|
ffelexToken kw; /* The keyword, iff kw_or_val_present &&
|
|
kw_present. */
|
|
ffelexToken value; /* The value, iff kw_or_val_present &&
|
|
value_present. */
|
|
union
|
|
{
|
|
ffebld expr; /* The expr, iff kw_or_val_present &&
|
|
value_present && !value_is_label. */
|
|
ffelab label; /* The label, iff kw_or_val_present &&
|
|
value_present && value_is_label. */
|
|
}
|
|
u;
|
|
};
|
|
|
|
struct _ffest_accept_stmt_
|
|
{
|
|
ffestpFile accept_spec[FFESTP_acceptix];
|
|
};
|
|
|
|
struct _ffest_beru_stmt_
|
|
{
|
|
ffestpFile beru_spec[FFESTP_beruix];
|
|
};
|
|
|
|
struct _ffest_close_stmt_
|
|
{
|
|
ffestpFile close_spec[FFESTP_closeix];
|
|
};
|
|
|
|
struct _ffest_delete_stmt_
|
|
{
|
|
ffestpFile delete_spec[FFESTP_deleteix];
|
|
};
|
|
|
|
struct _ffest_find_stmt_
|
|
{
|
|
ffestpFile find_spec[FFESTP_findix];
|
|
};
|
|
|
|
struct _ffest_imp_list_
|
|
{
|
|
ffesttImpList next;
|
|
ffesttImpList previous;
|
|
ffelexToken first;
|
|
ffelexToken last; /* NULL if a single letter. */
|
|
};
|
|
|
|
struct _ffest_inquire_stmt_
|
|
{
|
|
ffestpFile inquire_spec[FFESTP_inquireix];
|
|
};
|
|
|
|
struct _ffest_open_stmt_
|
|
{
|
|
ffestpFile open_spec[FFESTP_openix];
|
|
};
|
|
|
|
struct _ffest_print_stmt_
|
|
{
|
|
ffestpFile print_spec[FFESTP_printix];
|
|
};
|
|
|
|
struct _ffest_read_stmt_
|
|
{
|
|
ffestpFile read_spec[FFESTP_readix];
|
|
};
|
|
|
|
struct _ffest_rewrite_stmt_
|
|
{
|
|
ffestpFile rewrite_spec[FFESTP_rewriteix];
|
|
};
|
|
|
|
struct _ffest_type_stmt_
|
|
{
|
|
ffestpFile type_spec[FFESTP_typeix];
|
|
};
|
|
|
|
struct _ffest_vxtcode_stmt_
|
|
{
|
|
ffestpFile vxtcode_spec[FFESTP_vxtcodeix];
|
|
};
|
|
|
|
struct _ffest_write_stmt_
|
|
{
|
|
ffestpFile write_spec[FFESTP_writeix];
|
|
};
|
|
|
|
union _ffestp_fileu_
|
|
{
|
|
ffestpAcceptStmt accept;
|
|
ffestpBeruStmt beru;
|
|
ffestpCloseStmt close;
|
|
ffestpDeleteStmt delete;
|
|
ffestpFindStmt find;
|
|
ffestpInquireStmt inquire;
|
|
ffestpOpenStmt open;
|
|
ffestpPrintStmt print;
|
|
ffestpReadStmt read;
|
|
ffestpRewriteStmt rewrite;
|
|
ffestpTypeStmt type;
|
|
ffestpVxtcodeStmt vxtcode;
|
|
ffestpWriteStmt write;
|
|
};
|
|
|
|
/* Global objects accessed by users of this module. */
|
|
|
|
extern union _ffestp_fileu_ ffestp_file;
|
|
|
|
/* Declare functions with prototypes. */
|
|
|
|
|
|
/* Define macros. */
|
|
|
|
#define ffestp_init_0()
|
|
#define ffestp_init_1()
|
|
#define ffestp_init_2()
|
|
#define ffestp_init_3()
|
|
#define ffestp_init_4()
|
|
#define ffestp_terminate_0()
|
|
#define ffestp_terminate_1()
|
|
#define ffestp_terminate_2()
|
|
#define ffestp_terminate_3()
|
|
#define ffestp_terminate_4()
|
|
|
|
/* End of #include file. */
|
|
|
|
#endif
|