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 / lab.h < prev    next >
C/C++ Source or Header  |  1996-09-28  |  5KB  |  154 lines

  1. /* lab.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.       lab.c
  23.  
  24.    Modifications:
  25.       22-Aug-89     JCB  1.1
  26.      Change for new ffewhere interface.
  27. */
  28.  
  29. /* Allow multiple inclusion to work. */
  30.  
  31. #ifndef _H_f_lab
  32. #define _H_f_lab
  33.  
  34. /* Simple definitions and enumerations. */
  35.  
  36. typedef enum
  37.   {
  38.     FFELAB_typeUNKNOWN,        /* No info yet on label. */
  39.     FFELAB_typeANY,        /* Label valid for anything, no msgs. */
  40.     FFELAB_typeUSELESS,        /* No valid way to reference this label. */
  41.     FFELAB_typeASSIGNABLE,    /* Target of ASSIGN: so FORMAT or BRANCH. */
  42.     FFELAB_typeFORMAT,        /* FORMAT label. */
  43.     FFELAB_typeLOOPEND,        /* Target of a labeled DO statement. */
  44.     FFELAB_typeNOTLOOP,        /* Branch target statement not valid DO
  45.                    target. */
  46.     FFELAB_typeENDIF,        /* END IF label. */
  47.     FFELAB_type
  48.   } ffelabType;
  49.  
  50. #define FFELAB_valueNONE 0
  51. #define FFELAB_valueMAX 99999
  52.  
  53. /* Typedefs. */
  54.  
  55. typedef struct _ffelab_ *ffelab;
  56. typedef ffelab ffelabHandle;
  57. typedef unsigned long ffelabNumber;    /* Count of new labels. */
  58. #define ffelabNumber_f "l"
  59. typedef unsigned long ffelabValue;
  60. #define ffelabValue_f "l"
  61.  
  62. /* Include files needed by this one. */
  63.  
  64. #include "com.h"
  65. #include "where.h"
  66.  
  67. /* Structure definitions. */
  68.  
  69. struct _ffelab_
  70.   {
  71.     ffelab next;
  72. #ifdef FFECOM_labelHOOK
  73.     ffecomLabel hook;
  74. #endif
  75.     ffelabValue value;        /* 1 through 99999, or 100000+ for temp
  76.                    labels. */
  77.     unsigned long blocknum;    /* Managed entirely by user of module. */
  78.     ffewhereLine firstref_line;
  79.     ffewhereColumn firstref_col;
  80.     ffewhereLine doref_line;
  81.     ffewhereColumn doref_col;
  82.     ffewhereLine definition_line;    /* ffewhere_line_unknown() if not
  83.                        defined. */
  84.     ffewhereColumn definition_col;
  85.     ffelabType type;
  86.   };
  87.  
  88. /* Global objects accessed by users of this module. */
  89.  
  90. extern ffelab ffelab_list_;
  91. extern ffelabNumber ffelab_num_news_;
  92.  
  93. /* Declare functions with prototypes. */
  94.  
  95. ffelab ffelab_find (ffelabValue v);
  96. void ffelab_finish (void);
  97. void ffelab_init_3 (void);
  98. ffelab ffelab_new (ffelabValue v);
  99.  
  100. /* Define macros. */
  101.  
  102. #define ffelab_blocknum(l) ((l)->blocknum)
  103. #define ffelab_definition_column(l) ((l)->definition_col)
  104. #define ffelab_definition_filename(l) \
  105.       ffewhere_line_filename((l)->definition_line)
  106. #define ffelab_definition_filelinenum(l) \
  107.       ffewhere_line_filelinenum((l)->definition_line)
  108. #define ffelab_definition_line(l) ((l)->definition_line)
  109. #define ffelab_definition_line_number(l) \
  110.       ffewhere_line_number((l)->definition_line)
  111. #define ffelab_doref_column(l) ((l)->doref_col)
  112. #define ffelab_doref_filename(l) ffewhere_line_filename((l)->doref_line)
  113. #define ffelab_doref_filelinenum(l) ffewhere_line_filelinenum((l)->doref_line)
  114. #define ffelab_doref_line(l) ((l)->doref_line)
  115. #define ffelab_doref_line_number(l) ffewhere_line_number((l)->doref_line)
  116. #define ffelab_firstref_column(l) ((l)->firstref_col)
  117. #define ffelab_firstref_filename(l) ffewhere_line_filename((l)->firstref_line)
  118. #define ffelab_firstref_filelinenum(l) \
  119.       ffewhere_line_filelinenum((l)->firstref_line)
  120. #define ffelab_firstref_line(l) ((l)->firstref_line)
  121. #define ffelab_firstref_line_number(l) ffewhere_line_number((l)->firstref_line)
  122. #define ffelab_handle_done(h)
  123. #define ffelab_handle_first() ((ffelabHandle) ffelab_list_)
  124. #define ffelab_handle_next(h) ((ffelabHandle) (((ffelab) h)->next))
  125. #define ffelab_handle_target(h) ((ffelab) h)
  126. #define ffelab_hook(l) ((l)->hook)
  127. #define ffelab_init_0()
  128. #define ffelab_init_1()
  129. #define ffelab_init_2()
  130. #define ffelab_init_4()
  131. #define ffelab_kill(l) ffelab_set_value(l,FFELAB_valueNONE);
  132. #define ffelab_new_generated() (ffelab_new(ffelab_generated_++))
  133. #define ffelab_number() (ffelab_num_news_)
  134. #define ffelab_set_blocknum(l,b) ((l)->blocknum = (b))
  135. #define ffelab_set_definition_column(l,cn) ((l)->definition_col = (cn))
  136. #define ffelab_set_definition_line(l,ln) ((l)->definition_line = (ln))
  137. #define ffelab_set_doref_column(l,cn) ((l)->doref_col = (cn))
  138. #define ffelab_set_doref_line(l,ln) ((l)->doref_line = (ln))
  139. #define ffelab_set_firstref_column(l,cn) ((l)->firstref_col = (cn))
  140. #define ffelab_set_firstref_line(l,ln) ((l)->firstref_line = (ln))
  141. #define ffelab_set_hook(l,h) ((l)->hook = (h))
  142. #define ffelab_set_type(l,t) ((l)->type = (t))
  143. #define ffelab_terminate_0()
  144. #define ffelab_terminate_1()
  145. #define ffelab_terminate_2()
  146. #define ffelab_terminate_3()
  147. #define ffelab_terminate_4()
  148. #define ffelab_type(l) ((l)->type)
  149. #define ffelab_value(l) ((l)->value)
  150.  
  151. /* End of #include file. */
  152.  
  153. #endif
  154.