MODULE char_case

  !-----------------------------------------------------------------------------
  !   convert character and strings to upper/lower case
  !   CVS:$Id: char_case.F90,v 1.1 2001/02/16 21:19:48 klindsay Exp $
  !-----------------------------------------------------------------------------

  IMPLICIT NONE
  SAVE

  !-----------------------------------------------------------------------------
  !   module variables
  !-----------------------------------------------------------------------------

  CHARACTER(LEN=*), PARAMETER, PRIVATE :: &
       lower_letters = 'abcdefghijklmnopqrstuvwxyz', &
       upper_letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

  !*****************************************************************************

CONTAINS

  !*****************************************************************************

  FUNCTION upper(STR)

    CHARACTER(LEN=*), INTENT(IN) :: STR
    CHARACTER(LEN=LEN_TRIM(STR)) :: upper
    INTEGER :: i, j

    DO i = 1,LEN_TRIM(STR)
       j = SCAN(lower_letters, STR(i:i))
       IF (j /= 0) THEN
          upper(i:i) = upper_letters(j:j)
       ELSE
          upper(i:i) = STR(i:i)
       END IF
    END DO

  END FUNCTION upper

  !*****************************************************************************

  FUNCTION lower(STR)

    CHARACTER(LEN=*), INTENT(IN) :: STR
    CHARACTER(LEN=LEN_TRIM(STR)) :: lower
    INTEGER :: i, j

    DO i = 1,LEN_TRIM(STR)
       j = SCAN(upper_letters, STR(i:i))
       IF (j /= 0) THEN
          lower(i:i) = lower_letters(j:j)
       ELSE
          lower(i:i) = STR(i:i)
       END IF
    END DO

  END FUNCTION lower

  !*****************************************************************************

END MODULE char_case
