/* info-k.def -- Public #include File (module.h 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.

   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", "~")
