!   Copyright 2003, 2004 Free Software Foundation, Inc.
!   Contributed by Kejia Zhao <kejia_zh@yahoo.com.cn>
!
!This file is part of the GNU Fortran 95 runtime library (libgfor).
!
!GNU libgfor is free software; you can redistribute it and/or
!modify it under the terms of the GNU Lesser General Public
!License as published by the Free Software Foundation; either
!version 2.1 of the License, or (at your option) any later version.
!
!GNU libgfor 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 Lesser General Public License for more details.
!
!You should have received a copy of the GNU Lesser General Public
!License along with libgfor; see the file COPYING.  If not,
!write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
!Boston, MA 02110-1301, USA.
!

function _gfortran_selected_int_kind (r)
  implicit none
  integer, intent (in) :: r
  integer :: _gfortran_selected_int_kind
  integer :: i
  ! Integer kind_range table
  type :: int_info
    integer :: kind
    integer :: range
  end type int_info

  include "selected_int_kind.inc"

  do i = 1, c
    if (r <= int_infos (i) % range) then
      _gfortran_selected_int_kind = int_infos (i) % kind
      return
    end if
  end do
  _gfortran_selected_int_kind = -1
  return
end function
