/* info-k.def -- Public #include File (module.h template V1.0)
   Copyright (C) 1995 Free Software Foundation, Inc.
   Contributed by James Craig Burley.

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.

   Owning Modules:
      info.c

   Modifications:
*/

FFEINFO_KIND (FFEINFO_kindNONE, "an unknown kind", "")
FFEINFO_KIND (FFEINFO_kindENTITY, "an entity", "e")
FFEINFO_KIND (FFEINFO_kindFUNCTION, "a function", "f")
FFEINFO_KIND (FFEINFO_kindSUBROUTINE, "a subroutine", "u")
FFEINFO_KIND (FFEINFO_kindPROGRAM, "a program", "p")
FFEINFO_KIND (FFEINFO_kindBLOCKDATA, "a block-data unit", "b")
FFEINFO_KIND (FFEINFO_kindCOMMON, "a common block", "c")
FFEINFO_KIND (FFEINFO_kindCONSTRUCT, "a construct", ":")
FFEINFO_KIND (FFEINFO_kindNAMELIST, "a namelist", "n")
FFEINFO_KIND (FFEINFO_kindANY, "anything", "~")
