/* str.c -- Implementation File (module.c 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.

   Related Modules:
      None

   Description:
      Handles recognition of keywords.

   Modifications:
*/

/* Include files. */

#include "proj.h"
#include "src.h"
#include "str.h"
#include "lex.h"

/* Externals defined here. */


/* Simple definitions and enumerations. */


/* Internal typedefs. */


/* Private include files. */


/* Internal structure definitions. */


/* Static objects accessed by functions in this module. */


/* Static functions (internal). */


/* Internal macros. */


/* ffestr_first -- Look up the first names in a statement

   ffestrFirst kw;
   ffelexToken t;
   kw = ffestr_first(t);

   Returns FFESTR_firstNone if no matches, else FFESTR_firstXYZ if the
   NAME or NAMES token matches XYZ.  t must be a NAME or NAMES token or this
   routine will crash.

   This routine's code is actually written by a utility called FINI, itself
   written specifically for the Gnu Fortran project.  FINI takes an input
   file, in this case "ffe_first.fini", consisting primarily of a
   list of statements (ASSIGN, IF, DO, DOWHILE), and outputs a C file,
   "str-1t.j", that contains the definition of the
   ffestr_first function.  We #include that file here.

   30-Jan-90  JCB  2.0
      Updated for Fortran 90.
*/

#ifndef MAKING_DEPENDENCIES
#include "str-1t.j"
#endif
/* ffestr_format -- Look up format names in a statement

   ffestrFormat kw;
   ffelexToken t;
   kw = ffestr_format(t);

   Returns FFESTR_formatNone if no matches, else FFESTR_formatXYZ if the
   NAME or NAMES token matches XYZ.  t must be a NAME or NAMES token or this
   routine will crash.

   This routine's code is actually written by a utility called FINI, itself
   written specifically for the Gnu Fortran project.  FINI takes an input
   file, in this case "ffe_format.fini", consisting primarily of a
   list of format keywords (I, F, TL, TR), and outputs a C file,
   "str-fo.j", that contains the definition of the
   ffestr_format function.  We #include that file here.

*/

#ifndef MAKING_DEPENDENCIES
#include "str-fo.j"
#endif
/* ffestr_genio -- Look up genio names in a statement

   ffestrGenio kw;
   ffelexToken t;
   kw = ffestr_genio(t);

   Returns FFESTR_genioNone if no matches, else FFESTR_genioXYZ if the
   NAME or NAMES token matches XYZ.  t must be a NAME or NAMES token or this
   routine will crash.

   This routine's code is actually written by a utility called FINI, itself
   written specifically for the Gnu Fortran project.  FINI takes an input
   file, in this case "ffe_genio.fini", consisting primarily of a
   list of statement keywords (TO, FUNCTION), and outputs a C file,
   "str-io.j", that contains the definition of the
   ffestr_genio function.  We #include that file here.

*/

#ifndef MAKING_DEPENDENCIES
#include "str-io.j"
#endif
/* ffestr_inquire -- Look up inquire names in a statement

   ffestrInquire kw;
   ffelexToken t;
   kw = ffestr_inquire(t);

   Returns FFESTR_inquireNone if no matches, else FFESTR_inquireXYZ if the
   NAME or NAMES token matches XYZ.  t must be a NAME or NAMES token or this
   routine will crash.

   This routine's code is actually written by a utility called FINI, itself
   written specifically for the Gnu Fortran project.  FINI takes an input
   file, in this case "ffe_inquire.fini", consisting primarily of a
   list of statement keywords (TO, FUNCTION), and outputs a C file,
   "str-nq.j", that contains the definition of the
   ffestr_inquire function.  We #include that file here.

*/

#ifndef MAKING_DEPENDENCIES
#include "str-nq.j"
#endif
/* ffestr_open -- Look up open names in a statement

   ffestrOpen kw;
   ffelexToken t;
   kw = ffestr_open(t);

   Returns FFESTR_openNone if no matches, else FFESTR_openXYZ if the
   NAME or NAMES token matches XYZ.  t must be a NAME or NAMES token or this
   routine will crash.

   This routine's code is actually written by a utility called FINI, itself
   written specifically for the Gnu Fortran project.  FINI takes an input
   file, in this case "ffe_open.fini", consisting primarily of a
   list of statement keywords (TO, FUNCTION), and outputs a C file,
   "str-op.j", that contains the definition of the
   ffestr_open function.  We #include that file here.

*/

#ifndef MAKING_DEPENDENCIES
#include "str-op.j"
#endif
/* ffestr_other -- Look up other names in a statement

   ffestrOther kw;
   ffelexToken t;
   kw = ffestr_other(t);

   Returns FFESTR_otherNone if no matches, else FFESTR_otherXYZ if the
   NAME or NAMES token matches XYZ.  t must be a NAME or NAMES token or this
   routine will crash.

   This routine's code is actually written by a utility called FINI, itself
   written specifically for the Gnu Fortran project.  FINI takes an input
   file, in this case "ffe_other.fini", consisting primarily of a
   list of statement keywords (TO, FUNCTION), and outputs a C file,
   "str-ot.j", that contains the definition of the
   ffestr_other function.  We #include that file here.

*/

#ifndef MAKING_DEPENDENCIES
#include "str-ot.j"
#endif
/* ffestr_second -- Look up the second name in a statement

   ffestrSecond kw;
   ffelexToken t;
   kw = ffestr_second(t);

   Returns FFESTR_secondNone if no matches, else FFESTR_secondXYZ if the
   NAME or NAMES token matches XYZ.  t must be a NAME or NAMES token or this
   routine will crash.

   This routine's code is actually written by a utility called FINI, itself
   written specifically for the Gnu Fortran project.  FINI takes an input
   file, in this case "ffe_second.fini", consisting primarily of a
   list of statement keywords (TO, FUNCTION), and outputs a C file,
   "str-2t.j", that contains the definition of the
   ffestr_second function.  We #include that file here.

*/

#ifndef MAKING_DEPENDENCIES
#include "str-2t.j"
#endif
