# GNU libc iconv configuration.
# Copyright (C) 1997-2018 Free Software Foundation, Inc.
# This file is part of the GNU C Library.

# The GNU C Library 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.

# The GNU C Library 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 the GNU C Library; if not, see
# <http://www.gnu.org/licenses/>.

# All lines contain the following information:

# If the lines start with `module'
#  fromset:	either a name triple or a regular expression triple.
#  toset:	a name triple or an expression with \N to get regular
#		expression matching results.
#  filename:	filename of the module implementing the transformation.
#		If it is not absolute the path is made absolute by prepending
#		the directory the configuration file is found in.
#  cost:	optional cost of the transformation.  Default is 1.

# If the lines start with `alias'
#  alias:	alias name which is not really recognized.
#  name:	the real name of the character set

# S/390 hardware accelerated modules
#	from			to			module			cost
module	ISO-8859-1//		IBM037//		ISO-8859-1_CP037_Z900	1
module	IBM037//		ISO-8859-1//		ISO-8859-1_CP037_Z900	1
module	ISO-10646/UTF8/		UTF-32//		UTF8_UTF32_Z9		1
module	UTF-32BE//		ISO-10646/UTF8/		UTF8_UTF32_Z9		1
module	ISO-10646/UTF8/		UTF-32BE//		UTF8_UTF32_Z9		1
module	UTF-16BE//		UTF-32//		UTF16_UTF32_Z9		1
module	UTF-32BE//		UTF-16//		UTF16_UTF32_Z9		1
module	INTERNAL		UTF-16//		UTF16_UTF32_Z9		1
module	UTF-32BE//		UTF-16BE//		UTF16_UTF32_Z9		1
module	INTERNAL		UTF-16BE//		UTF16_UTF32_Z9		1
module	UTF-16BE//		UTF-32BE//		UTF16_UTF32_Z9		1
module	UTF-16BE//		INTERNAL		UTF16_UTF32_Z9		1
module	UTF-16BE//		ISO-10646/UTF8/		UTF8_UTF16_Z9		1
module	ISO-10646/UTF8/		UTF-16//		UTF8_UTF16_Z9		1
module	ISO-10646/UTF8/		UTF-16BE//		UTF8_UTF16_Z9		1
