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 / src.h < prev    next >
C/C++ Source or Header  |  1996-09-28  |  6KB  |  144 lines

  1. /* src.h -- Public #include File
  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.       src.c
  23.  
  24.    Modifications:
  25. */
  26.  
  27. /* Allow multiple inclusion to work. */
  28.  
  29. #ifndef _H_f_src
  30. #define _H_f_src
  31.  
  32. #include "bad.h"
  33. #include "top.h"
  34.  
  35. extern char ffesrc_toupper_[256];
  36. extern char ffesrc_tolower_[256];
  37. extern char ffesrc_char_match_init_[256];
  38. extern char ffesrc_char_match_noninit_[256];
  39. extern char ffesrc_char_source_[256];
  40. extern char ffesrc_char_internal_init_[256];
  41. extern ffebad ffesrc_bad_symbol_init_[256];
  42. extern ffebad ffesrc_bad_symbol_noninit_[256];
  43. extern bool ffesrc_check_symbol_;
  44. extern bool ffesrc_ok_match_init_upper_;
  45. extern bool ffesrc_ok_match_init_lower_;
  46. extern bool ffesrc_ok_match_noninit_upper_;
  47. extern bool ffesrc_ok_match_noninit_lower_;
  48.  
  49. /* These C-language-syntax modifiers could avoid the match arg if gcc's
  50.    extension allowing macros to generate dynamic labels was used.  They
  51.    could use the no_match arg (and the "caller's" label defs) if there
  52.    was a way to say "goto default" in a switch statement.  Oh well.
  53.  
  54.    NOTE: These macro assume "case FFESRC_CASE_MATCH_[NON]INIT(...):" is used
  55.    to invoke them, and thus assume the "above" case does not fall through to
  56.    this one.  This syntax was chosen to keep indenting tools working.  */
  57.  
  58. #define FFESRC_CASE_MATCH_INIT(upper, lower, match, no_match) \
  59.  upper: if (!ffesrc_ok_match_init_upper_) goto no_match; \
  60.   else goto match; \
  61.  case lower: if (!ffesrc_ok_match_init_lower_) goto no_match; \
  62.  match
  63.  
  64. #define FFESRC_CASE_MATCH_NONINIT(upper, lower, match, no_match) \
  65.  upper: if (!ffesrc_ok_match_noninit_upper_) goto no_match; \
  66.   else goto match; \
  67.  case lower: if (!ffesrc_ok_match_noninit_lower_) goto no_match; \
  68.  match
  69.  
  70. /* If character is ok in a symbol name (not including intrinsic names),
  71.    returns FFEBAD, else returns something else, type ffebad.  */
  72.  
  73. #define ffesrc_bad_char_symbol_init(c) \
  74.   (ffesrc_bad_symbol_init_[(unsigned int) (c)])
  75. #define ffesrc_bad_char_symbol_noninit(c) \
  76.   (ffesrc_bad_symbol_noninit_[(unsigned int) (c)])
  77.  
  78. /* Returns TRUE if character is ok in a symbol name (including
  79.    intrinsic names).  Doesn't care about case settings, this is
  80.    used just for parsing (before semantic complaints about symbol-
  81.    name casing and such).  One specific usage is to decide whether
  82.    an underscore is valid as the first or subsequent character in
  83.    some symbol name -- if not, an underscore is a separate token
  84.    (while lexing, for example).  Note that ffesrc_is_name_init
  85.    must return TRUE for a (not necessarily proper) subset of
  86.    characters for which ffelex_is_firstnamechar returns TRUE.  */
  87.  
  88. #define ffesrc_is_name_init(c) \
  89.   ((isalpha ((c))) || (!ffe_is_90 () && ((c) == '_')))
  90. #define ffesrc_is_name_noninit(c) \
  91.   ((isalnum ((c))) || (!ffe_is_90 () && ((c) == '_')))
  92.  
  93. /* Test if source-translated character matches given alphabetic character
  94.    (passed in both uppercase and lowercase, to allow for custom speedup
  95.    of compilation in environments where compile-time options aren't needed
  96.    for casing).     */
  97.  
  98. #define ffesrc_char_match_init(c, up, low) \
  99.   (ffesrc_char_match_init_[(unsigned int) (c)] == up)
  100.  
  101. #define ffesrc_char_match_noninit(c, up, low) \
  102.   (ffesrc_char_match_noninit_[(unsigned int) (c)] == up)
  103.  
  104. /* Translate character from input-file form to source form.  */
  105.  
  106. #define ffesrc_char_source(c) (ffesrc_char_source_[(unsigned int) (c)])
  107.  
  108. /* Translate internal character (upper/lower) to source form in an
  109.    initial-character context (i.e. ffesrc_char_match_init of the result
  110.    will always succeed).  */
  111.  
  112. #define ffesrc_char_internal_init(up, low) \
  113.   (ffesrc_char_internal_init_[(unsigned int) (up)])
  114.  
  115. /* Returns TRUE if a name representing a symbol should be checked for
  116.    validity according to compile-time options.    That is, if it is possible
  117.    that ffesrc_bad_char_symbol(c) can return something other than FFEBAD
  118.    for any valid character in an ffelex NAME(S) token.    */
  119.  
  120. #define ffesrc_check_symbol() ffesrc_check_symbol_
  121.  
  122. #define ffesrc_init_0()
  123. void ffesrc_init_1 (void);
  124. #define ffesrc_init_2()
  125. #define ffesrc_init_3()
  126. #define ffesrc_init_4()
  127. int ffesrc_strcmp_1ns2i (ffeCase mcase, const char *var, int len,
  128.              const char *str_ic);
  129. int ffesrc_strcmp_2c (ffeCase mcase, const char *var, const char *str_uc,
  130.               const char *str_lc, const char *str_ic);
  131. int ffesrc_strncmp_2c (ffeCase mcase, const char *var, const char *str_uc,
  132.                const char *str_lc, const char *str_ic, int len);
  133. #define ffesrc_terminate_0()
  134. #define ffesrc_terminate_1()
  135. #define ffesrc_terminate_2()
  136. #define ffesrc_terminate_3()
  137. #define ffesrc_terminate_4()
  138. #define ffesrc_toupper(c) (ffesrc_toupper_[(unsigned int) (c)])
  139. #define ffesrc_tolower(c) (ffesrc_tolower_[(unsigned int) (c)])
  140.  
  141. /* End of #include file. */
  142.  
  143. #endif
  144.