home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / g77-0.5.15-src.tgz / tar.out / fsf / g77 / f / stp.h < prev    next >
C/C++ Source or Header  |  1996-09-28  |  12KB  |  506 lines

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