New EBCDIC encodings.
Reported by Ulrich Schwab and Calvin Buckley via Jack Woehr.
* NOTES: Mention how to enable EBCDIC encodings.
* tests/IBM-*.TXT: New files.
* tools/8bit_tab_to_h.c (main): Emit copyright header with year 2022.
* tools/Makefile: Add rules for generating ebcdic*.h.
* lib/ebcdic*.h: New files, automatically generated by tools/Makefile.
* lib/ebcdic838.h: Tweak reverse mapping manually.
* lib/ebcdic1160.h: Likewise.
* lib/converters.h: Include all ebcdic*.h.
* lib/encodings_zos.def: New file.
* lib/genaliases2.c: Include encodings_zos.def.
* lib/genflags.c: Likewise.
* Makefile.devel (lib/aliases_zos.h lib/canonical_zos.h): New rule.
(lib/flags.h, totally-clean): Update.
* lib/aliases2.h: Include aliases_zos.h.
* lib/iconv.c (USE_ZOS): New macro.
Include encodings_zos.def, canonical_zos.h.
* README, man/iconv_open.3: Document the IBM-* encodings.
* tests/Makefile.in (check-extra-yes): Also test the EBCDIC encodings.
diff --git a/.gitignore b/.gitignore
index fd7e7e8..5231cd4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -288,6 +288,7 @@
/lib/aliases_osf1.h
/lib/aliases_osf1_sysosf1.h
/lib/aliases_dos.h
+/lib/aliases_zos.h
/lib/aliases_extra.h
/lib/canonical.h
/lib/canonical_sysaix.h
@@ -299,6 +300,7 @@
/lib/canonical_osf1.h
/lib/canonical_osf1_sysosf1.h
/lib/canonical_dos.h
+/lib/canonical_zos.h
/lib/canonical_extra.h
/lib/canonical_local.h
/lib/canonical_local_sysaix.h
diff --git a/ChangeLog b/ChangeLog
index 47d2d8a..45e277d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,26 @@
+2022-01-23 Bruno Haible <bruno@clisp.org>
+
+ New EBCDIC encodings.
+ Reported by Ulrich Schwab and Calvin Buckley via Jack Woehr.
+ * NOTES: Mention how to enable EBCDIC encodings.
+ * tests/IBM-*.TXT: New files.
+ * tools/8bit_tab_to_h.c (main): Emit copyright header with year 2022.
+ * tools/Makefile: Add rules for generating ebcdic*.h.
+ * lib/ebcdic*.h: New files, automatically generated by tools/Makefile.
+ * lib/ebcdic838.h: Tweak reverse mapping manually.
+ * lib/ebcdic1160.h: Likewise.
+ * lib/converters.h: Include all ebcdic*.h.
+ * lib/encodings_zos.def: New file.
+ * lib/genaliases2.c: Include encodings_zos.def.
+ * lib/genflags.c: Likewise.
+ * Makefile.devel (lib/aliases_zos.h lib/canonical_zos.h): New rule.
+ (lib/flags.h, totally-clean): Update.
+ * lib/aliases2.h: Include aliases_zos.h.
+ * lib/iconv.c (USE_ZOS): New macro.
+ Include encodings_zos.def, canonical_zos.h.
+ * README, man/iconv_open.3: Document the IBM-* encodings.
+ * tests/Makefile.in (check-extra-yes): Also test the EBCDIC encodings.
+
2022-01-04 Bruno Haible <bruno@clisp.org>
Update after gnulib changed.
diff --git a/Makefile.devel b/Makefile.devel
index 7f22e0f..3102ad2 100644
--- a/Makefile.devel
+++ b/Makefile.devel
@@ -23,6 +23,7 @@
lib/aliases_aix.h lib/aliases_aix_sysaix.h \
lib/aliases_osf1.h lib/aliases_osf1_sysosf1.h \
lib/aliases_dos.h \
+ lib/aliases_zos.h \
lib/aliases_extra.h \
lib/flags.h lib/translit.h \
man/iconv.1.html man/iconv.3.html man/iconv_close.3.html man/iconv_open.3.html man/iconvctl.3.html man/iconv_open_into.3.html \
@@ -190,13 +191,18 @@
./genaliases dos lib/aliases_dos.h lib/canonical_dos.h
$(RM) genaliases
+lib/aliases_zos.h lib/canonical_zos.h : lib/encodings_zos.def lib/genaliases2.c
+ $(CC) $(CFLAGS) -DUSE_ZOS lib/genaliases2.c -o genaliases
+ ./genaliases zos lib/aliases_zos.h lib/canonical_zos.h
+ $(RM) genaliases
+
lib/aliases_extra.h lib/canonical_extra.h : lib/encodings_extra.def lib/genaliases2.c
$(CC) $(CFLAGS) -DUSE_EXTRA lib/genaliases2.c -o genaliases
./genaliases extra lib/aliases_extra.h lib/canonical_extra.h
$(RM) genaliases
-lib/flags.h : lib/encodings.def lib/encodings_aix.def lib/encodings_osf1.def lib/encodings_dos.def lib/encodings_extra.def lib/converters.h lib/genflags.c
+lib/flags.h : lib/encodings.def lib/encodings_aix.def lib/encodings_osf1.def lib/encodings_dos.def lib/encodings_zos.def lib/encodings_extra.def lib/converters.h lib/genflags.c
$(CC) $(CFLAGS) lib/genflags.c -o genflags
./genflags > lib/flags.h
$(RM) genflags
@@ -231,11 +237,13 @@
rm -f lib/aliases_aix.h lib/aliases_aix_sysaix.h
rm -f lib/aliases_osf1.h lib/aliases_osf1_sysosf1.h
rm -f lib/aliases_dos.h
+ rm -f lib/aliases_zos.h
rm -f lib/aliases_extra.h
rm -f lib/canonical.h lib/canonical_sysaix.h lib/canonical_syshpux.h lib/canonical_sysosf1.h lib/canonical_syssolaris.h
rm -f lib/canonical_aix.h lib/canonical_aix_sysaix.h
rm -f lib/canonical_osf1.h lib/canonical_osf1_sysosf1.h
rm -f lib/canonical_dos.h
+ rm -f lib/canonical_zos.h
rm -f lib/canonical_extra.h
rm -f lib/canonical_local.h lib/canonical_local_sysaix.h lib/canonical_local_syshpux.h lib/canonical_local_sysosf1.h lib/canonical_local_syssolaris.h
rm -f lib/flags.h
diff --git a/NOTES b/NOTES
index eb1c0e1..b3103f5 100644
--- a/NOTES
+++ b/NOTES
@@ -328,7 +328,9 @@
since ISO-8859-* have been adopted.
Q: Support EBCDIC ?
-A: No!
+A: Available through --enable-extra-encodings.
+ Why? Because several people (Ulrich Schwab, Calvin Buckley) have shown
+ interest in these encodings, by preparing forks of GNU libiconv.
Q: How do I add a new character set?
A: 1. Explain the "why" in this file, above.
diff --git a/README b/README
index 5514a48..fea125d 100644
--- a/README
+++ b/README
@@ -72,6 +72,24 @@
TDS565
Platform specifics
ATARIST, RISCOS-LATIN1
+ EBCDIC compatible (not ASCII compatible, very rarely used)
+ European languages
+ IBM-{037,273,277,278,280,282,284,285,297,423,500,870,871,875,880},
+ IBM-{905,924,1025,1026,1047,1112,1122,1123,1140,1141,1142,1143},
+ IBM-{1144,1145,1146,1147,1148,1149,1153,1154,1155,1156,1157,1158},
+ IBM-{1165,1166,4971}
+ Semitic languages
+ IBM-{424,425,12712,16804}
+ Persian
+ IBM-1097
+ Thai
+ IBM-{838,1160}
+ Laotian
+ IBM-1132
+ Vietnamese
+ IBM-{1130,1164}
+ Indic languages
+ IBM-1137
It can convert from any of these encodings to any other, through Unicode
conversion.
diff --git a/lib/aliases2.h b/lib/aliases2.h
index 1749d22..6a65c42 100644
--- a/lib/aliases2.h
+++ b/lib/aliases2.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 1999-2003, 2008 Free Software Foundation, Inc.
+ * Copyright (C) 1999-2003, 2008, 2022 Free Software Foundation, Inc.
* This file is part of the GNU LIBICONV Library.
*
* The GNU LIBICONV Library is free software; you can redistribute it
@@ -34,6 +34,9 @@
#ifdef USE_DOS
# include "aliases_dos.h"
#endif
+#ifdef USE_ZOS
+# include "aliases_zos.h"
+#endif
#ifdef USE_EXTRA
# include "aliases_extra.h"
#endif
diff --git a/lib/converters.h b/lib/converters.h
index 900aa11..db53acd 100644
--- a/lib/converters.h
+++ b/lib/converters.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 1999-2002, 2004-2011, 2016 Free Software Foundation, Inc.
+ * Copyright (C) 1999-2002, 2004-2011, 2016, 2022 Free Software Foundation, Inc.
* This file is part of the GNU LIBICONV Library.
*
* The GNU LIBICONV Library is free software; you can redistribute it
@@ -290,6 +290,62 @@
#include "cp1125.h"
#endif
+#ifdef USE_ZOS
+#include "ebcdic037.h"
+#include "ebcdic273.h"
+#include "ebcdic277.h"
+#include "ebcdic278.h"
+#include "ebcdic280.h"
+#include "ebcdic282.h"
+#include "ebcdic284.h"
+#include "ebcdic285.h"
+#include "ebcdic297.h"
+#include "ebcdic423.h"
+#include "ebcdic424.h"
+#include "ebcdic425.h"
+#include "ebcdic500.h"
+#include "ebcdic838.h"
+#include "ebcdic870.h"
+#include "ebcdic871.h"
+#include "ebcdic875.h"
+#include "ebcdic880.h"
+#include "ebcdic905.h"
+#include "ebcdic924.h"
+#include "ebcdic1025.h"
+#include "ebcdic1026.h"
+#include "ebcdic1047.h"
+#include "ebcdic1097.h"
+#include "ebcdic1112.h"
+#include "ebcdic1122.h"
+#include "ebcdic1123.h"
+#include "ebcdic1130.h"
+#include "ebcdic1132.h"
+#include "ebcdic1137.h"
+#include "ebcdic1140.h"
+#include "ebcdic1141.h"
+#include "ebcdic1142.h"
+#include "ebcdic1143.h"
+#include "ebcdic1144.h"
+#include "ebcdic1145.h"
+#include "ebcdic1146.h"
+#include "ebcdic1147.h"
+#include "ebcdic1148.h"
+#include "ebcdic1149.h"
+#include "ebcdic1153.h"
+#include "ebcdic1154.h"
+#include "ebcdic1155.h"
+#include "ebcdic1156.h"
+#include "ebcdic1157.h"
+#include "ebcdic1158.h"
+#include "ebcdic1160.h"
+#include "ebcdic1164.h"
+#include "ebcdic1165.h"
+#include "ebcdic1166.h"
+#include "ebcdic4971.h"
+#include "ebcdic12712.h"
+#include "ebcdic16804.h"
+#endif
+
#ifdef USE_EXTRA
#include "euc_jisx0213.h"
#include "shift_jisx0213.h"
diff --git a/lib/ebcdic037.h b/lib/ebcdic037.h
new file mode 100644
index 0000000..2de9805
--- /dev/null
+++ b/lib/ebcdic037.h
@@ -0,0 +1,129 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-037
+ */
+
+static const unsigned short ebcdic037_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x00e0, 0x00e1, 0x00e3, 0x00e5,
+ 0x00e7, 0x00f1, 0x00a2, 0x002e, 0x003c, 0x0028, 0x002b, 0x007c,
+ /* 0x50 */
+ 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef,
+ 0x00ec, 0x00df, 0x0021, 0x0024, 0x002a, 0x0029, 0x003b, 0x00ac,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x00c3, 0x00c5,
+ 0x00c7, 0x00d1, 0x00a6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf,
+ 0x00cc, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x00ab, 0x00bb, 0x00f0, 0x00fd, 0x00fe, 0x00b1,
+ /* 0x90 */
+ 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x00b8, 0x00c6, 0x00a4,
+ /* 0xa0 */
+ 0x00b5, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x00a1, 0x00bf, 0x00d0, 0x00dd, 0x00de, 0x00ae,
+ /* 0xb0 */
+ 0x005e, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x00a7, 0x00b6, 0x00bc,
+ 0x00bd, 0x00be, 0x005b, 0x005d, 0x00af, 0x00a8, 0x00b4, 0x00d7,
+ /* 0xc0 */
+ 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00f6, 0x00f2, 0x00f3, 0x00f5,
+ /* 0xd0 */
+ 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x00b9, 0x00fb, 0x00fc, 0x00f9, 0x00fa, 0x00ff,
+ /* 0xe0 */
+ 0x005c, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x00b2, 0x00d4, 0x00d6, 0x00d2, 0x00d3, 0x00d5,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f,
+};
+
+static int
+ebcdic037_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ *pwc = (ucs4_t) ebcdic037_2uni[c];
+ return 1;
+}
+
+static const unsigned char ebcdic037_page00[256] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0xba, 0xe0, 0xbb, 0xb0, 0x6d, /* 0x58-0x5f */
+ 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0xaa, 0x4a, 0xb1, 0x9f, 0xb2, 0x6a, 0xb5, /* 0xa0-0xa7 */
+ 0xbd, 0xb4, 0x9a, 0x8a, 0x5f, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */
+ 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */
+ 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */
+ 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68, /* 0xc0-0xc7 */
+ 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */
+ 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf, /* 0xd0-0xd7 */
+ 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xad, 0xae, 0x59, /* 0xd8-0xdf */
+ 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0x48, /* 0xe0-0xe7 */
+ 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */
+ 0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1, /* 0xf0-0xf7 */
+ 0x70, 0xdd, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf, /* 0xf8-0xff */
+};
+
+static int
+ebcdic037_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x0100)
+ c = ebcdic037_page00[wc];
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic1025.h b/lib/ebcdic1025.h
new file mode 100644
index 0000000..d6c94d4
--- /dev/null
+++ b/lib/ebcdic1025.h
@@ -0,0 +1,137 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-1025
+ */
+
+static const unsigned short ebcdic1025_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x0452, 0x0453, 0x0451, 0x0454, 0x0455, 0x0456,
+ 0x0457, 0x0458, 0x005b, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021,
+ /* 0x50 */
+ 0x0026, 0x0459, 0x045a, 0x045b, 0x045c, 0x045e, 0x045f, 0x042a,
+ 0x2116, 0x0402, 0x005d, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x0403, 0x0401, 0x0404, 0x0405, 0x0406, 0x0407,
+ 0x0408, 0x0409, 0x007c, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0x040a, 0x040b, 0x040c, 0x00ad, 0x040e, 0x040f, 0x044e, 0x0430,
+ 0x0431, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0x0446, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x0434, 0x0435, 0x0444, 0x0433, 0x0445, 0x0438,
+ /* 0x90 */
+ 0x0439, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f,
+ /* 0xa0 */
+ 0x044f, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432,
+ /* 0xb0 */
+ 0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a,
+ 0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413,
+ /* 0xc0 */
+ 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c,
+ /* 0xd0 */
+ 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x041d, 0x041e, 0x041f, 0x042f, 0x0420, 0x0421,
+ /* 0xe0 */
+ 0x005c, 0x00a7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x0422, 0x0423, 0x0416, 0x0412, 0x042c, 0x042b,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x009f,
+};
+
+static int
+ebcdic1025_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ *pwc = (ucs4_t) ebcdic1025_2uni[c];
+ return 1;
+}
+
+static const unsigned char ebcdic1025_page00[176] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x4f, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0x4a, 0xe0, 0x5a, 0x5f, 0x6d, /* 0x58-0x5f */
+ 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0xc0, 0x6a, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe1, /* 0xa0-0xa7 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, /* 0xa8-0xaf */
+};
+static const unsigned char ebcdic1025_page04[96] = {
+ 0x00, 0x63, 0x59, 0x62, 0x64, 0x65, 0x66, 0x67, /* 0x00-0x07 */
+ 0x68, 0x69, 0x70, 0x71, 0x72, 0x00, 0x74, 0x75, /* 0x08-0x0f */
+ 0xb9, 0xba, 0xed, 0xbf, 0xbc, 0xbd, 0xec, 0xfa, /* 0x10-0x17 */
+ 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xda, 0xdb, 0xdc, /* 0x18-0x1f */
+ 0xde, 0xdf, 0xea, 0xeb, 0xbe, 0xca, 0xbb, 0xfe, /* 0x20-0x27 */
+ 0xfb, 0xfd, 0x57, 0xef, 0xee, 0xfc, 0xb8, 0xdd, /* 0x28-0x2f */
+ 0x77, 0x78, 0xaf, 0x8d, 0x8a, 0x8b, 0xae, 0xb2, /* 0x30-0x37 */
+ 0x8f, 0x90, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x38-0x3f */
+ 0xaa, 0xab, 0xac, 0xad, 0x8c, 0x8e, 0x80, 0xb6, /* 0x40-0x47 */
+ 0xb3, 0xb5, 0xb7, 0xb1, 0xb0, 0xb4, 0x76, 0xa0, /* 0x48-0x4f */
+ 0x00, 0x44, 0x42, 0x43, 0x45, 0x46, 0x47, 0x48, /* 0x50-0x57 */
+ 0x49, 0x51, 0x52, 0x53, 0x54, 0x00, 0x55, 0x56, /* 0x58-0x5f */
+};
+
+static int
+ebcdic1025_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x00b0)
+ c = ebcdic1025_page00[wc];
+ else if (wc >= 0x0400 && wc < 0x0460)
+ c = ebcdic1025_page04[wc-0x0400];
+ else if (wc == 0x2116)
+ c = 0x58;
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic1026.h b/lib/ebcdic1026.h
new file mode 100644
index 0000000..b4f2dc0
--- /dev/null
+++ b/lib/ebcdic1026.h
@@ -0,0 +1,142 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-1026
+ */
+
+static const unsigned short ebcdic1026_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x00e0, 0x00e1, 0x00e3, 0x00e5,
+ 0x007b, 0x00f1, 0x00c7, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021,
+ /* 0x50 */
+ 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef,
+ 0x00ec, 0x00df, 0x011e, 0x0130, 0x002a, 0x0029, 0x003b, 0x005e,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x00c3, 0x00c5,
+ 0x005b, 0x00d1, 0x015f, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf,
+ 0x00cc, 0x0131, 0x003a, 0x00d6, 0x015e, 0x0027, 0x003d, 0x00dc,
+ /* 0x80 */
+ 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x00ab, 0x00bb, 0x007d, 0x0060, 0x00a6, 0x00b1,
+ /* 0x90 */
+ 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x00b8, 0x00c6, 0x00a4,
+ /* 0xa0 */
+ 0x00b5, 0x00f6, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x00a1, 0x00bf, 0x005d, 0x0024, 0x0040, 0x00ae,
+ /* 0xb0 */
+ 0x00a2, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x00a7, 0x00b6, 0x00bc,
+ 0x00bd, 0x00be, 0x00ac, 0x007c, 0x00af, 0x00a8, 0x00b4, 0x00d7,
+ /* 0xc0 */
+ 0x00e7, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x00ad, 0x00f4, 0x007e, 0x00f2, 0x00f3, 0x00f5,
+ /* 0xd0 */
+ 0x011f, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x00b9, 0x00fb, 0x005c, 0x00f9, 0x00fa, 0x00ff,
+ /* 0xe0 */
+ 0x00fc, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x00b2, 0x00d4, 0x0023, 0x00d2, 0x00d3, 0x00d5,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x00b3, 0x00db, 0x0022, 0x00d9, 0x00da, 0x009f,
+};
+
+static int
+ebcdic1026_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ *pwc = (ucs4_t) ebcdic1026_2uni[c];
+ return 1;
+}
+
+static const unsigned char ebcdic1026_page00[256] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x4f, 0xfc, 0xec, 0xad, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0xae, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0x68, 0xdc, 0xac, 0x5f, 0x6d, /* 0x58-0x5f */
+ 0x8d, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0x48, 0xbb, 0x8c, 0xcc, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0xaa, 0xb0, 0xb1, 0x9f, 0xb2, 0x8e, 0xb5, /* 0xa0-0xa7 */
+ 0xbd, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */
+ 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */
+ 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */
+ 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x4a, /* 0xc0-0xc7 */
+ 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */
+ 0x00, 0x69, 0xed, 0xee, 0xeb, 0xef, 0x7b, 0xbf, /* 0xd0-0xd7 */
+ 0x80, 0xfd, 0xfe, 0xfb, 0x7f, 0x00, 0x00, 0x59, /* 0xd8-0xdf */
+ 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0xc0, /* 0xe0-0xe7 */
+ 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */
+ 0x00, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xa1, 0xe1, /* 0xf0-0xf7 */
+ 0x70, 0xdd, 0xde, 0xdb, 0xe0, 0x00, 0x00, 0xdf, /* 0xf8-0xff */
+};
+static const unsigned char ebcdic1026_page01[72] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0xd0, /* 0x18-0x1f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
+ 0x5b, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x6a, /* 0x58-0x5f */
+};
+
+static int
+ebcdic1026_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x0100)
+ c = ebcdic1026_page00[wc];
+ else if (wc >= 0x0118 && wc < 0x0160)
+ c = ebcdic1026_page01[wc-0x0118];
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic1047.h b/lib/ebcdic1047.h
new file mode 100644
index 0000000..1c9bc95
--- /dev/null
+++ b/lib/ebcdic1047.h
@@ -0,0 +1,129 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-1047
+ */
+
+static const unsigned short ebcdic1047_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x00e0, 0x00e1, 0x00e3, 0x00e5,
+ 0x00e7, 0x00f1, 0x00a2, 0x002e, 0x003c, 0x0028, 0x002b, 0x007c,
+ /* 0x50 */
+ 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef,
+ 0x00ec, 0x00df, 0x0021, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x00c3, 0x00c5,
+ 0x00c7, 0x00d1, 0x00a6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf,
+ 0x00cc, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x00ab, 0x00bb, 0x00f0, 0x00fd, 0x00fe, 0x00b1,
+ /* 0x90 */
+ 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x00b8, 0x00c6, 0x00a4,
+ /* 0xa0 */
+ 0x00b5, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x00a1, 0x00bf, 0x00d0, 0x005b, 0x00de, 0x00ae,
+ /* 0xb0 */
+ 0x00ac, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x00a7, 0x00b6, 0x00bc,
+ 0x00bd, 0x00be, 0x00dd, 0x00a8, 0x00af, 0x005d, 0x00b4, 0x00d7,
+ /* 0xc0 */
+ 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00f6, 0x00f2, 0x00f3, 0x00f5,
+ /* 0xd0 */
+ 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x00b9, 0x00fb, 0x00fc, 0x00f9, 0x00fa, 0x00ff,
+ /* 0xe0 */
+ 0x005c, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x00b2, 0x00d4, 0x00d6, 0x00d2, 0x00d3, 0x00d5,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f,
+};
+
+static int
+ebcdic1047_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ *pwc = (ucs4_t) ebcdic1047_2uni[c];
+ return 1;
+}
+
+static const unsigned char ebcdic1047_page00[256] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0xad, 0xe0, 0xbd, 0x5f, 0x6d, /* 0x58-0x5f */
+ 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0xaa, 0x4a, 0xb1, 0x9f, 0xb2, 0x6a, 0xb5, /* 0xa0-0xa7 */
+ 0xbb, 0xb4, 0x9a, 0x8a, 0xb0, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */
+ 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */
+ 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */
+ 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68, /* 0xc0-0xc7 */
+ 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */
+ 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf, /* 0xd0-0xd7 */
+ 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xba, 0xae, 0x59, /* 0xd8-0xdf */
+ 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0x48, /* 0xe0-0xe7 */
+ 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */
+ 0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1, /* 0xf0-0xf7 */
+ 0x70, 0xdd, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf, /* 0xf8-0xff */
+};
+
+static int
+ebcdic1047_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x0100)
+ c = ebcdic1047_page00[wc];
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic1097.h b/lib/ebcdic1097.h
new file mode 100644
index 0000000..cb23176
--- /dev/null
+++ b/lib/ebcdic1097.h
@@ -0,0 +1,186 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-1097
+ */
+
+static const unsigned short ebcdic1097_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x060c, 0x064b, 0xfe81, 0xfe82, 0xf8fa, 0xfe8d,
+ 0xfe8e, 0xf8fb, 0x00a4, 0x002e, 0x003c, 0x0028, 0x002b, 0x007c,
+ /* 0x50 */
+ 0x0026, 0xfe80, 0xfe83, 0xfe84, 0xf8f9, 0xfe85, 0xfe8b, 0xfe8f,
+ 0xfe91, 0xfb56, 0x0021, 0x0024, 0x002a, 0x0029, 0x003b, 0x00ac,
+ /* 0x60 */
+ 0x002d, 0x002f, 0xfb58, 0xfe95, 0xfe97, 0xfe99, 0xfe9b, 0xfe9d,
+ 0xfe9f, 0xfb7a, 0x061b, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0xfb7c, 0xfea1, 0xfea3, 0xfea5, 0xfea7, 0xfea9, 0xfeab, 0xfead,
+ 0xfeaf, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0xfb8a, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x00ab, 0x00bb, 0xfeb1, 0xfeb3, 0xfeb5, 0xfeb7,
+ /* 0x90 */
+ 0xfeb9, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0xfebb, 0xfebd, 0xfebf, 0xfec1, 0xfec3, 0xfec5,
+ /* 0xa0 */
+ 0xfec7, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0xfec9, 0xfeca, 0xfecb, 0xfecc, 0xfecd, 0xfece,
+ /* 0xb0 */
+ 0xfecf, 0xfed0, 0xfed1, 0xfed3, 0xfed5, 0xfed7, 0xfb8e, 0xfedb,
+ 0xfb92, 0xfb94, 0x005b, 0x005d, 0xfedd, 0xfedf, 0xfee1, 0x00d7,
+ /* 0xc0 */
+ 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x00ad, 0xfee3, 0xfee5, 0xfee7, 0xfeed, 0xfee9,
+ /* 0xd0 */
+ 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0xfeeb, 0xfeec, 0xfba4, 0xfbfc, 0xfbfd, 0xfbfe,
+ /* 0xe0 */
+ 0x005c, 0x061f, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x0640, 0x06f0, 0x06f1, 0x06f2, 0x06f3, 0x06f4,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x06f5, 0x06f6, 0x06f7, 0x06f8, 0x06f9, 0x009f,
+};
+
+static int
+ebcdic1097_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ *pwc = (ucs4_t) ebcdic1097_2uni[c];
+ return 1;
+}
+
+static const unsigned char ebcdic1097_page00[216] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0xba, 0xe0, 0xbb, 0x00, 0x6d, /* 0x58-0x5f */
+ 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */
+ 0x00, 0x00, 0x00, 0x8a, 0x5f, 0xca, 0x00, 0x00, /* 0xa8-0xaf */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */
+ 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, /* 0xd0-0xd7 */
+};
+static const unsigned char ebcdic1097_page06[72] = {
+ 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, /* 0x08-0x0f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */
+ 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0xe1, /* 0x18-0x1f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
+ 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */
+ 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */
+};
+static const unsigned char ebcdic1097_page06_1[16] = {
+ 0xeb, 0xec, 0xed, 0xee, 0xef, 0xfa, 0xfb, 0xfc, /* 0xf0-0xf7 */
+ 0xfd, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf8-0xff */
+};
+static const unsigned char ebcdic1097_pagef8[8] = {
+ 0x00, 0x54, 0x46, 0x49, 0x00, 0x00, 0x00, 0x00, /* 0xf8-0xff */
+};
+static const unsigned char ebcdic1097_pagefb[88] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x00, /* 0x50-0x57 */
+ 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
+ 0x00, 0x00, 0x69, 0x00, 0x70, 0x00, 0x00, 0x00, /* 0x78-0x7f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */
+ 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xb6, 0x00, /* 0x88-0x8f */
+ 0x00, 0x00, 0xb8, 0x00, 0xb9, 0x00, 0x00, 0x00, /* 0x90-0x97 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */
+ 0x00, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */
+};
+static const unsigned char ebcdic1097_pagefb_2[8] = {
+ 0x00, 0x00, 0x00, 0x00, 0xdd, 0xde, 0xdf, 0x00, /* 0xf8-0xff */
+};
+static const unsigned char ebcdic1097_pagefe[112] = {
+ 0x51, 0x44, 0x45, 0x52, 0x53, 0x55, 0x00, 0x00, /* 0x80-0x87 */
+ 0x00, 0x00, 0x00, 0x56, 0x00, 0x47, 0x48, 0x57, /* 0x88-0x8f */
+ 0x00, 0x58, 0x00, 0x00, 0x00, 0x63, 0x00, 0x64, /* 0x90-0x97 */
+ 0x00, 0x65, 0x00, 0x66, 0x00, 0x67, 0x00, 0x68, /* 0x98-0x9f */
+ 0x00, 0x71, 0x00, 0x72, 0x00, 0x73, 0x00, 0x74, /* 0xa0-0xa7 */
+ 0x00, 0x75, 0x00, 0x76, 0x00, 0x77, 0x00, 0x78, /* 0xa8-0xaf */
+ 0x00, 0x8c, 0x00, 0x8d, 0x00, 0x8e, 0x00, 0x8f, /* 0xb0-0xb7 */
+ 0x00, 0x90, 0x00, 0x9a, 0x00, 0x9b, 0x00, 0x9c, /* 0xb8-0xbf */
+ 0x00, 0x9d, 0x00, 0x9e, 0x00, 0x9f, 0x00, 0xa0, /* 0xc0-0xc7 */
+ 0x00, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, /* 0xc8-0xcf */
+ 0xb1, 0xb2, 0x00, 0xb3, 0x00, 0xb4, 0x00, 0xb5, /* 0xd0-0xd7 */
+ 0x00, 0x00, 0x00, 0xb7, 0x00, 0xbc, 0x00, 0xbd, /* 0xd8-0xdf */
+ 0x00, 0xbe, 0x00, 0xcb, 0x00, 0xcc, 0x00, 0xcd, /* 0xe0-0xe7 */
+ 0x00, 0xcf, 0x00, 0xda, 0xdb, 0xce, 0x00, 0x00, /* 0xe8-0xef */
+};
+
+static int
+ebcdic1097_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x00d8)
+ c = ebcdic1097_page00[wc];
+ else if (wc >= 0x0608 && wc < 0x0650)
+ c = ebcdic1097_page06[wc-0x0608];
+ else if (wc >= 0x06f0 && wc < 0x0700)
+ c = ebcdic1097_page06_1[wc-0x06f0];
+ else if (wc >= 0xf8f8 && wc < 0xf900)
+ c = ebcdic1097_pagef8[wc-0xf8f8];
+ else if (wc >= 0xfb50 && wc < 0xfba8)
+ c = ebcdic1097_pagefb[wc-0xfb50];
+ else if (wc >= 0xfbf8 && wc < 0xfc00)
+ c = ebcdic1097_pagefb_2[wc-0xfbf8];
+ else if (wc >= 0xfe80 && wc < 0xfef0)
+ c = ebcdic1097_pagefe[wc-0xfe80];
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic1112.h b/lib/ebcdic1112.h
new file mode 100644
index 0000000..7ee8e4a
--- /dev/null
+++ b/lib/ebcdic1112.h
@@ -0,0 +1,151 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-1112
+ */
+
+static const unsigned short ebcdic1112_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x0161, 0x00e4, 0x0105, 0x012f, 0x016b, 0x00e5,
+ 0x0113, 0x017e, 0x00a2, 0x002e, 0x003c, 0x0028, 0x002b, 0x007c,
+ /* 0x50 */
+ 0x0026, 0x00e9, 0x0119, 0x0117, 0x010d, 0x0173, 0x201e, 0x201c,
+ 0x0123, 0x00df, 0x0021, 0x0024, 0x002a, 0x0029, 0x003b, 0x00ac,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x0160, 0x00c4, 0x0104, 0x012e, 0x016a, 0x00c5,
+ 0x0112, 0x017d, 0x00a6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0x00f8, 0x00c9, 0x0118, 0x0116, 0x010c, 0x0172, 0x012a, 0x013b,
+ 0x0122, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x00ab, 0x00bb, 0x0101, 0x017c, 0x0144, 0x00b1,
+ /* 0x90 */
+ 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x0156, 0x0157, 0x00e6, 0x0137, 0x00c6, 0x00a4,
+ /* 0xa0 */
+ 0x00b5, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x201d, 0x017a, 0x0100, 0x017b, 0x0143, 0x00ae,
+ /* 0xb0 */
+ 0x005e, 0x00a3, 0x012b, 0x00b7, 0x00a9, 0x00a7, 0x00b6, 0x00bc,
+ 0x00bd, 0x00be, 0x005b, 0x005d, 0x0179, 0x0136, 0x013c, 0x00d7,
+ /* 0xc0 */
+ 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x00ad, 0x014d, 0x00f6, 0x0146, 0x00f3, 0x00f5,
+ /* 0xd0 */
+ 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x00b9, 0x0107, 0x00fc, 0x0142, 0x015b, 0x2019,
+ /* 0xe0 */
+ 0x005c, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x00b2, 0x014c, 0x00d6, 0x0145, 0x00d3, 0x00d5,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x00b3, 0x0106, 0x00dc, 0x0141, 0x015a, 0x009f,
+};
+
+static int
+ebcdic1112_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ *pwc = (ucs4_t) ebcdic1112_2uni[c];
+ return 1;
+}
+
+static const unsigned char ebcdic1112_page00[384] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0xba, 0xe0, 0xbb, 0xb0, 0x6d, /* 0x58-0x5f */
+ 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0x00, 0x4a, 0xb1, 0x9f, 0x00, 0x6a, 0xb5, /* 0xa0-0xa7 */
+ 0x00, 0xb4, 0x00, 0x8a, 0x5f, 0xca, 0xaf, 0x00, /* 0xa8-0xaf */
+ 0x90, 0x8f, 0xea, 0xfa, 0x00, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */
+ 0x00, 0xda, 0x00, 0x8b, 0xb7, 0xb8, 0xb9, 0x00, /* 0xb8-0xbf */
+ 0x00, 0x00, 0x00, 0x00, 0x63, 0x67, 0x9e, 0x00, /* 0xc0-0xc7 */
+ 0x00, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
+ 0x00, 0x00, 0x00, 0xee, 0x00, 0xef, 0xec, 0xbf, /* 0xd0-0xd7 */
+ 0x80, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x59, /* 0xd8-0xdf */
+ 0x00, 0x00, 0x00, 0x00, 0x43, 0x47, 0x9c, 0x00, /* 0xe0-0xe7 */
+ 0x00, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */
+ 0x00, 0x00, 0x00, 0xce, 0x00, 0xcf, 0xcc, 0xe1, /* 0xf0-0xf7 */
+ 0x70, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, /* 0xf8-0xff */
+ /* 0x0100 */
+ 0xac, 0x8c, 0x00, 0x00, 0x64, 0x44, 0xfb, 0xdb, /* 0x00-0x07 */
+ 0x00, 0x00, 0x00, 0x00, 0x74, 0x54, 0x00, 0x00, /* 0x08-0x0f */
+ 0x00, 0x00, 0x68, 0x48, 0x00, 0x00, 0x73, 0x53, /* 0x10-0x17 */
+ 0x72, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
+ 0x00, 0x00, 0x78, 0x58, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
+ 0x00, 0x00, 0x76, 0xb2, 0x00, 0x00, 0x65, 0x45, /* 0x28-0x2f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbd, 0x9d, /* 0x30-0x37 */
+ 0x00, 0x00, 0x00, 0x77, 0xbe, 0x00, 0x00, 0x00, /* 0x38-0x3f */
+ 0x00, 0xfd, 0xdd, 0xae, 0x8e, 0xed, 0xcd, 0x00, /* 0x40-0x47 */
+ 0x00, 0x00, 0x00, 0x00, 0xeb, 0xcb, 0x00, 0x00, /* 0x48-0x4f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9a, 0x9b, /* 0x50-0x57 */
+ 0x00, 0x00, 0xfe, 0xde, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
+ 0x62, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
+ 0x00, 0x00, 0x66, 0x46, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
+ 0x00, 0x00, 0x75, 0x55, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
+ 0x00, 0xbc, 0xab, 0xad, 0x8d, 0x69, 0x49, 0x00, /* 0x78-0x7f */
+};
+static const unsigned char ebcdic1112_page20[8] = {
+ 0x00, 0xdf, 0x00, 0x00, 0x57, 0xaa, 0x56, 0x00, /* 0x18-0x1f */
+};
+
+static int
+ebcdic1112_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x0180)
+ c = ebcdic1112_page00[wc];
+ else if (wc >= 0x2018 && wc < 0x2020)
+ c = ebcdic1112_page20[wc-0x2018];
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic1122.h b/lib/ebcdic1122.h
new file mode 100644
index 0000000..2b97ac3
--- /dev/null
+++ b/lib/ebcdic1122.h
@@ -0,0 +1,137 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-1122
+ */
+
+static const unsigned short ebcdic1122_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x00e2, 0x007b, 0x00e0, 0x00e1, 0x00e3, 0x007d,
+ 0x00e7, 0x00f1, 0x00a7, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021,
+ /* 0x50 */
+ 0x0026, 0x0060, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef,
+ 0x00ec, 0x00df, 0x00a4, 0x00c5, 0x002a, 0x0029, 0x003b, 0x005e,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x00c2, 0x0023, 0x00c0, 0x00c1, 0x00c3, 0x0024,
+ 0x00c7, 0x00d1, 0x00f6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0x00f8, 0x005c, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf,
+ 0x00cc, 0x00e9, 0x003a, 0x00c4, 0x00d6, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x00ab, 0x00bb, 0x0161, 0x00fd, 0x017e, 0x00b1,
+ /* 0x90 */
+ 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x00b8, 0x00c6, 0x005d,
+ /* 0xa0 */
+ 0x00b5, 0x00fc, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x00a1, 0x00bf, 0x0160, 0x00dd, 0x017d, 0x00ae,
+ /* 0xb0 */
+ 0x00a2, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x005b, 0x00b6, 0x00bc,
+ 0x00bd, 0x00be, 0x00ac, 0x007c, 0x00af, 0x00a8, 0x00b4, 0x00d7,
+ /* 0xc0 */
+ 0x00e4, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00a6, 0x00f2, 0x00f3, 0x00f5,
+ /* 0xd0 */
+ 0x00e5, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x00b9, 0x00fb, 0x007e, 0x00f9, 0x00fa, 0x00ff,
+ /* 0xe0 */
+ 0x00c9, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x00b2, 0x00d4, 0x0040, 0x00d2, 0x00d3, 0x00d5,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f,
+};
+
+static int
+ebcdic1122_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ *pwc = (ucs4_t) ebcdic1122_2uni[c];
+ return 1;
+}
+
+static const unsigned char ebcdic1122_page00[256] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x4f, 0x7f, 0x63, 0x67, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0xec, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0xb5, 0x71, 0x9f, 0x5f, 0x6d, /* 0x58-0x5f */
+ 0x51, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0x43, 0xbb, 0x47, 0xdc, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0xaa, 0xb0, 0xb1, 0x5a, 0xb2, 0xcc, 0x4a, /* 0xa0-0xa7 */
+ 0xbd, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */
+ 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */
+ 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */
+ 0x64, 0x65, 0x62, 0x66, 0x7b, 0x5b, 0x9e, 0x68, /* 0xc0-0xc7 */
+ 0x74, 0xe0, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */
+ 0x00, 0x69, 0xed, 0xee, 0xeb, 0xef, 0x7c, 0xbf, /* 0xd0-0xd7 */
+ 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xad, 0x00, 0x59, /* 0xd8-0xdf */
+ 0x44, 0x45, 0x42, 0x46, 0xc0, 0xd0, 0x9c, 0x48, /* 0xe0-0xe7 */
+ 0x54, 0x79, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */
+ 0x00, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0x6a, 0xe1, /* 0xf0-0xf7 */
+ 0x70, 0xdd, 0xde, 0xdb, 0xa1, 0x8d, 0x00, 0xdf, /* 0xf8-0xff */
+};
+static const unsigned char ebcdic1122_page01[32] = {
+ 0xac, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0x8e, 0x00, /* 0x78-0x7f */
+};
+
+static int
+ebcdic1122_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x0100)
+ c = ebcdic1122_page00[wc];
+ else if (wc >= 0x0160 && wc < 0x0180)
+ c = ebcdic1122_page01[wc-0x0160];
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic1123.h b/lib/ebcdic1123.h
new file mode 100644
index 0000000..9f60dae
--- /dev/null
+++ b/lib/ebcdic1123.h
@@ -0,0 +1,144 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-1123
+ */
+
+static const unsigned short ebcdic1123_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x0452, 0x0491, 0x0451, 0x0454, 0x0455, 0x0456,
+ 0x0457, 0x0458, 0x005b, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021,
+ /* 0x50 */
+ 0x0026, 0x0459, 0x045a, 0x045b, 0x045c, 0x045e, 0x045f, 0x042a,
+ 0x2116, 0x0402, 0x005d, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x0490, 0x0401, 0x0404, 0x0405, 0x0406, 0x0407,
+ 0x0408, 0x0409, 0x007c, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0x040a, 0x040b, 0x040c, 0x00ad, 0x040e, 0x040f, 0x044e, 0x0430,
+ 0x0431, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0x0446, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x0434, 0x0435, 0x0444, 0x0433, 0x0445, 0x0438,
+ /* 0x90 */
+ 0x0439, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f,
+ /* 0xa0 */
+ 0x044f, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432,
+ /* 0xb0 */
+ 0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a,
+ 0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413,
+ /* 0xc0 */
+ 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c,
+ /* 0xd0 */
+ 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x041d, 0x041e, 0x041f, 0x042f, 0x0420, 0x0421,
+ /* 0xe0 */
+ 0x005c, 0x00a7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x0422, 0x0423, 0x0416, 0x0412, 0x042c, 0x042b,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x009f,
+};
+
+static int
+ebcdic1123_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ *pwc = (ucs4_t) ebcdic1123_2uni[c];
+ return 1;
+}
+
+static const unsigned char ebcdic1123_page00[176] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x4f, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0x4a, 0xe0, 0x5a, 0x5f, 0x6d, /* 0x58-0x5f */
+ 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0xc0, 0x6a, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe1, /* 0xa0-0xa7 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, /* 0xa8-0xaf */
+};
+static const unsigned char ebcdic1123_page04[152] = {
+ 0x00, 0x63, 0x59, 0x00, 0x64, 0x65, 0x66, 0x67, /* 0x00-0x07 */
+ 0x68, 0x69, 0x70, 0x71, 0x72, 0x00, 0x74, 0x75, /* 0x08-0x0f */
+ 0xb9, 0xba, 0xed, 0xbf, 0xbc, 0xbd, 0xec, 0xfa, /* 0x10-0x17 */
+ 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xda, 0xdb, 0xdc, /* 0x18-0x1f */
+ 0xde, 0xdf, 0xea, 0xeb, 0xbe, 0xca, 0xbb, 0xfe, /* 0x20-0x27 */
+ 0xfb, 0xfd, 0x57, 0xef, 0xee, 0xfc, 0xb8, 0xdd, /* 0x28-0x2f */
+ 0x77, 0x78, 0xaf, 0x8d, 0x8a, 0x8b, 0xae, 0xb2, /* 0x30-0x37 */
+ 0x8f, 0x90, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x38-0x3f */
+ 0xaa, 0xab, 0xac, 0xad, 0x8c, 0x8e, 0x80, 0xb6, /* 0x40-0x47 */
+ 0xb3, 0xb5, 0xb7, 0xb1, 0xb0, 0xb4, 0x76, 0xa0, /* 0x48-0x4f */
+ 0x00, 0x44, 0x42, 0x00, 0x45, 0x46, 0x47, 0x48, /* 0x50-0x57 */
+ 0x49, 0x51, 0x52, 0x53, 0x54, 0x00, 0x55, 0x56, /* 0x58-0x5f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */
+ 0x62, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */
+};
+
+static int
+ebcdic1123_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x00b0)
+ c = ebcdic1123_page00[wc];
+ else if (wc >= 0x0400 && wc < 0x0498)
+ c = ebcdic1123_page04[wc-0x0400];
+ else if (wc == 0x2116)
+ c = 0x58;
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic1130.h b/lib/ebcdic1130.h
new file mode 100644
index 0000000..ad9c8b4
--- /dev/null
+++ b/lib/ebcdic1130.h
@@ -0,0 +1,164 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-1130
+ */
+
+static const unsigned short ebcdic1130_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x00e0, 0x00e1, 0x0103, 0x00e5,
+ 0x00e7, 0x00f1, 0x005b, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021,
+ /* 0x50 */
+ 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef,
+ 0x0303, 0x00df, 0x005d, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x0102, 0x00c5,
+ 0x00c7, 0x00d1, 0x00a6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf,
+ 0x20ab, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x00ab, 0x00bb, 0x0111, 0x0309, 0x0300, 0x00b1,
+ /* 0x90 */
+ 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x0152, 0x00c6, 0x00a4,
+ /* 0xa0 */
+ 0x00b5, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x00a1, 0x00bf, 0x0110, 0x0323, 0x0301, 0x00ae,
+ /* 0xb0 */
+ 0x00a2, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x00a7, 0x00b6, 0x00bc,
+ 0x00bd, 0x00be, 0x00ac, 0x007c, 0x00af, 0x0153, 0x0178, 0x00d7,
+ /* 0xc0 */
+ 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00f6, 0x01b0, 0x00f3, 0x01a1,
+ /* 0xd0 */
+ 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x00b9, 0x00fb, 0x00fc, 0x00f9, 0x00fa, 0x00ff,
+ /* 0xe0 */
+ 0x005c, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x00b2, 0x00d4, 0x00d6, 0x01af, 0x00d3, 0x01a0,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f,
+};
+
+static int
+ebcdic1130_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ *pwc = (ucs4_t) ebcdic1130_2uni[c];
+ return 1;
+}
+
+static const unsigned char ebcdic1130_page00[440] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x4f, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0x4a, 0xe0, 0x5a, 0x5f, 0x6d, /* 0x58-0x5f */
+ 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0xc0, 0xbb, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0xaa, 0xb0, 0xb1, 0x9f, 0xb2, 0x6a, 0xb5, /* 0xa0-0xa7 */
+ 0x00, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */
+ 0x90, 0x8f, 0xea, 0xfa, 0x00, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */
+ 0x00, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */
+ 0x64, 0x65, 0x62, 0x00, 0x63, 0x67, 0x9e, 0x68, /* 0xc0-0xc7 */
+ 0x74, 0x71, 0x72, 0x73, 0x00, 0x75, 0x76, 0x77, /* 0xc8-0xcf */
+ 0x00, 0x69, 0x00, 0xee, 0xeb, 0x00, 0xec, 0xbf, /* 0xd0-0xd7 */
+ 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0x00, 0x00, 0x59, /* 0xd8-0xdf */
+ 0x44, 0x45, 0x42, 0x00, 0x43, 0x47, 0x9c, 0x48, /* 0xe0-0xe7 */
+ 0x54, 0x51, 0x52, 0x53, 0x00, 0x55, 0x56, 0x57, /* 0xe8-0xef */
+ 0x00, 0x49, 0x00, 0xce, 0xcb, 0x00, 0xcc, 0xe1, /* 0xf0-0xf7 */
+ 0x70, 0xdd, 0xde, 0xdb, 0xdc, 0x00, 0x00, 0xdf, /* 0xf8-0xff */
+ /* 0x0100 */
+ 0x00, 0x00, 0x66, 0x46, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */
+ 0xac, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */
+ 0x00, 0x00, 0x9d, 0xbd, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
+ 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */
+ 0xef, 0xcf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xed, /* 0xa8-0xaf */
+ 0xcd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */
+};
+static const unsigned char ebcdic1130_page03[40] = {
+ 0x8e, 0xae, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */
+ 0x00, 0x8d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
+ 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
+};
+
+static int
+ebcdic1130_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x01b8)
+ c = ebcdic1130_page00[wc];
+ else if (wc >= 0x0300 && wc < 0x0328)
+ c = ebcdic1130_page03[wc-0x0300];
+ else if (wc == 0x20ab)
+ c = 0x78;
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic1132.h b/lib/ebcdic1132.h
new file mode 100644
index 0000000..582be5f
--- /dev/null
+++ b/lib/ebcdic1132.h
@@ -0,0 +1,141 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-1132
+ */
+
+static const unsigned short ebcdic1132_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x0e81, 0x0e82, 0x0e84, 0x0e87, 0x0e88, 0x0eaa,
+ 0x0e8a, 0x005b, 0x00a2, 0x002e, 0x003c, 0x0028, 0x002b, 0x007c,
+ /* 0x50 */
+ 0x0026, 0xfffd, 0x0e8d, 0x0e94, 0x0e95, 0x0e96, 0x0e97, 0x0e99,
+ 0x0e9a, 0x005d, 0x0021, 0x0024, 0x002a, 0x0029, 0x003b, 0x00ac,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x0e9b, 0x0e9c, 0x0e9d, 0x0e9e, 0x0e9f, 0x0ea1,
+ 0x0ea2, 0x005e, 0x00a6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0x20ad, 0xfffd, 0x0ea3, 0x0ea5, 0x0ea7, 0x0eab, 0x0ead, 0x0eae,
+ 0xfffd, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0xfffd, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0xfffd, 0xfffd, 0x0eaf, 0x0eb0, 0x0eb2, 0x0eb3,
+ /* 0x90 */
+ 0xfffd, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x0eb4, 0x0eb5, 0x0eb6, 0x0eb7, 0x0eb8, 0x0eb9,
+ /* 0xa0 */
+ 0xfffd, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x0ebc, 0x0eb1, 0x0ebb, 0x0ebd, 0xfffd, 0xfffd,
+ /* 0xb0 */
+ 0x0ed0, 0x0ed1, 0x0ed2, 0x0ed3, 0x0ed4, 0x0ed5, 0x0ed6, 0x0ed7,
+ 0x0ed8, 0x0ed9, 0xfffd, 0x0ec0, 0x0ec1, 0x0ec2, 0x0ec3, 0x0ec4,
+ /* 0xc0 */
+ 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0xfffd, 0x0ec8, 0x0ec9, 0x0eca, 0x0ecb, 0x0ecc,
+ /* 0xd0 */
+ 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x0ecd, 0x0ec6, 0xfffd, 0x0edc, 0x0edd, 0xfffd,
+ /* 0xe0 */
+ 0x005c, 0xfffd, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x009f,
+};
+
+static int
+ebcdic1132_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ unsigned short wc = ebcdic1132_2uni[c];
+ if (wc != 0xfffd) {
+ *pwc = (ucs4_t) wc;
+ return 1;
+ }
+ return RET_ILSEQ;
+}
+
+static const unsigned char ebcdic1132_page00[176] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0x49, 0xe0, 0x59, 0x69, 0x6d, /* 0x58-0x5f */
+ 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x6a, 0x00, /* 0xa0-0xa7 */
+ 0x00, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, /* 0xa8-0xaf */
+};
+static const unsigned char ebcdic1132_page0e[96] = {
+ 0x00, 0x42, 0x43, 0x00, 0x44, 0x00, 0x00, 0x45, /* 0x80-0x87 */
+ 0x46, 0x00, 0x48, 0x00, 0x00, 0x52, 0x00, 0x00, /* 0x88-0x8f */
+ 0x00, 0x00, 0x00, 0x00, 0x53, 0x54, 0x55, 0x56, /* 0x90-0x97 */
+ 0x00, 0x57, 0x58, 0x62, 0x63, 0x64, 0x65, 0x66, /* 0x98-0x9f */
+ 0x00, 0x67, 0x68, 0x72, 0x00, 0x73, 0x00, 0x74, /* 0xa0-0xa7 */
+ 0x00, 0x00, 0x47, 0x75, 0x00, 0x76, 0x77, 0x8c, /* 0xa8-0xaf */
+ 0x8d, 0xab, 0x8e, 0x8f, 0x9a, 0x9b, 0x9c, 0x9d, /* 0xb0-0xb7 */
+ 0x9e, 0x9f, 0x00, 0xac, 0xaa, 0xad, 0x00, 0x00, /* 0xb8-0xbf */
+ 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0x00, 0xdb, 0x00, /* 0xc0-0xc7 */
+ 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xda, 0x00, 0x00, /* 0xc8-0xcf */
+ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xd0-0xd7 */
+ 0xb8, 0xb9, 0x00, 0x00, 0xdd, 0xde, 0x00, 0x00, /* 0xd8-0xdf */
+};
+
+static int
+ebcdic1132_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x00b0)
+ c = ebcdic1132_page00[wc];
+ else if (wc >= 0x0e80 && wc < 0x0ee0)
+ c = ebcdic1132_page0e[wc-0x0e80];
+ else if (wc == 0x20ad)
+ c = 0x70;
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic1137.h b/lib/ebcdic1137.h
new file mode 100644
index 0000000..19b28a7
--- /dev/null
+++ b/lib/ebcdic1137.h
@@ -0,0 +1,146 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-1137
+ */
+
+static const unsigned short ebcdic1137_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x0901, 0x0902, 0x0903, 0x0905, 0x0906, 0x0907,
+ 0x0908, 0x0909, 0x090a, 0x002e, 0x003c, 0x0028, 0x002b, 0x007c,
+ /* 0x50 */
+ 0x0026, 0x090b, 0x090c, 0x090d, 0x090e, 0x090f, 0x0910, 0x0911,
+ 0x0912, 0x0913, 0x0021, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x0914, 0x0915, 0x0916, 0x0917, 0x0918, 0x0919,
+ 0x091a, 0x091b, 0x091c, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0x091d, 0x091e, 0x091f, 0x0920, 0x0921, 0x0922, 0x0923, 0x0924,
+ 0x0925, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0x0926, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x0927, 0x0928, 0x092a, 0x092b, 0x092c, 0x092d,
+ /* 0x90 */
+ 0x092e, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x092f, 0x0930, 0x0932, 0x0933, 0x0935, 0x0936,
+ /* 0xa0 */
+ 0x200c, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x0937, 0x0938, 0x0939, 0x005b, 0x093c, 0x093d,
+ /* 0xb0 */
+ 0x093e, 0x093f, 0x0940, 0x0941, 0x0942, 0x0943, 0x0944, 0x0945,
+ 0x0946, 0x0947, 0x0948, 0x0949, 0x094a, 0x005d, 0x094b, 0x094c,
+ /* 0xc0 */
+ 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x094d, 0x0950, 0x0951, 0x0952, 0xfffd, 0xfffd,
+ /* 0xd0 */
+ 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x0960, 0x0961, 0x0962, 0x0963, 0x0964, 0x0965,
+ /* 0xe0 */
+ 0x005c, 0x200d, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x0966, 0x0967, 0x0968, 0x0969, 0x096a, 0x096b,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x096c, 0x096d, 0x096e, 0x096f, 0x0970, 0x009f,
+};
+
+static int
+ebcdic1137_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ unsigned short wc = ebcdic1137_2uni[c];
+ if (wc != 0xfffd) {
+ *pwc = (ucs4_t) wc;
+ return 1;
+ }
+ return RET_ILSEQ;
+}
+
+static const unsigned char ebcdic1137_page00[168] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0xad, 0xe0, 0xbd, 0x5f, 0x6d, /* 0x58-0x5f */
+ 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */
+};
+static const unsigned char ebcdic1137_page09[120] = {
+ 0x00, 0x42, 0x43, 0x44, 0x00, 0x45, 0x46, 0x47, /* 0x00-0x07 */
+ 0x48, 0x49, 0x4a, 0x51, 0x52, 0x53, 0x54, 0x55, /* 0x08-0x0f */
+ 0x56, 0x57, 0x58, 0x59, 0x62, 0x63, 0x64, 0x65, /* 0x10-0x17 */
+ 0x66, 0x67, 0x68, 0x69, 0x6a, 0x70, 0x71, 0x72, /* 0x18-0x1f */
+ 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x80, 0x8a, /* 0x20-0x27 */
+ 0x8b, 0x00, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x9a, /* 0x28-0x2f */
+ 0x9b, 0x00, 0x9c, 0x9d, 0x00, 0x9e, 0x9f, 0xaa, /* 0x30-0x37 */
+ 0xab, 0xac, 0x00, 0x00, 0xae, 0xaf, 0xb0, 0xb1, /* 0x38-0x3f */
+ 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, /* 0x40-0x47 */
+ 0xba, 0xbb, 0xbc, 0xbe, 0xbf, 0xca, 0x00, 0x00, /* 0x48-0x4f */
+ 0xcb, 0xcc, 0xcd, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
+ 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xea, 0xeb, /* 0x60-0x67 */
+ 0xec, 0xed, 0xee, 0xef, 0xfa, 0xfb, 0xfc, 0xfd, /* 0x68-0x6f */
+ 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
+};
+static const unsigned char ebcdic1137_page20[8] = {
+ 0x00, 0x00, 0x00, 0x00, 0xa0, 0xe1, 0x00, 0x00, /* 0x08-0x0f */
+};
+
+static int
+ebcdic1137_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x00a8)
+ c = ebcdic1137_page00[wc];
+ else if (wc >= 0x0900 && wc < 0x0978)
+ c = ebcdic1137_page09[wc-0x0900];
+ else if (wc >= 0x2008 && wc < 0x2010)
+ c = ebcdic1137_page20[wc-0x2008];
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic1140.h b/lib/ebcdic1140.h
new file mode 100644
index 0000000..f10c1cf
--- /dev/null
+++ b/lib/ebcdic1140.h
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-1140
+ */
+
+static const unsigned short ebcdic1140_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x00e0, 0x00e1, 0x00e3, 0x00e5,
+ 0x00e7, 0x00f1, 0x00a2, 0x002e, 0x003c, 0x0028, 0x002b, 0x007c,
+ /* 0x50 */
+ 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef,
+ 0x00ec, 0x00df, 0x0021, 0x0024, 0x002a, 0x0029, 0x003b, 0x00ac,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x00c3, 0x00c5,
+ 0x00c7, 0x00d1, 0x00a6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf,
+ 0x00cc, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x00ab, 0x00bb, 0x00f0, 0x00fd, 0x00fe, 0x00b1,
+ /* 0x90 */
+ 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x00b8, 0x00c6, 0x20ac,
+ /* 0xa0 */
+ 0x00b5, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x00a1, 0x00bf, 0x00d0, 0x00dd, 0x00de, 0x00ae,
+ /* 0xb0 */
+ 0x005e, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x00a7, 0x00b6, 0x00bc,
+ 0x00bd, 0x00be, 0x005b, 0x005d, 0x00af, 0x00a8, 0x00b4, 0x00d7,
+ /* 0xc0 */
+ 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00f6, 0x00f2, 0x00f3, 0x00f5,
+ /* 0xd0 */
+ 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x00b9, 0x00fb, 0x00fc, 0x00f9, 0x00fa, 0x00ff,
+ /* 0xe0 */
+ 0x005c, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x00b2, 0x00d4, 0x00d6, 0x00d2, 0x00d3, 0x00d5,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f,
+};
+
+static int
+ebcdic1140_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ *pwc = (ucs4_t) ebcdic1140_2uni[c];
+ return 1;
+}
+
+static const unsigned char ebcdic1140_page00[256] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0xba, 0xe0, 0xbb, 0xb0, 0x6d, /* 0x58-0x5f */
+ 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0xaa, 0x4a, 0xb1, 0x00, 0xb2, 0x6a, 0xb5, /* 0xa0-0xa7 */
+ 0xbd, 0xb4, 0x9a, 0x8a, 0x5f, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */
+ 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */
+ 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */
+ 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68, /* 0xc0-0xc7 */
+ 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */
+ 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf, /* 0xd0-0xd7 */
+ 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xad, 0xae, 0x59, /* 0xd8-0xdf */
+ 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0x48, /* 0xe0-0xe7 */
+ 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */
+ 0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1, /* 0xf0-0xf7 */
+ 0x70, 0xdd, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf, /* 0xf8-0xff */
+};
+
+static int
+ebcdic1140_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x0100)
+ c = ebcdic1140_page00[wc];
+ else if (wc == 0x20ac)
+ c = 0x9f;
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic1141.h b/lib/ebcdic1141.h
new file mode 100644
index 0000000..94a1bba
--- /dev/null
+++ b/lib/ebcdic1141.h
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-1141
+ */
+
+static const unsigned short ebcdic1141_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x00e2, 0x007b, 0x00e0, 0x00e1, 0x00e3, 0x00e5,
+ 0x00e7, 0x00f1, 0x00c4, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021,
+ /* 0x50 */
+ 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef,
+ 0x00ec, 0x007e, 0x00dc, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x00c2, 0x005b, 0x00c0, 0x00c1, 0x00c3, 0x00c5,
+ 0x00c7, 0x00d1, 0x00f6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf,
+ 0x00cc, 0x0060, 0x003a, 0x0023, 0x00a7, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x00ab, 0x00bb, 0x00f0, 0x00fd, 0x00fe, 0x00b1,
+ /* 0x90 */
+ 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x00b8, 0x00c6, 0x20ac,
+ /* 0xa0 */
+ 0x00b5, 0x00df, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x00a1, 0x00bf, 0x00d0, 0x00dd, 0x00de, 0x00ae,
+ /* 0xb0 */
+ 0x00a2, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x0040, 0x00b6, 0x00bc,
+ 0x00bd, 0x00be, 0x00ac, 0x007c, 0x00af, 0x00a8, 0x00b4, 0x00d7,
+ /* 0xc0 */
+ 0x00e4, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00a6, 0x00f2, 0x00f3, 0x00f5,
+ /* 0xd0 */
+ 0x00fc, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x00b9, 0x00fb, 0x007d, 0x00f9, 0x00fa, 0x00ff,
+ /* 0xe0 */
+ 0x00d6, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x00b2, 0x00d4, 0x005c, 0x00d2, 0x00d3, 0x00d5,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x00b3, 0x00db, 0x005d, 0x00d9, 0x00da, 0x009f,
+};
+
+static int
+ebcdic1141_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ *pwc = (ucs4_t) ebcdic1141_2uni[c];
+ return 1;
+}
+
+static const unsigned char ebcdic1141_page00[256] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x4f, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0xb5, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0x63, 0xec, 0xfc, 0x5f, 0x6d, /* 0x58-0x5f */
+ 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0x43, 0xbb, 0xdc, 0x59, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0xaa, 0xb0, 0xb1, 0x00, 0xb2, 0xcc, 0x7c, /* 0xa0-0xa7 */
+ 0xbd, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */
+ 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */
+ 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */
+ 0x64, 0x65, 0x62, 0x66, 0x4a, 0x67, 0x9e, 0x68, /* 0xc0-0xc7 */
+ 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */
+ 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xe0, 0xbf, /* 0xd0-0xd7 */
+ 0x80, 0xfd, 0xfe, 0xfb, 0x5a, 0xad, 0xae, 0xa1, /* 0xd8-0xdf */
+ 0x44, 0x45, 0x42, 0x46, 0xc0, 0x47, 0x9c, 0x48, /* 0xe0-0xe7 */
+ 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */
+ 0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0x6a, 0xe1, /* 0xf0-0xf7 */
+ 0x70, 0xdd, 0xde, 0xdb, 0xd0, 0x8d, 0x8e, 0xdf, /* 0xf8-0xff */
+};
+
+static int
+ebcdic1141_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x0100)
+ c = ebcdic1141_page00[wc];
+ else if (wc == 0x20ac)
+ c = 0x9f;
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic1142.h b/lib/ebcdic1142.h
new file mode 100644
index 0000000..4676d66
--- /dev/null
+++ b/lib/ebcdic1142.h
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-1142
+ */
+
+static const unsigned short ebcdic1142_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x00e0, 0x00e1, 0x00e3, 0x007d,
+ 0x00e7, 0x00f1, 0x0023, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021,
+ /* 0x50 */
+ 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef,
+ 0x00ec, 0x00df, 0x20ac, 0x00c5, 0x002a, 0x0029, 0x003b, 0x005e,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x00c3, 0x0024,
+ 0x00c7, 0x00d1, 0x00f8, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0x00a6, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf,
+ 0x00cc, 0x0060, 0x003a, 0x00c6, 0x00d8, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0x0040, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x00ab, 0x00bb, 0x00f0, 0x00fd, 0x00fe, 0x00b1,
+ /* 0x90 */
+ 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x00aa, 0x00ba, 0x007b, 0x00b8, 0x005b, 0x005d,
+ /* 0xa0 */
+ 0x00b5, 0x00fc, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x00a1, 0x00bf, 0x00d0, 0x00dd, 0x00de, 0x00ae,
+ /* 0xb0 */
+ 0x00a2, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x00a7, 0x00b6, 0x00bc,
+ 0x00bd, 0x00be, 0x00ac, 0x007c, 0x00af, 0x00a8, 0x00b4, 0x00d7,
+ /* 0xc0 */
+ 0x00e6, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00f6, 0x00f2, 0x00f3, 0x00f5,
+ /* 0xd0 */
+ 0x00e5, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x00b9, 0x00fb, 0x007e, 0x00f9, 0x00fa, 0x00ff,
+ /* 0xe0 */
+ 0x005c, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x00b2, 0x00d4, 0x00d6, 0x00d2, 0x00d3, 0x00d5,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f,
+};
+
+static int
+ebcdic1142_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ *pwc = (ucs4_t) ebcdic1142_2uni[c];
+ return 1;
+}
+
+static const unsigned char ebcdic1142_page00[256] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x4f, 0x7f, 0x4a, 0x67, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0x80, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0x9e, 0xe0, 0x9f, 0x5f, 0x6d, /* 0x58-0x5f */
+ 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0x9c, 0xbb, 0x47, 0xdc, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0xaa, 0xb0, 0xb1, 0x00, 0xb2, 0x70, 0xb5, /* 0xa0-0xa7 */
+ 0xbd, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */
+ 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */
+ 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */
+ 0x64, 0x65, 0x62, 0x66, 0x63, 0x5b, 0x7b, 0x68, /* 0xc0-0xc7 */
+ 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */
+ 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf, /* 0xd0-0xd7 */
+ 0x7c, 0xfd, 0xfe, 0xfb, 0xfc, 0xad, 0xae, 0x59, /* 0xd8-0xdf */
+ 0x44, 0x45, 0x42, 0x46, 0x43, 0xd0, 0xc0, 0x48, /* 0xe0-0xe7 */
+ 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */
+ 0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1, /* 0xf0-0xf7 */
+ 0x6a, 0xdd, 0xde, 0xdb, 0xa1, 0x8d, 0x8e, 0xdf, /* 0xf8-0xff */
+};
+
+static int
+ebcdic1142_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x0100)
+ c = ebcdic1142_page00[wc];
+ else if (wc == 0x20ac)
+ c = 0x5a;
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic1143.h b/lib/ebcdic1143.h
new file mode 100644
index 0000000..e602466
--- /dev/null
+++ b/lib/ebcdic1143.h
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-1143
+ */
+
+static const unsigned short ebcdic1143_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x00e2, 0x007b, 0x00e0, 0x00e1, 0x00e3, 0x007d,
+ 0x00e7, 0x00f1, 0x00a7, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021,
+ /* 0x50 */
+ 0x0026, 0x0060, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef,
+ 0x00ec, 0x00df, 0x20ac, 0x00c5, 0x002a, 0x0029, 0x003b, 0x005e,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x00c2, 0x0023, 0x00c0, 0x00c1, 0x00c3, 0x0024,
+ 0x00c7, 0x00d1, 0x00f6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0x00f8, 0x005c, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf,
+ 0x00cc, 0x00e9, 0x003a, 0x00c4, 0x00d6, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x00ab, 0x00bb, 0x00f0, 0x00fd, 0x00fe, 0x00b1,
+ /* 0x90 */
+ 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x00b8, 0x00c6, 0x005d,
+ /* 0xa0 */
+ 0x00b5, 0x00fc, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x00a1, 0x00bf, 0x00d0, 0x00dd, 0x00de, 0x00ae,
+ /* 0xb0 */
+ 0x00a2, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x005b, 0x00b6, 0x00bc,
+ 0x00bd, 0x00be, 0x00ac, 0x007c, 0x00af, 0x00a8, 0x00b4, 0x00d7,
+ /* 0xc0 */
+ 0x00e4, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00a6, 0x00f2, 0x00f3, 0x00f5,
+ /* 0xd0 */
+ 0x00e5, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x00b9, 0x00fb, 0x007e, 0x00f9, 0x00fa, 0x00ff,
+ /* 0xe0 */
+ 0x00c9, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x00b2, 0x00d4, 0x0040, 0x00d2, 0x00d3, 0x00d5,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f,
+};
+
+static int
+ebcdic1143_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ *pwc = (ucs4_t) ebcdic1143_2uni[c];
+ return 1;
+}
+
+static const unsigned char ebcdic1143_page00[256] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x4f, 0x7f, 0x63, 0x67, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0xec, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0xb5, 0x71, 0x9f, 0x5f, 0x6d, /* 0x58-0x5f */
+ 0x51, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0x43, 0xbb, 0x47, 0xdc, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0xaa, 0xb0, 0xb1, 0x00, 0xb2, 0xcc, 0x4a, /* 0xa0-0xa7 */
+ 0xbd, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */
+ 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */
+ 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */
+ 0x64, 0x65, 0x62, 0x66, 0x7b, 0x5b, 0x9e, 0x68, /* 0xc0-0xc7 */
+ 0x74, 0xe0, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */
+ 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0x7c, 0xbf, /* 0xd0-0xd7 */
+ 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xad, 0xae, 0x59, /* 0xd8-0xdf */
+ 0x44, 0x45, 0x42, 0x46, 0xc0, 0xd0, 0x9c, 0x48, /* 0xe0-0xe7 */
+ 0x54, 0x79, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */
+ 0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0x6a, 0xe1, /* 0xf0-0xf7 */
+ 0x70, 0xdd, 0xde, 0xdb, 0xa1, 0x8d, 0x8e, 0xdf, /* 0xf8-0xff */
+};
+
+static int
+ebcdic1143_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x0100)
+ c = ebcdic1143_page00[wc];
+ else if (wc == 0x20ac)
+ c = 0x5a;
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic1144.h b/lib/ebcdic1144.h
new file mode 100644
index 0000000..5d63eb8
--- /dev/null
+++ b/lib/ebcdic1144.h
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-1144
+ */
+
+static const unsigned short ebcdic1144_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x007b, 0x00e1, 0x00e3, 0x00e5,
+ 0x005c, 0x00f1, 0x00b0, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021,
+ /* 0x50 */
+ 0x0026, 0x005d, 0x00ea, 0x00eb, 0x007d, 0x00ed, 0x00ee, 0x00ef,
+ 0x007e, 0x00df, 0x00e9, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x00c3, 0x00c5,
+ 0x00c7, 0x00d1, 0x00f2, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf,
+ 0x00cc, 0x00f9, 0x003a, 0x00a3, 0x00a7, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x00ab, 0x00bb, 0x00f0, 0x00fd, 0x00fe, 0x00b1,
+ /* 0x90 */
+ 0x005b, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x00b8, 0x00c6, 0x20ac,
+ /* 0xa0 */
+ 0x00b5, 0x00ec, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x00a1, 0x00bf, 0x00d0, 0x00dd, 0x00de, 0x00ae,
+ /* 0xb0 */
+ 0x00a2, 0x0023, 0x00a5, 0x00b7, 0x00a9, 0x0040, 0x00b6, 0x00bc,
+ 0x00bd, 0x00be, 0x00ac, 0x007c, 0x00af, 0x00a8, 0x00b4, 0x00d7,
+ /* 0xc0 */
+ 0x00e0, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00f6, 0x00a6, 0x00f3, 0x00f5,
+ /* 0xd0 */
+ 0x00e8, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x00b9, 0x00fb, 0x00fc, 0x0060, 0x00fa, 0x00ff,
+ /* 0xe0 */
+ 0x00e7, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x00b2, 0x00d4, 0x00d6, 0x00d2, 0x00d3, 0x00d5,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f,
+};
+
+static int
+ebcdic1144_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ *pwc = (ucs4_t) ebcdic1144_2uni[c];
+ return 1;
+}
+
+static const unsigned char ebcdic1144_page00[256] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x4f, 0x7f, 0xb1, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0xb5, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0x90, 0x48, 0x51, 0x5f, 0x6d, /* 0x58-0x5f */
+ 0xdd, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0x44, 0xbb, 0x54, 0x58, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0xaa, 0xb0, 0x7b, 0x00, 0xb2, 0xcd, 0x7c, /* 0xa0-0xa7 */
+ 0xbd, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */
+ 0x4a, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */
+ 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */
+ 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68, /* 0xc0-0xc7 */
+ 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */
+ 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf, /* 0xd0-0xd7 */
+ 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xad, 0xae, 0x59, /* 0xd8-0xdf */
+ 0xc0, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0xe0, /* 0xe0-0xe7 */
+ 0xd0, 0x5a, 0x52, 0x53, 0xa1, 0x55, 0x56, 0x57, /* 0xe8-0xef */
+ 0x8c, 0x49, 0x6a, 0xce, 0xcb, 0xcf, 0xcc, 0xe1, /* 0xf0-0xf7 */
+ 0x70, 0x79, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf, /* 0xf8-0xff */
+};
+
+static int
+ebcdic1144_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x0100)
+ c = ebcdic1144_page00[wc];
+ else if (wc == 0x20ac)
+ c = 0x9f;
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic1145.h b/lib/ebcdic1145.h
new file mode 100644
index 0000000..23788d5
--- /dev/null
+++ b/lib/ebcdic1145.h
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-1145
+ */
+
+static const unsigned short ebcdic1145_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x00e0, 0x00e1, 0x00e3, 0x00e5,
+ 0x00e7, 0x00a6, 0x005b, 0x002e, 0x003c, 0x0028, 0x002b, 0x007c,
+ /* 0x50 */
+ 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef,
+ 0x00ec, 0x00df, 0x005d, 0x0024, 0x002a, 0x0029, 0x003b, 0x00ac,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x00c3, 0x00c5,
+ 0x00c7, 0x0023, 0x00f1, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf,
+ 0x00cc, 0x0060, 0x003a, 0x00d1, 0x0040, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x00ab, 0x00bb, 0x00f0, 0x00fd, 0x00fe, 0x00b1,
+ /* 0x90 */
+ 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x00b8, 0x00c6, 0x20ac,
+ /* 0xa0 */
+ 0x00b5, 0x00a8, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x00a1, 0x00bf, 0x00d0, 0x00dd, 0x00de, 0x00ae,
+ /* 0xb0 */
+ 0x00a2, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x00a7, 0x00b6, 0x00bc,
+ 0x00bd, 0x00be, 0x005e, 0x0021, 0x00af, 0x007e, 0x00b4, 0x00d7,
+ /* 0xc0 */
+ 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00f6, 0x00f2, 0x00f3, 0x00f5,
+ /* 0xd0 */
+ 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x00b9, 0x00fb, 0x00fc, 0x00f9, 0x00fa, 0x00ff,
+ /* 0xe0 */
+ 0x005c, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x00b2, 0x00d4, 0x00d6, 0x00d2, 0x00d3, 0x00d5,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f,
+};
+
+static int
+ebcdic1145_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ *pwc = (ucs4_t) ebcdic1145_2uni[c];
+ return 1;
+}
+
+static const unsigned char ebcdic1145_page00[256] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0xbb, 0x7f, 0x69, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0x4a, 0xe0, 0x5a, 0xba, 0x6d, /* 0x58-0x5f */
+ 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xbd, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0xaa, 0xb0, 0xb1, 0x00, 0xb2, 0x49, 0xb5, /* 0xa0-0xa7 */
+ 0xa1, 0xb4, 0x9a, 0x8a, 0x5f, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */
+ 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */
+ 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */
+ 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68, /* 0xc0-0xc7 */
+ 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */
+ 0xac, 0x7b, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf, /* 0xd0-0xd7 */
+ 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xad, 0xae, 0x59, /* 0xd8-0xdf */
+ 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0x48, /* 0xe0-0xe7 */
+ 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */
+ 0x8c, 0x6a, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1, /* 0xf0-0xf7 */
+ 0x70, 0xdd, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf, /* 0xf8-0xff */
+};
+
+static int
+ebcdic1145_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x0100)
+ c = ebcdic1145_page00[wc];
+ else if (wc == 0x20ac)
+ c = 0x9f;
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic1146.h b/lib/ebcdic1146.h
new file mode 100644
index 0000000..46a60b5
--- /dev/null
+++ b/lib/ebcdic1146.h
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-1146
+ */
+
+static const unsigned short ebcdic1146_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x00e0, 0x00e1, 0x00e3, 0x00e5,
+ 0x00e7, 0x00f1, 0x0024, 0x002e, 0x003c, 0x0028, 0x002b, 0x007c,
+ /* 0x50 */
+ 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef,
+ 0x00ec, 0x00df, 0x0021, 0x00a3, 0x002a, 0x0029, 0x003b, 0x00ac,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x00c3, 0x00c5,
+ 0x00c7, 0x00d1, 0x00a6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf,
+ 0x00cc, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x00ab, 0x00bb, 0x00f0, 0x00fd, 0x00fe, 0x00b1,
+ /* 0x90 */
+ 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x00b8, 0x00c6, 0x20ac,
+ /* 0xa0 */
+ 0x00b5, 0x00af, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x00a1, 0x00bf, 0x00d0, 0x00dd, 0x00de, 0x00ae,
+ /* 0xb0 */
+ 0x00a2, 0x005b, 0x00a5, 0x00b7, 0x00a9, 0x00a7, 0x00b6, 0x00bc,
+ 0x00bd, 0x00be, 0x005e, 0x005d, 0x007e, 0x00a8, 0x00b4, 0x00d7,
+ /* 0xc0 */
+ 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00f6, 0x00f2, 0x00f3, 0x00f5,
+ /* 0xd0 */
+ 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x00b9, 0x00fb, 0x00fc, 0x00f9, 0x00fa, 0x00ff,
+ /* 0xe0 */
+ 0x005c, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x00b2, 0x00d4, 0x00d6, 0x00d2, 0x00d3, 0x00d5,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f,
+};
+
+static int
+ebcdic1146_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ *pwc = (ucs4_t) ebcdic1146_2uni[c];
+ return 1;
+}
+
+static const unsigned char ebcdic1146_page00[256] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x5a, 0x7f, 0x7b, 0x4a, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0xb1, 0xe0, 0xbb, 0xba, 0x6d, /* 0x58-0x5f */
+ 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xbc, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0xaa, 0xb0, 0x5b, 0x00, 0xb2, 0x6a, 0xb5, /* 0xa0-0xa7 */
+ 0xbd, 0xb4, 0x9a, 0x8a, 0x5f, 0xca, 0xaf, 0xa1, /* 0xa8-0xaf */
+ 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */
+ 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */
+ 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68, /* 0xc0-0xc7 */
+ 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */
+ 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf, /* 0xd0-0xd7 */
+ 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xad, 0xae, 0x59, /* 0xd8-0xdf */
+ 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0x48, /* 0xe0-0xe7 */
+ 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */
+ 0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1, /* 0xf0-0xf7 */
+ 0x70, 0xdd, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf, /* 0xf8-0xff */
+};
+
+static int
+ebcdic1146_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x0100)
+ c = ebcdic1146_page00[wc];
+ else if (wc == 0x20ac)
+ c = 0x9f;
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic1147.h b/lib/ebcdic1147.h
new file mode 100644
index 0000000..34e3645
--- /dev/null
+++ b/lib/ebcdic1147.h
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-1147
+ */
+
+static const unsigned short ebcdic1147_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x0040, 0x00e1, 0x00e3, 0x00e5,
+ 0x005c, 0x00f1, 0x00b0, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021,
+ /* 0x50 */
+ 0x0026, 0x007b, 0x00ea, 0x00eb, 0x007d, 0x00ed, 0x00ee, 0x00ef,
+ 0x00ec, 0x00df, 0x00a7, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x00c3, 0x00c5,
+ 0x00c7, 0x00d1, 0x00f9, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf,
+ 0x00cc, 0x00b5, 0x003a, 0x00a3, 0x00e0, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x00ab, 0x00bb, 0x00f0, 0x00fd, 0x00fe, 0x00b1,
+ /* 0x90 */
+ 0x005b, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x00b8, 0x00c6, 0x20ac,
+ /* 0xa0 */
+ 0x0060, 0x00a8, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x00a1, 0x00bf, 0x00d0, 0x00dd, 0x00de, 0x00ae,
+ /* 0xb0 */
+ 0x00a2, 0x0023, 0x00a5, 0x00b7, 0x00a9, 0x005d, 0x00b6, 0x00bc,
+ 0x00bd, 0x00be, 0x00ac, 0x007c, 0x00af, 0x007e, 0x00b4, 0x00d7,
+ /* 0xc0 */
+ 0x00e9, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00f6, 0x00f2, 0x00f3, 0x00f5,
+ /* 0xd0 */
+ 0x00e8, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x00b9, 0x00fb, 0x00fc, 0x00a6, 0x00fa, 0x00ff,
+ /* 0xe0 */
+ 0x00e7, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x00b2, 0x00d4, 0x00d6, 0x00d2, 0x00d3, 0x00d5,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f,
+};
+
+static int
+ebcdic1147_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ *pwc = (ucs4_t) ebcdic1147_2uni[c];
+ return 1;
+}
+
+static const unsigned char ebcdic1147_page00[256] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x4f, 0x7f, 0xb1, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0x44, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0x90, 0x48, 0xb5, 0x5f, 0x6d, /* 0x58-0x5f */
+ 0xa0, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0x51, 0xbb, 0x54, 0xbd, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0xaa, 0xb0, 0x7b, 0x00, 0xb2, 0xdd, 0x5a, /* 0xa0-0xa7 */
+ 0xa1, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */
+ 0x4a, 0x8f, 0xea, 0xfa, 0xbe, 0x79, 0xb6, 0xb3, /* 0xb0-0xb7 */
+ 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */
+ 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68, /* 0xc0-0xc7 */
+ 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */
+ 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf, /* 0xd0-0xd7 */
+ 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xad, 0xae, 0x59, /* 0xd8-0xdf */
+ 0x7c, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0xe0, /* 0xe0-0xe7 */
+ 0xd0, 0xc0, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */
+ 0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1, /* 0xf0-0xf7 */
+ 0x70, 0x6a, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf, /* 0xf8-0xff */
+};
+
+static int
+ebcdic1147_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x0100)
+ c = ebcdic1147_page00[wc];
+ else if (wc == 0x20ac)
+ c = 0x9f;
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic1148.h b/lib/ebcdic1148.h
new file mode 100644
index 0000000..fc51e27
--- /dev/null
+++ b/lib/ebcdic1148.h
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-1148
+ */
+
+static const unsigned short ebcdic1148_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x00e0, 0x00e1, 0x00e3, 0x00e5,
+ 0x00e7, 0x00f1, 0x005b, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021,
+ /* 0x50 */
+ 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef,
+ 0x00ec, 0x00df, 0x005d, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x00c3, 0x00c5,
+ 0x00c7, 0x00d1, 0x00a6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf,
+ 0x00cc, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x00ab, 0x00bb, 0x00f0, 0x00fd, 0x00fe, 0x00b1,
+ /* 0x90 */
+ 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x00b8, 0x00c6, 0x20ac,
+ /* 0xa0 */
+ 0x00b5, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x00a1, 0x00bf, 0x00d0, 0x00dd, 0x00de, 0x00ae,
+ /* 0xb0 */
+ 0x00a2, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x00a7, 0x00b6, 0x00bc,
+ 0x00bd, 0x00be, 0x00ac, 0x007c, 0x00af, 0x00a8, 0x00b4, 0x00d7,
+ /* 0xc0 */
+ 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00f6, 0x00f2, 0x00f3, 0x00f5,
+ /* 0xd0 */
+ 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x00b9, 0x00fb, 0x00fc, 0x00f9, 0x00fa, 0x00ff,
+ /* 0xe0 */
+ 0x005c, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x00b2, 0x00d4, 0x00d6, 0x00d2, 0x00d3, 0x00d5,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f,
+};
+
+static int
+ebcdic1148_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ *pwc = (ucs4_t) ebcdic1148_2uni[c];
+ return 1;
+}
+
+static const unsigned char ebcdic1148_page00[256] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x4f, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0x4a, 0xe0, 0x5a, 0x5f, 0x6d, /* 0x58-0x5f */
+ 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0xc0, 0xbb, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0xaa, 0xb0, 0xb1, 0x00, 0xb2, 0x6a, 0xb5, /* 0xa0-0xa7 */
+ 0xbd, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */
+ 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */
+ 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */
+ 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68, /* 0xc0-0xc7 */
+ 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */
+ 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf, /* 0xd0-0xd7 */
+ 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xad, 0xae, 0x59, /* 0xd8-0xdf */
+ 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0x48, /* 0xe0-0xe7 */
+ 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */
+ 0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1, /* 0xf0-0xf7 */
+ 0x70, 0xdd, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf, /* 0xf8-0xff */
+};
+
+static int
+ebcdic1148_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x0100)
+ c = ebcdic1148_page00[wc];
+ else if (wc == 0x20ac)
+ c = 0x9f;
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic1149.h b/lib/ebcdic1149.h
new file mode 100644
index 0000000..027844e
--- /dev/null
+++ b/lib/ebcdic1149.h
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-1149
+ */
+
+static const unsigned short ebcdic1149_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x00e0, 0x00e1, 0x00e3, 0x00e5,
+ 0x00e7, 0x00f1, 0x00de, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021,
+ /* 0x50 */
+ 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef,
+ 0x00ec, 0x00df, 0x00c6, 0x0024, 0x002a, 0x0029, 0x003b, 0x00d6,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x00c3, 0x00c5,
+ 0x00c7, 0x00d1, 0x00a6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf,
+ 0x00cc, 0x00f0, 0x003a, 0x0023, 0x00d0, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x00ab, 0x00bb, 0x0060, 0x00fd, 0x007b, 0x00b1,
+ /* 0x90 */
+ 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x00aa, 0x00ba, 0x007d, 0x00b8, 0x005d, 0x20ac,
+ /* 0xa0 */
+ 0x00b5, 0x00f6, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x00a1, 0x00bf, 0x0040, 0x00dd, 0x005b, 0x00ae,
+ /* 0xb0 */
+ 0x00a2, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x00a7, 0x00b6, 0x00bc,
+ 0x00bd, 0x00be, 0x00ac, 0x007c, 0x00af, 0x00a8, 0x005c, 0x00d7,
+ /* 0xc0 */
+ 0x00fe, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x00ad, 0x00f4, 0x007e, 0x00f2, 0x00f3, 0x00f5,
+ /* 0xd0 */
+ 0x00e6, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x00b9, 0x00fb, 0x00fc, 0x00f9, 0x00fa, 0x00ff,
+ /* 0xe0 */
+ 0x00b4, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x00b2, 0x00d4, 0x005e, 0x00d2, 0x00d3, 0x00d5,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f,
+};
+
+static int
+ebcdic1149_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ *pwc = (ucs4_t) ebcdic1149_2uni[c];
+ return 1;
+}
+
+static const unsigned char ebcdic1149_page00[256] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x4f, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0xac, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0xae, 0xbe, 0x9e, 0xec, 0x6d, /* 0x58-0x5f */
+ 0x8c, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0x8e, 0xbb, 0x9c, 0xcc, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0xaa, 0xb0, 0xb1, 0x00, 0xb2, 0x6a, 0xb5, /* 0xa0-0xa7 */
+ 0xbd, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */
+ 0x90, 0x8f, 0xea, 0xfa, 0xe0, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */
+ 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */
+ 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x5a, 0x68, /* 0xc0-0xc7 */
+ 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */
+ 0x7c, 0x69, 0xed, 0xee, 0xeb, 0xef, 0x5f, 0xbf, /* 0xd0-0xd7 */
+ 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xad, 0x4a, 0x59, /* 0xd8-0xdf */
+ 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0xd0, 0x48, /* 0xe0-0xe7 */
+ 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */
+ 0x79, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xa1, 0xe1, /* 0xf0-0xf7 */
+ 0x70, 0xdd, 0xde, 0xdb, 0xdc, 0x8d, 0xc0, 0xdf, /* 0xf8-0xff */
+};
+
+static int
+ebcdic1149_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x0100)
+ c = ebcdic1149_page00[wc];
+ else if (wc == 0x20ac)
+ c = 0x9f;
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic1153.h b/lib/ebcdic1153.h
new file mode 100644
index 0000000..09bdd6d
--- /dev/null
+++ b/lib/ebcdic1153.h
@@ -0,0 +1,156 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-1153
+ */
+
+static const unsigned short ebcdic1153_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x0163, 0x00e1, 0x0103, 0x010d,
+ 0x00e7, 0x0107, 0x005b, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021,
+ /* 0x50 */
+ 0x0026, 0x00e9, 0x0119, 0x00eb, 0x016f, 0x00ed, 0x00ee, 0x013e,
+ 0x013a, 0x00df, 0x005d, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x00c2, 0x00c4, 0x02dd, 0x00c1, 0x0102, 0x010c,
+ 0x00c7, 0x0106, 0x007c, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0x02c7, 0x00c9, 0x0118, 0x00cb, 0x016e, 0x00cd, 0x00ce, 0x013d,
+ 0x0139, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0x02d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x015b, 0x0148, 0x0111, 0x00fd, 0x0159, 0x015f,
+ /* 0x90 */
+ 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x0142, 0x0144, 0x0161, 0x00b8, 0x02db, 0x20ac,
+ /* 0xa0 */
+ 0x0105, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x015a, 0x0147, 0x0110, 0x00dd, 0x0158, 0x015e,
+ /* 0xb0 */
+ 0x02d9, 0x0104, 0x017c, 0x0162, 0x017b, 0x00a7, 0x017e, 0x017a,
+ 0x017d, 0x0179, 0x0141, 0x0143, 0x0160, 0x00a8, 0x00b4, 0x00d7,
+ /* 0xc0 */
+ 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00f6, 0x0155, 0x00f3, 0x0151,
+ /* 0xd0 */
+ 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x011a, 0x0171, 0x00fc, 0x0165, 0x00fa, 0x011b,
+ /* 0xe0 */
+ 0x005c, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x010f, 0x00d4, 0x00d6, 0x0154, 0x00d3, 0x0150,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x010e, 0x0170, 0x00dc, 0x0164, 0x00da, 0x009f,
+};
+
+static int
+ebcdic1153_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ *pwc = (ucs4_t) ebcdic1153_2uni[c];
+ return 1;
+}
+
+static const unsigned char ebcdic1153_page00[384] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x4f, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0x4a, 0xe0, 0x5a, 0x5f, 0x6d, /* 0x58-0x5f */
+ 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0xc0, 0x6a, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb5, /* 0xa0-0xa7 */
+ 0xbd, 0x00, 0x00, 0x00, 0x00, 0xca, 0x00, 0x00, /* 0xa8-0xaf */
+ 0x90, 0x00, 0x00, 0x00, 0xbe, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */
+ 0x9d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */
+ 0x00, 0x65, 0x62, 0x00, 0x63, 0x00, 0x00, 0x68, /* 0xc0-0xc7 */
+ 0x00, 0x71, 0x00, 0x73, 0x00, 0x75, 0x76, 0x00, /* 0xc8-0xcf */
+ 0x00, 0x00, 0x00, 0xee, 0xeb, 0x00, 0xec, 0xbf, /* 0xd0-0xd7 */
+ 0x00, 0x00, 0xfe, 0x00, 0xfc, 0xad, 0x00, 0x59, /* 0xd8-0xdf */
+ 0x00, 0x45, 0x42, 0x00, 0x43, 0x00, 0x00, 0x48, /* 0xe0-0xe7 */
+ 0x00, 0x51, 0x00, 0x53, 0x00, 0x55, 0x56, 0x00, /* 0xe8-0xef */
+ 0x00, 0x00, 0x00, 0xce, 0xcb, 0x00, 0xcc, 0xe1, /* 0xf0-0xf7 */
+ 0x00, 0x00, 0xde, 0x00, 0xdc, 0x8d, 0x00, 0x00, /* 0xf8-0xff */
+ /* 0x0100 */
+ 0x00, 0x00, 0x66, 0x46, 0xb1, 0xa0, 0x69, 0x49, /* 0x00-0x07 */
+ 0x00, 0x00, 0x00, 0x00, 0x67, 0x47, 0xfa, 0xea, /* 0x08-0x0f */
+ 0xac, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */
+ 0x72, 0x52, 0xda, 0xdf, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
+ 0x00, 0x78, 0x58, 0x00, 0x00, 0x77, 0x57, 0x00, /* 0x38-0x3f */
+ 0x00, 0xba, 0x9a, 0xbb, 0x9b, 0x00, 0x00, 0xab, /* 0x40-0x47 */
+ 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */
+ 0xef, 0xcf, 0x00, 0x00, 0xed, 0xcd, 0x00, 0x00, /* 0x50-0x57 */
+ 0xae, 0x8e, 0xaa, 0x8a, 0x00, 0x00, 0xaf, 0x8f, /* 0x58-0x5f */
+ 0xbc, 0x9c, 0xb3, 0x44, 0xfd, 0xdd, 0x00, 0x00, /* 0x60-0x67 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x54, /* 0x68-0x6f */
+ 0xfb, 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
+ 0x00, 0xb9, 0xb7, 0xb4, 0xb2, 0xb8, 0xb6, 0x00, /* 0x78-0x7f */
+};
+static const unsigned char ebcdic1153_page02[32] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, /* 0xc0-0xc7 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */
+ 0x80, 0xb0, 0x00, 0x9e, 0x00, 0x64, 0x00, 0x00, /* 0xd8-0xdf */
+};
+
+static int
+ebcdic1153_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x0180)
+ c = ebcdic1153_page00[wc];
+ else if (wc >= 0x02c0 && wc < 0x02e0)
+ c = ebcdic1153_page02[wc-0x02c0];
+ else if (wc == 0x20ac)
+ c = 0x9f;
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic1154.h b/lib/ebcdic1154.h
new file mode 100644
index 0000000..3d7c866
--- /dev/null
+++ b/lib/ebcdic1154.h
@@ -0,0 +1,139 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-1154
+ */
+
+static const unsigned short ebcdic1154_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x0452, 0x0453, 0x0451, 0x0454, 0x0455, 0x0456,
+ 0x0457, 0x0458, 0x005b, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021,
+ /* 0x50 */
+ 0x0026, 0x0459, 0x045a, 0x045b, 0x045c, 0x045e, 0x045f, 0x042a,
+ 0x2116, 0x0402, 0x005d, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x0403, 0x0401, 0x0404, 0x0405, 0x0406, 0x0407,
+ 0x0408, 0x0409, 0x007c, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0x040a, 0x040b, 0x040c, 0x00ad, 0x040e, 0x040f, 0x044e, 0x0430,
+ 0x0431, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0x0446, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x0434, 0x0435, 0x0444, 0x0433, 0x0445, 0x0438,
+ /* 0x90 */
+ 0x0439, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f,
+ /* 0xa0 */
+ 0x044f, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432,
+ /* 0xb0 */
+ 0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a,
+ 0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413,
+ /* 0xc0 */
+ 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c,
+ /* 0xd0 */
+ 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x041d, 0x041e, 0x041f, 0x042f, 0x0420, 0x0421,
+ /* 0xe0 */
+ 0x005c, 0x20ac, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x0422, 0x0423, 0x0416, 0x0412, 0x042c, 0x042b,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x009f,
+};
+
+static int
+ebcdic1154_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ *pwc = (ucs4_t) ebcdic1154_2uni[c];
+ return 1;
+}
+
+static const unsigned char ebcdic1154_page00[176] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x4f, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0x4a, 0xe0, 0x5a, 0x5f, 0x6d, /* 0x58-0x5f */
+ 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0xc0, 0x6a, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, /* 0xa8-0xaf */
+};
+static const unsigned char ebcdic1154_page04[96] = {
+ 0x00, 0x63, 0x59, 0x62, 0x64, 0x65, 0x66, 0x67, /* 0x00-0x07 */
+ 0x68, 0x69, 0x70, 0x71, 0x72, 0x00, 0x74, 0x75, /* 0x08-0x0f */
+ 0xb9, 0xba, 0xed, 0xbf, 0xbc, 0xbd, 0xec, 0xfa, /* 0x10-0x17 */
+ 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xda, 0xdb, 0xdc, /* 0x18-0x1f */
+ 0xde, 0xdf, 0xea, 0xeb, 0xbe, 0xca, 0xbb, 0xfe, /* 0x20-0x27 */
+ 0xfb, 0xfd, 0x57, 0xef, 0xee, 0xfc, 0xb8, 0xdd, /* 0x28-0x2f */
+ 0x77, 0x78, 0xaf, 0x8d, 0x8a, 0x8b, 0xae, 0xb2, /* 0x30-0x37 */
+ 0x8f, 0x90, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x38-0x3f */
+ 0xaa, 0xab, 0xac, 0xad, 0x8c, 0x8e, 0x80, 0xb6, /* 0x40-0x47 */
+ 0xb3, 0xb5, 0xb7, 0xb1, 0xb0, 0xb4, 0x76, 0xa0, /* 0x48-0x4f */
+ 0x00, 0x44, 0x42, 0x43, 0x45, 0x46, 0x47, 0x48, /* 0x50-0x57 */
+ 0x49, 0x51, 0x52, 0x53, 0x54, 0x00, 0x55, 0x56, /* 0x58-0x5f */
+};
+
+static int
+ebcdic1154_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x00b0)
+ c = ebcdic1154_page00[wc];
+ else if (wc >= 0x0400 && wc < 0x0460)
+ c = ebcdic1154_page04[wc-0x0400];
+ else if (wc == 0x20ac)
+ c = 0xe1;
+ else if (wc == 0x2116)
+ c = 0x58;
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic1155.h b/lib/ebcdic1155.h
new file mode 100644
index 0000000..acf874a
--- /dev/null
+++ b/lib/ebcdic1155.h
@@ -0,0 +1,144 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-1155
+ */
+
+static const unsigned short ebcdic1155_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x00e0, 0x00e1, 0x00e3, 0x00e5,
+ 0x007b, 0x00f1, 0x00c7, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021,
+ /* 0x50 */
+ 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef,
+ 0x00ec, 0x00df, 0x011e, 0x0130, 0x002a, 0x0029, 0x003b, 0x005e,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x00c3, 0x00c5,
+ 0x005b, 0x00d1, 0x015f, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf,
+ 0x00cc, 0x0131, 0x003a, 0x00d6, 0x015e, 0x0027, 0x003d, 0x00dc,
+ /* 0x80 */
+ 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x00ab, 0x00bb, 0x007d, 0x0060, 0x00a6, 0x00b1,
+ /* 0x90 */
+ 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x00b8, 0x00c6, 0x20ac,
+ /* 0xa0 */
+ 0x00b5, 0x00f6, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x00a1, 0x00bf, 0x005d, 0x0024, 0x0040, 0x00ae,
+ /* 0xb0 */
+ 0x00a2, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x00a7, 0x00b6, 0x00bc,
+ 0x00bd, 0x00be, 0x00ac, 0x007c, 0x00af, 0x00a8, 0x00b4, 0x00d7,
+ /* 0xc0 */
+ 0x00e7, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x00ad, 0x00f4, 0x007e, 0x00f2, 0x00f3, 0x00f5,
+ /* 0xd0 */
+ 0x011f, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x00b9, 0x00fb, 0x005c, 0x00f9, 0x00fa, 0x00ff,
+ /* 0xe0 */
+ 0x00fc, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x00b2, 0x00d4, 0x0023, 0x00d2, 0x00d3, 0x00d5,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x00b3, 0x00db, 0x0022, 0x00d9, 0x00da, 0x009f,
+};
+
+static int
+ebcdic1155_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ *pwc = (ucs4_t) ebcdic1155_2uni[c];
+ return 1;
+}
+
+static const unsigned char ebcdic1155_page00[256] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x4f, 0xfc, 0xec, 0xad, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0xae, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0x68, 0xdc, 0xac, 0x5f, 0x6d, /* 0x58-0x5f */
+ 0x8d, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0x48, 0xbb, 0x8c, 0xcc, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0xaa, 0xb0, 0xb1, 0x00, 0xb2, 0x8e, 0xb5, /* 0xa0-0xa7 */
+ 0xbd, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */
+ 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */
+ 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */
+ 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x4a, /* 0xc0-0xc7 */
+ 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */
+ 0x00, 0x69, 0xed, 0xee, 0xeb, 0xef, 0x7b, 0xbf, /* 0xd0-0xd7 */
+ 0x80, 0xfd, 0xfe, 0xfb, 0x7f, 0x00, 0x00, 0x59, /* 0xd8-0xdf */
+ 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0xc0, /* 0xe0-0xe7 */
+ 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */
+ 0x00, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xa1, 0xe1, /* 0xf0-0xf7 */
+ 0x70, 0xdd, 0xde, 0xdb, 0xe0, 0x00, 0x00, 0xdf, /* 0xf8-0xff */
+};
+static const unsigned char ebcdic1155_page01[72] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0xd0, /* 0x18-0x1f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
+ 0x5b, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x6a, /* 0x58-0x5f */
+};
+
+static int
+ebcdic1155_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x0100)
+ c = ebcdic1155_page00[wc];
+ else if (wc >= 0x0118 && wc < 0x0160)
+ c = ebcdic1155_page01[wc-0x0118];
+ else if (wc == 0x20ac)
+ c = 0x9f;
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic1156.h b/lib/ebcdic1156.h
new file mode 100644
index 0000000..78c128a
--- /dev/null
+++ b/lib/ebcdic1156.h
@@ -0,0 +1,153 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-1156
+ */
+
+static const unsigned short ebcdic1156_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x0161, 0x00e4, 0x0105, 0x012f, 0x016b, 0x00e5,
+ 0x0113, 0x017e, 0x00a2, 0x002e, 0x003c, 0x0028, 0x002b, 0x007c,
+ /* 0x50 */
+ 0x0026, 0x00e9, 0x0119, 0x0117, 0x010d, 0x0173, 0x201e, 0x201c,
+ 0x0123, 0x00df, 0x0021, 0x0024, 0x002a, 0x0029, 0x003b, 0x00ac,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x0160, 0x00c4, 0x0104, 0x012e, 0x016a, 0x00c5,
+ 0x0112, 0x017d, 0x00a6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0x00f8, 0x00c9, 0x0118, 0x0116, 0x010c, 0x0172, 0x012a, 0x013b,
+ 0x0122, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x00ab, 0x00bb, 0x0101, 0x017c, 0x0144, 0x00b1,
+ /* 0x90 */
+ 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x0156, 0x0157, 0x00e6, 0x0137, 0x00c6, 0x20ac,
+ /* 0xa0 */
+ 0x00b5, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x201d, 0x017a, 0x0100, 0x017b, 0x0143, 0x00ae,
+ /* 0xb0 */
+ 0x005e, 0x00a3, 0x012b, 0x00b7, 0x00a9, 0x00a7, 0x00b6, 0x00bc,
+ 0x00bd, 0x00be, 0x005b, 0x005d, 0x0179, 0x0136, 0x013c, 0x00d7,
+ /* 0xc0 */
+ 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x00ad, 0x014d, 0x00f6, 0x0146, 0x00f3, 0x00f5,
+ /* 0xd0 */
+ 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x00b9, 0x0107, 0x00fc, 0x0142, 0x015b, 0x2019,
+ /* 0xe0 */
+ 0x005c, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x00b2, 0x014c, 0x00d6, 0x0145, 0x00d3, 0x00d5,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x00b3, 0x0106, 0x00dc, 0x0141, 0x015a, 0x009f,
+};
+
+static int
+ebcdic1156_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ *pwc = (ucs4_t) ebcdic1156_2uni[c];
+ return 1;
+}
+
+static const unsigned char ebcdic1156_page00[384] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0xba, 0xe0, 0xbb, 0xb0, 0x6d, /* 0x58-0x5f */
+ 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0x00, 0x4a, 0xb1, 0x00, 0x00, 0x6a, 0xb5, /* 0xa0-0xa7 */
+ 0x00, 0xb4, 0x00, 0x8a, 0x5f, 0xca, 0xaf, 0x00, /* 0xa8-0xaf */
+ 0x90, 0x8f, 0xea, 0xfa, 0x00, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */
+ 0x00, 0xda, 0x00, 0x8b, 0xb7, 0xb8, 0xb9, 0x00, /* 0xb8-0xbf */
+ 0x00, 0x00, 0x00, 0x00, 0x63, 0x67, 0x9e, 0x00, /* 0xc0-0xc7 */
+ 0x00, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
+ 0x00, 0x00, 0x00, 0xee, 0x00, 0xef, 0xec, 0xbf, /* 0xd0-0xd7 */
+ 0x80, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x59, /* 0xd8-0xdf */
+ 0x00, 0x00, 0x00, 0x00, 0x43, 0x47, 0x9c, 0x00, /* 0xe0-0xe7 */
+ 0x00, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */
+ 0x00, 0x00, 0x00, 0xce, 0x00, 0xcf, 0xcc, 0xe1, /* 0xf0-0xf7 */
+ 0x70, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, /* 0xf8-0xff */
+ /* 0x0100 */
+ 0xac, 0x8c, 0x00, 0x00, 0x64, 0x44, 0xfb, 0xdb, /* 0x00-0x07 */
+ 0x00, 0x00, 0x00, 0x00, 0x74, 0x54, 0x00, 0x00, /* 0x08-0x0f */
+ 0x00, 0x00, 0x68, 0x48, 0x00, 0x00, 0x73, 0x53, /* 0x10-0x17 */
+ 0x72, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
+ 0x00, 0x00, 0x78, 0x58, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
+ 0x00, 0x00, 0x76, 0xb2, 0x00, 0x00, 0x65, 0x45, /* 0x28-0x2f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbd, 0x9d, /* 0x30-0x37 */
+ 0x00, 0x00, 0x00, 0x77, 0xbe, 0x00, 0x00, 0x00, /* 0x38-0x3f */
+ 0x00, 0xfd, 0xdd, 0xae, 0x8e, 0xed, 0xcd, 0x00, /* 0x40-0x47 */
+ 0x00, 0x00, 0x00, 0x00, 0xeb, 0xcb, 0x00, 0x00, /* 0x48-0x4f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9a, 0x9b, /* 0x50-0x57 */
+ 0x00, 0x00, 0xfe, 0xde, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
+ 0x62, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
+ 0x00, 0x00, 0x66, 0x46, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
+ 0x00, 0x00, 0x75, 0x55, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
+ 0x00, 0xbc, 0xab, 0xad, 0x8d, 0x69, 0x49, 0x00, /* 0x78-0x7f */
+};
+static const unsigned char ebcdic1156_page20[8] = {
+ 0x00, 0xdf, 0x00, 0x00, 0x57, 0xaa, 0x56, 0x00, /* 0x18-0x1f */
+};
+
+static int
+ebcdic1156_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x0180)
+ c = ebcdic1156_page00[wc];
+ else if (wc >= 0x2018 && wc < 0x2020)
+ c = ebcdic1156_page20[wc-0x2018];
+ else if (wc == 0x20ac)
+ c = 0x9f;
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic1157.h b/lib/ebcdic1157.h
new file mode 100644
index 0000000..1118a76
--- /dev/null
+++ b/lib/ebcdic1157.h
@@ -0,0 +1,139 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-1157
+ */
+
+static const unsigned short ebcdic1157_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x00e2, 0x007b, 0x00e0, 0x00e1, 0x00e3, 0x007d,
+ 0x00e7, 0x00f1, 0x00a7, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021,
+ /* 0x50 */
+ 0x0026, 0x0060, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef,
+ 0x00ec, 0x00df, 0x20ac, 0x00c5, 0x002a, 0x0029, 0x003b, 0x005e,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x00c2, 0x0023, 0x00c0, 0x00c1, 0x00c3, 0x0024,
+ 0x00c7, 0x00d1, 0x00f6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0x00f8, 0x005c, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf,
+ 0x00cc, 0x00e9, 0x003a, 0x00c4, 0x00d6, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x00ab, 0x00bb, 0x0161, 0x00fd, 0x017e, 0x00b1,
+ /* 0x90 */
+ 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x00b8, 0x00c6, 0x005d,
+ /* 0xa0 */
+ 0x00b5, 0x00fc, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x00a1, 0x00bf, 0x0160, 0x00dd, 0x017d, 0x00ae,
+ /* 0xb0 */
+ 0x00a2, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x005b, 0x00b6, 0x00bc,
+ 0x00bd, 0x00be, 0x00ac, 0x007c, 0x00af, 0x00a8, 0x00b4, 0x00d7,
+ /* 0xc0 */
+ 0x00e4, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00a6, 0x00f2, 0x00f3, 0x00f5,
+ /* 0xd0 */
+ 0x00e5, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x00b9, 0x00fb, 0x007e, 0x00f9, 0x00fa, 0x00ff,
+ /* 0xe0 */
+ 0x00c9, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x00b2, 0x00d4, 0x0040, 0x00d2, 0x00d3, 0x00d5,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f,
+};
+
+static int
+ebcdic1157_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ *pwc = (ucs4_t) ebcdic1157_2uni[c];
+ return 1;
+}
+
+static const unsigned char ebcdic1157_page00[256] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x4f, 0x7f, 0x63, 0x67, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0xec, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0xb5, 0x71, 0x9f, 0x5f, 0x6d, /* 0x58-0x5f */
+ 0x51, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0x43, 0xbb, 0x47, 0xdc, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0xaa, 0xb0, 0xb1, 0x00, 0xb2, 0xcc, 0x4a, /* 0xa0-0xa7 */
+ 0xbd, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */
+ 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */
+ 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */
+ 0x64, 0x65, 0x62, 0x66, 0x7b, 0x5b, 0x9e, 0x68, /* 0xc0-0xc7 */
+ 0x74, 0xe0, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */
+ 0x00, 0x69, 0xed, 0xee, 0xeb, 0xef, 0x7c, 0xbf, /* 0xd0-0xd7 */
+ 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xad, 0x00, 0x59, /* 0xd8-0xdf */
+ 0x44, 0x45, 0x42, 0x46, 0xc0, 0xd0, 0x9c, 0x48, /* 0xe0-0xe7 */
+ 0x54, 0x79, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */
+ 0x00, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0x6a, 0xe1, /* 0xf0-0xf7 */
+ 0x70, 0xdd, 0xde, 0xdb, 0xa1, 0x8d, 0x00, 0xdf, /* 0xf8-0xff */
+};
+static const unsigned char ebcdic1157_page01[32] = {
+ 0xac, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0x8e, 0x00, /* 0x78-0x7f */
+};
+
+static int
+ebcdic1157_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x0100)
+ c = ebcdic1157_page00[wc];
+ else if (wc >= 0x0160 && wc < 0x0180)
+ c = ebcdic1157_page01[wc-0x0160];
+ else if (wc == 0x20ac)
+ c = 0x5a;
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic1158.h b/lib/ebcdic1158.h
new file mode 100644
index 0000000..95aa784
--- /dev/null
+++ b/lib/ebcdic1158.h
@@ -0,0 +1,146 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-1158
+ */
+
+static const unsigned short ebcdic1158_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x0452, 0x0491, 0x0451, 0x0454, 0x0455, 0x0456,
+ 0x0457, 0x0458, 0x005b, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021,
+ /* 0x50 */
+ 0x0026, 0x0459, 0x045a, 0x045b, 0x045c, 0x045e, 0x045f, 0x042a,
+ 0x2116, 0x0402, 0x005d, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x0490, 0x0401, 0x0404, 0x0405, 0x0406, 0x0407,
+ 0x0408, 0x0409, 0x007c, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0x040a, 0x040b, 0x040c, 0x00ad, 0x040e, 0x040f, 0x044e, 0x0430,
+ 0x0431, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0x0446, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x0434, 0x0435, 0x0444, 0x0433, 0x0445, 0x0438,
+ /* 0x90 */
+ 0x0439, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f,
+ /* 0xa0 */
+ 0x044f, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432,
+ /* 0xb0 */
+ 0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a,
+ 0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413,
+ /* 0xc0 */
+ 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c,
+ /* 0xd0 */
+ 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x041d, 0x041e, 0x041f, 0x042f, 0x0420, 0x0421,
+ /* 0xe0 */
+ 0x005c, 0x20ac, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x0422, 0x0423, 0x0416, 0x0412, 0x042c, 0x042b,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x009f,
+};
+
+static int
+ebcdic1158_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ *pwc = (ucs4_t) ebcdic1158_2uni[c];
+ return 1;
+}
+
+static const unsigned char ebcdic1158_page00[176] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x4f, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0x4a, 0xe0, 0x5a, 0x5f, 0x6d, /* 0x58-0x5f */
+ 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0xc0, 0x6a, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, /* 0xa8-0xaf */
+};
+static const unsigned char ebcdic1158_page04[152] = {
+ 0x00, 0x63, 0x59, 0x00, 0x64, 0x65, 0x66, 0x67, /* 0x00-0x07 */
+ 0x68, 0x69, 0x70, 0x71, 0x72, 0x00, 0x74, 0x75, /* 0x08-0x0f */
+ 0xb9, 0xba, 0xed, 0xbf, 0xbc, 0xbd, 0xec, 0xfa, /* 0x10-0x17 */
+ 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xda, 0xdb, 0xdc, /* 0x18-0x1f */
+ 0xde, 0xdf, 0xea, 0xeb, 0xbe, 0xca, 0xbb, 0xfe, /* 0x20-0x27 */
+ 0xfb, 0xfd, 0x57, 0xef, 0xee, 0xfc, 0xb8, 0xdd, /* 0x28-0x2f */
+ 0x77, 0x78, 0xaf, 0x8d, 0x8a, 0x8b, 0xae, 0xb2, /* 0x30-0x37 */
+ 0x8f, 0x90, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x38-0x3f */
+ 0xaa, 0xab, 0xac, 0xad, 0x8c, 0x8e, 0x80, 0xb6, /* 0x40-0x47 */
+ 0xb3, 0xb5, 0xb7, 0xb1, 0xb0, 0xb4, 0x76, 0xa0, /* 0x48-0x4f */
+ 0x00, 0x44, 0x42, 0x00, 0x45, 0x46, 0x47, 0x48, /* 0x50-0x57 */
+ 0x49, 0x51, 0x52, 0x53, 0x54, 0x00, 0x55, 0x56, /* 0x58-0x5f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */
+ 0x62, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */
+};
+
+static int
+ebcdic1158_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x00b0)
+ c = ebcdic1158_page00[wc];
+ else if (wc >= 0x0400 && wc < 0x0498)
+ c = ebcdic1158_page04[wc-0x0400];
+ else if (wc == 0x20ac)
+ c = 0xe1;
+ else if (wc == 0x2116)
+ c = 0x58;
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic1160.h b/lib/ebcdic1160.h
new file mode 100644
index 0000000..e0104b0
--- /dev/null
+++ b/lib/ebcdic1160.h
@@ -0,0 +1,137 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-1160
+ */
+
+static const unsigned short ebcdic1160_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x0e01, 0x0e02, 0x0e03, 0x0e04, 0x0e05, 0x0e06,
+ 0x0e07, 0x005b, 0x00a2, 0x002e, 0x003c, 0x0028, 0x002b, 0x007c,
+ /* 0x50 */
+ 0x0026, 0x0e48, 0x0e08, 0x0e09, 0x0e0a, 0x0e0b, 0x0e0c, 0x0e0d,
+ 0x0e0e, 0x005d, 0x0021, 0x0024, 0x002a, 0x0029, 0x003b, 0x00ac,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x0e0f, 0x0e10, 0x0e11, 0x0e12, 0x0e13, 0x0e14,
+ 0x0e15, 0x005e, 0x00a6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0x0e3f, 0x0e4e, 0x0e16, 0x0e17, 0x0e18, 0x0e19, 0x0e1a, 0x0e1b,
+ 0x0e1c, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0x0e4f, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x0e1d, 0x0e1e, 0x0e1f, 0x0e20, 0x0e21, 0x0e22,
+ /* 0x90 */
+ 0x0e5a, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x0e23, 0x0e24, 0x0e25, 0x0e26, 0x0e27, 0x0e28,
+ /* 0xa0 */
+ 0x0e5b, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x0e29, 0x0e2a, 0x0e2b, 0x0e2c, 0x0e2d, 0x0e2e,
+ /* 0xb0 */
+ 0x0e50, 0x0e51, 0x0e52, 0x0e53, 0x0e54, 0x0e55, 0x0e56, 0x0e57,
+ 0x0e58, 0x0e59, 0x0e2f, 0x0e30, 0x0e31, 0x0e32, 0x0e33, 0x0e34,
+ /* 0xc0 */
+ 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x0e49, 0x0e35, 0x0e36, 0x0e37, 0x0e38, 0x0e39,
+ /* 0xd0 */
+ 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x0e3a, 0x0e40, 0x0e41, 0x0e42, 0x0e43, 0x0e44,
+ /* 0xe0 */
+ 0x005c, 0x0e4a, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x0e45, 0x0e46, 0x0e47, 0x0e48, 0x0e49, 0x0e4a,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x0e4b, 0x0e4c, 0x0e4d, 0x0e4b, 0x20ac, 0x009f,
+};
+
+static int
+ebcdic1160_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ *pwc = (ucs4_t) ebcdic1160_2uni[c];
+ return 1;
+}
+
+static const unsigned char ebcdic1160_page00[176] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0x49, 0xe0, 0x59, 0x69, 0x6d, /* 0x58-0x5f */
+ 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x6a, 0x00, /* 0xa0-0xa7 */
+ 0x00, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, /* 0xa8-0xaf */
+};
+static const unsigned char ebcdic1160_page0e[96] = {
+ 0x00, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, /* 0x00-0x07 */
+ 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x62, /* 0x08-0x0f */
+ 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x72, 0x73, /* 0x10-0x17 */
+ 0x74, 0x75, 0x76, 0x77, 0x78, 0x8a, 0x8b, 0x8c, /* 0x18-0x1f */
+ 0x8d, 0x8e, 0x8f, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, /* 0x20-0x27 */
+ 0x9f, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xba, /* 0x28-0x2f */
+ 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xcb, 0xcc, 0xcd, /* 0x30-0x37 */
+ 0xce, 0xcf, 0xda, 0x00, 0x00, 0x00, 0x00, 0x70, /* 0x38-0x3f */
+ 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xea, 0xeb, 0xec, /* 0x40-0x47 */
+ 0xed, 0xee, 0xef, 0xfa, 0xfb, 0xfc, 0x71, 0x80, /* 0x48-0x4f */
+ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0x50-0x57 */
+ 0xb8, 0xb9, 0x90, 0xa0, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
+};
+
+static int
+ebcdic1160_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x00b0)
+ c = ebcdic1160_page00[wc];
+ else if (wc >= 0x0e00 && wc < 0x0e60)
+ c = ebcdic1160_page0e[wc-0x0e00];
+ else if (wc == 0x20ac)
+ c = 0xfe;
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic1164.h b/lib/ebcdic1164.h
new file mode 100644
index 0000000..6620da9
--- /dev/null
+++ b/lib/ebcdic1164.h
@@ -0,0 +1,167 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-1164
+ */
+
+static const unsigned short ebcdic1164_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x00e0, 0x00e1, 0x0103, 0x00e5,
+ 0x00e7, 0x00f1, 0x005b, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021,
+ /* 0x50 */
+ 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef,
+ 0x0303, 0x00df, 0x005d, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x0102, 0x00c5,
+ 0x00c7, 0x00d1, 0x00a6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf,
+ 0x20ab, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x00ab, 0x00bb, 0x0111, 0x0309, 0x0300, 0x00b1,
+ /* 0x90 */
+ 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x0152, 0x00c6, 0x20ac,
+ /* 0xa0 */
+ 0x00b5, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x00a1, 0x00bf, 0x0110, 0x0323, 0x0301, 0x00ae,
+ /* 0xb0 */
+ 0x00a2, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x00a7, 0x00b6, 0x00bc,
+ 0x00bd, 0x00be, 0x00ac, 0x007c, 0x00af, 0x0153, 0x0178, 0x00d7,
+ /* 0xc0 */
+ 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00f6, 0x01b0, 0x00f3, 0x01a1,
+ /* 0xd0 */
+ 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x00b9, 0x00fb, 0x00fc, 0x00f9, 0x00fa, 0x00ff,
+ /* 0xe0 */
+ 0x005c, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x00b2, 0x00d4, 0x00d6, 0x01af, 0x00d3, 0x01a0,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f,
+};
+
+static int
+ebcdic1164_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ *pwc = (ucs4_t) ebcdic1164_2uni[c];
+ return 1;
+}
+
+static const unsigned char ebcdic1164_page00[440] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x4f, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0x4a, 0xe0, 0x5a, 0x5f, 0x6d, /* 0x58-0x5f */
+ 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0xc0, 0xbb, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0xaa, 0xb0, 0xb1, 0x00, 0xb2, 0x6a, 0xb5, /* 0xa0-0xa7 */
+ 0x00, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */
+ 0x90, 0x8f, 0xea, 0xfa, 0x00, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */
+ 0x00, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */
+ 0x64, 0x65, 0x62, 0x00, 0x63, 0x67, 0x9e, 0x68, /* 0xc0-0xc7 */
+ 0x74, 0x71, 0x72, 0x73, 0x00, 0x75, 0x76, 0x77, /* 0xc8-0xcf */
+ 0x00, 0x69, 0x00, 0xee, 0xeb, 0x00, 0xec, 0xbf, /* 0xd0-0xd7 */
+ 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0x00, 0x00, 0x59, /* 0xd8-0xdf */
+ 0x44, 0x45, 0x42, 0x00, 0x43, 0x47, 0x9c, 0x48, /* 0xe0-0xe7 */
+ 0x54, 0x51, 0x52, 0x53, 0x00, 0x55, 0x56, 0x57, /* 0xe8-0xef */
+ 0x00, 0x49, 0x00, 0xce, 0xcb, 0x00, 0xcc, 0xe1, /* 0xf0-0xf7 */
+ 0x70, 0xdd, 0xde, 0xdb, 0xdc, 0x00, 0x00, 0xdf, /* 0xf8-0xff */
+ /* 0x0100 */
+ 0x00, 0x00, 0x66, 0x46, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */
+ 0xac, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */
+ 0x00, 0x00, 0x9d, 0xbd, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
+ 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */
+ 0xef, 0xcf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xed, /* 0xa8-0xaf */
+ 0xcd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */
+};
+static const unsigned char ebcdic1164_page03[40] = {
+ 0x8e, 0xae, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */
+ 0x00, 0x8d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
+ 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
+};
+static const unsigned char ebcdic1164_page20[8] = {
+ 0x00, 0x00, 0x00, 0x78, 0x9f, 0x00, 0x00, 0x00, /* 0xa8-0xaf */
+};
+
+static int
+ebcdic1164_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x01b8)
+ c = ebcdic1164_page00[wc];
+ else if (wc >= 0x0300 && wc < 0x0328)
+ c = ebcdic1164_page03[wc-0x0300];
+ else if (wc >= 0x20a8 && wc < 0x20b0)
+ c = ebcdic1164_page20[wc-0x20a8];
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic1165.h b/lib/ebcdic1165.h
new file mode 100644
index 0000000..e7ced17
--- /dev/null
+++ b/lib/ebcdic1165.h
@@ -0,0 +1,156 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-1165
+ */
+
+static const unsigned short ebcdic1165_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x0163, 0x00e1, 0x0103, 0x010d,
+ 0x00e7, 0x0107, 0x00dd, 0x002e, 0x003c, 0x0028, 0x002b, 0x007c,
+ /* 0x50 */
+ 0x0026, 0x00e9, 0x0119, 0x00eb, 0x016f, 0x00ed, 0x00ee, 0x013e,
+ 0x013a, 0x00df, 0x0021, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x00c2, 0x00c4, 0x02dd, 0x00c1, 0x0102, 0x010c,
+ 0x00c7, 0x0106, 0x00a8, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0x02c7, 0x00c9, 0x0118, 0x00cb, 0x016e, 0x00cd, 0x00ce, 0x013d,
+ 0x0139, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0x02d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x015b, 0x0148, 0x0111, 0x00fd, 0x0159, 0x015f,
+ /* 0x90 */
+ 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x0142, 0x0144, 0x0161, 0x00b8, 0x02db, 0x20ac,
+ /* 0xa0 */
+ 0x0105, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x015a, 0x0147, 0x0110, 0x005b, 0x0158, 0x015e,
+ /* 0xb0 */
+ 0x02d9, 0x0104, 0x017c, 0x0162, 0x017b, 0x00a7, 0x017e, 0x017a,
+ 0x017d, 0x0179, 0x0141, 0x0143, 0x0160, 0x005d, 0x00b4, 0x00d7,
+ /* 0xc0 */
+ 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00f6, 0x0155, 0x00f3, 0x0151,
+ /* 0xd0 */
+ 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x011a, 0x0171, 0x00fc, 0x0165, 0x00fa, 0x011b,
+ /* 0xe0 */
+ 0x005c, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x010f, 0x00d4, 0x00d6, 0x0154, 0x00d3, 0x0150,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x010e, 0x0170, 0x00dc, 0x0164, 0x00da, 0x009f,
+};
+
+static int
+ebcdic1165_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ *pwc = (ucs4_t) ebcdic1165_2uni[c];
+ return 1;
+}
+
+static const unsigned char ebcdic1165_page00[384] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0xad, 0xe0, 0xbd, 0x5f, 0x6d, /* 0x58-0x5f */
+ 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb5, /* 0xa0-0xa7 */
+ 0x6a, 0x00, 0x00, 0x00, 0x00, 0xca, 0x00, 0x00, /* 0xa8-0xaf */
+ 0x90, 0x00, 0x00, 0x00, 0xbe, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */
+ 0x9d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */
+ 0x00, 0x65, 0x62, 0x00, 0x63, 0x00, 0x00, 0x68, /* 0xc0-0xc7 */
+ 0x00, 0x71, 0x00, 0x73, 0x00, 0x75, 0x76, 0x00, /* 0xc8-0xcf */
+ 0x00, 0x00, 0x00, 0xee, 0xeb, 0x00, 0xec, 0xbf, /* 0xd0-0xd7 */
+ 0x00, 0x00, 0xfe, 0x00, 0xfc, 0x4a, 0x00, 0x59, /* 0xd8-0xdf */
+ 0x00, 0x45, 0x42, 0x00, 0x43, 0x00, 0x00, 0x48, /* 0xe0-0xe7 */
+ 0x00, 0x51, 0x00, 0x53, 0x00, 0x55, 0x56, 0x00, /* 0xe8-0xef */
+ 0x00, 0x00, 0x00, 0xce, 0xcb, 0x00, 0xcc, 0xe1, /* 0xf0-0xf7 */
+ 0x00, 0x00, 0xde, 0x00, 0xdc, 0x8d, 0x00, 0x00, /* 0xf8-0xff */
+ /* 0x0100 */
+ 0x00, 0x00, 0x66, 0x46, 0xb1, 0xa0, 0x69, 0x49, /* 0x00-0x07 */
+ 0x00, 0x00, 0x00, 0x00, 0x67, 0x47, 0xfa, 0xea, /* 0x08-0x0f */
+ 0xac, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */
+ 0x72, 0x52, 0xda, 0xdf, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
+ 0x00, 0x78, 0x58, 0x00, 0x00, 0x77, 0x57, 0x00, /* 0x38-0x3f */
+ 0x00, 0xba, 0x9a, 0xbb, 0x9b, 0x00, 0x00, 0xab, /* 0x40-0x47 */
+ 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */
+ 0xef, 0xcf, 0x00, 0x00, 0xed, 0xcd, 0x00, 0x00, /* 0x50-0x57 */
+ 0xae, 0x8e, 0xaa, 0x8a, 0x00, 0x00, 0xaf, 0x8f, /* 0x58-0x5f */
+ 0xbc, 0x9c, 0xb3, 0x44, 0xfd, 0xdd, 0x00, 0x00, /* 0x60-0x67 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x54, /* 0x68-0x6f */
+ 0xfb, 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
+ 0x00, 0xb9, 0xb7, 0xb4, 0xb2, 0xb8, 0xb6, 0x00, /* 0x78-0x7f */
+};
+static const unsigned char ebcdic1165_page02[32] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, /* 0xc0-0xc7 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */
+ 0x80, 0xb0, 0x00, 0x9e, 0x00, 0x64, 0x00, 0x00, /* 0xd8-0xdf */
+};
+
+static int
+ebcdic1165_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x0180)
+ c = ebcdic1165_page00[wc];
+ else if (wc >= 0x02c0 && wc < 0x02e0)
+ c = ebcdic1165_page02[wc-0x02c0];
+ else if (wc == 0x20ac)
+ c = 0x9f;
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic1166.h b/lib/ebcdic1166.h
new file mode 100644
index 0000000..2b1fb6c
--- /dev/null
+++ b/lib/ebcdic1166.h
@@ -0,0 +1,157 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-1166
+ */
+
+static const unsigned short ebcdic1166_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x04d9, 0x0493, 0x0451, 0x0454, 0x0455, 0x0456,
+ 0x049b, 0x0458, 0x005b, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021,
+ /* 0x50 */
+ 0x0026, 0x04a3, 0x04e9, 0x04b1, 0x04af, 0x045e, 0x04bb, 0x042a,
+ 0x2116, 0x04d8, 0x005d, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x0492, 0x0401, 0x0404, 0x0405, 0x0406, 0x049a,
+ 0x0408, 0x04a2, 0x007c, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0x04e8, 0x04b0, 0x04ae, 0x00ad, 0x040e, 0x04ba, 0x044e, 0x0430,
+ 0x0431, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0x0446, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x0434, 0x0435, 0x0444, 0x0433, 0x0445, 0x0438,
+ /* 0x90 */
+ 0x0439, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f,
+ /* 0xa0 */
+ 0x044f, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432,
+ /* 0xb0 */
+ 0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a,
+ 0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413,
+ /* 0xc0 */
+ 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c,
+ /* 0xd0 */
+ 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x041d, 0x041e, 0x041f, 0x042f, 0x0420, 0x0421,
+ /* 0xe0 */
+ 0x005c, 0x20ac, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x0422, 0x0423, 0x0416, 0x0412, 0x042c, 0x042b,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x009f,
+};
+
+static int
+ebcdic1166_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ *pwc = (ucs4_t) ebcdic1166_2uni[c];
+ return 1;
+}
+
+static const unsigned char ebcdic1166_page00[176] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x4f, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0x4a, 0xe0, 0x5a, 0x5f, 0x6d, /* 0x58-0x5f */
+ 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0xc0, 0x6a, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, /* 0xa8-0xaf */
+};
+static const unsigned char ebcdic1166_page04[240] = {
+ 0x00, 0x63, 0x00, 0x00, 0x64, 0x65, 0x66, 0x00, /* 0x00-0x07 */
+ 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, /* 0x08-0x0f */
+ 0xb9, 0xba, 0xed, 0xbf, 0xbc, 0xbd, 0xec, 0xfa, /* 0x10-0x17 */
+ 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xda, 0xdb, 0xdc, /* 0x18-0x1f */
+ 0xde, 0xdf, 0xea, 0xeb, 0xbe, 0xca, 0xbb, 0xfe, /* 0x20-0x27 */
+ 0xfb, 0xfd, 0x57, 0xef, 0xee, 0xfc, 0xb8, 0xdd, /* 0x28-0x2f */
+ 0x77, 0x78, 0xaf, 0x8d, 0x8a, 0x8b, 0xae, 0xb2, /* 0x30-0x37 */
+ 0x8f, 0x90, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x38-0x3f */
+ 0xaa, 0xab, 0xac, 0xad, 0x8c, 0x8e, 0x80, 0xb6, /* 0x40-0x47 */
+ 0xb3, 0xb5, 0xb7, 0xb1, 0xb0, 0xb4, 0x76, 0xa0, /* 0x48-0x4f */
+ 0x00, 0x44, 0x00, 0x00, 0x45, 0x46, 0x47, 0x00, /* 0x50-0x57 */
+ 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x00, /* 0x58-0x5f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */
+ 0x00, 0x00, 0x62, 0x43, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */
+ 0x00, 0x00, 0x67, 0x48, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */
+ 0x00, 0x00, 0x69, 0x51, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0x54, /* 0xa8-0xaf */
+ 0x71, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */
+ 0x00, 0x00, 0x75, 0x56, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */
+ 0x59, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */
+ 0x70, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */
+};
+
+static int
+ebcdic1166_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x00b0)
+ c = ebcdic1166_page00[wc];
+ else if (wc >= 0x0400 && wc < 0x04f0)
+ c = ebcdic1166_page04[wc-0x0400];
+ else if (wc == 0x20ac)
+ c = 0xe1;
+ else if (wc == 0x2116)
+ c = 0x58;
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic12712.h b/lib/ebcdic12712.h
new file mode 100644
index 0000000..bafb3f0
--- /dev/null
+++ b/lib/ebcdic12712.h
@@ -0,0 +1,156 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-12712
+ */
+
+static const unsigned short ebcdic12712_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6,
+ 0x05d7, 0x05d8, 0x00a2, 0x002e, 0x003c, 0x0028, 0x002b, 0x007c,
+ /* 0x50 */
+ 0x0026, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df,
+ 0x05e0, 0x05e1, 0x0021, 0x0024, 0x002a, 0x0029, 0x003b, 0x00ac,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7,
+ 0x05e8, 0x05e9, 0x00a6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0xfffd, 0x05ea, 0xfffd, 0xfffd, 0x00a0, 0xfffd, 0xfffd, 0xfffd,
+ 0x2017, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0xfffd, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x00ab, 0x00bb, 0xfffd, 0xfffd, 0xfffd, 0x00b1,
+ /* 0x90 */
+ 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0xfffd, 0xfffd, 0x20ac, 0x00b8, 0x20aa, 0x00a4,
+ /* 0xa0 */
+ 0x00b5, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x00ae,
+ /* 0xb0 */
+ 0x005e, 0x00a3, 0x00a5, 0x2022, 0x00a9, 0x00a7, 0x00b6, 0x00bc,
+ 0x00bd, 0x00be, 0x005b, 0x005d, 0x203e, 0x00a8, 0x00b4, 0x00d7,
+ /* 0xc0 */
+ 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x00ad, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
+ /* 0xd0 */
+ 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x00b9, 0x202d, 0x202e, 0x202c, 0xfffd, 0xfffd,
+ /* 0xe0 */
+ 0x005c, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x00b2, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x00b3, 0x202a, 0x202b, 0x200e, 0x200f, 0x009f,
+};
+
+static int
+ebcdic12712_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ unsigned short wc = ebcdic12712_2uni[c];
+ if (wc != 0xfffd) {
+ *pwc = (ucs4_t) wc;
+ return 1;
+ }
+ return RET_ILSEQ;
+}
+
+static const unsigned char ebcdic12712_page00[248] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0xba, 0xe0, 0xbb, 0xb0, 0x6d, /* 0x58-0x5f */
+ 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x74, 0x00, 0x4a, 0xb1, 0x9f, 0xb2, 0x6a, 0xb5, /* 0xa0-0xa7 */
+ 0xbd, 0xb4, 0x00, 0x8a, 0x5f, 0xca, 0xaf, 0x00, /* 0xa8-0xaf */
+ 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0x00, /* 0xb0-0xb7 */
+ 0x9d, 0xda, 0x00, 0x8b, 0xb7, 0xb8, 0xb9, 0x00, /* 0xb8-0xbf */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, /* 0xd0-0xd7 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe1, /* 0xf0-0xf7 */
+};
+static const unsigned char ebcdic12712_page05[32] = {
+ 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, /* 0xd0-0xd7 */
+ 0x49, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0xd8-0xdf */
+ 0x58, 0x59, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0xe0-0xe7 */
+ 0x68, 0x69, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */
+};
+static const unsigned char ebcdic12712_page20[56] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, 0xfe, /* 0x08-0x0f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, /* 0x10-0x17 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
+ 0x00, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
+ 0x00, 0x00, 0xfb, 0xfc, 0xdd, 0xdb, 0xdc, 0x00, /* 0x28-0x2f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbc, 0x00, /* 0x38-0x3f */
+};
+static const unsigned char ebcdic12712_page20_1[8] = {
+ 0x00, 0x00, 0x9e, 0x00, 0x9c, 0x00, 0x00, 0x00, /* 0xa8-0xaf */
+};
+
+static int
+ebcdic12712_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x00f8)
+ c = ebcdic12712_page00[wc];
+ else if (wc >= 0x05d0 && wc < 0x05f0)
+ c = ebcdic12712_page05[wc-0x05d0];
+ else if (wc >= 0x2008 && wc < 0x2040)
+ c = ebcdic12712_page20[wc-0x2008];
+ else if (wc >= 0x20a8 && wc < 0x20b0)
+ c = ebcdic12712_page20_1[wc-0x20a8];
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic16804.h b/lib/ebcdic16804.h
new file mode 100644
index 0000000..fd7af59
--- /dev/null
+++ b/lib/ebcdic16804.h
@@ -0,0 +1,178 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-16804
+ */
+
+static const unsigned short ebcdic16804_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x0651, 0xfe7d, 0x0640, 0x200b, 0x0621, 0x0622,
+ 0xfe82, 0x0623, 0x00a2, 0x002e, 0x003c, 0x0028, 0x002b, 0x007c,
+ /* 0x50 */
+ 0x0026, 0xfe84, 0x0624, 0xfffd, 0xfffd, 0x0626, 0x0627, 0xfe8e,
+ 0x0628, 0xfe91, 0x0021, 0x0024, 0x002a, 0x0029, 0x003b, 0x00ac,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x0629, 0x062a, 0xfe97, 0x062b, 0xfe9b, 0x062c,
+ 0xfe9f, 0x062d, 0x00a6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0xfea3, 0x062e, 0xfea7, 0x062f, 0x0630, 0x0631, 0x0632, 0x0633,
+ 0xfeb3, 0x060c, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0x0634, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0xfeb7, 0x0635, 0xfebb, 0x0636, 0xfebf, 0x0637,
+ /* 0x90 */
+ 0x0638, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x0639, 0xfeca, 0xfecb, 0xfecc, 0x063a, 0xfece,
+ /* 0xa0 */
+ 0xfecf, 0x00f7, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0xfed0, 0x0641, 0xfed3, 0x0642, 0xfed7, 0x0643,
+ /* 0xb0 */
+ 0xfedb, 0x0644, 0xfef5, 0xfef6, 0xfef7, 0xfef8, 0xfffd, 0xfffd,
+ 0xfefb, 0xfefc, 0xfedf, 0x0645, 0xfee3, 0x0646, 0xfee7, 0x0647,
+ /* 0xc0 */
+ 0x061b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x00ad, 0xfeeb, 0xfffd, 0xfeec, 0xfffd, 0x0648,
+ /* 0xd0 */
+ 0x061f, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x0649, 0xfef0, 0x064a, 0xfef2, 0xfef3, 0x0660,
+ /* 0xe0 */
+ 0x00d7, 0x2007, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x0661, 0x0662, 0xfffd, 0x0663, 0x0664, 0x0665,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x20ac, 0x0666, 0x0667, 0x0668, 0x0669, 0x009f,
+};
+
+static int
+ebcdic16804_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ unsigned short wc = ebcdic16804_2uni[c];
+ if (wc != 0xfffd) {
+ *pwc = (ucs4_t) wc;
+ return 1;
+ }
+ return RET_ILSEQ;
+}
+
+static const unsigned char ebcdic16804_page00[248] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0x00, 0x00, 0x00, 0x00, 0x6d, /* 0x58-0x5f */
+ 0x00, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0x00, 0x4f, 0x00, 0x00, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x6a, 0x00, /* 0xa0-0xa7 */
+ 0x00, 0x00, 0x00, 0x00, 0x5f, 0xca, 0x00, 0x00, /* 0xa8-0xaf */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, /* 0xd0-0xd7 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa1, /* 0xf0-0xf7 */
+};
+static const unsigned char ebcdic16804_page06[104] = {
+ 0x00, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, /* 0x08-0x0f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */
+ 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xd0, /* 0x18-0x1f */
+ 0x00, 0x46, 0x47, 0x49, 0x52, 0x00, 0x55, 0x56, /* 0x20-0x27 */
+ 0x58, 0x62, 0x63, 0x65, 0x67, 0x69, 0x71, 0x73, /* 0x28-0x2f */
+ 0x74, 0x75, 0x76, 0x77, 0x80, 0x8b, 0x8d, 0x8f, /* 0x30-0x37 */
+ 0x90, 0x9a, 0x9e, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
+ 0x44, 0xab, 0xad, 0xaf, 0xb1, 0xbb, 0xbd, 0xbf, /* 0x40-0x47 */
+ 0xcf, 0xda, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */
+ 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
+ 0xdf, 0xea, 0xeb, 0xed, 0xee, 0xef, 0xfb, 0xfc, /* 0x60-0x67 */
+ 0xfd, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
+};
+static const unsigned char ebcdic16804_page20[16] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe1, /* 0x00-0x07 */
+ 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */
+};
+static const unsigned char ebcdic16804_pagefe[136] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, /* 0x78-0x7f */
+ 0x00, 0x00, 0x48, 0x00, 0x51, 0x00, 0x00, 0x00, /* 0x80-0x87 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x00, /* 0x88-0x8f */
+ 0x00, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, /* 0x90-0x97 */
+ 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x68, /* 0x98-0x9f */
+ 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x72, /* 0xa0-0xa7 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */
+ 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x8a, /* 0xb0-0xb7 */
+ 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x8e, /* 0xb8-0xbf */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */
+ 0x00, 0x00, 0x9b, 0x9c, 0x9d, 0x00, 0x9f, 0xa0, /* 0xc8-0xcf */
+ 0xaa, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00, 0xae, /* 0xd0-0xd7 */
+ 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00, 0xba, /* 0xd8-0xdf */
+ 0x00, 0x00, 0x00, 0xbc, 0x00, 0x00, 0x00, 0xbe, /* 0xe0-0xe7 */
+ 0x00, 0x00, 0x00, 0xcb, 0xcd, 0x00, 0x00, 0x00, /* 0xe8-0xef */
+ 0xdb, 0x00, 0xdd, 0xde, 0x00, 0xb2, 0xb3, 0xb4, /* 0xf0-0xf7 */
+ 0xb5, 0x00, 0x00, 0xb8, 0xb9, 0x00, 0x00, 0x00, /* 0xf8-0xff */
+};
+
+static int
+ebcdic16804_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x00f8)
+ c = ebcdic16804_page00[wc];
+ else if (wc >= 0x0608 && wc < 0x0670)
+ c = ebcdic16804_page06[wc-0x0608];
+ else if (wc >= 0x2000 && wc < 0x2010)
+ c = ebcdic16804_page20[wc-0x2000];
+ else if (wc == 0x20ac)
+ c = 0xfa;
+ else if (wc >= 0xfe78 && wc < 0xff00)
+ c = ebcdic16804_pagefe[wc-0xfe78];
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic273.h b/lib/ebcdic273.h
new file mode 100644
index 0000000..6dc48f4
--- /dev/null
+++ b/lib/ebcdic273.h
@@ -0,0 +1,129 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-273
+ */
+
+static const unsigned short ebcdic273_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x00e2, 0x007b, 0x00e0, 0x00e1, 0x00e3, 0x00e5,
+ 0x00e7, 0x00f1, 0x00c4, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021,
+ /* 0x50 */
+ 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef,
+ 0x00ec, 0x007e, 0x00dc, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x00c2, 0x005b, 0x00c0, 0x00c1, 0x00c3, 0x00c5,
+ 0x00c7, 0x00d1, 0x00f6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf,
+ 0x00cc, 0x0060, 0x003a, 0x0023, 0x00a7, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x00ab, 0x00bb, 0x00f0, 0x00fd, 0x00fe, 0x00b1,
+ /* 0x90 */
+ 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x00b8, 0x00c6, 0x00a4,
+ /* 0xa0 */
+ 0x00b5, 0x00df, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x00a1, 0x00bf, 0x00d0, 0x00dd, 0x00de, 0x00ae,
+ /* 0xb0 */
+ 0x00a2, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x0040, 0x00b6, 0x00bc,
+ 0x00bd, 0x00be, 0x00ac, 0x007c, 0x00af, 0x00a8, 0x00b4, 0x00d7,
+ /* 0xc0 */
+ 0x00e4, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00a6, 0x00f2, 0x00f3, 0x00f5,
+ /* 0xd0 */
+ 0x00fc, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x00b9, 0x00fb, 0x007d, 0x00f9, 0x00fa, 0x00ff,
+ /* 0xe0 */
+ 0x00d6, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x00b2, 0x00d4, 0x005c, 0x00d2, 0x00d3, 0x00d5,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x00b3, 0x00db, 0x005d, 0x00d9, 0x00da, 0x009f,
+};
+
+static int
+ebcdic273_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ *pwc = (ucs4_t) ebcdic273_2uni[c];
+ return 1;
+}
+
+static const unsigned char ebcdic273_page00[256] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x4f, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0xb5, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0x63, 0xec, 0xfc, 0x5f, 0x6d, /* 0x58-0x5f */
+ 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0x43, 0xbb, 0xdc, 0x59, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0xaa, 0xb0, 0xb1, 0x9f, 0xb2, 0xcc, 0x7c, /* 0xa0-0xa7 */
+ 0xbd, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */
+ 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */
+ 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */
+ 0x64, 0x65, 0x62, 0x66, 0x4a, 0x67, 0x9e, 0x68, /* 0xc0-0xc7 */
+ 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */
+ 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xe0, 0xbf, /* 0xd0-0xd7 */
+ 0x80, 0xfd, 0xfe, 0xfb, 0x5a, 0xad, 0xae, 0xa1, /* 0xd8-0xdf */
+ 0x44, 0x45, 0x42, 0x46, 0xc0, 0x47, 0x9c, 0x48, /* 0xe0-0xe7 */
+ 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */
+ 0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0x6a, 0xe1, /* 0xf0-0xf7 */
+ 0x70, 0xdd, 0xde, 0xdb, 0xd0, 0x8d, 0x8e, 0xdf, /* 0xf8-0xff */
+};
+
+static int
+ebcdic273_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x0100)
+ c = ebcdic273_page00[wc];
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic277.h b/lib/ebcdic277.h
new file mode 100644
index 0000000..c21cfe2
--- /dev/null
+++ b/lib/ebcdic277.h
@@ -0,0 +1,129 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-277
+ */
+
+static const unsigned short ebcdic277_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x00e0, 0x00e1, 0x00e3, 0x007d,
+ 0x00e7, 0x00f1, 0x0023, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021,
+ /* 0x50 */
+ 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef,
+ 0x00ec, 0x00df, 0x00a4, 0x00c5, 0x002a, 0x0029, 0x003b, 0x005e,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x00c3, 0x0024,
+ 0x00c7, 0x00d1, 0x00f8, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0x00a6, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf,
+ 0x00cc, 0x0060, 0x003a, 0x00c6, 0x00d8, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0x0040, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x00ab, 0x00bb, 0x00f0, 0x00fd, 0x00fe, 0x00b1,
+ /* 0x90 */
+ 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x00aa, 0x00ba, 0x007b, 0x00b8, 0x005b, 0x005d,
+ /* 0xa0 */
+ 0x00b5, 0x00fc, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x00a1, 0x00bf, 0x00d0, 0x00dd, 0x00de, 0x00ae,
+ /* 0xb0 */
+ 0x00a2, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x00a7, 0x00b6, 0x00bc,
+ 0x00bd, 0x00be, 0x00ac, 0x007c, 0x00af, 0x00a8, 0x00b4, 0x00d7,
+ /* 0xc0 */
+ 0x00e6, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00f6, 0x00f2, 0x00f3, 0x00f5,
+ /* 0xd0 */
+ 0x00e5, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x00b9, 0x00fb, 0x007e, 0x00f9, 0x00fa, 0x00ff,
+ /* 0xe0 */
+ 0x005c, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x00b2, 0x00d4, 0x00d6, 0x00d2, 0x00d3, 0x00d5,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f,
+};
+
+static int
+ebcdic277_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ *pwc = (ucs4_t) ebcdic277_2uni[c];
+ return 1;
+}
+
+static const unsigned char ebcdic277_page00[256] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x4f, 0x7f, 0x4a, 0x67, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0x80, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0x9e, 0xe0, 0x9f, 0x5f, 0x6d, /* 0x58-0x5f */
+ 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0x9c, 0xbb, 0x47, 0xdc, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0xaa, 0xb0, 0xb1, 0x5a, 0xb2, 0x70, 0xb5, /* 0xa0-0xa7 */
+ 0xbd, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */
+ 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */
+ 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */
+ 0x64, 0x65, 0x62, 0x66, 0x63, 0x5b, 0x7b, 0x68, /* 0xc0-0xc7 */
+ 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */
+ 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf, /* 0xd0-0xd7 */
+ 0x7c, 0xfd, 0xfe, 0xfb, 0xfc, 0xad, 0xae, 0x59, /* 0xd8-0xdf */
+ 0x44, 0x45, 0x42, 0x46, 0x43, 0xd0, 0xc0, 0x48, /* 0xe0-0xe7 */
+ 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */
+ 0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1, /* 0xf0-0xf7 */
+ 0x6a, 0xdd, 0xde, 0xdb, 0xa1, 0x8d, 0x8e, 0xdf, /* 0xf8-0xff */
+};
+
+static int
+ebcdic277_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x0100)
+ c = ebcdic277_page00[wc];
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic278.h b/lib/ebcdic278.h
new file mode 100644
index 0000000..37b06d4
--- /dev/null
+++ b/lib/ebcdic278.h
@@ -0,0 +1,129 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-278
+ */
+
+static const unsigned short ebcdic278_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x00e2, 0x007b, 0x00e0, 0x00e1, 0x00e3, 0x007d,
+ 0x00e7, 0x00f1, 0x00a7, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021,
+ /* 0x50 */
+ 0x0026, 0x0060, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef,
+ 0x00ec, 0x00df, 0x00a4, 0x00c5, 0x002a, 0x0029, 0x003b, 0x005e,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x00c2, 0x0023, 0x00c0, 0x00c1, 0x00c3, 0x0024,
+ 0x00c7, 0x00d1, 0x00f6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0x00f8, 0x005c, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf,
+ 0x00cc, 0x00e9, 0x003a, 0x00c4, 0x00d6, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x00ab, 0x00bb, 0x00f0, 0x00fd, 0x00fe, 0x00b1,
+ /* 0x90 */
+ 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x00b8, 0x00c6, 0x005d,
+ /* 0xa0 */
+ 0x00b5, 0x00fc, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x00a1, 0x00bf, 0x00d0, 0x00dd, 0x00de, 0x00ae,
+ /* 0xb0 */
+ 0x00a2, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x005b, 0x00b6, 0x00bc,
+ 0x00bd, 0x00be, 0x00ac, 0x007c, 0x00af, 0x00a8, 0x00b4, 0x00d7,
+ /* 0xc0 */
+ 0x00e4, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00a6, 0x00f2, 0x00f3, 0x00f5,
+ /* 0xd0 */
+ 0x00e5, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x00b9, 0x00fb, 0x007e, 0x00f9, 0x00fa, 0x00ff,
+ /* 0xe0 */
+ 0x00c9, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x00b2, 0x00d4, 0x0040, 0x00d2, 0x00d3, 0x00d5,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f,
+};
+
+static int
+ebcdic278_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ *pwc = (ucs4_t) ebcdic278_2uni[c];
+ return 1;
+}
+
+static const unsigned char ebcdic278_page00[256] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x4f, 0x7f, 0x63, 0x67, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0xec, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0xb5, 0x71, 0x9f, 0x5f, 0x6d, /* 0x58-0x5f */
+ 0x51, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0x43, 0xbb, 0x47, 0xdc, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0xaa, 0xb0, 0xb1, 0x5a, 0xb2, 0xcc, 0x4a, /* 0xa0-0xa7 */
+ 0xbd, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */
+ 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */
+ 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */
+ 0x64, 0x65, 0x62, 0x66, 0x7b, 0x5b, 0x9e, 0x68, /* 0xc0-0xc7 */
+ 0x74, 0xe0, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */
+ 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0x7c, 0xbf, /* 0xd0-0xd7 */
+ 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xad, 0xae, 0x59, /* 0xd8-0xdf */
+ 0x44, 0x45, 0x42, 0x46, 0xc0, 0xd0, 0x9c, 0x48, /* 0xe0-0xe7 */
+ 0x54, 0x79, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */
+ 0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0x6a, 0xe1, /* 0xf0-0xf7 */
+ 0x70, 0xdd, 0xde, 0xdb, 0xa1, 0x8d, 0x8e, 0xdf, /* 0xf8-0xff */
+};
+
+static int
+ebcdic278_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x0100)
+ c = ebcdic278_page00[wc];
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic280.h b/lib/ebcdic280.h
new file mode 100644
index 0000000..2102f15
--- /dev/null
+++ b/lib/ebcdic280.h
@@ -0,0 +1,129 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-280
+ */
+
+static const unsigned short ebcdic280_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x007b, 0x00e1, 0x00e3, 0x00e5,
+ 0x005c, 0x00f1, 0x00b0, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021,
+ /* 0x50 */
+ 0x0026, 0x005d, 0x00ea, 0x00eb, 0x007d, 0x00ed, 0x00ee, 0x00ef,
+ 0x007e, 0x00df, 0x00e9, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x00c3, 0x00c5,
+ 0x00c7, 0x00d1, 0x00f2, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf,
+ 0x00cc, 0x00f9, 0x003a, 0x00a3, 0x00a7, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x00ab, 0x00bb, 0x00f0, 0x00fd, 0x00fe, 0x00b1,
+ /* 0x90 */
+ 0x005b, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x00b8, 0x00c6, 0x00a4,
+ /* 0xa0 */
+ 0x00b5, 0x00ec, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x00a1, 0x00bf, 0x00d0, 0x00dd, 0x00de, 0x00ae,
+ /* 0xb0 */
+ 0x00a2, 0x0023, 0x00a5, 0x00b7, 0x00a9, 0x0040, 0x00b6, 0x00bc,
+ 0x00bd, 0x00be, 0x00ac, 0x007c, 0x00af, 0x00a8, 0x00b4, 0x00d7,
+ /* 0xc0 */
+ 0x00e0, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00f6, 0x00a6, 0x00f3, 0x00f5,
+ /* 0xd0 */
+ 0x00e8, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x00b9, 0x00fb, 0x00fc, 0x0060, 0x00fa, 0x00ff,
+ /* 0xe0 */
+ 0x00e7, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x00b2, 0x00d4, 0x00d6, 0x00d2, 0x00d3, 0x00d5,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f,
+};
+
+static int
+ebcdic280_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ *pwc = (ucs4_t) ebcdic280_2uni[c];
+ return 1;
+}
+
+static const unsigned char ebcdic280_page00[256] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x4f, 0x7f, 0xb1, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0xb5, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0x90, 0x48, 0x51, 0x5f, 0x6d, /* 0x58-0x5f */
+ 0xdd, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0x44, 0xbb, 0x54, 0x58, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0xaa, 0xb0, 0x7b, 0x9f, 0xb2, 0xcd, 0x7c, /* 0xa0-0xa7 */
+ 0xbd, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */
+ 0x4a, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */
+ 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */
+ 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68, /* 0xc0-0xc7 */
+ 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */
+ 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf, /* 0xd0-0xd7 */
+ 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xad, 0xae, 0x59, /* 0xd8-0xdf */
+ 0xc0, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0xe0, /* 0xe0-0xe7 */
+ 0xd0, 0x5a, 0x52, 0x53, 0xa1, 0x55, 0x56, 0x57, /* 0xe8-0xef */
+ 0x8c, 0x49, 0x6a, 0xce, 0xcb, 0xcf, 0xcc, 0xe1, /* 0xf0-0xf7 */
+ 0x70, 0x79, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf, /* 0xf8-0xff */
+};
+
+static int
+ebcdic280_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x0100)
+ c = ebcdic280_page00[wc];
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic282.h b/lib/ebcdic282.h
new file mode 100644
index 0000000..3779bc1
--- /dev/null
+++ b/lib/ebcdic282.h
@@ -0,0 +1,129 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-282
+ */
+
+static const unsigned short ebcdic282_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x00e0, 0x00e1, 0x007b, 0x00e5,
+ 0x007e, 0x00f1, 0x005b, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021,
+ /* 0x50 */
+ 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef,
+ 0x00ec, 0x00df, 0x005d, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x0023, 0x00c5,
+ 0x005c, 0x00d1, 0x00f5, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf,
+ 0x00cc, 0x0060, 0x003a, 0x00c3, 0x00d5, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x00ab, 0x00bb, 0x00f0, 0x00fd, 0x00fe, 0x00b1,
+ /* 0x90 */
+ 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x00b8, 0x00c6, 0x00a4,
+ /* 0xa0 */
+ 0x00b5, 0x00e7, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x00a1, 0x00bf, 0x00d0, 0x00dd, 0x00de, 0x00ae,
+ /* 0xb0 */
+ 0x00a2, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x00a7, 0x00b6, 0x00bc,
+ 0x00bd, 0x00be, 0x00ac, 0x007c, 0x00af, 0x00a8, 0x007d, 0x00d7,
+ /* 0xc0 */
+ 0x00e3, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00f6, 0x00f2, 0x00f3, 0x00a6,
+ /* 0xd0 */
+ 0x00b4, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x00b9, 0x00fb, 0x00fc, 0x00f9, 0x00fa, 0x00ff,
+ /* 0xe0 */
+ 0x00c7, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x00b2, 0x00d4, 0x00d6, 0x00d2, 0x00d3, 0x0040,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f,
+};
+
+static int
+ebcdic282_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ *pwc = (ucs4_t) ebcdic282_2uni[c];
+ return 1;
+}
+
+static const unsigned char ebcdic282_page00[256] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x4f, 0x7f, 0x66, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0xef, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0x4a, 0x68, 0x5a, 0x5f, 0x6d, /* 0x58-0x5f */
+ 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0x46, 0xbb, 0xbe, 0x48, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0xaa, 0xb0, 0xb1, 0x9f, 0xb2, 0xcf, 0xb5, /* 0xa0-0xa7 */
+ 0xbd, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */
+ 0x90, 0x8f, 0xea, 0xfa, 0xd0, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */
+ 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */
+ 0x64, 0x65, 0x62, 0x7b, 0x63, 0x67, 0x9e, 0xe0, /* 0xc0-0xc7 */
+ 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */
+ 0xac, 0x69, 0xed, 0xee, 0xeb, 0x7c, 0xec, 0xbf, /* 0xd0-0xd7 */
+ 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xad, 0xae, 0x59, /* 0xd8-0xdf */
+ 0x44, 0x45, 0x42, 0xc0, 0x43, 0x47, 0x9c, 0xa1, /* 0xe0-0xe7 */
+ 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */
+ 0x8c, 0x49, 0xcd, 0xce, 0xcb, 0x6a, 0xcc, 0xe1, /* 0xf0-0xf7 */
+ 0x70, 0xdd, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf, /* 0xf8-0xff */
+};
+
+static int
+ebcdic282_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x0100)
+ c = ebcdic282_page00[wc];
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic284.h b/lib/ebcdic284.h
new file mode 100644
index 0000000..368a7de
--- /dev/null
+++ b/lib/ebcdic284.h
@@ -0,0 +1,129 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-284
+ */
+
+static const unsigned short ebcdic284_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x00e0, 0x00e1, 0x00e3, 0x00e5,
+ 0x00e7, 0x00a6, 0x005b, 0x002e, 0x003c, 0x0028, 0x002b, 0x007c,
+ /* 0x50 */
+ 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef,
+ 0x00ec, 0x00df, 0x005d, 0x0024, 0x002a, 0x0029, 0x003b, 0x00ac,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x00c3, 0x00c5,
+ 0x00c7, 0x0023, 0x00f1, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf,
+ 0x00cc, 0x0060, 0x003a, 0x00d1, 0x0040, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x00ab, 0x00bb, 0x00f0, 0x00fd, 0x00fe, 0x00b1,
+ /* 0x90 */
+ 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x00b8, 0x00c6, 0x00a4,
+ /* 0xa0 */
+ 0x00b5, 0x00a8, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x00a1, 0x00bf, 0x00d0, 0x00dd, 0x00de, 0x00ae,
+ /* 0xb0 */
+ 0x00a2, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x00a7, 0x00b6, 0x00bc,
+ 0x00bd, 0x00be, 0x005e, 0x0021, 0x00af, 0x007e, 0x00b4, 0x00d7,
+ /* 0xc0 */
+ 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00f6, 0x00f2, 0x00f3, 0x00f5,
+ /* 0xd0 */
+ 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x00b9, 0x00fb, 0x00fc, 0x00f9, 0x00fa, 0x00ff,
+ /* 0xe0 */
+ 0x005c, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x00b2, 0x00d4, 0x00d6, 0x00d2, 0x00d3, 0x00d5,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f,
+};
+
+static int
+ebcdic284_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ *pwc = (ucs4_t) ebcdic284_2uni[c];
+ return 1;
+}
+
+static const unsigned char ebcdic284_page00[256] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0xbb, 0x7f, 0x69, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0x4a, 0xe0, 0x5a, 0xba, 0x6d, /* 0x58-0x5f */
+ 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xbd, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0xaa, 0xb0, 0xb1, 0x9f, 0xb2, 0x49, 0xb5, /* 0xa0-0xa7 */
+ 0xa1, 0xb4, 0x9a, 0x8a, 0x5f, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */
+ 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */
+ 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */
+ 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68, /* 0xc0-0xc7 */
+ 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */
+ 0xac, 0x7b, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf, /* 0xd0-0xd7 */
+ 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xad, 0xae, 0x59, /* 0xd8-0xdf */
+ 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0x48, /* 0xe0-0xe7 */
+ 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */
+ 0x8c, 0x6a, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1, /* 0xf0-0xf7 */
+ 0x70, 0xdd, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf, /* 0xf8-0xff */
+};
+
+static int
+ebcdic284_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x0100)
+ c = ebcdic284_page00[wc];
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic285.h b/lib/ebcdic285.h
new file mode 100644
index 0000000..feb65a8
--- /dev/null
+++ b/lib/ebcdic285.h
@@ -0,0 +1,129 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-285
+ */
+
+static const unsigned short ebcdic285_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x00e0, 0x00e1, 0x00e3, 0x00e5,
+ 0x00e7, 0x00f1, 0x0024, 0x002e, 0x003c, 0x0028, 0x002b, 0x007c,
+ /* 0x50 */
+ 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef,
+ 0x00ec, 0x00df, 0x0021, 0x00a3, 0x002a, 0x0029, 0x003b, 0x00ac,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x00c3, 0x00c5,
+ 0x00c7, 0x00d1, 0x00a6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf,
+ 0x00cc, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x00ab, 0x00bb, 0x00f0, 0x00fd, 0x00fe, 0x00b1,
+ /* 0x90 */
+ 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x00b8, 0x00c6, 0x00a4,
+ /* 0xa0 */
+ 0x00b5, 0x00af, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x00a1, 0x00bf, 0x00d0, 0x00dd, 0x00de, 0x00ae,
+ /* 0xb0 */
+ 0x00a2, 0x005b, 0x00a5, 0x00b7, 0x00a9, 0x00a7, 0x00b6, 0x00bc,
+ 0x00bd, 0x00be, 0x005e, 0x005d, 0x007e, 0x00a8, 0x00b4, 0x00d7,
+ /* 0xc0 */
+ 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00f6, 0x00f2, 0x00f3, 0x00f5,
+ /* 0xd0 */
+ 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x00b9, 0x00fb, 0x00fc, 0x00f9, 0x00fa, 0x00ff,
+ /* 0xe0 */
+ 0x005c, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x00b2, 0x00d4, 0x00d6, 0x00d2, 0x00d3, 0x00d5,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f,
+};
+
+static int
+ebcdic285_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ *pwc = (ucs4_t) ebcdic285_2uni[c];
+ return 1;
+}
+
+static const unsigned char ebcdic285_page00[256] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x5a, 0x7f, 0x7b, 0x4a, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0xb1, 0xe0, 0xbb, 0xba, 0x6d, /* 0x58-0x5f */
+ 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xbc, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0xaa, 0xb0, 0x5b, 0x9f, 0xb2, 0x6a, 0xb5, /* 0xa0-0xa7 */
+ 0xbd, 0xb4, 0x9a, 0x8a, 0x5f, 0xca, 0xaf, 0xa1, /* 0xa8-0xaf */
+ 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */
+ 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */
+ 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68, /* 0xc0-0xc7 */
+ 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */
+ 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf, /* 0xd0-0xd7 */
+ 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xad, 0xae, 0x59, /* 0xd8-0xdf */
+ 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0x48, /* 0xe0-0xe7 */
+ 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */
+ 0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1, /* 0xf0-0xf7 */
+ 0x70, 0xdd, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf, /* 0xf8-0xff */
+};
+
+static int
+ebcdic285_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x0100)
+ c = ebcdic285_page00[wc];
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic297.h b/lib/ebcdic297.h
new file mode 100644
index 0000000..391dff3
--- /dev/null
+++ b/lib/ebcdic297.h
@@ -0,0 +1,129 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-297
+ */
+
+static const unsigned short ebcdic297_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x0040, 0x00e1, 0x00e3, 0x00e5,
+ 0x005c, 0x00f1, 0x00b0, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021,
+ /* 0x50 */
+ 0x0026, 0x007b, 0x00ea, 0x00eb, 0x007d, 0x00ed, 0x00ee, 0x00ef,
+ 0x00ec, 0x00df, 0x00a7, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x00c3, 0x00c5,
+ 0x00c7, 0x00d1, 0x00f9, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf,
+ 0x00cc, 0x00b5, 0x003a, 0x00a3, 0x00e0, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x00ab, 0x00bb, 0x00f0, 0x00fd, 0x00fe, 0x00b1,
+ /* 0x90 */
+ 0x005b, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x00b8, 0x00c6, 0x00a4,
+ /* 0xa0 */
+ 0x0060, 0x00a8, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x00a1, 0x00bf, 0x00d0, 0x00dd, 0x00de, 0x00ae,
+ /* 0xb0 */
+ 0x00a2, 0x0023, 0x00a5, 0x00b7, 0x00a9, 0x005d, 0x00b6, 0x00bc,
+ 0x00bd, 0x00be, 0x00ac, 0x007c, 0x00af, 0x007e, 0x00b4, 0x00d7,
+ /* 0xc0 */
+ 0x00e9, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00f6, 0x00f2, 0x00f3, 0x00f5,
+ /* 0xd0 */
+ 0x00e8, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x00b9, 0x00fb, 0x00fc, 0x00a6, 0x00fa, 0x00ff,
+ /* 0xe0 */
+ 0x00e7, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x00b2, 0x00d4, 0x00d6, 0x00d2, 0x00d3, 0x00d5,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f,
+};
+
+static int
+ebcdic297_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ *pwc = (ucs4_t) ebcdic297_2uni[c];
+ return 1;
+}
+
+static const unsigned char ebcdic297_page00[256] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x4f, 0x7f, 0xb1, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0x44, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0x90, 0x48, 0xb5, 0x5f, 0x6d, /* 0x58-0x5f */
+ 0xa0, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0x51, 0xbb, 0x54, 0xbd, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0xaa, 0xb0, 0x7b, 0x9f, 0xb2, 0xdd, 0x5a, /* 0xa0-0xa7 */
+ 0xa1, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */
+ 0x4a, 0x8f, 0xea, 0xfa, 0xbe, 0x79, 0xb6, 0xb3, /* 0xb0-0xb7 */
+ 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */
+ 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68, /* 0xc0-0xc7 */
+ 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */
+ 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf, /* 0xd0-0xd7 */
+ 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xad, 0xae, 0x59, /* 0xd8-0xdf */
+ 0x7c, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0xe0, /* 0xe0-0xe7 */
+ 0xd0, 0xc0, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */
+ 0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1, /* 0xf0-0xf7 */
+ 0x70, 0x6a, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf, /* 0xf8-0xff */
+};
+
+static int
+ebcdic297_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x0100)
+ c = ebcdic297_page00[wc];
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic423.h b/lib/ebcdic423.h
new file mode 100644
index 0000000..6dd6388
--- /dev/null
+++ b/lib/ebcdic423.h
@@ -0,0 +1,147 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-423
+ */
+
+static const unsigned short ebcdic423_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397,
+ 0x0398, 0x0399, 0x005b, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021,
+ /* 0x50 */
+ 0x0026, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0,
+ 0x03a1, 0x03a3, 0x005d, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9,
+ 0xfffd, 0xfffd, 0x007c, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0xfffd, 0x0386, 0x0388, 0x0389, 0x00a0, 0x038a, 0x038c, 0x038e,
+ 0x038f, 0x0060, 0x003a, 0x00a3, 0x00a7, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0x00c4, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6,
+ /* 0x90 */
+ 0x00d6, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x03b7, 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc,
+ /* 0xa0 */
+ 0x00dc, 0x00a8, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x03bd, 0x03be, 0x03bf, 0x03c0, 0x03c1, 0x03c3,
+ /* 0xb0 */
+ 0xfffd, 0x03ac, 0x03ad, 0x03ae, 0x03ca, 0x03af, 0x03cc, 0x03cd,
+ 0x03cb, 0x03ce, 0x03c2, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8,
+ /* 0xc0 */
+ 0x00b8, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x00ad, 0x03c9, 0x00e2, 0x00e0, 0x00e4, 0x00ea,
+ /* 0xd0 */
+ 0x00b4, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x00b1, 0x00e9, 0x00e8, 0x00eb, 0x00ee, 0x00ef,
+ /* 0xe0 */
+ 0x00b0, 0xfffd, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x00bd, 0x00f6, 0x00f4, 0x00fb, 0x00f9, 0x00fc,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x00ff, 0x00e7, 0x00c7, 0xfffd, 0xfffd, 0x009f,
+};
+
+static int
+ebcdic423_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ unsigned short wc = ebcdic423_2uni[c];
+ if (wc != 0xfffd) {
+ *pwc = (ucs4_t) wc;
+ return 1;
+ }
+ return RET_ILSEQ;
+}
+
+static const unsigned char ebcdic423_page00[256] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x4f, 0x7f, 0x00, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0x00, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0x4a, 0x00, 0x5a, 0x5f, 0x6d, /* 0x58-0x5f */
+ 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0x00, 0x6a, 0x00, 0x00, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x74, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x7c, /* 0xa0-0xa7 */
+ 0xa1, 0x00, 0x00, 0x00, 0x00, 0xca, 0x00, 0x00, /* 0xa8-0xaf */
+ 0xe0, 0xda, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */
+ 0xc0, 0x00, 0x00, 0x00, 0x00, 0xea, 0x00, 0x00, /* 0xb8-0xbf */
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0xfc, /* 0xc0-0xc7 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x00, /* 0xd0-0xd7 */
+ 0x00, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, /* 0xd8-0xdf */
+ 0xcd, 0x00, 0xcc, 0x00, 0xce, 0x00, 0x00, 0xfb, /* 0xe0-0xe7 */
+ 0xdc, 0xdb, 0xcf, 0xdd, 0x00, 0x00, 0xde, 0xdf, /* 0xe8-0xef */
+ 0x00, 0x00, 0x00, 0x00, 0xec, 0x00, 0xeb, 0x00, /* 0xf0-0xf7 */
+ 0x00, 0xee, 0x00, 0xed, 0xef, 0x00, 0x00, 0xfa, /* 0xf8-0xff */
+};
+static const unsigned char ebcdic423_page03[80] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x00, /* 0x80-0x87 */
+ 0x72, 0x73, 0x75, 0x00, 0x76, 0x00, 0x77, 0x78, /* 0x88-0x8f */
+ 0x00, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x90-0x97 */
+ 0x48, 0x49, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, /* 0x98-0x9f */
+ 0x57, 0x58, 0x00, 0x59, 0x62, 0x63, 0x64, 0x65, /* 0xa0-0xa7 */
+ 0x66, 0x67, 0x00, 0x00, 0xb1, 0xb2, 0xb3, 0xb5, /* 0xa8-0xaf */
+ 0x00, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x9a, /* 0xb0-0xb7 */
+ 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xaa, 0xab, 0xac, /* 0xb8-0xbf */
+ 0xad, 0xae, 0xba, 0xaf, 0xbb, 0xbc, 0xbd, 0xbe, /* 0xc0-0xc7 */
+ 0xbf, 0xcb, 0xb4, 0xb8, 0xb6, 0xb7, 0xb9, 0x00, /* 0xc8-0xcf */
+};
+
+static int
+ebcdic423_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x0100)
+ c = ebcdic423_page00[wc];
+ else if (wc >= 0x0380 && wc < 0x03d0)
+ c = ebcdic423_page03[wc-0x0380];
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic424.h b/lib/ebcdic424.h
new file mode 100644
index 0000000..f426e89
--- /dev/null
+++ b/lib/ebcdic424.h
@@ -0,0 +1,150 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-424
+ */
+
+static const unsigned short ebcdic424_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6,
+ 0x05d7, 0x05d8, 0x00a2, 0x002e, 0x003c, 0x0028, 0x002b, 0x007c,
+ /* 0x50 */
+ 0x0026, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df,
+ 0x05e0, 0x05e1, 0x0021, 0x0024, 0x002a, 0x0029, 0x003b, 0x00ac,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7,
+ 0x05e8, 0x05e9, 0x00a6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0xfffd, 0x05ea, 0xfffd, 0xfffd, 0x00a0, 0xfffd, 0xfffd, 0xfffd,
+ 0x2017, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0xfffd, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x00ab, 0x00bb, 0xfffd, 0xfffd, 0xfffd, 0x00b1,
+ /* 0x90 */
+ 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0xfffd, 0xfffd, 0xfffd, 0x00b8, 0xfffd, 0x00a4,
+ /* 0xa0 */
+ 0x00b5, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x00ae,
+ /* 0xb0 */
+ 0x005e, 0x00a3, 0x00a5, 0x2022, 0x00a9, 0x00a7, 0x00b6, 0x00bc,
+ 0x00bd, 0x00be, 0x005b, 0x005d, 0x203e, 0x00a8, 0x00b4, 0x00d7,
+ /* 0xc0 */
+ 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x00ad, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
+ /* 0xd0 */
+ 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x00b9, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
+ /* 0xe0 */
+ 0x005c, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x00b2, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x00b3, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x009f,
+};
+
+static int
+ebcdic424_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ unsigned short wc = ebcdic424_2uni[c];
+ if (wc != 0xfffd) {
+ *pwc = (ucs4_t) wc;
+ return 1;
+ }
+ return RET_ILSEQ;
+}
+
+static const unsigned char ebcdic424_page00[248] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0xba, 0xe0, 0xbb, 0xb0, 0x6d, /* 0x58-0x5f */
+ 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x74, 0x00, 0x4a, 0xb1, 0x9f, 0xb2, 0x6a, 0xb5, /* 0xa0-0xa7 */
+ 0xbd, 0xb4, 0x00, 0x8a, 0x5f, 0xca, 0xaf, 0x00, /* 0xa8-0xaf */
+ 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0x00, /* 0xb0-0xb7 */
+ 0x9d, 0xda, 0x00, 0x8b, 0xb7, 0xb8, 0xb9, 0x00, /* 0xb8-0xbf */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, /* 0xd0-0xd7 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe1, /* 0xf0-0xf7 */
+};
+static const unsigned char ebcdic424_page05[32] = {
+ 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, /* 0xd0-0xd7 */
+ 0x49, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0xd8-0xdf */
+ 0x58, 0x59, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0xe0-0xe7 */
+ 0x68, 0x69, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */
+};
+static const unsigned char ebcdic424_page20[48] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, /* 0x10-0x17 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
+ 0x00, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbc, 0x00, /* 0x38-0x3f */
+};
+
+static int
+ebcdic424_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x00f8)
+ c = ebcdic424_page00[wc];
+ else if (wc >= 0x05d0 && wc < 0x05f0)
+ c = ebcdic424_page05[wc-0x05d0];
+ else if (wc >= 0x2010 && wc < 0x2040)
+ c = ebcdic424_page20[wc-0x2010];
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic425.h b/lib/ebcdic425.h
new file mode 100644
index 0000000..d2f04b1
--- /dev/null
+++ b/lib/ebcdic425.h
@@ -0,0 +1,164 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-425
+ */
+
+static const unsigned short ebcdic425_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x00e2, 0x060c, 0x00e0, 0x061b, 0x0640, 0x061f,
+ 0x00e7, 0x0621, 0x0622, 0x002e, 0x003c, 0x0028, 0x002b, 0x007c,
+ /* 0x50 */
+ 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x0623, 0x00ee, 0x00ef,
+ 0x0624, 0x0625, 0x0021, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x00c2, 0x0626, 0x00c0, 0x0627, 0x0628, 0x0629,
+ 0x00c7, 0x062a, 0x062b, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0x062c, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x062d, 0x00ce, 0x00cf,
+ 0x062e, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0x062f, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x00ab, 0x00bb, 0x0630, 0x0631, 0x0632, 0x0633,
+ /* 0x90 */
+ 0x0634, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x0635, 0x0636, 0x00e6, 0x0637, 0x00c6, 0x20ac,
+ /* 0xa0 */
+ 0x00b5, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x0638, 0x0639, 0x063a, 0x005b, 0x0641, 0x0642,
+ /* 0xb0 */
+ 0x0643, 0x0644, 0x0645, 0x0646, 0x00a9, 0x00a7, 0x0647, 0x0152,
+ 0x0153, 0x0178, 0x0648, 0x0649, 0x064a, 0x005d, 0x064b, 0x00d7,
+ /* 0xc0 */
+ 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x00ad, 0x00f4, 0x064c, 0x064d, 0x064e, 0x064f,
+ /* 0xd0 */
+ 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x0650, 0x00fb, 0x00fc, 0x00f9, 0x0651, 0x00ff,
+ /* 0xe0 */
+ 0x005c, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x0652, 0x00d4, 0x200c, 0x200d, 0x200e, 0x200f,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0xfffd, 0x00db, 0x00dc, 0x00d9, 0x00a4, 0x009f,
+};
+
+static int
+ebcdic425_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ unsigned short wc = ebcdic425_2uni[c];
+ if (wc != 0xfffd) {
+ *pwc = (ucs4_t) wc;
+ return 1;
+ }
+ return RET_ILSEQ;
+}
+
+static const unsigned char ebcdic425_page00[256] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0xad, 0xe0, 0xbd, 0x5f, 0x6d, /* 0x58-0x5f */
+ 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xb5, /* 0xa0-0xa7 */
+ 0x00, 0xb4, 0x00, 0x8a, 0x00, 0xca, 0x00, 0x00, /* 0xa8-0xaf */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, /* 0xb0-0xb7 */
+ 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */
+ 0x64, 0x00, 0x62, 0x00, 0x00, 0x00, 0x9e, 0x68, /* 0xc0-0xc7 */
+ 0x74, 0x71, 0x72, 0x73, 0x00, 0x00, 0x76, 0x77, /* 0xc8-0xcf */
+ 0x00, 0x00, 0x00, 0x00, 0xeb, 0x00, 0x00, 0xbf, /* 0xd0-0xd7 */
+ 0x00, 0xfd, 0x00, 0xfb, 0xfc, 0x00, 0x00, 0x00, /* 0xd8-0xdf */
+ 0x44, 0x00, 0x42, 0x00, 0x00, 0x00, 0x9c, 0x48, /* 0xe0-0xe7 */
+ 0x54, 0x51, 0x52, 0x53, 0x00, 0x00, 0x56, 0x57, /* 0xe8-0xef */
+ 0x00, 0x00, 0x00, 0x00, 0xcb, 0x00, 0x00, 0xe1, /* 0xf0-0xf7 */
+ 0x00, 0xdd, 0x00, 0xdb, 0xdc, 0x00, 0x00, 0xdf, /* 0xf8-0xff */
+};
+static const unsigned char ebcdic425_page01[48] = {
+ 0x00, 0x00, 0xb7, 0xb8, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
+ 0xb9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */
+};
+static const unsigned char ebcdic425_page06[80] = {
+ 0x00, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, /* 0x08-0x0f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */
+ 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x47, /* 0x18-0x1f */
+ 0x00, 0x49, 0x4a, 0x55, 0x58, 0x59, 0x63, 0x65, /* 0x20-0x27 */
+ 0x66, 0x67, 0x69, 0x6a, 0x70, 0x75, 0x78, 0x80, /* 0x28-0x2f */
+ 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x9a, 0x9b, 0x9d, /* 0x30-0x37 */
+ 0xaa, 0xab, 0xac, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
+ 0x46, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb6, /* 0x40-0x47 */
+ 0xba, 0xbb, 0xbc, 0xbe, 0xcc, 0xcd, 0xce, 0xcf, /* 0x48-0x4f */
+ 0xda, 0xde, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
+};
+static const unsigned char ebcdic425_page20[8] = {
+ 0x00, 0x00, 0x00, 0x00, 0xec, 0xed, 0xee, 0xef, /* 0x08-0x0f */
+};
+
+static int
+ebcdic425_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x0100)
+ c = ebcdic425_page00[wc];
+ else if (wc >= 0x0150 && wc < 0x0180)
+ c = ebcdic425_page01[wc-0x0150];
+ else if (wc >= 0x0608 && wc < 0x0658)
+ c = ebcdic425_page06[wc-0x0608];
+ else if (wc >= 0x2008 && wc < 0x2010)
+ c = ebcdic425_page20[wc-0x2008];
+ else if (wc == 0x20ac)
+ c = 0x9f;
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic4971.h b/lib/ebcdic4971.h
new file mode 100644
index 0000000..0fa4683
--- /dev/null
+++ b/lib/ebcdic4971.h
@@ -0,0 +1,147 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-4971
+ */
+
+static const unsigned short ebcdic4971_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397,
+ 0x0398, 0x0399, 0x005b, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021,
+ /* 0x50 */
+ 0x0026, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0,
+ 0x03a1, 0x03a3, 0x005d, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9,
+ 0x03aa, 0x03ab, 0x007c, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0x00a8, 0x0386, 0x0388, 0x0389, 0x00a0, 0x038a, 0x038c, 0x038e,
+ 0x038f, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0x0385, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6,
+ /* 0x90 */
+ 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x03b7, 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc,
+ /* 0xa0 */
+ 0x00b4, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x03bd, 0x03be, 0x03bf, 0x03c0, 0x03c1, 0x03c3,
+ /* 0xb0 */
+ 0x00a3, 0x03ac, 0x03ad, 0x03ae, 0x03ca, 0x03af, 0x03cc, 0x03cd,
+ 0x03cb, 0x03ce, 0x03c2, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8,
+ /* 0xc0 */
+ 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x00ad, 0x03c9, 0x0390, 0x03b0, 0x2018, 0x2015,
+ /* 0xd0 */
+ 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x00b1, 0x00bd, 0xfffd, 0x0387, 0x2019, 0x00a6,
+ /* 0xe0 */
+ 0x005c, 0xfffd, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x00b2, 0x00a7, 0xfffd, 0xfffd, 0x00ab, 0x00ac,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x00b3, 0x00a9, 0x20ac, 0xfffd, 0x00bb, 0x009f,
+};
+
+static int
+ebcdic4971_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ unsigned short wc = ebcdic4971_2uni[c];
+ if (wc != 0xfffd) {
+ *pwc = (ucs4_t) wc;
+ return 1;
+ }
+ return RET_ILSEQ;
+}
+
+static const unsigned char ebcdic4971_page00[192] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x4f, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0x4a, 0xe0, 0x5a, 0x5f, 0x6d, /* 0x58-0x5f */
+ 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0xc0, 0x6a, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x74, 0x00, 0x00, 0xb0, 0x00, 0x00, 0xdf, 0xeb, /* 0xa0-0xa7 */
+ 0x70, 0xfb, 0x00, 0xee, 0xef, 0xca, 0x00, 0x00, /* 0xa8-0xaf */
+ 0x90, 0xda, 0xea, 0xfa, 0xa0, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */
+ 0x00, 0x00, 0x00, 0xfe, 0x00, 0xdb, 0x00, 0x00, /* 0xb8-0xbf */
+};
+static const unsigned char ebcdic4971_page03[80] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x71, 0xdd, /* 0x80-0x87 */
+ 0x72, 0x73, 0x75, 0x00, 0x76, 0x00, 0x77, 0x78, /* 0x88-0x8f */
+ 0xcc, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x90-0x97 */
+ 0x48, 0x49, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, /* 0x98-0x9f */
+ 0x57, 0x58, 0x00, 0x59, 0x62, 0x63, 0x64, 0x65, /* 0xa0-0xa7 */
+ 0x66, 0x67, 0x68, 0x69, 0xb1, 0xb2, 0xb3, 0xb5, /* 0xa8-0xaf */
+ 0xcd, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x9a, /* 0xb0-0xb7 */
+ 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xaa, 0xab, 0xac, /* 0xb8-0xbf */
+ 0xad, 0xae, 0xba, 0xaf, 0xbb, 0xbc, 0xbd, 0xbe, /* 0xc0-0xc7 */
+ 0xbf, 0xcb, 0xb4, 0xb8, 0xb6, 0xb7, 0xb9, 0x00, /* 0xc8-0xcf */
+};
+static const unsigned char ebcdic4971_page20[16] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xcf, 0x00, 0x00, /* 0x10-0x17 */
+ 0xce, 0xde, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
+};
+
+static int
+ebcdic4971_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x00c0)
+ c = ebcdic4971_page00[wc];
+ else if (wc >= 0x0380 && wc < 0x03d0)
+ c = ebcdic4971_page03[wc-0x0380];
+ else if (wc >= 0x2010 && wc < 0x2020)
+ c = ebcdic4971_page20[wc-0x2010];
+ else if (wc == 0x20ac)
+ c = 0xfc;
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic500.h b/lib/ebcdic500.h
new file mode 100644
index 0000000..4270513
--- /dev/null
+++ b/lib/ebcdic500.h
@@ -0,0 +1,129 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-500
+ */
+
+static const unsigned short ebcdic500_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x00e0, 0x00e1, 0x00e3, 0x00e5,
+ 0x00e7, 0x00f1, 0x005b, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021,
+ /* 0x50 */
+ 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef,
+ 0x00ec, 0x00df, 0x005d, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x00c3, 0x00c5,
+ 0x00c7, 0x00d1, 0x00a6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf,
+ 0x00cc, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x00ab, 0x00bb, 0x00f0, 0x00fd, 0x00fe, 0x00b1,
+ /* 0x90 */
+ 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x00b8, 0x00c6, 0x00a4,
+ /* 0xa0 */
+ 0x00b5, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x00a1, 0x00bf, 0x00d0, 0x00dd, 0x00de, 0x00ae,
+ /* 0xb0 */
+ 0x00a2, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x00a7, 0x00b6, 0x00bc,
+ 0x00bd, 0x00be, 0x00ac, 0x007c, 0x00af, 0x00a8, 0x00b4, 0x00d7,
+ /* 0xc0 */
+ 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00f6, 0x00f2, 0x00f3, 0x00f5,
+ /* 0xd0 */
+ 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x00b9, 0x00fb, 0x00fc, 0x00f9, 0x00fa, 0x00ff,
+ /* 0xe0 */
+ 0x005c, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x00b2, 0x00d4, 0x00d6, 0x00d2, 0x00d3, 0x00d5,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f,
+};
+
+static int
+ebcdic500_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ *pwc = (ucs4_t) ebcdic500_2uni[c];
+ return 1;
+}
+
+static const unsigned char ebcdic500_page00[256] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x4f, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0x4a, 0xe0, 0x5a, 0x5f, 0x6d, /* 0x58-0x5f */
+ 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0xc0, 0xbb, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0xaa, 0xb0, 0xb1, 0x9f, 0xb2, 0x6a, 0xb5, /* 0xa0-0xa7 */
+ 0xbd, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */
+ 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */
+ 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */
+ 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68, /* 0xc0-0xc7 */
+ 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */
+ 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf, /* 0xd0-0xd7 */
+ 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xad, 0xae, 0x59, /* 0xd8-0xdf */
+ 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0x48, /* 0xe0-0xe7 */
+ 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */
+ 0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1, /* 0xf0-0xf7 */
+ 0x70, 0xdd, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf, /* 0xf8-0xff */
+};
+
+static int
+ebcdic500_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x0100)
+ c = ebcdic500_page00[wc];
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic838.h b/lib/ebcdic838.h
new file mode 100644
index 0000000..99911bd
--- /dev/null
+++ b/lib/ebcdic838.h
@@ -0,0 +1,135 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-838
+ */
+
+static const unsigned short ebcdic838_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x0e01, 0x0e02, 0x0e03, 0x0e04, 0x0e05, 0x0e06,
+ 0x0e07, 0x005b, 0x00a2, 0x002e, 0x003c, 0x0028, 0x002b, 0x007c,
+ /* 0x50 */
+ 0x0026, 0x0e48, 0x0e08, 0x0e09, 0x0e0a, 0x0e0b, 0x0e0c, 0x0e0d,
+ 0x0e0e, 0x005d, 0x0021, 0x0024, 0x002a, 0x0029, 0x003b, 0x00ac,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x0e0f, 0x0e10, 0x0e11, 0x0e12, 0x0e13, 0x0e14,
+ 0x0e15, 0x005e, 0x00a6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0x0e3f, 0x0e4e, 0x0e16, 0x0e17, 0x0e18, 0x0e19, 0x0e1a, 0x0e1b,
+ 0x0e1c, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0x0e4f, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x0e1d, 0x0e1e, 0x0e1f, 0x0e20, 0x0e21, 0x0e22,
+ /* 0x90 */
+ 0x0e5a, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x0e23, 0x0e24, 0x0e25, 0x0e26, 0x0e27, 0x0e28,
+ /* 0xa0 */
+ 0x0e5b, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x0e29, 0x0e2a, 0x0e2b, 0x0e2c, 0x0e2d, 0x0e2e,
+ /* 0xb0 */
+ 0x0e50, 0x0e51, 0x0e52, 0x0e53, 0x0e54, 0x0e55, 0x0e56, 0x0e57,
+ 0x0e58, 0x0e59, 0x0e2f, 0x0e30, 0x0e31, 0x0e32, 0x0e33, 0x0e34,
+ /* 0xc0 */
+ 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x0e49, 0x0e35, 0x0e36, 0x0e37, 0x0e38, 0x0e39,
+ /* 0xd0 */
+ 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x0e3a, 0x0e40, 0x0e41, 0x0e42, 0x0e43, 0x0e44,
+ /* 0xe0 */
+ 0x005c, 0x0e4a, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x0e45, 0x0e46, 0x0e47, 0x0e48, 0x0e49, 0x0e4a,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x0e4b, 0x0e4c, 0x0e4d, 0x0e4b, 0x0e4c, 0x009f,
+};
+
+static int
+ebcdic838_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ *pwc = (ucs4_t) ebcdic838_2uni[c];
+ return 1;
+}
+
+static const unsigned char ebcdic838_page00[176] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0x49, 0xe0, 0x59, 0x69, 0x6d, /* 0x58-0x5f */
+ 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x6a, 0x00, /* 0xa0-0xa7 */
+ 0x00, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, /* 0xa8-0xaf */
+};
+static const unsigned char ebcdic838_page0e[96] = {
+ 0x00, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, /* 0x00-0x07 */
+ 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x62, /* 0x08-0x0f */
+ 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x72, 0x73, /* 0x10-0x17 */
+ 0x74, 0x75, 0x76, 0x77, 0x78, 0x8a, 0x8b, 0x8c, /* 0x18-0x1f */
+ 0x8d, 0x8e, 0x8f, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, /* 0x20-0x27 */
+ 0x9f, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xba, /* 0x28-0x2f */
+ 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xcb, 0xcc, 0xcd, /* 0x30-0x37 */
+ 0xce, 0xcf, 0xda, 0x00, 0x00, 0x00, 0x00, 0x70, /* 0x38-0x3f */
+ 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xea, 0xeb, 0xec, /* 0x40-0x47 */
+ 0xed, 0xee, 0xef, 0xfa, 0xfb, 0xfc, 0x71, 0x80, /* 0x48-0x4f */
+ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0x50-0x57 */
+ 0xb8, 0xb9, 0x90, 0xa0, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
+};
+
+static int
+ebcdic838_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x00b0)
+ c = ebcdic838_page00[wc];
+ else if (wc >= 0x0e00 && wc < 0x0e60)
+ c = ebcdic838_page0e[wc-0x0e00];
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic870.h b/lib/ebcdic870.h
new file mode 100644
index 0000000..8b14f83
--- /dev/null
+++ b/lib/ebcdic870.h
@@ -0,0 +1,154 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-870
+ */
+
+static const unsigned short ebcdic870_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x0163, 0x00e1, 0x0103, 0x010d,
+ 0x00e7, 0x0107, 0x005b, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021,
+ /* 0x50 */
+ 0x0026, 0x00e9, 0x0119, 0x00eb, 0x016f, 0x00ed, 0x00ee, 0x013e,
+ 0x013a, 0x00df, 0x005d, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x00c2, 0x00c4, 0x02dd, 0x00c1, 0x0102, 0x010c,
+ 0x00c7, 0x0106, 0x007c, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0x02c7, 0x00c9, 0x0118, 0x00cb, 0x016e, 0x00cd, 0x00ce, 0x013d,
+ 0x0139, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0x02d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x015b, 0x0148, 0x0111, 0x00fd, 0x0159, 0x015f,
+ /* 0x90 */
+ 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x0142, 0x0144, 0x0161, 0x00b8, 0x02db, 0x00a4,
+ /* 0xa0 */
+ 0x0105, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x015a, 0x0147, 0x0110, 0x00dd, 0x0158, 0x015e,
+ /* 0xb0 */
+ 0x02d9, 0x0104, 0x017c, 0x0162, 0x017b, 0x00a7, 0x017e, 0x017a,
+ 0x017d, 0x0179, 0x0141, 0x0143, 0x0160, 0x00a8, 0x00b4, 0x00d7,
+ /* 0xc0 */
+ 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00f6, 0x0155, 0x00f3, 0x0151,
+ /* 0xd0 */
+ 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x011a, 0x0171, 0x00fc, 0x0165, 0x00fa, 0x011b,
+ /* 0xe0 */
+ 0x005c, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x010f, 0x00d4, 0x00d6, 0x0154, 0x00d3, 0x0150,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x010e, 0x0170, 0x00dc, 0x0164, 0x00da, 0x009f,
+};
+
+static int
+ebcdic870_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ *pwc = (ucs4_t) ebcdic870_2uni[c];
+ return 1;
+}
+
+static const unsigned char ebcdic870_page00[384] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x4f, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0x4a, 0xe0, 0x5a, 0x5f, 0x6d, /* 0x58-0x5f */
+ 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0xc0, 0x6a, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0x00, 0x00, 0x00, 0x9f, 0x00, 0x00, 0xb5, /* 0xa0-0xa7 */
+ 0xbd, 0x00, 0x00, 0x00, 0x00, 0xca, 0x00, 0x00, /* 0xa8-0xaf */
+ 0x90, 0x00, 0x00, 0x00, 0xbe, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */
+ 0x9d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */
+ 0x00, 0x65, 0x62, 0x00, 0x63, 0x00, 0x00, 0x68, /* 0xc0-0xc7 */
+ 0x00, 0x71, 0x00, 0x73, 0x00, 0x75, 0x76, 0x00, /* 0xc8-0xcf */
+ 0x00, 0x00, 0x00, 0xee, 0xeb, 0x00, 0xec, 0xbf, /* 0xd0-0xd7 */
+ 0x00, 0x00, 0xfe, 0x00, 0xfc, 0xad, 0x00, 0x59, /* 0xd8-0xdf */
+ 0x00, 0x45, 0x42, 0x00, 0x43, 0x00, 0x00, 0x48, /* 0xe0-0xe7 */
+ 0x00, 0x51, 0x00, 0x53, 0x00, 0x55, 0x56, 0x00, /* 0xe8-0xef */
+ 0x00, 0x00, 0x00, 0xce, 0xcb, 0x00, 0xcc, 0xe1, /* 0xf0-0xf7 */
+ 0x00, 0x00, 0xde, 0x00, 0xdc, 0x8d, 0x00, 0x00, /* 0xf8-0xff */
+ /* 0x0100 */
+ 0x00, 0x00, 0x66, 0x46, 0xb1, 0xa0, 0x69, 0x49, /* 0x00-0x07 */
+ 0x00, 0x00, 0x00, 0x00, 0x67, 0x47, 0xfa, 0xea, /* 0x08-0x0f */
+ 0xac, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */
+ 0x72, 0x52, 0xda, 0xdf, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
+ 0x00, 0x78, 0x58, 0x00, 0x00, 0x77, 0x57, 0x00, /* 0x38-0x3f */
+ 0x00, 0xba, 0x9a, 0xbb, 0x9b, 0x00, 0x00, 0xab, /* 0x40-0x47 */
+ 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */
+ 0xef, 0xcf, 0x00, 0x00, 0xed, 0xcd, 0x00, 0x00, /* 0x50-0x57 */
+ 0xae, 0x8e, 0xaa, 0x8a, 0x00, 0x00, 0xaf, 0x8f, /* 0x58-0x5f */
+ 0xbc, 0x9c, 0xb3, 0x44, 0xfd, 0xdd, 0x00, 0x00, /* 0x60-0x67 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x54, /* 0x68-0x6f */
+ 0xfb, 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
+ 0x00, 0xb9, 0xb7, 0xb4, 0xb2, 0xb8, 0xb6, 0x00, /* 0x78-0x7f */
+};
+static const unsigned char ebcdic870_page02[32] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, /* 0xc0-0xc7 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */
+ 0x80, 0xb0, 0x00, 0x9e, 0x00, 0x64, 0x00, 0x00, /* 0xd8-0xdf */
+};
+
+static int
+ebcdic870_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x0180)
+ c = ebcdic870_page00[wc];
+ else if (wc >= 0x02c0 && wc < 0x02e0)
+ c = ebcdic870_page02[wc-0x02c0];
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic871.h b/lib/ebcdic871.h
new file mode 100644
index 0000000..0e091cd
--- /dev/null
+++ b/lib/ebcdic871.h
@@ -0,0 +1,129 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-871
+ */
+
+static const unsigned short ebcdic871_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x00e0, 0x00e1, 0x00e3, 0x00e5,
+ 0x00e7, 0x00f1, 0x00de, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021,
+ /* 0x50 */
+ 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef,
+ 0x00ec, 0x00df, 0x00c6, 0x0024, 0x002a, 0x0029, 0x003b, 0x00d6,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x00c3, 0x00c5,
+ 0x00c7, 0x00d1, 0x00a6, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf,
+ 0x00cc, 0x00f0, 0x003a, 0x0023, 0x00d0, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x00ab, 0x00bb, 0x0060, 0x00fd, 0x007b, 0x00b1,
+ /* 0x90 */
+ 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x00aa, 0x00ba, 0x007d, 0x00b8, 0x005d, 0x00a4,
+ /* 0xa0 */
+ 0x00b5, 0x00f6, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x00a1, 0x00bf, 0x0040, 0x00dd, 0x005b, 0x00ae,
+ /* 0xb0 */
+ 0x00a2, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x00a7, 0x00b6, 0x00bc,
+ 0x00bd, 0x00be, 0x00ac, 0x007c, 0x00af, 0x00a8, 0x005c, 0x00d7,
+ /* 0xc0 */
+ 0x00fe, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x00ad, 0x00f4, 0x007e, 0x00f2, 0x00f3, 0x00f5,
+ /* 0xd0 */
+ 0x00e6, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x00b9, 0x00fb, 0x00fc, 0x00f9, 0x00fa, 0x00ff,
+ /* 0xe0 */
+ 0x00b4, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x00b2, 0x00d4, 0x005e, 0x00d2, 0x00d3, 0x00d5,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f,
+};
+
+static int
+ebcdic871_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ *pwc = (ucs4_t) ebcdic871_2uni[c];
+ return 1;
+}
+
+static const unsigned char ebcdic871_page00[256] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x4f, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0xac, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0xae, 0xbe, 0x9e, 0xec, 0x6d, /* 0x58-0x5f */
+ 0x8c, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0x8e, 0xbb, 0x9c, 0xcc, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0xaa, 0xb0, 0xb1, 0x9f, 0xb2, 0x6a, 0xb5, /* 0xa0-0xa7 */
+ 0xbd, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */
+ 0x90, 0x8f, 0xea, 0xfa, 0xe0, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */
+ 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* 0xb8-0xbf */
+ 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x5a, 0x68, /* 0xc0-0xc7 */
+ 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */
+ 0x7c, 0x69, 0xed, 0xee, 0xeb, 0xef, 0x5f, 0xbf, /* 0xd0-0xd7 */
+ 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xad, 0x4a, 0x59, /* 0xd8-0xdf */
+ 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0xd0, 0x48, /* 0xe0-0xe7 */
+ 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */
+ 0x79, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xa1, 0xe1, /* 0xf0-0xf7 */
+ 0x70, 0xdd, 0xde, 0xdb, 0xdc, 0x8d, 0xc0, 0xdf, /* 0xf8-0xff */
+};
+
+static int
+ebcdic871_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x0100)
+ c = ebcdic871_page00[wc];
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic875.h b/lib/ebcdic875.h
new file mode 100644
index 0000000..dee3f46
--- /dev/null
+++ b/lib/ebcdic875.h
@@ -0,0 +1,145 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-875
+ */
+
+static const unsigned short ebcdic875_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397,
+ 0x0398, 0x0399, 0x005b, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021,
+ /* 0x50 */
+ 0x0026, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0,
+ 0x03a1, 0x03a3, 0x005d, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9,
+ 0x03aa, 0x03ab, 0x007c, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0x00a8, 0x0386, 0x0388, 0x0389, 0x00a0, 0x038a, 0x038c, 0x038e,
+ 0x038f, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0x0385, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6,
+ /* 0x90 */
+ 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x03b7, 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc,
+ /* 0xa0 */
+ 0x00b4, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x03bd, 0x03be, 0x03bf, 0x03c0, 0x03c1, 0x03c3,
+ /* 0xb0 */
+ 0x00a3, 0x03ac, 0x03ad, 0x03ae, 0x03ca, 0x03af, 0x03cc, 0x03cd,
+ 0x03cb, 0x03ce, 0x03c2, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8,
+ /* 0xc0 */
+ 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x00ad, 0x03c9, 0x0390, 0x03b0, 0x2018, 0x2015,
+ /* 0xd0 */
+ 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x00b1, 0x00bd, 0xfffd, 0x0387, 0x2019, 0x00a6,
+ /* 0xe0 */
+ 0x005c, 0xfffd, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x00b2, 0x00a7, 0xfffd, 0xfffd, 0x00ab, 0x00ac,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x00b3, 0x00a9, 0xfffd, 0xfffd, 0x00bb, 0x009f,
+};
+
+static int
+ebcdic875_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ unsigned short wc = ebcdic875_2uni[c];
+ if (wc != 0xfffd) {
+ *pwc = (ucs4_t) wc;
+ return 1;
+ }
+ return RET_ILSEQ;
+}
+
+static const unsigned char ebcdic875_page00[192] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x4f, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0x4a, 0xe0, 0x5a, 0x5f, 0x6d, /* 0x58-0x5f */
+ 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0xc0, 0x6a, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x74, 0x00, 0x00, 0xb0, 0x00, 0x00, 0xdf, 0xeb, /* 0xa0-0xa7 */
+ 0x70, 0xfb, 0x00, 0xee, 0xef, 0xca, 0x00, 0x00, /* 0xa8-0xaf */
+ 0x90, 0xda, 0xea, 0xfa, 0xa0, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */
+ 0x00, 0x00, 0x00, 0xfe, 0x00, 0xdb, 0x00, 0x00, /* 0xb8-0xbf */
+};
+static const unsigned char ebcdic875_page03[80] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x71, 0xdd, /* 0x80-0x87 */
+ 0x72, 0x73, 0x75, 0x00, 0x76, 0x00, 0x77, 0x78, /* 0x88-0x8f */
+ 0xcc, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x90-0x97 */
+ 0x48, 0x49, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, /* 0x98-0x9f */
+ 0x57, 0x58, 0x00, 0x59, 0x62, 0x63, 0x64, 0x65, /* 0xa0-0xa7 */
+ 0x66, 0x67, 0x68, 0x69, 0xb1, 0xb2, 0xb3, 0xb5, /* 0xa8-0xaf */
+ 0xcd, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x9a, /* 0xb0-0xb7 */
+ 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xaa, 0xab, 0xac, /* 0xb8-0xbf */
+ 0xad, 0xae, 0xba, 0xaf, 0xbb, 0xbc, 0xbd, 0xbe, /* 0xc0-0xc7 */
+ 0xbf, 0xcb, 0xb4, 0xb8, 0xb6, 0xb7, 0xb9, 0x00, /* 0xc8-0xcf */
+};
+static const unsigned char ebcdic875_page20[16] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xcf, 0x00, 0x00, /* 0x10-0x17 */
+ 0xce, 0xde, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
+};
+
+static int
+ebcdic875_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x00c0)
+ c = ebcdic875_page00[wc];
+ else if (wc >= 0x0380 && wc < 0x03d0)
+ c = ebcdic875_page03[wc-0x0380];
+ else if (wc >= 0x2010 && wc < 0x2020)
+ c = ebcdic875_page20[wc-0x2010];
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic880.h b/lib/ebcdic880.h
new file mode 100644
index 0000000..bcadc52
--- /dev/null
+++ b/lib/ebcdic880.h
@@ -0,0 +1,137 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-880
+ */
+
+static const unsigned short ebcdic880_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x0452, 0x0453, 0x0451, 0x0454, 0x0455, 0x0456,
+ 0x0457, 0x0458, 0x005b, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021,
+ /* 0x50 */
+ 0x0026, 0x0459, 0x045a, 0x045b, 0x045c, 0x045e, 0x045f, 0x042a,
+ 0x2116, 0x0402, 0x005d, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x0403, 0x0401, 0x0404, 0x0405, 0x0406, 0x0407,
+ 0x0408, 0x0409, 0x007c, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0x040a, 0x040b, 0x040c, 0x00ad, 0x040e, 0x040f, 0x044e, 0x0430,
+ 0x0431, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0x0446, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x0434, 0x0435, 0x0444, 0x0433, 0x0445, 0x0438,
+ /* 0x90 */
+ 0x0439, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f,
+ /* 0xa0 */
+ 0x044f, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432,
+ /* 0xb0 */
+ 0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a,
+ 0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413,
+ /* 0xc0 */
+ 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c,
+ /* 0xd0 */
+ 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x041d, 0x041e, 0x041f, 0x042f, 0x0420, 0x0421,
+ /* 0xe0 */
+ 0x005c, 0x00a4, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x0422, 0x0423, 0x0416, 0x0412, 0x042c, 0x042b,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x009f,
+};
+
+static int
+ebcdic880_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ *pwc = (ucs4_t) ebcdic880_2uni[c];
+ return 1;
+}
+
+static const unsigned char ebcdic880_page00[176] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x4f, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0x4a, 0xe0, 0x5a, 0x5f, 0x6d, /* 0x58-0x5f */
+ 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0xc0, 0x6a, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0x00, 0x00, 0x00, 0xe1, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, /* 0xa8-0xaf */
+};
+static const unsigned char ebcdic880_page04[96] = {
+ 0x00, 0x63, 0x59, 0x62, 0x64, 0x65, 0x66, 0x67, /* 0x00-0x07 */
+ 0x68, 0x69, 0x70, 0x71, 0x72, 0x00, 0x74, 0x75, /* 0x08-0x0f */
+ 0xb9, 0xba, 0xed, 0xbf, 0xbc, 0xbd, 0xec, 0xfa, /* 0x10-0x17 */
+ 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xda, 0xdb, 0xdc, /* 0x18-0x1f */
+ 0xde, 0xdf, 0xea, 0xeb, 0xbe, 0xca, 0xbb, 0xfe, /* 0x20-0x27 */
+ 0xfb, 0xfd, 0x57, 0xef, 0xee, 0xfc, 0xb8, 0xdd, /* 0x28-0x2f */
+ 0x77, 0x78, 0xaf, 0x8d, 0x8a, 0x8b, 0xae, 0xb2, /* 0x30-0x37 */
+ 0x8f, 0x90, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x38-0x3f */
+ 0xaa, 0xab, 0xac, 0xad, 0x8c, 0x8e, 0x80, 0xb6, /* 0x40-0x47 */
+ 0xb3, 0xb5, 0xb7, 0xb1, 0xb0, 0xb4, 0x76, 0xa0, /* 0x48-0x4f */
+ 0x00, 0x44, 0x42, 0x43, 0x45, 0x46, 0x47, 0x48, /* 0x50-0x57 */
+ 0x49, 0x51, 0x52, 0x53, 0x54, 0x00, 0x55, 0x56, /* 0x58-0x5f */
+};
+
+static int
+ebcdic880_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x00b0)
+ c = ebcdic880_page00[wc];
+ else if (wc >= 0x0400 && wc < 0x0460)
+ c = ebcdic880_page04[wc-0x0400];
+ else if (wc == 0x2116)
+ c = 0x58;
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic905.h b/lib/ebcdic905.h
new file mode 100644
index 0000000..6041c99
--- /dev/null
+++ b/lib/ebcdic905.h
@@ -0,0 +1,157 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-905
+ */
+
+static const unsigned short ebcdic905_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x00e0, 0x00e1, 0xfffd, 0x010b,
+ 0x007b, 0x00f1, 0x00c7, 0x002e, 0x003c, 0x0028, 0x002b, 0x0021,
+ /* 0x50 */
+ 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef,
+ 0x00ec, 0x00df, 0x011e, 0x0130, 0x002a, 0x0029, 0x003b, 0x005e,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0xfffd, 0x010a,
+ 0x005b, 0x00d1, 0x015f, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0xfffd, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf,
+ 0x00cc, 0x0131, 0x003a, 0x00d6, 0x015e, 0x0027, 0x003d, 0x00dc,
+ /* 0x80 */
+ 0x02d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x0127, 0x0109, 0x015d, 0x016d, 0xfffd, 0x007c,
+ /* 0x90 */
+ 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x0125, 0x011d, 0x0135, 0x00b8, 0xfffd, 0x00a4,
+ /* 0xa0 */
+ 0x00b5, 0x00f6, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x0126, 0x0108, 0x015c, 0x016c, 0xfffd, 0x0040,
+ /* 0xb0 */
+ 0x02d9, 0x00a3, 0x017c, 0x007d, 0x017b, 0x00a7, 0x005d, 0x00b7,
+ 0x00bd, 0x0024, 0x0124, 0x011c, 0x0134, 0x00a8, 0x00b4, 0x00d7,
+ /* 0xc0 */
+ 0x00e7, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x00ad, 0x00f4, 0x007e, 0x00f2, 0x00f3, 0x0121,
+ /* 0xd0 */
+ 0x011f, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x0060, 0x00fb, 0x005c, 0x00f9, 0x00fa, 0xfffd,
+ /* 0xe0 */
+ 0x00fc, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x00b2, 0x00d4, 0x0023, 0x00d2, 0x00d3, 0x0120,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x00b3, 0x00db, 0x0022, 0x00d9, 0x00da, 0x009f,
+};
+
+static int
+ebcdic905_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ unsigned short wc = ebcdic905_2uni[c];
+ if (wc != 0xfffd) {
+ *pwc = (ucs4_t) wc;
+ return 1;
+ }
+ return RET_ILSEQ;
+}
+
+static const unsigned char ebcdic905_page00[256] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x4f, 0xfc, 0xec, 0xb9, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0xaf, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0x68, 0xdc, 0xb6, 0x5f, 0x6d, /* 0x58-0x5f */
+ 0xda, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0x48, 0x8f, 0xb3, 0xcc, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0x00, 0x00, 0xb1, 0x9f, 0x00, 0x00, 0xb5, /* 0xa0-0xa7 */
+ 0xbd, 0x00, 0x00, 0x00, 0x00, 0xca, 0x00, 0x00, /* 0xa8-0xaf */
+ 0x90, 0x00, 0xea, 0xfa, 0xbe, 0xa0, 0x00, 0xb7, /* 0xb0-0xb7 */
+ 0x9d, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x00, 0x00, /* 0xb8-0xbf */
+ 0x64, 0x65, 0x62, 0x00, 0x63, 0x00, 0x00, 0x4a, /* 0xc0-0xc7 */
+ 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */
+ 0x00, 0x69, 0xed, 0xee, 0xeb, 0x00, 0x7b, 0xbf, /* 0xd0-0xd7 */
+ 0x00, 0xfd, 0xfe, 0xfb, 0x7f, 0x00, 0x00, 0x59, /* 0xd8-0xdf */
+ 0x44, 0x45, 0x42, 0x00, 0x43, 0x00, 0x00, 0xc0, /* 0xe0-0xe7 */
+ 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */
+ 0x00, 0x49, 0xcd, 0xce, 0xcb, 0x00, 0xa1, 0xe1, /* 0xf0-0xf7 */
+ 0x00, 0xdd, 0xde, 0xdb, 0xe0, 0x00, 0x00, 0x00, /* 0xf8-0xff */
+};
+static const unsigned char ebcdic905_page01[120] = {
+ 0xab, 0x8b, 0x67, 0x47, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */
+ 0x00, 0x00, 0x00, 0x00, 0xbb, 0x9b, 0x5a, 0xd0, /* 0x18-0x1f */
+ 0xef, 0xcf, 0x00, 0x00, 0xba, 0x9a, 0xaa, 0x8a, /* 0x20-0x27 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
+ 0x5b, 0x79, 0x00, 0x00, 0xbc, 0x9c, 0x00, 0x00, /* 0x30-0x37 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
+ 0x00, 0x00, 0x00, 0x00, 0xac, 0x8c, 0x7c, 0x6a, /* 0x58-0x5f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
+ 0x00, 0x00, 0x00, 0x00, 0xad, 0x8d, 0x00, 0x00, /* 0x68-0x6f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
+ 0x00, 0x00, 0x00, 0xb4, 0xb2, 0x00, 0x00, 0x00, /* 0x78-0x7f */
+};
+static const unsigned char ebcdic905_page02[8] = {
+ 0x80, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */
+};
+
+static int
+ebcdic905_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x0100)
+ c = ebcdic905_page00[wc];
+ else if (wc >= 0x0108 && wc < 0x0180)
+ c = ebcdic905_page01[wc-0x0108];
+ else if (wc >= 0x02d8 && wc < 0x02e0)
+ c = ebcdic905_page02[wc-0x02d8];
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/ebcdic924.h b/lib/ebcdic924.h
new file mode 100644
index 0000000..cc7cd7c
--- /dev/null
+++ b/lib/ebcdic924.h
@@ -0,0 +1,141 @@
+/*
+ * Copyright (C) 1999-2022 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV 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
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ * If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/*
+ * IBM-924
+ */
+
+static const unsigned short ebcdic924_2uni[256] = {
+ /* 0x00 */
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x009c, 0x0009, 0x0086, 0x007f,
+ 0x0097, 0x008d, 0x008e, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ /* 0x10 */
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x009d, 0x0085, 0x0008, 0x0087,
+ 0x0018, 0x0019, 0x0092, 0x008f, 0x001c, 0x001d, 0x001e, 0x001f,
+ /* 0x20 */
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x000a, 0x0017, 0x001b,
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x0005, 0x0006, 0x0007,
+ /* 0x30 */
+ 0x0090, 0x0091, 0x0016, 0x0093, 0x0094, 0x0095, 0x0096, 0x0004,
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x0014, 0x0015, 0x009e, 0x001a,
+ /* 0x40 */
+ 0x0020, 0x00a0, 0x00e2, 0x00e4, 0x00e0, 0x00e1, 0x00e3, 0x00e5,
+ 0x00e7, 0x00f1, 0x00dd, 0x002e, 0x003c, 0x0028, 0x002b, 0x007c,
+ /* 0x50 */
+ 0x0026, 0x00e9, 0x00ea, 0x00eb, 0x00e8, 0x00ed, 0x00ee, 0x00ef,
+ 0x00ec, 0x00df, 0x0021, 0x0024, 0x002a, 0x0029, 0x003b, 0x005e,
+ /* 0x60 */
+ 0x002d, 0x002f, 0x00c2, 0x00c4, 0x00c0, 0x00c1, 0x00c3, 0x00c5,
+ 0x00c7, 0x00d1, 0x0160, 0x002c, 0x0025, 0x005f, 0x003e, 0x003f,
+ /* 0x70 */
+ 0x00f8, 0x00c9, 0x00ca, 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf,
+ 0x00cc, 0x0060, 0x003a, 0x0023, 0x0040, 0x0027, 0x003d, 0x0022,
+ /* 0x80 */
+ 0x00d8, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+ 0x0068, 0x0069, 0x00ab, 0x00bb, 0x00f0, 0x00fd, 0x00fe, 0x00b1,
+ /* 0x90 */
+ 0x00b0, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070,
+ 0x0071, 0x0072, 0x00aa, 0x00ba, 0x00e6, 0x017e, 0x00c6, 0x20ac,
+ /* 0xa0 */
+ 0x00b5, 0x007e, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078,
+ 0x0079, 0x007a, 0x00a1, 0x00bf, 0x00d0, 0x005b, 0x00de, 0x00ae,
+ /* 0xb0 */
+ 0x00a2, 0x00a3, 0x00a5, 0x00b7, 0x00a9, 0x00a7, 0x00b6, 0x0152,
+ 0x0153, 0x0178, 0x00ac, 0x0161, 0x00af, 0x005d, 0x017d, 0x00d7,
+ /* 0xc0 */
+ 0x007b, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+ 0x0048, 0x0049, 0x00ad, 0x00f4, 0x00f6, 0x00f2, 0x00f3, 0x00f5,
+ /* 0xd0 */
+ 0x007d, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050,
+ 0x0051, 0x0052, 0x00b9, 0x00fb, 0x00fc, 0x00f9, 0x00fa, 0x00ff,
+ /* 0xe0 */
+ 0x005c, 0x00f7, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058,
+ 0x0059, 0x005a, 0x00b2, 0x00d4, 0x00d6, 0x00d2, 0x00d3, 0x00d5,
+ /* 0xf0 */
+ 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x0038, 0x0039, 0x00b3, 0x00db, 0x00dc, 0x00d9, 0x00da, 0x009f,
+};
+
+static int
+ebcdic924_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, size_t n)
+{
+ unsigned char c = *s;
+ *pwc = (ucs4_t) ebcdic924_2uni[c];
+ return 1;
+}
+
+static const unsigned char ebcdic924_page00[256] = {
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 0x00-0x07 */
+ 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */
+ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 0x10-0x17 */
+ 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */
+ 0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 0x20-0x27 */
+ 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* 0x28-0x2f */
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x30-0x37 */
+ 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0x38-0x3f */
+ 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x40-0x47 */
+ 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* 0x48-0x4f */
+ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 0x50-0x57 */
+ 0xe7, 0xe8, 0xe9, 0xad, 0xe0, 0xbd, 0x5f, 0x6d, /* 0x58-0x5f */
+ 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x60-0x67 */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0x68-0x6f */
+ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0x70-0x77 */
+ 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07, /* 0x78-0x7f */
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, /* 0x80-0x87 */
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, /* 0x88-0x8f */
+ 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, /* 0x90-0x97 */
+ 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xff, /* 0x98-0x9f */
+ 0x41, 0xaa, 0xb0, 0xb1, 0x00, 0xb2, 0x00, 0xb5, /* 0xa0-0xa7 */
+ 0x00, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xbc, /* 0xa8-0xaf */
+ 0x90, 0x8f, 0xea, 0xfa, 0x00, 0xa0, 0xb6, 0xb3, /* 0xb0-0xb7 */
+ 0x00, 0xda, 0x9b, 0x8b, 0x00, 0x00, 0x00, 0xab, /* 0xb8-0xbf */
+ 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68, /* 0xc0-0xc7 */
+ 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* 0xc8-0xcf */
+ 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf, /* 0xd0-0xd7 */
+ 0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0x4a, 0xae, 0x59, /* 0xd8-0xdf */
+ 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0x48, /* 0xe0-0xe7 */
+ 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* 0xe8-0xef */
+ 0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1, /* 0xf0-0xf7 */
+ 0x70, 0xdd, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf, /* 0xf8-0xff */
+};
+static const unsigned char ebcdic924_page01[48] = {
+ 0x00, 0x00, 0xb7, 0xb8, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */
+ 0x6a, 0xbb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
+ 0xb9, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x9d, 0x00, /* 0x78-0x7f */
+};
+
+static int
+ebcdic924_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, size_t n)
+{
+ unsigned char c = 0;
+ if (wc < 0x0100)
+ c = ebcdic924_page00[wc];
+ else if (wc >= 0x0150 && wc < 0x0180)
+ c = ebcdic924_page01[wc-0x0150];
+ else if (wc == 0x20ac)
+ c = 0x9f;
+ if (c != 0 || wc == 0) {
+ *r = c;
+ return 1;
+ }
+ return RET_ILUNI;
+}
diff --git a/lib/encodings_zos.def b/lib/encodings_zos.def
new file mode 100644
index 0000000..838b6be
--- /dev/null
+++ b/lib/encodings_zos.def
@@ -0,0 +1,471 @@
+/* Copyright (C) 2022 Free Software Foundation, Inc.
+ This file is part of the GNU LIBICONV Library.
+
+ The GNU LIBICONV 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 LIBICONV 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 LIBICONV Library; see the file COPYING.LIB.
+ If not, see <https://www.gnu.org/licenses/>. */
+
+/* Encodings used by system dependent locales on z/OS. */
+
+DEFENCODING(( "IBM-037",
+ "IBM037", /* IANA */
+ "CP037", /* IANA */
+ "EBCDIC-CP-US", /* IANA */
+ "EBCDIC-CP-CA", /* IANA */
+ "EBCDIC-CP-WT", /* IANA */
+ "EBCDIC-CP-NL", /* IANA */
+ "csIBM037", /* IANA */
+ ),
+ ebcdic037,
+ { ebcdic037_mbtowc, NULL }, { ebcdic037_wctomb, NULL })
+
+DEFENCODING(( "IBM-273",
+ "IBM273", /* IANA */
+ "CP273", /* IANA */
+ "csIBM273", /* IANA */
+ ),
+ ebcdic273,
+ { ebcdic273_mbtowc, NULL }, { ebcdic273_wctomb, NULL })
+
+DEFENCODING(( "IBM-277",
+ "IBM277", /* IANA */
+ "EBCDIC-CP-DK", /* IANA */
+ "EBCDIC-CP-NO", /* IANA */
+ "csIBM277", /* IANA */
+ ),
+ ebcdic277,
+ { ebcdic277_mbtowc, NULL }, { ebcdic277_wctomb, NULL })
+
+DEFENCODING(( "IBM-278",
+ "IBM278", /* IANA */
+ "CP278", /* IANA */
+ "EBCDIC-CP-FI", /* IANA */
+ "EBCDIC-CP-SE", /* IANA */
+ "csIBM278", /* IANA */
+ ),
+ ebcdic278,
+ { ebcdic278_mbtowc, NULL }, { ebcdic278_wctomb, NULL })
+
+DEFENCODING(( "IBM-280",
+ "IBM280", /* IANA */
+ "CP280", /* IANA */
+ "EBCDIC-CP-IT", /* IANA */
+ "csIBM280", /* IANA */
+ ),
+ ebcdic280,
+ { ebcdic280_mbtowc, NULL }, { ebcdic280_wctomb, NULL })
+
+DEFENCODING(( "IBM-282",
+ "IBM282",
+ ),
+ ebcdic282,
+ { ebcdic282_mbtowc, NULL }, { ebcdic282_wctomb, NULL })
+
+DEFENCODING(( "IBM-284",
+ "IBM284", /* IANA */
+ "CP284", /* IANA */
+ "EBCDIC-CP-ES", /* IANA */
+ "csIBM284", /* IANA */
+ ),
+ ebcdic284,
+ { ebcdic284_mbtowc, NULL }, { ebcdic284_wctomb, NULL })
+
+DEFENCODING(( "IBM-285",
+ "IBM285", /* IANA */
+ "CP285", /* IANA */
+ "EBCDIC-CP-GB", /* IANA */
+ "csIBM285", /* IANA */
+ ),
+ ebcdic285,
+ { ebcdic285_mbtowc, NULL }, { ebcdic285_wctomb, NULL })
+
+DEFENCODING(( "IBM-297",
+ "IBM297", /* IANA */
+ "CP297", /* IANA */
+ "EBCDIC-CP-FR", /* IANA */
+ "csIBM297", /* IANA */
+ ),
+ ebcdic297,
+ { ebcdic297_mbtowc, NULL }, { ebcdic297_wctomb, NULL })
+
+DEFENCODING(( "IBM-423",
+ "IBM423", /* IANA */
+ "CP423", /* IANA */
+ "EBCDIC-CP-GR", /* IANA */
+ "csIBM423", /* IANA */
+ ),
+ ebcdic423,
+ { ebcdic423_mbtowc, NULL }, { ebcdic423_wctomb, NULL })
+
+DEFENCODING(( "IBM-424",
+ "IBM424", /* IANA */
+ "CP424", /* IANA */
+ "EBCDIC-CP-HE", /* IANA */
+ "csIBM424", /* IANA */
+ ),
+ ebcdic424,
+ { ebcdic424_mbtowc, NULL }, { ebcdic424_wctomb, NULL })
+
+DEFENCODING(( "IBM-425",
+ "IBM425",
+ ),
+ ebcdic425,
+ { ebcdic425_mbtowc, NULL }, { ebcdic425_wctomb, NULL })
+
+DEFENCODING(( "IBM-500",
+ "IBM500", /* IANA */
+ "CP500", /* IANA */
+ "EBCDIC-CP-BE", /* IANA */
+ "EBCDIC-CP-CH", /* IANA */
+ "csIBM500", /* IANA */
+ ),
+ ebcdic500,
+ { ebcdic500_mbtowc, NULL }, { ebcdic500_wctomb, NULL })
+
+DEFENCODING(( "IBM-838",
+ "IBM838",
+ "IBM-THAI", /* IANA */
+ "csIBMThai", /* IANA */
+ ),
+ ebcdic838,
+ { ebcdic838_mbtowc, NULL }, { ebcdic838_wctomb, NULL })
+
+DEFENCODING(( "IBM-870",
+ "IBM870", /* IANA */
+ "CP870", /* IANA */
+ "EBCDIC-CP-ROECE", /* IANA */
+ "EBCDIC-CP-YU", /* IANA */
+ "csIBM870", /* IANA */
+ ),
+ ebcdic870,
+ { ebcdic870_mbtowc, NULL }, { ebcdic870_wctomb, NULL })
+
+DEFENCODING(( "IBM-871",
+ "IBM871", /* IANA */
+ "CP871", /* IANA */
+ "EBCDIC-CP-IS", /* IANA */
+ "csIBM871", /* IANA */
+ ),
+ ebcdic871,
+ { ebcdic871_mbtowc, NULL }, { ebcdic871_wctomb, NULL })
+
+DEFENCODING(( "IBM-875",
+ "IBM875", /* glibc */
+ "CP875", /* glibc */
+ "EBCDIC-GREEK", /* glibc */
+ ),
+ ebcdic875,
+ { ebcdic875_mbtowc, NULL }, { ebcdic875_wctomb, NULL })
+
+DEFENCODING(( "IBM-880",
+ "IBM880", /* IANA */
+ "CP880", /* IANA */
+ "EBCDIC-CYRILLIC", /* IANA */
+ "csIBM880", /* IANA */
+ ),
+ ebcdic880,
+ { ebcdic880_mbtowc, NULL }, { ebcdic880_wctomb, NULL })
+
+DEFENCODING(( "IBM-905",
+ "IBM905", /* IANA */
+ "CP905", /* IANA */
+ "EBCDIC-CP-TR", /* IANA */
+ "csIBM905", /* IANA */
+ ),
+ ebcdic905,
+ { ebcdic905_mbtowc, NULL }, { ebcdic905_wctomb, NULL })
+
+DEFENCODING(( "IBM-924",
+ "IBM924",
+ "IBM00924", /* IANA */
+ "CCSID00924", /* IANA */
+ "CP00924", /* IANA */
+ "EBCDIC-LATIN9-EURO", /* IANA */
+ "csIBM00924", /* IANA */
+ ),
+ ebcdic924,
+ { ebcdic924_mbtowc, NULL }, { ebcdic924_wctomb, NULL })
+
+DEFENCODING(( "IBM-1025",
+ "IBM1025", /* glibc */
+ "CP1025", /* glibc */
+ ),
+ ebcdic1025,
+ { ebcdic1025_mbtowc, NULL }, { ebcdic1025_wctomb, NULL })
+
+DEFENCODING(( "IBM-1026",
+ "IBM1026", /* IANA */
+ "CP1026", /* IANA */
+ "csIBM1026", /* IANA */
+ ),
+ ebcdic1026,
+ { ebcdic1026_mbtowc, NULL }, { ebcdic1026_wctomb, NULL })
+
+DEFENCODING(( "IBM-1047", /* IANA */
+ "IBM1047", /* IANA */
+ "CP1047", /* glibc */
+ "csIBM1047", /* IANA */
+ ),
+ ebcdic1047,
+ { ebcdic1047_mbtowc, NULL }, { ebcdic1047_wctomb, NULL })
+
+DEFENCODING(( "IBM-1097",
+ "IBM1097", /* glibc */
+ "CP1097", /* glibc */
+ ),
+ ebcdic1097,
+ { ebcdic1097_mbtowc, NULL }, { ebcdic1097_wctomb, NULL })
+
+DEFENCODING(( "IBM-1112",
+ "IBM1112", /* glibc */
+ "CP1112", /* glibc */
+ ),
+ ebcdic1112,
+ { ebcdic1112_mbtowc, NULL }, { ebcdic1112_wctomb, NULL })
+
+DEFENCODING(( "IBM-1122",
+ "IBM1122", /* glibc */
+ "CP1122", /* glibc */
+ ),
+ ebcdic1122,
+ { ebcdic1122_mbtowc, NULL }, { ebcdic1122_wctomb, NULL })
+
+DEFENCODING(( "IBM-1123",
+ "IBM1123", /* glibc */
+ "CP1123", /* glibc */
+ ),
+ ebcdic1123,
+ { ebcdic1123_mbtowc, NULL }, { ebcdic1123_wctomb, NULL })
+
+DEFENCODING(( "IBM-1130",
+ "IBM1130", /* glibc */
+ "CP1130", /* glibc */
+ ),
+ ebcdic1130,
+ { ebcdic1130_mbtowc, NULL }, { ebcdic1130_wctomb, NULL })
+
+DEFENCODING(( "IBM-1132",
+ "IBM1132", /* glibc */
+ "CP1132", /* glibc */
+ ),
+ ebcdic1132,
+ { ebcdic1132_mbtowc, NULL }, { ebcdic1132_wctomb, NULL })
+
+DEFENCODING(( "IBM-1137",
+ "IBM1137", /* glibc */
+ "CP1137", /* glibc */
+ ),
+ ebcdic1137,
+ { ebcdic1137_mbtowc, NULL }, { ebcdic1137_wctomb, NULL })
+
+DEFENCODING(( "IBM-1140",
+ "IBM1140",
+ "IBM01140", /* IANA */
+ "CCSID01140", /* IANA */
+ "CP01140", /* IANA */
+ "EBCDIC-US-37+EURO", /* IANA */
+ "csIBM01140", /* IANA */
+ ),
+ ebcdic1140,
+ { ebcdic1140_mbtowc, NULL }, { ebcdic1140_wctomb, NULL })
+
+DEFENCODING(( "IBM-1141",
+ "IBM1141",
+ "IBM01141", /* IANA */
+ "CCSID01141", /* IANA */
+ "CP01141", /* IANA */
+ "EBCDIC-DE-273+EURO", /* IANA */
+ "csIBM01141", /* IANA */
+ ),
+ ebcdic1141,
+ { ebcdic1141_mbtowc, NULL }, { ebcdic1141_wctomb, NULL })
+
+DEFENCODING(( "IBM-1142",
+ "IBM1142",
+ "IBM01142", /* IANA */
+ "CCSID01142", /* IANA */
+ "CP01142", /* IANA */
+ "EBCDIC-DK-277+EURO", /* IANA */
+ "EBCDIC-NO-277+EURO", /* IANA */
+ "csIBM01142", /* IANA */
+ ),
+ ebcdic1142,
+ { ebcdic1142_mbtowc, NULL }, { ebcdic1142_wctomb, NULL })
+
+DEFENCODING(( "IBM-1143",
+ "IBM1143",
+ "IBM01143", /* IANA */
+ "CCSID01143", /* IANA */
+ "CP01143", /* IANA */
+ "EBCDIC-FI-278+EURO", /* IANA */
+ "EBCDIC-SE-278+EURO", /* IANA */
+ "csIBM01143", /* IANA */
+ ),
+ ebcdic1143,
+ { ebcdic1143_mbtowc, NULL }, { ebcdic1143_wctomb, NULL })
+
+DEFENCODING(( "IBM-1144",
+ "IBM1144",
+ "IBM01144", /* IANA */
+ "CCSID01144", /* IANA */
+ "CP01144", /* IANA */
+ "EBCDIC-IT-280+EURO", /* IANA */
+ "csPC8CodePage1144", /* IANA */
+ ),
+ ebcdic1144,
+ { ebcdic1144_mbtowc, NULL }, { ebcdic1144_wctomb, NULL })
+
+DEFENCODING(( "IBM-1145",
+ "IBM1145",
+ "IBM01145", /* IANA */
+ "CCSID01145", /* IANA */
+ "CP01145", /* IANA */
+ "EBCDIC-ES-284+EURO", /* IANA */
+ "csIBM01145", /* IANA */
+ ),
+ ebcdic1145,
+ { ebcdic1145_mbtowc, NULL }, { ebcdic1145_wctomb, NULL })
+
+DEFENCODING(( "IBM-1146",
+ "IBM1146",
+ "IBM01146", /* IANA */
+ "CCSID01146", /* IANA */
+ "CP01146", /* IANA */
+ "EBCDIC-GB-285+EURO", /* IANA */
+ "csPC8CodePage1146", /* IANA */
+ ),
+ ebcdic1146,
+ { ebcdic1146_mbtowc, NULL }, { ebcdic1146_wctomb, NULL })
+
+DEFENCODING(( "IBM-1147",
+ "IBM1147",
+ "IBM01147", /* IANA */
+ "CCSID01147", /* IANA */
+ "CP01147", /* IANA */
+ "EBCDIC-FR-297+EURO", /* IANA */
+ "csIBM01147", /* IANA */
+ ),
+ ebcdic1147,
+ { ebcdic1147_mbtowc, NULL }, { ebcdic1147_wctomb, NULL })
+
+DEFENCODING(( "IBM-1148",
+ "IBM1148",
+ "IBM01148", /* IANA */
+ "CCSID01148", /* IANA */
+ "CP01148", /* IANA */
+ "EBCDIC-INTERNATIONAL-500+EURO", /* IANA */
+ "csIBM01148", /* IANA */
+ ),
+ ebcdic1148,
+ { ebcdic1148_mbtowc, NULL }, { ebcdic1148_wctomb, NULL })
+
+DEFENCODING(( "IBM-1149",
+ "IBM1149",
+ "IBM01149", /* IANA */
+ "CCSID01149", /* IANA */
+ "CP01149", /* IANA */
+ "EBCDIC-IS-871+EURO", /* IANA */
+ "csIBM01149", /* IANA */
+ ),
+ ebcdic1149,
+ { ebcdic1149_mbtowc, NULL }, { ebcdic1149_wctomb, NULL })
+
+DEFENCODING(( "IBM-1153",
+ "IBM1153", /* glibc */
+ "CP1153", /* glibc */
+ ),
+ ebcdic1153,
+ { ebcdic1153_mbtowc, NULL }, { ebcdic1153_wctomb, NULL })
+
+DEFENCODING(( "IBM-1154",
+ "IBM1154", /* glibc */
+ "CP1154", /* glibc */
+ ),
+ ebcdic1154,
+ { ebcdic1154_mbtowc, NULL }, { ebcdic1154_wctomb, NULL })
+
+DEFENCODING(( "IBM-1155",
+ "IBM1155", /* glibc */
+ "CP1155", /* glibc */
+ ),
+ ebcdic1155,
+ { ebcdic1155_mbtowc, NULL }, { ebcdic1155_wctomb, NULL })
+
+DEFENCODING(( "IBM-1156",
+ "IBM1156", /* glibc */
+ "CP1156", /* glibc */
+ ),
+ ebcdic1156,
+ { ebcdic1156_mbtowc, NULL }, { ebcdic1156_wctomb, NULL })
+
+DEFENCODING(( "IBM-1157",
+ "IBM1157", /* glibc */
+ "CP1157", /* glibc */
+ ),
+ ebcdic1157,
+ { ebcdic1157_mbtowc, NULL }, { ebcdic1157_wctomb, NULL })
+
+DEFENCODING(( "IBM-1158",
+ "IBM1158", /* glibc */
+ "CP1158", /* glibc */
+ ),
+ ebcdic1158,
+ { ebcdic1158_mbtowc, NULL }, { ebcdic1158_wctomb, NULL })
+
+DEFENCODING(( "IBM-1160",
+ "IBM1160", /* glibc */
+ "CP1160", /* glibc */
+ ),
+ ebcdic1160,
+ { ebcdic1160_mbtowc, NULL }, { ebcdic1160_wctomb, NULL })
+
+DEFENCODING(( "IBM-1164",
+ "IBM1164", /* glibc */
+ "CP1164", /* glibc */
+ ),
+ ebcdic1164,
+ { ebcdic1164_mbtowc, NULL }, { ebcdic1164_wctomb, NULL })
+
+DEFENCODING(( "IBM-1165",
+ "IBM1165",
+ ),
+ ebcdic1165,
+ { ebcdic1165_mbtowc, NULL }, { ebcdic1165_wctomb, NULL })
+
+DEFENCODING(( "IBM-1166",
+ "IBM1166", /* glibc */
+ "CP1166", /* glibc */
+ ),
+ ebcdic1166,
+ { ebcdic1166_mbtowc, NULL }, { ebcdic1166_wctomb, NULL })
+
+DEFENCODING(( "IBM-4971",
+ "IBM4971", /* glibc */
+ "CP4971", /* glibc */
+ ),
+ ebcdic4971,
+ { ebcdic4971_mbtowc, NULL }, { ebcdic4971_wctomb, NULL })
+
+DEFENCODING(( "IBM-12712",
+ "IBM12712", /* glibc */
+ "CP12712", /* glibc */
+ ),
+ ebcdic12712,
+ { ebcdic12712_mbtowc, NULL }, { ebcdic12712_wctomb, NULL })
+
+DEFENCODING(( "IBM-16804",
+ "IBM16804", /* glibc */
+ "CP16804", /* glibc */
+ ),
+ ebcdic16804,
+ { ebcdic16804_mbtowc, NULL }, { ebcdic16804_wctomb, NULL })
diff --git a/lib/genaliases2.c b/lib/genaliases2.c
index 8eb97df..51a951c 100644
--- a/lib/genaliases2.c
+++ b/lib/genaliases2.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1999-2003, 2005, 2008, 2012 Free Software Foundation, Inc.
+/* Copyright (C) 1999-2003, 2005, 2008, 2012, 2022 Free Software Foundation, Inc.
This file is part of the GNU LIBICONV Library.
The GNU LIBICONV Library is free software; you can redistribute it
@@ -93,6 +93,9 @@
#ifdef USE_DOS
#include "encodings_dos.def"
#endif
+#ifdef USE_ZOS
+#include "encodings_zos.def"
+#endif
#ifdef USE_EXTRA
#include "encodings_extra.def"
#endif
diff --git a/lib/genflags.c b/lib/genflags.c
index 7444eea..66732be 100644
--- a/lib/genflags.c
+++ b/lib/genflags.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000-2002, 2005-2006, 2008-2009, 2016 Free Software Foundation, Inc.
+/* Copyright (C) 2000-2002, 2005-2006, 2008-2009, 2016, 2022 Free Software Foundation, Inc.
This file is part of the GNU LIBICONV Library.
The GNU LIBICONV Library is free software; you can redistribute it
@@ -31,6 +31,7 @@
#define USE_AIX
#define USE_OSF1
#define USE_DOS
+#define USE_ZOS
#define USE_EXTRA
struct loop_funcs {};
@@ -109,6 +110,7 @@
#include "encodings_aix.def"
#include "encodings_osf1.def"
#include "encodings_dos.def"
+#include "encodings_zos.def"
#include "encodings_extra.def"
#undef DEFALIAS
#undef DEFENCODING
diff --git a/lib/iconv.c b/lib/iconv.c
index ae4e8ce..673457e 100644
--- a/lib/iconv.c
+++ b/lib/iconv.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 1999-2008, 2011, 2016, 2018, 2020 Free Software Foundation, Inc.
+ * Copyright (C) 1999-2008, 2011, 2016, 2018, 2020, 2022 Free Software Foundation, Inc.
* This file is part of the GNU LIBICONV Library.
*
* The GNU LIBICONV Library is free software; you can redistribute it
@@ -37,6 +37,7 @@
#define USE_AIX
#define USE_OSF1
#define USE_DOS
+#define USE_ZOS
#define USE_EXTRA
#else
/*
@@ -52,6 +53,11 @@
#if defined(__DJGPP__) || (defined(_WIN32) && (defined(_MSC_VER) || defined(__MINGW32__)))
#define USE_DOS
#endif
+/* Enable the EBCDIC encodings not only on z/OS but also on Linux/s390, for
+ easier interoperability between z/OS and Linux/s390. */
+#if defined(__MVS__) || (defined(__linux__) && (defined(__s390__) || defined(__s390x__)))
+#define USE_ZOS
+#endif
#endif
/*
@@ -98,6 +104,9 @@
#ifdef USE_DOS
# include "encodings_dos.def"
#endif
+#ifdef USE_ZOS
+# include "encodings_zos.def"
+#endif
#ifdef USE_EXTRA
# include "encodings_extra.def"
#endif
@@ -119,6 +128,9 @@
#ifdef USE_DOS
# include "encodings_dos.def"
#endif
+#ifdef USE_ZOS
+# include "encodings_zos.def"
+#endif
#ifdef USE_EXTRA
# include "encodings_extra.def"
#endif
@@ -159,7 +171,7 @@
* Defines
* const struct alias * aliases2_lookup (const char *str);
*/
-#if defined(USE_AIX) || defined(USE_OSF1) || defined(USE_DOS) || defined(USE_EXTRA) /* || ... */
+#if defined(USE_AIX) || defined(USE_OSF1) || defined(USE_DOS) || defined(USE_ZOS) || defined(USE_EXTRA) /* || ... */
struct stringpool2_t {
#define S(tag,name,encoding_index) char stringpool_##tag[sizeof(name)];
#include "aliases2.h"
@@ -472,6 +484,9 @@
#ifdef USE_DOS
# include "canonical_dos.h"
#endif
+#ifdef USE_ZOS
+# include "canonical_zos.h"
+#endif
#ifdef USE_EXTRA
# include "canonical_extra.h"
#endif
diff --git a/man/iconv_open.3 b/man/iconv_open.3
index b458c50..fb6316d 100644
--- a/man/iconv_open.3
+++ b/man/iconv_open.3
@@ -9,7 +9,7 @@
.\" GNU glibc-2 source code and manual
.\" OpenGroup's Single Unix specification http://www.UNIX-systems.org/online.html
.\"
-.TH ICONV_OPEN 3 "October 23, 2011" "GNU" "Linux Programmer's Manual"
+.TH ICONV_OPEN 3 "January 23, 2022" "GNU" "Linux Programmer's Manual"
.SH NAME
iconv_open \- allocate descriptor for character set conversion
.SH SYNOPSIS
@@ -169,6 +169,54 @@
.fi
ATARIST, RISCOS\-LATIN1
.PP
+.TP
+EBCDIC compatible (not ASCII compatible, very rarely used)
+.nf
+.fi
+European languages:
+.nf
+.fi
+ IBM-{037,273,277,278,280,282,284,285,297,423,500,870,871,875,880},
+ IBM-{905,924,1025,1026,1047,1112,1122,1123,1140,1141,1142,1143},
+ IBM-{1144,1145,1146,1147,1148,1149,1153,1154,1155,1156,1157,1158},
+ IBM-{1165,1166,4971}
+.nf
+.fi
+Semitic languages:
+.nf
+.fi
+ IBM-{424,425,12712,16804}
+.nf
+.fi
+Persian:
+.nf
+.fi
+ IBM-1097
+.nf
+.fi
+Thai:
+.nf
+.fi
+ IBM-{838,1160}
+.nf
+.fi
+Laotian:
+.nf
+.fi
+ IBM-1132
+.nf
+.fi
+Vietnamese:
+.nf
+.fi
+ IBM-{1130,1164}
+.nf
+.fi
+Indic languages:
+.nf
+.fi
+ IBM-1137
+.PP
The empty encoding name "" is equivalent to "char": it denotes the
locale dependent character encoding.
.PP
diff --git a/tests/IBM-037.TXT b/tests/IBM-037.TXT
new file mode 100644
index 0000000..bf34f2a
--- /dev/null
+++ b/tests/IBM-037.TXT
@@ -0,0 +1,256 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x00E2
+0x43 0x00E4
+0x44 0x00E0
+0x45 0x00E1
+0x46 0x00E3
+0x47 0x00E5
+0x48 0x00E7
+0x49 0x00F1
+0x4A 0x00A2
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x007C
+0x50 0x0026
+0x51 0x00E9
+0x52 0x00EA
+0x53 0x00EB
+0x54 0x00E8
+0x55 0x00ED
+0x56 0x00EE
+0x57 0x00EF
+0x58 0x00EC
+0x59 0x00DF
+0x5A 0x0021
+0x5B 0x0024
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x00AC
+0x60 0x002D
+0x61 0x002F
+0x62 0x00C2
+0x63 0x00C4
+0x64 0x00C0
+0x65 0x00C1
+0x66 0x00C3
+0x67 0x00C5
+0x68 0x00C7
+0x69 0x00D1
+0x6A 0x00A6
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0x00F8
+0x71 0x00C9
+0x72 0x00CA
+0x73 0x00CB
+0x74 0x00C8
+0x75 0x00CD
+0x76 0x00CE
+0x77 0x00CF
+0x78 0x00CC
+0x79 0x0060
+0x7A 0x003A
+0x7B 0x0023
+0x7C 0x0040
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x80 0x00D8
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x00AB
+0x8B 0x00BB
+0x8C 0x00F0
+0x8D 0x00FD
+0x8E 0x00FE
+0x8F 0x00B1
+0x90 0x00B0
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x00AA
+0x9B 0x00BA
+0x9C 0x00E6
+0x9D 0x00B8
+0x9E 0x00C6
+0x9F 0x00A4
+0xA0 0x00B5
+0xA1 0x007E
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x00A1
+0xAB 0x00BF
+0xAC 0x00D0
+0xAD 0x00DD
+0xAE 0x00DE
+0xAF 0x00AE
+0xB0 0x005E
+0xB1 0x00A3
+0xB2 0x00A5
+0xB3 0x00B7
+0xB4 0x00A9
+0xB5 0x00A7
+0xB6 0x00B6
+0xB7 0x00BC
+0xB8 0x00BD
+0xB9 0x00BE
+0xBA 0x005B
+0xBB 0x005D
+0xBC 0x00AF
+0xBD 0x00A8
+0xBE 0x00B4
+0xBF 0x00D7
+0xC0 0x007B
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x00AD
+0xCB 0x00F4
+0xCC 0x00F6
+0xCD 0x00F2
+0xCE 0x00F3
+0xCF 0x00F5
+0xD0 0x007D
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x00B9
+0xDB 0x00FB
+0xDC 0x00FC
+0xDD 0x00F9
+0xDE 0x00FA
+0xDF 0x00FF
+0xE0 0x005C
+0xE1 0x00F7
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x00B2
+0xEB 0x00D4
+0xEC 0x00D6
+0xED 0x00D2
+0xEE 0x00D3
+0xEF 0x00D5
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x00B3
+0xFB 0x00DB
+0xFC 0x00DC
+0xFD 0x00D9
+0xFE 0x00DA
+0xFF 0x009F
diff --git a/tests/IBM-1025.TXT b/tests/IBM-1025.TXT
new file mode 100644
index 0000000..be2a7e6
--- /dev/null
+++ b/tests/IBM-1025.TXT
@@ -0,0 +1,256 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x0452
+0x43 0x0453
+0x44 0x0451
+0x45 0x0454
+0x46 0x0455
+0x47 0x0456
+0x48 0x0457
+0x49 0x0458
+0x4A 0x005B
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x0021
+0x50 0x0026
+0x51 0x0459
+0x52 0x045A
+0x53 0x045B
+0x54 0x045C
+0x55 0x045E
+0x56 0x045F
+0x57 0x042A
+0x58 0x2116
+0x59 0x0402
+0x5A 0x005D
+0x5B 0x0024
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x005E
+0x60 0x002D
+0x61 0x002F
+0x62 0x0403
+0x63 0x0401
+0x64 0x0404
+0x65 0x0405
+0x66 0x0406
+0x67 0x0407
+0x68 0x0408
+0x69 0x0409
+0x6A 0x007C
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0x040A
+0x71 0x040B
+0x72 0x040C
+0x73 0x00AD
+0x74 0x040E
+0x75 0x040F
+0x76 0x044E
+0x77 0x0430
+0x78 0x0431
+0x79 0x0060
+0x7A 0x003A
+0x7B 0x0023
+0x7C 0x0040
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x80 0x0446
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x0434
+0x8B 0x0435
+0x8C 0x0444
+0x8D 0x0433
+0x8E 0x0445
+0x8F 0x0438
+0x90 0x0439
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x043A
+0x9B 0x043B
+0x9C 0x043C
+0x9D 0x043D
+0x9E 0x043E
+0x9F 0x043F
+0xA0 0x044F
+0xA1 0x007E
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x0440
+0xAB 0x0441
+0xAC 0x0442
+0xAD 0x0443
+0xAE 0x0436
+0xAF 0x0432
+0xB0 0x044C
+0xB1 0x044B
+0xB2 0x0437
+0xB3 0x0448
+0xB4 0x044D
+0xB5 0x0449
+0xB6 0x0447
+0xB7 0x044A
+0xB8 0x042E
+0xB9 0x0410
+0xBA 0x0411
+0xBB 0x0426
+0xBC 0x0414
+0xBD 0x0415
+0xBE 0x0424
+0xBF 0x0413
+0xC0 0x007B
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x0425
+0xCB 0x0418
+0xCC 0x0419
+0xCD 0x041A
+0xCE 0x041B
+0xCF 0x041C
+0xD0 0x007D
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x041D
+0xDB 0x041E
+0xDC 0x041F
+0xDD 0x042F
+0xDE 0x0420
+0xDF 0x0421
+0xE0 0x005C
+0xE1 0x00A7
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x0422
+0xEB 0x0423
+0xEC 0x0416
+0xED 0x0412
+0xEE 0x042C
+0xEF 0x042B
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x0417
+0xFB 0x0428
+0xFC 0x042D
+0xFD 0x0429
+0xFE 0x0427
+0xFF 0x009F
diff --git a/tests/IBM-1026.TXT b/tests/IBM-1026.TXT
new file mode 100644
index 0000000..9f48604
--- /dev/null
+++ b/tests/IBM-1026.TXT
@@ -0,0 +1,256 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x00E2
+0x43 0x00E4
+0x44 0x00E0
+0x45 0x00E1
+0x46 0x00E3
+0x47 0x00E5
+0x48 0x007B
+0x49 0x00F1
+0x4A 0x00C7
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x0021
+0x50 0x0026
+0x51 0x00E9
+0x52 0x00EA
+0x53 0x00EB
+0x54 0x00E8
+0x55 0x00ED
+0x56 0x00EE
+0x57 0x00EF
+0x58 0x00EC
+0x59 0x00DF
+0x5A 0x011E
+0x5B 0x0130
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x005E
+0x60 0x002D
+0x61 0x002F
+0x62 0x00C2
+0x63 0x00C4
+0x64 0x00C0
+0x65 0x00C1
+0x66 0x00C3
+0x67 0x00C5
+0x68 0x005B
+0x69 0x00D1
+0x6A 0x015F
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0x00F8
+0x71 0x00C9
+0x72 0x00CA
+0x73 0x00CB
+0x74 0x00C8
+0x75 0x00CD
+0x76 0x00CE
+0x77 0x00CF
+0x78 0x00CC
+0x79 0x0131
+0x7A 0x003A
+0x7B 0x00D6
+0x7C 0x015E
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x00DC
+0x80 0x00D8
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x00AB
+0x8B 0x00BB
+0x8C 0x007D
+0x8D 0x0060
+0x8E 0x00A6
+0x8F 0x00B1
+0x90 0x00B0
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x00AA
+0x9B 0x00BA
+0x9C 0x00E6
+0x9D 0x00B8
+0x9E 0x00C6
+0x9F 0x00A4
+0xA0 0x00B5
+0xA1 0x00F6
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x00A1
+0xAB 0x00BF
+0xAC 0x005D
+0xAD 0x0024
+0xAE 0x0040
+0xAF 0x00AE
+0xB0 0x00A2
+0xB1 0x00A3
+0xB2 0x00A5
+0xB3 0x00B7
+0xB4 0x00A9
+0xB5 0x00A7
+0xB6 0x00B6
+0xB7 0x00BC
+0xB8 0x00BD
+0xB9 0x00BE
+0xBA 0x00AC
+0xBB 0x007C
+0xBC 0x00AF
+0xBD 0x00A8
+0xBE 0x00B4
+0xBF 0x00D7
+0xC0 0x00E7
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x00AD
+0xCB 0x00F4
+0xCC 0x007E
+0xCD 0x00F2
+0xCE 0x00F3
+0xCF 0x00F5
+0xD0 0x011F
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x00B9
+0xDB 0x00FB
+0xDC 0x005C
+0xDD 0x00F9
+0xDE 0x00FA
+0xDF 0x00FF
+0xE0 0x00FC
+0xE1 0x00F7
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x00B2
+0xEB 0x00D4
+0xEC 0x0023
+0xED 0x00D2
+0xEE 0x00D3
+0xEF 0x00D5
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x00B3
+0xFB 0x00DB
+0xFC 0x0022
+0xFD 0x00D9
+0xFE 0x00DA
+0xFF 0x009F
diff --git a/tests/IBM-1047.TXT b/tests/IBM-1047.TXT
new file mode 100644
index 0000000..d6818cf
--- /dev/null
+++ b/tests/IBM-1047.TXT
@@ -0,0 +1,256 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x00E2
+0x43 0x00E4
+0x44 0x00E0
+0x45 0x00E1
+0x46 0x00E3
+0x47 0x00E5
+0x48 0x00E7
+0x49 0x00F1
+0x4A 0x00A2
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x007C
+0x50 0x0026
+0x51 0x00E9
+0x52 0x00EA
+0x53 0x00EB
+0x54 0x00E8
+0x55 0x00ED
+0x56 0x00EE
+0x57 0x00EF
+0x58 0x00EC
+0x59 0x00DF
+0x5A 0x0021
+0x5B 0x0024
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x005E
+0x60 0x002D
+0x61 0x002F
+0x62 0x00C2
+0x63 0x00C4
+0x64 0x00C0
+0x65 0x00C1
+0x66 0x00C3
+0x67 0x00C5
+0x68 0x00C7
+0x69 0x00D1
+0x6A 0x00A6
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0x00F8
+0x71 0x00C9
+0x72 0x00CA
+0x73 0x00CB
+0x74 0x00C8
+0x75 0x00CD
+0x76 0x00CE
+0x77 0x00CF
+0x78 0x00CC
+0x79 0x0060
+0x7A 0x003A
+0x7B 0x0023
+0x7C 0x0040
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x80 0x00D8
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x00AB
+0x8B 0x00BB
+0x8C 0x00F0
+0x8D 0x00FD
+0x8E 0x00FE
+0x8F 0x00B1
+0x90 0x00B0
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x00AA
+0x9B 0x00BA
+0x9C 0x00E6
+0x9D 0x00B8
+0x9E 0x00C6
+0x9F 0x00A4
+0xA0 0x00B5
+0xA1 0x007E
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x00A1
+0xAB 0x00BF
+0xAC 0x00D0
+0xAD 0x005B
+0xAE 0x00DE
+0xAF 0x00AE
+0xB0 0x00AC
+0xB1 0x00A3
+0xB2 0x00A5
+0xB3 0x00B7
+0xB4 0x00A9
+0xB5 0x00A7
+0xB6 0x00B6
+0xB7 0x00BC
+0xB8 0x00BD
+0xB9 0x00BE
+0xBA 0x00DD
+0xBB 0x00A8
+0xBC 0x00AF
+0xBD 0x005D
+0xBE 0x00B4
+0xBF 0x00D7
+0xC0 0x007B
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x00AD
+0xCB 0x00F4
+0xCC 0x00F6
+0xCD 0x00F2
+0xCE 0x00F3
+0xCF 0x00F5
+0xD0 0x007D
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x00B9
+0xDB 0x00FB
+0xDC 0x00FC
+0xDD 0x00F9
+0xDE 0x00FA
+0xDF 0x00FF
+0xE0 0x005C
+0xE1 0x00F7
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x00B2
+0xEB 0x00D4
+0xEC 0x00D6
+0xED 0x00D2
+0xEE 0x00D3
+0xEF 0x00D5
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x00B3
+0xFB 0x00DB
+0xFC 0x00DC
+0xFD 0x00D9
+0xFE 0x00DA
+0xFF 0x009F
diff --git a/tests/IBM-1097.TXT b/tests/IBM-1097.TXT
new file mode 100644
index 0000000..b67a074
--- /dev/null
+++ b/tests/IBM-1097.TXT
@@ -0,0 +1,256 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x060C
+0x43 0x064B
+0x44 0xFE81
+0x45 0xFE82
+0x46 0xF8FA
+0x47 0xFE8D
+0x48 0xFE8E
+0x49 0xF8FB
+0x4A 0x00A4
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x007C
+0x50 0x0026
+0x51 0xFE80
+0x52 0xFE83
+0x53 0xFE84
+0x54 0xF8F9
+0x55 0xFE85
+0x56 0xFE8B
+0x57 0xFE8F
+0x58 0xFE91
+0x59 0xFB56
+0x5A 0x0021
+0x5B 0x0024
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x00AC
+0x60 0x002D
+0x61 0x002F
+0x62 0xFB58
+0x63 0xFE95
+0x64 0xFE97
+0x65 0xFE99
+0x66 0xFE9B
+0x67 0xFE9D
+0x68 0xFE9F
+0x69 0xFB7A
+0x6A 0x061B
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0xFB7C
+0x71 0xFEA1
+0x72 0xFEA3
+0x73 0xFEA5
+0x74 0xFEA7
+0x75 0xFEA9
+0x76 0xFEAB
+0x77 0xFEAD
+0x78 0xFEAF
+0x79 0x0060
+0x7A 0x003A
+0x7B 0x0023
+0x7C 0x0040
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x80 0xFB8A
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x00AB
+0x8B 0x00BB
+0x8C 0xFEB1
+0x8D 0xFEB3
+0x8E 0xFEB5
+0x8F 0xFEB7
+0x90 0xFEB9
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0xFEBB
+0x9B 0xFEBD
+0x9C 0xFEBF
+0x9D 0xFEC1
+0x9E 0xFEC3
+0x9F 0xFEC5
+0xA0 0xFEC7
+0xA1 0x007E
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0xFEC9
+0xAB 0xFECA
+0xAC 0xFECB
+0xAD 0xFECC
+0xAE 0xFECD
+0xAF 0xFECE
+0xB0 0xFECF
+0xB1 0xFED0
+0xB2 0xFED1
+0xB3 0xFED3
+0xB4 0xFED5
+0xB5 0xFED7
+0xB6 0xFB8E
+0xB7 0xFEDB
+0xB8 0xFB92
+0xB9 0xFB94
+0xBA 0x005B
+0xBB 0x005D
+0xBC 0xFEDD
+0xBD 0xFEDF
+0xBE 0xFEE1
+0xBF 0x00D7
+0xC0 0x007B
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x00AD
+0xCB 0xFEE3
+0xCC 0xFEE5
+0xCD 0xFEE7
+0xCE 0xFEED
+0xCF 0xFEE9
+0xD0 0x007D
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0xFEEB
+0xDB 0xFEEC
+0xDC 0xFBA4
+0xDD 0xFBFC
+0xDE 0xFBFD
+0xDF 0xFBFE
+0xE0 0x005C
+0xE1 0x061F
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x0640
+0xEB 0x06F0
+0xEC 0x06F1
+0xED 0x06F2
+0xEE 0x06F3
+0xEF 0x06F4
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x06F5
+0xFB 0x06F6
+0xFC 0x06F7
+0xFD 0x06F8
+0xFE 0x06F9
+0xFF 0x009F
diff --git a/tests/IBM-1112.TXT b/tests/IBM-1112.TXT
new file mode 100644
index 0000000..e66d0be
--- /dev/null
+++ b/tests/IBM-1112.TXT
@@ -0,0 +1,256 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x0161
+0x43 0x00E4
+0x44 0x0105
+0x45 0x012F
+0x46 0x016B
+0x47 0x00E5
+0x48 0x0113
+0x49 0x017E
+0x4A 0x00A2
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x007C
+0x50 0x0026
+0x51 0x00E9
+0x52 0x0119
+0x53 0x0117
+0x54 0x010D
+0x55 0x0173
+0x56 0x201E
+0x57 0x201C
+0x58 0x0123
+0x59 0x00DF
+0x5A 0x0021
+0x5B 0x0024
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x00AC
+0x60 0x002D
+0x61 0x002F
+0x62 0x0160
+0x63 0x00C4
+0x64 0x0104
+0x65 0x012E
+0x66 0x016A
+0x67 0x00C5
+0x68 0x0112
+0x69 0x017D
+0x6A 0x00A6
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0x00F8
+0x71 0x00C9
+0x72 0x0118
+0x73 0x0116
+0x74 0x010C
+0x75 0x0172
+0x76 0x012A
+0x77 0x013B
+0x78 0x0122
+0x79 0x0060
+0x7A 0x003A
+0x7B 0x0023
+0x7C 0x0040
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x80 0x00D8
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x00AB
+0x8B 0x00BB
+0x8C 0x0101
+0x8D 0x017C
+0x8E 0x0144
+0x8F 0x00B1
+0x90 0x00B0
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x0156
+0x9B 0x0157
+0x9C 0x00E6
+0x9D 0x0137
+0x9E 0x00C6
+0x9F 0x00A4
+0xA0 0x00B5
+0xA1 0x007E
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x201D
+0xAB 0x017A
+0xAC 0x0100
+0xAD 0x017B
+0xAE 0x0143
+0xAF 0x00AE
+0xB0 0x005E
+0xB1 0x00A3
+0xB2 0x012B
+0xB3 0x00B7
+0xB4 0x00A9
+0xB5 0x00A7
+0xB6 0x00B6
+0xB7 0x00BC
+0xB8 0x00BD
+0xB9 0x00BE
+0xBA 0x005B
+0xBB 0x005D
+0xBC 0x0179
+0xBD 0x0136
+0xBE 0x013C
+0xBF 0x00D7
+0xC0 0x007B
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x00AD
+0xCB 0x014D
+0xCC 0x00F6
+0xCD 0x0146
+0xCE 0x00F3
+0xCF 0x00F5
+0xD0 0x007D
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x00B9
+0xDB 0x0107
+0xDC 0x00FC
+0xDD 0x0142
+0xDE 0x015B
+0xDF 0x2019
+0xE0 0x005C
+0xE1 0x00F7
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x00B2
+0xEB 0x014C
+0xEC 0x00D6
+0xED 0x0145
+0xEE 0x00D3
+0xEF 0x00D5
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x00B3
+0xFB 0x0106
+0xFC 0x00DC
+0xFD 0x0141
+0xFE 0x015A
+0xFF 0x009F
diff --git a/tests/IBM-1122.TXT b/tests/IBM-1122.TXT
new file mode 100644
index 0000000..7386558
--- /dev/null
+++ b/tests/IBM-1122.TXT
@@ -0,0 +1,256 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x00E2
+0x43 0x007B
+0x44 0x00E0
+0x45 0x00E1
+0x46 0x00E3
+0x47 0x007D
+0x48 0x00E7
+0x49 0x00F1
+0x4A 0x00A7
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x0021
+0x50 0x0026
+0x51 0x0060
+0x52 0x00EA
+0x53 0x00EB
+0x54 0x00E8
+0x55 0x00ED
+0x56 0x00EE
+0x57 0x00EF
+0x58 0x00EC
+0x59 0x00DF
+0x5A 0x00A4
+0x5B 0x00C5
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x005E
+0x60 0x002D
+0x61 0x002F
+0x62 0x00C2
+0x63 0x0023
+0x64 0x00C0
+0x65 0x00C1
+0x66 0x00C3
+0x67 0x0024
+0x68 0x00C7
+0x69 0x00D1
+0x6A 0x00F6
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0x00F8
+0x71 0x005C
+0x72 0x00CA
+0x73 0x00CB
+0x74 0x00C8
+0x75 0x00CD
+0x76 0x00CE
+0x77 0x00CF
+0x78 0x00CC
+0x79 0x00E9
+0x7A 0x003A
+0x7B 0x00C4
+0x7C 0x00D6
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x80 0x00D8
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x00AB
+0x8B 0x00BB
+0x8C 0x0161
+0x8D 0x00FD
+0x8E 0x017E
+0x8F 0x00B1
+0x90 0x00B0
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x00AA
+0x9B 0x00BA
+0x9C 0x00E6
+0x9D 0x00B8
+0x9E 0x00C6
+0x9F 0x005D
+0xA0 0x00B5
+0xA1 0x00FC
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x00A1
+0xAB 0x00BF
+0xAC 0x0160
+0xAD 0x00DD
+0xAE 0x017D
+0xAF 0x00AE
+0xB0 0x00A2
+0xB1 0x00A3
+0xB2 0x00A5
+0xB3 0x00B7
+0xB4 0x00A9
+0xB5 0x005B
+0xB6 0x00B6
+0xB7 0x00BC
+0xB8 0x00BD
+0xB9 0x00BE
+0xBA 0x00AC
+0xBB 0x007C
+0xBC 0x00AF
+0xBD 0x00A8
+0xBE 0x00B4
+0xBF 0x00D7
+0xC0 0x00E4
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x00AD
+0xCB 0x00F4
+0xCC 0x00A6
+0xCD 0x00F2
+0xCE 0x00F3
+0xCF 0x00F5
+0xD0 0x00E5
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x00B9
+0xDB 0x00FB
+0xDC 0x007E
+0xDD 0x00F9
+0xDE 0x00FA
+0xDF 0x00FF
+0xE0 0x00C9
+0xE1 0x00F7
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x00B2
+0xEB 0x00D4
+0xEC 0x0040
+0xED 0x00D2
+0xEE 0x00D3
+0xEF 0x00D5
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x00B3
+0xFB 0x00DB
+0xFC 0x00DC
+0xFD 0x00D9
+0xFE 0x00DA
+0xFF 0x009F
diff --git a/tests/IBM-1123.TXT b/tests/IBM-1123.TXT
new file mode 100644
index 0000000..3cad5e4
--- /dev/null
+++ b/tests/IBM-1123.TXT
@@ -0,0 +1,256 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x0452
+0x43 0x0491
+0x44 0x0451
+0x45 0x0454
+0x46 0x0455
+0x47 0x0456
+0x48 0x0457
+0x49 0x0458
+0x4A 0x005B
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x0021
+0x50 0x0026
+0x51 0x0459
+0x52 0x045A
+0x53 0x045B
+0x54 0x045C
+0x55 0x045E
+0x56 0x045F
+0x57 0x042A
+0x58 0x2116
+0x59 0x0402
+0x5A 0x005D
+0x5B 0x0024
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x005E
+0x60 0x002D
+0x61 0x002F
+0x62 0x0490
+0x63 0x0401
+0x64 0x0404
+0x65 0x0405
+0x66 0x0406
+0x67 0x0407
+0x68 0x0408
+0x69 0x0409
+0x6A 0x007C
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0x040A
+0x71 0x040B
+0x72 0x040C
+0x73 0x00AD
+0x74 0x040E
+0x75 0x040F
+0x76 0x044E
+0x77 0x0430
+0x78 0x0431
+0x79 0x0060
+0x7A 0x003A
+0x7B 0x0023
+0x7C 0x0040
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x80 0x0446
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x0434
+0x8B 0x0435
+0x8C 0x0444
+0x8D 0x0433
+0x8E 0x0445
+0x8F 0x0438
+0x90 0x0439
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x043A
+0x9B 0x043B
+0x9C 0x043C
+0x9D 0x043D
+0x9E 0x043E
+0x9F 0x043F
+0xA0 0x044F
+0xA1 0x007E
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x0440
+0xAB 0x0441
+0xAC 0x0442
+0xAD 0x0443
+0xAE 0x0436
+0xAF 0x0432
+0xB0 0x044C
+0xB1 0x044B
+0xB2 0x0437
+0xB3 0x0448
+0xB4 0x044D
+0xB5 0x0449
+0xB6 0x0447
+0xB7 0x044A
+0xB8 0x042E
+0xB9 0x0410
+0xBA 0x0411
+0xBB 0x0426
+0xBC 0x0414
+0xBD 0x0415
+0xBE 0x0424
+0xBF 0x0413
+0xC0 0x007B
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x0425
+0xCB 0x0418
+0xCC 0x0419
+0xCD 0x041A
+0xCE 0x041B
+0xCF 0x041C
+0xD0 0x007D
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x041D
+0xDB 0x041E
+0xDC 0x041F
+0xDD 0x042F
+0xDE 0x0420
+0xDF 0x0421
+0xE0 0x005C
+0xE1 0x00A7
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x0422
+0xEB 0x0423
+0xEC 0x0416
+0xED 0x0412
+0xEE 0x042C
+0xEF 0x042B
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x0417
+0xFB 0x0428
+0xFC 0x042D
+0xFD 0x0429
+0xFE 0x0427
+0xFF 0x009F
diff --git a/tests/IBM-1130.TXT b/tests/IBM-1130.TXT
new file mode 100644
index 0000000..104d5c9
--- /dev/null
+++ b/tests/IBM-1130.TXT
@@ -0,0 +1,256 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x00E2
+0x43 0x00E4
+0x44 0x00E0
+0x45 0x00E1
+0x46 0x0103
+0x47 0x00E5
+0x48 0x00E7
+0x49 0x00F1
+0x4A 0x005B
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x0021
+0x50 0x0026
+0x51 0x00E9
+0x52 0x00EA
+0x53 0x00EB
+0x54 0x00E8
+0x55 0x00ED
+0x56 0x00EE
+0x57 0x00EF
+0x58 0x0303
+0x59 0x00DF
+0x5A 0x005D
+0x5B 0x0024
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x005E
+0x60 0x002D
+0x61 0x002F
+0x62 0x00C2
+0x63 0x00C4
+0x64 0x00C0
+0x65 0x00C1
+0x66 0x0102
+0x67 0x00C5
+0x68 0x00C7
+0x69 0x00D1
+0x6A 0x00A6
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0x00F8
+0x71 0x00C9
+0x72 0x00CA
+0x73 0x00CB
+0x74 0x00C8
+0x75 0x00CD
+0x76 0x00CE
+0x77 0x00CF
+0x78 0x20AB
+0x79 0x0060
+0x7A 0x003A
+0x7B 0x0023
+0x7C 0x0040
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x80 0x00D8
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x00AB
+0x8B 0x00BB
+0x8C 0x0111
+0x8D 0x0309
+0x8E 0x0300
+0x8F 0x00B1
+0x90 0x00B0
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x00AA
+0x9B 0x00BA
+0x9C 0x00E6
+0x9D 0x0152
+0x9E 0x00C6
+0x9F 0x00A4
+0xA0 0x00B5
+0xA1 0x007E
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x00A1
+0xAB 0x00BF
+0xAC 0x0110
+0xAD 0x0323
+0xAE 0x0301
+0xAF 0x00AE
+0xB0 0x00A2
+0xB1 0x00A3
+0xB2 0x00A5
+0xB3 0x00B7
+0xB4 0x00A9
+0xB5 0x00A7
+0xB6 0x00B6
+0xB7 0x00BC
+0xB8 0x00BD
+0xB9 0x00BE
+0xBA 0x00AC
+0xBB 0x007C
+0xBC 0x00AF
+0xBD 0x0153
+0xBE 0x0178
+0xBF 0x00D7
+0xC0 0x007B
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x00AD
+0xCB 0x00F4
+0xCC 0x00F6
+0xCD 0x01B0
+0xCE 0x00F3
+0xCF 0x01A1
+0xD0 0x007D
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x00B9
+0xDB 0x00FB
+0xDC 0x00FC
+0xDD 0x00F9
+0xDE 0x00FA
+0xDF 0x00FF
+0xE0 0x005C
+0xE1 0x00F7
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x00B2
+0xEB 0x00D4
+0xEC 0x00D6
+0xED 0x01AF
+0xEE 0x00D3
+0xEF 0x01A0
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x00B3
+0xFB 0x00DB
+0xFC 0x00DC
+0xFD 0x00D9
+0xFE 0x00DA
+0xFF 0x009F
diff --git a/tests/IBM-1132.TXT b/tests/IBM-1132.TXT
new file mode 100644
index 0000000..425fcd4
--- /dev/null
+++ b/tests/IBM-1132.TXT
@@ -0,0 +1,230 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x0E81
+0x43 0x0E82
+0x44 0x0E84
+0x45 0x0E87
+0x46 0x0E88
+0x47 0x0EAA
+0x48 0x0E8A
+0x49 0x005B
+0x4A 0x00A2
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x007C
+0x50 0x0026
+0x52 0x0E8D
+0x53 0x0E94
+0x54 0x0E95
+0x55 0x0E96
+0x56 0x0E97
+0x57 0x0E99
+0x58 0x0E9A
+0x59 0x005D
+0x5A 0x0021
+0x5B 0x0024
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x00AC
+0x60 0x002D
+0x61 0x002F
+0x62 0x0E9B
+0x63 0x0E9C
+0x64 0x0E9D
+0x65 0x0E9E
+0x66 0x0E9F
+0x67 0x0EA1
+0x68 0x0EA2
+0x69 0x005E
+0x6A 0x00A6
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0x20AD
+0x72 0x0EA3
+0x73 0x0EA5
+0x74 0x0EA7
+0x75 0x0EAB
+0x76 0x0EAD
+0x77 0x0EAE
+0x79 0x0060
+0x7A 0x003A
+0x7B 0x0023
+0x7C 0x0040
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8C 0x0EAF
+0x8D 0x0EB0
+0x8E 0x0EB2
+0x8F 0x0EB3
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x0EB4
+0x9B 0x0EB5
+0x9C 0x0EB6
+0x9D 0x0EB7
+0x9E 0x0EB8
+0x9F 0x0EB9
+0xA1 0x007E
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x0EBC
+0xAB 0x0EB1
+0xAC 0x0EBB
+0xAD 0x0EBD
+0xB0 0x0ED0
+0xB1 0x0ED1
+0xB2 0x0ED2
+0xB3 0x0ED3
+0xB4 0x0ED4
+0xB5 0x0ED5
+0xB6 0x0ED6
+0xB7 0x0ED7
+0xB8 0x0ED8
+0xB9 0x0ED9
+0xBB 0x0EC0
+0xBC 0x0EC1
+0xBD 0x0EC2
+0xBE 0x0EC3
+0xBF 0x0EC4
+0xC0 0x007B
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCB 0x0EC8
+0xCC 0x0EC9
+0xCD 0x0ECA
+0xCE 0x0ECB
+0xCF 0x0ECC
+0xD0 0x007D
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x0ECD
+0xDB 0x0EC6
+0xDD 0x0EDC
+0xDE 0x0EDD
+0xE0 0x005C
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFF 0x009F
diff --git a/tests/IBM-1137.TXT b/tests/IBM-1137.TXT
new file mode 100644
index 0000000..99126cd
--- /dev/null
+++ b/tests/IBM-1137.TXT
@@ -0,0 +1,254 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x0901
+0x43 0x0902
+0x44 0x0903
+0x45 0x0905
+0x46 0x0906
+0x47 0x0907
+0x48 0x0908
+0x49 0x0909
+0x4A 0x090A
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x007C
+0x50 0x0026
+0x51 0x090B
+0x52 0x090C
+0x53 0x090D
+0x54 0x090E
+0x55 0x090F
+0x56 0x0910
+0x57 0x0911
+0x58 0x0912
+0x59 0x0913
+0x5A 0x0021
+0x5B 0x0024
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x005E
+0x60 0x002D
+0x61 0x002F
+0x62 0x0914
+0x63 0x0915
+0x64 0x0916
+0x65 0x0917
+0x66 0x0918
+0x67 0x0919
+0x68 0x091A
+0x69 0x091B
+0x6A 0x091C
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0x091D
+0x71 0x091E
+0x72 0x091F
+0x73 0x0920
+0x74 0x0921
+0x75 0x0922
+0x76 0x0923
+0x77 0x0924
+0x78 0x0925
+0x79 0x0060
+0x7A 0x003A
+0x7B 0x0023
+0x7C 0x0040
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x80 0x0926
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x0927
+0x8B 0x0928
+0x8C 0x092A
+0x8D 0x092B
+0x8E 0x092C
+0x8F 0x092D
+0x90 0x092E
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x092F
+0x9B 0x0930
+0x9C 0x0932
+0x9D 0x0933
+0x9E 0x0935
+0x9F 0x0936
+0xA0 0x200C
+0xA1 0x007E
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x0937
+0xAB 0x0938
+0xAC 0x0939
+0xAD 0x005B
+0xAE 0x093C
+0xAF 0x093D
+0xB0 0x093E
+0xB1 0x093F
+0xB2 0x0940
+0xB3 0x0941
+0xB4 0x0942
+0xB5 0x0943
+0xB6 0x0944
+0xB7 0x0945
+0xB8 0x0946
+0xB9 0x0947
+0xBA 0x0948
+0xBB 0x0949
+0xBC 0x094A
+0xBD 0x005D
+0xBE 0x094B
+0xBF 0x094C
+0xC0 0x007B
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x094D
+0xCB 0x0950
+0xCC 0x0951
+0xCD 0x0952
+0xD0 0x007D
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x0960
+0xDB 0x0961
+0xDC 0x0962
+0xDD 0x0963
+0xDE 0x0964
+0xDF 0x0965
+0xE0 0x005C
+0xE1 0x200D
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x0966
+0xEB 0x0967
+0xEC 0x0968
+0xED 0x0969
+0xEE 0x096A
+0xEF 0x096B
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x096C
+0xFB 0x096D
+0xFC 0x096E
+0xFD 0x096F
+0xFE 0x0970
+0xFF 0x009F
diff --git a/tests/IBM-1140.TXT b/tests/IBM-1140.TXT
new file mode 100644
index 0000000..d38cbe4
--- /dev/null
+++ b/tests/IBM-1140.TXT
@@ -0,0 +1,256 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x00E2
+0x43 0x00E4
+0x44 0x00E0
+0x45 0x00E1
+0x46 0x00E3
+0x47 0x00E5
+0x48 0x00E7
+0x49 0x00F1
+0x4A 0x00A2
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x007C
+0x50 0x0026
+0x51 0x00E9
+0x52 0x00EA
+0x53 0x00EB
+0x54 0x00E8
+0x55 0x00ED
+0x56 0x00EE
+0x57 0x00EF
+0x58 0x00EC
+0x59 0x00DF
+0x5A 0x0021
+0x5B 0x0024
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x00AC
+0x60 0x002D
+0x61 0x002F
+0x62 0x00C2
+0x63 0x00C4
+0x64 0x00C0
+0x65 0x00C1
+0x66 0x00C3
+0x67 0x00C5
+0x68 0x00C7
+0x69 0x00D1
+0x6A 0x00A6
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0x00F8
+0x71 0x00C9
+0x72 0x00CA
+0x73 0x00CB
+0x74 0x00C8
+0x75 0x00CD
+0x76 0x00CE
+0x77 0x00CF
+0x78 0x00CC
+0x79 0x0060
+0x7A 0x003A
+0x7B 0x0023
+0x7C 0x0040
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x80 0x00D8
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x00AB
+0x8B 0x00BB
+0x8C 0x00F0
+0x8D 0x00FD
+0x8E 0x00FE
+0x8F 0x00B1
+0x90 0x00B0
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x00AA
+0x9B 0x00BA
+0x9C 0x00E6
+0x9D 0x00B8
+0x9E 0x00C6
+0x9F 0x20AC
+0xA0 0x00B5
+0xA1 0x007E
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x00A1
+0xAB 0x00BF
+0xAC 0x00D0
+0xAD 0x00DD
+0xAE 0x00DE
+0xAF 0x00AE
+0xB0 0x005E
+0xB1 0x00A3
+0xB2 0x00A5
+0xB3 0x00B7
+0xB4 0x00A9
+0xB5 0x00A7
+0xB6 0x00B6
+0xB7 0x00BC
+0xB8 0x00BD
+0xB9 0x00BE
+0xBA 0x005B
+0xBB 0x005D
+0xBC 0x00AF
+0xBD 0x00A8
+0xBE 0x00B4
+0xBF 0x00D7
+0xC0 0x007B
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x00AD
+0xCB 0x00F4
+0xCC 0x00F6
+0xCD 0x00F2
+0xCE 0x00F3
+0xCF 0x00F5
+0xD0 0x007D
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x00B9
+0xDB 0x00FB
+0xDC 0x00FC
+0xDD 0x00F9
+0xDE 0x00FA
+0xDF 0x00FF
+0xE0 0x005C
+0xE1 0x00F7
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x00B2
+0xEB 0x00D4
+0xEC 0x00D6
+0xED 0x00D2
+0xEE 0x00D3
+0xEF 0x00D5
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x00B3
+0xFB 0x00DB
+0xFC 0x00DC
+0xFD 0x00D9
+0xFE 0x00DA
+0xFF 0x009F
diff --git a/tests/IBM-1141.TXT b/tests/IBM-1141.TXT
new file mode 100644
index 0000000..ed22b57
--- /dev/null
+++ b/tests/IBM-1141.TXT
@@ -0,0 +1,256 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x00E2
+0x43 0x007B
+0x44 0x00E0
+0x45 0x00E1
+0x46 0x00E3
+0x47 0x00E5
+0x48 0x00E7
+0x49 0x00F1
+0x4A 0x00C4
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x0021
+0x50 0x0026
+0x51 0x00E9
+0x52 0x00EA
+0x53 0x00EB
+0x54 0x00E8
+0x55 0x00ED
+0x56 0x00EE
+0x57 0x00EF
+0x58 0x00EC
+0x59 0x007E
+0x5A 0x00DC
+0x5B 0x0024
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x005E
+0x60 0x002D
+0x61 0x002F
+0x62 0x00C2
+0x63 0x005B
+0x64 0x00C0
+0x65 0x00C1
+0x66 0x00C3
+0x67 0x00C5
+0x68 0x00C7
+0x69 0x00D1
+0x6A 0x00F6
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0x00F8
+0x71 0x00C9
+0x72 0x00CA
+0x73 0x00CB
+0x74 0x00C8
+0x75 0x00CD
+0x76 0x00CE
+0x77 0x00CF
+0x78 0x00CC
+0x79 0x0060
+0x7A 0x003A
+0x7B 0x0023
+0x7C 0x00A7
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x80 0x00D8
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x00AB
+0x8B 0x00BB
+0x8C 0x00F0
+0x8D 0x00FD
+0x8E 0x00FE
+0x8F 0x00B1
+0x90 0x00B0
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x00AA
+0x9B 0x00BA
+0x9C 0x00E6
+0x9D 0x00B8
+0x9E 0x00C6
+0x9F 0x20AC
+0xA0 0x00B5
+0xA1 0x00DF
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x00A1
+0xAB 0x00BF
+0xAC 0x00D0
+0xAD 0x00DD
+0xAE 0x00DE
+0xAF 0x00AE
+0xB0 0x00A2
+0xB1 0x00A3
+0xB2 0x00A5
+0xB3 0x00B7
+0xB4 0x00A9
+0xB5 0x0040
+0xB6 0x00B6
+0xB7 0x00BC
+0xB8 0x00BD
+0xB9 0x00BE
+0xBA 0x00AC
+0xBB 0x007C
+0xBC 0x00AF
+0xBD 0x00A8
+0xBE 0x00B4
+0xBF 0x00D7
+0xC0 0x00E4
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x00AD
+0xCB 0x00F4
+0xCC 0x00A6
+0xCD 0x00F2
+0xCE 0x00F3
+0xCF 0x00F5
+0xD0 0x00FC
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x00B9
+0xDB 0x00FB
+0xDC 0x007D
+0xDD 0x00F9
+0xDE 0x00FA
+0xDF 0x00FF
+0xE0 0x00D6
+0xE1 0x00F7
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x00B2
+0xEB 0x00D4
+0xEC 0x005C
+0xED 0x00D2
+0xEE 0x00D3
+0xEF 0x00D5
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x00B3
+0xFB 0x00DB
+0xFC 0x005D
+0xFD 0x00D9
+0xFE 0x00DA
+0xFF 0x009F
diff --git a/tests/IBM-1142.TXT b/tests/IBM-1142.TXT
new file mode 100644
index 0000000..15de29c
--- /dev/null
+++ b/tests/IBM-1142.TXT
@@ -0,0 +1,256 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x00E2
+0x43 0x00E4
+0x44 0x00E0
+0x45 0x00E1
+0x46 0x00E3
+0x47 0x007D
+0x48 0x00E7
+0x49 0x00F1
+0x4A 0x0023
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x0021
+0x50 0x0026
+0x51 0x00E9
+0x52 0x00EA
+0x53 0x00EB
+0x54 0x00E8
+0x55 0x00ED
+0x56 0x00EE
+0x57 0x00EF
+0x58 0x00EC
+0x59 0x00DF
+0x5A 0x20AC
+0x5B 0x00C5
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x005E
+0x60 0x002D
+0x61 0x002F
+0x62 0x00C2
+0x63 0x00C4
+0x64 0x00C0
+0x65 0x00C1
+0x66 0x00C3
+0x67 0x0024
+0x68 0x00C7
+0x69 0x00D1
+0x6A 0x00F8
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0x00A6
+0x71 0x00C9
+0x72 0x00CA
+0x73 0x00CB
+0x74 0x00C8
+0x75 0x00CD
+0x76 0x00CE
+0x77 0x00CF
+0x78 0x00CC
+0x79 0x0060
+0x7A 0x003A
+0x7B 0x00C6
+0x7C 0x00D8
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x80 0x0040
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x00AB
+0x8B 0x00BB
+0x8C 0x00F0
+0x8D 0x00FD
+0x8E 0x00FE
+0x8F 0x00B1
+0x90 0x00B0
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x00AA
+0x9B 0x00BA
+0x9C 0x007B
+0x9D 0x00B8
+0x9E 0x005B
+0x9F 0x005D
+0xA0 0x00B5
+0xA1 0x00FC
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x00A1
+0xAB 0x00BF
+0xAC 0x00D0
+0xAD 0x00DD
+0xAE 0x00DE
+0xAF 0x00AE
+0xB0 0x00A2
+0xB1 0x00A3
+0xB2 0x00A5
+0xB3 0x00B7
+0xB4 0x00A9
+0xB5 0x00A7
+0xB6 0x00B6
+0xB7 0x00BC
+0xB8 0x00BD
+0xB9 0x00BE
+0xBA 0x00AC
+0xBB 0x007C
+0xBC 0x00AF
+0xBD 0x00A8
+0xBE 0x00B4
+0xBF 0x00D7
+0xC0 0x00E6
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x00AD
+0xCB 0x00F4
+0xCC 0x00F6
+0xCD 0x00F2
+0xCE 0x00F3
+0xCF 0x00F5
+0xD0 0x00E5
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x00B9
+0xDB 0x00FB
+0xDC 0x007E
+0xDD 0x00F9
+0xDE 0x00FA
+0xDF 0x00FF
+0xE0 0x005C
+0xE1 0x00F7
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x00B2
+0xEB 0x00D4
+0xEC 0x00D6
+0xED 0x00D2
+0xEE 0x00D3
+0xEF 0x00D5
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x00B3
+0xFB 0x00DB
+0xFC 0x00DC
+0xFD 0x00D9
+0xFE 0x00DA
+0xFF 0x009F
diff --git a/tests/IBM-1143.TXT b/tests/IBM-1143.TXT
new file mode 100644
index 0000000..db52662
--- /dev/null
+++ b/tests/IBM-1143.TXT
@@ -0,0 +1,256 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x00E2
+0x43 0x007B
+0x44 0x00E0
+0x45 0x00E1
+0x46 0x00E3
+0x47 0x007D
+0x48 0x00E7
+0x49 0x00F1
+0x4A 0x00A7
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x0021
+0x50 0x0026
+0x51 0x0060
+0x52 0x00EA
+0x53 0x00EB
+0x54 0x00E8
+0x55 0x00ED
+0x56 0x00EE
+0x57 0x00EF
+0x58 0x00EC
+0x59 0x00DF
+0x5A 0x20AC
+0x5B 0x00C5
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x005E
+0x60 0x002D
+0x61 0x002F
+0x62 0x00C2
+0x63 0x0023
+0x64 0x00C0
+0x65 0x00C1
+0x66 0x00C3
+0x67 0x0024
+0x68 0x00C7
+0x69 0x00D1
+0x6A 0x00F6
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0x00F8
+0x71 0x005C
+0x72 0x00CA
+0x73 0x00CB
+0x74 0x00C8
+0x75 0x00CD
+0x76 0x00CE
+0x77 0x00CF
+0x78 0x00CC
+0x79 0x00E9
+0x7A 0x003A
+0x7B 0x00C4
+0x7C 0x00D6
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x80 0x00D8
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x00AB
+0x8B 0x00BB
+0x8C 0x00F0
+0x8D 0x00FD
+0x8E 0x00FE
+0x8F 0x00B1
+0x90 0x00B0
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x00AA
+0x9B 0x00BA
+0x9C 0x00E6
+0x9D 0x00B8
+0x9E 0x00C6
+0x9F 0x005D
+0xA0 0x00B5
+0xA1 0x00FC
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x00A1
+0xAB 0x00BF
+0xAC 0x00D0
+0xAD 0x00DD
+0xAE 0x00DE
+0xAF 0x00AE
+0xB0 0x00A2
+0xB1 0x00A3
+0xB2 0x00A5
+0xB3 0x00B7
+0xB4 0x00A9
+0xB5 0x005B
+0xB6 0x00B6
+0xB7 0x00BC
+0xB8 0x00BD
+0xB9 0x00BE
+0xBA 0x00AC
+0xBB 0x007C
+0xBC 0x00AF
+0xBD 0x00A8
+0xBE 0x00B4
+0xBF 0x00D7
+0xC0 0x00E4
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x00AD
+0xCB 0x00F4
+0xCC 0x00A6
+0xCD 0x00F2
+0xCE 0x00F3
+0xCF 0x00F5
+0xD0 0x00E5
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x00B9
+0xDB 0x00FB
+0xDC 0x007E
+0xDD 0x00F9
+0xDE 0x00FA
+0xDF 0x00FF
+0xE0 0x00C9
+0xE1 0x00F7
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x00B2
+0xEB 0x00D4
+0xEC 0x0040
+0xED 0x00D2
+0xEE 0x00D3
+0xEF 0x00D5
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x00B3
+0xFB 0x00DB
+0xFC 0x00DC
+0xFD 0x00D9
+0xFE 0x00DA
+0xFF 0x009F
diff --git a/tests/IBM-1144.TXT b/tests/IBM-1144.TXT
new file mode 100644
index 0000000..f199b92
--- /dev/null
+++ b/tests/IBM-1144.TXT
@@ -0,0 +1,256 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x00E2
+0x43 0x00E4
+0x44 0x007B
+0x45 0x00E1
+0x46 0x00E3
+0x47 0x00E5
+0x48 0x005C
+0x49 0x00F1
+0x4A 0x00B0
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x0021
+0x50 0x0026
+0x51 0x005D
+0x52 0x00EA
+0x53 0x00EB
+0x54 0x007D
+0x55 0x00ED
+0x56 0x00EE
+0x57 0x00EF
+0x58 0x007E
+0x59 0x00DF
+0x5A 0x00E9
+0x5B 0x0024
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x005E
+0x60 0x002D
+0x61 0x002F
+0x62 0x00C2
+0x63 0x00C4
+0x64 0x00C0
+0x65 0x00C1
+0x66 0x00C3
+0x67 0x00C5
+0x68 0x00C7
+0x69 0x00D1
+0x6A 0x00F2
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0x00F8
+0x71 0x00C9
+0x72 0x00CA
+0x73 0x00CB
+0x74 0x00C8
+0x75 0x00CD
+0x76 0x00CE
+0x77 0x00CF
+0x78 0x00CC
+0x79 0x00F9
+0x7A 0x003A
+0x7B 0x00A3
+0x7C 0x00A7
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x80 0x00D8
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x00AB
+0x8B 0x00BB
+0x8C 0x00F0
+0x8D 0x00FD
+0x8E 0x00FE
+0x8F 0x00B1
+0x90 0x005B
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x00AA
+0x9B 0x00BA
+0x9C 0x00E6
+0x9D 0x00B8
+0x9E 0x00C6
+0x9F 0x20AC
+0xA0 0x00B5
+0xA1 0x00EC
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x00A1
+0xAB 0x00BF
+0xAC 0x00D0
+0xAD 0x00DD
+0xAE 0x00DE
+0xAF 0x00AE
+0xB0 0x00A2
+0xB1 0x0023
+0xB2 0x00A5
+0xB3 0x00B7
+0xB4 0x00A9
+0xB5 0x0040
+0xB6 0x00B6
+0xB7 0x00BC
+0xB8 0x00BD
+0xB9 0x00BE
+0xBA 0x00AC
+0xBB 0x007C
+0xBC 0x00AF
+0xBD 0x00A8
+0xBE 0x00B4
+0xBF 0x00D7
+0xC0 0x00E0
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x00AD
+0xCB 0x00F4
+0xCC 0x00F6
+0xCD 0x00A6
+0xCE 0x00F3
+0xCF 0x00F5
+0xD0 0x00E8
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x00B9
+0xDB 0x00FB
+0xDC 0x00FC
+0xDD 0x0060
+0xDE 0x00FA
+0xDF 0x00FF
+0xE0 0x00E7
+0xE1 0x00F7
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x00B2
+0xEB 0x00D4
+0xEC 0x00D6
+0xED 0x00D2
+0xEE 0x00D3
+0xEF 0x00D5
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x00B3
+0xFB 0x00DB
+0xFC 0x00DC
+0xFD 0x00D9
+0xFE 0x00DA
+0xFF 0x009F
diff --git a/tests/IBM-1145.TXT b/tests/IBM-1145.TXT
new file mode 100644
index 0000000..0ea8e87
--- /dev/null
+++ b/tests/IBM-1145.TXT
@@ -0,0 +1,256 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x00E2
+0x43 0x00E4
+0x44 0x00E0
+0x45 0x00E1
+0x46 0x00E3
+0x47 0x00E5
+0x48 0x00E7
+0x49 0x00A6
+0x4A 0x005B
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x007C
+0x50 0x0026
+0x51 0x00E9
+0x52 0x00EA
+0x53 0x00EB
+0x54 0x00E8
+0x55 0x00ED
+0x56 0x00EE
+0x57 0x00EF
+0x58 0x00EC
+0x59 0x00DF
+0x5A 0x005D
+0x5B 0x0024
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x00AC
+0x60 0x002D
+0x61 0x002F
+0x62 0x00C2
+0x63 0x00C4
+0x64 0x00C0
+0x65 0x00C1
+0x66 0x00C3
+0x67 0x00C5
+0x68 0x00C7
+0x69 0x0023
+0x6A 0x00F1
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0x00F8
+0x71 0x00C9
+0x72 0x00CA
+0x73 0x00CB
+0x74 0x00C8
+0x75 0x00CD
+0x76 0x00CE
+0x77 0x00CF
+0x78 0x00CC
+0x79 0x0060
+0x7A 0x003A
+0x7B 0x00D1
+0x7C 0x0040
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x80 0x00D8
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x00AB
+0x8B 0x00BB
+0x8C 0x00F0
+0x8D 0x00FD
+0x8E 0x00FE
+0x8F 0x00B1
+0x90 0x00B0
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x00AA
+0x9B 0x00BA
+0x9C 0x00E6
+0x9D 0x00B8
+0x9E 0x00C6
+0x9F 0x20AC
+0xA0 0x00B5
+0xA1 0x00A8
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x00A1
+0xAB 0x00BF
+0xAC 0x00D0
+0xAD 0x00DD
+0xAE 0x00DE
+0xAF 0x00AE
+0xB0 0x00A2
+0xB1 0x00A3
+0xB2 0x00A5
+0xB3 0x00B7
+0xB4 0x00A9
+0xB5 0x00A7
+0xB6 0x00B6
+0xB7 0x00BC
+0xB8 0x00BD
+0xB9 0x00BE
+0xBA 0x005E
+0xBB 0x0021
+0xBC 0x00AF
+0xBD 0x007E
+0xBE 0x00B4
+0xBF 0x00D7
+0xC0 0x007B
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x00AD
+0xCB 0x00F4
+0xCC 0x00F6
+0xCD 0x00F2
+0xCE 0x00F3
+0xCF 0x00F5
+0xD0 0x007D
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x00B9
+0xDB 0x00FB
+0xDC 0x00FC
+0xDD 0x00F9
+0xDE 0x00FA
+0xDF 0x00FF
+0xE0 0x005C
+0xE1 0x00F7
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x00B2
+0xEB 0x00D4
+0xEC 0x00D6
+0xED 0x00D2
+0xEE 0x00D3
+0xEF 0x00D5
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x00B3
+0xFB 0x00DB
+0xFC 0x00DC
+0xFD 0x00D9
+0xFE 0x00DA
+0xFF 0x009F
diff --git a/tests/IBM-1146.TXT b/tests/IBM-1146.TXT
new file mode 100644
index 0000000..242b53a
--- /dev/null
+++ b/tests/IBM-1146.TXT
@@ -0,0 +1,256 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x00E2
+0x43 0x00E4
+0x44 0x00E0
+0x45 0x00E1
+0x46 0x00E3
+0x47 0x00E5
+0x48 0x00E7
+0x49 0x00F1
+0x4A 0x0024
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x007C
+0x50 0x0026
+0x51 0x00E9
+0x52 0x00EA
+0x53 0x00EB
+0x54 0x00E8
+0x55 0x00ED
+0x56 0x00EE
+0x57 0x00EF
+0x58 0x00EC
+0x59 0x00DF
+0x5A 0x0021
+0x5B 0x00A3
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x00AC
+0x60 0x002D
+0x61 0x002F
+0x62 0x00C2
+0x63 0x00C4
+0x64 0x00C0
+0x65 0x00C1
+0x66 0x00C3
+0x67 0x00C5
+0x68 0x00C7
+0x69 0x00D1
+0x6A 0x00A6
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0x00F8
+0x71 0x00C9
+0x72 0x00CA
+0x73 0x00CB
+0x74 0x00C8
+0x75 0x00CD
+0x76 0x00CE
+0x77 0x00CF
+0x78 0x00CC
+0x79 0x0060
+0x7A 0x003A
+0x7B 0x0023
+0x7C 0x0040
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x80 0x00D8
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x00AB
+0x8B 0x00BB
+0x8C 0x00F0
+0x8D 0x00FD
+0x8E 0x00FE
+0x8F 0x00B1
+0x90 0x00B0
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x00AA
+0x9B 0x00BA
+0x9C 0x00E6
+0x9D 0x00B8
+0x9E 0x00C6
+0x9F 0x20AC
+0xA0 0x00B5
+0xA1 0x00AF
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x00A1
+0xAB 0x00BF
+0xAC 0x00D0
+0xAD 0x00DD
+0xAE 0x00DE
+0xAF 0x00AE
+0xB0 0x00A2
+0xB1 0x005B
+0xB2 0x00A5
+0xB3 0x00B7
+0xB4 0x00A9
+0xB5 0x00A7
+0xB6 0x00B6
+0xB7 0x00BC
+0xB8 0x00BD
+0xB9 0x00BE
+0xBA 0x005E
+0xBB 0x005D
+0xBC 0x007E
+0xBD 0x00A8
+0xBE 0x00B4
+0xBF 0x00D7
+0xC0 0x007B
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x00AD
+0xCB 0x00F4
+0xCC 0x00F6
+0xCD 0x00F2
+0xCE 0x00F3
+0xCF 0x00F5
+0xD0 0x007D
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x00B9
+0xDB 0x00FB
+0xDC 0x00FC
+0xDD 0x00F9
+0xDE 0x00FA
+0xDF 0x00FF
+0xE0 0x005C
+0xE1 0x00F7
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x00B2
+0xEB 0x00D4
+0xEC 0x00D6
+0xED 0x00D2
+0xEE 0x00D3
+0xEF 0x00D5
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x00B3
+0xFB 0x00DB
+0xFC 0x00DC
+0xFD 0x00D9
+0xFE 0x00DA
+0xFF 0x009F
diff --git a/tests/IBM-1147.TXT b/tests/IBM-1147.TXT
new file mode 100644
index 0000000..6669c03
--- /dev/null
+++ b/tests/IBM-1147.TXT
@@ -0,0 +1,256 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x00E2
+0x43 0x00E4
+0x44 0x0040
+0x45 0x00E1
+0x46 0x00E3
+0x47 0x00E5
+0x48 0x005C
+0x49 0x00F1
+0x4A 0x00B0
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x0021
+0x50 0x0026
+0x51 0x007B
+0x52 0x00EA
+0x53 0x00EB
+0x54 0x007D
+0x55 0x00ED
+0x56 0x00EE
+0x57 0x00EF
+0x58 0x00EC
+0x59 0x00DF
+0x5A 0x00A7
+0x5B 0x0024
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x005E
+0x60 0x002D
+0x61 0x002F
+0x62 0x00C2
+0x63 0x00C4
+0x64 0x00C0
+0x65 0x00C1
+0x66 0x00C3
+0x67 0x00C5
+0x68 0x00C7
+0x69 0x00D1
+0x6A 0x00F9
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0x00F8
+0x71 0x00C9
+0x72 0x00CA
+0x73 0x00CB
+0x74 0x00C8
+0x75 0x00CD
+0x76 0x00CE
+0x77 0x00CF
+0x78 0x00CC
+0x79 0x00B5
+0x7A 0x003A
+0x7B 0x00A3
+0x7C 0x00E0
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x80 0x00D8
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x00AB
+0x8B 0x00BB
+0x8C 0x00F0
+0x8D 0x00FD
+0x8E 0x00FE
+0x8F 0x00B1
+0x90 0x005B
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x00AA
+0x9B 0x00BA
+0x9C 0x00E6
+0x9D 0x00B8
+0x9E 0x00C6
+0x9F 0x20AC
+0xA0 0x0060
+0xA1 0x00A8
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x00A1
+0xAB 0x00BF
+0xAC 0x00D0
+0xAD 0x00DD
+0xAE 0x00DE
+0xAF 0x00AE
+0xB0 0x00A2
+0xB1 0x0023
+0xB2 0x00A5
+0xB3 0x00B7
+0xB4 0x00A9
+0xB5 0x005D
+0xB6 0x00B6
+0xB7 0x00BC
+0xB8 0x00BD
+0xB9 0x00BE
+0xBA 0x00AC
+0xBB 0x007C
+0xBC 0x00AF
+0xBD 0x007E
+0xBE 0x00B4
+0xBF 0x00D7
+0xC0 0x00E9
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x00AD
+0xCB 0x00F4
+0xCC 0x00F6
+0xCD 0x00F2
+0xCE 0x00F3
+0xCF 0x00F5
+0xD0 0x00E8
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x00B9
+0xDB 0x00FB
+0xDC 0x00FC
+0xDD 0x00A6
+0xDE 0x00FA
+0xDF 0x00FF
+0xE0 0x00E7
+0xE1 0x00F7
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x00B2
+0xEB 0x00D4
+0xEC 0x00D6
+0xED 0x00D2
+0xEE 0x00D3
+0xEF 0x00D5
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x00B3
+0xFB 0x00DB
+0xFC 0x00DC
+0xFD 0x00D9
+0xFE 0x00DA
+0xFF 0x009F
diff --git a/tests/IBM-1148.TXT b/tests/IBM-1148.TXT
new file mode 100644
index 0000000..c25322a
--- /dev/null
+++ b/tests/IBM-1148.TXT
@@ -0,0 +1,256 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x00E2
+0x43 0x00E4
+0x44 0x00E0
+0x45 0x00E1
+0x46 0x00E3
+0x47 0x00E5
+0x48 0x00E7
+0x49 0x00F1
+0x4A 0x005B
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x0021
+0x50 0x0026
+0x51 0x00E9
+0x52 0x00EA
+0x53 0x00EB
+0x54 0x00E8
+0x55 0x00ED
+0x56 0x00EE
+0x57 0x00EF
+0x58 0x00EC
+0x59 0x00DF
+0x5A 0x005D
+0x5B 0x0024
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x005E
+0x60 0x002D
+0x61 0x002F
+0x62 0x00C2
+0x63 0x00C4
+0x64 0x00C0
+0x65 0x00C1
+0x66 0x00C3
+0x67 0x00C5
+0x68 0x00C7
+0x69 0x00D1
+0x6A 0x00A6
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0x00F8
+0x71 0x00C9
+0x72 0x00CA
+0x73 0x00CB
+0x74 0x00C8
+0x75 0x00CD
+0x76 0x00CE
+0x77 0x00CF
+0x78 0x00CC
+0x79 0x0060
+0x7A 0x003A
+0x7B 0x0023
+0x7C 0x0040
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x80 0x00D8
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x00AB
+0x8B 0x00BB
+0x8C 0x00F0
+0x8D 0x00FD
+0x8E 0x00FE
+0x8F 0x00B1
+0x90 0x00B0
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x00AA
+0x9B 0x00BA
+0x9C 0x00E6
+0x9D 0x00B8
+0x9E 0x00C6
+0x9F 0x20AC
+0xA0 0x00B5
+0xA1 0x007E
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x00A1
+0xAB 0x00BF
+0xAC 0x00D0
+0xAD 0x00DD
+0xAE 0x00DE
+0xAF 0x00AE
+0xB0 0x00A2
+0xB1 0x00A3
+0xB2 0x00A5
+0xB3 0x00B7
+0xB4 0x00A9
+0xB5 0x00A7
+0xB6 0x00B6
+0xB7 0x00BC
+0xB8 0x00BD
+0xB9 0x00BE
+0xBA 0x00AC
+0xBB 0x007C
+0xBC 0x00AF
+0xBD 0x00A8
+0xBE 0x00B4
+0xBF 0x00D7
+0xC0 0x007B
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x00AD
+0xCB 0x00F4
+0xCC 0x00F6
+0xCD 0x00F2
+0xCE 0x00F3
+0xCF 0x00F5
+0xD0 0x007D
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x00B9
+0xDB 0x00FB
+0xDC 0x00FC
+0xDD 0x00F9
+0xDE 0x00FA
+0xDF 0x00FF
+0xE0 0x005C
+0xE1 0x00F7
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x00B2
+0xEB 0x00D4
+0xEC 0x00D6
+0xED 0x00D2
+0xEE 0x00D3
+0xEF 0x00D5
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x00B3
+0xFB 0x00DB
+0xFC 0x00DC
+0xFD 0x00D9
+0xFE 0x00DA
+0xFF 0x009F
diff --git a/tests/IBM-1149.TXT b/tests/IBM-1149.TXT
new file mode 100644
index 0000000..ccaad96
--- /dev/null
+++ b/tests/IBM-1149.TXT
@@ -0,0 +1,256 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x00E2
+0x43 0x00E4
+0x44 0x00E0
+0x45 0x00E1
+0x46 0x00E3
+0x47 0x00E5
+0x48 0x00E7
+0x49 0x00F1
+0x4A 0x00DE
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x0021
+0x50 0x0026
+0x51 0x00E9
+0x52 0x00EA
+0x53 0x00EB
+0x54 0x00E8
+0x55 0x00ED
+0x56 0x00EE
+0x57 0x00EF
+0x58 0x00EC
+0x59 0x00DF
+0x5A 0x00C6
+0x5B 0x0024
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x00D6
+0x60 0x002D
+0x61 0x002F
+0x62 0x00C2
+0x63 0x00C4
+0x64 0x00C0
+0x65 0x00C1
+0x66 0x00C3
+0x67 0x00C5
+0x68 0x00C7
+0x69 0x00D1
+0x6A 0x00A6
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0x00F8
+0x71 0x00C9
+0x72 0x00CA
+0x73 0x00CB
+0x74 0x00C8
+0x75 0x00CD
+0x76 0x00CE
+0x77 0x00CF
+0x78 0x00CC
+0x79 0x00F0
+0x7A 0x003A
+0x7B 0x0023
+0x7C 0x00D0
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x80 0x00D8
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x00AB
+0x8B 0x00BB
+0x8C 0x0060
+0x8D 0x00FD
+0x8E 0x007B
+0x8F 0x00B1
+0x90 0x00B0
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x00AA
+0x9B 0x00BA
+0x9C 0x007D
+0x9D 0x00B8
+0x9E 0x005D
+0x9F 0x20AC
+0xA0 0x00B5
+0xA1 0x00F6
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x00A1
+0xAB 0x00BF
+0xAC 0x0040
+0xAD 0x00DD
+0xAE 0x005B
+0xAF 0x00AE
+0xB0 0x00A2
+0xB1 0x00A3
+0xB2 0x00A5
+0xB3 0x00B7
+0xB4 0x00A9
+0xB5 0x00A7
+0xB6 0x00B6
+0xB7 0x00BC
+0xB8 0x00BD
+0xB9 0x00BE
+0xBA 0x00AC
+0xBB 0x007C
+0xBC 0x00AF
+0xBD 0x00A8
+0xBE 0x005C
+0xBF 0x00D7
+0xC0 0x00FE
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x00AD
+0xCB 0x00F4
+0xCC 0x007E
+0xCD 0x00F2
+0xCE 0x00F3
+0xCF 0x00F5
+0xD0 0x00E6
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x00B9
+0xDB 0x00FB
+0xDC 0x00FC
+0xDD 0x00F9
+0xDE 0x00FA
+0xDF 0x00FF
+0xE0 0x00B4
+0xE1 0x00F7
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x00B2
+0xEB 0x00D4
+0xEC 0x005E
+0xED 0x00D2
+0xEE 0x00D3
+0xEF 0x00D5
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x00B3
+0xFB 0x00DB
+0xFC 0x00DC
+0xFD 0x00D9
+0xFE 0x00DA
+0xFF 0x009F
diff --git a/tests/IBM-1153.TXT b/tests/IBM-1153.TXT
new file mode 100644
index 0000000..cab4652
--- /dev/null
+++ b/tests/IBM-1153.TXT
@@ -0,0 +1,256 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x00E2
+0x43 0x00E4
+0x44 0x0163
+0x45 0x00E1
+0x46 0x0103
+0x47 0x010D
+0x48 0x00E7
+0x49 0x0107
+0x4A 0x005B
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x0021
+0x50 0x0026
+0x51 0x00E9
+0x52 0x0119
+0x53 0x00EB
+0x54 0x016F
+0x55 0x00ED
+0x56 0x00EE
+0x57 0x013E
+0x58 0x013A
+0x59 0x00DF
+0x5A 0x005D
+0x5B 0x0024
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x005E
+0x60 0x002D
+0x61 0x002F
+0x62 0x00C2
+0x63 0x00C4
+0x64 0x02DD
+0x65 0x00C1
+0x66 0x0102
+0x67 0x010C
+0x68 0x00C7
+0x69 0x0106
+0x6A 0x007C
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0x02C7
+0x71 0x00C9
+0x72 0x0118
+0x73 0x00CB
+0x74 0x016E
+0x75 0x00CD
+0x76 0x00CE
+0x77 0x013D
+0x78 0x0139
+0x79 0x0060
+0x7A 0x003A
+0x7B 0x0023
+0x7C 0x0040
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x80 0x02D8
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x015B
+0x8B 0x0148
+0x8C 0x0111
+0x8D 0x00FD
+0x8E 0x0159
+0x8F 0x015F
+0x90 0x00B0
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x0142
+0x9B 0x0144
+0x9C 0x0161
+0x9D 0x00B8
+0x9E 0x02DB
+0x9F 0x20AC
+0xA0 0x0105
+0xA1 0x007E
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x015A
+0xAB 0x0147
+0xAC 0x0110
+0xAD 0x00DD
+0xAE 0x0158
+0xAF 0x015E
+0xB0 0x02D9
+0xB1 0x0104
+0xB2 0x017C
+0xB3 0x0162
+0xB4 0x017B
+0xB5 0x00A7
+0xB6 0x017E
+0xB7 0x017A
+0xB8 0x017D
+0xB9 0x0179
+0xBA 0x0141
+0xBB 0x0143
+0xBC 0x0160
+0xBD 0x00A8
+0xBE 0x00B4
+0xBF 0x00D7
+0xC0 0x007B
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x00AD
+0xCB 0x00F4
+0xCC 0x00F6
+0xCD 0x0155
+0xCE 0x00F3
+0xCF 0x0151
+0xD0 0x007D
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x011A
+0xDB 0x0171
+0xDC 0x00FC
+0xDD 0x0165
+0xDE 0x00FA
+0xDF 0x011B
+0xE0 0x005C
+0xE1 0x00F7
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x010F
+0xEB 0x00D4
+0xEC 0x00D6
+0xED 0x0154
+0xEE 0x00D3
+0xEF 0x0150
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x010E
+0xFB 0x0170
+0xFC 0x00DC
+0xFD 0x0164
+0xFE 0x00DA
+0xFF 0x009F
diff --git a/tests/IBM-1154.TXT b/tests/IBM-1154.TXT
new file mode 100644
index 0000000..ec1f6a1
--- /dev/null
+++ b/tests/IBM-1154.TXT
@@ -0,0 +1,256 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x0452
+0x43 0x0453
+0x44 0x0451
+0x45 0x0454
+0x46 0x0455
+0x47 0x0456
+0x48 0x0457
+0x49 0x0458
+0x4A 0x005B
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x0021
+0x50 0x0026
+0x51 0x0459
+0x52 0x045A
+0x53 0x045B
+0x54 0x045C
+0x55 0x045E
+0x56 0x045F
+0x57 0x042A
+0x58 0x2116
+0x59 0x0402
+0x5A 0x005D
+0x5B 0x0024
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x005E
+0x60 0x002D
+0x61 0x002F
+0x62 0x0403
+0x63 0x0401
+0x64 0x0404
+0x65 0x0405
+0x66 0x0406
+0x67 0x0407
+0x68 0x0408
+0x69 0x0409
+0x6A 0x007C
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0x040A
+0x71 0x040B
+0x72 0x040C
+0x73 0x00AD
+0x74 0x040E
+0x75 0x040F
+0x76 0x044E
+0x77 0x0430
+0x78 0x0431
+0x79 0x0060
+0x7A 0x003A
+0x7B 0x0023
+0x7C 0x0040
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x80 0x0446
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x0434
+0x8B 0x0435
+0x8C 0x0444
+0x8D 0x0433
+0x8E 0x0445
+0x8F 0x0438
+0x90 0x0439
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x043A
+0x9B 0x043B
+0x9C 0x043C
+0x9D 0x043D
+0x9E 0x043E
+0x9F 0x043F
+0xA0 0x044F
+0xA1 0x007E
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x0440
+0xAB 0x0441
+0xAC 0x0442
+0xAD 0x0443
+0xAE 0x0436
+0xAF 0x0432
+0xB0 0x044C
+0xB1 0x044B
+0xB2 0x0437
+0xB3 0x0448
+0xB4 0x044D
+0xB5 0x0449
+0xB6 0x0447
+0xB7 0x044A
+0xB8 0x042E
+0xB9 0x0410
+0xBA 0x0411
+0xBB 0x0426
+0xBC 0x0414
+0xBD 0x0415
+0xBE 0x0424
+0xBF 0x0413
+0xC0 0x007B
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x0425
+0xCB 0x0418
+0xCC 0x0419
+0xCD 0x041A
+0xCE 0x041B
+0xCF 0x041C
+0xD0 0x007D
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x041D
+0xDB 0x041E
+0xDC 0x041F
+0xDD 0x042F
+0xDE 0x0420
+0xDF 0x0421
+0xE0 0x005C
+0xE1 0x20AC
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x0422
+0xEB 0x0423
+0xEC 0x0416
+0xED 0x0412
+0xEE 0x042C
+0xEF 0x042B
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x0417
+0xFB 0x0428
+0xFC 0x042D
+0xFD 0x0429
+0xFE 0x0427
+0xFF 0x009F
diff --git a/tests/IBM-1155.TXT b/tests/IBM-1155.TXT
new file mode 100644
index 0000000..e1046e6
--- /dev/null
+++ b/tests/IBM-1155.TXT
@@ -0,0 +1,256 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x00E2
+0x43 0x00E4
+0x44 0x00E0
+0x45 0x00E1
+0x46 0x00E3
+0x47 0x00E5
+0x48 0x007B
+0x49 0x00F1
+0x4A 0x00C7
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x0021
+0x50 0x0026
+0x51 0x00E9
+0x52 0x00EA
+0x53 0x00EB
+0x54 0x00E8
+0x55 0x00ED
+0x56 0x00EE
+0x57 0x00EF
+0x58 0x00EC
+0x59 0x00DF
+0x5A 0x011E
+0x5B 0x0130
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x005E
+0x60 0x002D
+0x61 0x002F
+0x62 0x00C2
+0x63 0x00C4
+0x64 0x00C0
+0x65 0x00C1
+0x66 0x00C3
+0x67 0x00C5
+0x68 0x005B
+0x69 0x00D1
+0x6A 0x015F
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0x00F8
+0x71 0x00C9
+0x72 0x00CA
+0x73 0x00CB
+0x74 0x00C8
+0x75 0x00CD
+0x76 0x00CE
+0x77 0x00CF
+0x78 0x00CC
+0x79 0x0131
+0x7A 0x003A
+0x7B 0x00D6
+0x7C 0x015E
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x00DC
+0x80 0x00D8
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x00AB
+0x8B 0x00BB
+0x8C 0x007D
+0x8D 0x0060
+0x8E 0x00A6
+0x8F 0x00B1
+0x90 0x00B0
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x00AA
+0x9B 0x00BA
+0x9C 0x00E6
+0x9D 0x00B8
+0x9E 0x00C6
+0x9F 0x20AC
+0xA0 0x00B5
+0xA1 0x00F6
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x00A1
+0xAB 0x00BF
+0xAC 0x005D
+0xAD 0x0024
+0xAE 0x0040
+0xAF 0x00AE
+0xB0 0x00A2
+0xB1 0x00A3
+0xB2 0x00A5
+0xB3 0x00B7
+0xB4 0x00A9
+0xB5 0x00A7
+0xB6 0x00B6
+0xB7 0x00BC
+0xB8 0x00BD
+0xB9 0x00BE
+0xBA 0x00AC
+0xBB 0x007C
+0xBC 0x00AF
+0xBD 0x00A8
+0xBE 0x00B4
+0xBF 0x00D7
+0xC0 0x00E7
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x00AD
+0xCB 0x00F4
+0xCC 0x007E
+0xCD 0x00F2
+0xCE 0x00F3
+0xCF 0x00F5
+0xD0 0x011F
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x00B9
+0xDB 0x00FB
+0xDC 0x005C
+0xDD 0x00F9
+0xDE 0x00FA
+0xDF 0x00FF
+0xE0 0x00FC
+0xE1 0x00F7
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x00B2
+0xEB 0x00D4
+0xEC 0x0023
+0xED 0x00D2
+0xEE 0x00D3
+0xEF 0x00D5
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x00B3
+0xFB 0x00DB
+0xFC 0x0022
+0xFD 0x00D9
+0xFE 0x00DA
+0xFF 0x009F
diff --git a/tests/IBM-1156.TXT b/tests/IBM-1156.TXT
new file mode 100644
index 0000000..2816dc1
--- /dev/null
+++ b/tests/IBM-1156.TXT
@@ -0,0 +1,256 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x0161
+0x43 0x00E4
+0x44 0x0105
+0x45 0x012F
+0x46 0x016B
+0x47 0x00E5
+0x48 0x0113
+0x49 0x017E
+0x4A 0x00A2
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x007C
+0x50 0x0026
+0x51 0x00E9
+0x52 0x0119
+0x53 0x0117
+0x54 0x010D
+0x55 0x0173
+0x56 0x201E
+0x57 0x201C
+0x58 0x0123
+0x59 0x00DF
+0x5A 0x0021
+0x5B 0x0024
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x00AC
+0x60 0x002D
+0x61 0x002F
+0x62 0x0160
+0x63 0x00C4
+0x64 0x0104
+0x65 0x012E
+0x66 0x016A
+0x67 0x00C5
+0x68 0x0112
+0x69 0x017D
+0x6A 0x00A6
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0x00F8
+0x71 0x00C9
+0x72 0x0118
+0x73 0x0116
+0x74 0x010C
+0x75 0x0172
+0x76 0x012A
+0x77 0x013B
+0x78 0x0122
+0x79 0x0060
+0x7A 0x003A
+0x7B 0x0023
+0x7C 0x0040
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x80 0x00D8
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x00AB
+0x8B 0x00BB
+0x8C 0x0101
+0x8D 0x017C
+0x8E 0x0144
+0x8F 0x00B1
+0x90 0x00B0
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x0156
+0x9B 0x0157
+0x9C 0x00E6
+0x9D 0x0137
+0x9E 0x00C6
+0x9F 0x20AC
+0xA0 0x00B5
+0xA1 0x007E
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x201D
+0xAB 0x017A
+0xAC 0x0100
+0xAD 0x017B
+0xAE 0x0143
+0xAF 0x00AE
+0xB0 0x005E
+0xB1 0x00A3
+0xB2 0x012B
+0xB3 0x00B7
+0xB4 0x00A9
+0xB5 0x00A7
+0xB6 0x00B6
+0xB7 0x00BC
+0xB8 0x00BD
+0xB9 0x00BE
+0xBA 0x005B
+0xBB 0x005D
+0xBC 0x0179
+0xBD 0x0136
+0xBE 0x013C
+0xBF 0x00D7
+0xC0 0x007B
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x00AD
+0xCB 0x014D
+0xCC 0x00F6
+0xCD 0x0146
+0xCE 0x00F3
+0xCF 0x00F5
+0xD0 0x007D
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x00B9
+0xDB 0x0107
+0xDC 0x00FC
+0xDD 0x0142
+0xDE 0x015B
+0xDF 0x2019
+0xE0 0x005C
+0xE1 0x00F7
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x00B2
+0xEB 0x014C
+0xEC 0x00D6
+0xED 0x0145
+0xEE 0x00D3
+0xEF 0x00D5
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x00B3
+0xFB 0x0106
+0xFC 0x00DC
+0xFD 0x0141
+0xFE 0x015A
+0xFF 0x009F
diff --git a/tests/IBM-1157.TXT b/tests/IBM-1157.TXT
new file mode 100644
index 0000000..57801a5
--- /dev/null
+++ b/tests/IBM-1157.TXT
@@ -0,0 +1,256 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x00E2
+0x43 0x007B
+0x44 0x00E0
+0x45 0x00E1
+0x46 0x00E3
+0x47 0x007D
+0x48 0x00E7
+0x49 0x00F1
+0x4A 0x00A7
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x0021
+0x50 0x0026
+0x51 0x0060
+0x52 0x00EA
+0x53 0x00EB
+0x54 0x00E8
+0x55 0x00ED
+0x56 0x00EE
+0x57 0x00EF
+0x58 0x00EC
+0x59 0x00DF
+0x5A 0x20AC
+0x5B 0x00C5
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x005E
+0x60 0x002D
+0x61 0x002F
+0x62 0x00C2
+0x63 0x0023
+0x64 0x00C0
+0x65 0x00C1
+0x66 0x00C3
+0x67 0x0024
+0x68 0x00C7
+0x69 0x00D1
+0x6A 0x00F6
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0x00F8
+0x71 0x005C
+0x72 0x00CA
+0x73 0x00CB
+0x74 0x00C8
+0x75 0x00CD
+0x76 0x00CE
+0x77 0x00CF
+0x78 0x00CC
+0x79 0x00E9
+0x7A 0x003A
+0x7B 0x00C4
+0x7C 0x00D6
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x80 0x00D8
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x00AB
+0x8B 0x00BB
+0x8C 0x0161
+0x8D 0x00FD
+0x8E 0x017E
+0x8F 0x00B1
+0x90 0x00B0
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x00AA
+0x9B 0x00BA
+0x9C 0x00E6
+0x9D 0x00B8
+0x9E 0x00C6
+0x9F 0x005D
+0xA0 0x00B5
+0xA1 0x00FC
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x00A1
+0xAB 0x00BF
+0xAC 0x0160
+0xAD 0x00DD
+0xAE 0x017D
+0xAF 0x00AE
+0xB0 0x00A2
+0xB1 0x00A3
+0xB2 0x00A5
+0xB3 0x00B7
+0xB4 0x00A9
+0xB5 0x005B
+0xB6 0x00B6
+0xB7 0x00BC
+0xB8 0x00BD
+0xB9 0x00BE
+0xBA 0x00AC
+0xBB 0x007C
+0xBC 0x00AF
+0xBD 0x00A8
+0xBE 0x00B4
+0xBF 0x00D7
+0xC0 0x00E4
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x00AD
+0xCB 0x00F4
+0xCC 0x00A6
+0xCD 0x00F2
+0xCE 0x00F3
+0xCF 0x00F5
+0xD0 0x00E5
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x00B9
+0xDB 0x00FB
+0xDC 0x007E
+0xDD 0x00F9
+0xDE 0x00FA
+0xDF 0x00FF
+0xE0 0x00C9
+0xE1 0x00F7
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x00B2
+0xEB 0x00D4
+0xEC 0x0040
+0xED 0x00D2
+0xEE 0x00D3
+0xEF 0x00D5
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x00B3
+0xFB 0x00DB
+0xFC 0x00DC
+0xFD 0x00D9
+0xFE 0x00DA
+0xFF 0x009F
diff --git a/tests/IBM-1158.TXT b/tests/IBM-1158.TXT
new file mode 100644
index 0000000..7ef39fb
--- /dev/null
+++ b/tests/IBM-1158.TXT
@@ -0,0 +1,256 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x0452
+0x43 0x0491
+0x44 0x0451
+0x45 0x0454
+0x46 0x0455
+0x47 0x0456
+0x48 0x0457
+0x49 0x0458
+0x4A 0x005B
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x0021
+0x50 0x0026
+0x51 0x0459
+0x52 0x045A
+0x53 0x045B
+0x54 0x045C
+0x55 0x045E
+0x56 0x045F
+0x57 0x042A
+0x58 0x2116
+0x59 0x0402
+0x5A 0x005D
+0x5B 0x0024
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x005E
+0x60 0x002D
+0x61 0x002F
+0x62 0x0490
+0x63 0x0401
+0x64 0x0404
+0x65 0x0405
+0x66 0x0406
+0x67 0x0407
+0x68 0x0408
+0x69 0x0409
+0x6A 0x007C
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0x040A
+0x71 0x040B
+0x72 0x040C
+0x73 0x00AD
+0x74 0x040E
+0x75 0x040F
+0x76 0x044E
+0x77 0x0430
+0x78 0x0431
+0x79 0x0060
+0x7A 0x003A
+0x7B 0x0023
+0x7C 0x0040
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x80 0x0446
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x0434
+0x8B 0x0435
+0x8C 0x0444
+0x8D 0x0433
+0x8E 0x0445
+0x8F 0x0438
+0x90 0x0439
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x043A
+0x9B 0x043B
+0x9C 0x043C
+0x9D 0x043D
+0x9E 0x043E
+0x9F 0x043F
+0xA0 0x044F
+0xA1 0x007E
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x0440
+0xAB 0x0441
+0xAC 0x0442
+0xAD 0x0443
+0xAE 0x0436
+0xAF 0x0432
+0xB0 0x044C
+0xB1 0x044B
+0xB2 0x0437
+0xB3 0x0448
+0xB4 0x044D
+0xB5 0x0449
+0xB6 0x0447
+0xB7 0x044A
+0xB8 0x042E
+0xB9 0x0410
+0xBA 0x0411
+0xBB 0x0426
+0xBC 0x0414
+0xBD 0x0415
+0xBE 0x0424
+0xBF 0x0413
+0xC0 0x007B
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x0425
+0xCB 0x0418
+0xCC 0x0419
+0xCD 0x041A
+0xCE 0x041B
+0xCF 0x041C
+0xD0 0x007D
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x041D
+0xDB 0x041E
+0xDC 0x041F
+0xDD 0x042F
+0xDE 0x0420
+0xDF 0x0421
+0xE0 0x005C
+0xE1 0x20AC
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x0422
+0xEB 0x0423
+0xEC 0x0416
+0xED 0x0412
+0xEE 0x042C
+0xEF 0x042B
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x0417
+0xFB 0x0428
+0xFC 0x042D
+0xFD 0x0429
+0xFE 0x0427
+0xFF 0x009F
diff --git a/tests/IBM-1160.IRREVERSIBLE.TXT b/tests/IBM-1160.IRREVERSIBLE.TXT
new file mode 100644
index 0000000..494fef2
--- /dev/null
+++ b/tests/IBM-1160.IRREVERSIBLE.TXT
@@ -0,0 +1,4 @@
+0x51 0x0E48
+0xCA 0x0E49
+0xE1 0x0E4A
+0xFD 0x0E4B
diff --git a/tests/IBM-1160.TXT b/tests/IBM-1160.TXT
new file mode 100644
index 0000000..fe902e5
--- /dev/null
+++ b/tests/IBM-1160.TXT
@@ -0,0 +1,256 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x0E01
+0x43 0x0E02
+0x44 0x0E03
+0x45 0x0E04
+0x46 0x0E05
+0x47 0x0E06
+0x48 0x0E07
+0x49 0x005B
+0x4A 0x00A2
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x007C
+0x50 0x0026
+0x51 0x0E48
+0x52 0x0E08
+0x53 0x0E09
+0x54 0x0E0A
+0x55 0x0E0B
+0x56 0x0E0C
+0x57 0x0E0D
+0x58 0x0E0E
+0x59 0x005D
+0x5A 0x0021
+0x5B 0x0024
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x00AC
+0x60 0x002D
+0x61 0x002F
+0x62 0x0E0F
+0x63 0x0E10
+0x64 0x0E11
+0x65 0x0E12
+0x66 0x0E13
+0x67 0x0E14
+0x68 0x0E15
+0x69 0x005E
+0x6A 0x00A6
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0x0E3F
+0x71 0x0E4E
+0x72 0x0E16
+0x73 0x0E17
+0x74 0x0E18
+0x75 0x0E19
+0x76 0x0E1A
+0x77 0x0E1B
+0x78 0x0E1C
+0x79 0x0060
+0x7A 0x003A
+0x7B 0x0023
+0x7C 0x0040
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x80 0x0E4F
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x0E1D
+0x8B 0x0E1E
+0x8C 0x0E1F
+0x8D 0x0E20
+0x8E 0x0E21
+0x8F 0x0E22
+0x90 0x0E5A
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x0E23
+0x9B 0x0E24
+0x9C 0x0E25
+0x9D 0x0E26
+0x9E 0x0E27
+0x9F 0x0E28
+0xA0 0x0E5B
+0xA1 0x007E
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x0E29
+0xAB 0x0E2A
+0xAC 0x0E2B
+0xAD 0x0E2C
+0xAE 0x0E2D
+0xAF 0x0E2E
+0xB0 0x0E50
+0xB1 0x0E51
+0xB2 0x0E52
+0xB3 0x0E53
+0xB4 0x0E54
+0xB5 0x0E55
+0xB6 0x0E56
+0xB7 0x0E57
+0xB8 0x0E58
+0xB9 0x0E59
+0xBA 0x0E2F
+0xBB 0x0E30
+0xBC 0x0E31
+0xBD 0x0E32
+0xBE 0x0E33
+0xBF 0x0E34
+0xC0 0x007B
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x0E49
+0xCB 0x0E35
+0xCC 0x0E36
+0xCD 0x0E37
+0xCE 0x0E38
+0xCF 0x0E39
+0xD0 0x007D
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x0E3A
+0xDB 0x0E40
+0xDC 0x0E41
+0xDD 0x0E42
+0xDE 0x0E43
+0xDF 0x0E44
+0xE0 0x005C
+0xE1 0x0E4A
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x0E45
+0xEB 0x0E46
+0xEC 0x0E47
+0xED 0x0E48
+0xEE 0x0E49
+0xEF 0x0E4A
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x0E4B
+0xFB 0x0E4C
+0xFC 0x0E4D
+0xFD 0x0E4B
+0xFE 0x20AC
+0xFF 0x009F
diff --git a/tests/IBM-1164.TXT b/tests/IBM-1164.TXT
new file mode 100644
index 0000000..7015807
--- /dev/null
+++ b/tests/IBM-1164.TXT
@@ -0,0 +1,256 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x00E2
+0x43 0x00E4
+0x44 0x00E0
+0x45 0x00E1
+0x46 0x0103
+0x47 0x00E5
+0x48 0x00E7
+0x49 0x00F1
+0x4A 0x005B
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x0021
+0x50 0x0026
+0x51 0x00E9
+0x52 0x00EA
+0x53 0x00EB
+0x54 0x00E8
+0x55 0x00ED
+0x56 0x00EE
+0x57 0x00EF
+0x58 0x0303
+0x59 0x00DF
+0x5A 0x005D
+0x5B 0x0024
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x005E
+0x60 0x002D
+0x61 0x002F
+0x62 0x00C2
+0x63 0x00C4
+0x64 0x00C0
+0x65 0x00C1
+0x66 0x0102
+0x67 0x00C5
+0x68 0x00C7
+0x69 0x00D1
+0x6A 0x00A6
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0x00F8
+0x71 0x00C9
+0x72 0x00CA
+0x73 0x00CB
+0x74 0x00C8
+0x75 0x00CD
+0x76 0x00CE
+0x77 0x00CF
+0x78 0x20AB
+0x79 0x0060
+0x7A 0x003A
+0x7B 0x0023
+0x7C 0x0040
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x80 0x00D8
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x00AB
+0x8B 0x00BB
+0x8C 0x0111
+0x8D 0x0309
+0x8E 0x0300
+0x8F 0x00B1
+0x90 0x00B0
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x00AA
+0x9B 0x00BA
+0x9C 0x00E6
+0x9D 0x0152
+0x9E 0x00C6
+0x9F 0x20AC
+0xA0 0x00B5
+0xA1 0x007E
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x00A1
+0xAB 0x00BF
+0xAC 0x0110
+0xAD 0x0323
+0xAE 0x0301
+0xAF 0x00AE
+0xB0 0x00A2
+0xB1 0x00A3
+0xB2 0x00A5
+0xB3 0x00B7
+0xB4 0x00A9
+0xB5 0x00A7
+0xB6 0x00B6
+0xB7 0x00BC
+0xB8 0x00BD
+0xB9 0x00BE
+0xBA 0x00AC
+0xBB 0x007C
+0xBC 0x00AF
+0xBD 0x0153
+0xBE 0x0178
+0xBF 0x00D7
+0xC0 0x007B
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x00AD
+0xCB 0x00F4
+0xCC 0x00F6
+0xCD 0x01B0
+0xCE 0x00F3
+0xCF 0x01A1
+0xD0 0x007D
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x00B9
+0xDB 0x00FB
+0xDC 0x00FC
+0xDD 0x00F9
+0xDE 0x00FA
+0xDF 0x00FF
+0xE0 0x005C
+0xE1 0x00F7
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x00B2
+0xEB 0x00D4
+0xEC 0x00D6
+0xED 0x01AF
+0xEE 0x00D3
+0xEF 0x01A0
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x00B3
+0xFB 0x00DB
+0xFC 0x00DC
+0xFD 0x00D9
+0xFE 0x00DA
+0xFF 0x009F
diff --git a/tests/IBM-1165.TXT b/tests/IBM-1165.TXT
new file mode 100644
index 0000000..e26969a
--- /dev/null
+++ b/tests/IBM-1165.TXT
@@ -0,0 +1,256 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x00E2
+0x43 0x00E4
+0x44 0x0163
+0x45 0x00E1
+0x46 0x0103
+0x47 0x010D
+0x48 0x00E7
+0x49 0x0107
+0x4A 0x00DD
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x007C
+0x50 0x0026
+0x51 0x00E9
+0x52 0x0119
+0x53 0x00EB
+0x54 0x016F
+0x55 0x00ED
+0x56 0x00EE
+0x57 0x013E
+0x58 0x013A
+0x59 0x00DF
+0x5A 0x0021
+0x5B 0x0024
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x005E
+0x60 0x002D
+0x61 0x002F
+0x62 0x00C2
+0x63 0x00C4
+0x64 0x02DD
+0x65 0x00C1
+0x66 0x0102
+0x67 0x010C
+0x68 0x00C7
+0x69 0x0106
+0x6A 0x00A8
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0x02C7
+0x71 0x00C9
+0x72 0x0118
+0x73 0x00CB
+0x74 0x016E
+0x75 0x00CD
+0x76 0x00CE
+0x77 0x013D
+0x78 0x0139
+0x79 0x0060
+0x7A 0x003A
+0x7B 0x0023
+0x7C 0x0040
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x80 0x02D8
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x015B
+0x8B 0x0148
+0x8C 0x0111
+0x8D 0x00FD
+0x8E 0x0159
+0x8F 0x015F
+0x90 0x00B0
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x0142
+0x9B 0x0144
+0x9C 0x0161
+0x9D 0x00B8
+0x9E 0x02DB
+0x9F 0x20AC
+0xA0 0x0105
+0xA1 0x007E
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x015A
+0xAB 0x0147
+0xAC 0x0110
+0xAD 0x005B
+0xAE 0x0158
+0xAF 0x015E
+0xB0 0x02D9
+0xB1 0x0104
+0xB2 0x017C
+0xB3 0x0162
+0xB4 0x017B
+0xB5 0x00A7
+0xB6 0x017E
+0xB7 0x017A
+0xB8 0x017D
+0xB9 0x0179
+0xBA 0x0141
+0xBB 0x0143
+0xBC 0x0160
+0xBD 0x005D
+0xBE 0x00B4
+0xBF 0x00D7
+0xC0 0x007B
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x00AD
+0xCB 0x00F4
+0xCC 0x00F6
+0xCD 0x0155
+0xCE 0x00F3
+0xCF 0x0151
+0xD0 0x007D
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x011A
+0xDB 0x0171
+0xDC 0x00FC
+0xDD 0x0165
+0xDE 0x00FA
+0xDF 0x011B
+0xE0 0x005C
+0xE1 0x00F7
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x010F
+0xEB 0x00D4
+0xEC 0x00D6
+0xED 0x0154
+0xEE 0x00D3
+0xEF 0x0150
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x010E
+0xFB 0x0170
+0xFC 0x00DC
+0xFD 0x0164
+0xFE 0x00DA
+0xFF 0x009F
diff --git a/tests/IBM-1166.TXT b/tests/IBM-1166.TXT
new file mode 100644
index 0000000..064269a
--- /dev/null
+++ b/tests/IBM-1166.TXT
@@ -0,0 +1,256 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x04D9
+0x43 0x0493
+0x44 0x0451
+0x45 0x0454
+0x46 0x0455
+0x47 0x0456
+0x48 0x049B
+0x49 0x0458
+0x4A 0x005B
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x0021
+0x50 0x0026
+0x51 0x04A3
+0x52 0x04E9
+0x53 0x04B1
+0x54 0x04AF
+0x55 0x045E
+0x56 0x04BB
+0x57 0x042A
+0x58 0x2116
+0x59 0x04D8
+0x5A 0x005D
+0x5B 0x0024
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x005E
+0x60 0x002D
+0x61 0x002F
+0x62 0x0492
+0x63 0x0401
+0x64 0x0404
+0x65 0x0405
+0x66 0x0406
+0x67 0x049A
+0x68 0x0408
+0x69 0x04A2
+0x6A 0x007C
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0x04E8
+0x71 0x04B0
+0x72 0x04AE
+0x73 0x00AD
+0x74 0x040E
+0x75 0x04BA
+0x76 0x044E
+0x77 0x0430
+0x78 0x0431
+0x79 0x0060
+0x7A 0x003A
+0x7B 0x0023
+0x7C 0x0040
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x80 0x0446
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x0434
+0x8B 0x0435
+0x8C 0x0444
+0x8D 0x0433
+0x8E 0x0445
+0x8F 0x0438
+0x90 0x0439
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x043A
+0x9B 0x043B
+0x9C 0x043C
+0x9D 0x043D
+0x9E 0x043E
+0x9F 0x043F
+0xA0 0x044F
+0xA1 0x007E
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x0440
+0xAB 0x0441
+0xAC 0x0442
+0xAD 0x0443
+0xAE 0x0436
+0xAF 0x0432
+0xB0 0x044C
+0xB1 0x044B
+0xB2 0x0437
+0xB3 0x0448
+0xB4 0x044D
+0xB5 0x0449
+0xB6 0x0447
+0xB7 0x044A
+0xB8 0x042E
+0xB9 0x0410
+0xBA 0x0411
+0xBB 0x0426
+0xBC 0x0414
+0xBD 0x0415
+0xBE 0x0424
+0xBF 0x0413
+0xC0 0x007B
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x0425
+0xCB 0x0418
+0xCC 0x0419
+0xCD 0x041A
+0xCE 0x041B
+0xCF 0x041C
+0xD0 0x007D
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x041D
+0xDB 0x041E
+0xDC 0x041F
+0xDD 0x042F
+0xDE 0x0420
+0xDF 0x0421
+0xE0 0x005C
+0xE1 0x20AC
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x0422
+0xEB 0x0423
+0xEC 0x0416
+0xED 0x0412
+0xEE 0x042C
+0xEF 0x042B
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x0417
+0xFB 0x0428
+0xFC 0x042D
+0xFD 0x0429
+0xFE 0x0427
+0xFF 0x009F
diff --git a/tests/IBM-12712.TXT b/tests/IBM-12712.TXT
new file mode 100644
index 0000000..8310f89
--- /dev/null
+++ b/tests/IBM-12712.TXT
@@ -0,0 +1,227 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x05D0
+0x42 0x05D1
+0x43 0x05D2
+0x44 0x05D3
+0x45 0x05D4
+0x46 0x05D5
+0x47 0x05D6
+0x48 0x05D7
+0x49 0x05D8
+0x4A 0x00A2
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x007C
+0x50 0x0026
+0x51 0x05D9
+0x52 0x05DA
+0x53 0x05DB
+0x54 0x05DC
+0x55 0x05DD
+0x56 0x05DE
+0x57 0x05DF
+0x58 0x05E0
+0x59 0x05E1
+0x5A 0x0021
+0x5B 0x0024
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x00AC
+0x60 0x002D
+0x61 0x002F
+0x62 0x05E2
+0x63 0x05E3
+0x64 0x05E4
+0x65 0x05E5
+0x66 0x05E6
+0x67 0x05E7
+0x68 0x05E8
+0x69 0x05E9
+0x6A 0x00A6
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x71 0x05EA
+0x74 0x00A0
+0x78 0x2017
+0x79 0x0060
+0x7A 0x003A
+0x7B 0x0023
+0x7C 0x0040
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x00AB
+0x8B 0x00BB
+0x8F 0x00B1
+0x90 0x00B0
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9C 0x20AC
+0x9D 0x00B8
+0x9E 0x20AA
+0x9F 0x00A4
+0xA0 0x00B5
+0xA1 0x007E
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAF 0x00AE
+0xB0 0x005E
+0xB1 0x00A3
+0xB2 0x00A5
+0xB3 0x2022
+0xB4 0x00A9
+0xB5 0x00A7
+0xB6 0x00B6
+0xB7 0x00BC
+0xB8 0x00BD
+0xB9 0x00BE
+0xBA 0x005B
+0xBB 0x005D
+0xBC 0x203E
+0xBD 0x00A8
+0xBE 0x00B4
+0xBF 0x00D7
+0xC0 0x007B
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x00AD
+0xD0 0x007D
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x00B9
+0xDB 0x202D
+0xDC 0x202E
+0xDD 0x202C
+0xE0 0x005C
+0xE1 0x00F7
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x00B2
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x00B3
+0xFB 0x202A
+0xFC 0x202B
+0xFD 0x200E
+0xFE 0x200F
+0xFF 0x009F
diff --git a/tests/IBM-16804.TXT b/tests/IBM-16804.TXT
new file mode 100644
index 0000000..87a0603
--- /dev/null
+++ b/tests/IBM-16804.TXT
@@ -0,0 +1,249 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x0651
+0x43 0xFE7D
+0x44 0x0640
+0x45 0x200B
+0x46 0x0621
+0x47 0x0622
+0x48 0xFE82
+0x49 0x0623
+0x4A 0x00A2
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x007C
+0x50 0x0026
+0x51 0xFE84
+0x52 0x0624
+0x55 0x0626
+0x56 0x0627
+0x57 0xFE8E
+0x58 0x0628
+0x59 0xFE91
+0x5A 0x0021
+0x5B 0x0024
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x00AC
+0x60 0x002D
+0x61 0x002F
+0x62 0x0629
+0x63 0x062A
+0x64 0xFE97
+0x65 0x062B
+0x66 0xFE9B
+0x67 0x062C
+0x68 0xFE9F
+0x69 0x062D
+0x6A 0x00A6
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0xFEA3
+0x71 0x062E
+0x72 0xFEA7
+0x73 0x062F
+0x74 0x0630
+0x75 0x0631
+0x76 0x0632
+0x77 0x0633
+0x78 0xFEB3
+0x79 0x060C
+0x7A 0x003A
+0x7B 0x0023
+0x7C 0x0040
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x80 0x0634
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0xFEB7
+0x8B 0x0635
+0x8C 0xFEBB
+0x8D 0x0636
+0x8E 0xFEBF
+0x8F 0x0637
+0x90 0x0638
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x0639
+0x9B 0xFECA
+0x9C 0xFECB
+0x9D 0xFECC
+0x9E 0x063A
+0x9F 0xFECE
+0xA0 0xFECF
+0xA1 0x00F7
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0xFED0
+0xAB 0x0641
+0xAC 0xFED3
+0xAD 0x0642
+0xAE 0xFED7
+0xAF 0x0643
+0xB0 0xFEDB
+0xB1 0x0644
+0xB2 0xFEF5
+0xB3 0xFEF6
+0xB4 0xFEF7
+0xB5 0xFEF8
+0xB8 0xFEFB
+0xB9 0xFEFC
+0xBA 0xFEDF
+0xBB 0x0645
+0xBC 0xFEE3
+0xBD 0x0646
+0xBE 0xFEE7
+0xBF 0x0647
+0xC0 0x061B
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x00AD
+0xCB 0xFEEB
+0xCD 0xFEEC
+0xCF 0x0648
+0xD0 0x061F
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x0649
+0xDB 0xFEF0
+0xDC 0x064A
+0xDD 0xFEF2
+0xDE 0xFEF3
+0xDF 0x0660
+0xE0 0x00D7
+0xE1 0x2007
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x0661
+0xEB 0x0662
+0xED 0x0663
+0xEE 0x0664
+0xEF 0x0665
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x20AC
+0xFB 0x0666
+0xFC 0x0667
+0xFD 0x0668
+0xFE 0x0669
+0xFF 0x009F
diff --git a/tests/IBM-273.TXT b/tests/IBM-273.TXT
new file mode 100644
index 0000000..fb82635
--- /dev/null
+++ b/tests/IBM-273.TXT
@@ -0,0 +1,256 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x00E2
+0x43 0x007B
+0x44 0x00E0
+0x45 0x00E1
+0x46 0x00E3
+0x47 0x00E5
+0x48 0x00E7
+0x49 0x00F1
+0x4A 0x00C4
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x0021
+0x50 0x0026
+0x51 0x00E9
+0x52 0x00EA
+0x53 0x00EB
+0x54 0x00E8
+0x55 0x00ED
+0x56 0x00EE
+0x57 0x00EF
+0x58 0x00EC
+0x59 0x007E
+0x5A 0x00DC
+0x5B 0x0024
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x005E
+0x60 0x002D
+0x61 0x002F
+0x62 0x00C2
+0x63 0x005B
+0x64 0x00C0
+0x65 0x00C1
+0x66 0x00C3
+0x67 0x00C5
+0x68 0x00C7
+0x69 0x00D1
+0x6A 0x00F6
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0x00F8
+0x71 0x00C9
+0x72 0x00CA
+0x73 0x00CB
+0x74 0x00C8
+0x75 0x00CD
+0x76 0x00CE
+0x77 0x00CF
+0x78 0x00CC
+0x79 0x0060
+0x7A 0x003A
+0x7B 0x0023
+0x7C 0x00A7
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x80 0x00D8
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x00AB
+0x8B 0x00BB
+0x8C 0x00F0
+0x8D 0x00FD
+0x8E 0x00FE
+0x8F 0x00B1
+0x90 0x00B0
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x00AA
+0x9B 0x00BA
+0x9C 0x00E6
+0x9D 0x00B8
+0x9E 0x00C6
+0x9F 0x00A4
+0xA0 0x00B5
+0xA1 0x00DF
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x00A1
+0xAB 0x00BF
+0xAC 0x00D0
+0xAD 0x00DD
+0xAE 0x00DE
+0xAF 0x00AE
+0xB0 0x00A2
+0xB1 0x00A3
+0xB2 0x00A5
+0xB3 0x00B7
+0xB4 0x00A9
+0xB5 0x0040
+0xB6 0x00B6
+0xB7 0x00BC
+0xB8 0x00BD
+0xB9 0x00BE
+0xBA 0x00AC
+0xBB 0x007C
+0xBC 0x00AF
+0xBD 0x00A8
+0xBE 0x00B4
+0xBF 0x00D7
+0xC0 0x00E4
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x00AD
+0xCB 0x00F4
+0xCC 0x00A6
+0xCD 0x00F2
+0xCE 0x00F3
+0xCF 0x00F5
+0xD0 0x00FC
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x00B9
+0xDB 0x00FB
+0xDC 0x007D
+0xDD 0x00F9
+0xDE 0x00FA
+0xDF 0x00FF
+0xE0 0x00D6
+0xE1 0x00F7
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x00B2
+0xEB 0x00D4
+0xEC 0x005C
+0xED 0x00D2
+0xEE 0x00D3
+0xEF 0x00D5
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x00B3
+0xFB 0x00DB
+0xFC 0x005D
+0xFD 0x00D9
+0xFE 0x00DA
+0xFF 0x009F
diff --git a/tests/IBM-277.TXT b/tests/IBM-277.TXT
new file mode 100644
index 0000000..f7f8137
--- /dev/null
+++ b/tests/IBM-277.TXT
@@ -0,0 +1,256 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x00E2
+0x43 0x00E4
+0x44 0x00E0
+0x45 0x00E1
+0x46 0x00E3
+0x47 0x007D
+0x48 0x00E7
+0x49 0x00F1
+0x4A 0x0023
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x0021
+0x50 0x0026
+0x51 0x00E9
+0x52 0x00EA
+0x53 0x00EB
+0x54 0x00E8
+0x55 0x00ED
+0x56 0x00EE
+0x57 0x00EF
+0x58 0x00EC
+0x59 0x00DF
+0x5A 0x00A4
+0x5B 0x00C5
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x005E
+0x60 0x002D
+0x61 0x002F
+0x62 0x00C2
+0x63 0x00C4
+0x64 0x00C0
+0x65 0x00C1
+0x66 0x00C3
+0x67 0x0024
+0x68 0x00C7
+0x69 0x00D1
+0x6A 0x00F8
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0x00A6
+0x71 0x00C9
+0x72 0x00CA
+0x73 0x00CB
+0x74 0x00C8
+0x75 0x00CD
+0x76 0x00CE
+0x77 0x00CF
+0x78 0x00CC
+0x79 0x0060
+0x7A 0x003A
+0x7B 0x00C6
+0x7C 0x00D8
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x80 0x0040
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x00AB
+0x8B 0x00BB
+0x8C 0x00F0
+0x8D 0x00FD
+0x8E 0x00FE
+0x8F 0x00B1
+0x90 0x00B0
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x00AA
+0x9B 0x00BA
+0x9C 0x007B
+0x9D 0x00B8
+0x9E 0x005B
+0x9F 0x005D
+0xA0 0x00B5
+0xA1 0x00FC
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x00A1
+0xAB 0x00BF
+0xAC 0x00D0
+0xAD 0x00DD
+0xAE 0x00DE
+0xAF 0x00AE
+0xB0 0x00A2
+0xB1 0x00A3
+0xB2 0x00A5
+0xB3 0x00B7
+0xB4 0x00A9
+0xB5 0x00A7
+0xB6 0x00B6
+0xB7 0x00BC
+0xB8 0x00BD
+0xB9 0x00BE
+0xBA 0x00AC
+0xBB 0x007C
+0xBC 0x00AF
+0xBD 0x00A8
+0xBE 0x00B4
+0xBF 0x00D7
+0xC0 0x00E6
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x00AD
+0xCB 0x00F4
+0xCC 0x00F6
+0xCD 0x00F2
+0xCE 0x00F3
+0xCF 0x00F5
+0xD0 0x00E5
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x00B9
+0xDB 0x00FB
+0xDC 0x007E
+0xDD 0x00F9
+0xDE 0x00FA
+0xDF 0x00FF
+0xE0 0x005C
+0xE1 0x00F7
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x00B2
+0xEB 0x00D4
+0xEC 0x00D6
+0xED 0x00D2
+0xEE 0x00D3
+0xEF 0x00D5
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x00B3
+0xFB 0x00DB
+0xFC 0x00DC
+0xFD 0x00D9
+0xFE 0x00DA
+0xFF 0x009F
diff --git a/tests/IBM-278.TXT b/tests/IBM-278.TXT
new file mode 100644
index 0000000..8984604
--- /dev/null
+++ b/tests/IBM-278.TXT
@@ -0,0 +1,256 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x00E2
+0x43 0x007B
+0x44 0x00E0
+0x45 0x00E1
+0x46 0x00E3
+0x47 0x007D
+0x48 0x00E7
+0x49 0x00F1
+0x4A 0x00A7
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x0021
+0x50 0x0026
+0x51 0x0060
+0x52 0x00EA
+0x53 0x00EB
+0x54 0x00E8
+0x55 0x00ED
+0x56 0x00EE
+0x57 0x00EF
+0x58 0x00EC
+0x59 0x00DF
+0x5A 0x00A4
+0x5B 0x00C5
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x005E
+0x60 0x002D
+0x61 0x002F
+0x62 0x00C2
+0x63 0x0023
+0x64 0x00C0
+0x65 0x00C1
+0x66 0x00C3
+0x67 0x0024
+0x68 0x00C7
+0x69 0x00D1
+0x6A 0x00F6
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0x00F8
+0x71 0x005C
+0x72 0x00CA
+0x73 0x00CB
+0x74 0x00C8
+0x75 0x00CD
+0x76 0x00CE
+0x77 0x00CF
+0x78 0x00CC
+0x79 0x00E9
+0x7A 0x003A
+0x7B 0x00C4
+0x7C 0x00D6
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x80 0x00D8
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x00AB
+0x8B 0x00BB
+0x8C 0x00F0
+0x8D 0x00FD
+0x8E 0x00FE
+0x8F 0x00B1
+0x90 0x00B0
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x00AA
+0x9B 0x00BA
+0x9C 0x00E6
+0x9D 0x00B8
+0x9E 0x00C6
+0x9F 0x005D
+0xA0 0x00B5
+0xA1 0x00FC
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x00A1
+0xAB 0x00BF
+0xAC 0x00D0
+0xAD 0x00DD
+0xAE 0x00DE
+0xAF 0x00AE
+0xB0 0x00A2
+0xB1 0x00A3
+0xB2 0x00A5
+0xB3 0x00B7
+0xB4 0x00A9
+0xB5 0x005B
+0xB6 0x00B6
+0xB7 0x00BC
+0xB8 0x00BD
+0xB9 0x00BE
+0xBA 0x00AC
+0xBB 0x007C
+0xBC 0x00AF
+0xBD 0x00A8
+0xBE 0x00B4
+0xBF 0x00D7
+0xC0 0x00E4
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x00AD
+0xCB 0x00F4
+0xCC 0x00A6
+0xCD 0x00F2
+0xCE 0x00F3
+0xCF 0x00F5
+0xD0 0x00E5
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x00B9
+0xDB 0x00FB
+0xDC 0x007E
+0xDD 0x00F9
+0xDE 0x00FA
+0xDF 0x00FF
+0xE0 0x00C9
+0xE1 0x00F7
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x00B2
+0xEB 0x00D4
+0xEC 0x0040
+0xED 0x00D2
+0xEE 0x00D3
+0xEF 0x00D5
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x00B3
+0xFB 0x00DB
+0xFC 0x00DC
+0xFD 0x00D9
+0xFE 0x00DA
+0xFF 0x009F
diff --git a/tests/IBM-280.TXT b/tests/IBM-280.TXT
new file mode 100644
index 0000000..d37e4ef
--- /dev/null
+++ b/tests/IBM-280.TXT
@@ -0,0 +1,256 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x00E2
+0x43 0x00E4
+0x44 0x007B
+0x45 0x00E1
+0x46 0x00E3
+0x47 0x00E5
+0x48 0x005C
+0x49 0x00F1
+0x4A 0x00B0
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x0021
+0x50 0x0026
+0x51 0x005D
+0x52 0x00EA
+0x53 0x00EB
+0x54 0x007D
+0x55 0x00ED
+0x56 0x00EE
+0x57 0x00EF
+0x58 0x007E
+0x59 0x00DF
+0x5A 0x00E9
+0x5B 0x0024
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x005E
+0x60 0x002D
+0x61 0x002F
+0x62 0x00C2
+0x63 0x00C4
+0x64 0x00C0
+0x65 0x00C1
+0x66 0x00C3
+0x67 0x00C5
+0x68 0x00C7
+0x69 0x00D1
+0x6A 0x00F2
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0x00F8
+0x71 0x00C9
+0x72 0x00CA
+0x73 0x00CB
+0x74 0x00C8
+0x75 0x00CD
+0x76 0x00CE
+0x77 0x00CF
+0x78 0x00CC
+0x79 0x00F9
+0x7A 0x003A
+0x7B 0x00A3
+0x7C 0x00A7
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x80 0x00D8
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x00AB
+0x8B 0x00BB
+0x8C 0x00F0
+0x8D 0x00FD
+0x8E 0x00FE
+0x8F 0x00B1
+0x90 0x005B
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x00AA
+0x9B 0x00BA
+0x9C 0x00E6
+0x9D 0x00B8
+0x9E 0x00C6
+0x9F 0x00A4
+0xA0 0x00B5
+0xA1 0x00EC
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x00A1
+0xAB 0x00BF
+0xAC 0x00D0
+0xAD 0x00DD
+0xAE 0x00DE
+0xAF 0x00AE
+0xB0 0x00A2
+0xB1 0x0023
+0xB2 0x00A5
+0xB3 0x00B7
+0xB4 0x00A9
+0xB5 0x0040
+0xB6 0x00B6
+0xB7 0x00BC
+0xB8 0x00BD
+0xB9 0x00BE
+0xBA 0x00AC
+0xBB 0x007C
+0xBC 0x00AF
+0xBD 0x00A8
+0xBE 0x00B4
+0xBF 0x00D7
+0xC0 0x00E0
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x00AD
+0xCB 0x00F4
+0xCC 0x00F6
+0xCD 0x00A6
+0xCE 0x00F3
+0xCF 0x00F5
+0xD0 0x00E8
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x00B9
+0xDB 0x00FB
+0xDC 0x00FC
+0xDD 0x0060
+0xDE 0x00FA
+0xDF 0x00FF
+0xE0 0x00E7
+0xE1 0x00F7
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x00B2
+0xEB 0x00D4
+0xEC 0x00D6
+0xED 0x00D2
+0xEE 0x00D3
+0xEF 0x00D5
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x00B3
+0xFB 0x00DB
+0xFC 0x00DC
+0xFD 0x00D9
+0xFE 0x00DA
+0xFF 0x009F
diff --git a/tests/IBM-282.TXT b/tests/IBM-282.TXT
new file mode 100644
index 0000000..a47a7b9
--- /dev/null
+++ b/tests/IBM-282.TXT
@@ -0,0 +1,256 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x00E2
+0x43 0x00E4
+0x44 0x00E0
+0x45 0x00E1
+0x46 0x007B
+0x47 0x00E5
+0x48 0x007E
+0x49 0x00F1
+0x4A 0x005B
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x0021
+0x50 0x0026
+0x51 0x00E9
+0x52 0x00EA
+0x53 0x00EB
+0x54 0x00E8
+0x55 0x00ED
+0x56 0x00EE
+0x57 0x00EF
+0x58 0x00EC
+0x59 0x00DF
+0x5A 0x005D
+0x5B 0x0024
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x005E
+0x60 0x002D
+0x61 0x002F
+0x62 0x00C2
+0x63 0x00C4
+0x64 0x00C0
+0x65 0x00C1
+0x66 0x0023
+0x67 0x00C5
+0x68 0x005C
+0x69 0x00D1
+0x6A 0x00F5
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0x00F8
+0x71 0x00C9
+0x72 0x00CA
+0x73 0x00CB
+0x74 0x00C8
+0x75 0x00CD
+0x76 0x00CE
+0x77 0x00CF
+0x78 0x00CC
+0x79 0x0060
+0x7A 0x003A
+0x7B 0x00C3
+0x7C 0x00D5
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x80 0x00D8
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x00AB
+0x8B 0x00BB
+0x8C 0x00F0
+0x8D 0x00FD
+0x8E 0x00FE
+0x8F 0x00B1
+0x90 0x00B0
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x00AA
+0x9B 0x00BA
+0x9C 0x00E6
+0x9D 0x00B8
+0x9E 0x00C6
+0x9F 0x00A4
+0xA0 0x00B5
+0xA1 0x00E7
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x00A1
+0xAB 0x00BF
+0xAC 0x00D0
+0xAD 0x00DD
+0xAE 0x00DE
+0xAF 0x00AE
+0xB0 0x00A2
+0xB1 0x00A3
+0xB2 0x00A5
+0xB3 0x00B7
+0xB4 0x00A9
+0xB5 0x00A7
+0xB6 0x00B6
+0xB7 0x00BC
+0xB8 0x00BD
+0xB9 0x00BE
+0xBA 0x00AC
+0xBB 0x007C
+0xBC 0x00AF
+0xBD 0x00A8
+0xBE 0x007D
+0xBF 0x00D7
+0xC0 0x00E3
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x00AD
+0xCB 0x00F4
+0xCC 0x00F6
+0xCD 0x00F2
+0xCE 0x00F3
+0xCF 0x00A6
+0xD0 0x00B4
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x00B9
+0xDB 0x00FB
+0xDC 0x00FC
+0xDD 0x00F9
+0xDE 0x00FA
+0xDF 0x00FF
+0xE0 0x00C7
+0xE1 0x00F7
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x00B2
+0xEB 0x00D4
+0xEC 0x00D6
+0xED 0x00D2
+0xEE 0x00D3
+0xEF 0x0040
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x00B3
+0xFB 0x00DB
+0xFC 0x00DC
+0xFD 0x00D9
+0xFE 0x00DA
+0xFF 0x009F
diff --git a/tests/IBM-284.TXT b/tests/IBM-284.TXT
new file mode 100644
index 0000000..4fd9b84
--- /dev/null
+++ b/tests/IBM-284.TXT
@@ -0,0 +1,256 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x00E2
+0x43 0x00E4
+0x44 0x00E0
+0x45 0x00E1
+0x46 0x00E3
+0x47 0x00E5
+0x48 0x00E7
+0x49 0x00A6
+0x4A 0x005B
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x007C
+0x50 0x0026
+0x51 0x00E9
+0x52 0x00EA
+0x53 0x00EB
+0x54 0x00E8
+0x55 0x00ED
+0x56 0x00EE
+0x57 0x00EF
+0x58 0x00EC
+0x59 0x00DF
+0x5A 0x005D
+0x5B 0x0024
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x00AC
+0x60 0x002D
+0x61 0x002F
+0x62 0x00C2
+0x63 0x00C4
+0x64 0x00C0
+0x65 0x00C1
+0x66 0x00C3
+0x67 0x00C5
+0x68 0x00C7
+0x69 0x0023
+0x6A 0x00F1
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0x00F8
+0x71 0x00C9
+0x72 0x00CA
+0x73 0x00CB
+0x74 0x00C8
+0x75 0x00CD
+0x76 0x00CE
+0x77 0x00CF
+0x78 0x00CC
+0x79 0x0060
+0x7A 0x003A
+0x7B 0x00D1
+0x7C 0x0040
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x80 0x00D8
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x00AB
+0x8B 0x00BB
+0x8C 0x00F0
+0x8D 0x00FD
+0x8E 0x00FE
+0x8F 0x00B1
+0x90 0x00B0
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x00AA
+0x9B 0x00BA
+0x9C 0x00E6
+0x9D 0x00B8
+0x9E 0x00C6
+0x9F 0x00A4
+0xA0 0x00B5
+0xA1 0x00A8
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x00A1
+0xAB 0x00BF
+0xAC 0x00D0
+0xAD 0x00DD
+0xAE 0x00DE
+0xAF 0x00AE
+0xB0 0x00A2
+0xB1 0x00A3
+0xB2 0x00A5
+0xB3 0x00B7
+0xB4 0x00A9
+0xB5 0x00A7
+0xB6 0x00B6
+0xB7 0x00BC
+0xB8 0x00BD
+0xB9 0x00BE
+0xBA 0x005E
+0xBB 0x0021
+0xBC 0x00AF
+0xBD 0x007E
+0xBE 0x00B4
+0xBF 0x00D7
+0xC0 0x007B
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x00AD
+0xCB 0x00F4
+0xCC 0x00F6
+0xCD 0x00F2
+0xCE 0x00F3
+0xCF 0x00F5
+0xD0 0x007D
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x00B9
+0xDB 0x00FB
+0xDC 0x00FC
+0xDD 0x00F9
+0xDE 0x00FA
+0xDF 0x00FF
+0xE0 0x005C
+0xE1 0x00F7
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x00B2
+0xEB 0x00D4
+0xEC 0x00D6
+0xED 0x00D2
+0xEE 0x00D3
+0xEF 0x00D5
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x00B3
+0xFB 0x00DB
+0xFC 0x00DC
+0xFD 0x00D9
+0xFE 0x00DA
+0xFF 0x009F
diff --git a/tests/IBM-285.TXT b/tests/IBM-285.TXT
new file mode 100644
index 0000000..07883fb
--- /dev/null
+++ b/tests/IBM-285.TXT
@@ -0,0 +1,256 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x00E2
+0x43 0x00E4
+0x44 0x00E0
+0x45 0x00E1
+0x46 0x00E3
+0x47 0x00E5
+0x48 0x00E7
+0x49 0x00F1
+0x4A 0x0024
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x007C
+0x50 0x0026
+0x51 0x00E9
+0x52 0x00EA
+0x53 0x00EB
+0x54 0x00E8
+0x55 0x00ED
+0x56 0x00EE
+0x57 0x00EF
+0x58 0x00EC
+0x59 0x00DF
+0x5A 0x0021
+0x5B 0x00A3
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x00AC
+0x60 0x002D
+0x61 0x002F
+0x62 0x00C2
+0x63 0x00C4
+0x64 0x00C0
+0x65 0x00C1
+0x66 0x00C3
+0x67 0x00C5
+0x68 0x00C7
+0x69 0x00D1
+0x6A 0x00A6
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0x00F8
+0x71 0x00C9
+0x72 0x00CA
+0x73 0x00CB
+0x74 0x00C8
+0x75 0x00CD
+0x76 0x00CE
+0x77 0x00CF
+0x78 0x00CC
+0x79 0x0060
+0x7A 0x003A
+0x7B 0x0023
+0x7C 0x0040
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x80 0x00D8
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x00AB
+0x8B 0x00BB
+0x8C 0x00F0
+0x8D 0x00FD
+0x8E 0x00FE
+0x8F 0x00B1
+0x90 0x00B0
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x00AA
+0x9B 0x00BA
+0x9C 0x00E6
+0x9D 0x00B8
+0x9E 0x00C6
+0x9F 0x00A4
+0xA0 0x00B5
+0xA1 0x00AF
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x00A1
+0xAB 0x00BF
+0xAC 0x00D0
+0xAD 0x00DD
+0xAE 0x00DE
+0xAF 0x00AE
+0xB0 0x00A2
+0xB1 0x005B
+0xB2 0x00A5
+0xB3 0x00B7
+0xB4 0x00A9
+0xB5 0x00A7
+0xB6 0x00B6
+0xB7 0x00BC
+0xB8 0x00BD
+0xB9 0x00BE
+0xBA 0x005E
+0xBB 0x005D
+0xBC 0x007E
+0xBD 0x00A8
+0xBE 0x00B4
+0xBF 0x00D7
+0xC0 0x007B
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x00AD
+0xCB 0x00F4
+0xCC 0x00F6
+0xCD 0x00F2
+0xCE 0x00F3
+0xCF 0x00F5
+0xD0 0x007D
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x00B9
+0xDB 0x00FB
+0xDC 0x00FC
+0xDD 0x00F9
+0xDE 0x00FA
+0xDF 0x00FF
+0xE0 0x005C
+0xE1 0x00F7
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x00B2
+0xEB 0x00D4
+0xEC 0x00D6
+0xED 0x00D2
+0xEE 0x00D3
+0xEF 0x00D5
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x00B3
+0xFB 0x00DB
+0xFC 0x00DC
+0xFD 0x00D9
+0xFE 0x00DA
+0xFF 0x009F
diff --git a/tests/IBM-297.TXT b/tests/IBM-297.TXT
new file mode 100644
index 0000000..fd21c48
--- /dev/null
+++ b/tests/IBM-297.TXT
@@ -0,0 +1,256 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x00E2
+0x43 0x00E4
+0x44 0x0040
+0x45 0x00E1
+0x46 0x00E3
+0x47 0x00E5
+0x48 0x005C
+0x49 0x00F1
+0x4A 0x00B0
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x0021
+0x50 0x0026
+0x51 0x007B
+0x52 0x00EA
+0x53 0x00EB
+0x54 0x007D
+0x55 0x00ED
+0x56 0x00EE
+0x57 0x00EF
+0x58 0x00EC
+0x59 0x00DF
+0x5A 0x00A7
+0x5B 0x0024
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x005E
+0x60 0x002D
+0x61 0x002F
+0x62 0x00C2
+0x63 0x00C4
+0x64 0x00C0
+0x65 0x00C1
+0x66 0x00C3
+0x67 0x00C5
+0x68 0x00C7
+0x69 0x00D1
+0x6A 0x00F9
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0x00F8
+0x71 0x00C9
+0x72 0x00CA
+0x73 0x00CB
+0x74 0x00C8
+0x75 0x00CD
+0x76 0x00CE
+0x77 0x00CF
+0x78 0x00CC
+0x79 0x00B5
+0x7A 0x003A
+0x7B 0x00A3
+0x7C 0x00E0
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x80 0x00D8
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x00AB
+0x8B 0x00BB
+0x8C 0x00F0
+0x8D 0x00FD
+0x8E 0x00FE
+0x8F 0x00B1
+0x90 0x005B
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x00AA
+0x9B 0x00BA
+0x9C 0x00E6
+0x9D 0x00B8
+0x9E 0x00C6
+0x9F 0x00A4
+0xA0 0x0060
+0xA1 0x00A8
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x00A1
+0xAB 0x00BF
+0xAC 0x00D0
+0xAD 0x00DD
+0xAE 0x00DE
+0xAF 0x00AE
+0xB0 0x00A2
+0xB1 0x0023
+0xB2 0x00A5
+0xB3 0x00B7
+0xB4 0x00A9
+0xB5 0x005D
+0xB6 0x00B6
+0xB7 0x00BC
+0xB8 0x00BD
+0xB9 0x00BE
+0xBA 0x00AC
+0xBB 0x007C
+0xBC 0x00AF
+0xBD 0x007E
+0xBE 0x00B4
+0xBF 0x00D7
+0xC0 0x00E9
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x00AD
+0xCB 0x00F4
+0xCC 0x00F6
+0xCD 0x00F2
+0xCE 0x00F3
+0xCF 0x00F5
+0xD0 0x00E8
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x00B9
+0xDB 0x00FB
+0xDC 0x00FC
+0xDD 0x00A6
+0xDE 0x00FA
+0xDF 0x00FF
+0xE0 0x00E7
+0xE1 0x00F7
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x00B2
+0xEB 0x00D4
+0xEC 0x00D6
+0xED 0x00D2
+0xEE 0x00D3
+0xEF 0x00D5
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x00B3
+0xFB 0x00DB
+0xFC 0x00DC
+0xFD 0x00D9
+0xFE 0x00DA
+0xFF 0x009F
diff --git a/tests/IBM-423.TXT b/tests/IBM-423.TXT
new file mode 100644
index 0000000..420ea30
--- /dev/null
+++ b/tests/IBM-423.TXT
@@ -0,0 +1,249 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x0391
+0x42 0x0392
+0x43 0x0393
+0x44 0x0394
+0x45 0x0395
+0x46 0x0396
+0x47 0x0397
+0x48 0x0398
+0x49 0x0399
+0x4A 0x005B
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x0021
+0x50 0x0026
+0x51 0x039A
+0x52 0x039B
+0x53 0x039C
+0x54 0x039D
+0x55 0x039E
+0x56 0x039F
+0x57 0x03A0
+0x58 0x03A1
+0x59 0x03A3
+0x5A 0x005D
+0x5B 0x0024
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x005E
+0x60 0x002D
+0x61 0x002F
+0x62 0x03A4
+0x63 0x03A5
+0x64 0x03A6
+0x65 0x03A7
+0x66 0x03A8
+0x67 0x03A9
+0x6A 0x007C
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x71 0x0386
+0x72 0x0388
+0x73 0x0389
+0x74 0x00A0
+0x75 0x038A
+0x76 0x038C
+0x77 0x038E
+0x78 0x038F
+0x79 0x0060
+0x7A 0x003A
+0x7B 0x00A3
+0x7C 0x00A7
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x80 0x00C4
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x03B1
+0x8B 0x03B2
+0x8C 0x03B3
+0x8D 0x03B4
+0x8E 0x03B5
+0x8F 0x03B6
+0x90 0x00D6
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x03B7
+0x9B 0x03B8
+0x9C 0x03B9
+0x9D 0x03BA
+0x9E 0x03BB
+0x9F 0x03BC
+0xA0 0x00DC
+0xA1 0x00A8
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x03BD
+0xAB 0x03BE
+0xAC 0x03BF
+0xAD 0x03C0
+0xAE 0x03C1
+0xAF 0x03C3
+0xB1 0x03AC
+0xB2 0x03AD
+0xB3 0x03AE
+0xB4 0x03CA
+0xB5 0x03AF
+0xB6 0x03CC
+0xB7 0x03CD
+0xB8 0x03CB
+0xB9 0x03CE
+0xBA 0x03C2
+0xBB 0x03C4
+0xBC 0x03C5
+0xBD 0x03C6
+0xBE 0x03C7
+0xBF 0x03C8
+0xC0 0x00B8
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x00AD
+0xCB 0x03C9
+0xCC 0x00E2
+0xCD 0x00E0
+0xCE 0x00E4
+0xCF 0x00EA
+0xD0 0x00B4
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x00B1
+0xDB 0x00E9
+0xDC 0x00E8
+0xDD 0x00EB
+0xDE 0x00EE
+0xDF 0x00EF
+0xE0 0x00B0
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x00BD
+0xEB 0x00F6
+0xEC 0x00F4
+0xED 0x00FB
+0xEE 0x00F9
+0xEF 0x00FC
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x00FF
+0xFB 0x00E7
+0xFC 0x00C7
+0xFF 0x009F
diff --git a/tests/IBM-424.TXT b/tests/IBM-424.TXT
new file mode 100644
index 0000000..f3f2e64
--- /dev/null
+++ b/tests/IBM-424.TXT
@@ -0,0 +1,218 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x05D0
+0x42 0x05D1
+0x43 0x05D2
+0x44 0x05D3
+0x45 0x05D4
+0x46 0x05D5
+0x47 0x05D6
+0x48 0x05D7
+0x49 0x05D8
+0x4A 0x00A2
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x007C
+0x50 0x0026
+0x51 0x05D9
+0x52 0x05DA
+0x53 0x05DB
+0x54 0x05DC
+0x55 0x05DD
+0x56 0x05DE
+0x57 0x05DF
+0x58 0x05E0
+0x59 0x05E1
+0x5A 0x0021
+0x5B 0x0024
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x00AC
+0x60 0x002D
+0x61 0x002F
+0x62 0x05E2
+0x63 0x05E3
+0x64 0x05E4
+0x65 0x05E5
+0x66 0x05E6
+0x67 0x05E7
+0x68 0x05E8
+0x69 0x05E9
+0x6A 0x00A6
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x71 0x05EA
+0x74 0x00A0
+0x78 0x2017
+0x79 0x0060
+0x7A 0x003A
+0x7B 0x0023
+0x7C 0x0040
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x00AB
+0x8B 0x00BB
+0x8F 0x00B1
+0x90 0x00B0
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9D 0x00B8
+0x9F 0x00A4
+0xA0 0x00B5
+0xA1 0x007E
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAF 0x00AE
+0xB0 0x005E
+0xB1 0x00A3
+0xB2 0x00A5
+0xB3 0x2022
+0xB4 0x00A9
+0xB5 0x00A7
+0xB6 0x00B6
+0xB7 0x00BC
+0xB8 0x00BD
+0xB9 0x00BE
+0xBA 0x005B
+0xBB 0x005D
+0xBC 0x203E
+0xBD 0x00A8
+0xBE 0x00B4
+0xBF 0x00D7
+0xC0 0x007B
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x00AD
+0xD0 0x007D
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x00B9
+0xE0 0x005C
+0xE1 0x00F7
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x00B2
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x00B3
+0xFF 0x009F
diff --git a/tests/IBM-425.TXT b/tests/IBM-425.TXT
new file mode 100644
index 0000000..46cf48b
--- /dev/null
+++ b/tests/IBM-425.TXT
@@ -0,0 +1,255 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x00E2
+0x43 0x060C
+0x44 0x00E0
+0x45 0x061B
+0x46 0x0640
+0x47 0x061F
+0x48 0x00E7
+0x49 0x0621
+0x4A 0x0622
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x007C
+0x50 0x0026
+0x51 0x00E9
+0x52 0x00EA
+0x53 0x00EB
+0x54 0x00E8
+0x55 0x0623
+0x56 0x00EE
+0x57 0x00EF
+0x58 0x0624
+0x59 0x0625
+0x5A 0x0021
+0x5B 0x0024
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x005E
+0x60 0x002D
+0x61 0x002F
+0x62 0x00C2
+0x63 0x0626
+0x64 0x00C0
+0x65 0x0627
+0x66 0x0628
+0x67 0x0629
+0x68 0x00C7
+0x69 0x062A
+0x6A 0x062B
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0x062C
+0x71 0x00C9
+0x72 0x00CA
+0x73 0x00CB
+0x74 0x00C8
+0x75 0x062D
+0x76 0x00CE
+0x77 0x00CF
+0x78 0x062E
+0x79 0x0060
+0x7A 0x003A
+0x7B 0x0023
+0x7C 0x0040
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x80 0x062F
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x00AB
+0x8B 0x00BB
+0x8C 0x0630
+0x8D 0x0631
+0x8E 0x0632
+0x8F 0x0633
+0x90 0x0634
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x0635
+0x9B 0x0636
+0x9C 0x00E6
+0x9D 0x0637
+0x9E 0x00C6
+0x9F 0x20AC
+0xA0 0x00B5
+0xA1 0x007E
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x0638
+0xAB 0x0639
+0xAC 0x063A
+0xAD 0x005B
+0xAE 0x0641
+0xAF 0x0642
+0xB0 0x0643
+0xB1 0x0644
+0xB2 0x0645
+0xB3 0x0646
+0xB4 0x00A9
+0xB5 0x00A7
+0xB6 0x0647
+0xB7 0x0152
+0xB8 0x0153
+0xB9 0x0178
+0xBA 0x0648
+0xBB 0x0649
+0xBC 0x064A
+0xBD 0x005D
+0xBE 0x064B
+0xBF 0x00D7
+0xC0 0x007B
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x00AD
+0xCB 0x00F4
+0xCC 0x064C
+0xCD 0x064D
+0xCE 0x064E
+0xCF 0x064F
+0xD0 0x007D
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x0650
+0xDB 0x00FB
+0xDC 0x00FC
+0xDD 0x00F9
+0xDE 0x0651
+0xDF 0x00FF
+0xE0 0x005C
+0xE1 0x00F7
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x0652
+0xEB 0x00D4
+0xEC 0x200C
+0xED 0x200D
+0xEE 0x200E
+0xEF 0x200F
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFB 0x00DB
+0xFC 0x00DC
+0xFD 0x00D9
+0xFE 0x00A4
+0xFF 0x009F
diff --git a/tests/IBM-4971.TXT b/tests/IBM-4971.TXT
new file mode 100644
index 0000000..11e9987
--- /dev/null
+++ b/tests/IBM-4971.TXT
@@ -0,0 +1,251 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x0391
+0x42 0x0392
+0x43 0x0393
+0x44 0x0394
+0x45 0x0395
+0x46 0x0396
+0x47 0x0397
+0x48 0x0398
+0x49 0x0399
+0x4A 0x005B
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x0021
+0x50 0x0026
+0x51 0x039A
+0x52 0x039B
+0x53 0x039C
+0x54 0x039D
+0x55 0x039E
+0x56 0x039F
+0x57 0x03A0
+0x58 0x03A1
+0x59 0x03A3
+0x5A 0x005D
+0x5B 0x0024
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x005E
+0x60 0x002D
+0x61 0x002F
+0x62 0x03A4
+0x63 0x03A5
+0x64 0x03A6
+0x65 0x03A7
+0x66 0x03A8
+0x67 0x03A9
+0x68 0x03AA
+0x69 0x03AB
+0x6A 0x007C
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0x00A8
+0x71 0x0386
+0x72 0x0388
+0x73 0x0389
+0x74 0x00A0
+0x75 0x038A
+0x76 0x038C
+0x77 0x038E
+0x78 0x038F
+0x79 0x0060
+0x7A 0x003A
+0x7B 0x0023
+0x7C 0x0040
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x80 0x0385
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x03B1
+0x8B 0x03B2
+0x8C 0x03B3
+0x8D 0x03B4
+0x8E 0x03B5
+0x8F 0x03B6
+0x90 0x00B0
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x03B7
+0x9B 0x03B8
+0x9C 0x03B9
+0x9D 0x03BA
+0x9E 0x03BB
+0x9F 0x03BC
+0xA0 0x00B4
+0xA1 0x007E
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x03BD
+0xAB 0x03BE
+0xAC 0x03BF
+0xAD 0x03C0
+0xAE 0x03C1
+0xAF 0x03C3
+0xB0 0x00A3
+0xB1 0x03AC
+0xB2 0x03AD
+0xB3 0x03AE
+0xB4 0x03CA
+0xB5 0x03AF
+0xB6 0x03CC
+0xB7 0x03CD
+0xB8 0x03CB
+0xB9 0x03CE
+0xBA 0x03C2
+0xBB 0x03C4
+0xBC 0x03C5
+0xBD 0x03C6
+0xBE 0x03C7
+0xBF 0x03C8
+0xC0 0x007B
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x00AD
+0xCB 0x03C9
+0xCC 0x0390
+0xCD 0x03B0
+0xCE 0x2018
+0xCF 0x2015
+0xD0 0x007D
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x00B1
+0xDB 0x00BD
+0xDD 0x0387
+0xDE 0x2019
+0xDF 0x00A6
+0xE0 0x005C
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x00B2
+0xEB 0x00A7
+0xEE 0x00AB
+0xEF 0x00AC
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x00B3
+0xFB 0x00A9
+0xFC 0x20AC
+0xFE 0x00BB
+0xFF 0x009F
diff --git a/tests/IBM-500.TXT b/tests/IBM-500.TXT
new file mode 100644
index 0000000..8ab4c49
--- /dev/null
+++ b/tests/IBM-500.TXT
@@ -0,0 +1,256 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x00E2
+0x43 0x00E4
+0x44 0x00E0
+0x45 0x00E1
+0x46 0x00E3
+0x47 0x00E5
+0x48 0x00E7
+0x49 0x00F1
+0x4A 0x005B
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x0021
+0x50 0x0026
+0x51 0x00E9
+0x52 0x00EA
+0x53 0x00EB
+0x54 0x00E8
+0x55 0x00ED
+0x56 0x00EE
+0x57 0x00EF
+0x58 0x00EC
+0x59 0x00DF
+0x5A 0x005D
+0x5B 0x0024
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x005E
+0x60 0x002D
+0x61 0x002F
+0x62 0x00C2
+0x63 0x00C4
+0x64 0x00C0
+0x65 0x00C1
+0x66 0x00C3
+0x67 0x00C5
+0x68 0x00C7
+0x69 0x00D1
+0x6A 0x00A6
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0x00F8
+0x71 0x00C9
+0x72 0x00CA
+0x73 0x00CB
+0x74 0x00C8
+0x75 0x00CD
+0x76 0x00CE
+0x77 0x00CF
+0x78 0x00CC
+0x79 0x0060
+0x7A 0x003A
+0x7B 0x0023
+0x7C 0x0040
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x80 0x00D8
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x00AB
+0x8B 0x00BB
+0x8C 0x00F0
+0x8D 0x00FD
+0x8E 0x00FE
+0x8F 0x00B1
+0x90 0x00B0
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x00AA
+0x9B 0x00BA
+0x9C 0x00E6
+0x9D 0x00B8
+0x9E 0x00C6
+0x9F 0x00A4
+0xA0 0x00B5
+0xA1 0x007E
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x00A1
+0xAB 0x00BF
+0xAC 0x00D0
+0xAD 0x00DD
+0xAE 0x00DE
+0xAF 0x00AE
+0xB0 0x00A2
+0xB1 0x00A3
+0xB2 0x00A5
+0xB3 0x00B7
+0xB4 0x00A9
+0xB5 0x00A7
+0xB6 0x00B6
+0xB7 0x00BC
+0xB8 0x00BD
+0xB9 0x00BE
+0xBA 0x00AC
+0xBB 0x007C
+0xBC 0x00AF
+0xBD 0x00A8
+0xBE 0x00B4
+0xBF 0x00D7
+0xC0 0x007B
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x00AD
+0xCB 0x00F4
+0xCC 0x00F6
+0xCD 0x00F2
+0xCE 0x00F3
+0xCF 0x00F5
+0xD0 0x007D
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x00B9
+0xDB 0x00FB
+0xDC 0x00FC
+0xDD 0x00F9
+0xDE 0x00FA
+0xDF 0x00FF
+0xE0 0x005C
+0xE1 0x00F7
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x00B2
+0xEB 0x00D4
+0xEC 0x00D6
+0xED 0x00D2
+0xEE 0x00D3
+0xEF 0x00D5
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x00B3
+0xFB 0x00DB
+0xFC 0x00DC
+0xFD 0x00D9
+0xFE 0x00DA
+0xFF 0x009F
diff --git a/tests/IBM-838.IRREVERSIBLE.TXT b/tests/IBM-838.IRREVERSIBLE.TXT
new file mode 100644
index 0000000..3cb51ed
--- /dev/null
+++ b/tests/IBM-838.IRREVERSIBLE.TXT
@@ -0,0 +1,5 @@
+0x51 0x0E48
+0xCA 0x0E49
+0xE1 0x0E4A
+0xFD 0x0E4B
+0xFE 0x0E4C
diff --git a/tests/IBM-838.TXT b/tests/IBM-838.TXT
new file mode 100644
index 0000000..15ff42b
--- /dev/null
+++ b/tests/IBM-838.TXT
@@ -0,0 +1,256 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x0E01
+0x43 0x0E02
+0x44 0x0E03
+0x45 0x0E04
+0x46 0x0E05
+0x47 0x0E06
+0x48 0x0E07
+0x49 0x005B
+0x4A 0x00A2
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x007C
+0x50 0x0026
+0x51 0x0E48
+0x52 0x0E08
+0x53 0x0E09
+0x54 0x0E0A
+0x55 0x0E0B
+0x56 0x0E0C
+0x57 0x0E0D
+0x58 0x0E0E
+0x59 0x005D
+0x5A 0x0021
+0x5B 0x0024
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x00AC
+0x60 0x002D
+0x61 0x002F
+0x62 0x0E0F
+0x63 0x0E10
+0x64 0x0E11
+0x65 0x0E12
+0x66 0x0E13
+0x67 0x0E14
+0x68 0x0E15
+0x69 0x005E
+0x6A 0x00A6
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0x0E3F
+0x71 0x0E4E
+0x72 0x0E16
+0x73 0x0E17
+0x74 0x0E18
+0x75 0x0E19
+0x76 0x0E1A
+0x77 0x0E1B
+0x78 0x0E1C
+0x79 0x0060
+0x7A 0x003A
+0x7B 0x0023
+0x7C 0x0040
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x80 0x0E4F
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x0E1D
+0x8B 0x0E1E
+0x8C 0x0E1F
+0x8D 0x0E20
+0x8E 0x0E21
+0x8F 0x0E22
+0x90 0x0E5A
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x0E23
+0x9B 0x0E24
+0x9C 0x0E25
+0x9D 0x0E26
+0x9E 0x0E27
+0x9F 0x0E28
+0xA0 0x0E5B
+0xA1 0x007E
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x0E29
+0xAB 0x0E2A
+0xAC 0x0E2B
+0xAD 0x0E2C
+0xAE 0x0E2D
+0xAF 0x0E2E
+0xB0 0x0E50
+0xB1 0x0E51
+0xB2 0x0E52
+0xB3 0x0E53
+0xB4 0x0E54
+0xB5 0x0E55
+0xB6 0x0E56
+0xB7 0x0E57
+0xB8 0x0E58
+0xB9 0x0E59
+0xBA 0x0E2F
+0xBB 0x0E30
+0xBC 0x0E31
+0xBD 0x0E32
+0xBE 0x0E33
+0xBF 0x0E34
+0xC0 0x007B
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x0E49
+0xCB 0x0E35
+0xCC 0x0E36
+0xCD 0x0E37
+0xCE 0x0E38
+0xCF 0x0E39
+0xD0 0x007D
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x0E3A
+0xDB 0x0E40
+0xDC 0x0E41
+0xDD 0x0E42
+0xDE 0x0E43
+0xDF 0x0E44
+0xE0 0x005C
+0xE1 0x0E4A
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x0E45
+0xEB 0x0E46
+0xEC 0x0E47
+0xED 0x0E48
+0xEE 0x0E49
+0xEF 0x0E4A
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x0E4B
+0xFB 0x0E4C
+0xFC 0x0E4D
+0xFD 0x0E4B
+0xFE 0x0E4C
+0xFF 0x009F
diff --git a/tests/IBM-870.TXT b/tests/IBM-870.TXT
new file mode 100644
index 0000000..090f3cb
--- /dev/null
+++ b/tests/IBM-870.TXT
@@ -0,0 +1,256 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x00E2
+0x43 0x00E4
+0x44 0x0163
+0x45 0x00E1
+0x46 0x0103
+0x47 0x010D
+0x48 0x00E7
+0x49 0x0107
+0x4A 0x005B
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x0021
+0x50 0x0026
+0x51 0x00E9
+0x52 0x0119
+0x53 0x00EB
+0x54 0x016F
+0x55 0x00ED
+0x56 0x00EE
+0x57 0x013E
+0x58 0x013A
+0x59 0x00DF
+0x5A 0x005D
+0x5B 0x0024
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x005E
+0x60 0x002D
+0x61 0x002F
+0x62 0x00C2
+0x63 0x00C4
+0x64 0x02DD
+0x65 0x00C1
+0x66 0x0102
+0x67 0x010C
+0x68 0x00C7
+0x69 0x0106
+0x6A 0x007C
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0x02C7
+0x71 0x00C9
+0x72 0x0118
+0x73 0x00CB
+0x74 0x016E
+0x75 0x00CD
+0x76 0x00CE
+0x77 0x013D
+0x78 0x0139
+0x79 0x0060
+0x7A 0x003A
+0x7B 0x0023
+0x7C 0x0040
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x80 0x02D8
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x015B
+0x8B 0x0148
+0x8C 0x0111
+0x8D 0x00FD
+0x8E 0x0159
+0x8F 0x015F
+0x90 0x00B0
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x0142
+0x9B 0x0144
+0x9C 0x0161
+0x9D 0x00B8
+0x9E 0x02DB
+0x9F 0x00A4
+0xA0 0x0105
+0xA1 0x007E
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x015A
+0xAB 0x0147
+0xAC 0x0110
+0xAD 0x00DD
+0xAE 0x0158
+0xAF 0x015E
+0xB0 0x02D9
+0xB1 0x0104
+0xB2 0x017C
+0xB3 0x0162
+0xB4 0x017B
+0xB5 0x00A7
+0xB6 0x017E
+0xB7 0x017A
+0xB8 0x017D
+0xB9 0x0179
+0xBA 0x0141
+0xBB 0x0143
+0xBC 0x0160
+0xBD 0x00A8
+0xBE 0x00B4
+0xBF 0x00D7
+0xC0 0x007B
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x00AD
+0xCB 0x00F4
+0xCC 0x00F6
+0xCD 0x0155
+0xCE 0x00F3
+0xCF 0x0151
+0xD0 0x007D
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x011A
+0xDB 0x0171
+0xDC 0x00FC
+0xDD 0x0165
+0xDE 0x00FA
+0xDF 0x011B
+0xE0 0x005C
+0xE1 0x00F7
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x010F
+0xEB 0x00D4
+0xEC 0x00D6
+0xED 0x0154
+0xEE 0x00D3
+0xEF 0x0150
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x010E
+0xFB 0x0170
+0xFC 0x00DC
+0xFD 0x0164
+0xFE 0x00DA
+0xFF 0x009F
diff --git a/tests/IBM-871.TXT b/tests/IBM-871.TXT
new file mode 100644
index 0000000..8e69a60
--- /dev/null
+++ b/tests/IBM-871.TXT
@@ -0,0 +1,256 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x00E2
+0x43 0x00E4
+0x44 0x00E0
+0x45 0x00E1
+0x46 0x00E3
+0x47 0x00E5
+0x48 0x00E7
+0x49 0x00F1
+0x4A 0x00DE
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x0021
+0x50 0x0026
+0x51 0x00E9
+0x52 0x00EA
+0x53 0x00EB
+0x54 0x00E8
+0x55 0x00ED
+0x56 0x00EE
+0x57 0x00EF
+0x58 0x00EC
+0x59 0x00DF
+0x5A 0x00C6
+0x5B 0x0024
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x00D6
+0x60 0x002D
+0x61 0x002F
+0x62 0x00C2
+0x63 0x00C4
+0x64 0x00C0
+0x65 0x00C1
+0x66 0x00C3
+0x67 0x00C5
+0x68 0x00C7
+0x69 0x00D1
+0x6A 0x00A6
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0x00F8
+0x71 0x00C9
+0x72 0x00CA
+0x73 0x00CB
+0x74 0x00C8
+0x75 0x00CD
+0x76 0x00CE
+0x77 0x00CF
+0x78 0x00CC
+0x79 0x00F0
+0x7A 0x003A
+0x7B 0x0023
+0x7C 0x00D0
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x80 0x00D8
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x00AB
+0x8B 0x00BB
+0x8C 0x0060
+0x8D 0x00FD
+0x8E 0x007B
+0x8F 0x00B1
+0x90 0x00B0
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x00AA
+0x9B 0x00BA
+0x9C 0x007D
+0x9D 0x00B8
+0x9E 0x005D
+0x9F 0x00A4
+0xA0 0x00B5
+0xA1 0x00F6
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x00A1
+0xAB 0x00BF
+0xAC 0x0040
+0xAD 0x00DD
+0xAE 0x005B
+0xAF 0x00AE
+0xB0 0x00A2
+0xB1 0x00A3
+0xB2 0x00A5
+0xB3 0x00B7
+0xB4 0x00A9
+0xB5 0x00A7
+0xB6 0x00B6
+0xB7 0x00BC
+0xB8 0x00BD
+0xB9 0x00BE
+0xBA 0x00AC
+0xBB 0x007C
+0xBC 0x00AF
+0xBD 0x00A8
+0xBE 0x005C
+0xBF 0x00D7
+0xC0 0x00FE
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x00AD
+0xCB 0x00F4
+0xCC 0x007E
+0xCD 0x00F2
+0xCE 0x00F3
+0xCF 0x00F5
+0xD0 0x00E6
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x00B9
+0xDB 0x00FB
+0xDC 0x00FC
+0xDD 0x00F9
+0xDE 0x00FA
+0xDF 0x00FF
+0xE0 0x00B4
+0xE1 0x00F7
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x00B2
+0xEB 0x00D4
+0xEC 0x005E
+0xED 0x00D2
+0xEE 0x00D3
+0xEF 0x00D5
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x00B3
+0xFB 0x00DB
+0xFC 0x00DC
+0xFD 0x00D9
+0xFE 0x00DA
+0xFF 0x009F
diff --git a/tests/IBM-875.TXT b/tests/IBM-875.TXT
new file mode 100644
index 0000000..2b9b31f
--- /dev/null
+++ b/tests/IBM-875.TXT
@@ -0,0 +1,250 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x0391
+0x42 0x0392
+0x43 0x0393
+0x44 0x0394
+0x45 0x0395
+0x46 0x0396
+0x47 0x0397
+0x48 0x0398
+0x49 0x0399
+0x4A 0x005B
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x0021
+0x50 0x0026
+0x51 0x039A
+0x52 0x039B
+0x53 0x039C
+0x54 0x039D
+0x55 0x039E
+0x56 0x039F
+0x57 0x03A0
+0x58 0x03A1
+0x59 0x03A3
+0x5A 0x005D
+0x5B 0x0024
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x005E
+0x60 0x002D
+0x61 0x002F
+0x62 0x03A4
+0x63 0x03A5
+0x64 0x03A6
+0x65 0x03A7
+0x66 0x03A8
+0x67 0x03A9
+0x68 0x03AA
+0x69 0x03AB
+0x6A 0x007C
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0x00A8
+0x71 0x0386
+0x72 0x0388
+0x73 0x0389
+0x74 0x00A0
+0x75 0x038A
+0x76 0x038C
+0x77 0x038E
+0x78 0x038F
+0x79 0x0060
+0x7A 0x003A
+0x7B 0x0023
+0x7C 0x0040
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x80 0x0385
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x03B1
+0x8B 0x03B2
+0x8C 0x03B3
+0x8D 0x03B4
+0x8E 0x03B5
+0x8F 0x03B6
+0x90 0x00B0
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x03B7
+0x9B 0x03B8
+0x9C 0x03B9
+0x9D 0x03BA
+0x9E 0x03BB
+0x9F 0x03BC
+0xA0 0x00B4
+0xA1 0x007E
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x03BD
+0xAB 0x03BE
+0xAC 0x03BF
+0xAD 0x03C0
+0xAE 0x03C1
+0xAF 0x03C3
+0xB0 0x00A3
+0xB1 0x03AC
+0xB2 0x03AD
+0xB3 0x03AE
+0xB4 0x03CA
+0xB5 0x03AF
+0xB6 0x03CC
+0xB7 0x03CD
+0xB8 0x03CB
+0xB9 0x03CE
+0xBA 0x03C2
+0xBB 0x03C4
+0xBC 0x03C5
+0xBD 0x03C6
+0xBE 0x03C7
+0xBF 0x03C8
+0xC0 0x007B
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x00AD
+0xCB 0x03C9
+0xCC 0x0390
+0xCD 0x03B0
+0xCE 0x2018
+0xCF 0x2015
+0xD0 0x007D
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x00B1
+0xDB 0x00BD
+0xDD 0x0387
+0xDE 0x2019
+0xDF 0x00A6
+0xE0 0x005C
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x00B2
+0xEB 0x00A7
+0xEE 0x00AB
+0xEF 0x00AC
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x00B3
+0xFB 0x00A9
+0xFE 0x00BB
+0xFF 0x009F
diff --git a/tests/IBM-880.TXT b/tests/IBM-880.TXT
new file mode 100644
index 0000000..d7eea2d
--- /dev/null
+++ b/tests/IBM-880.TXT
@@ -0,0 +1,256 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x0452
+0x43 0x0453
+0x44 0x0451
+0x45 0x0454
+0x46 0x0455
+0x47 0x0456
+0x48 0x0457
+0x49 0x0458
+0x4A 0x005B
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x0021
+0x50 0x0026
+0x51 0x0459
+0x52 0x045A
+0x53 0x045B
+0x54 0x045C
+0x55 0x045E
+0x56 0x045F
+0x57 0x042A
+0x58 0x2116
+0x59 0x0402
+0x5A 0x005D
+0x5B 0x0024
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x005E
+0x60 0x002D
+0x61 0x002F
+0x62 0x0403
+0x63 0x0401
+0x64 0x0404
+0x65 0x0405
+0x66 0x0406
+0x67 0x0407
+0x68 0x0408
+0x69 0x0409
+0x6A 0x007C
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0x040A
+0x71 0x040B
+0x72 0x040C
+0x73 0x00AD
+0x74 0x040E
+0x75 0x040F
+0x76 0x044E
+0x77 0x0430
+0x78 0x0431
+0x79 0x0060
+0x7A 0x003A
+0x7B 0x0023
+0x7C 0x0040
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x80 0x0446
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x0434
+0x8B 0x0435
+0x8C 0x0444
+0x8D 0x0433
+0x8E 0x0445
+0x8F 0x0438
+0x90 0x0439
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x043A
+0x9B 0x043B
+0x9C 0x043C
+0x9D 0x043D
+0x9E 0x043E
+0x9F 0x043F
+0xA0 0x044F
+0xA1 0x007E
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x0440
+0xAB 0x0441
+0xAC 0x0442
+0xAD 0x0443
+0xAE 0x0436
+0xAF 0x0432
+0xB0 0x044C
+0xB1 0x044B
+0xB2 0x0437
+0xB3 0x0448
+0xB4 0x044D
+0xB5 0x0449
+0xB6 0x0447
+0xB7 0x044A
+0xB8 0x042E
+0xB9 0x0410
+0xBA 0x0411
+0xBB 0x0426
+0xBC 0x0414
+0xBD 0x0415
+0xBE 0x0424
+0xBF 0x0413
+0xC0 0x007B
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x0425
+0xCB 0x0418
+0xCC 0x0419
+0xCD 0x041A
+0xCE 0x041B
+0xCF 0x041C
+0xD0 0x007D
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x041D
+0xDB 0x041E
+0xDC 0x041F
+0xDD 0x042F
+0xDE 0x0420
+0xDF 0x0421
+0xE0 0x005C
+0xE1 0x00A4
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x0422
+0xEB 0x0423
+0xEC 0x0416
+0xED 0x0412
+0xEE 0x042C
+0xEF 0x042B
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x0417
+0xFB 0x0428
+0xFC 0x042D
+0xFD 0x0429
+0xFE 0x0427
+0xFF 0x009F
diff --git a/tests/IBM-905.TXT b/tests/IBM-905.TXT
new file mode 100644
index 0000000..1ad880b
--- /dev/null
+++ b/tests/IBM-905.TXT
@@ -0,0 +1,249 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x00E2
+0x43 0x00E4
+0x44 0x00E0
+0x45 0x00E1
+0x47 0x010B
+0x48 0x007B
+0x49 0x00F1
+0x4A 0x00C7
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x0021
+0x50 0x0026
+0x51 0x00E9
+0x52 0x00EA
+0x53 0x00EB
+0x54 0x00E8
+0x55 0x00ED
+0x56 0x00EE
+0x57 0x00EF
+0x58 0x00EC
+0x59 0x00DF
+0x5A 0x011E
+0x5B 0x0130
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x005E
+0x60 0x002D
+0x61 0x002F
+0x62 0x00C2
+0x63 0x00C4
+0x64 0x00C0
+0x65 0x00C1
+0x67 0x010A
+0x68 0x005B
+0x69 0x00D1
+0x6A 0x015F
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x71 0x00C9
+0x72 0x00CA
+0x73 0x00CB
+0x74 0x00C8
+0x75 0x00CD
+0x76 0x00CE
+0x77 0x00CF
+0x78 0x00CC
+0x79 0x0131
+0x7A 0x003A
+0x7B 0x00D6
+0x7C 0x015E
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x00DC
+0x80 0x02D8
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x0127
+0x8B 0x0109
+0x8C 0x015D
+0x8D 0x016D
+0x8F 0x007C
+0x90 0x00B0
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x0125
+0x9B 0x011D
+0x9C 0x0135
+0x9D 0x00B8
+0x9F 0x00A4
+0xA0 0x00B5
+0xA1 0x00F6
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x0126
+0xAB 0x0108
+0xAC 0x015C
+0xAD 0x016C
+0xAF 0x0040
+0xB0 0x02D9
+0xB1 0x00A3
+0xB2 0x017C
+0xB3 0x007D
+0xB4 0x017B
+0xB5 0x00A7
+0xB6 0x005D
+0xB7 0x00B7
+0xB8 0x00BD
+0xB9 0x0024
+0xBA 0x0124
+0xBB 0x011C
+0xBC 0x0134
+0xBD 0x00A8
+0xBE 0x00B4
+0xBF 0x00D7
+0xC0 0x00E7
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x00AD
+0xCB 0x00F4
+0xCC 0x007E
+0xCD 0x00F2
+0xCE 0x00F3
+0xCF 0x0121
+0xD0 0x011F
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x0060
+0xDB 0x00FB
+0xDC 0x005C
+0xDD 0x00F9
+0xDE 0x00FA
+0xE0 0x00FC
+0xE1 0x00F7
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x00B2
+0xEB 0x00D4
+0xEC 0x0023
+0xED 0x00D2
+0xEE 0x00D3
+0xEF 0x0120
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x00B3
+0xFB 0x00DB
+0xFC 0x0022
+0xFD 0x00D9
+0xFE 0x00DA
+0xFF 0x009F
diff --git a/tests/IBM-924.TXT b/tests/IBM-924.TXT
new file mode 100644
index 0000000..d2c06cd
--- /dev/null
+++ b/tests/IBM-924.TXT
@@ -0,0 +1,256 @@
+0x00 0x0000
+0x01 0x0001
+0x02 0x0002
+0x03 0x0003
+0x04 0x009C
+0x05 0x0009
+0x06 0x0086
+0x07 0x007F
+0x08 0x0097
+0x09 0x008D
+0x0A 0x008E
+0x0B 0x000B
+0x0C 0x000C
+0x0D 0x000D
+0x0E 0x000E
+0x0F 0x000F
+0x10 0x0010
+0x11 0x0011
+0x12 0x0012
+0x13 0x0013
+0x14 0x009D
+0x15 0x0085
+0x16 0x0008
+0x17 0x0087
+0x18 0x0018
+0x19 0x0019
+0x1A 0x0092
+0x1B 0x008F
+0x1C 0x001C
+0x1D 0x001D
+0x1E 0x001E
+0x1F 0x001F
+0x20 0x0080
+0x21 0x0081
+0x22 0x0082
+0x23 0x0083
+0x24 0x0084
+0x25 0x000A
+0x26 0x0017
+0x27 0x001B
+0x28 0x0088
+0x29 0x0089
+0x2A 0x008A
+0x2B 0x008B
+0x2C 0x008C
+0x2D 0x0005
+0x2E 0x0006
+0x2F 0x0007
+0x30 0x0090
+0x31 0x0091
+0x32 0x0016
+0x33 0x0093
+0x34 0x0094
+0x35 0x0095
+0x36 0x0096
+0x37 0x0004
+0x38 0x0098
+0x39 0x0099
+0x3A 0x009A
+0x3B 0x009B
+0x3C 0x0014
+0x3D 0x0015
+0x3E 0x009E
+0x3F 0x001A
+0x40 0x0020
+0x41 0x00A0
+0x42 0x00E2
+0x43 0x00E4
+0x44 0x00E0
+0x45 0x00E1
+0x46 0x00E3
+0x47 0x00E5
+0x48 0x00E7
+0x49 0x00F1
+0x4A 0x00DD
+0x4B 0x002E
+0x4C 0x003C
+0x4D 0x0028
+0x4E 0x002B
+0x4F 0x007C
+0x50 0x0026
+0x51 0x00E9
+0x52 0x00EA
+0x53 0x00EB
+0x54 0x00E8
+0x55 0x00ED
+0x56 0x00EE
+0x57 0x00EF
+0x58 0x00EC
+0x59 0x00DF
+0x5A 0x0021
+0x5B 0x0024
+0x5C 0x002A
+0x5D 0x0029
+0x5E 0x003B
+0x5F 0x005E
+0x60 0x002D
+0x61 0x002F
+0x62 0x00C2
+0x63 0x00C4
+0x64 0x00C0
+0x65 0x00C1
+0x66 0x00C3
+0x67 0x00C5
+0x68 0x00C7
+0x69 0x00D1
+0x6A 0x0160
+0x6B 0x002C
+0x6C 0x0025
+0x6D 0x005F
+0x6E 0x003E
+0x6F 0x003F
+0x70 0x00F8
+0x71 0x00C9
+0x72 0x00CA
+0x73 0x00CB
+0x74 0x00C8
+0x75 0x00CD
+0x76 0x00CE
+0x77 0x00CF
+0x78 0x00CC
+0x79 0x0060
+0x7A 0x003A
+0x7B 0x0023
+0x7C 0x0040
+0x7D 0x0027
+0x7E 0x003D
+0x7F 0x0022
+0x80 0x00D8
+0x81 0x0061
+0x82 0x0062
+0x83 0x0063
+0x84 0x0064
+0x85 0x0065
+0x86 0x0066
+0x87 0x0067
+0x88 0x0068
+0x89 0x0069
+0x8A 0x00AB
+0x8B 0x00BB
+0x8C 0x00F0
+0x8D 0x00FD
+0x8E 0x00FE
+0x8F 0x00B1
+0x90 0x00B0
+0x91 0x006A
+0x92 0x006B
+0x93 0x006C
+0x94 0x006D
+0x95 0x006E
+0x96 0x006F
+0x97 0x0070
+0x98 0x0071
+0x99 0x0072
+0x9A 0x00AA
+0x9B 0x00BA
+0x9C 0x00E6
+0x9D 0x017E
+0x9E 0x00C6
+0x9F 0x20AC
+0xA0 0x00B5
+0xA1 0x007E
+0xA2 0x0073
+0xA3 0x0074
+0xA4 0x0075
+0xA5 0x0076
+0xA6 0x0077
+0xA7 0x0078
+0xA8 0x0079
+0xA9 0x007A
+0xAA 0x00A1
+0xAB 0x00BF
+0xAC 0x00D0
+0xAD 0x005B
+0xAE 0x00DE
+0xAF 0x00AE
+0xB0 0x00A2
+0xB1 0x00A3
+0xB2 0x00A5
+0xB3 0x00B7
+0xB4 0x00A9
+0xB5 0x00A7
+0xB6 0x00B6
+0xB7 0x0152
+0xB8 0x0153
+0xB9 0x0178
+0xBA 0x00AC
+0xBB 0x0161
+0xBC 0x00AF
+0xBD 0x005D
+0xBE 0x017D
+0xBF 0x00D7
+0xC0 0x007B
+0xC1 0x0041
+0xC2 0x0042
+0xC3 0x0043
+0xC4 0x0044
+0xC5 0x0045
+0xC6 0x0046
+0xC7 0x0047
+0xC8 0x0048
+0xC9 0x0049
+0xCA 0x00AD
+0xCB 0x00F4
+0xCC 0x00F6
+0xCD 0x00F2
+0xCE 0x00F3
+0xCF 0x00F5
+0xD0 0x007D
+0xD1 0x004A
+0xD2 0x004B
+0xD3 0x004C
+0xD4 0x004D
+0xD5 0x004E
+0xD6 0x004F
+0xD7 0x0050
+0xD8 0x0051
+0xD9 0x0052
+0xDA 0x00B9
+0xDB 0x00FB
+0xDC 0x00FC
+0xDD 0x00F9
+0xDE 0x00FA
+0xDF 0x00FF
+0xE0 0x005C
+0xE1 0x00F7
+0xE2 0x0053
+0xE3 0x0054
+0xE4 0x0055
+0xE5 0x0056
+0xE6 0x0057
+0xE7 0x0058
+0xE8 0x0059
+0xE9 0x005A
+0xEA 0x00B2
+0xEB 0x00D4
+0xEC 0x00D6
+0xED 0x00D2
+0xEE 0x00D3
+0xEF 0x00D5
+0xF0 0x0030
+0xF1 0x0031
+0xF2 0x0032
+0xF3 0x0033
+0xF4 0x0034
+0xF5 0x0035
+0xF6 0x0036
+0xF7 0x0037
+0xF8 0x0038
+0xF9 0x0039
+0xFA 0x00B3
+0xFB 0x00DB
+0xFC 0x00DC
+0xFD 0x00D9
+0xFE 0x00DA
+0xFF 0x009F
diff --git a/tests/Makefile.in b/tests/Makefile.in
index 8ed9d47..91ea9ea 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -197,6 +197,60 @@
$(SHELL) $(srcdir)/check-stateless $(srcdir) CP865
$(SHELL) $(srcdir)/check-stateless $(srcdir) CP869
$(SHELL) $(srcdir)/check-stateless $(srcdir) CP1125
+# /* z/OS specific encodings, i.e. EBCDIC encodings */
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-037
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-273
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-277
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-278
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-280
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-282
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-284
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-285
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-297
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-423
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-424
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-425
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-500
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-838
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-870
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-871
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-875
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-880
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-905
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-924
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-1025
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-1026
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-1047
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-1097
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-1112
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-1122
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-1123
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-1130
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-1132
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-1137
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-1140
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-1141
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-1142
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-1143
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-1144
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-1145
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-1146
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-1147
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-1148
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-1149
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-1153
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-1154
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-1155
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-1156
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-1157
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-1158
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-1160
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-1164
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-1165
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-1166
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-4971
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-12712
+ $(SHELL) $(srcdir)/check-stateless $(srcdir) IBM-16804
# /* Extra encodings */
$(SHELL) $(srcdir)/check-stateless $(srcdir) EUC-JISX0213
$(SHELL) $(srcdir)/check-stateless $(srcdir) SHIFT_JISX0213
diff --git a/tools/8bit_tab_to_h.c b/tools/8bit_tab_to_h.c
index 1add02f..f2f5227 100644
--- a/tools/8bit_tab_to_h.c
+++ b/tools/8bit_tab_to_h.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1999-2002, 2011-2012, 2016, 2018 Free Software Foundation, Inc.
+/* Copyright (C) 1999-2002, 2011-2012, 2016, 2018, 2022 Free Software Foundation, Inc.
This file is part of the GNU LIBICONV Tools.
This program is free software: you can redistribute it and/or modify
@@ -146,7 +146,7 @@
}
fprintf(f, "/*\n");
- fprintf(f, " * Copyright (C) 1999-2002 Free Software Foundation, Inc.\n");
+ fprintf(f, " * Copyright (C) 1999-2022 Free Software Foundation, Inc.\n");
fprintf(f, " * This file is part of the GNU LIBICONV Library.\n");
fprintf(f, " *\n");
fprintf(f, " * The GNU LIBICONV Library is free software; you can redistribute it\n");
diff --git a/tools/Makefile b/tools/Makefile
index bf94051..019cbe3 100644
--- a/tools/Makefile
+++ b/tools/Makefile
@@ -120,6 +120,59 @@
cp865.h \
cp869.h \
cp1125.h \
+ ebcdic037.h \
+ ebcdic273.h \
+ ebcdic277.h \
+ ebcdic278.h \
+ ebcdic280.h \
+ ebcdic282.h \
+ ebcdic284.h \
+ ebcdic285.h \
+ ebcdic297.h \
+ ebcdic423.h \
+ ebcdic424.h \
+ ebcdic425.h \
+ ebcdic500.h \
+ ebcdic838.h \
+ ebcdic870.h \
+ ebcdic871.h \
+ ebcdic875.h \
+ ebcdic880.h \
+ ebcdic905.h \
+ ebcdic924.h \
+ ebcdic1025.h \
+ ebcdic1026.h \
+ ebcdic1047.h \
+ ebcdic1097.h \
+ ebcdic1112.h \
+ ebcdic1122.h \
+ ebcdic1123.h \
+ ebcdic1130.h \
+ ebcdic1132.h \
+ ebcdic1137.h \
+ ebcdic1140.h \
+ ebcdic1141.h \
+ ebcdic1142.h \
+ ebcdic1143.h \
+ ebcdic1144.h \
+ ebcdic1145.h \
+ ebcdic1146.h \
+ ebcdic1147.h \
+ ebcdic1148.h \
+ ebcdic1149.h \
+ ebcdic1153.h \
+ ebcdic1154.h \
+ ebcdic1155.h \
+ ebcdic1156.h \
+ ebcdic1157.h \
+ ebcdic1158.h \
+ ebcdic1160.h \
+ ebcdic1164.h \
+ ebcdic1165.h \
+ ebcdic1166.h \
+ ebcdic4971.h \
+ ebcdic12712.h \
+ ebcdic16804.h \
jisx0213.h \
tds565.h \
atarist.h \
@@ -510,6 +563,166 @@
./8bit_tab_to_h CP1125 cp1125 < $<
+ebcdic037.h : ../tests/IBM-037.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-037 ebcdic037
+
+ebcdic273.h : ../tests/IBM-273.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-273 ebcdic273
+
+ebcdic277.h : ../tests/IBM-277.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-277 ebcdic277
+
+ebcdic278.h : ../tests/IBM-278.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-278 ebcdic278
+
+ebcdic280.h : ../tests/IBM-280.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-280 ebcdic280
+
+ebcdic282.h : ../tests/IBM-282.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-282 ebcdic282
+
+ebcdic284.h : ../tests/IBM-284.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-284 ebcdic284
+
+ebcdic285.h : ../tests/IBM-285.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-285 ebcdic285
+
+ebcdic297.h : ../tests/IBM-297.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-297 ebcdic297
+
+ebcdic423.h : ../tests/IBM-423.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-423 ebcdic423
+
+ebcdic424.h : ../tests/IBM-424.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-424 ebcdic424
+
+ebcdic425.h : ../tests/IBM-425.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-425 ebcdic425
+
+ebcdic500.h : ../tests/IBM-500.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-500 ebcdic500
+
+ebcdic838.h : ../tests/IBM-838.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-838 ebcdic838
+
+ebcdic870.h : ../tests/IBM-870.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-870 ebcdic870
+
+ebcdic871.h : ../tests/IBM-871.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-871 ebcdic871
+
+ebcdic875.h : ../tests/IBM-875.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-875 ebcdic875
+
+ebcdic880.h : ../tests/IBM-880.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-880 ebcdic880
+
+ebcdic905.h : ../tests/IBM-905.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-905 ebcdic905
+
+ebcdic924.h : ../tests/IBM-924.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-924 ebcdic924
+
+ebcdic1025.h : ../tests/IBM-1025.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-1025 ebcdic1025
+
+ebcdic1026.h : ../tests/IBM-1026.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-1026 ebcdic1026
+
+ebcdic1047.h : ../tests/IBM-1047.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-1047 ebcdic1047
+
+ebcdic1097.h : ../tests/IBM-1097.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-1097 ebcdic1097
+
+ebcdic1112.h : ../tests/IBM-1112.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-1112 ebcdic1112
+
+ebcdic1122.h : ../tests/IBM-1122.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-1122 ebcdic1122
+
+ebcdic1123.h : ../tests/IBM-1123.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-1123 ebcdic1123
+
+ebcdic1130.h : ../tests/IBM-1130.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-1130 ebcdic1130
+
+ebcdic1132.h : ../tests/IBM-1132.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-1132 ebcdic1132
+
+ebcdic1137.h : ../tests/IBM-1137.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-1137 ebcdic1137
+
+ebcdic1140.h : ../tests/IBM-1140.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-1140 ebcdic1140
+
+ebcdic1141.h : ../tests/IBM-1141.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-1141 ebcdic1141
+
+ebcdic1142.h : ../tests/IBM-1142.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-1142 ebcdic1142
+
+ebcdic1143.h : ../tests/IBM-1143.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-1143 ebcdic1143
+
+ebcdic1144.h : ../tests/IBM-1144.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-1144 ebcdic1144
+
+ebcdic1145.h : ../tests/IBM-1145.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-1145 ebcdic1145
+
+ebcdic1146.h : ../tests/IBM-1146.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-1146 ebcdic1146
+
+ebcdic1147.h : ../tests/IBM-1147.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-1147 ebcdic1147
+
+ebcdic1148.h : ../tests/IBM-1148.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-1148 ebcdic1148
+
+ebcdic1149.h : ../tests/IBM-1149.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-1149 ebcdic1149
+
+ebcdic1153.h : ../tests/IBM-1153.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-1153 ebcdic1153
+
+ebcdic1154.h : ../tests/IBM-1154.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-1154 ebcdic1154
+
+ebcdic1155.h : ../tests/IBM-1155.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-1155 ebcdic1155
+
+ebcdic1156.h : ../tests/IBM-1156.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-1156 ebcdic1156
+
+ebcdic1157.h : ../tests/IBM-1157.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-1157 ebcdic1157
+
+ebcdic1158.h : ../tests/IBM-1158.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-1158 ebcdic1158
+
+ebcdic1160.h : ../tests/IBM-1160.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-1160 ebcdic1160
+
+ebcdic1164.h : ../tests/IBM-1164.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-1164 ebcdic1164
+
+ebcdic1165.h : ../tests/IBM-1165.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-1165 ebcdic1165
+
+ebcdic1166.h : ../tests/IBM-1166.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-1166 ebcdic1166
+
+ebcdic4971.h : ../tests/IBM-4971.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-4971 ebcdic4971
+
+ebcdic12712.h : ../tests/IBM-12712.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-12712 ebcdic12712
+
+ebcdic16804.h : ../tests/IBM-16804.TXT 8bit_tab_to_h
+ (echo '#'; cat $<) | ./8bit_tab_to_h IBM-16804 ebcdic16804
+
+
jisx0213.h : JISX0213.TXT cjk_tab_to_h
./cjk_tab_to_h JISX0213:2004 jisx0213 < $< > $@