/* stv.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 (despite the name, it doesn't really depend on ffest*)

   Description:
      Various and sundry info.

   Modifications:
*/

/* Include files. */

#include "proj.h"
#include "stv.h"
#include "lab.h"
#include "where.h"

/* Externals defined here. */

ffestvSavestate ffestv_save_state_;
ffewhereLine ffestv_save_line_;
ffewhereColumn ffestv_save_col_;
ffestvAccessstate ffestv_access_state_;
ffewhereLine ffestv_access_line_;
ffewhereColumn ffestv_access_col_;
ffelabNumber ffestv_num_label_defines_;

/* 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. */
