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 / global.h < prev    next >
C/C++ Source or Header  |  1996-09-28  |  4KB  |  139 lines

  1. /* global.h -- Public #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.       global.c
  23.  
  24.    Modifications:
  25. */
  26.  
  27. /* Allow multiple inclusion to work. */
  28.  
  29. #ifndef _H_f_global
  30. #define _H_f_global
  31.  
  32. /* Simple definitions and enumerations. */
  33.  
  34. typedef enum
  35.   {
  36.     FFEGLOBAL_typeMAIN,
  37.     FFEGLOBAL_typeSUBR,
  38.     FFEGLOBAL_typeFUNC,
  39.     FFEGLOBAL_typeBDATA,
  40.     FFEGLOBAL_typeCOMMON,
  41.     FFEGLOBAL_typeANY,        /* Confusion reigns, so just ignore. */
  42.     FFEGLOBAL_type
  43.   } ffeglobalType;
  44.  
  45. /* Typedefs. */
  46.  
  47. typedef struct _ffeglobal_ *ffeglobal;
  48.  
  49. /* Include files needed by this one. */
  50.  
  51. #include "lex.h"
  52. #include "name.h"
  53. #include "symbol.h"
  54. #include "target.h"
  55. #include "top.h"
  56.  
  57. /* Structure definitions. */
  58.  
  59. struct _ffeglobal_
  60.   {
  61.     ffelexToken t;
  62.     ffename n;
  63. #ifdef FFECOM_globalHOOK
  64.     ffecomGlobal hook;
  65. #endif
  66.     ffeCounter init;        /* COMMON block given initial value(s) in
  67.                    this progunit. */
  68.     ffelexToken initt;        /* First initial value. */
  69.     ffeglobalType type;
  70.     bool have_pad;        /* Padding info avail for COMMON? */
  71.     ffetargetAlign pad;        /* Initial padding for COMMON. */
  72.     ffewhereLine pad_where_line;
  73.     ffewhereColumn pad_where_col;
  74.     bool have_save;        /* Save info avail for COMMON? */
  75.     bool save;            /* Save info for COMMON. */
  76.     ffewhereLine save_where_line;
  77.     ffewhereColumn save_where_col;
  78.     bool have_size;        /* Size info avail for COMMON? */
  79.     long size;            /* Size info for COMMON. */
  80.     bool blank;            /* TRUE if blank COMMON. */
  81.   };
  82.  
  83. /* Global objects accessed by users of this module. */
  84.  
  85.  
  86. /* Declare functions with prototypes. */
  87.  
  88. void ffeglobal_drive (ffeglobal (*fn) ());
  89. void ffeglobal_init_1 (void);
  90. void ffeglobal_init_common (ffesymbol s, ffelexToken t);
  91. void ffeglobal_new_progunit_ (ffesymbol s, ffelexToken t, ffeglobalType type);
  92. void ffeglobal_new_common (ffesymbol s, ffelexToken t, bool blank);
  93. void ffeglobal_pad_common (ffesymbol s, ffetargetAlign pad, ffewhereLine wl,
  94.                ffewhereColumn wc);
  95. void ffeglobal_save_common (ffesymbol s, bool save, ffewhereLine wl,
  96.                 ffewhereColumn wc);
  97. bool ffeglobal_size_common (ffesymbol s, long size);
  98. void ffeglobal_terminate_1 (void);
  99.  
  100. /* Define macros. */
  101.  
  102. #if FFECOM_targetCURRENT == FFECOM_targetFFE
  103. #define FFEGLOBAL_ENABLED 0
  104. #else
  105. #if FFECOM_targetCURRENT == FFECOM_targetGCC
  106. #define FFEGLOBAL_ENABLED 1
  107. #endif
  108. #endif
  109.  
  110. #define ffeglobal_common_init(g) ((g)->init != 0)
  111. #define ffeglobal_have_pad(g) ((g)->have_pad)
  112. #define ffeglobal_have_size(g) ((g)->have_size)
  113. #define ffeglobal_hook(g) ((g)->hook)
  114. #define ffeglobal_init_0()
  115. #define ffeglobal_init_2()
  116. #define ffeglobal_init_3()
  117. #define ffeglobal_init_4()
  118. #define ffeglobal_new_blockdata(s,t) \
  119.       ffeglobal_new_progunit_(s,t,FFEGLOBAL_typeBDATA)
  120. #define ffeglobal_new_function(s,t) \
  121.       ffeglobal_new_progunit_(s,t,FFEGLOBAL_typeFUNC)
  122. #define ffeglobal_new_program(s,t) \
  123.       ffeglobal_new_progunit_(s,t,FFEGLOBAL_typeMAIN)
  124. #define ffeglobal_new_subroutine(s,t) \
  125.       ffeglobal_new_progunit_(s,t,FFEGLOBAL_typeSUBR)
  126. #define ffeglobal_pad(g) ((g)->pad)
  127. #define ffeglobal_set_hook(g,h) ((g)->hook = (h))
  128. #define ffeglobal_size(g) ((g)->size)
  129. #define ffeglobal_terminate_0()
  130. #define ffeglobal_terminate_2()
  131. #define ffeglobal_terminate_3()
  132. #define ffeglobal_terminate_4()
  133. #define ffeglobal_text(g) ffename_text((g)->n)
  134. #define ffeglobal_type(g) ((g)->type)
  135.  
  136. /* End of #include file. */
  137.  
  138. #endif
  139.