Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'mcs/class/I18N')
-rw-r--r--mcs/class/I18N/.cvsignore5
-rw-r--r--mcs/class/I18N/CJK/.cvsignore4
-rw-r--r--mcs/class/I18N/CJK/CP932.cs849
-rw-r--r--mcs/class/I18N/CJK/CodeTable.cs143
-rw-r--r--mcs/class/I18N/CJK/JISConvert.cs97
-rw-r--r--mcs/class/I18N/CJK/jis.tablebin0 -> 101572 bytes
-rwxr-xr-xmcs/class/I18N/CJK/list.unix3
-rwxr-xr-xmcs/class/I18N/CJK/makefile.gnu13
-rw-r--r--mcs/class/I18N/Common/.cvsignore4
-rw-r--r--mcs/class/I18N/Common/ByteEncoding.cs401
-rw-r--r--mcs/class/I18N/Common/Handlers.cs198
-rw-r--r--mcs/class/I18N/Common/Manager.cs342
-rw-r--r--mcs/class/I18N/Common/Strings.cs56
-rwxr-xr-xmcs/class/I18N/Common/list.unix4
-rwxr-xr-xmcs/class/I18N/Common/makefile.gnu13
-rw-r--r--mcs/class/I18N/I18N.build116
-rw-r--r--mcs/class/I18N/MidEast/.cvsignore4
-rw-r--r--mcs/class/I18N/MidEast/CP1254.cs399
-rw-r--r--mcs/class/I18N/MidEast/CP1255.cs393
-rw-r--r--mcs/class/I18N/MidEast/CP1256.cs771
-rw-r--r--mcs/class/I18N/MidEast/CP28596.cs545
-rw-r--r--mcs/class/I18N/MidEast/CP28598.cs261
-rw-r--r--mcs/class/I18N/MidEast/CP28599.cs241
-rw-r--r--mcs/class/I18N/MidEast/CP38598.cs261
-rw-r--r--mcs/class/I18N/MidEast/ibm-1089.ucm477
-rw-r--r--mcs/class/I18N/MidEast/ibm-5350.ucm377
-rw-r--r--mcs/class/I18N/MidEast/ibm-5351.ucm368
-rw-r--r--mcs/class/I18N/MidEast/ibm-5352.ucm551
-rw-r--r--mcs/class/I18N/MidEast/ibm-916.ucm339
-rw-r--r--mcs/class/I18N/MidEast/ibm-920.ucm378
-rwxr-xr-xmcs/class/I18N/MidEast/list.unix7
-rwxr-xr-xmcs/class/I18N/MidEast/makefile.gnu13
-rw-r--r--mcs/class/I18N/Other/.cvsignore4
-rw-r--r--mcs/class/I18N/Other/CP1251.cs403
-rw-r--r--mcs/class/I18N/Other/CP1257.cs395
-rw-r--r--mcs/class/I18N/Other/CP1258.cs399
-rw-r--r--mcs/class/I18N/Other/CP20866.cs429
-rw-r--r--mcs/class/I18N/Other/CP21866.cs429
-rw-r--r--mcs/class/I18N/Other/CP28594.cs333
-rw-r--r--mcs/class/I18N/Other/CP28595.cs345
-rw-r--r--mcs/class/I18N/Other/CP57002.cs496
-rw-r--r--mcs/class/I18N/Other/CP874.cs537
-rw-r--r--mcs/class/I18N/Other/ibm-5347.ucm377
-rw-r--r--mcs/class/I18N/Other/ibm-5353.ucm377
-rw-r--r--mcs/class/I18N/Other/ibm-5354.ucm377
-rw-r--r--mcs/class/I18N/Other/ibm-874.ucm345
-rw-r--r--mcs/class/I18N/Other/ibm-878.ucm379
-rw-r--r--mcs/class/I18N/Other/ibm-914.ucm377
-rw-r--r--mcs/class/I18N/Other/ibm-915.ucm377
-rw-r--r--mcs/class/I18N/Other/koi8-u.ucm363
-rwxr-xr-xmcs/class/I18N/Other/list.unix9
-rwxr-xr-xmcs/class/I18N/Other/makefile.gnu13
-rw-r--r--mcs/class/I18N/README158
-rwxr-xr-xmcs/class/I18N/README.mono13
-rw-r--r--mcs/class/I18N/Rare/.cvsignore4
-rw-r--r--mcs/class/I18N/Rare/CP1026.cs895
-rw-r--r--mcs/class/I18N/Rare/CP1047.cs895
-rw-r--r--mcs/class/I18N/Rare/CP1140.cs895
-rw-r--r--mcs/class/I18N/Rare/CP1141.cs895
-rw-r--r--mcs/class/I18N/Rare/CP1142.cs895
-rw-r--r--mcs/class/I18N/Rare/CP1143.cs895
-rw-r--r--mcs/class/I18N/Rare/CP1144.cs895
-rw-r--r--mcs/class/I18N/Rare/CP1145.cs895
-rw-r--r--mcs/class/I18N/Rare/CP1146.cs895
-rw-r--r--mcs/class/I18N/Rare/CP1147.cs895
-rw-r--r--mcs/class/I18N/Rare/CP1148.cs895
-rw-r--r--mcs/class/I18N/Rare/CP1149.cs895
-rw-r--r--mcs/class/I18N/Rare/CP20273.cs897
-rw-r--r--mcs/class/I18N/Rare/CP20277.cs897
-rw-r--r--mcs/class/I18N/Rare/CP20278.cs897
-rw-r--r--mcs/class/I18N/Rare/CP20280.cs897
-rw-r--r--mcs/class/I18N/Rare/CP20284.cs897
-rw-r--r--mcs/class/I18N/Rare/CP20285.cs897
-rw-r--r--mcs/class/I18N/Rare/CP20290.cs865
-rw-r--r--mcs/class/I18N/Rare/CP20297.cs897
-rw-r--r--mcs/class/I18N/Rare/CP20420.cs1073
-rw-r--r--mcs/class/I18N/Rare/CP20424.cs829
-rw-r--r--mcs/class/I18N/Rare/CP20871.cs897
-rw-r--r--mcs/class/I18N/Rare/CP21025.cs917
-rw-r--r--mcs/class/I18N/Rare/CP37.cs897
-rw-r--r--mcs/class/I18N/Rare/CP500.cs897
-rw-r--r--mcs/class/I18N/Rare/CP708.cs545
-rw-r--r--mcs/class/I18N/Rare/CP852.cs679
-rw-r--r--mcs/class/I18N/Rare/CP855.cs679
-rw-r--r--mcs/class/I18N/Rare/CP857.cs673
-rw-r--r--mcs/class/I18N/Rare/CP858.cs679
-rw-r--r--mcs/class/I18N/Rare/CP862.cs685
-rw-r--r--mcs/class/I18N/Rare/CP864.cs861
-rw-r--r--mcs/class/I18N/Rare/CP866.cs689
-rw-r--r--mcs/class/I18N/Rare/CP869.cs681
-rw-r--r--mcs/class/I18N/Rare/CP870.cs895
-rw-r--r--mcs/class/I18N/Rare/CP875.cs913
-rw-r--r--mcs/class/I18N/Rare/ibm-1025.ucm371
-rw-r--r--mcs/class/I18N/Rare/ibm-1026.ucm372
-rw-r--r--mcs/class/I18N/Rare/ibm-1047.ucm378
-rw-r--r--mcs/class/I18N/Rare/ibm-1089.ucm477
-rw-r--r--mcs/class/I18N/Rare/ibm-1140.ucm378
-rw-r--r--mcs/class/I18N/Rare/ibm-1141.ucm378
-rw-r--r--mcs/class/I18N/Rare/ibm-1142.ucm378
-rw-r--r--mcs/class/I18N/Rare/ibm-1143.ucm378
-rw-r--r--mcs/class/I18N/Rare/ibm-1144.ucm378
-rw-r--r--mcs/class/I18N/Rare/ibm-1145.ucm378
-rw-r--r--mcs/class/I18N/Rare/ibm-1146.ucm378
-rw-r--r--mcs/class/I18N/Rare/ibm-1147.ucm378
-rw-r--r--mcs/class/I18N/Rare/ibm-1148.ucm378
-rw-r--r--mcs/class/I18N/Rare/ibm-1149.ucm378
-rw-r--r--mcs/class/I18N/Rare/ibm-273.ucm379
-rw-r--r--mcs/class/I18N/Rare/ibm-277.ucm379
-rw-r--r--mcs/class/I18N/Rare/ibm-278.ucm379
-rw-r--r--mcs/class/I18N/Rare/ibm-280.ucm379
-rw-r--r--mcs/class/I18N/Rare/ibm-284.ucm379
-rw-r--r--mcs/class/I18N/Rare/ibm-285.ucm379
-rw-r--r--mcs/class/I18N/Rare/ibm-290.ucm349
-rw-r--r--mcs/class/I18N/Rare/ibm-297.ucm379
-rw-r--r--mcs/class/I18N/Rare/ibm-37.ucm379
-rw-r--r--mcs/class/I18N/Rare/ibm-420.ucm453
-rw-r--r--mcs/class/I18N/Rare/ibm-424.ucm339
-rw-r--r--mcs/class/I18N/Rare/ibm-500.ucm379
-rw-r--r--mcs/class/I18N/Rare/ibm-852.ucm415
-rw-r--r--mcs/class/I18N/Rare/ibm-855.ucm415
-rw-r--r--mcs/class/I18N/Rare/ibm-857.ucm412
-rw-r--r--mcs/class/I18N/Rare/ibm-858.ucm415
-rw-r--r--mcs/class/I18N/Rare/ibm-862.ucm416
-rw-r--r--mcs/class/I18N/Rare/ibm-864.ucm498
-rw-r--r--mcs/class/I18N/Rare/ibm-866.ucm416
-rw-r--r--mcs/class/I18N/Rare/ibm-869.ucm408
-rw-r--r--mcs/class/I18N/Rare/ibm-870.ucm372
-rw-r--r--mcs/class/I18N/Rare/ibm-871.ucm379
-rw-r--r--mcs/class/I18N/Rare/ibm-875.ucm367
-rwxr-xr-xmcs/class/I18N/Rare/list.unix37
-rwxr-xr-xmcs/class/I18N/Rare/makefile.gnu13
-rw-r--r--mcs/class/I18N/West/.cvsignore4
-rw-r--r--mcs/class/I18N/West/CP10000.cs405
-rw-r--r--mcs/class/I18N/West/CP10079.cs381
-rw-r--r--mcs/class/I18N/West/CP1250.cs399
-rw-r--r--mcs/class/I18N/West/CP1252.cs399
-rw-r--r--mcs/class/I18N/West/CP1253.cs405
-rw-r--r--mcs/class/I18N/West/CP28592.cs471
-rw-r--r--mcs/class/I18N/West/CP28593.cs319
-rw-r--r--mcs/class/I18N/West/CP28597.cs339
-rw-r--r--mcs/class/I18N/West/CP28605.cs327
-rw-r--r--mcs/class/I18N/West/CP437.cs681
-rw-r--r--mcs/class/I18N/West/CP850.cs681
-rw-r--r--mcs/class/I18N/West/CP860.cs681
-rw-r--r--mcs/class/I18N/West/CP861.cs681
-rw-r--r--mcs/class/I18N/West/CP863.cs679
-rw-r--r--mcs/class/I18N/West/CP865.cs681
-rw-r--r--mcs/class/I18N/West/ibm-1275.ucm380
-rw-r--r--mcs/class/I18N/West/ibm-437.ucm416
-rw-r--r--mcs/class/I18N/West/ibm-4909.ucm374
-rw-r--r--mcs/class/I18N/West/ibm-5346.ucm377
-rw-r--r--mcs/class/I18N/West/ibm-5348.ucm377
-rw-r--r--mcs/class/I18N/West/ibm-5349.ucm376
-rw-r--r--mcs/class/I18N/West/ibm-850.ucm416
-rw-r--r--mcs/class/I18N/West/ibm-860.ucm416
-rw-r--r--mcs/class/I18N/West/ibm-861.ucm416
-rw-r--r--mcs/class/I18N/West/ibm-863.ucm415
-rw-r--r--mcs/class/I18N/West/ibm-865.ucm416
-rw-r--r--mcs/class/I18N/West/ibm-912.ucm446
-rw-r--r--mcs/class/I18N/West/ibm-913.ucm370
-rw-r--r--mcs/class/I18N/West/ibm-923.ucm377
-rwxr-xr-xmcs/class/I18N/West/list.unix15
-rw-r--r--mcs/class/I18N/West/mac-is.ucm290
-rwxr-xr-xmcs/class/I18N/West/makefile.gnu13
-rwxr-xr-xmcs/class/I18N/makefile.gnu14
-rwxr-xr-xmcs/class/I18N/mklist.sh40
-rw-r--r--mcs/class/I18N/tools/.cvsignore2
-rwxr-xr-xmcs/class/I18N/tools/cvt.sh547
-rw-r--r--mcs/class/I18N/tools/ucm2cp.c599
-rw-r--r--mcs/class/I18N/tools/uni2tab.c411
170 files changed, 75474 insertions, 0 deletions
diff --git a/mcs/class/I18N/.cvsignore b/mcs/class/I18N/.cvsignore
new file mode 100644
index 00000000000..1d613ca39bc
--- /dev/null
+++ b/mcs/class/I18N/.cvsignore
@@ -0,0 +1,5 @@
+Makefile
+Makefile.in
+.deps
+*.dll
+I18N-handlers.def
diff --git a/mcs/class/I18N/CJK/.cvsignore b/mcs/class/I18N/CJK/.cvsignore
new file mode 100644
index 00000000000..0c2ee6906fa
--- /dev/null
+++ b/mcs/class/I18N/CJK/.cvsignore
@@ -0,0 +1,4 @@
+list
+.makefrag
+.response
+library-deps.stamp
diff --git a/mcs/class/I18N/CJK/CP932.cs b/mcs/class/I18N/CJK/CP932.cs
new file mode 100644
index 00000000000..1a3044a412e
--- /dev/null
+++ b/mcs/class/I18N/CJK/CP932.cs
@@ -0,0 +1,849 @@
+/*
+ * CP932.cs - Japanese (Shift-JIS) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+namespace I18N.CJK
+{
+
+using System;
+using System.Text;
+using I18N.Common;
+
+public unsafe class CP932 : Encoding
+{
+ // Magic number used by Windows for the Shift-JIS code page.
+ private const int SHIFTJIS_CODE_PAGE = 932;
+
+ // Internal state.
+ private JISConvert convert;
+
+ // Constructor.
+ public CP932() : base(SHIFTJIS_CODE_PAGE)
+ {
+ // Load the JIS conversion tables.
+ convert = JISConvert.Convert;
+ }
+
+ // Get the number of bytes needed to encode a character buffer.
+ public override int GetByteCount(char[] chars, int index, int count)
+ {
+ // Validate the parameters.
+ if(chars == null)
+ {
+ throw new ArgumentNullException("chars");
+ }
+ if(index < 0 || index > chars.Length)
+ {
+ throw new ArgumentOutOfRangeException
+ ("index", Strings.GetString("ArgRange_Array"));
+ }
+ if(count < 0 || count > (chars.Length - index))
+ {
+ throw new ArgumentOutOfRangeException
+ ("count", Strings.GetString("ArgRange_Array"));
+ }
+
+ // Determine the length of the final output.
+ int length = 0;
+ int ch, value;
+#if __PNET__
+ byte *cjkToJis = convert.cjkToJis;
+ byte *extraToJis = convert.extraToJis;
+#else
+ byte[] cjkToJis = convert.cjkToJis;
+ byte[] extraToJis = convert.extraToJis;
+#endif
+ while(count > 0)
+ {
+ ch = chars[index++];
+ --count;
+ ++length;
+ if(ch < 0x0080)
+ {
+ // Character maps to itself.
+ continue;
+ }
+ else if(ch < 0x0100)
+ {
+ // Check for special Latin 1 characters that
+ // can be mapped to double-byte code points.
+ if(ch == 0x00A2 || ch == 0x00A3 || ch == 0x00A7 ||
+ ch == 0x00A8 || ch == 0x00AC || ch == 0x00B0 ||
+ ch == 0x00B1 || ch == 0x00B4 || ch == 0x00B6 ||
+ ch == 0x00D7 || ch == 0x00F7)
+ {
+ ++length;
+ }
+ }
+ else if(ch >= 0x0391 && ch <= 0x0451)
+ {
+ // Greek subset characters.
+ ++length;
+ }
+ else if(ch >= 0x2010 && ch <= 0x9FA5)
+ {
+ // This range contains the bulk of the CJK set.
+ value = (ch - 0x2010) * 2;
+ value = ((int)(cjkToJis[value])) |
+ (((int)(cjkToJis[value + 1])) << 8);
+ if(value >= 0x0100)
+ {
+ ++length;
+ }
+ }
+ else if(ch >= 0xFF01 && ch <= 0xFFEF)
+ {
+ // This range contains extra characters,
+ // including half-width katakana.
+ value = (ch - 0xFF01) * 2;
+ value = ((int)(extraToJis[value])) |
+ (((int)(extraToJis[value + 1])) << 8);
+ if(value >= 0x0100)
+ {
+ ++length;
+ }
+ }
+ }
+
+ // Return the length to the caller.
+ return length;
+ }
+
+ // Get the bytes that result from encoding a character buffer.
+ public override int GetBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ // Validate the parameters.
+ if(chars == null)
+ {
+ throw new ArgumentNullException("chars");
+ }
+ if(bytes == null)
+ {
+ throw new ArgumentNullException("bytes");
+ }
+ if(charIndex < 0 || charIndex > chars.Length)
+ {
+ throw new ArgumentOutOfRangeException
+ ("charIndex", Strings.GetString("ArgRange_Array"));
+ }
+ if(charCount < 0 || charCount > (chars.Length - charIndex))
+ {
+ throw new ArgumentOutOfRangeException
+ ("charCount", Strings.GetString("ArgRange_Array"));
+ }
+ if(byteIndex < 0 || byteIndex > bytes.Length)
+ {
+ throw new ArgumentOutOfRangeException
+ ("byteIndex", Strings.GetString("ArgRange_Array"));
+ }
+
+ // Convert the characters into their byte form.
+ int posn = byteIndex;
+ int byteLength = bytes.Length;
+ int ch, value;
+#if __PNET__
+ byte *cjkToJis = convert.cjkToJis;
+ byte *greekToJis = convert.greekToJis;
+ byte *extraToJis = convert.extraToJis;
+#else
+ byte[] cjkToJis = convert.cjkToJis;
+ byte[] greekToJis = convert.greekToJis;
+ byte[] extraToJis = convert.extraToJis;
+#endif
+ while(charCount > 0)
+ {
+ ch = chars[charIndex++];
+ --charCount;
+ if(posn >= byteLength)
+ {
+ throw new ArgumentException
+ (Strings.GetString("Arg_InsufficientSpace"),
+ "bytes");
+ }
+ if(ch < 0x0080)
+ {
+ // Character maps to itself.
+ bytes[posn++] = (byte)ch;
+ continue;
+ }
+ else if(ch < 0x0100)
+ {
+ // Check for special Latin 1 characters that
+ // can be mapped to double-byte code points.
+ if(ch == 0x00A2 || ch == 0x00A3 || ch == 0x00A7 ||
+ ch == 0x00A8 || ch == 0x00AC || ch == 0x00B0 ||
+ ch == 0x00B1 || ch == 0x00B4 || ch == 0x00B6 ||
+ ch == 0x00D7 || ch == 0x00F7)
+ {
+ if((posn + 1) >= byteLength)
+ {
+ throw new ArgumentException
+ (Strings.GetString
+ ("Arg_InsufficientSpace"), "bytes");
+ }
+ switch(ch)
+ {
+ case 0x00A2:
+ bytes[posn++] = (byte)0x81;
+ bytes[posn++] = (byte)0x91;
+ break;
+
+ case 0x00A3:
+ bytes[posn++] = (byte)0x81;
+ bytes[posn++] = (byte)0x92;
+ break;
+
+ case 0x00A7:
+ bytes[posn++] = (byte)0x81;
+ bytes[posn++] = (byte)0x98;
+ break;
+
+ case 0x00A8:
+ bytes[posn++] = (byte)0x81;
+ bytes[posn++] = (byte)0x4E;
+ break;
+
+ case 0x00AC:
+ bytes[posn++] = (byte)0x81;
+ bytes[posn++] = (byte)0xCA;
+ break;
+
+ case 0x00B0:
+ bytes[posn++] = (byte)0x81;
+ bytes[posn++] = (byte)0x8B;
+ break;
+
+ case 0x00B1:
+ bytes[posn++] = (byte)0x81;
+ bytes[posn++] = (byte)0x7D;
+ break;
+
+ case 0x00B4:
+ bytes[posn++] = (byte)0x81;
+ bytes[posn++] = (byte)0x4C;
+ break;
+
+ case 0x00B6:
+ bytes[posn++] = (byte)0x81;
+ bytes[posn++] = (byte)0xF7;
+ break;
+
+ case 0x00D7:
+ bytes[posn++] = (byte)0x81;
+ bytes[posn++] = (byte)0x7E;
+ break;
+
+ case 0x00F7:
+ bytes[posn++] = (byte)0x81;
+ bytes[posn++] = (byte)0x80;
+ break;
+ }
+ }
+ else if(ch == 0x00A5)
+ {
+ // Yen sign.
+ bytes[posn++] = (byte)0x5C;
+ }
+ else
+ {
+ // Invalid character.
+ bytes[posn++] = (byte)'?';
+ }
+ continue;
+ }
+ else if(ch >= 0x0391 && ch <= 0x0451)
+ {
+ // Greek subset characters.
+ value = (ch - 0x0391) * 2;
+ value = ((int)(greekToJis[value])) |
+ (((int)(greekToJis[value + 1])) << 8);
+ }
+ else if(ch >= 0x2010 && ch <= 0x9FA5)
+ {
+ // This range contains the bulk of the CJK set.
+ value = (ch - 0x2010) * 2;
+ value = ((int)(cjkToJis[value])) |
+ (((int)(cjkToJis[value + 1])) << 8);
+ }
+ else if(ch >= 0xFF01 && ch <= 0xFFEF)
+ {
+ // This range contains extra characters,
+ // including half-width katakana.
+ value = (ch - 0xFF01) * 2;
+ value = ((int)(extraToJis[value])) |
+ (((int)(extraToJis[value + 1])) << 8);
+ }
+ else
+ {
+ // Invalid character.
+ value = 0;
+ }
+ if(value == 0)
+ {
+ bytes[posn++] = (byte)'?';
+ }
+ else if(value < 0x0100)
+ {
+ bytes[posn++] = (byte)value;
+ }
+ else if((posn + 1) >= byteLength)
+ {
+ throw new ArgumentException
+ (Strings.GetString("Arg_InsufficientSpace"),
+ "bytes");
+ }
+ else if(value < 0x8000)
+ {
+ // JIS X 0208 character.
+ value -= 0x0100;
+ ch = (value / 0xBC);
+ value = (value % 0xBC) + 0x40;
+ if(value >= 0x7F)
+ {
+ ++value;
+ }
+ if(ch < (0x9F - 0x80))
+ {
+ bytes[posn++] = (byte)(ch + 0x81);
+ }
+ else
+ {
+ bytes[posn++] = (byte)(ch - (0x9F - 0x80) + 0xE0);
+ }
+ bytes[posn++] = (byte)value;
+ }
+ else
+ {
+ // JIS X 0212 character, which Shift-JIS doesn't
+ // support, but we've already allocated two slots.
+ bytes[posn++] = (byte)'?';
+ bytes[posn++] = (byte)'?';
+ }
+ }
+
+ // Return the final length to the caller.
+ return posn - byteIndex;
+ }
+
+ // Get the number of characters needed to decode a byte buffer.
+ public override int GetCharCount(byte[] bytes, int index, int count)
+ {
+ // Validate the parameters.
+ if(bytes == null)
+ {
+ throw new ArgumentNullException("bytes");
+ }
+ if(index < 0 || index > bytes.Length)
+ {
+ throw new ArgumentOutOfRangeException
+ ("index", Strings.GetString("ArgRange_Array"));
+ }
+ if(count < 0 || count > (bytes.Length - index))
+ {
+ throw new ArgumentOutOfRangeException
+ ("count", Strings.GetString("ArgRange_Array"));
+ }
+
+ // Determine the total length of the converted string.
+ int length = 0;
+ int byteval;
+ while(count > 0)
+ {
+ byteval = bytes[index++];
+ --count;
+ ++length;
+ if(byteval < 0x80)
+ {
+ // Ordinary ASCII/Latin1 character, or the
+ // single-byte Yen or overline signs.
+ continue;
+ }
+ else if(byteval >= 0xA1 && byteval <= 0xDF)
+ {
+ // Half-width katakana.
+ continue;
+ }
+ else if(byteval < 0x81 ||
+ (byteval > 0x9F && byteval < 0xE0) ||
+ byteval > 0xEF)
+ {
+ // Invalid first byte.
+ continue;
+ }
+ if(count == 0)
+ {
+ // Missing second byte.
+ continue;
+ }
+ ++index;
+ --count;
+ }
+
+ // Return the total length.
+ return length;
+ }
+
+ // Get the characters that result from decoding a byte buffer.
+ public override int GetChars(byte[] bytes, int byteIndex, int byteCount,
+ char[] chars, int charIndex)
+ {
+ // Validate the parameters.
+ if(bytes == null)
+ {
+ throw new ArgumentNullException("bytes");
+ }
+ if(chars == null)
+ {
+ throw new ArgumentNullException("chars");
+ }
+ if(byteIndex < 0 || byteIndex > bytes.Length)
+ {
+ throw new ArgumentOutOfRangeException
+ ("byteIndex", Strings.GetString("ArgRange_Array"));
+ }
+ if(byteCount < 0 || byteCount > (bytes.Length - byteIndex))
+ {
+ throw new ArgumentOutOfRangeException
+ ("byteCount", Strings.GetString("ArgRange_Array"));
+ }
+ if(charIndex < 0 || charIndex > chars.Length)
+ {
+ throw new ArgumentOutOfRangeException
+ ("charIndex", Strings.GetString("ArgRange_Array"));
+ }
+
+ // Determine the total length of the converted string.
+ int charLength = chars.Length;
+ int posn = charIndex;
+ int length = 0;
+ int byteval, value;
+#if __PNET__
+ byte *table = convert.jisx0208ToUnicode;
+#else
+ byte[] table = convert.jisx0208ToUnicode;
+#endif
+ while(byteCount > 0)
+ {
+ byteval = bytes[byteIndex++];
+ --byteCount;
+ ++length;
+ if(posn >= charLength)
+ {
+ throw new ArgumentException
+ (Strings.GetString("Arg_InsufficientSpace"),
+ "chars");
+ }
+ if(byteval == 0x5C)
+ {
+ // Yen sign.
+ chars[posn++] = '\u00A5';
+ continue;
+ }
+ else if(byteval == 0x7E)
+ {
+ // Overline symbol.
+ chars[posn++] = '\u203E';
+ continue;
+ }
+ else if(byteval < 0x80)
+ {
+ // Ordinary ASCII/Latin1 character.
+ chars[posn++] = (char)byteval;
+ continue;
+ }
+ else if(byteval >= 0xA1 && byteval <= 0xDF)
+ {
+ // Half-width katakana.
+ chars[posn++] = (char)(byteval - 0xA1 + 0xFF61);
+ continue;
+ }
+ else if(byteval >= 0x81 && byteval <= 0x9F)
+ {
+ value = (byteval - 0x81) * 0xBC;
+ }
+ else if(byteval >= 0xE0 && byteval <= 0xEF)
+ {
+ value = (byteval - 0xE0 + (0xA0 - 0x81)) * 0xBC;
+ }
+ else
+ {
+ // Invalid first byte.
+ chars[posn++] = '?';
+ continue;
+ }
+ if(byteCount == 0)
+ {
+ // Missing second byte.
+ chars[posn++] = '?';
+ continue;
+ }
+ byteval = bytes[byteIndex++];
+ --byteCount;
+ if(byteval >= 0x40 && byteval <= 0x7E)
+ {
+ value += (byteval - 0x40);
+ }
+ else if(byteval >= 0x80 && byteval <= 0xFC)
+ {
+ value += (byteval - 0x80 + 0x3F);
+ }
+ else
+ {
+ // Invalid second byte.
+ chars[posn++] = '?';
+ continue;
+ }
+ value *= 2;
+ value = ((int)(table[value])) |
+ (((int)(table[value + 1])) << 8);
+ if(value != 0)
+ {
+ chars[posn++] = (char)value;
+ }
+ else
+ {
+ chars[posn++] = '?';
+ }
+ }
+
+ // Return the total length.
+ return posn - charIndex;
+ }
+
+ // Get the maximum number of bytes needed to encode a
+ // specified number of characters.
+ public override int GetMaxByteCount(int charCount)
+ {
+ if(charCount < 0)
+ {
+ throw new ArgumentOutOfRangeException
+ ("charCount",
+ Strings.GetString("ArgRange_NonNegative"));
+ }
+ return charCount * 2;
+ }
+
+ // Get the maximum number of characters needed to decode a
+ // specified number of bytes.
+ public override int GetMaxCharCount(int byteCount)
+ {
+ if(byteCount < 0)
+ {
+ throw new ArgumentOutOfRangeException
+ ("byteCount",
+ Strings.GetString("ArgRange_NonNegative"));
+ }
+ return byteCount;
+ }
+
+ // Get a decoder that handles a rolling Shift-JIS state.
+ public override Decoder GetDecoder()
+ {
+ return new CP932Decoder(convert);
+ }
+
+#if !ECMA_COMPAT
+
+ // Get the mail body name for this encoding.
+ public override String BodyName
+ {
+ get
+ {
+ return "iso-2022-jp";
+ }
+ }
+
+ // Get the human-readable name for this encoding.
+ public override String EncodingName
+ {
+ get
+ {
+ return "Japanese (Shift-JIS)";
+ }
+ }
+
+ // Get the mail agent header name for this encoding.
+ public override String HeaderName
+ {
+ get
+ {
+ return "iso-2022-jp";
+ }
+ }
+
+ // Determine if this encoding can be displayed in a Web browser.
+ public override bool IsBrowserDisplay
+ {
+ get
+ {
+ return true;
+ }
+ }
+
+ // Determine if this encoding can be saved from a Web browser.
+ public override bool IsBrowserSave
+ {
+ get
+ {
+ return true;
+ }
+ }
+
+ // Determine if this encoding can be displayed in a mail/news agent.
+ public override bool IsMailNewsDisplay
+ {
+ get
+ {
+ return true;
+ }
+ }
+
+ // Determine if this encoding can be saved from a mail/news agent.
+ public override bool IsMailNewsSave
+ {
+ get
+ {
+ return true;
+ }
+ }
+
+ // Get the IANA-preferred Web name for this encoding.
+ public override String WebName
+ {
+ get
+ {
+ return "shift_jis";
+ }
+ }
+
+ // Get the Windows code page represented by this object.
+ public override int WindowsCodePage
+ {
+ get
+ {
+ return SHIFTJIS_CODE_PAGE;
+ }
+ }
+
+#endif // !ECMA_COMPAT
+
+ // Decoder that handles a rolling Shift-JIS state.
+ private sealed class CP932Decoder : Decoder
+ {
+ private JISConvert convert;
+ private int lastByte;
+
+ // Constructor.
+ public CP932Decoder(JISConvert convert)
+ {
+ this.convert = convert;
+ this.lastByte = 0;
+ }
+
+ // Override inherited methods.
+ public override int GetCharCount(byte[] bytes, int index, int count)
+ {
+ // Validate the parameters.
+ if(bytes == null)
+ {
+ throw new ArgumentNullException("bytes");
+ }
+ if(index < 0 || index > bytes.Length)
+ {
+ throw new ArgumentOutOfRangeException
+ ("index", Strings.GetString("ArgRange_Array"));
+ }
+ if(count < 0 || count > (bytes.Length - index))
+ {
+ throw new ArgumentOutOfRangeException
+ ("count", Strings.GetString("ArgRange_Array"));
+ }
+
+ // Determine the total length of the converted string.
+ int length = 0;
+ int byteval;
+ int last = lastByte;
+ while(count > 0)
+ {
+ byteval = bytes[index++];
+ --count;
+ if(last == 0)
+ {
+ if((byteval >= 0x81 && byteval <= 0x9F) ||
+ (byteval >= 0xE0 && byteval <= 0xEF))
+ {
+ // First byte in a double-byte sequence.
+ last = byteval;
+ }
+ ++length;
+ }
+ else
+ {
+ // Second byte in a double-byte sequence.
+ last = 0;
+ }
+ }
+
+ // Return the total length.
+ return length;
+ }
+ public override int GetChars(byte[] bytes, int byteIndex,
+ int byteCount, char[] chars,
+ int charIndex)
+ {
+ // Validate the parameters.
+ if(bytes == null)
+ {
+ throw new ArgumentNullException("bytes");
+ }
+ if(chars == null)
+ {
+ throw new ArgumentNullException("chars");
+ }
+ if(byteIndex < 0 || byteIndex > bytes.Length)
+ {
+ throw new ArgumentOutOfRangeException
+ ("byteIndex", Strings.GetString("ArgRange_Array"));
+ }
+ if(byteCount < 0 || byteCount > (bytes.Length - byteIndex))
+ {
+ throw new ArgumentOutOfRangeException
+ ("byteCount", Strings.GetString("ArgRange_Array"));
+ }
+ if(charIndex < 0 || charIndex > chars.Length)
+ {
+ throw new ArgumentOutOfRangeException
+ ("charIndex", Strings.GetString("ArgRange_Array"));
+ }
+
+ // Decode the bytes in the buffer.
+ int posn = charIndex;
+ int charLength = chars.Length;
+ int byteval, value;
+ int last = lastByte;
+#if __PNET__
+ byte *table = convert.jisx0208ToUnicode;
+#else
+ byte[] table = convert.jisx0208ToUnicode;
+#endif
+ while(byteCount > 0)
+ {
+ byteval = bytes[byteIndex++];
+ --byteCount;
+ if(last == 0)
+ {
+ if(posn >= charLength)
+ {
+ throw new ArgumentException
+ (Strings.GetString
+ ("Arg_InsufficientSpace"), "chars");
+ }
+ if((byteval >= 0x81 && byteval <= 0x9F) ||
+ (byteval >= 0xE0 && byteval <= 0xEF))
+ {
+ // First byte in a double-byte sequence.
+ last = byteval;
+ }
+ else if(byteval == 0x5C)
+ {
+ // Yen sign.
+ chars[posn++] ='\u00A5';
+ }
+ else if(byteval == 0x7E)
+ {
+ // Overline symbol.
+ chars[posn++] ='\u203E';
+ }
+ else if(byteval < 0x80)
+ {
+ // Ordinary ASCII/Latin1 character.
+ chars[posn++] = (char)byteval;
+ }
+ else if(byteval >= 0xA1 && byteval <= 0xDF)
+ {
+ // Half-width katakana character.
+ chars[posn++] = (char)(byteval - 0xA1 + 0xFF61);
+ }
+ else
+ {
+ // Invalid first byte.
+ chars[posn++] = '?';
+ }
+ }
+ else
+ {
+ // Second byte in a double-byte sequence.
+ if(last >= 0x81 && last <= 0x9F)
+ {
+ value = (last - 0x81) * 0xBC;
+ }
+ else
+ {
+ value = (last - 0xE0 + (0xA0 - 0x81)) * 0xBC;
+ }
+ last = 0;
+ if(byteval >= 0x40 && byteval <= 0x7E)
+ {
+ value += (byteval - 0x40);
+ }
+ else if(byteval >= 0x80 && byteval <= 0xFC)
+ {
+ value += (byteval - 0x80 + 0x3F);
+ }
+ else
+ {
+ // Invalid second byte.
+ chars[posn++] = '?';
+ continue;
+ }
+ value *= 2;
+ value = ((int)(table[value])) |
+ (((int)(table[value + 1])) << 8);
+ if(value != 0)
+ {
+ chars[posn++] = (char)value;
+ }
+ else
+ {
+ chars[posn++] = '?';
+ }
+ }
+ }
+ lastByte = last;
+
+ // Return the final length to the caller.
+ return posn - charIndex;
+ }
+
+ } // class CP932Decoder
+
+}; // class CP932
+
+public class ENCshift_jis : CP932
+{
+ public ENCshift_jis() : base() {}
+
+}; // class ENCshift_jis
+
+}; // namespace I18N.CJK
diff --git a/mcs/class/I18N/CJK/CodeTable.cs b/mcs/class/I18N/CJK/CodeTable.cs
new file mode 100644
index 00000000000..2f766f59cbe
--- /dev/null
+++ b/mcs/class/I18N/CJK/CodeTable.cs
@@ -0,0 +1,143 @@
+/*
+ * CodeTable.cs - Implementation of the "System.Text.CodeTable" class.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+namespace I18N.CJK
+{
+
+using System;
+using System.IO;
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using I18N.Common;
+
+// This class assists encoding classes for the large CJK character
+// sets by providing pointer access to table data in the resource
+// section of the current assembly.
+//
+// Code tables are named by their resource (e.g. "jis.table") and
+// contain one or more sections. Each section has an 8-byte header,
+// consisting of a 32-bit section number and a 32-bit section length.
+// The alignment of the data in the table is not guaranteed.
+
+internal unsafe sealed class CodeTable : IDisposable
+{
+ // Internal state.
+ private Stream stream;
+
+ // Load a code table from the resource section of this assembly.
+ public CodeTable(String name)
+ {
+ stream = (Assembly.GetExecutingAssembly()
+ .GetManifestResourceStream(name));
+ if(stream == null)
+ {
+ throw new NotSupportedException
+ (String.Format
+ (Strings.GetString("NotSupp_MissingCodeTable"),
+ name));
+ }
+ }
+
+ // Implement the IDisposable interface.
+ public void Dispose()
+ {
+ if(stream != null)
+ {
+ stream.Close();
+ stream = null;
+ }
+ }
+
+ // Get the starting address for a particular section within
+ // the code table. This address is guaranteed to persist
+ // after "Dispose" is called.
+#if __PNET__
+ public byte *GetSection(int num)
+#else
+ public byte[] GetSection(int num)
+#endif
+ {
+ // If the table has been disposed, then bail out.
+ if(stream == null)
+ {
+ return null;
+ }
+
+ // Scan through the stream looking for the section.
+ long posn = 0;
+ long length = stream.Length;
+ byte[] header = new byte [8];
+ int sectNum, sectLen;
+ while((posn + 8) <= length)
+ {
+ // Read the next header block.
+ stream.Position = posn;
+ if(stream.Read(header, 0, 8) != 8)
+ {
+ break;
+ }
+
+ // Decode the fields in the header block.
+ sectNum = ((int)(header[0])) |
+ (((int)(header[1])) << 8) |
+ (((int)(header[2])) << 16) |
+ (((int)(header[3])) << 24);
+ sectLen = ((int)(header[4])) |
+ (((int)(header[5])) << 8) |
+ (((int)(header[6])) << 16) |
+ (((int)(header[7])) << 24);
+
+ // Is this the section we are looking for?
+ if(sectNum == num)
+ {
+#if __PNET__
+ return GetAddress(stream, posn + 8);
+#else
+ byte[] buf = new byte [sectLen];
+ if(stream.Read(buf, 0, sectLen) != sectLen)
+ {
+ break;
+ }
+ return buf;
+#endif
+ }
+
+ // Advance to the next section.
+ posn += 8 + sectLen;
+ }
+
+ // We were unable to find the requested section.
+ return null;
+ }
+
+#if __PNET__
+ // Back door access into the engine to get the address of
+ // an offset within a manifest resource stream.
+ [MethodImpl(MethodImplOptions.InternalCall)]
+ extern private static byte *GetAddress(Stream stream, long position);
+#endif
+
+}; // class CodeTable
+
+}; // namespace I18N.CJK
diff --git a/mcs/class/I18N/CJK/JISConvert.cs b/mcs/class/I18N/CJK/JISConvert.cs
new file mode 100644
index 00000000000..17191f8a15e
--- /dev/null
+++ b/mcs/class/I18N/CJK/JISConvert.cs
@@ -0,0 +1,97 @@
+/*
+ * JISConvert.cs - Implementation of the "System.Text.JISConvert" class.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+namespace I18N.CJK
+{
+
+using System;
+
+// This class assists other encoding classes in converting back
+// and forth between JIS character sets and Unicode. It uses
+// several large tables to do this, some of which are stored in
+// the resource section of the assembly for efficient access.
+
+internal unsafe sealed class JISConvert
+{
+ // Table identifiers.
+ private const int JISX0208_To_Unicode = 1;
+ private const int JISX0212_To_Unicode = 2;
+ private const int CJK_To_JIS = 3;
+ private const int Greek_To_JIS = 4;
+ private const int Extra_To_JIS = 5;
+
+ // Public access to the conversion tables.
+#if __PNET__
+ public byte *jisx0208ToUnicode;
+ public byte *jisx0212ToUnicode;
+ public byte *cjkToJis;
+ public byte *greekToJis;
+ public byte *extraToJis;
+#else
+ public byte[] jisx0208ToUnicode;
+ public byte[] jisx0212ToUnicode;
+ public byte[] cjkToJis;
+ public byte[] greekToJis;
+ public byte[] extraToJis;
+#endif
+
+ // Constructor.
+ private JISConvert()
+ {
+ // Load the conversion tables.
+ CodeTable table = new CodeTable("jis.table");
+ jisx0208ToUnicode = table.GetSection(JISX0208_To_Unicode);
+ jisx0212ToUnicode = table.GetSection(JISX0212_To_Unicode);
+ cjkToJis = table.GetSection(CJK_To_JIS);
+ greekToJis = table.GetSection(Greek_To_JIS);
+ extraToJis = table.GetSection(Extra_To_JIS);
+ table.Dispose();
+ }
+
+ // The one and only JIS conversion object in the system.
+ private static JISConvert convert;
+
+ // Get the primary JIS conversion object.
+ public static JISConvert Convert
+ {
+ get
+ {
+ lock(typeof(JISConvert))
+ {
+ if(convert != null)
+ {
+ return convert;
+ }
+ else
+ {
+ convert = new JISConvert();
+ return convert;
+ }
+ }
+ }
+ }
+
+}; // class JISConvert
+
+}; // namespace I18N.CJK
diff --git a/mcs/class/I18N/CJK/jis.table b/mcs/class/I18N/CJK/jis.table
new file mode 100644
index 00000000000..80a6f78f46d
--- /dev/null
+++ b/mcs/class/I18N/CJK/jis.table
Binary files differ
diff --git a/mcs/class/I18N/CJK/list.unix b/mcs/class/I18N/CJK/list.unix
new file mode 100755
index 00000000000..8713b3ebdf1
--- /dev/null
+++ b/mcs/class/I18N/CJK/list.unix
@@ -0,0 +1,3 @@
+CP932.cs
+CodeTable.cs
+JISConvert.cs
diff --git a/mcs/class/I18N/CJK/makefile.gnu b/mcs/class/I18N/CJK/makefile.gnu
new file mode 100755
index 00000000000..917db24bcac
--- /dev/null
+++ b/mcs/class/I18N/CJK/makefile.gnu
@@ -0,0 +1,13 @@
+topdir = ../../..
+
+LIBRARY = $(topdir)/class/lib/I18N.CJK.dll
+
+LIB_LIST = list.unix
+LIB_FLAGS = --unsafe --resource jis.table -r corlib -r mscorlib -r I18N
+
+SOURCES_INCLUDE=*.cs
+SOURCES_EXCLUDE=
+
+export MONO_PATH_PREFIX = $(topdir)/class/lib:
+
+include $(topdir)/class/library.make
diff --git a/mcs/class/I18N/Common/.cvsignore b/mcs/class/I18N/Common/.cvsignore
new file mode 100644
index 00000000000..0c2ee6906fa
--- /dev/null
+++ b/mcs/class/I18N/Common/.cvsignore
@@ -0,0 +1,4 @@
+list
+.makefrag
+.response
+library-deps.stamp
diff --git a/mcs/class/I18N/Common/ByteEncoding.cs b/mcs/class/I18N/Common/ByteEncoding.cs
new file mode 100644
index 00000000000..9ea1ef2b01d
--- /dev/null
+++ b/mcs/class/I18N/Common/ByteEncoding.cs
@@ -0,0 +1,401 @@
+/*
+ * ByteEncoding.cs - Implementation of the "I18N.Common.ByteEncoding" class.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+namespace I18N.Common
+{
+
+using System;
+using System.Text;
+
+// This class provides an abstract base for encodings that use a single
+// byte per character. The bulk of the work is done in this class, with
+// subclasses providing implementations of the "ToBytes" methods to perform
+// the char->byte conversion.
+
+public abstract class ByteEncoding : Encoding
+{
+ // Internal state.
+ protected char[] toChars;
+ protected String encodingName;
+ protected String bodyName;
+ protected String headerName;
+ protected String webName;
+ protected bool isBrowserDisplay;
+ protected bool isBrowserSave;
+ protected bool isMailNewsDisplay;
+ protected bool isMailNewsSave;
+ protected int windowsCodePage;
+
+ // Constructor.
+ protected ByteEncoding(int codePage, char[] toChars,
+ String encodingName, String bodyName,
+ String headerName, String webName,
+ bool isBrowserDisplay, bool isBrowserSave,
+ bool isMailNewsDisplay, bool isMailNewsSave,
+ int windowsCodePage)
+ : base(codePage)
+ {
+ this.toChars = toChars;
+ this.encodingName = encodingName;
+ this.bodyName = bodyName;
+ this.headerName = headerName;
+ this.webName = webName;
+ this.isBrowserDisplay = isBrowserDisplay;
+ this.isBrowserSave = isBrowserSave;
+ this.isMailNewsDisplay = isMailNewsDisplay;
+ this.isMailNewsSave = isMailNewsSave;
+ this.windowsCodePage = windowsCodePage;
+ }
+
+ // Get the number of bytes needed to encode a character buffer.
+ public override int GetByteCount(char[] chars, int index, int count)
+ {
+ if(chars == null)
+ {
+ throw new ArgumentNullException("chars");
+ }
+ if(index < 0 || index > chars.Length)
+ {
+ throw new ArgumentOutOfRangeException
+ ("index", Strings.GetString("ArgRange_Array"));
+ }
+ if(count < 0 || count > (chars.Length - index))
+ {
+ throw new ArgumentOutOfRangeException
+ ("count", Strings.GetString("ArgRange_Array"));
+ }
+ return count;
+ }
+
+ // Convenience wrappers for "GetByteCount".
+ public override int GetByteCount(String s)
+ {
+ if(s == null)
+ {
+ throw new ArgumentNullException("s");
+ }
+ return s.Length;
+ }
+
+ // Convert an array of characters into a byte buffer,
+ // once the parameters have been validated.
+ protected abstract void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex);
+
+ // Convert a string into a byte buffer, once the parameters
+ // have been validated.
+ protected abstract void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex);
+
+ // Get the bytes that result from encoding a character buffer.
+ public override int GetBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ if(chars == null)
+ {
+ throw new ArgumentNullException("chars");
+ }
+ if(bytes == null)
+ {
+ throw new ArgumentNullException("bytes");
+ }
+ if(charIndex < 0 || charIndex > chars.Length)
+ {
+ throw new ArgumentOutOfRangeException
+ ("charIndex", Strings.GetString("ArgRange_Array"));
+ }
+ if(charCount < 0 || charCount > (chars.Length - charIndex))
+ {
+ throw new ArgumentOutOfRangeException
+ ("charCount", Strings.GetString("ArgRange_Array"));
+ }
+ if(byteIndex < 0 || byteIndex > bytes.Length)
+ {
+ throw new ArgumentOutOfRangeException
+ ("byteIndex", Strings.GetString("ArgRange_Array"));
+ }
+ if((bytes.Length - byteIndex) < charCount)
+ {
+ throw new ArgumentException
+ (Strings.GetString("Arg_InsufficientSpace"));
+ }
+ ToBytes(chars, charIndex, charCount, bytes, byteIndex);
+ return charCount;
+ }
+
+ // Convenience wrappers for "GetBytes".
+ public override int GetBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ if(s == null)
+ {
+ throw new ArgumentNullException("s");
+ }
+ if(bytes == null)
+ {
+ throw new ArgumentNullException("bytes");
+ }
+ if(charIndex < 0 || charIndex > s.Length)
+ {
+ throw new ArgumentOutOfRangeException
+ ("charIndex",
+ Strings.GetString("ArgRange_StringIndex"));
+ }
+ if(charCount < 0 || charCount > (s.Length - charIndex))
+ {
+ throw new ArgumentOutOfRangeException
+ ("charCount",
+ Strings.GetString("ArgRange_StringRange"));
+ }
+ if(byteIndex < 0 || byteIndex > bytes.Length)
+ {
+ throw new ArgumentOutOfRangeException
+ ("byteIndex", Strings.GetString("ArgRange_Array"));
+ }
+ if((bytes.Length - byteIndex) < charCount)
+ {
+ throw new ArgumentException
+ (Strings.GetString("Arg_InsufficientSpace"));
+ }
+ ToBytes(s, charIndex, charCount, bytes, byteIndex);
+ return charCount;
+ }
+
+ // Get the number of characters needed to decode a byte buffer.
+ public override int GetCharCount(byte[] bytes, int index, int count)
+ {
+ if(bytes == null)
+ {
+ throw new ArgumentNullException("bytes");
+ }
+ if(index < 0 || index > bytes.Length)
+ {
+ throw new ArgumentOutOfRangeException
+ ("index", Strings.GetString("ArgRange_Array"));
+ }
+ if(count < 0 || count > (bytes.Length - index))
+ {
+ throw new ArgumentOutOfRangeException
+ ("count", Strings.GetString("ArgRange_Array"));
+ }
+ return count;
+ }
+
+ // Get the characters that result from decoding a byte buffer.
+ public override int GetChars(byte[] bytes, int byteIndex, int byteCount,
+ char[] chars, int charIndex)
+ {
+ if(bytes == null)
+ {
+ throw new ArgumentNullException("bytes");
+ }
+ if(chars == null)
+ {
+ throw new ArgumentNullException("chars");
+ }
+ if(byteIndex < 0 || byteIndex > bytes.Length)
+ {
+ throw new ArgumentOutOfRangeException
+ ("byteIndex", Strings.GetString("ArgRange_Array"));
+ }
+ if(byteCount < 0 || byteCount > (bytes.Length - byteIndex))
+ {
+ throw new ArgumentOutOfRangeException
+ ("byteCount", Strings.GetString("ArgRange_Array"));
+ }
+ if(charIndex < 0 || charIndex > chars.Length)
+ {
+ throw new ArgumentOutOfRangeException
+ ("charIndex", Strings.GetString("ArgRange_Array"));
+ }
+ if((chars.Length - charIndex) < byteCount)
+ {
+ throw new ArgumentException
+ (Strings.GetString("Arg_InsufficientSpace"));
+ }
+ int count = byteCount;
+ char[] cvt = toChars;
+ while(count-- > 0)
+ {
+ chars[charIndex++] = cvt[(int)(bytes[byteIndex++])];
+ }
+ return byteCount;
+ }
+
+ // Get the maximum number of bytes needed to encode a
+ // specified number of characters.
+ public override int GetMaxByteCount(int charCount)
+ {
+ if(charCount < 0)
+ {
+ throw new ArgumentOutOfRangeException
+ ("charCount",
+ Strings.GetString("ArgRange_NonNegative"));
+ }
+ return charCount;
+ }
+
+ // Get the maximum number of characters needed to decode a
+ // specified number of bytes.
+ public override int GetMaxCharCount(int byteCount)
+ {
+ if(byteCount < 0)
+ {
+ throw new ArgumentOutOfRangeException
+ ("byteCount",
+ Strings.GetString("ArgRange_NonNegative"));
+ }
+ return byteCount;
+ }
+
+ // Decode a buffer of bytes into a string.
+ public override String GetString(byte[] bytes, int index, int count)
+ {
+ if(bytes == null)
+ {
+ throw new ArgumentNullException("bytes");
+ }
+ if(index < 0 || index > bytes.Length)
+ {
+ throw new ArgumentOutOfRangeException
+ ("index", Strings.GetString("ArgRange_Array"));
+ }
+ if(count < 0 || count > (bytes.Length - index))
+ {
+ throw new ArgumentOutOfRangeException
+ ("count", Strings.GetString("ArgRange_Array"));
+ }
+ StringBuilder s = new StringBuilder();
+ char[] cvt = toChars;
+ while(count-- > 0)
+ {
+ s.Append(cvt[(int)(bytes[index++])]);
+ }
+ return s.ToString();
+ }
+ public override String GetString(byte[] bytes)
+ {
+ if(bytes == null)
+ {
+ throw new ArgumentNullException("bytes");
+ }
+ int count = bytes.Length;
+ int posn = 0;
+ StringBuilder s = new StringBuilder();
+ char[] cvt = toChars;
+ while(count-- > 0)
+ {
+ s.Append(cvt[(int)(bytes[posn++])]);
+ }
+ return s.ToString();
+ }
+
+#if !ECMA_COMPAT
+
+ // Get the mail body name for this encoding.
+ public override String BodyName
+ {
+ get
+ {
+ return bodyName;
+ }
+ }
+
+ // Get the human-readable name for this encoding.
+ public override String EncodingName
+ {
+ get
+ {
+ return encodingName;
+ }
+ }
+
+ // Get the mail agent header name for this encoding.
+ public override String HeaderName
+ {
+ get
+ {
+ return headerName;
+ }
+ }
+
+ // Determine if this encoding can be displayed in a Web browser.
+ public override bool IsBrowserDisplay
+ {
+ get
+ {
+ return isBrowserDisplay;
+ }
+ }
+
+ // Determine if this encoding can be saved from a Web browser.
+ public override bool IsBrowserSave
+ {
+ get
+ {
+ return isBrowserSave;
+ }
+ }
+
+ // Determine if this encoding can be displayed in a mail/news agent.
+ public override bool IsMailNewsDisplay
+ {
+ get
+ {
+ return isMailNewsDisplay;
+ }
+ }
+
+ // Determine if this encoding can be saved from a mail/news agent.
+ public override bool IsMailNewsSave
+ {
+ get
+ {
+ return isMailNewsSave;
+ }
+ }
+
+ // Get the IANA-preferred Web name for this encoding.
+ public override String WebName
+ {
+ get
+ {
+ return webName;
+ }
+ }
+
+ // Get the Windows code page represented by this object.
+ public override int WindowsCodePage
+ {
+ get
+ {
+ return windowsCodePage;
+ }
+ }
+
+#endif // !ECMA_COMPAT
+
+}; // class ByteEncoding
+
+}; // namespace I18N.Encoding
diff --git a/mcs/class/I18N/Common/Handlers.cs b/mcs/class/I18N/Common/Handlers.cs
new file mode 100644
index 00000000000..89ede0c69c0
--- /dev/null
+++ b/mcs/class/I18N/Common/Handlers.cs
@@ -0,0 +1,198 @@
+/*
+ * Handlers.cs - Implementation of the "I18N.Common.Handlers" class.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+namespace I18N.Common
+{
+
+using System;
+
+// This class provides an internal list of handlers, for runtime
+// engines that do not implement the altered "GetFile" semantics.
+// The list must be kept up to date manually.
+
+public sealed class Handlers
+{
+ public static readonly String[] List = {
+ "I18N.CJK.CP932",
+ "I18N.CJK.ENCshift_jis",
+ "I18N.MidEast.CP1254",
+ "I18N.MidEast.ENCwindows_1254",
+ "I18N.MidEast.CP1255",
+ "I18N.MidEast.ENCwindows_1255",
+ "I18N.MidEast.CP1256",
+ "I18N.MidEast.ENCwindows_1256",
+ "I18N.MidEast.CP28596",
+ "I18N.MidEast.ENCiso_8859_6",
+ "I18N.MidEast.CP28598",
+ "I18N.MidEast.ENCiso_8859_8",
+ "I18N.MidEast.CP28599",
+ "I18N.MidEast.ENCiso_8859_9",
+ "I18N.MidEast.CP38598",
+ "I18N.MidEast.ENCwindows_38598",
+ "I18N.Other.CP1251",
+ "I18N.Other.ENCwindows_1251",
+ "I18N.Other.CP1257",
+ "I18N.Other.ENCwindows_1257",
+ "I18N.Other.CP1258",
+ "I18N.Other.ENCwindows_1258",
+ "I18N.Other.CP20866",
+ "I18N.Other.ENCkoi8_r",
+ "I18N.Other.CP21866",
+ "I18N.Other.ENCkoi8_u",
+ "I18N.Other.CP28594",
+ "I18N.Other.ENCiso_8859_4",
+ "I18N.Other.CP28595",
+ "I18N.Other.ENCiso_8859_5",
+ "I18N.Other.ISCIIEncoding",
+ "I18N.Other.CP57002",
+ "I18N.Other.CP57003",
+ "I18N.Other.CP57004",
+ "I18N.Other.CP57005",
+ "I18N.Other.CP57006",
+ "I18N.Other.CP57007",
+ "I18N.Other.CP57008",
+ "I18N.Other.CP57009",
+ "I18N.Other.CP57010",
+ "I18N.Other.CP57011",
+ "I18N.Other.ENCx_iscii_de",
+ "I18N.Other.ENCx_iscii_be",
+ "I18N.Other.ENCx_iscii_ta",
+ "I18N.Other.ENCx_iscii_te",
+ "I18N.Other.ENCx_iscii_as",
+ "I18N.Other.ENCx_iscii_or",
+ "I18N.Other.ENCx_iscii_ka",
+ "I18N.Other.ENCx_iscii_ma",
+ "I18N.Other.ENCx_iscii_gu",
+ "I18N.Other.ENCx_iscii_pa",
+ "I18N.Other.CP874",
+ "I18N.Other.ENCwindows_874",
+ "I18N.Rare.CP1026",
+ "I18N.Rare.ENCibm1026",
+ "I18N.Rare.CP1047",
+ "I18N.Rare.ENCibm1047",
+ "I18N.Rare.CP1140",
+ "I18N.Rare.ENCibm01140",
+ "I18N.Rare.CP1141",
+ "I18N.Rare.ENCibm01141",
+ "I18N.Rare.CP1142",
+ "I18N.Rare.ENCibm01142",
+ "I18N.Rare.CP1143",
+ "I18N.Rare.ENCibm01143",
+ "I18N.Rare.CP1144",
+ "I18N.Rare.ENCibm1144",
+ "I18N.Rare.CP1145",
+ "I18N.Rare.ENCibm1145",
+ "I18N.Rare.CP1146",
+ "I18N.Rare.ENCibm1146",
+ "I18N.Rare.CP1147",
+ "I18N.Rare.ENCibm1147",
+ "I18N.Rare.CP1148",
+ "I18N.Rare.ENCibm1148",
+ "I18N.Rare.CP1149",
+ "I18N.Rare.ENCibm1149",
+ "I18N.Rare.CP20273",
+ "I18N.Rare.ENCibm273",
+ "I18N.Rare.CP20277",
+ "I18N.Rare.ENCibm277",
+ "I18N.Rare.CP20278",
+ "I18N.Rare.ENCibm278",
+ "I18N.Rare.CP20280",
+ "I18N.Rare.ENCibm280",
+ "I18N.Rare.CP20284",
+ "I18N.Rare.ENCibm284",
+ "I18N.Rare.CP20285",
+ "I18N.Rare.ENCibm285",
+ "I18N.Rare.CP20290",
+ "I18N.Rare.ENCibm290",
+ "I18N.Rare.CP20297",
+ "I18N.Rare.ENCibm297",
+ "I18N.Rare.CP20420",
+ "I18N.Rare.ENCibm420",
+ "I18N.Rare.CP20424",
+ "I18N.Rare.ENCibm424",
+ "I18N.Rare.CP20871",
+ "I18N.Rare.ENCibm871",
+ "I18N.Rare.CP21025",
+ "I18N.Rare.ENCibm1025",
+ "I18N.Rare.CP37",
+ "I18N.Rare.ENCibm037",
+ "I18N.Rare.CP500",
+ "I18N.Rare.ENCibm500",
+ "I18N.Rare.CP708",
+ "I18N.Rare.ENCasmo_708",
+ "I18N.Rare.CP852",
+ "I18N.Rare.ENCibm852",
+ "I18N.Rare.CP855",
+ "I18N.Rare.ENCibm855",
+ "I18N.Rare.CP857",
+ "I18N.Rare.ENCibm857",
+ "I18N.Rare.CP858",
+ "I18N.Rare.ENCibm00858",
+ "I18N.Rare.CP862",
+ "I18N.Rare.ENCibm862",
+ "I18N.Rare.CP864",
+ "I18N.Rare.ENCibm864",
+ "I18N.Rare.CP866",
+ "I18N.Rare.ENCibm866",
+ "I18N.Rare.CP869",
+ "I18N.Rare.ENCibm869",
+ "I18N.Rare.CP870",
+ "I18N.Rare.ENCibm870",
+ "I18N.Rare.CP875",
+ "I18N.Rare.ENCibm875",
+ "I18N.West.CP10000",
+ "I18N.West.ENCmacintosh",
+ "I18N.West.CP10079",
+ "I18N.West.ENCx_mac_icelandic",
+ "I18N.West.CP1250",
+ "I18N.West.ENCwindows_1250",
+ "I18N.West.CP1252",
+ "I18N.West.ENCwindows_1252",
+ "I18N.West.CP1253",
+ "I18N.West.ENCwindows_1253",
+ "I18N.West.CP28592",
+ "I18N.West.ENCiso_8859_2",
+ "I18N.West.CP28593",
+ "I18N.West.ENCiso_8859_3",
+ "I18N.West.CP28597",
+ "I18N.West.ENCiso_8859_7",
+ "I18N.West.CP28605",
+ "I18N.West.ENCiso_8859_15",
+ "I18N.West.CP437",
+ "I18N.West.ENCibm437",
+ "I18N.West.CP850",
+ "I18N.West.ENCibm850",
+ "I18N.West.CP860",
+ "I18N.West.ENCibm860",
+ "I18N.West.CP861",
+ "I18N.West.ENCibm861",
+ "I18N.West.CP863",
+ "I18N.West.ENCibm863",
+ "I18N.West.CP865",
+ "I18N.West.ENCibm865"
+ };
+
+}; // class Handlers
+
+}; // namespace I18N.Common
diff --git a/mcs/class/I18N/Common/Manager.cs b/mcs/class/I18N/Common/Manager.cs
new file mode 100644
index 00000000000..6cf4fde14d8
--- /dev/null
+++ b/mcs/class/I18N/Common/Manager.cs
@@ -0,0 +1,342 @@
+/*
+ * Manager.cs - Implementation of the "I18N.Common.Manager" class.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+namespace I18N.Common
+{
+
+using System;
+using System.IO;
+using System.Text;
+using System.Globalization;
+using System.Collections;
+using System.Reflection;
+using System.Security;
+
+// This class provides the primary entry point into the I18N
+// library. Users of the library start by getting the value
+// of the "PrimaryManager" property. They then invoke methods
+// on the manager to obtain further I18N information.
+
+public class Manager
+{
+ // The primary I18N manager.
+ private static Manager manager;
+
+ // Internal state.
+ private Hashtable handlers; // List of all handler classes.
+ private Hashtable active; // Currently active handlers.
+ private Hashtable assemblies; // Currently loaded region assemblies.
+
+ // Constructor.
+ private Manager()
+ {
+ handlers = new Hashtable (CaseInsensitiveHashCodeProvider.Default,
+ CaseInsensitiveComparer.Default);
+ active = new Hashtable(16);
+ assemblies = new Hashtable(8);
+ LoadClassList();
+ }
+
+ // Get the primary I18N manager instance.
+ public static Manager PrimaryManager
+ {
+ get
+ {
+ lock(typeof(Manager))
+ {
+ if(manager == null)
+ {
+ manager = new Manager();
+ }
+ return manager;
+ }
+ }
+ }
+
+ // Normalize a name.
+ private static String Normalize(String name)
+ {
+ #if ECMA_COMPAT
+ return (name.ToLower()).Replace('-', '_');
+ #else
+ return (name.ToLower(CultureInfo.InvariantCulture))
+ .Replace('-', '_');
+ #endif
+ }
+
+ // Get an encoding object for a specific code page.
+ // Returns NULL if the code page is not available.
+ public Encoding GetEncoding(int codePage)
+ {
+ return (Instantiate("CP" + codePage.ToString()) as Encoding);
+ }
+
+ // Get an encoding object for a specific Web encoding.
+ // Returns NULL if the encoding is not available.
+ public Encoding GetEncoding(String name)
+ {
+ // Validate the parameter.
+ if(name == null)
+ {
+ return null;
+ }
+
+ // Normalize the encoding name.
+ name = Normalize(name);
+
+ // Try to find a class called "ENCname".
+ Encoding e = Instantiate ("ENC" + name) as Encoding;
+ if (e == null)
+ e = Instantiate (name) as Encoding;
+
+ return e;
+ }
+
+ // List of hex digits for use by "GetCulture".
+ private const String hex = "0123456789abcdef";
+
+ // Get a specific culture by identifier. Returns NULL
+ // if the culture information is not available.
+ public CultureInfo GetCulture(int culture, bool useUserOverride)
+ {
+ // Create the hex version of the culture identifier.
+ StringBuilder builder = new StringBuilder();
+ builder.Append(hex[(culture >> 12) & 0x0F]);
+ builder.Append(hex[(culture >> 8) & 0x0F]);
+ builder.Append(hex[(culture >> 4) & 0x0F]);
+ builder.Append(hex[culture & 0x0F]);
+ String name = builder.ToString();
+
+ // Try looking for an override culture handler.
+ if(useUserOverride)
+ {
+ Object obj = Instantiate("CIDO" + name);
+ if(obj != null)
+ {
+ return (obj as CultureInfo);
+ }
+ }
+
+ // Look for the generic non-override culture.
+ return (Instantiate("CID" + name) as CultureInfo);
+ }
+
+ // Get a specific culture by name. Returns NULL if the
+ // culture informaion is not available.
+ public CultureInfo GetCulture(String name, bool useUserOverride)
+ {
+ // Validate the parameter.
+ if(name == null)
+ {
+ return null;
+ }
+
+ // Normalize the culture name.
+ name = Normalize(name);
+
+ // Try looking for an override culture handler.
+ if(useUserOverride)
+ {
+ Object obj = Instantiate("CNO" + name.ToString());
+ if(obj != null)
+ {
+ return (obj as CultureInfo);
+ }
+ }
+
+ // Look for the generic non-override culture.
+ return (Instantiate("CN" + name.ToString()) as CultureInfo);
+ }
+
+ // Instantiate a handler class. Returns null if it is not
+ // possible to instantiate the class.
+ internal Object Instantiate(String name)
+ {
+ Object handler;
+ String region;
+ Assembly assembly;
+ Type type;
+
+ lock(this)
+ {
+ // See if we already have an active handler by this name.
+ handler = active[name];
+ if(handler != null)
+ {
+ return handler;
+ }
+
+ // Determine which region assembly handles the class.
+ region = (String)(handlers[name]);
+ if(region == null)
+ {
+ // The class does not exist in any region assembly.
+ return null;
+ }
+
+ // Find the region-specific assembly and load it.
+ assembly = (Assembly)(assemblies[region]);
+ if(assembly == null)
+ {
+ try
+ {
+ assembly = Assembly.Load(region);
+ }
+ catch(SystemException)
+ {
+ assembly = null;
+ }
+ if(assembly == null)
+ {
+ return null;
+ }
+ assemblies[region] = assembly;
+ }
+
+ // Look for the class within the region-specific assembly.
+ type = assembly.GetType(region + "." + name, false, true);
+ if(type == null)
+ {
+ return null;
+ }
+
+ // Invoke the constructor, which we assume is public
+ // and has zero arguments.
+ try
+ {
+ handler = type.InvokeMember
+ (String.Empty,
+ BindingFlags.CreateInstance |
+ BindingFlags.Public |
+ BindingFlags.NonPublic |
+ BindingFlags.Instance,
+ null, null, null, null, null, null);
+ }
+ catch(MissingMethodException)
+ {
+ // The constructor was not present.
+ return null;
+ }
+ catch(SecurityException)
+ {
+ // The constructor was inaccessible.
+ return null;
+ }
+
+ // Add the handler to the active handlers cache.
+ active.Add(name, handler);
+
+ // Return the handler to the caller.
+ return handler;
+ }
+ }
+
+ // Load the list of classes that are present in all region assemblies.
+ private void LoadClassList()
+ {
+ FileStream stream;
+
+ // Look for "I18N-handlers.def" in the same directory
+ // as this assembly. Note: this assumes that the
+ // "Assembly.GetFile" method can access files that
+ // aren't explicitly part of the assembly manifest.
+ //
+ // This is necessary because the "I18N-handlers.def"
+ // file is generated after the "i18n" assembly is
+ // compiled and linked. So it cannot be embedded
+ // directly into the assembly manifest.
+ try
+ {
+ stream = Assembly.GetExecutingAssembly()
+ .GetFile("I18N-handlers.def");
+ if(stream == null)
+ {
+ LoadInternalClasses();
+ return;
+ }
+ }
+ catch(FileLoadException)
+ {
+ // The file does not exist, or the runtime engine
+ // refuses to implement the necessary semantics.
+ // Fall back to an internal list, which must be
+ // kept up to date manually.
+ LoadInternalClasses();
+ return;
+ }
+
+ // Load the class list from the stream.
+ StreamReader reader = new StreamReader(stream);
+ String line;
+ int posn;
+ while((line = reader.ReadLine()) != null)
+ {
+ // Skip comment lines in the input.
+ if(line.Length == 0 || line[0] == '#')
+ {
+ continue;
+ }
+
+ // Split the line into namespace and name. We assume
+ // that the line has the form "I18N.<Region>.<Name>".
+ posn = line.LastIndexOf('.');
+ if(posn != -1)
+ {
+ // Add the namespace to the "handlers" hash,
+ // attached to the name of the handler class.
+ String name = line.Substring(posn + 1);
+ if(!handlers.Contains(name))
+ {
+ handlers.Add(name, line.Substring(0, posn));
+ }
+ }
+ }
+ reader.Close();
+ }
+
+ // Load the list of classes from the internal list.
+ private void LoadInternalClasses()
+ {
+ int posn;
+ foreach(String line in Handlers.List)
+ {
+ // Split the line into namespace and name. We assume
+ // that the line has the form "I18N.<Region>.<Name>".
+ posn = line.LastIndexOf('.');
+ if(posn != -1)
+ {
+ // Add the namespace to the "handlers" hash,
+ // attached to the name of the handler class.
+ String name = line.Substring(posn + 1);
+ if(!handlers.Contains(name))
+ {
+ handlers.Add(name, line.Substring(0, posn));
+ }
+ }
+ }
+ }
+
+}; // class Manager
+
+}; // namespace I18N.Common
diff --git a/mcs/class/I18N/Common/Strings.cs b/mcs/class/I18N/Common/Strings.cs
new file mode 100644
index 00000000000..97be16676f7
--- /dev/null
+++ b/mcs/class/I18N/Common/Strings.cs
@@ -0,0 +1,56 @@
+/*
+ * Strings.cs - Implementation of the "I18N.Common.Strings" class.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+namespace I18N.Common
+{
+
+using System;
+using System.Reflection;
+using System.Resources;
+
+// This class provides string resource support to the rest
+// of the I18N library assemblies.
+
+public sealed class Strings
+{
+ // Cached copy of the resources for this assembly.
+ private static ResourceManager resources = null;
+
+ // Helper for obtaining string resources for this assembly.
+ public static String GetString(String tag)
+ {
+ lock(typeof(Strings))
+ {
+ if(resources == null)
+ {
+ resources = new ResourceManager
+ ("I18N", Assembly.GetExecutingAssembly());
+ }
+ return resources.GetString(tag, null);
+ }
+ }
+
+}; // class Strings
+
+}; // namespace I18N.Common
diff --git a/mcs/class/I18N/Common/list.unix b/mcs/class/I18N/Common/list.unix
new file mode 100755
index 00000000000..e7e03344343
--- /dev/null
+++ b/mcs/class/I18N/Common/list.unix
@@ -0,0 +1,4 @@
+ByteEncoding.cs
+Handlers.cs
+Manager.cs
+Strings.cs
diff --git a/mcs/class/I18N/Common/makefile.gnu b/mcs/class/I18N/Common/makefile.gnu
new file mode 100755
index 00000000000..7ad76a2ed74
--- /dev/null
+++ b/mcs/class/I18N/Common/makefile.gnu
@@ -0,0 +1,13 @@
+topdir = ../../..
+
+LIBRARY = $(topdir)/class/lib/I18N.dll
+
+LIB_LIST = list.unix
+LIB_FLAGS = -r corlib -r mscorlib
+
+SOURCES_INCLUDE=*.cs
+SOURCES_EXCLUDE=
+
+export MONO_PATH_PREFIX = $(topdir)/class/lib:
+
+include $(topdir)/class/library.make
diff --git a/mcs/class/I18N/I18N.build b/mcs/class/I18N/I18N.build
new file mode 100644
index 00000000000..5a9e8a56347
--- /dev/null
+++ b/mcs/class/I18N/I18N.build
@@ -0,0 +1,116 @@
+<?xml version="1.0"?>
+<project name="pnetlib I18N" default="build">
+ <property name="debug" value="false"/>
+ <target name="build">
+
+ <!-- Build the primary I18N.dll library -->
+ <csc output="../lib/I18N.dll" target="library" debug="${debug}">
+ <arg value="/nowarn:1595"/>
+ <arg value="/unsafe"/>
+ <arg value="/noconfig"/> <!-- don't reference ms assemblies -->
+ <arg value="/lib:../lib/"/>
+ <arg value="/r:corlib.dll"/>
+
+ <sources>
+ <includes name="Common/*.cs"/>
+ </sources>
+
+ <!--<resources>
+ <file name="../resources/en_US/I18N/I18N.resources"/>
+ </resources>-->
+
+ </csc>
+
+ <!-- Build the I18N.CJK.dll library -->
+ <csc output="../lib/I18N.CJK.dll" target="library" debug="${debug}">
+ <arg value="/unsafe"/>
+ <arg value="/noconfig"/> <!-- don't reference ms assemblies -->
+ <arg value="/lib:../lib/"/>
+ <arg value="/r:I18N.dll"/>
+ <arg value="/resource:CJK/jis.table"/>
+
+ <sources>
+ <includes name="CJK/*.cs"/>
+ </sources>
+
+ <!--<resources>
+ <file name="CJK/jis.table"/>
+ </resources>-->
+
+
+ </csc>
+
+ <!-- Build the I18N.MidEast.dll library -->
+ <csc output="../lib/I18N.MidEast.dll" target="library" debug="${debug}">
+ <arg value="/unsafe"/>
+ <arg value="/noconfig"/> <!-- don't reference ms assemblies -->
+ <arg value="/lib:../lib/"/>
+ <arg value="/r:I18N.dll"/>
+
+ <sources>
+ <includes name="MidEast/*.cs"/>
+ </sources>
+
+ </csc>
+
+ <!-- Build the I18N.Other.dll library -->
+ <csc output="../lib/I18N.Other.dll" target="library" debug="${debug}">
+ <arg value="/unsafe"/>
+ <arg value="/noconfig"/> <!-- don't reference ms assemblies -->
+ <arg value="/lib:../lib/"/>
+ <arg value="/r:I18N.dll"/>
+
+ <sources>
+ <includes name="Other/*.cs"/>
+ </sources>
+
+ </csc>
+
+ <!-- Build the I18N.Rare.dll library -->
+ <csc output="../lib/I18N.Rare.dll" target="library" debug="${debug}">
+ <arg value="/unsafe"/>
+ <arg value="/noconfig"/> <!-- don't reference ms assemblies -->
+ <arg value="/lib:../lib/"/>
+ <arg value="/r:I18N.dll"/>
+
+ <sources>
+ <includes name="Rare/*.cs"/>
+ </sources>
+
+ </csc>
+
+ <!-- Build the I18N.West.dll library -->
+ <csc output="../lib/I18N.West.dll" target="library" debug="${debug}">
+ <arg value="/unsafe"/>
+ <arg value="/noconfig"/> <!-- don't reference ms assemblies -->
+ <arg value="/lib:../lib/"/>
+ <arg value="/r:I18N.dll"/>
+
+ <sources>
+ <includes name="West/*.cs"/>
+ </sources>
+
+ </csc>
+
+ </target>
+ <target name="clean">
+ <delete failonerror="false">
+ <fileset basedir="../lib">
+ <includes name="I18N.dll"/>
+ <includes name="I18N.CJK.dll"/>
+ <includes name="I18N.MidEast.dll"/>
+ <includes name="I18N.Other.dll"/>
+ <includes name="I18N.Rare.dll"/>
+ <includes name="I18N.West.dll"/>
+ </fileset>
+ </delete>
+ <!-- Uncomment this if build file added for those.
+ <nant basedir="Common" target="clean"/>
+ <nant basedir="CJK" target="clean"/>
+ <nant basedir="MidEast" target="clean"/>
+ <nant basedir="Other" target="clean"/>
+ <nant basedir="Rare" target="clean"/>
+ <nant basedir="West" target="clean"/>
+ -->
+ </target>
+</project>
diff --git a/mcs/class/I18N/MidEast/.cvsignore b/mcs/class/I18N/MidEast/.cvsignore
new file mode 100644
index 00000000000..0c2ee6906fa
--- /dev/null
+++ b/mcs/class/I18N/MidEast/.cvsignore
@@ -0,0 +1,4 @@
+list
+.makefrag
+.response
+library-deps.stamp
diff --git a/mcs/class/I18N/MidEast/CP1254.cs b/mcs/class/I18N/MidEast/CP1254.cs
new file mode 100644
index 00000000000..06700748fc5
--- /dev/null
+++ b/mcs/class/I18N/MidEast/CP1254.cs
@@ -0,0 +1,399 @@
+/*
+ * CP1254.cs - Turkish (Windows) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-5350.ucm".
+
+namespace I18N.MidEast
+{
+
+using System;
+using I18N.Common;
+
+public class CP1254 : ByteEncoding
+{
+ public CP1254()
+ : base(1254, ToChars, "Turkish (Windows)",
+ "iso-8859-9", "windows-1254", "windows-1254",
+ true, true, true, true, 1254)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
+ '\u0006', '\u0007', '\u0008', '\u0009', '\u000A', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
+ '\u0018', '\u0019', '\u001A', '\u001B', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
+ '\u0024', '\u0025', '\u0026', '\u0027', '\u0028', '\u0029',
+ '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
+ '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
+ '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
+ '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
+ '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
+ '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
+ '\u005A', '\u005B', '\u005C', '\u005D', '\u005E', '\u005F',
+ '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
+ '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
+ '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
+ '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
+ '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
+ '\u007E', '\u007F', '\u20AC', '\u0081', '\u201A', '\u0192',
+ '\u201E', '\u2026', '\u2020', '\u2021', '\u02C6', '\u2030',
+ '\u0160', '\u2039', '\u0152', '\u008D', '\u008E', '\u008F',
+ '\u0090', '\u2018', '\u2019', '\u201C', '\u201D', '\u2022',
+ '\u2013', '\u2014', '\u02DC', '\u2122', '\u0161', '\u203A',
+ '\u0153', '\u009D', '\u009E', '\u0178', '\u00A0', '\u00A1',
+ '\u00A2', '\u00A3', '\u00A4', '\u00A5', '\u00A6', '\u00A7',
+ '\u00A8', '\u00A9', '\u00AA', '\u00AB', '\u00AC', '\u00AD',
+ '\u00AE', '\u00AF', '\u00B0', '\u00B1', '\u00B2', '\u00B3',
+ '\u00B4', '\u00B5', '\u00B6', '\u00B7', '\u00B8', '\u00B9',
+ '\u00BA', '\u00BB', '\u00BC', '\u00BD', '\u00BE', '\u00BF',
+ '\u00C0', '\u00C1', '\u00C2', '\u00C3', '\u00C4', '\u00C5',
+ '\u00C6', '\u00C7', '\u00C8', '\u00C9', '\u00CA', '\u00CB',
+ '\u00CC', '\u00CD', '\u00CE', '\u00CF', '\u011E', '\u00D1',
+ '\u00D2', '\u00D3', '\u00D4', '\u00D5', '\u00D6', '\u00D7',
+ '\u00D8', '\u00D9', '\u00DA', '\u00DB', '\u00DC', '\u0130',
+ '\u015E', '\u00DF', '\u00E0', '\u00E1', '\u00E2', '\u00E3',
+ '\u00E4', '\u00E5', '\u00E6', '\u00E7', '\u00E8', '\u00E9',
+ '\u00EA', '\u00EB', '\u00EC', '\u00ED', '\u00EE', '\u00EF',
+ '\u011F', '\u00F1', '\u00F2', '\u00F3', '\u00F4', '\u00F5',
+ '\u00F6', '\u00F7', '\u00F8', '\u00F9', '\u00FA', '\u00FB',
+ '\u00FC', '\u0131', '\u015F', '\u00FF',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 128) switch(ch)
+ {
+ case 0x0081:
+ case 0x008D:
+ case 0x008E:
+ case 0x008F:
+ case 0x0090:
+ case 0x009D:
+ case 0x009E:
+ case 0x00A0:
+ case 0x00A1:
+ case 0x00A2:
+ case 0x00A3:
+ case 0x00A4:
+ case 0x00A5:
+ case 0x00A6:
+ case 0x00A7:
+ case 0x00A8:
+ case 0x00A9:
+ case 0x00AA:
+ case 0x00AB:
+ case 0x00AC:
+ case 0x00AD:
+ case 0x00AE:
+ case 0x00AF:
+ case 0x00B0:
+ case 0x00B1:
+ case 0x00B2:
+ case 0x00B3:
+ case 0x00B4:
+ case 0x00B5:
+ case 0x00B6:
+ case 0x00B7:
+ case 0x00B8:
+ case 0x00B9:
+ case 0x00BA:
+ case 0x00BB:
+ case 0x00BC:
+ case 0x00BD:
+ case 0x00BE:
+ case 0x00BF:
+ case 0x00C0:
+ case 0x00C1:
+ case 0x00C2:
+ case 0x00C3:
+ case 0x00C4:
+ case 0x00C5:
+ case 0x00C6:
+ case 0x00C7:
+ case 0x00C8:
+ case 0x00C9:
+ case 0x00CA:
+ case 0x00CB:
+ case 0x00CC:
+ case 0x00CD:
+ case 0x00CE:
+ case 0x00CF:
+ case 0x00D1:
+ case 0x00D2:
+ case 0x00D3:
+ case 0x00D4:
+ case 0x00D5:
+ case 0x00D6:
+ case 0x00D7:
+ case 0x00D8:
+ case 0x00D9:
+ case 0x00DA:
+ case 0x00DB:
+ case 0x00DC:
+ case 0x00DF:
+ case 0x00E0:
+ case 0x00E1:
+ case 0x00E2:
+ case 0x00E3:
+ case 0x00E4:
+ case 0x00E5:
+ case 0x00E6:
+ case 0x00E7:
+ case 0x00E8:
+ case 0x00E9:
+ case 0x00EA:
+ case 0x00EB:
+ case 0x00EC:
+ case 0x00ED:
+ case 0x00EE:
+ case 0x00EF:
+ case 0x00F1:
+ case 0x00F2:
+ case 0x00F3:
+ case 0x00F4:
+ case 0x00F5:
+ case 0x00F6:
+ case 0x00F7:
+ case 0x00F8:
+ case 0x00F9:
+ case 0x00FA:
+ case 0x00FB:
+ case 0x00FC:
+ case 0x00FF:
+ break;
+ case 0x011E: ch = 0xD0; break;
+ case 0x011F: ch = 0xF0; break;
+ case 0x0130: ch = 0xDD; break;
+ case 0x0131: ch = 0xFD; break;
+ case 0x0152: ch = 0x8C; break;
+ case 0x0153: ch = 0x9C; break;
+ case 0x015E: ch = 0xDE; break;
+ case 0x015F: ch = 0xFE; break;
+ case 0x0160: ch = 0x8A; break;
+ case 0x0161: ch = 0x9A; break;
+ case 0x0178: ch = 0x9F; break;
+ case 0x0192: ch = 0x83; break;
+ case 0x02C6: ch = 0x88; break;
+ case 0x02DC: ch = 0x98; break;
+ case 0x2013: ch = 0x96; break;
+ case 0x2014: ch = 0x97; break;
+ case 0x2018: ch = 0x91; break;
+ case 0x2019: ch = 0x92; break;
+ case 0x201A: ch = 0x82; break;
+ case 0x201C: ch = 0x93; break;
+ case 0x201D: ch = 0x94; break;
+ case 0x201E: ch = 0x84; break;
+ case 0x2020: ch = 0x86; break;
+ case 0x2021: ch = 0x87; break;
+ case 0x2022: ch = 0x95; break;
+ case 0x2026: ch = 0x85; break;
+ case 0x2030: ch = 0x89; break;
+ case 0x2039: ch = 0x8B; break;
+ case 0x203A: ch = 0x9B; break;
+ case 0x20AC: ch = 0x80; break;
+ case 0x2122: ch = 0x99; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 128) switch(ch)
+ {
+ case 0x0081:
+ case 0x008D:
+ case 0x008E:
+ case 0x008F:
+ case 0x0090:
+ case 0x009D:
+ case 0x009E:
+ case 0x00A0:
+ case 0x00A1:
+ case 0x00A2:
+ case 0x00A3:
+ case 0x00A4:
+ case 0x00A5:
+ case 0x00A6:
+ case 0x00A7:
+ case 0x00A8:
+ case 0x00A9:
+ case 0x00AA:
+ case 0x00AB:
+ case 0x00AC:
+ case 0x00AD:
+ case 0x00AE:
+ case 0x00AF:
+ case 0x00B0:
+ case 0x00B1:
+ case 0x00B2:
+ case 0x00B3:
+ case 0x00B4:
+ case 0x00B5:
+ case 0x00B6:
+ case 0x00B7:
+ case 0x00B8:
+ case 0x00B9:
+ case 0x00BA:
+ case 0x00BB:
+ case 0x00BC:
+ case 0x00BD:
+ case 0x00BE:
+ case 0x00BF:
+ case 0x00C0:
+ case 0x00C1:
+ case 0x00C2:
+ case 0x00C3:
+ case 0x00C4:
+ case 0x00C5:
+ case 0x00C6:
+ case 0x00C7:
+ case 0x00C8:
+ case 0x00C9:
+ case 0x00CA:
+ case 0x00CB:
+ case 0x00CC:
+ case 0x00CD:
+ case 0x00CE:
+ case 0x00CF:
+ case 0x00D1:
+ case 0x00D2:
+ case 0x00D3:
+ case 0x00D4:
+ case 0x00D5:
+ case 0x00D6:
+ case 0x00D7:
+ case 0x00D8:
+ case 0x00D9:
+ case 0x00DA:
+ case 0x00DB:
+ case 0x00DC:
+ case 0x00DF:
+ case 0x00E0:
+ case 0x00E1:
+ case 0x00E2:
+ case 0x00E3:
+ case 0x00E4:
+ case 0x00E5:
+ case 0x00E6:
+ case 0x00E7:
+ case 0x00E8:
+ case 0x00E9:
+ case 0x00EA:
+ case 0x00EB:
+ case 0x00EC:
+ case 0x00ED:
+ case 0x00EE:
+ case 0x00EF:
+ case 0x00F1:
+ case 0x00F2:
+ case 0x00F3:
+ case 0x00F4:
+ case 0x00F5:
+ case 0x00F6:
+ case 0x00F7:
+ case 0x00F8:
+ case 0x00F9:
+ case 0x00FA:
+ case 0x00FB:
+ case 0x00FC:
+ case 0x00FF:
+ break;
+ case 0x011E: ch = 0xD0; break;
+ case 0x011F: ch = 0xF0; break;
+ case 0x0130: ch = 0xDD; break;
+ case 0x0131: ch = 0xFD; break;
+ case 0x0152: ch = 0x8C; break;
+ case 0x0153: ch = 0x9C; break;
+ case 0x015E: ch = 0xDE; break;
+ case 0x015F: ch = 0xFE; break;
+ case 0x0160: ch = 0x8A; break;
+ case 0x0161: ch = 0x9A; break;
+ case 0x0178: ch = 0x9F; break;
+ case 0x0192: ch = 0x83; break;
+ case 0x02C6: ch = 0x88; break;
+ case 0x02DC: ch = 0x98; break;
+ case 0x2013: ch = 0x96; break;
+ case 0x2014: ch = 0x97; break;
+ case 0x2018: ch = 0x91; break;
+ case 0x2019: ch = 0x92; break;
+ case 0x201A: ch = 0x82; break;
+ case 0x201C: ch = 0x93; break;
+ case 0x201D: ch = 0x94; break;
+ case 0x201E: ch = 0x84; break;
+ case 0x2020: ch = 0x86; break;
+ case 0x2021: ch = 0x87; break;
+ case 0x2022: ch = 0x95; break;
+ case 0x2026: ch = 0x85; break;
+ case 0x2030: ch = 0x89; break;
+ case 0x2039: ch = 0x8B; break;
+ case 0x203A: ch = 0x9B; break;
+ case 0x20AC: ch = 0x80; break;
+ case 0x2122: ch = 0x99; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP1254
+
+public class ENCwindows_1254 : CP1254
+{
+ public ENCwindows_1254() : base() {}
+
+}; // class ENCwindows_1254
+
+}; // namespace I18N.MidEast
diff --git a/mcs/class/I18N/MidEast/CP1255.cs b/mcs/class/I18N/MidEast/CP1255.cs
new file mode 100644
index 00000000000..c732d08dc76
--- /dev/null
+++ b/mcs/class/I18N/MidEast/CP1255.cs
@@ -0,0 +1,393 @@
+/*
+ * CP1255.cs - Hebrew (Windows) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-5351.ucm".
+
+namespace I18N.MidEast
+{
+
+using System;
+using I18N.Common;
+
+public class CP1255 : ByteEncoding
+{
+ public CP1255()
+ : base(1255, ToChars, "Hebrew (Windows)",
+ "windows-1255", "windows-1255", "windows-1255",
+ true, true, true, true, 1255)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
+ '\u0006', '\u0007', '\u0008', '\u0009', '\u000A', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
+ '\u0018', '\u0019', '\u001A', '\u001B', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
+ '\u0024', '\u0025', '\u0026', '\u0027', '\u0028', '\u0029',
+ '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
+ '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
+ '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
+ '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
+ '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
+ '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
+ '\u005A', '\u005B', '\u005C', '\u005D', '\u005E', '\u005F',
+ '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
+ '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
+ '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
+ '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
+ '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
+ '\u007E', '\u007F', '\u20AC', '\u0081', '\u201A', '\u0192',
+ '\u201E', '\u2026', '\u2020', '\u2021', '\u02C6', '\u2030',
+ '\u008A', '\u2039', '\u008C', '\u008D', '\u008E', '\u008F',
+ '\u0090', '\u2018', '\u2019', '\u201C', '\u201D', '\u2022',
+ '\u2013', '\u2014', '\u02DC', '\u2122', '\u009A', '\u203A',
+ '\u009C', '\u009D', '\u009E', '\u009F', '\u00A0', '\u00A1',
+ '\u00A2', '\u00A3', '\u20AA', '\u00A5', '\u00A6', '\u00A7',
+ '\u00A8', '\u00A9', '\u00D7', '\u00AB', '\u00AC', '\u00AD',
+ '\u00AE', '\u00AF', '\u00B0', '\u00B1', '\u00B2', '\u00B3',
+ '\u00B4', '\u00B5', '\u00B6', '\u00B7', '\u00B8', '\u00B9',
+ '\u00F7', '\u00BB', '\u00BC', '\u00BD', '\u00BE', '\u00BF',
+ '\u05B0', '\u05B1', '\u05B2', '\u05B3', '\u05B4', '\u05B5',
+ '\u05B6', '\u05B7', '\u05B8', '\u05B9', '\u003F', '\u05BB',
+ '\u05BC', '\u05BD', '\u05BE', '\u05BF', '\u05C0', '\u05C1',
+ '\u05C2', '\u05C3', '\u05F0', '\u05F1', '\u05F2', '\u05F3',
+ '\u05F4', '\u003F', '\u003F', '\u003F', '\u003F', '\u003F',
+ '\u003F', '\u003F', '\u05D0', '\u05D1', '\u05D2', '\u05D3',
+ '\u05D4', '\u05D5', '\u05D6', '\u05D7', '\u05D8', '\u05D9',
+ '\u05DA', '\u05DB', '\u05DC', '\u05DD', '\u05DE', '\u05DF',
+ '\u05E0', '\u05E1', '\u05E2', '\u05E3', '\u05E4', '\u05E5',
+ '\u05E6', '\u05E7', '\u05E8', '\u05E9', '\u05EA', '\u003F',
+ '\u003F', '\u200E', '\u200F', '\u003F',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 128) switch(ch)
+ {
+ case 0x0081:
+ case 0x008A:
+ case 0x008C:
+ case 0x008D:
+ case 0x008E:
+ case 0x008F:
+ case 0x0090:
+ case 0x009A:
+ case 0x009C:
+ case 0x009D:
+ case 0x009E:
+ case 0x009F:
+ case 0x00A0:
+ case 0x00A1:
+ case 0x00A2:
+ case 0x00A3:
+ case 0x00A5:
+ case 0x00A6:
+ case 0x00A7:
+ case 0x00A8:
+ case 0x00A9:
+ case 0x00AB:
+ case 0x00AC:
+ case 0x00AD:
+ case 0x00AE:
+ case 0x00AF:
+ case 0x00B0:
+ case 0x00B1:
+ case 0x00B2:
+ case 0x00B3:
+ case 0x00B4:
+ case 0x00B5:
+ case 0x00B6:
+ case 0x00B7:
+ case 0x00B8:
+ case 0x00B9:
+ case 0x00BB:
+ case 0x00BC:
+ case 0x00BD:
+ case 0x00BE:
+ case 0x00BF:
+ break;
+ case 0x00D7: ch = 0xAA; break;
+ case 0x00F7: ch = 0xBA; break;
+ case 0x0192: ch = 0x83; break;
+ case 0x02C6: ch = 0x88; break;
+ case 0x02DC: ch = 0x98; break;
+ case 0x05B0:
+ case 0x05B1:
+ case 0x05B2:
+ case 0x05B3:
+ case 0x05B4:
+ case 0x05B5:
+ case 0x05B6:
+ case 0x05B7:
+ case 0x05B8:
+ case 0x05B9:
+ ch -= 0x04F0;
+ break;
+ case 0x05BB:
+ case 0x05BC:
+ case 0x05BD:
+ case 0x05BE:
+ case 0x05BF:
+ case 0x05C0:
+ case 0x05C1:
+ case 0x05C2:
+ case 0x05C3:
+ ch -= 0x04F0;
+ break;
+ case 0x05D0:
+ case 0x05D1:
+ case 0x05D2:
+ case 0x05D3:
+ case 0x05D4:
+ case 0x05D5:
+ case 0x05D6:
+ case 0x05D7:
+ case 0x05D8:
+ case 0x05D9:
+ case 0x05DA:
+ case 0x05DB:
+ case 0x05DC:
+ case 0x05DD:
+ case 0x05DE:
+ case 0x05DF:
+ case 0x05E0:
+ case 0x05E1:
+ case 0x05E2:
+ case 0x05E3:
+ case 0x05E4:
+ case 0x05E5:
+ case 0x05E6:
+ case 0x05E7:
+ case 0x05E8:
+ case 0x05E9:
+ case 0x05EA:
+ ch -= 0x04F0;
+ break;
+ case 0x05F0:
+ case 0x05F1:
+ case 0x05F2:
+ case 0x05F3:
+ case 0x05F4:
+ ch -= 0x051C;
+ break;
+ case 0x200E: ch = 0xFD; break;
+ case 0x200F: ch = 0xFE; break;
+ case 0x2013: ch = 0x96; break;
+ case 0x2014: ch = 0x97; break;
+ case 0x2018: ch = 0x91; break;
+ case 0x2019: ch = 0x92; break;
+ case 0x201A: ch = 0x82; break;
+ case 0x201C: ch = 0x93; break;
+ case 0x201D: ch = 0x94; break;
+ case 0x201E: ch = 0x84; break;
+ case 0x2020: ch = 0x86; break;
+ case 0x2021: ch = 0x87; break;
+ case 0x2022: ch = 0x95; break;
+ case 0x2026: ch = 0x85; break;
+ case 0x2030: ch = 0x89; break;
+ case 0x2039: ch = 0x8B; break;
+ case 0x203A: ch = 0x9B; break;
+ case 0x20AA: ch = 0xA4; break;
+ case 0x20AC: ch = 0x80; break;
+ case 0x2122: ch = 0x99; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 128) switch(ch)
+ {
+ case 0x0081:
+ case 0x008A:
+ case 0x008C:
+ case 0x008D:
+ case 0x008E:
+ case 0x008F:
+ case 0x0090:
+ case 0x009A:
+ case 0x009C:
+ case 0x009D:
+ case 0x009E:
+ case 0x009F:
+ case 0x00A0:
+ case 0x00A1:
+ case 0x00A2:
+ case 0x00A3:
+ case 0x00A5:
+ case 0x00A6:
+ case 0x00A7:
+ case 0x00A8:
+ case 0x00A9:
+ case 0x00AB:
+ case 0x00AC:
+ case 0x00AD:
+ case 0x00AE:
+ case 0x00AF:
+ case 0x00B0:
+ case 0x00B1:
+ case 0x00B2:
+ case 0x00B3:
+ case 0x00B4:
+ case 0x00B5:
+ case 0x00B6:
+ case 0x00B7:
+ case 0x00B8:
+ case 0x00B9:
+ case 0x00BB:
+ case 0x00BC:
+ case 0x00BD:
+ case 0x00BE:
+ case 0x00BF:
+ break;
+ case 0x00D7: ch = 0xAA; break;
+ case 0x00F7: ch = 0xBA; break;
+ case 0x0192: ch = 0x83; break;
+ case 0x02C6: ch = 0x88; break;
+ case 0x02DC: ch = 0x98; break;
+ case 0x05B0:
+ case 0x05B1:
+ case 0x05B2:
+ case 0x05B3:
+ case 0x05B4:
+ case 0x05B5:
+ case 0x05B6:
+ case 0x05B7:
+ case 0x05B8:
+ case 0x05B9:
+ ch -= 0x04F0;
+ break;
+ case 0x05BB:
+ case 0x05BC:
+ case 0x05BD:
+ case 0x05BE:
+ case 0x05BF:
+ case 0x05C0:
+ case 0x05C1:
+ case 0x05C2:
+ case 0x05C3:
+ ch -= 0x04F0;
+ break;
+ case 0x05D0:
+ case 0x05D1:
+ case 0x05D2:
+ case 0x05D3:
+ case 0x05D4:
+ case 0x05D5:
+ case 0x05D6:
+ case 0x05D7:
+ case 0x05D8:
+ case 0x05D9:
+ case 0x05DA:
+ case 0x05DB:
+ case 0x05DC:
+ case 0x05DD:
+ case 0x05DE:
+ case 0x05DF:
+ case 0x05E0:
+ case 0x05E1:
+ case 0x05E2:
+ case 0x05E3:
+ case 0x05E4:
+ case 0x05E5:
+ case 0x05E6:
+ case 0x05E7:
+ case 0x05E8:
+ case 0x05E9:
+ case 0x05EA:
+ ch -= 0x04F0;
+ break;
+ case 0x05F0:
+ case 0x05F1:
+ case 0x05F2:
+ case 0x05F3:
+ case 0x05F4:
+ ch -= 0x051C;
+ break;
+ case 0x200E: ch = 0xFD; break;
+ case 0x200F: ch = 0xFE; break;
+ case 0x2013: ch = 0x96; break;
+ case 0x2014: ch = 0x97; break;
+ case 0x2018: ch = 0x91; break;
+ case 0x2019: ch = 0x92; break;
+ case 0x201A: ch = 0x82; break;
+ case 0x201C: ch = 0x93; break;
+ case 0x201D: ch = 0x94; break;
+ case 0x201E: ch = 0x84; break;
+ case 0x2020: ch = 0x86; break;
+ case 0x2021: ch = 0x87; break;
+ case 0x2022: ch = 0x95; break;
+ case 0x2026: ch = 0x85; break;
+ case 0x2030: ch = 0x89; break;
+ case 0x2039: ch = 0x8B; break;
+ case 0x203A: ch = 0x9B; break;
+ case 0x20AA: ch = 0xA4; break;
+ case 0x20AC: ch = 0x80; break;
+ case 0x2122: ch = 0x99; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP1255
+
+public class ENCwindows_1255 : CP1255
+{
+ public ENCwindows_1255() : base() {}
+
+}; // class ENCwindows_1255
+
+}; // namespace I18N.MidEast
diff --git a/mcs/class/I18N/MidEast/CP1256.cs b/mcs/class/I18N/MidEast/CP1256.cs
new file mode 100644
index 00000000000..71e5c3288f9
--- /dev/null
+++ b/mcs/class/I18N/MidEast/CP1256.cs
@@ -0,0 +1,771 @@
+/*
+ * CP1256.cs - Arabic (Windows) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-5352.ucm".
+
+namespace I18N.MidEast
+{
+
+using System;
+using I18N.Common;
+
+public class CP1256 : ByteEncoding
+{
+ public CP1256()
+ : base(1256, ToChars, "Arabic (Windows)",
+ "windows-1256", "windows-1256", "windows-1256",
+ true, true, true, true, 1256)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
+ '\u0006', '\u0007', '\u0008', '\u0009', '\u000A', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
+ '\u0018', '\u0019', '\u001A', '\u001B', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
+ '\u0024', '\u0025', '\u0026', '\u0027', '\u0028', '\u0029',
+ '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
+ '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
+ '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
+ '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
+ '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
+ '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
+ '\u005A', '\u005B', '\u005C', '\u005D', '\u005E', '\u005F',
+ '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
+ '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
+ '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
+ '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
+ '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
+ '\u007E', '\u007F', '\u20AC', '\u067E', '\u201A', '\u0192',
+ '\u201E', '\u2026', '\u2020', '\u2021', '\u02C6', '\u2030',
+ '\u0679', '\u2039', '\u0152', '\u0686', '\u0698', '\u0688',
+ '\u06AF', '\u2018', '\u2019', '\u201C', '\u201D', '\u2022',
+ '\u2013', '\u2014', '\u06A9', '\u2122', '\u0691', '\u203A',
+ '\u0153', '\u200C', '\u200D', '\u06BA', '\u00A0', '\u060C',
+ '\u00A2', '\u00A3', '\u00A4', '\u00A5', '\u00A6', '\u00A7',
+ '\u00A8', '\u00A9', '\u06BE', '\u00AB', '\u00AC', '\u00AD',
+ '\u00AE', '\u00AF', '\u00B0', '\u00B1', '\u00B2', '\u00B3',
+ '\u00B4', '\u00B5', '\u00B6', '\u00B7', '\u00B8', '\u00B9',
+ '\u061B', '\u00BB', '\u00BC', '\u00BD', '\u00BE', '\u061F',
+ '\u06C1', '\u0621', '\u0622', '\u0623', '\u0624', '\u0625',
+ '\u0626', '\u0627', '\u0628', '\u0629', '\u062A', '\u062B',
+ '\u062C', '\u062D', '\u062E', '\u062F', '\u0630', '\u0631',
+ '\u0632', '\u0633', '\u0634', '\u0635', '\u0636', '\u00D7',
+ '\u0637', '\u0638', '\u0639', '\u063A', '\u0640', '\u0641',
+ '\u0642', '\u0643', '\u00E0', '\u0644', '\u00E2', '\u0645',
+ '\u0646', '\u0647', '\u0648', '\u00E7', '\u00E8', '\u00E9',
+ '\u00EA', '\u00EB', '\u0649', '\u064A', '\u00EE', '\u00EF',
+ '\u064B', '\u064C', '\u064D', '\u064E', '\u00F4', '\u064F',
+ '\u0650', '\u00F7', '\u0651', '\u00F9', '\u0652', '\u00FB',
+ '\u00FC', '\u200E', '\u200F', '\u06D2',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 128) switch(ch)
+ {
+ case 0x00A0:
+ case 0x00A2:
+ case 0x00A3:
+ case 0x00A4:
+ case 0x00A5:
+ case 0x00A6:
+ case 0x00A7:
+ case 0x00A8:
+ case 0x00A9:
+ case 0x00AB:
+ case 0x00AC:
+ case 0x00AD:
+ case 0x00AE:
+ case 0x00AF:
+ case 0x00B0:
+ case 0x00B1:
+ case 0x00B2:
+ case 0x00B3:
+ case 0x00B4:
+ case 0x00B5:
+ case 0x00B6:
+ case 0x00B7:
+ case 0x00B8:
+ case 0x00B9:
+ case 0x00BB:
+ case 0x00BC:
+ case 0x00BD:
+ case 0x00BE:
+ case 0x00D7:
+ case 0x00E0:
+ case 0x00E2:
+ case 0x00E7:
+ case 0x00E8:
+ case 0x00E9:
+ case 0x00EA:
+ case 0x00EB:
+ case 0x00EE:
+ case 0x00EF:
+ case 0x00F4:
+ case 0x00F7:
+ case 0x00F9:
+ case 0x00FB:
+ case 0x00FC:
+ break;
+ case 0x0152: ch = 0x8C; break;
+ case 0x0153: ch = 0x9C; break;
+ case 0x0192: ch = 0x83; break;
+ case 0x02C6: ch = 0x88; break;
+ case 0x060C: ch = 0xA1; break;
+ case 0x061B: ch = 0xBA; break;
+ case 0x061F: ch = 0xBF; break;
+ case 0x0621:
+ case 0x0622:
+ case 0x0623:
+ case 0x0624:
+ case 0x0625:
+ case 0x0626:
+ case 0x0627:
+ case 0x0628:
+ case 0x0629:
+ case 0x062A:
+ case 0x062B:
+ case 0x062C:
+ case 0x062D:
+ case 0x062E:
+ case 0x062F:
+ case 0x0630:
+ case 0x0631:
+ case 0x0632:
+ case 0x0633:
+ case 0x0634:
+ case 0x0635:
+ case 0x0636:
+ ch -= 0x0560;
+ break;
+ case 0x0637:
+ case 0x0638:
+ case 0x0639:
+ case 0x063A:
+ ch -= 0x055F;
+ break;
+ case 0x0640:
+ case 0x0641:
+ case 0x0642:
+ case 0x0643:
+ ch -= 0x0564;
+ break;
+ case 0x0644: ch = 0xE1; break;
+ case 0x0645:
+ case 0x0646:
+ case 0x0647:
+ case 0x0648:
+ ch -= 0x0562;
+ break;
+ case 0x0649: ch = 0xEC; break;
+ case 0x064A: ch = 0xED; break;
+ case 0x064B:
+ case 0x064C:
+ case 0x064D:
+ case 0x064E:
+ ch -= 0x055B;
+ break;
+ case 0x064F: ch = 0xF5; break;
+ case 0x0650: ch = 0xF6; break;
+ case 0x0651: ch = 0xF8; break;
+ case 0x0652: ch = 0xFA; break;
+ case 0x0660:
+ case 0x0661:
+ case 0x0662:
+ case 0x0663:
+ case 0x0664:
+ case 0x0665:
+ case 0x0666:
+ case 0x0667:
+ case 0x0668:
+ case 0x0669:
+ ch -= 0x0630;
+ break;
+ case 0x066B: ch = 0x2C; break;
+ case 0x066C: ch = 0x2E; break;
+ case 0x0679: ch = 0x8A; break;
+ case 0x067E: ch = 0x81; break;
+ case 0x0686: ch = 0x8D; break;
+ case 0x0688: ch = 0x8F; break;
+ case 0x0691: ch = 0x9A; break;
+ case 0x0698: ch = 0x8E; break;
+ case 0x06A9: ch = 0x98; break;
+ case 0x06AF: ch = 0x90; break;
+ case 0x06BA: ch = 0x9F; break;
+ case 0x06BE: ch = 0xAA; break;
+ case 0x06C1: ch = 0xC0; break;
+ case 0x06D2: ch = 0xFF; break;
+ case 0x06F0:
+ case 0x06F1:
+ case 0x06F2:
+ case 0x06F3:
+ case 0x06F4:
+ case 0x06F5:
+ case 0x06F6:
+ case 0x06F7:
+ case 0x06F8:
+ case 0x06F9:
+ ch -= 0x06C0;
+ break;
+ case 0x200C: ch = 0x9D; break;
+ case 0x200D: ch = 0x9E; break;
+ case 0x200E: ch = 0xFD; break;
+ case 0x200F: ch = 0xFE; break;
+ case 0x2013: ch = 0x96; break;
+ case 0x2014: ch = 0x97; break;
+ case 0x2018: ch = 0x91; break;
+ case 0x2019: ch = 0x92; break;
+ case 0x201A: ch = 0x82; break;
+ case 0x201C: ch = 0x93; break;
+ case 0x201D: ch = 0x94; break;
+ case 0x201E: ch = 0x84; break;
+ case 0x2020: ch = 0x86; break;
+ case 0x2021: ch = 0x87; break;
+ case 0x2022: ch = 0x95; break;
+ case 0x2026: ch = 0x85; break;
+ case 0x2030: ch = 0x89; break;
+ case 0x2039: ch = 0x8B; break;
+ case 0x203A: ch = 0x9B; break;
+ case 0x20AC: ch = 0x80; break;
+ case 0x2122: ch = 0x99; break;
+ case 0xFB56: ch = 0x81; break;
+ case 0xFB58: ch = 0x81; break;
+ case 0xFB66: ch = 0x8A; break;
+ case 0xFB68: ch = 0x8A; break;
+ case 0xFB7A: ch = 0x8D; break;
+ case 0xFB7C: ch = 0x8D; break;
+ case 0xFB88: ch = 0x8F; break;
+ case 0xFB8A: ch = 0x8E; break;
+ case 0xFB8C: ch = 0x9A; break;
+ case 0xFB8E: ch = 0x98; break;
+ case 0xFB90: ch = 0x98; break;
+ case 0xFB92: ch = 0x90; break;
+ case 0xFB94: ch = 0x90; break;
+ case 0xFB9E: ch = 0x9F; break;
+ case 0xFBA6: ch = 0xC0; break;
+ case 0xFBA8: ch = 0xC0; break;
+ case 0xFBAA: ch = 0xAA; break;
+ case 0xFBAC: ch = 0xAA; break;
+ case 0xFBAE: ch = 0xFF; break;
+ case 0xFE70: ch = 0xF0; break;
+ case 0xFE71: ch = 0xF0; break;
+ case 0xFE72: ch = 0xF1; break;
+ case 0xFE74: ch = 0xF2; break;
+ case 0xFE76: ch = 0xF3; break;
+ case 0xFE77: ch = 0xF3; break;
+ case 0xFE78: ch = 0xF5; break;
+ case 0xFE79: ch = 0xF5; break;
+ case 0xFE7A: ch = 0xF6; break;
+ case 0xFE7B: ch = 0xF6; break;
+ case 0xFE7C: ch = 0xF8; break;
+ case 0xFE7D: ch = 0xF8; break;
+ case 0xFE7E: ch = 0xFA; break;
+ case 0xFE7F: ch = 0xFA; break;
+ case 0xFE80: ch = 0xC1; break;
+ case 0xFE81: ch = 0xC2; break;
+ case 0xFE82: ch = 0xC2; break;
+ case 0xFE83: ch = 0xC3; break;
+ case 0xFE84: ch = 0xC3; break;
+ case 0xFE85: ch = 0xC4; break;
+ case 0xFE86: ch = 0xC4; break;
+ case 0xFE87: ch = 0xC5; break;
+ case 0xFE88: ch = 0xC5; break;
+ case 0xFE89: ch = 0xC6; break;
+ case 0xFE8A: ch = 0xC6; break;
+ case 0xFE8B: ch = 0xC6; break;
+ case 0xFE8C: ch = 0xC6; break;
+ case 0xFE8D: ch = 0xC7; break;
+ case 0xFE8E: ch = 0xC7; break;
+ case 0xFE8F: ch = 0xC8; break;
+ case 0xFE90: ch = 0xC8; break;
+ case 0xFE91: ch = 0xC8; break;
+ case 0xFE92: ch = 0xC8; break;
+ case 0xFE93: ch = 0xC9; break;
+ case 0xFE94: ch = 0xC9; break;
+ case 0xFE95: ch = 0xCA; break;
+ case 0xFE96: ch = 0xCA; break;
+ case 0xFE97: ch = 0xCA; break;
+ case 0xFE98: ch = 0xCA; break;
+ case 0xFE99: ch = 0xCB; break;
+ case 0xFE9A: ch = 0xCB; break;
+ case 0xFE9B: ch = 0xCB; break;
+ case 0xFE9C: ch = 0xCB; break;
+ case 0xFE9D: ch = 0xCC; break;
+ case 0xFE9E: ch = 0xCC; break;
+ case 0xFE9F: ch = 0xCC; break;
+ case 0xFEA0: ch = 0xCC; break;
+ case 0xFEA1: ch = 0xCD; break;
+ case 0xFEA2: ch = 0xCD; break;
+ case 0xFEA3: ch = 0xCD; break;
+ case 0xFEA4: ch = 0xCD; break;
+ case 0xFEA5: ch = 0xCE; break;
+ case 0xFEA6: ch = 0xCE; break;
+ case 0xFEA7: ch = 0xCE; break;
+ case 0xFEA8: ch = 0xCE; break;
+ case 0xFEA9: ch = 0xCF; break;
+ case 0xFEAA: ch = 0xCF; break;
+ case 0xFEAB: ch = 0xD0; break;
+ case 0xFEAC: ch = 0xD0; break;
+ case 0xFEAD: ch = 0xD1; break;
+ case 0xFEAE: ch = 0xD1; break;
+ case 0xFEAF: ch = 0xD2; break;
+ case 0xFEB0: ch = 0xD2; break;
+ case 0xFEB1: ch = 0xD3; break;
+ case 0xFEB2: ch = 0xD3; break;
+ case 0xFEB3: ch = 0xD3; break;
+ case 0xFEB4: ch = 0xD3; break;
+ case 0xFEB5: ch = 0xD4; break;
+ case 0xFEB6: ch = 0xD4; break;
+ case 0xFEB7: ch = 0xD4; break;
+ case 0xFEB8: ch = 0xD4; break;
+ case 0xFEB9: ch = 0xD5; break;
+ case 0xFEBA: ch = 0xD5; break;
+ case 0xFEBB: ch = 0xD5; break;
+ case 0xFEBC: ch = 0xD5; break;
+ case 0xFEBD: ch = 0xD6; break;
+ case 0xFEBE: ch = 0xD6; break;
+ case 0xFEBF: ch = 0xD6; break;
+ case 0xFEC0: ch = 0xD6; break;
+ case 0xFEC1: ch = 0xD8; break;
+ case 0xFEC2: ch = 0xD8; break;
+ case 0xFEC3: ch = 0xD8; break;
+ case 0xFEC4: ch = 0xD8; break;
+ case 0xFEC5: ch = 0xD9; break;
+ case 0xFEC6: ch = 0xD9; break;
+ case 0xFEC7: ch = 0xD9; break;
+ case 0xFEC8: ch = 0xD9; break;
+ case 0xFEC9: ch = 0xDA; break;
+ case 0xFECA: ch = 0xDA; break;
+ case 0xFECB: ch = 0xDA; break;
+ case 0xFECC: ch = 0xDA; break;
+ case 0xFECD: ch = 0xDB; break;
+ case 0xFECE: ch = 0xDB; break;
+ case 0xFECF: ch = 0xDB; break;
+ case 0xFED0: ch = 0xDB; break;
+ case 0xFED1: ch = 0xDD; break;
+ case 0xFED2: ch = 0xDD; break;
+ case 0xFED3: ch = 0xDD; break;
+ case 0xFED4: ch = 0xDD; break;
+ case 0xFED5: ch = 0xDE; break;
+ case 0xFED6: ch = 0xDE; break;
+ case 0xFED7: ch = 0xDE; break;
+ case 0xFED8: ch = 0xDE; break;
+ case 0xFED9: ch = 0xDF; break;
+ case 0xFEDA: ch = 0xDF; break;
+ case 0xFEDB: ch = 0xDF; break;
+ case 0xFEDC: ch = 0xDF; break;
+ case 0xFEDD: ch = 0xE1; break;
+ case 0xFEDE: ch = 0xE1; break;
+ case 0xFEDF: ch = 0xE1; break;
+ case 0xFEE0: ch = 0xE1; break;
+ case 0xFEE1: ch = 0xE3; break;
+ case 0xFEE2: ch = 0xE3; break;
+ case 0xFEE3: ch = 0xE3; break;
+ case 0xFEE4: ch = 0xE3; break;
+ case 0xFEE5: ch = 0xE4; break;
+ case 0xFEE6: ch = 0xE4; break;
+ case 0xFEE7: ch = 0xE4; break;
+ case 0xFEE8: ch = 0xE4; break;
+ case 0xFEE9: ch = 0xE5; break;
+ case 0xFEEA: ch = 0xE5; break;
+ case 0xFEEB: ch = 0xE5; break;
+ case 0xFEEC: ch = 0xE5; break;
+ case 0xFEED: ch = 0xE6; break;
+ case 0xFEEE: ch = 0xE6; break;
+ case 0xFEEF: ch = 0xEC; break;
+ case 0xFEF0: ch = 0xEC; break;
+ case 0xFEF1: ch = 0xED; break;
+ case 0xFEF2: ch = 0xED; break;
+ case 0xFEF3: ch = 0xED; break;
+ case 0xFEF4: ch = 0xED; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 128) switch(ch)
+ {
+ case 0x00A0:
+ case 0x00A2:
+ case 0x00A3:
+ case 0x00A4:
+ case 0x00A5:
+ case 0x00A6:
+ case 0x00A7:
+ case 0x00A8:
+ case 0x00A9:
+ case 0x00AB:
+ case 0x00AC:
+ case 0x00AD:
+ case 0x00AE:
+ case 0x00AF:
+ case 0x00B0:
+ case 0x00B1:
+ case 0x00B2:
+ case 0x00B3:
+ case 0x00B4:
+ case 0x00B5:
+ case 0x00B6:
+ case 0x00B7:
+ case 0x00B8:
+ case 0x00B9:
+ case 0x00BB:
+ case 0x00BC:
+ case 0x00BD:
+ case 0x00BE:
+ case 0x00D7:
+ case 0x00E0:
+ case 0x00E2:
+ case 0x00E7:
+ case 0x00E8:
+ case 0x00E9:
+ case 0x00EA:
+ case 0x00EB:
+ case 0x00EE:
+ case 0x00EF:
+ case 0x00F4:
+ case 0x00F7:
+ case 0x00F9:
+ case 0x00FB:
+ case 0x00FC:
+ break;
+ case 0x0152: ch = 0x8C; break;
+ case 0x0153: ch = 0x9C; break;
+ case 0x0192: ch = 0x83; break;
+ case 0x02C6: ch = 0x88; break;
+ case 0x060C: ch = 0xA1; break;
+ case 0x061B: ch = 0xBA; break;
+ case 0x061F: ch = 0xBF; break;
+ case 0x0621:
+ case 0x0622:
+ case 0x0623:
+ case 0x0624:
+ case 0x0625:
+ case 0x0626:
+ case 0x0627:
+ case 0x0628:
+ case 0x0629:
+ case 0x062A:
+ case 0x062B:
+ case 0x062C:
+ case 0x062D:
+ case 0x062E:
+ case 0x062F:
+ case 0x0630:
+ case 0x0631:
+ case 0x0632:
+ case 0x0633:
+ case 0x0634:
+ case 0x0635:
+ case 0x0636:
+ ch -= 0x0560;
+ break;
+ case 0x0637:
+ case 0x0638:
+ case 0x0639:
+ case 0x063A:
+ ch -= 0x055F;
+ break;
+ case 0x0640:
+ case 0x0641:
+ case 0x0642:
+ case 0x0643:
+ ch -= 0x0564;
+ break;
+ case 0x0644: ch = 0xE1; break;
+ case 0x0645:
+ case 0x0646:
+ case 0x0647:
+ case 0x0648:
+ ch -= 0x0562;
+ break;
+ case 0x0649: ch = 0xEC; break;
+ case 0x064A: ch = 0xED; break;
+ case 0x064B:
+ case 0x064C:
+ case 0x064D:
+ case 0x064E:
+ ch -= 0x055B;
+ break;
+ case 0x064F: ch = 0xF5; break;
+ case 0x0650: ch = 0xF6; break;
+ case 0x0651: ch = 0xF8; break;
+ case 0x0652: ch = 0xFA; break;
+ case 0x0660:
+ case 0x0661:
+ case 0x0662:
+ case 0x0663:
+ case 0x0664:
+ case 0x0665:
+ case 0x0666:
+ case 0x0667:
+ case 0x0668:
+ case 0x0669:
+ ch -= 0x0630;
+ break;
+ case 0x066B: ch = 0x2C; break;
+ case 0x066C: ch = 0x2E; break;
+ case 0x0679: ch = 0x8A; break;
+ case 0x067E: ch = 0x81; break;
+ case 0x0686: ch = 0x8D; break;
+ case 0x0688: ch = 0x8F; break;
+ case 0x0691: ch = 0x9A; break;
+ case 0x0698: ch = 0x8E; break;
+ case 0x06A9: ch = 0x98; break;
+ case 0x06AF: ch = 0x90; break;
+ case 0x06BA: ch = 0x9F; break;
+ case 0x06BE: ch = 0xAA; break;
+ case 0x06C1: ch = 0xC0; break;
+ case 0x06D2: ch = 0xFF; break;
+ case 0x06F0:
+ case 0x06F1:
+ case 0x06F2:
+ case 0x06F3:
+ case 0x06F4:
+ case 0x06F5:
+ case 0x06F6:
+ case 0x06F7:
+ case 0x06F8:
+ case 0x06F9:
+ ch -= 0x06C0;
+ break;
+ case 0x200C: ch = 0x9D; break;
+ case 0x200D: ch = 0x9E; break;
+ case 0x200E: ch = 0xFD; break;
+ case 0x200F: ch = 0xFE; break;
+ case 0x2013: ch = 0x96; break;
+ case 0x2014: ch = 0x97; break;
+ case 0x2018: ch = 0x91; break;
+ case 0x2019: ch = 0x92; break;
+ case 0x201A: ch = 0x82; break;
+ case 0x201C: ch = 0x93; break;
+ case 0x201D: ch = 0x94; break;
+ case 0x201E: ch = 0x84; break;
+ case 0x2020: ch = 0x86; break;
+ case 0x2021: ch = 0x87; break;
+ case 0x2022: ch = 0x95; break;
+ case 0x2026: ch = 0x85; break;
+ case 0x2030: ch = 0x89; break;
+ case 0x2039: ch = 0x8B; break;
+ case 0x203A: ch = 0x9B; break;
+ case 0x20AC: ch = 0x80; break;
+ case 0x2122: ch = 0x99; break;
+ case 0xFB56: ch = 0x81; break;
+ case 0xFB58: ch = 0x81; break;
+ case 0xFB66: ch = 0x8A; break;
+ case 0xFB68: ch = 0x8A; break;
+ case 0xFB7A: ch = 0x8D; break;
+ case 0xFB7C: ch = 0x8D; break;
+ case 0xFB88: ch = 0x8F; break;
+ case 0xFB8A: ch = 0x8E; break;
+ case 0xFB8C: ch = 0x9A; break;
+ case 0xFB8E: ch = 0x98; break;
+ case 0xFB90: ch = 0x98; break;
+ case 0xFB92: ch = 0x90; break;
+ case 0xFB94: ch = 0x90; break;
+ case 0xFB9E: ch = 0x9F; break;
+ case 0xFBA6: ch = 0xC0; break;
+ case 0xFBA8: ch = 0xC0; break;
+ case 0xFBAA: ch = 0xAA; break;
+ case 0xFBAC: ch = 0xAA; break;
+ case 0xFBAE: ch = 0xFF; break;
+ case 0xFE70: ch = 0xF0; break;
+ case 0xFE71: ch = 0xF0; break;
+ case 0xFE72: ch = 0xF1; break;
+ case 0xFE74: ch = 0xF2; break;
+ case 0xFE76: ch = 0xF3; break;
+ case 0xFE77: ch = 0xF3; break;
+ case 0xFE78: ch = 0xF5; break;
+ case 0xFE79: ch = 0xF5; break;
+ case 0xFE7A: ch = 0xF6; break;
+ case 0xFE7B: ch = 0xF6; break;
+ case 0xFE7C: ch = 0xF8; break;
+ case 0xFE7D: ch = 0xF8; break;
+ case 0xFE7E: ch = 0xFA; break;
+ case 0xFE7F: ch = 0xFA; break;
+ case 0xFE80: ch = 0xC1; break;
+ case 0xFE81: ch = 0xC2; break;
+ case 0xFE82: ch = 0xC2; break;
+ case 0xFE83: ch = 0xC3; break;
+ case 0xFE84: ch = 0xC3; break;
+ case 0xFE85: ch = 0xC4; break;
+ case 0xFE86: ch = 0xC4; break;
+ case 0xFE87: ch = 0xC5; break;
+ case 0xFE88: ch = 0xC5; break;
+ case 0xFE89: ch = 0xC6; break;
+ case 0xFE8A: ch = 0xC6; break;
+ case 0xFE8B: ch = 0xC6; break;
+ case 0xFE8C: ch = 0xC6; break;
+ case 0xFE8D: ch = 0xC7; break;
+ case 0xFE8E: ch = 0xC7; break;
+ case 0xFE8F: ch = 0xC8; break;
+ case 0xFE90: ch = 0xC8; break;
+ case 0xFE91: ch = 0xC8; break;
+ case 0xFE92: ch = 0xC8; break;
+ case 0xFE93: ch = 0xC9; break;
+ case 0xFE94: ch = 0xC9; break;
+ case 0xFE95: ch = 0xCA; break;
+ case 0xFE96: ch = 0xCA; break;
+ case 0xFE97: ch = 0xCA; break;
+ case 0xFE98: ch = 0xCA; break;
+ case 0xFE99: ch = 0xCB; break;
+ case 0xFE9A: ch = 0xCB; break;
+ case 0xFE9B: ch = 0xCB; break;
+ case 0xFE9C: ch = 0xCB; break;
+ case 0xFE9D: ch = 0xCC; break;
+ case 0xFE9E: ch = 0xCC; break;
+ case 0xFE9F: ch = 0xCC; break;
+ case 0xFEA0: ch = 0xCC; break;
+ case 0xFEA1: ch = 0xCD; break;
+ case 0xFEA2: ch = 0xCD; break;
+ case 0xFEA3: ch = 0xCD; break;
+ case 0xFEA4: ch = 0xCD; break;
+ case 0xFEA5: ch = 0xCE; break;
+ case 0xFEA6: ch = 0xCE; break;
+ case 0xFEA7: ch = 0xCE; break;
+ case 0xFEA8: ch = 0xCE; break;
+ case 0xFEA9: ch = 0xCF; break;
+ case 0xFEAA: ch = 0xCF; break;
+ case 0xFEAB: ch = 0xD0; break;
+ case 0xFEAC: ch = 0xD0; break;
+ case 0xFEAD: ch = 0xD1; break;
+ case 0xFEAE: ch = 0xD1; break;
+ case 0xFEAF: ch = 0xD2; break;
+ case 0xFEB0: ch = 0xD2; break;
+ case 0xFEB1: ch = 0xD3; break;
+ case 0xFEB2: ch = 0xD3; break;
+ case 0xFEB3: ch = 0xD3; break;
+ case 0xFEB4: ch = 0xD3; break;
+ case 0xFEB5: ch = 0xD4; break;
+ case 0xFEB6: ch = 0xD4; break;
+ case 0xFEB7: ch = 0xD4; break;
+ case 0xFEB8: ch = 0xD4; break;
+ case 0xFEB9: ch = 0xD5; break;
+ case 0xFEBA: ch = 0xD5; break;
+ case 0xFEBB: ch = 0xD5; break;
+ case 0xFEBC: ch = 0xD5; break;
+ case 0xFEBD: ch = 0xD6; break;
+ case 0xFEBE: ch = 0xD6; break;
+ case 0xFEBF: ch = 0xD6; break;
+ case 0xFEC0: ch = 0xD6; break;
+ case 0xFEC1: ch = 0xD8; break;
+ case 0xFEC2: ch = 0xD8; break;
+ case 0xFEC3: ch = 0xD8; break;
+ case 0xFEC4: ch = 0xD8; break;
+ case 0xFEC5: ch = 0xD9; break;
+ case 0xFEC6: ch = 0xD9; break;
+ case 0xFEC7: ch = 0xD9; break;
+ case 0xFEC8: ch = 0xD9; break;
+ case 0xFEC9: ch = 0xDA; break;
+ case 0xFECA: ch = 0xDA; break;
+ case 0xFECB: ch = 0xDA; break;
+ case 0xFECC: ch = 0xDA; break;
+ case 0xFECD: ch = 0xDB; break;
+ case 0xFECE: ch = 0xDB; break;
+ case 0xFECF: ch = 0xDB; break;
+ case 0xFED0: ch = 0xDB; break;
+ case 0xFED1: ch = 0xDD; break;
+ case 0xFED2: ch = 0xDD; break;
+ case 0xFED3: ch = 0xDD; break;
+ case 0xFED4: ch = 0xDD; break;
+ case 0xFED5: ch = 0xDE; break;
+ case 0xFED6: ch = 0xDE; break;
+ case 0xFED7: ch = 0xDE; break;
+ case 0xFED8: ch = 0xDE; break;
+ case 0xFED9: ch = 0xDF; break;
+ case 0xFEDA: ch = 0xDF; break;
+ case 0xFEDB: ch = 0xDF; break;
+ case 0xFEDC: ch = 0xDF; break;
+ case 0xFEDD: ch = 0xE1; break;
+ case 0xFEDE: ch = 0xE1; break;
+ case 0xFEDF: ch = 0xE1; break;
+ case 0xFEE0: ch = 0xE1; break;
+ case 0xFEE1: ch = 0xE3; break;
+ case 0xFEE2: ch = 0xE3; break;
+ case 0xFEE3: ch = 0xE3; break;
+ case 0xFEE4: ch = 0xE3; break;
+ case 0xFEE5: ch = 0xE4; break;
+ case 0xFEE6: ch = 0xE4; break;
+ case 0xFEE7: ch = 0xE4; break;
+ case 0xFEE8: ch = 0xE4; break;
+ case 0xFEE9: ch = 0xE5; break;
+ case 0xFEEA: ch = 0xE5; break;
+ case 0xFEEB: ch = 0xE5; break;
+ case 0xFEEC: ch = 0xE5; break;
+ case 0xFEED: ch = 0xE6; break;
+ case 0xFEEE: ch = 0xE6; break;
+ case 0xFEEF: ch = 0xEC; break;
+ case 0xFEF0: ch = 0xEC; break;
+ case 0xFEF1: ch = 0xED; break;
+ case 0xFEF2: ch = 0xED; break;
+ case 0xFEF3: ch = 0xED; break;
+ case 0xFEF4: ch = 0xED; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP1256
+
+public class ENCwindows_1256 : CP1256
+{
+ public ENCwindows_1256() : base() {}
+
+}; // class ENCwindows_1256
+
+}; // namespace I18N.MidEast
diff --git a/mcs/class/I18N/MidEast/CP28596.cs b/mcs/class/I18N/MidEast/CP28596.cs
new file mode 100644
index 00000000000..1ee3db0eb1b
--- /dev/null
+++ b/mcs/class/I18N/MidEast/CP28596.cs
@@ -0,0 +1,545 @@
+/*
+ * CP28596.cs - Arabic (ISO) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-1089.ucm".
+
+namespace I18N.MidEast
+{
+
+using System;
+using I18N.Common;
+
+public class CP28596 : ByteEncoding
+{
+ public CP28596()
+ : base(28596, ToChars, "Arabic (ISO)",
+ "iso-8859-6", "iso-8859-6", "iso-8859-6",
+ true, true, true, true, 1256)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
+ '\u0006', '\u0007', '\u0008', '\u0009', '\u000A', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
+ '\u0018', '\u0019', '\u001A', '\u001B', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
+ '\u0024', '\u0025', '\u0026', '\u0027', '\u0028', '\u0029',
+ '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
+ '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
+ '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
+ '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
+ '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
+ '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
+ '\u005A', '\u005B', '\u005C', '\u005D', '\u005E', '\u005F',
+ '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
+ '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
+ '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
+ '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
+ '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
+ '\u007E', '\u007F', '\u0080', '\u0081', '\u0082', '\u0083',
+ '\u0084', '\u0085', '\u0086', '\u0087', '\u0088', '\u0089',
+ '\u008A', '\u008B', '\u008C', '\u008D', '\u008E', '\u008F',
+ '\u0090', '\u0091', '\u0092', '\u0093', '\u0094', '\u0095',
+ '\u0096', '\u0097', '\u0098', '\u0099', '\u009A', '\u009B',
+ '\u009C', '\u009D', '\u009E', '\u009F', '\u00A0', '\u003F',
+ '\u003F', '\u003F', '\u00A4', '\u003F', '\u003F', '\u003F',
+ '\u003F', '\u003F', '\u003F', '\u003F', '\u060C', '\u00AD',
+ '\u003F', '\u003F', '\u003F', '\u003F', '\u003F', '\u003F',
+ '\u003F', '\u003F', '\u003F', '\u003F', '\u003F', '\u003F',
+ '\u003F', '\u061B', '\u003F', '\u003F', '\u003F', '\u061F',
+ '\u003F', '\u0621', '\u0622', '\u0623', '\u0624', '\u0625',
+ '\u0626', '\u0627', '\u0628', '\u0629', '\u062A', '\u062B',
+ '\u062C', '\u062D', '\u062E', '\u062F', '\u0630', '\u0631',
+ '\u0632', '\u0633', '\u0634', '\u0635', '\u0636', '\u0637',
+ '\u0638', '\u0639', '\u063A', '\u003F', '\u003F', '\u003F',
+ '\u003F', '\u003F', '\u0640', '\u0641', '\u0642', '\u0643',
+ '\u0644', '\u0645', '\u0646', '\u0647', '\u0648', '\u0649',
+ '\u064A', '\u064B', '\u064C', '\u064D', '\u064E', '\u064F',
+ '\u0650', '\u0651', '\u0652', '\u003F', '\u003F', '\u003F',
+ '\u003F', '\u003F', '\u003F', '\u003F', '\u003F', '\u003F',
+ '\u003F', '\u003F', '\u003F', '\u003F',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 161) switch(ch)
+ {
+ case 0x00A4:
+ case 0x00AD:
+ break;
+ case 0x060C: ch = 0xAC; break;
+ case 0x061B: ch = 0xBB; break;
+ case 0x061F: ch = 0xBF; break;
+ case 0x0621:
+ case 0x0622:
+ case 0x0623:
+ case 0x0624:
+ case 0x0625:
+ case 0x0626:
+ case 0x0627:
+ case 0x0628:
+ case 0x0629:
+ case 0x062A:
+ case 0x062B:
+ case 0x062C:
+ case 0x062D:
+ case 0x062E:
+ case 0x062F:
+ case 0x0630:
+ case 0x0631:
+ case 0x0632:
+ case 0x0633:
+ case 0x0634:
+ case 0x0635:
+ case 0x0636:
+ case 0x0637:
+ case 0x0638:
+ case 0x0639:
+ case 0x063A:
+ ch -= 0x0560;
+ break;
+ case 0x0640:
+ case 0x0641:
+ case 0x0642:
+ case 0x0643:
+ case 0x0644:
+ case 0x0645:
+ case 0x0646:
+ case 0x0647:
+ case 0x0648:
+ case 0x0649:
+ case 0x064A:
+ case 0x064B:
+ case 0x064C:
+ case 0x064D:
+ case 0x064E:
+ case 0x064F:
+ case 0x0650:
+ case 0x0651:
+ case 0x0652:
+ ch -= 0x0560;
+ break;
+ case 0x0660:
+ case 0x0661:
+ case 0x0662:
+ case 0x0663:
+ case 0x0664:
+ case 0x0665:
+ case 0x0666:
+ case 0x0667:
+ case 0x0668:
+ case 0x0669:
+ ch -= 0x0630;
+ break;
+ case 0x066A: ch = 0x25; break;
+ case 0x066B: ch = 0x2C; break;
+ case 0x066C: ch = 0x2E; break;
+ case 0x066D: ch = 0x2A; break;
+ case 0xFE70: ch = 0xEB; break;
+ case 0xFE71: ch = 0xEB; break;
+ case 0xFE72: ch = 0xEC; break;
+ case 0xFE74: ch = 0xED; break;
+ case 0xFE76: ch = 0xEE; break;
+ case 0xFE77: ch = 0xEE; break;
+ case 0xFE78: ch = 0xEF; break;
+ case 0xFE79: ch = 0xEF; break;
+ case 0xFE7A: ch = 0xF0; break;
+ case 0xFE7B: ch = 0xF0; break;
+ case 0xFE7C: ch = 0xF1; break;
+ case 0xFE7D: ch = 0xF1; break;
+ case 0xFE7E: ch = 0xF2; break;
+ case 0xFE7F: ch = 0xF2; break;
+ case 0xFE80: ch = 0xC1; break;
+ case 0xFE81: ch = 0xC2; break;
+ case 0xFE82: ch = 0xC2; break;
+ case 0xFE83: ch = 0xC3; break;
+ case 0xFE84: ch = 0xC3; break;
+ case 0xFE85: ch = 0xC4; break;
+ case 0xFE86: ch = 0xC4; break;
+ case 0xFE87: ch = 0xC5; break;
+ case 0xFE88: ch = 0xC5; break;
+ case 0xFE89: ch = 0xC6; break;
+ case 0xFE8A: ch = 0xC6; break;
+ case 0xFE8B: ch = 0xC6; break;
+ case 0xFE8C: ch = 0xC6; break;
+ case 0xFE8D: ch = 0xC7; break;
+ case 0xFE8E: ch = 0xC7; break;
+ case 0xFE8F: ch = 0xC8; break;
+ case 0xFE90: ch = 0xC8; break;
+ case 0xFE91: ch = 0xC8; break;
+ case 0xFE92: ch = 0xC8; break;
+ case 0xFE93: ch = 0xC9; break;
+ case 0xFE94: ch = 0xC9; break;
+ case 0xFE95: ch = 0xCA; break;
+ case 0xFE96: ch = 0xCA; break;
+ case 0xFE97: ch = 0xCA; break;
+ case 0xFE98: ch = 0xCA; break;
+ case 0xFE99: ch = 0xCB; break;
+ case 0xFE9A: ch = 0xCB; break;
+ case 0xFE9B: ch = 0xCB; break;
+ case 0xFE9C: ch = 0xCB; break;
+ case 0xFE9D: ch = 0xCC; break;
+ case 0xFE9E: ch = 0xCC; break;
+ case 0xFE9F: ch = 0xCC; break;
+ case 0xFEA0: ch = 0xCC; break;
+ case 0xFEA1: ch = 0xCD; break;
+ case 0xFEA2: ch = 0xCD; break;
+ case 0xFEA3: ch = 0xCD; break;
+ case 0xFEA4: ch = 0xCD; break;
+ case 0xFEA5: ch = 0xCE; break;
+ case 0xFEA6: ch = 0xCE; break;
+ case 0xFEA7: ch = 0xCE; break;
+ case 0xFEA8: ch = 0xCE; break;
+ case 0xFEA9: ch = 0xCF; break;
+ case 0xFEAA: ch = 0xCF; break;
+ case 0xFEAB: ch = 0xD0; break;
+ case 0xFEAC: ch = 0xD0; break;
+ case 0xFEAD: ch = 0xD1; break;
+ case 0xFEAE: ch = 0xD1; break;
+ case 0xFEAF: ch = 0xD2; break;
+ case 0xFEB0: ch = 0xD2; break;
+ case 0xFEB1: ch = 0xD3; break;
+ case 0xFEB2: ch = 0xD3; break;
+ case 0xFEB3: ch = 0xD3; break;
+ case 0xFEB4: ch = 0xD3; break;
+ case 0xFEB5: ch = 0xD4; break;
+ case 0xFEB6: ch = 0xD4; break;
+ case 0xFEB7: ch = 0xD4; break;
+ case 0xFEB8: ch = 0xD4; break;
+ case 0xFEB9: ch = 0xD5; break;
+ case 0xFEBA: ch = 0xD5; break;
+ case 0xFEBB: ch = 0xD5; break;
+ case 0xFEBC: ch = 0xD5; break;
+ case 0xFEBD: ch = 0xD6; break;
+ case 0xFEBE: ch = 0xD6; break;
+ case 0xFEBF: ch = 0xD6; break;
+ case 0xFEC0: ch = 0xD6; break;
+ case 0xFEC1: ch = 0xD7; break;
+ case 0xFEC2: ch = 0xD7; break;
+ case 0xFEC3: ch = 0xD7; break;
+ case 0xFEC4: ch = 0xD7; break;
+ case 0xFEC5: ch = 0xD8; break;
+ case 0xFEC6: ch = 0xD8; break;
+ case 0xFEC7: ch = 0xD8; break;
+ case 0xFEC8: ch = 0xD8; break;
+ case 0xFEC9: ch = 0xD9; break;
+ case 0xFECA: ch = 0xD9; break;
+ case 0xFECB: ch = 0xD9; break;
+ case 0xFECC: ch = 0xD9; break;
+ case 0xFECD: ch = 0xDA; break;
+ case 0xFECE: ch = 0xDA; break;
+ case 0xFECF: ch = 0xDA; break;
+ case 0xFED0: ch = 0xDA; break;
+ case 0xFED1: ch = 0xE1; break;
+ case 0xFED2: ch = 0xE1; break;
+ case 0xFED3: ch = 0xE1; break;
+ case 0xFED4: ch = 0xE1; break;
+ case 0xFED5: ch = 0xE2; break;
+ case 0xFED6: ch = 0xE2; break;
+ case 0xFED7: ch = 0xE2; break;
+ case 0xFED8: ch = 0xE2; break;
+ case 0xFED9: ch = 0xE3; break;
+ case 0xFEDA: ch = 0xE3; break;
+ case 0xFEDB: ch = 0xE3; break;
+ case 0xFEDC: ch = 0xE3; break;
+ case 0xFEDD: ch = 0xE4; break;
+ case 0xFEDE: ch = 0xE4; break;
+ case 0xFEDF: ch = 0xE4; break;
+ case 0xFEE0: ch = 0xE4; break;
+ case 0xFEE1: ch = 0xE5; break;
+ case 0xFEE2: ch = 0xE5; break;
+ case 0xFEE3: ch = 0xE5; break;
+ case 0xFEE4: ch = 0xE5; break;
+ case 0xFEE5: ch = 0xE6; break;
+ case 0xFEE6: ch = 0xE6; break;
+ case 0xFEE7: ch = 0xE6; break;
+ case 0xFEE8: ch = 0xE6; break;
+ case 0xFEE9: ch = 0xE7; break;
+ case 0xFEEA: ch = 0xE7; break;
+ case 0xFEEB: ch = 0xE7; break;
+ case 0xFEEC: ch = 0xE7; break;
+ case 0xFEED: ch = 0xE8; break;
+ case 0xFEEE: ch = 0xE8; break;
+ case 0xFEEF: ch = 0xE9; break;
+ case 0xFEF0: ch = 0xE9; break;
+ case 0xFEF1: ch = 0xEA; break;
+ case 0xFEF2: ch = 0xEA; break;
+ case 0xFEF3: ch = 0xEA; break;
+ case 0xFEF4: ch = 0xEA; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 161) switch(ch)
+ {
+ case 0x00A4:
+ case 0x00AD:
+ break;
+ case 0x060C: ch = 0xAC; break;
+ case 0x061B: ch = 0xBB; break;
+ case 0x061F: ch = 0xBF; break;
+ case 0x0621:
+ case 0x0622:
+ case 0x0623:
+ case 0x0624:
+ case 0x0625:
+ case 0x0626:
+ case 0x0627:
+ case 0x0628:
+ case 0x0629:
+ case 0x062A:
+ case 0x062B:
+ case 0x062C:
+ case 0x062D:
+ case 0x062E:
+ case 0x062F:
+ case 0x0630:
+ case 0x0631:
+ case 0x0632:
+ case 0x0633:
+ case 0x0634:
+ case 0x0635:
+ case 0x0636:
+ case 0x0637:
+ case 0x0638:
+ case 0x0639:
+ case 0x063A:
+ ch -= 0x0560;
+ break;
+ case 0x0640:
+ case 0x0641:
+ case 0x0642:
+ case 0x0643:
+ case 0x0644:
+ case 0x0645:
+ case 0x0646:
+ case 0x0647:
+ case 0x0648:
+ case 0x0649:
+ case 0x064A:
+ case 0x064B:
+ case 0x064C:
+ case 0x064D:
+ case 0x064E:
+ case 0x064F:
+ case 0x0650:
+ case 0x0651:
+ case 0x0652:
+ ch -= 0x0560;
+ break;
+ case 0x0660:
+ case 0x0661:
+ case 0x0662:
+ case 0x0663:
+ case 0x0664:
+ case 0x0665:
+ case 0x0666:
+ case 0x0667:
+ case 0x0668:
+ case 0x0669:
+ ch -= 0x0630;
+ break;
+ case 0x066A: ch = 0x25; break;
+ case 0x066B: ch = 0x2C; break;
+ case 0x066C: ch = 0x2E; break;
+ case 0x066D: ch = 0x2A; break;
+ case 0xFE70: ch = 0xEB; break;
+ case 0xFE71: ch = 0xEB; break;
+ case 0xFE72: ch = 0xEC; break;
+ case 0xFE74: ch = 0xED; break;
+ case 0xFE76: ch = 0xEE; break;
+ case 0xFE77: ch = 0xEE; break;
+ case 0xFE78: ch = 0xEF; break;
+ case 0xFE79: ch = 0xEF; break;
+ case 0xFE7A: ch = 0xF0; break;
+ case 0xFE7B: ch = 0xF0; break;
+ case 0xFE7C: ch = 0xF1; break;
+ case 0xFE7D: ch = 0xF1; break;
+ case 0xFE7E: ch = 0xF2; break;
+ case 0xFE7F: ch = 0xF2; break;
+ case 0xFE80: ch = 0xC1; break;
+ case 0xFE81: ch = 0xC2; break;
+ case 0xFE82: ch = 0xC2; break;
+ case 0xFE83: ch = 0xC3; break;
+ case 0xFE84: ch = 0xC3; break;
+ case 0xFE85: ch = 0xC4; break;
+ case 0xFE86: ch = 0xC4; break;
+ case 0xFE87: ch = 0xC5; break;
+ case 0xFE88: ch = 0xC5; break;
+ case 0xFE89: ch = 0xC6; break;
+ case 0xFE8A: ch = 0xC6; break;
+ case 0xFE8B: ch = 0xC6; break;
+ case 0xFE8C: ch = 0xC6; break;
+ case 0xFE8D: ch = 0xC7; break;
+ case 0xFE8E: ch = 0xC7; break;
+ case 0xFE8F: ch = 0xC8; break;
+ case 0xFE90: ch = 0xC8; break;
+ case 0xFE91: ch = 0xC8; break;
+ case 0xFE92: ch = 0xC8; break;
+ case 0xFE93: ch = 0xC9; break;
+ case 0xFE94: ch = 0xC9; break;
+ case 0xFE95: ch = 0xCA; break;
+ case 0xFE96: ch = 0xCA; break;
+ case 0xFE97: ch = 0xCA; break;
+ case 0xFE98: ch = 0xCA; break;
+ case 0xFE99: ch = 0xCB; break;
+ case 0xFE9A: ch = 0xCB; break;
+ case 0xFE9B: ch = 0xCB; break;
+ case 0xFE9C: ch = 0xCB; break;
+ case 0xFE9D: ch = 0xCC; break;
+ case 0xFE9E: ch = 0xCC; break;
+ case 0xFE9F: ch = 0xCC; break;
+ case 0xFEA0: ch = 0xCC; break;
+ case 0xFEA1: ch = 0xCD; break;
+ case 0xFEA2: ch = 0xCD; break;
+ case 0xFEA3: ch = 0xCD; break;
+ case 0xFEA4: ch = 0xCD; break;
+ case 0xFEA5: ch = 0xCE; break;
+ case 0xFEA6: ch = 0xCE; break;
+ case 0xFEA7: ch = 0xCE; break;
+ case 0xFEA8: ch = 0xCE; break;
+ case 0xFEA9: ch = 0xCF; break;
+ case 0xFEAA: ch = 0xCF; break;
+ case 0xFEAB: ch = 0xD0; break;
+ case 0xFEAC: ch = 0xD0; break;
+ case 0xFEAD: ch = 0xD1; break;
+ case 0xFEAE: ch = 0xD1; break;
+ case 0xFEAF: ch = 0xD2; break;
+ case 0xFEB0: ch = 0xD2; break;
+ case 0xFEB1: ch = 0xD3; break;
+ case 0xFEB2: ch = 0xD3; break;
+ case 0xFEB3: ch = 0xD3; break;
+ case 0xFEB4: ch = 0xD3; break;
+ case 0xFEB5: ch = 0xD4; break;
+ case 0xFEB6: ch = 0xD4; break;
+ case 0xFEB7: ch = 0xD4; break;
+ case 0xFEB8: ch = 0xD4; break;
+ case 0xFEB9: ch = 0xD5; break;
+ case 0xFEBA: ch = 0xD5; break;
+ case 0xFEBB: ch = 0xD5; break;
+ case 0xFEBC: ch = 0xD5; break;
+ case 0xFEBD: ch = 0xD6; break;
+ case 0xFEBE: ch = 0xD6; break;
+ case 0xFEBF: ch = 0xD6; break;
+ case 0xFEC0: ch = 0xD6; break;
+ case 0xFEC1: ch = 0xD7; break;
+ case 0xFEC2: ch = 0xD7; break;
+ case 0xFEC3: ch = 0xD7; break;
+ case 0xFEC4: ch = 0xD7; break;
+ case 0xFEC5: ch = 0xD8; break;
+ case 0xFEC6: ch = 0xD8; break;
+ case 0xFEC7: ch = 0xD8; break;
+ case 0xFEC8: ch = 0xD8; break;
+ case 0xFEC9: ch = 0xD9; break;
+ case 0xFECA: ch = 0xD9; break;
+ case 0xFECB: ch = 0xD9; break;
+ case 0xFECC: ch = 0xD9; break;
+ case 0xFECD: ch = 0xDA; break;
+ case 0xFECE: ch = 0xDA; break;
+ case 0xFECF: ch = 0xDA; break;
+ case 0xFED0: ch = 0xDA; break;
+ case 0xFED1: ch = 0xE1; break;
+ case 0xFED2: ch = 0xE1; break;
+ case 0xFED3: ch = 0xE1; break;
+ case 0xFED4: ch = 0xE1; break;
+ case 0xFED5: ch = 0xE2; break;
+ case 0xFED6: ch = 0xE2; break;
+ case 0xFED7: ch = 0xE2; break;
+ case 0xFED8: ch = 0xE2; break;
+ case 0xFED9: ch = 0xE3; break;
+ case 0xFEDA: ch = 0xE3; break;
+ case 0xFEDB: ch = 0xE3; break;
+ case 0xFEDC: ch = 0xE3; break;
+ case 0xFEDD: ch = 0xE4; break;
+ case 0xFEDE: ch = 0xE4; break;
+ case 0xFEDF: ch = 0xE4; break;
+ case 0xFEE0: ch = 0xE4; break;
+ case 0xFEE1: ch = 0xE5; break;
+ case 0xFEE2: ch = 0xE5; break;
+ case 0xFEE3: ch = 0xE5; break;
+ case 0xFEE4: ch = 0xE5; break;
+ case 0xFEE5: ch = 0xE6; break;
+ case 0xFEE6: ch = 0xE6; break;
+ case 0xFEE7: ch = 0xE6; break;
+ case 0xFEE8: ch = 0xE6; break;
+ case 0xFEE9: ch = 0xE7; break;
+ case 0xFEEA: ch = 0xE7; break;
+ case 0xFEEB: ch = 0xE7; break;
+ case 0xFEEC: ch = 0xE7; break;
+ case 0xFEED: ch = 0xE8; break;
+ case 0xFEEE: ch = 0xE8; break;
+ case 0xFEEF: ch = 0xE9; break;
+ case 0xFEF0: ch = 0xE9; break;
+ case 0xFEF1: ch = 0xEA; break;
+ case 0xFEF2: ch = 0xEA; break;
+ case 0xFEF3: ch = 0xEA; break;
+ case 0xFEF4: ch = 0xEA; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP28596
+
+public class ENCiso_8859_6 : CP28596
+{
+ public ENCiso_8859_6() : base() {}
+
+}; // class ENCiso_8859_6
+
+}; // namespace I18N.MidEast
diff --git a/mcs/class/I18N/MidEast/CP28598.cs b/mcs/class/I18N/MidEast/CP28598.cs
new file mode 100644
index 00000000000..a2b11fffe89
--- /dev/null
+++ b/mcs/class/I18N/MidEast/CP28598.cs
@@ -0,0 +1,261 @@
+/*
+ * CP28598.cs - Hebrew (ISO) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-916.ucm".
+
+namespace I18N.MidEast
+{
+
+using System;
+using I18N.Common;
+
+public class CP28598 : ByteEncoding
+{
+ public CP28598()
+ : base(28598, ToChars, "Hebrew (ISO)",
+ "iso-8859-8", "iso-8859-8", "iso-8859-8",
+ true, true, true, true, 1255)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
+ '\u0006', '\u0007', '\u0008', '\u0009', '\u000A', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
+ '\u0018', '\u0019', '\u001A', '\u001B', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
+ '\u0024', '\u0025', '\u0026', '\u0027', '\u0028', '\u0029',
+ '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
+ '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
+ '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
+ '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
+ '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
+ '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
+ '\u005A', '\u005B', '\u005C', '\u005D', '\u005E', '\u005F',
+ '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
+ '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
+ '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
+ '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
+ '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
+ '\u007E', '\u007F', '\u0080', '\u0081', '\u0082', '\u0083',
+ '\u0084', '\u0085', '\u0086', '\u0087', '\u0088', '\u0089',
+ '\u008A', '\u008B', '\u008C', '\u008D', '\u008E', '\u008F',
+ '\u0090', '\u0091', '\u0092', '\u0093', '\u0094', '\u0095',
+ '\u0096', '\u0097', '\u0098', '\u0099', '\u009A', '\u009B',
+ '\u009C', '\u009D', '\u009E', '\u009F', '\u00A0', '\u003F',
+ '\u00A2', '\u00A3', '\u00A4', '\u00A5', '\u00A6', '\u00A7',
+ '\u00A8', '\u00A9', '\u00D7', '\u00AB', '\u00AC', '\u00AD',
+ '\u00AE', '\u203E', '\u00B0', '\u00B1', '\u00B2', '\u00B3',
+ '\u00B4', '\u00B5', '\u00B6', '\u2022', '\u00B8', '\u00B9',
+ '\u00F7', '\u00BB', '\u00BC', '\u00BD', '\u00BE', '\u003F',
+ '\u003F', '\u003F', '\u003F', '\u003F', '\u003F', '\u003F',
+ '\u003F', '\u003F', '\u003F', '\u003F', '\u003F', '\u003F',
+ '\u003F', '\u003F', '\u003F', '\u003F', '\u003F', '\u003F',
+ '\u003F', '\u003F', '\u003F', '\u003F', '\u003F', '\u003F',
+ '\u003F', '\u003F', '\u003F', '\u003F', '\u003F', '\u003F',
+ '\u003F', '\u2017', '\u05D0', '\u05D1', '\u05D2', '\u05D3',
+ '\u05D4', '\u05D5', '\u05D6', '\u05D7', '\u05D8', '\u05D9',
+ '\u05DA', '\u05DB', '\u05DC', '\u05DD', '\u05DE', '\u05DF',
+ '\u05E0', '\u05E1', '\u05E2', '\u05E3', '\u05E4', '\u05E5',
+ '\u05E6', '\u05E7', '\u05E8', '\u05E9', '\u05EA', '\u003F',
+ '\u003F', '\u003F', '\u003F', '\u003F',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 161) switch(ch)
+ {
+ case 0x00A2:
+ case 0x00A3:
+ case 0x00A4:
+ case 0x00A5:
+ case 0x00A6:
+ case 0x00A7:
+ case 0x00A8:
+ case 0x00A9:
+ case 0x00AB:
+ case 0x00AC:
+ case 0x00AD:
+ case 0x00AE:
+ case 0x00B0:
+ case 0x00B1:
+ case 0x00B2:
+ case 0x00B3:
+ case 0x00B4:
+ case 0x00B5:
+ case 0x00B6:
+ case 0x00B8:
+ case 0x00B9:
+ case 0x00BB:
+ case 0x00BC:
+ case 0x00BD:
+ case 0x00BE:
+ break;
+ case 0x00D7: ch = 0xAA; break;
+ case 0x00F7: ch = 0xBA; break;
+ case 0x05D0:
+ case 0x05D1:
+ case 0x05D2:
+ case 0x05D3:
+ case 0x05D4:
+ case 0x05D5:
+ case 0x05D6:
+ case 0x05D7:
+ case 0x05D8:
+ case 0x05D9:
+ case 0x05DA:
+ case 0x05DB:
+ case 0x05DC:
+ case 0x05DD:
+ case 0x05DE:
+ case 0x05DF:
+ case 0x05E0:
+ case 0x05E1:
+ case 0x05E2:
+ case 0x05E3:
+ case 0x05E4:
+ case 0x05E5:
+ case 0x05E6:
+ case 0x05E7:
+ case 0x05E8:
+ case 0x05E9:
+ case 0x05EA:
+ ch -= 0x04F0;
+ break;
+ case 0x2017: ch = 0xDF; break;
+ case 0x2022: ch = 0xB7; break;
+ case 0x203E: ch = 0xAF; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 161) switch(ch)
+ {
+ case 0x00A2:
+ case 0x00A3:
+ case 0x00A4:
+ case 0x00A5:
+ case 0x00A6:
+ case 0x00A7:
+ case 0x00A8:
+ case 0x00A9:
+ case 0x00AB:
+ case 0x00AC:
+ case 0x00AD:
+ case 0x00AE:
+ case 0x00B0:
+ case 0x00B1:
+ case 0x00B2:
+ case 0x00B3:
+ case 0x00B4:
+ case 0x00B5:
+ case 0x00B6:
+ case 0x00B8:
+ case 0x00B9:
+ case 0x00BB:
+ case 0x00BC:
+ case 0x00BD:
+ case 0x00BE:
+ break;
+ case 0x00D7: ch = 0xAA; break;
+ case 0x00F7: ch = 0xBA; break;
+ case 0x05D0:
+ case 0x05D1:
+ case 0x05D2:
+ case 0x05D3:
+ case 0x05D4:
+ case 0x05D5:
+ case 0x05D6:
+ case 0x05D7:
+ case 0x05D8:
+ case 0x05D9:
+ case 0x05DA:
+ case 0x05DB:
+ case 0x05DC:
+ case 0x05DD:
+ case 0x05DE:
+ case 0x05DF:
+ case 0x05E0:
+ case 0x05E1:
+ case 0x05E2:
+ case 0x05E3:
+ case 0x05E4:
+ case 0x05E5:
+ case 0x05E6:
+ case 0x05E7:
+ case 0x05E8:
+ case 0x05E9:
+ case 0x05EA:
+ ch -= 0x04F0;
+ break;
+ case 0x2017: ch = 0xDF; break;
+ case 0x2022: ch = 0xB7; break;
+ case 0x203E: ch = 0xAF; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP28598
+
+public class ENCiso_8859_8 : CP28598
+{
+ public ENCiso_8859_8() : base() {}
+
+}; // class ENCiso_8859_8
+
+}; // namespace I18N.MidEast
diff --git a/mcs/class/I18N/MidEast/CP28599.cs b/mcs/class/I18N/MidEast/CP28599.cs
new file mode 100644
index 00000000000..ab6b96166d7
--- /dev/null
+++ b/mcs/class/I18N/MidEast/CP28599.cs
@@ -0,0 +1,241 @@
+/*
+ * CP28599.cs - Latin 5 (ISO) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-920.ucm".
+
+namespace I18N.MidEast
+{
+
+using System;
+using I18N.Common;
+
+public class CP28599 : ByteEncoding
+{
+ public CP28599()
+ : base(28599, ToChars, "Latin 5 (ISO)",
+ "iso-8859-9", "iso-8859-9", "iso-8859-9",
+ true, true, true, true, 1254)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
+ '\u0006', '\u0007', '\u0008', '\u0009', '\u000A', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
+ '\u0018', '\u0019', '\u001A', '\u001B', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
+ '\u0024', '\u0025', '\u0026', '\u0027', '\u0028', '\u0029',
+ '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
+ '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
+ '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
+ '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
+ '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
+ '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
+ '\u005A', '\u005B', '\u005C', '\u005D', '\u005E', '\u005F',
+ '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
+ '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
+ '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
+ '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
+ '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
+ '\u007E', '\u007F', '\u0080', '\u0081', '\u0082', '\u0083',
+ '\u0084', '\u0085', '\u0086', '\u0087', '\u0088', '\u0089',
+ '\u008A', '\u008B', '\u008C', '\u008D', '\u008E', '\u008F',
+ '\u0090', '\u0091', '\u0092', '\u0093', '\u0094', '\u0095',
+ '\u0096', '\u0097', '\u0098', '\u0099', '\u009A', '\u009B',
+ '\u009C', '\u009D', '\u009E', '\u009F', '\u00A0', '\u00A1',
+ '\u00A2', '\u00A3', '\u00A4', '\u00A5', '\u00A6', '\u00A7',
+ '\u00A8', '\u00A9', '\u00AA', '\u00AB', '\u00AC', '\u00AD',
+ '\u00AE', '\u00AF', '\u00B0', '\u00B1', '\u00B2', '\u00B3',
+ '\u00B4', '\u00B5', '\u00B6', '\u00B7', '\u00B8', '\u00B9',
+ '\u00BA', '\u00BB', '\u00BC', '\u00BD', '\u00BE', '\u00BF',
+ '\u00C0', '\u00C1', '\u00C2', '\u00C3', '\u00C4', '\u00C5',
+ '\u00C6', '\u00C7', '\u00C8', '\u00C9', '\u00CA', '\u00CB',
+ '\u00CC', '\u00CD', '\u00CE', '\u00CF', '\u011E', '\u00D1',
+ '\u00D2', '\u00D3', '\u00D4', '\u00D5', '\u00D6', '\u00D7',
+ '\u00D8', '\u00D9', '\u00DA', '\u00DB', '\u00DC', '\u0130',
+ '\u015E', '\u00DF', '\u00E0', '\u00E1', '\u00E2', '\u00E3',
+ '\u00E4', '\u00E5', '\u00E6', '\u00E7', '\u00E8', '\u00E9',
+ '\u00EA', '\u00EB', '\u00EC', '\u00ED', '\u00EE', '\u00EF',
+ '\u011F', '\u00F1', '\u00F2', '\u00F3', '\u00F4', '\u00F5',
+ '\u00F6', '\u00F7', '\u00F8', '\u00F9', '\u00FA', '\u00FB',
+ '\u00FC', '\u0131', '\u015F', '\u00FF',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 208) switch(ch)
+ {
+ case 0x00D1:
+ case 0x00D2:
+ case 0x00D3:
+ case 0x00D4:
+ case 0x00D5:
+ case 0x00D6:
+ case 0x00D7:
+ case 0x00D8:
+ case 0x00D9:
+ case 0x00DA:
+ case 0x00DB:
+ case 0x00DC:
+ case 0x00DF:
+ case 0x00E0:
+ case 0x00E1:
+ case 0x00E2:
+ case 0x00E3:
+ case 0x00E4:
+ case 0x00E5:
+ case 0x00E6:
+ case 0x00E7:
+ case 0x00E8:
+ case 0x00E9:
+ case 0x00EA:
+ case 0x00EB:
+ case 0x00EC:
+ case 0x00ED:
+ case 0x00EE:
+ case 0x00EF:
+ case 0x00F1:
+ case 0x00F2:
+ case 0x00F3:
+ case 0x00F4:
+ case 0x00F5:
+ case 0x00F6:
+ case 0x00F7:
+ case 0x00F8:
+ case 0x00F9:
+ case 0x00FA:
+ case 0x00FB:
+ case 0x00FC:
+ case 0x00FF:
+ break;
+ case 0x011E: ch = 0xD0; break;
+ case 0x011F: ch = 0xF0; break;
+ case 0x0130: ch = 0xDD; break;
+ case 0x0131: ch = 0xFD; break;
+ case 0x015E: ch = 0xDE; break;
+ case 0x015F: ch = 0xFE; break;
+ case 0x203E: ch = 0xAF; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 208) switch(ch)
+ {
+ case 0x00D1:
+ case 0x00D2:
+ case 0x00D3:
+ case 0x00D4:
+ case 0x00D5:
+ case 0x00D6:
+ case 0x00D7:
+ case 0x00D8:
+ case 0x00D9:
+ case 0x00DA:
+ case 0x00DB:
+ case 0x00DC:
+ case 0x00DF:
+ case 0x00E0:
+ case 0x00E1:
+ case 0x00E2:
+ case 0x00E3:
+ case 0x00E4:
+ case 0x00E5:
+ case 0x00E6:
+ case 0x00E7:
+ case 0x00E8:
+ case 0x00E9:
+ case 0x00EA:
+ case 0x00EB:
+ case 0x00EC:
+ case 0x00ED:
+ case 0x00EE:
+ case 0x00EF:
+ case 0x00F1:
+ case 0x00F2:
+ case 0x00F3:
+ case 0x00F4:
+ case 0x00F5:
+ case 0x00F6:
+ case 0x00F7:
+ case 0x00F8:
+ case 0x00F9:
+ case 0x00FA:
+ case 0x00FB:
+ case 0x00FC:
+ case 0x00FF:
+ break;
+ case 0x011E: ch = 0xD0; break;
+ case 0x011F: ch = 0xF0; break;
+ case 0x0130: ch = 0xDD; break;
+ case 0x0131: ch = 0xFD; break;
+ case 0x015E: ch = 0xDE; break;
+ case 0x015F: ch = 0xFE; break;
+ case 0x203E: ch = 0xAF; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP28599
+
+public class ENCiso_8859_9 : CP28599
+{
+ public ENCiso_8859_9() : base() {}
+
+}; // class ENCiso_8859_9
+
+}; // namespace I18N.MidEast
diff --git a/mcs/class/I18N/MidEast/CP38598.cs b/mcs/class/I18N/MidEast/CP38598.cs
new file mode 100644
index 00000000000..c0b8e4de9d7
--- /dev/null
+++ b/mcs/class/I18N/MidEast/CP38598.cs
@@ -0,0 +1,261 @@
+/*
+ * CP38598.cs - Hebrew (ISO Alternative) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-916.ucm".
+
+namespace I18N.MidEast
+{
+
+using System;
+using I18N.Common;
+
+public class CP38598 : ByteEncoding
+{
+ public CP38598()
+ : base(38598, ToChars, "Hebrew (ISO Alternative)",
+ "iso-8859-8", "windows-38598", "windows-38598",
+ true, true, true, true, 1255)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
+ '\u0006', '\u0007', '\u0008', '\u0009', '\u000A', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
+ '\u0018', '\u0019', '\u001A', '\u001B', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
+ '\u0024', '\u0025', '\u0026', '\u0027', '\u0028', '\u0029',
+ '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
+ '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
+ '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
+ '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
+ '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
+ '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
+ '\u005A', '\u005B', '\u005C', '\u005D', '\u005E', '\u005F',
+ '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
+ '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
+ '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
+ '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
+ '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
+ '\u007E', '\u007F', '\u0080', '\u0081', '\u0082', '\u0083',
+ '\u0084', '\u0085', '\u0086', '\u0087', '\u0088', '\u0089',
+ '\u008A', '\u008B', '\u008C', '\u008D', '\u008E', '\u008F',
+ '\u0090', '\u0091', '\u0092', '\u0093', '\u0094', '\u0095',
+ '\u0096', '\u0097', '\u0098', '\u0099', '\u009A', '\u009B',
+ '\u009C', '\u009D', '\u009E', '\u009F', '\u00A0', '\u003F',
+ '\u00A2', '\u00A3', '\u00A4', '\u00A5', '\u00A6', '\u00A7',
+ '\u00A8', '\u00A9', '\u00D7', '\u00AB', '\u00AC', '\u00AD',
+ '\u00AE', '\u203E', '\u00B0', '\u00B1', '\u00B2', '\u00B3',
+ '\u00B4', '\u00B5', '\u00B6', '\u2022', '\u00B8', '\u00B9',
+ '\u00F7', '\u00BB', '\u00BC', '\u00BD', '\u00BE', '\u003F',
+ '\u003F', '\u003F', '\u003F', '\u003F', '\u003F', '\u003F',
+ '\u003F', '\u003F', '\u003F', '\u003F', '\u003F', '\u003F',
+ '\u003F', '\u003F', '\u003F', '\u003F', '\u003F', '\u003F',
+ '\u003F', '\u003F', '\u003F', '\u003F', '\u003F', '\u003F',
+ '\u003F', '\u003F', '\u003F', '\u003F', '\u003F', '\u003F',
+ '\u003F', '\u2017', '\u05D0', '\u05D1', '\u05D2', '\u05D3',
+ '\u05D4', '\u05D5', '\u05D6', '\u05D7', '\u05D8', '\u05D9',
+ '\u05DA', '\u05DB', '\u05DC', '\u05DD', '\u05DE', '\u05DF',
+ '\u05E0', '\u05E1', '\u05E2', '\u05E3', '\u05E4', '\u05E5',
+ '\u05E6', '\u05E7', '\u05E8', '\u05E9', '\u05EA', '\u003F',
+ '\u003F', '\u003F', '\u003F', '\u003F',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 161) switch(ch)
+ {
+ case 0x00A2:
+ case 0x00A3:
+ case 0x00A4:
+ case 0x00A5:
+ case 0x00A6:
+ case 0x00A7:
+ case 0x00A8:
+ case 0x00A9:
+ case 0x00AB:
+ case 0x00AC:
+ case 0x00AD:
+ case 0x00AE:
+ case 0x00B0:
+ case 0x00B1:
+ case 0x00B2:
+ case 0x00B3:
+ case 0x00B4:
+ case 0x00B5:
+ case 0x00B6:
+ case 0x00B8:
+ case 0x00B9:
+ case 0x00BB:
+ case 0x00BC:
+ case 0x00BD:
+ case 0x00BE:
+ break;
+ case 0x00D7: ch = 0xAA; break;
+ case 0x00F7: ch = 0xBA; break;
+ case 0x05D0:
+ case 0x05D1:
+ case 0x05D2:
+ case 0x05D3:
+ case 0x05D4:
+ case 0x05D5:
+ case 0x05D6:
+ case 0x05D7:
+ case 0x05D8:
+ case 0x05D9:
+ case 0x05DA:
+ case 0x05DB:
+ case 0x05DC:
+ case 0x05DD:
+ case 0x05DE:
+ case 0x05DF:
+ case 0x05E0:
+ case 0x05E1:
+ case 0x05E2:
+ case 0x05E3:
+ case 0x05E4:
+ case 0x05E5:
+ case 0x05E6:
+ case 0x05E7:
+ case 0x05E8:
+ case 0x05E9:
+ case 0x05EA:
+ ch -= 0x04F0;
+ break;
+ case 0x2017: ch = 0xDF; break;
+ case 0x2022: ch = 0xB7; break;
+ case 0x203E: ch = 0xAF; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 161) switch(ch)
+ {
+ case 0x00A2:
+ case 0x00A3:
+ case 0x00A4:
+ case 0x00A5:
+ case 0x00A6:
+ case 0x00A7:
+ case 0x00A8:
+ case 0x00A9:
+ case 0x00AB:
+ case 0x00AC:
+ case 0x00AD:
+ case 0x00AE:
+ case 0x00B0:
+ case 0x00B1:
+ case 0x00B2:
+ case 0x00B3:
+ case 0x00B4:
+ case 0x00B5:
+ case 0x00B6:
+ case 0x00B8:
+ case 0x00B9:
+ case 0x00BB:
+ case 0x00BC:
+ case 0x00BD:
+ case 0x00BE:
+ break;
+ case 0x00D7: ch = 0xAA; break;
+ case 0x00F7: ch = 0xBA; break;
+ case 0x05D0:
+ case 0x05D1:
+ case 0x05D2:
+ case 0x05D3:
+ case 0x05D4:
+ case 0x05D5:
+ case 0x05D6:
+ case 0x05D7:
+ case 0x05D8:
+ case 0x05D9:
+ case 0x05DA:
+ case 0x05DB:
+ case 0x05DC:
+ case 0x05DD:
+ case 0x05DE:
+ case 0x05DF:
+ case 0x05E0:
+ case 0x05E1:
+ case 0x05E2:
+ case 0x05E3:
+ case 0x05E4:
+ case 0x05E5:
+ case 0x05E6:
+ case 0x05E7:
+ case 0x05E8:
+ case 0x05E9:
+ case 0x05EA:
+ ch -= 0x04F0;
+ break;
+ case 0x2017: ch = 0xDF; break;
+ case 0x2022: ch = 0xB7; break;
+ case 0x203E: ch = 0xAF; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP38598
+
+public class ENCwindows_38598 : CP38598
+{
+ public ENCwindows_38598() : base() {}
+
+}; // class ENCwindows_38598
+
+}; // namespace I18N.MidEast
diff --git a/mcs/class/I18N/MidEast/ibm-1089.ucm b/mcs/class/I18N/MidEast/ibm-1089.ucm
new file mode 100644
index 00000000000..3356cdfa543
--- /dev/null
+++ b/mcs/class/I18N/MidEast/ibm-1089.ucm
@@ -0,0 +1,477 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1995-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Fri Nov 10 13:07:47 2000
+#
+# File created by dtcocm version 3.00
+# from source files 34B00441.RPMAP100 and 044134B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-1089"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x1A
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-1089
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x1A |0
+<U001B> \x1B |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x7F |0
+<U0080> \x80 |0
+<U0081> \x81 |0
+<U0082> \x82 |0
+<U0083> \x83 |0
+<U0084> \x84 |0
+<U0085> \x85 |0
+<U0086> \x86 |0
+<U0087> \x87 |0
+<U0088> \x88 |0
+<U0089> \x89 |0
+<U008A> \x8A |0
+<U008B> \x8B |0
+<U008C> \x8C |0
+<U008D> \x8D |0
+<U008E> \x8E |0
+<U008F> \x8F |0
+<U0090> \x90 |0
+<U0091> \x91 |0
+<U0092> \x92 |0
+<U0093> \x93 |0
+<U0094> \x94 |0
+<U0095> \x95 |0
+<U0096> \x96 |0
+<U0097> \x97 |0
+<U0098> \x98 |0
+<U0099> \x99 |0
+<U009A> \x9A |0
+<U009B> \x9B |0
+<U009C> \x9C |0
+<U009D> \x9D |0
+<U009E> \x9E |0
+<U009F> \x9F |0
+<U00A0> \xA0 |0
+<U00A4> \xA4 |0
+<U00AD> \xAD |0
+<U060C> \xAC |0
+<U061B> \xBB |0
+<U061F> \xBF |0
+<U0621> \xC1 |0
+<U0622> \xC2 |0
+<U0623> \xC3 |0
+<U0624> \xC4 |0
+<U0625> \xC5 |0
+<U0626> \xC6 |0
+<U0627> \xC7 |0
+<U0628> \xC8 |0
+<U0629> \xC9 |0
+<U062A> \xCA |0
+<U062B> \xCB |0
+<U062C> \xCC |0
+<U062D> \xCD |0
+<U062E> \xCE |0
+<U062F> \xCF |0
+<U0630> \xD0 |0
+<U0631> \xD1 |0
+<U0632> \xD2 |0
+<U0633> \xD3 |0
+<U0634> \xD4 |0
+<U0635> \xD5 |0
+<U0636> \xD6 |0
+<U0637> \xD7 |0
+<U0638> \xD8 |0
+<U0639> \xD9 |0
+<U063A> \xDA |0
+<U0640> \xE0 |0
+<U0641> \xE1 |0
+<U0642> \xE2 |0
+<U0643> \xE3 |0
+<U0644> \xE4 |0
+<U0645> \xE5 |0
+<U0646> \xE6 |0
+<U0647> \xE7 |0
+<U0648> \xE8 |0
+<U0649> \xE9 |0
+<U064A> \xEA |0
+<U064B> \xEB |0
+<U064C> \xEC |0
+<U064D> \xED |0
+<U064E> \xEE |0
+<U064F> \xEF |0
+<U0650> \xF0 |0
+<U0651> \xF1 |0
+<U0652> \xF2 |0
+<U0660> \x30 |1
+<U0661> \x31 |1
+<U0662> \x32 |1
+<U0663> \x33 |1
+<U0664> \x34 |1
+<U0665> \x35 |1
+<U0666> \x36 |1
+<U0667> \x37 |1
+<U0668> \x38 |1
+<U0669> \x39 |1
+<U066A> \x25 |1
+<U066B> \x2C |1
+<U066C> \x2E |1
+<U066D> \x2A |1
+<UFE70> \xEB |1
+<UFE71> \xEB |1
+<UFE72> \xEC |1
+<UFE74> \xED |1
+<UFE76> \xEE |1
+<UFE77> \xEE |1
+<UFE78> \xEF |1
+<UFE79> \xEF |1
+<UFE7A> \xF0 |1
+<UFE7B> \xF0 |1
+<UFE7C> \xF1 |1
+<UFE7D> \xF1 |1
+<UFE7E> \xF2 |1
+<UFE7F> \xF2 |1
+<UFE80> \xC1 |1
+<UFE81> \xC2 |1
+<UFE82> \xC2 |1
+<UFE83> \xC3 |1
+<UFE84> \xC3 |1
+<UFE85> \xC4 |1
+<UFE86> \xC4 |1
+<UFE87> \xC5 |1
+<UFE88> \xC5 |1
+<UFE89> \xC6 |1
+<UFE8A> \xC6 |1
+<UFE8B> \xC6 |1
+<UFE8C> \xC6 |1
+<UFE8D> \xC7 |1
+<UFE8E> \xC7 |1
+<UFE8F> \xC8 |1
+<UFE90> \xC8 |1
+<UFE91> \xC8 |1
+<UFE92> \xC8 |1
+<UFE93> \xC9 |1
+<UFE94> \xC9 |1
+<UFE95> \xCA |1
+<UFE96> \xCA |1
+<UFE97> \xCA |1
+<UFE98> \xCA |1
+<UFE99> \xCB |1
+<UFE9A> \xCB |1
+<UFE9B> \xCB |1
+<UFE9C> \xCB |1
+<UFE9D> \xCC |1
+<UFE9E> \xCC |1
+<UFE9F> \xCC |1
+<UFEA0> \xCC |1
+<UFEA1> \xCD |1
+<UFEA2> \xCD |1
+<UFEA3> \xCD |1
+<UFEA4> \xCD |1
+<UFEA5> \xCE |1
+<UFEA6> \xCE |1
+<UFEA7> \xCE |1
+<UFEA8> \xCE |1
+<UFEA9> \xCF |1
+<UFEAA> \xCF |1
+<UFEAB> \xD0 |1
+<UFEAC> \xD0 |1
+<UFEAD> \xD1 |1
+<UFEAE> \xD1 |1
+<UFEAF> \xD2 |1
+<UFEB0> \xD2 |1
+<UFEB1> \xD3 |1
+<UFEB2> \xD3 |1
+<UFEB3> \xD3 |1
+<UFEB4> \xD3 |1
+<UFEB5> \xD4 |1
+<UFEB6> \xD4 |1
+<UFEB7> \xD4 |1
+<UFEB8> \xD4 |1
+<UFEB9> \xD5 |1
+<UFEBA> \xD5 |1
+<UFEBB> \xD5 |1
+<UFEBC> \xD5 |1
+<UFEBD> \xD6 |1
+<UFEBE> \xD6 |1
+<UFEBF> \xD6 |1
+<UFEC0> \xD6 |1
+<UFEC1> \xD7 |1
+<UFEC2> \xD7 |1
+<UFEC3> \xD7 |1
+<UFEC4> \xD7 |1
+<UFEC5> \xD8 |1
+<UFEC6> \xD8 |1
+<UFEC7> \xD8 |1
+<UFEC8> \xD8 |1
+<UFEC9> \xD9 |1
+<UFECA> \xD9 |1
+<UFECB> \xD9 |1
+<UFECC> \xD9 |1
+<UFECD> \xDA |1
+<UFECE> \xDA |1
+<UFECF> \xDA |1
+<UFED0> \xDA |1
+<UFED1> \xE1 |1
+<UFED2> \xE1 |1
+<UFED3> \xE1 |1
+<UFED4> \xE1 |1
+<UFED5> \xE2 |1
+<UFED6> \xE2 |1
+<UFED7> \xE2 |1
+<UFED8> \xE2 |1
+<UFED9> \xE3 |1
+<UFEDA> \xE3 |1
+<UFEDB> \xE3 |1
+<UFEDC> \xE3 |1
+<UFEDD> \xE4 |1
+<UFEDE> \xE4 |1
+<UFEDF> \xE4 |1
+<UFEE0> \xE4 |1
+<UFEE1> \xE5 |1
+<UFEE2> \xE5 |1
+<UFEE3> \xE5 |1
+<UFEE4> \xE5 |1
+<UFEE5> \xE6 |1
+<UFEE6> \xE6 |1
+<UFEE7> \xE6 |1
+<UFEE8> \xE6 |1
+<UFEE9> \xE7 |1
+<UFEEA> \xE7 |1
+<UFEEB> \xE7 |1
+<UFEEC> \xE7 |1
+<UFEED> \xE8 |1
+<UFEEE> \xE8 |1
+<UFEEF> \xE9 |1
+<UFEF0> \xE9 |1
+<UFEF1> \xEA |1
+<UFEF2> \xEA |1
+<UFEF3> \xEA |1
+<UFEF4> \xEA |1
+<UFF01> \x21 |1
+<UFF02> \x22 |1
+<UFF03> \x23 |1
+<UFF04> \x24 |1
+<UFF05> \x25 |1
+<UFF06> \x26 |1
+<UFF07> \x27 |1
+<UFF08> \x28 |1
+<UFF09> \x29 |1
+<UFF0A> \x2A |1
+<UFF0B> \x2B |1
+<UFF0C> \x2C |1
+<UFF0D> \x2D |1
+<UFF0E> \x2E |1
+<UFF0F> \x2F |1
+<UFF10> \x30 |1
+<UFF11> \x31 |1
+<UFF12> \x32 |1
+<UFF13> \x33 |1
+<UFF14> \x34 |1
+<UFF15> \x35 |1
+<UFF16> \x36 |1
+<UFF17> \x37 |1
+<UFF18> \x38 |1
+<UFF19> \x39 |1
+<UFF1A> \x3A |1
+<UFF1B> \x3B |1
+<UFF1C> \x3C |1
+<UFF1D> \x3D |1
+<UFF1E> \x3E |1
+<UFF1F> \x3F |1
+<UFF20> \x40 |1
+<UFF21> \x41 |1
+<UFF22> \x42 |1
+<UFF23> \x43 |1
+<UFF24> \x44 |1
+<UFF25> \x45 |1
+<UFF26> \x46 |1
+<UFF27> \x47 |1
+<UFF28> \x48 |1
+<UFF29> \x49 |1
+<UFF2A> \x4A |1
+<UFF2B> \x4B |1
+<UFF2C> \x4C |1
+<UFF2D> \x4D |1
+<UFF2E> \x4E |1
+<UFF2F> \x4F |1
+<UFF30> \x50 |1
+<UFF31> \x51 |1
+<UFF32> \x52 |1
+<UFF33> \x53 |1
+<UFF34> \x54 |1
+<UFF35> \x55 |1
+<UFF36> \x56 |1
+<UFF37> \x57 |1
+<UFF38> \x58 |1
+<UFF39> \x59 |1
+<UFF3A> \x5A |1
+<UFF3B> \x5B |1
+<UFF3C> \x5C |1
+<UFF3D> \x5D |1
+<UFF3E> \x5E |1
+<UFF3F> \x5F |1
+<UFF40> \x60 |1
+<UFF41> \x61 |1
+<UFF42> \x62 |1
+<UFF43> \x63 |1
+<UFF44> \x64 |1
+<UFF45> \x65 |1
+<UFF46> \x66 |1
+<UFF47> \x67 |1
+<UFF48> \x68 |1
+<UFF49> \x69 |1
+<UFF4A> \x6A |1
+<UFF4B> \x6B |1
+<UFF4C> \x6C |1
+<UFF4D> \x6D |1
+<UFF4E> \x6E |1
+<UFF4F> \x6F |1
+<UFF50> \x70 |1
+<UFF51> \x71 |1
+<UFF52> \x72 |1
+<UFF53> \x73 |1
+<UFF54> \x74 |1
+<UFF55> \x75 |1
+<UFF56> \x76 |1
+<UFF57> \x77 |1
+<UFF58> \x78 |1
+<UFF59> \x79 |1
+<UFF5A> \x7A |1
+<UFF5B> \x7B |1
+<UFF5C> \x7C |1
+<UFF5D> \x7D |1
+<UFF5E> \x7E |1
+END CHARMAP
diff --git a/mcs/class/I18N/MidEast/ibm-5350.ucm b/mcs/class/I18N/MidEast/ibm-5350.ucm
new file mode 100644
index 00000000000..7ee3c6fc82d
--- /dev/null
+++ b/mcs/class/I18N/MidEast/ibm-5350.ucm
@@ -0,0 +1,377 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1998-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Mon Nov 13 08:50:45 2000
+#
+# File created by dtcocm version 3.00
+# from source files 44B014E6.RPMAP100 and 14E644B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-5350"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x1A
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-5350
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x1A |0
+<U001B> \x1B |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x7F |0
+<U0081> \x81 |0
+<U008D> \x8D |0
+<U008E> \x8E |0
+<U008F> \x8F |0
+<U0090> \x90 |0
+<U009D> \x9D |0
+<U009E> \x9E |0
+<U00A0> \xA0 |0
+<U00A1> \xA1 |0
+<U00A2> \xA2 |0
+<U00A3> \xA3 |0
+<U00A4> \xA4 |0
+<U00A5> \xA5 |0
+<U00A6> \xA6 |0
+<U00A7> \xA7 |0
+<U00A8> \xA8 |0
+<U00A9> \xA9 |0
+<U00AA> \xAA |0
+<U00AB> \xAB |0
+<U00AC> \xAC |0
+<U00AD> \xAD |0
+<U00AE> \xAE |0
+<U00AF> \xAF |0
+<U00B0> \xB0 |0
+<U00B1> \xB1 |0
+<U00B2> \xB2 |0
+<U00B3> \xB3 |0
+<U00B4> \xB4 |0
+<U00B5> \xB5 |0
+<U00B6> \xB6 |0
+<U00B7> \xB7 |0
+<U00B8> \xB8 |0
+<U00B9> \xB9 |0
+<U00BA> \xBA |0
+<U00BB> \xBB |0
+<U00BC> \xBC |0
+<U00BD> \xBD |0
+<U00BE> \xBE |0
+<U00BF> \xBF |0
+<U00C0> \xC0 |0
+<U00C1> \xC1 |0
+<U00C2> \xC2 |0
+<U00C3> \xC3 |0
+<U00C4> \xC4 |0
+<U00C5> \xC5 |0
+<U00C6> \xC6 |0
+<U00C7> \xC7 |0
+<U00C8> \xC8 |0
+<U00C9> \xC9 |0
+<U00CA> \xCA |0
+<U00CB> \xCB |0
+<U00CC> \xCC |0
+<U00CD> \xCD |0
+<U00CE> \xCE |0
+<U00CF> \xCF |0
+<U00D1> \xD1 |0
+<U00D2> \xD2 |0
+<U00D3> \xD3 |0
+<U00D4> \xD4 |0
+<U00D5> \xD5 |0
+<U00D6> \xD6 |0
+<U00D7> \xD7 |0
+<U00D8> \xD8 |0
+<U00D9> \xD9 |0
+<U00DA> \xDA |0
+<U00DB> \xDB |0
+<U00DC> \xDC |0
+<U00DF> \xDF |0
+<U00E0> \xE0 |0
+<U00E1> \xE1 |0
+<U00E2> \xE2 |0
+<U00E3> \xE3 |0
+<U00E4> \xE4 |0
+<U00E5> \xE5 |0
+<U00E6> \xE6 |0
+<U00E7> \xE7 |0
+<U00E8> \xE8 |0
+<U00E9> \xE9 |0
+<U00EA> \xEA |0
+<U00EB> \xEB |0
+<U00EC> \xEC |0
+<U00ED> \xED |0
+<U00EE> \xEE |0
+<U00EF> \xEF |0
+<U00F1> \xF1 |0
+<U00F2> \xF2 |0
+<U00F3> \xF3 |0
+<U00F4> \xF4 |0
+<U00F5> \xF5 |0
+<U00F6> \xF6 |0
+<U00F7> \xF7 |0
+<U00F8> \xF8 |0
+<U00F9> \xF9 |0
+<U00FA> \xFA |0
+<U00FB> \xFB |0
+<U00FC> \xFC |0
+<U00FF> \xFF |0
+<U011E> \xD0 |0
+<U011F> \xF0 |0
+<U0130> \xDD |0
+<U0131> \xFD |0
+<U0152> \x8C |0
+<U0153> \x9C |0
+<U015E> \xDE |0
+<U015F> \xFE |0
+<U0160> \x8A |0
+<U0161> \x9A |0
+<U0178> \x9F |0
+<U0192> \x83 |0
+<U02C6> \x88 |0
+<U02DC> \x98 |0
+<U2013> \x96 |0
+<U2014> \x97 |0
+<U2018> \x91 |0
+<U2019> \x92 |0
+<U201A> \x82 |0
+<U201C> \x93 |0
+<U201D> \x94 |0
+<U201E> \x84 |0
+<U2020> \x86 |0
+<U2021> \x87 |0
+<U2022> \x95 |0
+<U2026> \x85 |0
+<U2030> \x89 |0
+<U2039> \x8B |0
+<U203A> \x9B |0
+<U20AC> \x80 |0
+<U2122> \x99 |0
+<UFF01> \x21 |1
+<UFF02> \x22 |1
+<UFF03> \x23 |1
+<UFF04> \x24 |1
+<UFF05> \x25 |1
+<UFF06> \x26 |1
+<UFF07> \x27 |1
+<UFF08> \x28 |1
+<UFF09> \x29 |1
+<UFF0A> \x2A |1
+<UFF0B> \x2B |1
+<UFF0C> \x2C |1
+<UFF0D> \x2D |1
+<UFF0E> \x2E |1
+<UFF0F> \x2F |1
+<UFF10> \x30 |1
+<UFF11> \x31 |1
+<UFF12> \x32 |1
+<UFF13> \x33 |1
+<UFF14> \x34 |1
+<UFF15> \x35 |1
+<UFF16> \x36 |1
+<UFF17> \x37 |1
+<UFF18> \x38 |1
+<UFF19> \x39 |1
+<UFF1A> \x3A |1
+<UFF1B> \x3B |1
+<UFF1C> \x3C |1
+<UFF1D> \x3D |1
+<UFF1E> \x3E |1
+<UFF1F> \x3F |1
+<UFF20> \x40 |1
+<UFF21> \x41 |1
+<UFF22> \x42 |1
+<UFF23> \x43 |1
+<UFF24> \x44 |1
+<UFF25> \x45 |1
+<UFF26> \x46 |1
+<UFF27> \x47 |1
+<UFF28> \x48 |1
+<UFF29> \x49 |1
+<UFF2A> \x4A |1
+<UFF2B> \x4B |1
+<UFF2C> \x4C |1
+<UFF2D> \x4D |1
+<UFF2E> \x4E |1
+<UFF2F> \x4F |1
+<UFF30> \x50 |1
+<UFF31> \x51 |1
+<UFF32> \x52 |1
+<UFF33> \x53 |1
+<UFF34> \x54 |1
+<UFF35> \x55 |1
+<UFF36> \x56 |1
+<UFF37> \x57 |1
+<UFF38> \x58 |1
+<UFF39> \x59 |1
+<UFF3A> \x5A |1
+<UFF3B> \x5B |1
+<UFF3C> \x5C |1
+<UFF3D> \x5D |1
+<UFF3E> \x5E |1
+<UFF3F> \x5F |1
+<UFF40> \x60 |1
+<UFF41> \x61 |1
+<UFF42> \x62 |1
+<UFF43> \x63 |1
+<UFF44> \x64 |1
+<UFF45> \x65 |1
+<UFF46> \x66 |1
+<UFF47> \x67 |1
+<UFF48> \x68 |1
+<UFF49> \x69 |1
+<UFF4A> \x6A |1
+<UFF4B> \x6B |1
+<UFF4C> \x6C |1
+<UFF4D> \x6D |1
+<UFF4E> \x6E |1
+<UFF4F> \x6F |1
+<UFF50> \x70 |1
+<UFF51> \x71 |1
+<UFF52> \x72 |1
+<UFF53> \x73 |1
+<UFF54> \x74 |1
+<UFF55> \x75 |1
+<UFF56> \x76 |1
+<UFF57> \x77 |1
+<UFF58> \x78 |1
+<UFF59> \x79 |1
+<UFF5A> \x7A |1
+<UFF5B> \x7B |1
+<UFF5C> \x7C |1
+<UFF5D> \x7D |1
+<UFF5E> \x7E |1
+END CHARMAP
diff --git a/mcs/class/I18N/MidEast/ibm-5351.ucm b/mcs/class/I18N/MidEast/ibm-5351.ucm
new file mode 100644
index 00000000000..c341195d357
--- /dev/null
+++ b/mcs/class/I18N/MidEast/ibm-5351.ucm
@@ -0,0 +1,368 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1998-2001, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Mon Nov 13 08:50:45 2000
+#
+# File created by dtcocm version 3.00
+# from source files 44B014E7.RPMAP100 and 14E744B0.TPMAP100
+#
+# Patched for jitterbug 792
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-5351"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x1A
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-5351
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x1A |0
+<U001B> \x1B |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x7F |0
+<U0081> \x81 |0
+<U008A> \x8A |0
+<U008C> \x8C |0
+<U008D> \x8D |0
+<U008E> \x8E |0
+<U008F> \x8F |0
+<U0090> \x90 |0
+<U009A> \x9A |0
+<U009C> \x9C |0
+<U009D> \x9D |0
+<U009E> \x9E |0
+<U009F> \x9F |0
+<U00A0> \xA0 |0
+<U00A1> \xA1 |0
+<U00A2> \xA2 |0
+<U00A3> \xA3 |0
+<U00A5> \xA5 |0
+<U00A6> \xA6 |0
+<U00A7> \xA7 |0
+<U00A8> \xA8 |0
+<U00A9> \xA9 |0
+<U00AB> \xAB |0
+<U00AC> \xAC |0
+<U00AD> \xAD |0
+<U00AE> \xAE |0
+<U00AF> \xAF |0
+<U00B0> \xB0 |0
+<U00B1> \xB1 |0
+<U00B2> \xB2 |0
+<U00B3> \xB3 |0
+<U00B4> \xB4 |0
+<U00B5> \xB5 |0
+<U00B6> \xB6 |0
+<U00B7> \xB7 |0
+<U00B8> \xB8 |0
+<U00B9> \xB9 |0
+<U00BB> \xBB |0
+<U00BC> \xBC |0
+<U00BD> \xBD |0
+<U00BE> \xBE |0
+<U00BF> \xBF |0
+<U00D7> \xAA |0
+<U00F7> \xBA |0
+<U0192> \x83 |0
+<U02C6> \x88 |0
+<U02DC> \x98 |0
+<U05B0> \xC0 |0
+<U05B1> \xC1 |0
+<U05B2> \xC2 |0
+<U05B3> \xC3 |0
+<U05B4> \xC4 |0
+<U05B5> \xC5 |0
+<U05B6> \xC6 |0
+<U05B7> \xC7 |0
+<U05B8> \xC8 |0
+<U05B9> \xC9 |0
+<U05BB> \xCB |0
+<U05BC> \xCC |0
+<U05BD> \xCD |0
+<U05BE> \xCE |0
+<U05BF> \xCF |0
+<U05C0> \xD0 |0
+<U05C1> \xD1 |0
+<U05C2> \xD2 |0
+<U05C3> \xD3 |0
+<U05D0> \xE0 |0
+<U05D1> \xE1 |0
+<U05D2> \xE2 |0
+<U05D3> \xE3 |0
+<U05D4> \xE4 |0
+<U05D5> \xE5 |0
+<U05D6> \xE6 |0
+<U05D7> \xE7 |0
+<U05D8> \xE8 |0
+<U05D9> \xE9 |0
+<U05DA> \xEA |0
+<U05DB> \xEB |0
+<U05DC> \xEC |0
+<U05DD> \xED |0
+<U05DE> \xEE |0
+<U05DF> \xEF |0
+<U05E0> \xF0 |0
+<U05E1> \xF1 |0
+<U05E2> \xF2 |0
+<U05E3> \xF3 |0
+<U05E4> \xF4 |0
+<U05E5> \xF5 |0
+<U05E6> \xF6 |0
+<U05E7> \xF7 |0
+<U05E8> \xF8 |0
+<U05E9> \xF9 |0
+<U05EA> \xFA |0
+<U05F0> \xD4 |0
+<U05F1> \xD5 |0
+<U05F2> \xD6 |0
+<U05F3> \xD7 |0
+<U05F4> \xD8 |0
+<U200E> \xFD |0
+<U200F> \xFE |0
+<U2013> \x96 |0
+<U2014> \x97 |0
+<U2018> \x91 |0
+<U2019> \x92 |0
+<U201A> \x82 |0
+<U201C> \x93 |0
+<U201D> \x94 |0
+<U201E> \x84 |0
+<U2020> \x86 |0
+<U2021> \x87 |0
+<U2022> \x95 |0
+<U2026> \x85 |0
+<U2030> \x89 |0
+<U2039> \x8B |0
+<U203A> \x9B |0
+<U20AA> \xA4 |0
+<U20AC> \x80 |0
+<U2122> \x99 |0
+<UFF01> \x21 |1
+<UFF02> \x22 |1
+<UFF03> \x23 |1
+<UFF04> \x24 |1
+<UFF05> \x25 |1
+<UFF06> \x26 |1
+<UFF07> \x27 |1
+<UFF08> \x28 |1
+<UFF09> \x29 |1
+<UFF0A> \x2A |1
+<UFF0B> \x2B |1
+<UFF0C> \x2C |1
+<UFF0D> \x2D |1
+<UFF0E> \x2E |1
+<UFF0F> \x2F |1
+<UFF10> \x30 |1
+<UFF11> \x31 |1
+<UFF12> \x32 |1
+<UFF13> \x33 |1
+<UFF14> \x34 |1
+<UFF15> \x35 |1
+<UFF16> \x36 |1
+<UFF17> \x37 |1
+<UFF18> \x38 |1
+<UFF19> \x39 |1
+<UFF1A> \x3A |1
+<UFF1B> \x3B |1
+<UFF1C> \x3C |1
+<UFF1D> \x3D |1
+<UFF1E> \x3E |1
+<UFF1F> \x3F |1
+<UFF20> \x40 |1
+<UFF21> \x41 |1
+<UFF22> \x42 |1
+<UFF23> \x43 |1
+<UFF24> \x44 |1
+<UFF25> \x45 |1
+<UFF26> \x46 |1
+<UFF27> \x47 |1
+<UFF28> \x48 |1
+<UFF29> \x49 |1
+<UFF2A> \x4A |1
+<UFF2B> \x4B |1
+<UFF2C> \x4C |1
+<UFF2D> \x4D |1
+<UFF2E> \x4E |1
+<UFF2F> \x4F |1
+<UFF30> \x50 |1
+<UFF31> \x51 |1
+<UFF32> \x52 |1
+<UFF33> \x53 |1
+<UFF34> \x54 |1
+<UFF35> \x55 |1
+<UFF36> \x56 |1
+<UFF37> \x57 |1
+<UFF38> \x58 |1
+<UFF39> \x59 |1
+<UFF3A> \x5A |1
+<UFF3B> \x5B |1
+<UFF3C> \x5C |1
+<UFF3D> \x5D |1
+<UFF3E> \x5E |1
+<UFF3F> \x5F |1
+<UFF40> \x60 |1
+<UFF41> \x61 |1
+<UFF42> \x62 |1
+<UFF43> \x63 |1
+<UFF44> \x64 |1
+<UFF45> \x65 |1
+<UFF46> \x66 |1
+<UFF47> \x67 |1
+<UFF48> \x68 |1
+<UFF49> \x69 |1
+<UFF4A> \x6A |1
+<UFF4B> \x6B |1
+<UFF4C> \x6C |1
+<UFF4D> \x6D |1
+<UFF4E> \x6E |1
+<UFF4F> \x6F |1
+<UFF50> \x70 |1
+<UFF51> \x71 |1
+<UFF52> \x72 |1
+<UFF53> \x73 |1
+<UFF54> \x74 |1
+<UFF55> \x75 |1
+<UFF56> \x76 |1
+<UFF57> \x77 |1
+<UFF58> \x78 |1
+<UFF59> \x79 |1
+<UFF5A> \x7A |1
+<UFF5B> \x7B |1
+<UFF5C> \x7C |1
+<UFF5D> \x7D |1
+<UFF5E> \x7E |1
+END CHARMAP
diff --git a/mcs/class/I18N/MidEast/ibm-5352.ucm b/mcs/class/I18N/MidEast/ibm-5352.ucm
new file mode 100644
index 00000000000..63fa0ab7975
--- /dev/null
+++ b/mcs/class/I18N/MidEast/ibm-5352.ucm
@@ -0,0 +1,551 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1998-2001, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Mon Nov 13 08:50:45 2000
+#
+# File created by dtcocm version 3.00
+# from source files 44B014E8.RPMAP100 and 14E844B0.TPMAP100
+#
+# Patched for jitterbug 792
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-5352"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x1A
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-5352
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x1A |0
+<U001B> \x1B |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x7F |0
+<U00A0> \xA0 |0
+<U00A2> \xA2 |0
+<U00A3> \xA3 |0
+<U00A4> \xA4 |0
+<U00A5> \xA5 |0
+<U00A6> \xA6 |0
+<U00A7> \xA7 |0
+<U00A8> \xA8 |0
+<U00A9> \xA9 |0
+<U00AB> \xAB |0
+<U00AC> \xAC |0
+<U00AD> \xAD |0
+<U00AE> \xAE |0
+<U00AF> \xAF |0
+<U00B0> \xB0 |0
+<U00B1> \xB1 |0
+<U00B2> \xB2 |0
+<U00B3> \xB3 |0
+<U00B4> \xB4 |0
+<U00B5> \xB5 |0
+<U00B6> \xB6 |0
+<U00B7> \xB7 |0
+<U00B8> \xB8 |0
+<U00B9> \xB9 |0
+<U00BB> \xBB |0
+<U00BC> \xBC |0
+<U00BD> \xBD |0
+<U00BE> \xBE |0
+<U00D7> \xD7 |0
+<U00E0> \xE0 |0
+<U00E2> \xE2 |0
+<U00E7> \xE7 |0
+<U00E8> \xE8 |0
+<U00E9> \xE9 |0
+<U00EA> \xEA |0
+<U00EB> \xEB |0
+<U00EE> \xEE |0
+<U00EF> \xEF |0
+<U00F4> \xF4 |0
+<U00F7> \xF7 |0
+<U00F9> \xF9 |0
+<U00FB> \xFB |0
+<U00FC> \xFC |0
+<U0152> \x8C |0
+<U0153> \x9C |0
+<U0192> \x83 |0
+<U02C6> \x88 |0
+<U060C> \xA1 |0
+<U061B> \xBA |0
+<U061F> \xBF |0
+<U0621> \xC1 |0
+<U0622> \xC2 |0
+<U0623> \xC3 |0
+<U0624> \xC4 |0
+<U0625> \xC5 |0
+<U0626> \xC6 |0
+<U0627> \xC7 |0
+<U0628> \xC8 |0
+<U0629> \xC9 |0
+<U062A> \xCA |0
+<U062B> \xCB |0
+<U062C> \xCC |0
+<U062D> \xCD |0
+<U062E> \xCE |0
+<U062F> \xCF |0
+<U0630> \xD0 |0
+<U0631> \xD1 |0
+<U0632> \xD2 |0
+<U0633> \xD3 |0
+<U0634> \xD4 |0
+<U0635> \xD5 |0
+<U0636> \xD6 |0
+<U0637> \xD8 |0
+<U0638> \xD9 |0
+<U0639> \xDA |0
+<U063A> \xDB |0
+<U0640> \xDC |0
+<U0641> \xDD |0
+<U0642> \xDE |0
+<U0643> \xDF |0
+<U0644> \xE1 |0
+<U0645> \xE3 |0
+<U0646> \xE4 |0
+<U0647> \xE5 |0
+<U0648> \xE6 |0
+<U0649> \xEC |0
+<U064A> \xED |0
+<U064B> \xF0 |0
+<U064C> \xF1 |0
+<U064D> \xF2 |0
+<U064E> \xF3 |0
+<U064F> \xF5 |0
+<U0650> \xF6 |0
+<U0651> \xF8 |0
+<U0652> \xFA |0
+<U0660> \x30 |1
+<U0661> \x31 |1
+<U0662> \x32 |1
+<U0663> \x33 |1
+<U0664> \x34 |1
+<U0665> \x35 |1
+<U0666> \x36 |1
+<U0667> \x37 |1
+<U0668> \x38 |1
+<U0669> \x39 |1
+<U066B> \x2C |1
+<U066C> \x2E |1
+<U0679> \x8A |0
+<U067E> \x81 |0
+<U0686> \x8D |0
+<U0688> \x8F |0
+<U0691> \x9A |0
+<U0698> \x8E |0
+<U06A9> \x98 |0
+<U06AF> \x90 |0
+<U06BA> \x9F |0
+<U06BE> \xAA |0
+<U06C1> \xC0 |0
+<U06D2> \xFF |0
+<U06F0> \x30 |1
+<U06F1> \x31 |1
+<U06F2> \x32 |1
+<U06F3> \x33 |1
+<U06F4> \x34 |1
+<U06F5> \x35 |1
+<U06F6> \x36 |1
+<U06F7> \x37 |1
+<U06F8> \x38 |1
+<U06F9> \x39 |1
+<U200C> \x9D |0
+<U200D> \x9E |0
+<U200E> \xFD |0
+<U200F> \xFE |0
+<U2013> \x96 |0
+<U2014> \x97 |0
+<U2018> \x91 |0
+<U2019> \x92 |0
+<U201A> \x82 |0
+<U201C> \x93 |0
+<U201D> \x94 |0
+<U201E> \x84 |0
+<U2020> \x86 |0
+<U2021> \x87 |0
+<U2022> \x95 |0
+<U2026> \x85 |0
+<U2030> \x89 |0
+<U2039> \x8B |0
+<U203A> \x9B |0
+<U20AC> \x80 |0
+<U2122> \x99 |0
+<UFB56> \x81 |1
+<UFB58> \x81 |1
+<UFB66> \x8A |1
+<UFB68> \x8A |1
+<UFB7A> \x8D |1
+<UFB7C> \x8D |1
+<UFB88> \x8F |1
+<UFB8A> \x8E |1
+<UFB8C> \x9A |1
+<UFB8E> \x98 |1
+<UFB90> \x98 |1
+<UFB92> \x90 |1
+<UFB94> \x90 |1
+<UFB9E> \x9F |1
+<UFBA6> \xC0 |1
+<UFBA8> \xC0 |1
+<UFBAA> \xAA |1
+<UFBAC> \xAA |1
+<UFBAE> \xFF |1
+<UFE70> \xF0 |1
+<UFE71> \xF0 |1
+<UFE72> \xF1 |1
+<UFE74> \xF2 |1
+<UFE76> \xF3 |1
+<UFE77> \xF3 |1
+<UFE78> \xF5 |1
+<UFE79> \xF5 |1
+<UFE7A> \xF6 |1
+<UFE7B> \xF6 |1
+<UFE7C> \xF8 |1
+<UFE7D> \xF8 |1
+<UFE7E> \xFA |1
+<UFE7F> \xFA |1
+<UFE80> \xC1 |1
+<UFE81> \xC2 |1
+<UFE82> \xC2 |1
+<UFE83> \xC3 |1
+<UFE84> \xC3 |1
+<UFE85> \xC4 |1
+<UFE86> \xC4 |1
+<UFE87> \xC5 |1
+<UFE88> \xC5 |1
+<UFE89> \xC6 |1
+<UFE8A> \xC6 |1
+<UFE8B> \xC6 |1
+<UFE8C> \xC6 |1
+<UFE8D> \xC7 |1
+<UFE8E> \xC7 |1
+<UFE8F> \xC8 |1
+<UFE90> \xC8 |1
+<UFE91> \xC8 |1
+<UFE92> \xC8 |1
+<UFE93> \xC9 |1
+<UFE94> \xC9 |1
+<UFE95> \xCA |1
+<UFE96> \xCA |1
+<UFE97> \xCA |1
+<UFE98> \xCA |1
+<UFE99> \xCB |1
+<UFE9A> \xCB |1
+<UFE9B> \xCB |1
+<UFE9C> \xCB |1
+<UFE9D> \xCC |1
+<UFE9E> \xCC |1
+<UFE9F> \xCC |1
+<UFEA0> \xCC |1
+<UFEA1> \xCD |1
+<UFEA2> \xCD |1
+<UFEA3> \xCD |1
+<UFEA4> \xCD |1
+<UFEA5> \xCE |1
+<UFEA6> \xCE |1
+<UFEA7> \xCE |1
+<UFEA8> \xCE |1
+<UFEA9> \xCF |1
+<UFEAA> \xCF |1
+<UFEAB> \xD0 |1
+<UFEAC> \xD0 |1
+<UFEAD> \xD1 |1
+<UFEAE> \xD1 |1
+<UFEAF> \xD2 |1
+<UFEB0> \xD2 |1
+<UFEB1> \xD3 |1
+<UFEB2> \xD3 |1
+<UFEB3> \xD3 |1
+<UFEB4> \xD3 |1
+<UFEB5> \xD4 |1
+<UFEB6> \xD4 |1
+<UFEB7> \xD4 |1
+<UFEB8> \xD4 |1
+<UFEB9> \xD5 |1
+<UFEBA> \xD5 |1
+<UFEBB> \xD5 |1
+<UFEBC> \xD5 |1
+<UFEBD> \xD6 |1
+<UFEBE> \xD6 |1
+<UFEBF> \xD6 |1
+<UFEC0> \xD6 |1
+<UFEC1> \xD8 |1
+<UFEC2> \xD8 |1
+<UFEC3> \xD8 |1
+<UFEC4> \xD8 |1
+<UFEC5> \xD9 |1
+<UFEC6> \xD9 |1
+<UFEC7> \xD9 |1
+<UFEC8> \xD9 |1
+<UFEC9> \xDA |1
+<UFECA> \xDA |1
+<UFECB> \xDA |1
+<UFECC> \xDA |1
+<UFECD> \xDB |1
+<UFECE> \xDB |1
+<UFECF> \xDB |1
+<UFED0> \xDB |1
+<UFED1> \xDD |1
+<UFED2> \xDD |1
+<UFED3> \xDD |1
+<UFED4> \xDD |1
+<UFED5> \xDE |1
+<UFED6> \xDE |1
+<UFED7> \xDE |1
+<UFED8> \xDE |1
+<UFED9> \xDF |1
+<UFEDA> \xDF |1
+<UFEDB> \xDF |1
+<UFEDC> \xDF |1
+<UFEDD> \xE1 |1
+<UFEDE> \xE1 |1
+<UFEDF> \xE1 |1
+<UFEE0> \xE1 |1
+<UFEE1> \xE3 |1
+<UFEE2> \xE3 |1
+<UFEE3> \xE3 |1
+<UFEE4> \xE3 |1
+<UFEE5> \xE4 |1
+<UFEE6> \xE4 |1
+<UFEE7> \xE4 |1
+<UFEE8> \xE4 |1
+<UFEE9> \xE5 |1
+<UFEEA> \xE5 |1
+<UFEEB> \xE5 |1
+<UFEEC> \xE5 |1
+<UFEED> \xE6 |1
+<UFEEE> \xE6 |1
+<UFEEF> \xEC |1
+<UFEF0> \xEC |1
+<UFEF1> \xED |1
+<UFEF2> \xED |1
+<UFEF3> \xED |1
+<UFEF4> \xED |1
+<UFF01> \x21 |1
+<UFF02> \x22 |1
+<UFF03> \x23 |1
+<UFF04> \x24 |1
+<UFF05> \x25 |1
+<UFF06> \x26 |1
+<UFF07> \x27 |1
+<UFF08> \x28 |1
+<UFF09> \x29 |1
+<UFF0A> \x2A |1
+<UFF0B> \x2B |1
+<UFF0C> \x2C |1
+<UFF0D> \x2D |1
+<UFF0E> \x2E |1
+<UFF0F> \x2F |1
+<UFF10> \x30 |1
+<UFF11> \x31 |1
+<UFF12> \x32 |1
+<UFF13> \x33 |1
+<UFF14> \x34 |1
+<UFF15> \x35 |1
+<UFF16> \x36 |1
+<UFF17> \x37 |1
+<UFF18> \x38 |1
+<UFF19> \x39 |1
+<UFF1A> \x3A |1
+<UFF1B> \x3B |1
+<UFF1C> \x3C |1
+<UFF1D> \x3D |1
+<UFF1E> \x3E |1
+<UFF1F> \x3F |1
+<UFF20> \x40 |1
+<UFF21> \x41 |1
+<UFF22> \x42 |1
+<UFF23> \x43 |1
+<UFF24> \x44 |1
+<UFF25> \x45 |1
+<UFF26> \x46 |1
+<UFF27> \x47 |1
+<UFF28> \x48 |1
+<UFF29> \x49 |1
+<UFF2A> \x4A |1
+<UFF2B> \x4B |1
+<UFF2C> \x4C |1
+<UFF2D> \x4D |1
+<UFF2E> \x4E |1
+<UFF2F> \x4F |1
+<UFF30> \x50 |1
+<UFF31> \x51 |1
+<UFF32> \x52 |1
+<UFF33> \x53 |1
+<UFF34> \x54 |1
+<UFF35> \x55 |1
+<UFF36> \x56 |1
+<UFF37> \x57 |1
+<UFF38> \x58 |1
+<UFF39> \x59 |1
+<UFF3A> \x5A |1
+<UFF3B> \x5B |1
+<UFF3C> \x5C |1
+<UFF3D> \x5D |1
+<UFF3E> \x5E |1
+<UFF3F> \x5F |1
+<UFF40> \x60 |1
+<UFF41> \x61 |1
+<UFF42> \x62 |1
+<UFF43> \x63 |1
+<UFF44> \x64 |1
+<UFF45> \x65 |1
+<UFF46> \x66 |1
+<UFF47> \x67 |1
+<UFF48> \x68 |1
+<UFF49> \x69 |1
+<UFF4A> \x6A |1
+<UFF4B> \x6B |1
+<UFF4C> \x6C |1
+<UFF4D> \x6D |1
+<UFF4E> \x6E |1
+<UFF4F> \x6F |1
+<UFF50> \x70 |1
+<UFF51> \x71 |1
+<UFF52> \x72 |1
+<UFF53> \x73 |1
+<UFF54> \x74 |1
+<UFF55> \x75 |1
+<UFF56> \x76 |1
+<UFF57> \x77 |1
+<UFF58> \x78 |1
+<UFF59> \x79 |1
+<UFF5A> \x7A |1
+<UFF5B> \x7B |1
+<UFF5C> \x7C |1
+<UFF5D> \x7D |1
+<UFF5E> \x7E |1
+END CHARMAP
diff --git a/mcs/class/I18N/MidEast/ibm-916.ucm b/mcs/class/I18N/MidEast/ibm-916.ucm
new file mode 100644
index 00000000000..26408070225
--- /dev/null
+++ b/mcs/class/I18N/MidEast/ibm-916.ucm
@@ -0,0 +1,339 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1995-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Mon Nov 13 09:28:04 2000
+#
+# File created by dtcocm version 3.00
+# from source files 34B00394.RPMAP100 and 039434B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-916"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x1A
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-916
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x1A |0
+<U001B> \x1B |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x7F |0
+<U0080> \x80 |0
+<U0081> \x81 |0
+<U0082> \x82 |0
+<U0083> \x83 |0
+<U0084> \x84 |0
+<U0085> \x85 |0
+<U0086> \x86 |0
+<U0087> \x87 |0
+<U0088> \x88 |0
+<U0089> \x89 |0
+<U008A> \x8A |0
+<U008B> \x8B |0
+<U008C> \x8C |0
+<U008D> \x8D |0
+<U008E> \x8E |0
+<U008F> \x8F |0
+<U0090> \x90 |0
+<U0091> \x91 |0
+<U0092> \x92 |0
+<U0093> \x93 |0
+<U0094> \x94 |0
+<U0095> \x95 |0
+<U0096> \x96 |0
+<U0097> \x97 |0
+<U0098> \x98 |0
+<U0099> \x99 |0
+<U009A> \x9A |0
+<U009B> \x9B |0
+<U009C> \x9C |0
+<U009D> \x9D |0
+<U009E> \x9E |0
+<U009F> \x9F |0
+<U00A0> \xA0 |0
+<U00A2> \xA2 |0
+<U00A3> \xA3 |0
+<U00A4> \xA4 |0
+<U00A5> \xA5 |0
+<U00A6> \xA6 |0
+<U00A7> \xA7 |0
+<U00A8> \xA8 |0
+<U00A9> \xA9 |0
+<U00AB> \xAB |0
+<U00AC> \xAC |0
+<U00AD> \xAD |0
+<U00AE> \xAE |0
+<U00B0> \xB0 |0
+<U00B1> \xB1 |0
+<U00B2> \xB2 |0
+<U00B3> \xB3 |0
+<U00B4> \xB4 |0
+<U00B5> \xB5 |0
+<U00B6> \xB6 |0
+<U00B8> \xB8 |0
+<U00B9> \xB9 |0
+<U00BB> \xBB |0
+<U00BC> \xBC |0
+<U00BD> \xBD |0
+<U00BE> \xBE |0
+<U00D7> \xAA |0
+<U00F7> \xBA |0
+<U05D0> \xE0 |0
+<U05D1> \xE1 |0
+<U05D2> \xE2 |0
+<U05D3> \xE3 |0
+<U05D4> \xE4 |0
+<U05D5> \xE5 |0
+<U05D6> \xE6 |0
+<U05D7> \xE7 |0
+<U05D8> \xE8 |0
+<U05D9> \xE9 |0
+<U05DA> \xEA |0
+<U05DB> \xEB |0
+<U05DC> \xEC |0
+<U05DD> \xED |0
+<U05DE> \xEE |0
+<U05DF> \xEF |0
+<U05E0> \xF0 |0
+<U05E1> \xF1 |0
+<U05E2> \xF2 |0
+<U05E3> \xF3 |0
+<U05E4> \xF4 |0
+<U05E5> \xF5 |0
+<U05E6> \xF6 |0
+<U05E7> \xF7 |0
+<U05E8> \xF8 |0
+<U05E9> \xF9 |0
+<U05EA> \xFA |0
+<U2017> \xDF |0
+<U2022> \xB7 |0
+<U203E> \xAF |0
+<UFF01> \x21 |1
+<UFF02> \x22 |1
+<UFF03> \x23 |1
+<UFF04> \x24 |1
+<UFF05> \x25 |1
+<UFF06> \x26 |1
+<UFF07> \x27 |1
+<UFF08> \x28 |1
+<UFF09> \x29 |1
+<UFF0A> \x2A |1
+<UFF0B> \x2B |1
+<UFF0C> \x2C |1
+<UFF0D> \x2D |1
+<UFF0E> \x2E |1
+<UFF0F> \x2F |1
+<UFF10> \x30 |1
+<UFF11> \x31 |1
+<UFF12> \x32 |1
+<UFF13> \x33 |1
+<UFF14> \x34 |1
+<UFF15> \x35 |1
+<UFF16> \x36 |1
+<UFF17> \x37 |1
+<UFF18> \x38 |1
+<UFF19> \x39 |1
+<UFF1A> \x3A |1
+<UFF1B> \x3B |1
+<UFF1C> \x3C |1
+<UFF1D> \x3D |1
+<UFF1E> \x3E |1
+<UFF1F> \x3F |1
+<UFF20> \x40 |1
+<UFF21> \x41 |1
+<UFF22> \x42 |1
+<UFF23> \x43 |1
+<UFF24> \x44 |1
+<UFF25> \x45 |1
+<UFF26> \x46 |1
+<UFF27> \x47 |1
+<UFF28> \x48 |1
+<UFF29> \x49 |1
+<UFF2A> \x4A |1
+<UFF2B> \x4B |1
+<UFF2C> \x4C |1
+<UFF2D> \x4D |1
+<UFF2E> \x4E |1
+<UFF2F> \x4F |1
+<UFF30> \x50 |1
+<UFF31> \x51 |1
+<UFF32> \x52 |1
+<UFF33> \x53 |1
+<UFF34> \x54 |1
+<UFF35> \x55 |1
+<UFF36> \x56 |1
+<UFF37> \x57 |1
+<UFF38> \x58 |1
+<UFF39> \x59 |1
+<UFF3A> \x5A |1
+<UFF3B> \x5B |1
+<UFF3C> \x5C |1
+<UFF3D> \x5D |1
+<UFF3E> \x5E |1
+<UFF3F> \x5F |1
+<UFF40> \x60 |1
+<UFF41> \x61 |1
+<UFF42> \x62 |1
+<UFF43> \x63 |1
+<UFF44> \x64 |1
+<UFF45> \x65 |1
+<UFF46> \x66 |1
+<UFF47> \x67 |1
+<UFF48> \x68 |1
+<UFF49> \x69 |1
+<UFF4A> \x6A |1
+<UFF4B> \x6B |1
+<UFF4C> \x6C |1
+<UFF4D> \x6D |1
+<UFF4E> \x6E |1
+<UFF4F> \x6F |1
+<UFF50> \x70 |1
+<UFF51> \x71 |1
+<UFF52> \x72 |1
+<UFF53> \x73 |1
+<UFF54> \x74 |1
+<UFF55> \x75 |1
+<UFF56> \x76 |1
+<UFF57> \x77 |1
+<UFF58> \x78 |1
+<UFF59> \x79 |1
+<UFF5A> \x7A |1
+<UFF5B> \x7B |1
+<UFF5C> \x7C |1
+<UFF5D> \x7D |1
+<UFF5E> \x7E |1
+END CHARMAP
diff --git a/mcs/class/I18N/MidEast/ibm-920.ucm b/mcs/class/I18N/MidEast/ibm-920.ucm
new file mode 100644
index 00000000000..c1c01aad48c
--- /dev/null
+++ b/mcs/class/I18N/MidEast/ibm-920.ucm
@@ -0,0 +1,378 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1995-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Mon Nov 13 09:28:04 2000
+#
+# File created by dtcocm version 3.00
+# from source files 34B00398.RPMAP100 and 039834B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-920"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x1A
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-920
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x1A |0
+<U001B> \x1B |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x7F |0
+<U0080> \x80 |0
+<U0081> \x81 |0
+<U0082> \x82 |0
+<U0083> \x83 |0
+<U0084> \x84 |0
+<U0085> \x85 |0
+<U0086> \x86 |0
+<U0087> \x87 |0
+<U0088> \x88 |0
+<U0089> \x89 |0
+<U008A> \x8A |0
+<U008B> \x8B |0
+<U008C> \x8C |0
+<U008D> \x8D |0
+<U008E> \x8E |0
+<U008F> \x8F |0
+<U0090> \x90 |0
+<U0091> \x91 |0
+<U0092> \x92 |0
+<U0093> \x93 |0
+<U0094> \x94 |0
+<U0095> \x95 |0
+<U0096> \x96 |0
+<U0097> \x97 |0
+<U0098> \x98 |0
+<U0099> \x99 |0
+<U009A> \x9A |0
+<U009B> \x9B |0
+<U009C> \x9C |0
+<U009D> \x9D |0
+<U009E> \x9E |0
+<U009F> \x9F |0
+<U00A0> \xA0 |0
+<U00A1> \xA1 |0
+<U00A2> \xA2 |0
+<U00A3> \xA3 |0
+<U00A4> \xA4 |0
+<U00A5> \xA5 |0
+<U00A6> \xA6 |0
+<U00A7> \xA7 |0
+<U00A8> \xA8 |0
+<U00A9> \xA9 |0
+<U00AA> \xAA |0
+<U00AB> \xAB |0
+<U00AC> \xAC |0
+<U00AD> \xAD |0
+<U00AE> \xAE |0
+<U00AF> \xAF |0
+<U00B0> \xB0 |0
+<U00B1> \xB1 |0
+<U00B2> \xB2 |0
+<U00B3> \xB3 |0
+<U00B4> \xB4 |0
+<U00B5> \xB5 |0
+<U00B6> \xB6 |0
+<U00B7> \xB7 |0
+<U00B8> \xB8 |0
+<U00B9> \xB9 |0
+<U00BA> \xBA |0
+<U00BB> \xBB |0
+<U00BC> \xBC |0
+<U00BD> \xBD |0
+<U00BE> \xBE |0
+<U00BF> \xBF |0
+<U00C0> \xC0 |0
+<U00C1> \xC1 |0
+<U00C2> \xC2 |0
+<U00C3> \xC3 |0
+<U00C4> \xC4 |0
+<U00C5> \xC5 |0
+<U00C6> \xC6 |0
+<U00C7> \xC7 |0
+<U00C8> \xC8 |0
+<U00C9> \xC9 |0
+<U00CA> \xCA |0
+<U00CB> \xCB |0
+<U00CC> \xCC |0
+<U00CD> \xCD |0
+<U00CE> \xCE |0
+<U00CF> \xCF |0
+<U00D1> \xD1 |0
+<U00D2> \xD2 |0
+<U00D3> \xD3 |0
+<U00D4> \xD4 |0
+<U00D5> \xD5 |0
+<U00D6> \xD6 |0
+<U00D7> \xD7 |0
+<U00D8> \xD8 |0
+<U00D9> \xD9 |0
+<U00DA> \xDA |0
+<U00DB> \xDB |0
+<U00DC> \xDC |0
+<U00DF> \xDF |0
+<U00E0> \xE0 |0
+<U00E1> \xE1 |0
+<U00E2> \xE2 |0
+<U00E3> \xE3 |0
+<U00E4> \xE4 |0
+<U00E5> \xE5 |0
+<U00E6> \xE6 |0
+<U00E7> \xE7 |0
+<U00E8> \xE8 |0
+<U00E9> \xE9 |0
+<U00EA> \xEA |0
+<U00EB> \xEB |0
+<U00EC> \xEC |0
+<U00ED> \xED |0
+<U00EE> \xEE |0
+<U00EF> \xEF |0
+<U00F1> \xF1 |0
+<U00F2> \xF2 |0
+<U00F3> \xF3 |0
+<U00F4> \xF4 |0
+<U00F5> \xF5 |0
+<U00F6> \xF6 |0
+<U00F7> \xF7 |0
+<U00F8> \xF8 |0
+<U00F9> \xF9 |0
+<U00FA> \xFA |0
+<U00FB> \xFB |0
+<U00FC> \xFC |0
+<U00FF> \xFF |0
+<U011E> \xD0 |0
+<U011F> \xF0 |0
+<U0130> \xDD |0
+<U0131> \xFD |0
+<U015E> \xDE |0
+<U015F> \xFE |0
+<U203E> \xAF |1
+<UFF01> \x21 |1
+<UFF02> \x22 |1
+<UFF03> \x23 |1
+<UFF04> \x24 |1
+<UFF05> \x25 |1
+<UFF06> \x26 |1
+<UFF07> \x27 |1
+<UFF08> \x28 |1
+<UFF09> \x29 |1
+<UFF0A> \x2A |1
+<UFF0B> \x2B |1
+<UFF0C> \x2C |1
+<UFF0D> \x2D |1
+<UFF0E> \x2E |1
+<UFF0F> \x2F |1
+<UFF10> \x30 |1
+<UFF11> \x31 |1
+<UFF12> \x32 |1
+<UFF13> \x33 |1
+<UFF14> \x34 |1
+<UFF15> \x35 |1
+<UFF16> \x36 |1
+<UFF17> \x37 |1
+<UFF18> \x38 |1
+<UFF19> \x39 |1
+<UFF1A> \x3A |1
+<UFF1B> \x3B |1
+<UFF1C> \x3C |1
+<UFF1D> \x3D |1
+<UFF1E> \x3E |1
+<UFF1F> \x3F |1
+<UFF20> \x40 |1
+<UFF21> \x41 |1
+<UFF22> \x42 |1
+<UFF23> \x43 |1
+<UFF24> \x44 |1
+<UFF25> \x45 |1
+<UFF26> \x46 |1
+<UFF27> \x47 |1
+<UFF28> \x48 |1
+<UFF29> \x49 |1
+<UFF2A> \x4A |1
+<UFF2B> \x4B |1
+<UFF2C> \x4C |1
+<UFF2D> \x4D |1
+<UFF2E> \x4E |1
+<UFF2F> \x4F |1
+<UFF30> \x50 |1
+<UFF31> \x51 |1
+<UFF32> \x52 |1
+<UFF33> \x53 |1
+<UFF34> \x54 |1
+<UFF35> \x55 |1
+<UFF36> \x56 |1
+<UFF37> \x57 |1
+<UFF38> \x58 |1
+<UFF39> \x59 |1
+<UFF3A> \x5A |1
+<UFF3B> \x5B |1
+<UFF3C> \x5C |1
+<UFF3D> \x5D |1
+<UFF3E> \x5E |1
+<UFF3F> \x5F |1
+<UFF40> \x60 |1
+<UFF41> \x61 |1
+<UFF42> \x62 |1
+<UFF43> \x63 |1
+<UFF44> \x64 |1
+<UFF45> \x65 |1
+<UFF46> \x66 |1
+<UFF47> \x67 |1
+<UFF48> \x68 |1
+<UFF49> \x69 |1
+<UFF4A> \x6A |1
+<UFF4B> \x6B |1
+<UFF4C> \x6C |1
+<UFF4D> \x6D |1
+<UFF4E> \x6E |1
+<UFF4F> \x6F |1
+<UFF50> \x70 |1
+<UFF51> \x71 |1
+<UFF52> \x72 |1
+<UFF53> \x73 |1
+<UFF54> \x74 |1
+<UFF55> \x75 |1
+<UFF56> \x76 |1
+<UFF57> \x77 |1
+<UFF58> \x78 |1
+<UFF59> \x79 |1
+<UFF5A> \x7A |1
+<UFF5B> \x7B |1
+<UFF5C> \x7C |1
+<UFF5D> \x7D |1
+<UFF5E> \x7E |1
+END CHARMAP
diff --git a/mcs/class/I18N/MidEast/list.unix b/mcs/class/I18N/MidEast/list.unix
new file mode 100755
index 00000000000..c50c67355cb
--- /dev/null
+++ b/mcs/class/I18N/MidEast/list.unix
@@ -0,0 +1,7 @@
+CP1254.cs
+CP1255.cs
+CP1256.cs
+CP28596.cs
+CP28598.cs
+CP28599.cs
+CP38598.cs
diff --git a/mcs/class/I18N/MidEast/makefile.gnu b/mcs/class/I18N/MidEast/makefile.gnu
new file mode 100755
index 00000000000..534ab9ab2f4
--- /dev/null
+++ b/mcs/class/I18N/MidEast/makefile.gnu
@@ -0,0 +1,13 @@
+topdir = ../../..
+
+LIBRARY = $(topdir)/class/lib/I18N.MidEast.dll
+
+LIB_LIST = list.unix
+LIB_FLAGS = -r corlib -r mscorlib -r I18N
+
+SOURCES_INCLUDE=*.cs
+SOURCES_EXCLUDE=
+
+export MONO_PATH_PREFIX = $(topdir)/class/lib:
+
+include $(topdir)/class/library.make
diff --git a/mcs/class/I18N/Other/.cvsignore b/mcs/class/I18N/Other/.cvsignore
new file mode 100644
index 00000000000..0c2ee6906fa
--- /dev/null
+++ b/mcs/class/I18N/Other/.cvsignore
@@ -0,0 +1,4 @@
+list
+.makefrag
+.response
+library-deps.stamp
diff --git a/mcs/class/I18N/Other/CP1251.cs b/mcs/class/I18N/Other/CP1251.cs
new file mode 100644
index 00000000000..a160145c4bd
--- /dev/null
+++ b/mcs/class/I18N/Other/CP1251.cs
@@ -0,0 +1,403 @@
+/*
+ * CP1251.cs - Cyrillic (Windows) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-5347.ucm".
+
+namespace I18N.Other
+{
+
+using System;
+using I18N.Common;
+
+public class CP1251 : ByteEncoding
+{
+ public CP1251()
+ : base(1251, ToChars, "Cyrillic (Windows)",
+ "koi8-r", "windows-1251", "windows-1251",
+ true, true, true, true, 1251)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
+ '\u0006', '\u0007', '\u0008', '\u0009', '\u000A', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
+ '\u0018', '\u0019', '\u001A', '\u001B', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
+ '\u0024', '\u0025', '\u0026', '\u0027', '\u0028', '\u0029',
+ '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
+ '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
+ '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
+ '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
+ '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
+ '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
+ '\u005A', '\u005B', '\u005C', '\u005D', '\u005E', '\u005F',
+ '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
+ '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
+ '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
+ '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
+ '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
+ '\u007E', '\u007F', '\u0402', '\u0403', '\u201A', '\u0453',
+ '\u201E', '\u2026', '\u2020', '\u2021', '\u20AC', '\u2030',
+ '\u0409', '\u2039', '\u040A', '\u040C', '\u040B', '\u040F',
+ '\u0452', '\u2018', '\u2019', '\u201C', '\u201D', '\u2022',
+ '\u2013', '\u2014', '\u0098', '\u2122', '\u0459', '\u203A',
+ '\u045A', '\u045C', '\u045B', '\u045F', '\u00A0', '\u040E',
+ '\u045E', '\u0408', '\u00A4', '\u0490', '\u00A6', '\u00A7',
+ '\u0401', '\u00A9', '\u0404', '\u00AB', '\u00AC', '\u00AD',
+ '\u00AE', '\u0407', '\u00B0', '\u00B1', '\u0406', '\u0456',
+ '\u0491', '\u00B5', '\u00B6', '\u00B7', '\u0451', '\u2116',
+ '\u0454', '\u00BB', '\u0458', '\u0405', '\u0455', '\u0457',
+ '\u0410', '\u0411', '\u0412', '\u0413', '\u0414', '\u0415',
+ '\u0416', '\u0417', '\u0418', '\u0419', '\u041A', '\u041B',
+ '\u041C', '\u041D', '\u041E', '\u041F', '\u0420', '\u0421',
+ '\u0422', '\u0423', '\u0424', '\u0425', '\u0426', '\u0427',
+ '\u0428', '\u0429', '\u042A', '\u042B', '\u042C', '\u042D',
+ '\u042E', '\u042F', '\u0430', '\u0431', '\u0432', '\u0433',
+ '\u0434', '\u0435', '\u0436', '\u0437', '\u0438', '\u0439',
+ '\u043A', '\u043B', '\u043C', '\u043D', '\u043E', '\u043F',
+ '\u0440', '\u0441', '\u0442', '\u0443', '\u0444', '\u0445',
+ '\u0446', '\u0447', '\u0448', '\u0449', '\u044A', '\u044B',
+ '\u044C', '\u044D', '\u044E', '\u044F',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 128) switch(ch)
+ {
+ case 0x0098:
+ case 0x00A0:
+ case 0x00A4:
+ case 0x00A6:
+ case 0x00A7:
+ case 0x00A9:
+ case 0x00AB:
+ case 0x00AC:
+ case 0x00AD:
+ case 0x00AE:
+ case 0x00B0:
+ case 0x00B1:
+ case 0x00B5:
+ case 0x00B6:
+ case 0x00B7:
+ case 0x00BB:
+ break;
+ case 0x0401: ch = 0xA8; break;
+ case 0x0402: ch = 0x80; break;
+ case 0x0403: ch = 0x81; break;
+ case 0x0404: ch = 0xAA; break;
+ case 0x0405: ch = 0xBD; break;
+ case 0x0406: ch = 0xB2; break;
+ case 0x0407: ch = 0xAF; break;
+ case 0x0408: ch = 0xA3; break;
+ case 0x0409: ch = 0x8A; break;
+ case 0x040A: ch = 0x8C; break;
+ case 0x040B: ch = 0x8E; break;
+ case 0x040C: ch = 0x8D; break;
+ case 0x040E: ch = 0xA1; break;
+ case 0x040F: ch = 0x8F; break;
+ case 0x0410:
+ case 0x0411:
+ case 0x0412:
+ case 0x0413:
+ case 0x0414:
+ case 0x0415:
+ case 0x0416:
+ case 0x0417:
+ case 0x0418:
+ case 0x0419:
+ case 0x041A:
+ case 0x041B:
+ case 0x041C:
+ case 0x041D:
+ case 0x041E:
+ case 0x041F:
+ case 0x0420:
+ case 0x0421:
+ case 0x0422:
+ case 0x0423:
+ case 0x0424:
+ case 0x0425:
+ case 0x0426:
+ case 0x0427:
+ case 0x0428:
+ case 0x0429:
+ case 0x042A:
+ case 0x042B:
+ case 0x042C:
+ case 0x042D:
+ case 0x042E:
+ case 0x042F:
+ case 0x0430:
+ case 0x0431:
+ case 0x0432:
+ case 0x0433:
+ case 0x0434:
+ case 0x0435:
+ case 0x0436:
+ case 0x0437:
+ case 0x0438:
+ case 0x0439:
+ case 0x043A:
+ case 0x043B:
+ case 0x043C:
+ case 0x043D:
+ case 0x043E:
+ case 0x043F:
+ case 0x0440:
+ case 0x0441:
+ case 0x0442:
+ case 0x0443:
+ case 0x0444:
+ case 0x0445:
+ case 0x0446:
+ case 0x0447:
+ case 0x0448:
+ case 0x0449:
+ case 0x044A:
+ case 0x044B:
+ case 0x044C:
+ case 0x044D:
+ case 0x044E:
+ case 0x044F:
+ ch -= 0x0350;
+ break;
+ case 0x0451: ch = 0xB8; break;
+ case 0x0452: ch = 0x90; break;
+ case 0x0453: ch = 0x83; break;
+ case 0x0454: ch = 0xBA; break;
+ case 0x0455: ch = 0xBE; break;
+ case 0x0456: ch = 0xB3; break;
+ case 0x0457: ch = 0xBF; break;
+ case 0x0458: ch = 0xBC; break;
+ case 0x0459: ch = 0x9A; break;
+ case 0x045A: ch = 0x9C; break;
+ case 0x045B: ch = 0x9E; break;
+ case 0x045C: ch = 0x9D; break;
+ case 0x045E: ch = 0xA2; break;
+ case 0x045F: ch = 0x9F; break;
+ case 0x0490: ch = 0xA5; break;
+ case 0x0491: ch = 0xB4; break;
+ case 0x2013: ch = 0x96; break;
+ case 0x2014: ch = 0x97; break;
+ case 0x2018: ch = 0x91; break;
+ case 0x2019: ch = 0x92; break;
+ case 0x201A: ch = 0x82; break;
+ case 0x201C: ch = 0x93; break;
+ case 0x201D: ch = 0x94; break;
+ case 0x201E: ch = 0x84; break;
+ case 0x2020: ch = 0x86; break;
+ case 0x2021: ch = 0x87; break;
+ case 0x2022: ch = 0x95; break;
+ case 0x2026: ch = 0x85; break;
+ case 0x2030: ch = 0x89; break;
+ case 0x2039: ch = 0x8B; break;
+ case 0x203A: ch = 0x9B; break;
+ case 0x20AC: ch = 0x88; break;
+ case 0x2116: ch = 0xB9; break;
+ case 0x2122: ch = 0x99; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 128) switch(ch)
+ {
+ case 0x0098:
+ case 0x00A0:
+ case 0x00A4:
+ case 0x00A6:
+ case 0x00A7:
+ case 0x00A9:
+ case 0x00AB:
+ case 0x00AC:
+ case 0x00AD:
+ case 0x00AE:
+ case 0x00B0:
+ case 0x00B1:
+ case 0x00B5:
+ case 0x00B6:
+ case 0x00B7:
+ case 0x00BB:
+ break;
+ case 0x0401: ch = 0xA8; break;
+ case 0x0402: ch = 0x80; break;
+ case 0x0403: ch = 0x81; break;
+ case 0x0404: ch = 0xAA; break;
+ case 0x0405: ch = 0xBD; break;
+ case 0x0406: ch = 0xB2; break;
+ case 0x0407: ch = 0xAF; break;
+ case 0x0408: ch = 0xA3; break;
+ case 0x0409: ch = 0x8A; break;
+ case 0x040A: ch = 0x8C; break;
+ case 0x040B: ch = 0x8E; break;
+ case 0x040C: ch = 0x8D; break;
+ case 0x040E: ch = 0xA1; break;
+ case 0x040F: ch = 0x8F; break;
+ case 0x0410:
+ case 0x0411:
+ case 0x0412:
+ case 0x0413:
+ case 0x0414:
+ case 0x0415:
+ case 0x0416:
+ case 0x0417:
+ case 0x0418:
+ case 0x0419:
+ case 0x041A:
+ case 0x041B:
+ case 0x041C:
+ case 0x041D:
+ case 0x041E:
+ case 0x041F:
+ case 0x0420:
+ case 0x0421:
+ case 0x0422:
+ case 0x0423:
+ case 0x0424:
+ case 0x0425:
+ case 0x0426:
+ case 0x0427:
+ case 0x0428:
+ case 0x0429:
+ case 0x042A:
+ case 0x042B:
+ case 0x042C:
+ case 0x042D:
+ case 0x042E:
+ case 0x042F:
+ case 0x0430:
+ case 0x0431:
+ case 0x0432:
+ case 0x0433:
+ case 0x0434:
+ case 0x0435:
+ case 0x0436:
+ case 0x0437:
+ case 0x0438:
+ case 0x0439:
+ case 0x043A:
+ case 0x043B:
+ case 0x043C:
+ case 0x043D:
+ case 0x043E:
+ case 0x043F:
+ case 0x0440:
+ case 0x0441:
+ case 0x0442:
+ case 0x0443:
+ case 0x0444:
+ case 0x0445:
+ case 0x0446:
+ case 0x0447:
+ case 0x0448:
+ case 0x0449:
+ case 0x044A:
+ case 0x044B:
+ case 0x044C:
+ case 0x044D:
+ case 0x044E:
+ case 0x044F:
+ ch -= 0x0350;
+ break;
+ case 0x0451: ch = 0xB8; break;
+ case 0x0452: ch = 0x90; break;
+ case 0x0453: ch = 0x83; break;
+ case 0x0454: ch = 0xBA; break;
+ case 0x0455: ch = 0xBE; break;
+ case 0x0456: ch = 0xB3; break;
+ case 0x0457: ch = 0xBF; break;
+ case 0x0458: ch = 0xBC; break;
+ case 0x0459: ch = 0x9A; break;
+ case 0x045A: ch = 0x9C; break;
+ case 0x045B: ch = 0x9E; break;
+ case 0x045C: ch = 0x9D; break;
+ case 0x045E: ch = 0xA2; break;
+ case 0x045F: ch = 0x9F; break;
+ case 0x0490: ch = 0xA5; break;
+ case 0x0491: ch = 0xB4; break;
+ case 0x2013: ch = 0x96; break;
+ case 0x2014: ch = 0x97; break;
+ case 0x2018: ch = 0x91; break;
+ case 0x2019: ch = 0x92; break;
+ case 0x201A: ch = 0x82; break;
+ case 0x201C: ch = 0x93; break;
+ case 0x201D: ch = 0x94; break;
+ case 0x201E: ch = 0x84; break;
+ case 0x2020: ch = 0x86; break;
+ case 0x2021: ch = 0x87; break;
+ case 0x2022: ch = 0x95; break;
+ case 0x2026: ch = 0x85; break;
+ case 0x2030: ch = 0x89; break;
+ case 0x2039: ch = 0x8B; break;
+ case 0x203A: ch = 0x9B; break;
+ case 0x20AC: ch = 0x88; break;
+ case 0x2116: ch = 0xB9; break;
+ case 0x2122: ch = 0x99; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP1251
+
+public class ENCwindows_1251 : CP1251
+{
+ public ENCwindows_1251() : base() {}
+
+}; // class ENCwindows_1251
+
+}; // namespace I18N.Other
diff --git a/mcs/class/I18N/Other/CP1257.cs b/mcs/class/I18N/Other/CP1257.cs
new file mode 100644
index 00000000000..cac55af6055
--- /dev/null
+++ b/mcs/class/I18N/Other/CP1257.cs
@@ -0,0 +1,395 @@
+/*
+ * CP1257.cs - Baltic (Windows) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-5353.ucm".
+
+namespace I18N.Other
+{
+
+using System;
+using I18N.Common;
+
+public class CP1257 : ByteEncoding
+{
+ public CP1257()
+ : base(1257, ToChars, "Baltic (Windows)",
+ "iso-8859-4", "windows-1257", "windows-1257",
+ true, true, true, true, 1257)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
+ '\u0006', '\u0007', '\u0008', '\u0009', '\u000A', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
+ '\u0018', '\u0019', '\u001A', '\u001B', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
+ '\u0024', '\u0025', '\u0026', '\u0027', '\u0028', '\u0029',
+ '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
+ '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
+ '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
+ '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
+ '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
+ '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
+ '\u005A', '\u005B', '\u005C', '\u005D', '\u005E', '\u005F',
+ '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
+ '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
+ '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
+ '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
+ '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
+ '\u007E', '\u007F', '\u20AC', '\u0081', '\u201A', '\u0083',
+ '\u201E', '\u2026', '\u2020', '\u2021', '\u0088', '\u2030',
+ '\u008A', '\u2039', '\u008C', '\u00A8', '\u02C7', '\u00B8',
+ '\u0090', '\u2018', '\u2019', '\u201C', '\u201D', '\u2022',
+ '\u2013', '\u2014', '\u0098', '\u2122', '\u009A', '\u203A',
+ '\u009C', '\u00AF', '\u02DB', '\u009F', '\u00A0', '\u003F',
+ '\u00A2', '\u00A3', '\u00A4', '\u003F', '\u00A6', '\u00A7',
+ '\u00D8', '\u00A9', '\u0156', '\u00AB', '\u00AC', '\u00AD',
+ '\u00AE', '\u00C6', '\u00B0', '\u00B1', '\u00B2', '\u00B3',
+ '\u00B4', '\u00B5', '\u00B6', '\u00B7', '\u00F8', '\u00B9',
+ '\u0157', '\u00BB', '\u00BC', '\u00BD', '\u00BE', '\u00E6',
+ '\u0104', '\u012E', '\u0100', '\u0106', '\u00C4', '\u00C5',
+ '\u0118', '\u0112', '\u010C', '\u00C9', '\u0179', '\u0116',
+ '\u0122', '\u0136', '\u012A', '\u013B', '\u0160', '\u0143',
+ '\u0145', '\u00D3', '\u014C', '\u00D5', '\u00D6', '\u00D7',
+ '\u0172', '\u0141', '\u015A', '\u016A', '\u00DC', '\u017B',
+ '\u017D', '\u00DF', '\u0105', '\u012F', '\u0101', '\u0107',
+ '\u00E4', '\u00E5', '\u0119', '\u0113', '\u010D', '\u00E9',
+ '\u017A', '\u0117', '\u0123', '\u0137', '\u012B', '\u013C',
+ '\u0161', '\u0144', '\u0146', '\u00F3', '\u014D', '\u00F5',
+ '\u00F6', '\u00F7', '\u0173', '\u0142', '\u015B', '\u016B',
+ '\u00FC', '\u017C', '\u017E', '\u02D9',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 128) switch(ch)
+ {
+ case 0x0081:
+ case 0x0083:
+ case 0x0088:
+ case 0x008A:
+ case 0x008C:
+ case 0x0090:
+ case 0x0098:
+ case 0x009A:
+ case 0x009C:
+ case 0x009F:
+ case 0x00A0:
+ case 0x00A2:
+ case 0x00A3:
+ case 0x00A4:
+ case 0x00A6:
+ case 0x00A7:
+ case 0x00A9:
+ case 0x00AB:
+ case 0x00AC:
+ case 0x00AD:
+ case 0x00AE:
+ case 0x00B0:
+ case 0x00B1:
+ case 0x00B2:
+ case 0x00B3:
+ case 0x00B4:
+ case 0x00B5:
+ case 0x00B6:
+ case 0x00B7:
+ case 0x00B9:
+ case 0x00BB:
+ case 0x00BC:
+ case 0x00BD:
+ case 0x00BE:
+ case 0x00C4:
+ case 0x00C5:
+ case 0x00C9:
+ case 0x00D3:
+ case 0x00D5:
+ case 0x00D6:
+ case 0x00D7:
+ case 0x00DC:
+ case 0x00DF:
+ case 0x00E4:
+ case 0x00E5:
+ case 0x00E9:
+ case 0x00F3:
+ case 0x00F5:
+ case 0x00F6:
+ case 0x00F7:
+ case 0x00FC:
+ break;
+ case 0x00A8: ch = 0x8D; break;
+ case 0x00AF: ch = 0x9D; break;
+ case 0x00B8: ch = 0x8F; break;
+ case 0x00C6: ch = 0xAF; break;
+ case 0x00D8: ch = 0xA8; break;
+ case 0x00E6: ch = 0xBF; break;
+ case 0x00F8: ch = 0xB8; break;
+ case 0x0100: ch = 0xC2; break;
+ case 0x0101: ch = 0xE2; break;
+ case 0x0104: ch = 0xC0; break;
+ case 0x0105: ch = 0xE0; break;
+ case 0x0106: ch = 0xC3; break;
+ case 0x0107: ch = 0xE3; break;
+ case 0x010C: ch = 0xC8; break;
+ case 0x010D: ch = 0xE8; break;
+ case 0x0112: ch = 0xC7; break;
+ case 0x0113: ch = 0xE7; break;
+ case 0x0116: ch = 0xCB; break;
+ case 0x0117: ch = 0xEB; break;
+ case 0x0118: ch = 0xC6; break;
+ case 0x0119: ch = 0xE6; break;
+ case 0x0122: ch = 0xCC; break;
+ case 0x0123: ch = 0xEC; break;
+ case 0x012A: ch = 0xCE; break;
+ case 0x012B: ch = 0xEE; break;
+ case 0x012E: ch = 0xC1; break;
+ case 0x012F: ch = 0xE1; break;
+ case 0x0136: ch = 0xCD; break;
+ case 0x0137: ch = 0xED; break;
+ case 0x013B: ch = 0xCF; break;
+ case 0x013C: ch = 0xEF; break;
+ case 0x0141: ch = 0xD9; break;
+ case 0x0142: ch = 0xF9; break;
+ case 0x0143: ch = 0xD1; break;
+ case 0x0144: ch = 0xF1; break;
+ case 0x0145: ch = 0xD2; break;
+ case 0x0146: ch = 0xF2; break;
+ case 0x014C: ch = 0xD4; break;
+ case 0x014D: ch = 0xF4; break;
+ case 0x0156: ch = 0xAA; break;
+ case 0x0157: ch = 0xBA; break;
+ case 0x015A: ch = 0xDA; break;
+ case 0x015B: ch = 0xFA; break;
+ case 0x0160: ch = 0xD0; break;
+ case 0x0161: ch = 0xF0; break;
+ case 0x016A: ch = 0xDB; break;
+ case 0x016B: ch = 0xFB; break;
+ case 0x0172: ch = 0xD8; break;
+ case 0x0173: ch = 0xF8; break;
+ case 0x0179: ch = 0xCA; break;
+ case 0x017A: ch = 0xEA; break;
+ case 0x017B: ch = 0xDD; break;
+ case 0x017C: ch = 0xFD; break;
+ case 0x017D: ch = 0xDE; break;
+ case 0x017E: ch = 0xFE; break;
+ case 0x02C7: ch = 0x8E; break;
+ case 0x02D9: ch = 0xFF; break;
+ case 0x02DB: ch = 0x9E; break;
+ case 0x2013: ch = 0x96; break;
+ case 0x2014: ch = 0x97; break;
+ case 0x2018: ch = 0x91; break;
+ case 0x2019: ch = 0x92; break;
+ case 0x201A: ch = 0x82; break;
+ case 0x201C: ch = 0x93; break;
+ case 0x201D: ch = 0x94; break;
+ case 0x201E: ch = 0x84; break;
+ case 0x2020: ch = 0x86; break;
+ case 0x2021: ch = 0x87; break;
+ case 0x2022: ch = 0x95; break;
+ case 0x2026: ch = 0x85; break;
+ case 0x2030: ch = 0x89; break;
+ case 0x2039: ch = 0x8B; break;
+ case 0x203A: ch = 0x9B; break;
+ case 0x20AC: ch = 0x80; break;
+ case 0x2122: ch = 0x99; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 128) switch(ch)
+ {
+ case 0x0081:
+ case 0x0083:
+ case 0x0088:
+ case 0x008A:
+ case 0x008C:
+ case 0x0090:
+ case 0x0098:
+ case 0x009A:
+ case 0x009C:
+ case 0x009F:
+ case 0x00A0:
+ case 0x00A2:
+ case 0x00A3:
+ case 0x00A4:
+ case 0x00A6:
+ case 0x00A7:
+ case 0x00A9:
+ case 0x00AB:
+ case 0x00AC:
+ case 0x00AD:
+ case 0x00AE:
+ case 0x00B0:
+ case 0x00B1:
+ case 0x00B2:
+ case 0x00B3:
+ case 0x00B4:
+ case 0x00B5:
+ case 0x00B6:
+ case 0x00B7:
+ case 0x00B9:
+ case 0x00BB:
+ case 0x00BC:
+ case 0x00BD:
+ case 0x00BE:
+ case 0x00C4:
+ case 0x00C5:
+ case 0x00C9:
+ case 0x00D3:
+ case 0x00D5:
+ case 0x00D6:
+ case 0x00D7:
+ case 0x00DC:
+ case 0x00DF:
+ case 0x00E4:
+ case 0x00E5:
+ case 0x00E9:
+ case 0x00F3:
+ case 0x00F5:
+ case 0x00F6:
+ case 0x00F7:
+ case 0x00FC:
+ break;
+ case 0x00A8: ch = 0x8D; break;
+ case 0x00AF: ch = 0x9D; break;
+ case 0x00B8: ch = 0x8F; break;
+ case 0x00C6: ch = 0xAF; break;
+ case 0x00D8: ch = 0xA8; break;
+ case 0x00E6: ch = 0xBF; break;
+ case 0x00F8: ch = 0xB8; break;
+ case 0x0100: ch = 0xC2; break;
+ case 0x0101: ch = 0xE2; break;
+ case 0x0104: ch = 0xC0; break;
+ case 0x0105: ch = 0xE0; break;
+ case 0x0106: ch = 0xC3; break;
+ case 0x0107: ch = 0xE3; break;
+ case 0x010C: ch = 0xC8; break;
+ case 0x010D: ch = 0xE8; break;
+ case 0x0112: ch = 0xC7; break;
+ case 0x0113: ch = 0xE7; break;
+ case 0x0116: ch = 0xCB; break;
+ case 0x0117: ch = 0xEB; break;
+ case 0x0118: ch = 0xC6; break;
+ case 0x0119: ch = 0xE6; break;
+ case 0x0122: ch = 0xCC; break;
+ case 0x0123: ch = 0xEC; break;
+ case 0x012A: ch = 0xCE; break;
+ case 0x012B: ch = 0xEE; break;
+ case 0x012E: ch = 0xC1; break;
+ case 0x012F: ch = 0xE1; break;
+ case 0x0136: ch = 0xCD; break;
+ case 0x0137: ch = 0xED; break;
+ case 0x013B: ch = 0xCF; break;
+ case 0x013C: ch = 0xEF; break;
+ case 0x0141: ch = 0xD9; break;
+ case 0x0142: ch = 0xF9; break;
+ case 0x0143: ch = 0xD1; break;
+ case 0x0144: ch = 0xF1; break;
+ case 0x0145: ch = 0xD2; break;
+ case 0x0146: ch = 0xF2; break;
+ case 0x014C: ch = 0xD4; break;
+ case 0x014D: ch = 0xF4; break;
+ case 0x0156: ch = 0xAA; break;
+ case 0x0157: ch = 0xBA; break;
+ case 0x015A: ch = 0xDA; break;
+ case 0x015B: ch = 0xFA; break;
+ case 0x0160: ch = 0xD0; break;
+ case 0x0161: ch = 0xF0; break;
+ case 0x016A: ch = 0xDB; break;
+ case 0x016B: ch = 0xFB; break;
+ case 0x0172: ch = 0xD8; break;
+ case 0x0173: ch = 0xF8; break;
+ case 0x0179: ch = 0xCA; break;
+ case 0x017A: ch = 0xEA; break;
+ case 0x017B: ch = 0xDD; break;
+ case 0x017C: ch = 0xFD; break;
+ case 0x017D: ch = 0xDE; break;
+ case 0x017E: ch = 0xFE; break;
+ case 0x02C7: ch = 0x8E; break;
+ case 0x02D9: ch = 0xFF; break;
+ case 0x02DB: ch = 0x9E; break;
+ case 0x2013: ch = 0x96; break;
+ case 0x2014: ch = 0x97; break;
+ case 0x2018: ch = 0x91; break;
+ case 0x2019: ch = 0x92; break;
+ case 0x201A: ch = 0x82; break;
+ case 0x201C: ch = 0x93; break;
+ case 0x201D: ch = 0x94; break;
+ case 0x201E: ch = 0x84; break;
+ case 0x2020: ch = 0x86; break;
+ case 0x2021: ch = 0x87; break;
+ case 0x2022: ch = 0x95; break;
+ case 0x2026: ch = 0x85; break;
+ case 0x2030: ch = 0x89; break;
+ case 0x2039: ch = 0x8B; break;
+ case 0x203A: ch = 0x9B; break;
+ case 0x20AC: ch = 0x80; break;
+ case 0x2122: ch = 0x99; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP1257
+
+public class ENCwindows_1257 : CP1257
+{
+ public ENCwindows_1257() : base() {}
+
+}; // class ENCwindows_1257
+
+}; // namespace I18N.Other
diff --git a/mcs/class/I18N/Other/CP1258.cs b/mcs/class/I18N/Other/CP1258.cs
new file mode 100644
index 00000000000..afd266e44ca
--- /dev/null
+++ b/mcs/class/I18N/Other/CP1258.cs
@@ -0,0 +1,399 @@
+/*
+ * CP1258.cs - Vietnamese (Windows) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-5354.ucm".
+
+namespace I18N.Other
+{
+
+using System;
+using I18N.Common;
+
+public class CP1258 : ByteEncoding
+{
+ public CP1258()
+ : base(1258, ToChars, "Vietnamese (Windows)",
+ "windows-1258", "windows-1258", "windows-1258",
+ true, true, true, true, 1258)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
+ '\u0006', '\u0007', '\u0008', '\u0009', '\u000A', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
+ '\u0018', '\u0019', '\u001A', '\u001B', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
+ '\u0024', '\u0025', '\u0026', '\u0027', '\u0028', '\u0029',
+ '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
+ '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
+ '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
+ '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
+ '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
+ '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
+ '\u005A', '\u005B', '\u005C', '\u005D', '\u005E', '\u005F',
+ '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
+ '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
+ '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
+ '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
+ '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
+ '\u007E', '\u007F', '\u20AC', '\u0081', '\u201A', '\u0192',
+ '\u201E', '\u2026', '\u2020', '\u2021', '\u02C6', '\u2030',
+ '\u008A', '\u2039', '\u0152', '\u008D', '\u008E', '\u008F',
+ '\u0090', '\u2018', '\u2019', '\u201C', '\u201D', '\u2022',
+ '\u2013', '\u2014', '\u02DC', '\u2122', '\u009A', '\u203A',
+ '\u0153', '\u009D', '\u009E', '\u0178', '\u00A0', '\u00A1',
+ '\u00A2', '\u00A3', '\u00A4', '\u00A5', '\u00A6', '\u00A7',
+ '\u00A8', '\u00A9', '\u00AA', '\u00AB', '\u00AC', '\u00AD',
+ '\u00AE', '\u00AF', '\u00B0', '\u00B1', '\u00B2', '\u00B3',
+ '\u00B4', '\u00B5', '\u00B6', '\u00B7', '\u00B8', '\u00B9',
+ '\u00BA', '\u00BB', '\u00BC', '\u00BD', '\u00BE', '\u00BF',
+ '\u00C0', '\u00C1', '\u00C2', '\u0102', '\u00C4', '\u00C5',
+ '\u00C6', '\u00C7', '\u00C8', '\u00C9', '\u00CA', '\u00CB',
+ '\u0300', '\u00CD', '\u00CE', '\u00CF', '\u0110', '\u00D1',
+ '\u0309', '\u00D3', '\u00D4', '\u01A0', '\u00D6', '\u00D7',
+ '\u00D8', '\u00D9', '\u00DA', '\u00DB', '\u00DC', '\u01AF',
+ '\u0303', '\u00DF', '\u00E0', '\u00E1', '\u00E2', '\u0103',
+ '\u00E4', '\u00E5', '\u00E6', '\u00E7', '\u00E8', '\u00E9',
+ '\u00EA', '\u00EB', '\u0301', '\u00ED', '\u00EE', '\u00EF',
+ '\u0111', '\u00F1', '\u0323', '\u00F3', '\u00F4', '\u01A1',
+ '\u00F6', '\u00F7', '\u00F8', '\u00F9', '\u00FA', '\u00FB',
+ '\u00FC', '\u01B0', '\u20AB', '\u00FF',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 128) switch(ch)
+ {
+ case 0x0081:
+ case 0x008A:
+ case 0x008D:
+ case 0x008E:
+ case 0x008F:
+ case 0x0090:
+ case 0x009A:
+ case 0x009D:
+ case 0x009E:
+ case 0x00A0:
+ case 0x00A1:
+ case 0x00A2:
+ case 0x00A3:
+ case 0x00A4:
+ case 0x00A5:
+ case 0x00A6:
+ case 0x00A7:
+ case 0x00A8:
+ case 0x00A9:
+ case 0x00AA:
+ case 0x00AB:
+ case 0x00AC:
+ case 0x00AD:
+ case 0x00AE:
+ case 0x00AF:
+ case 0x00B0:
+ case 0x00B1:
+ case 0x00B2:
+ case 0x00B3:
+ case 0x00B4:
+ case 0x00B5:
+ case 0x00B6:
+ case 0x00B7:
+ case 0x00B8:
+ case 0x00B9:
+ case 0x00BA:
+ case 0x00BB:
+ case 0x00BC:
+ case 0x00BD:
+ case 0x00BE:
+ case 0x00BF:
+ case 0x00C0:
+ case 0x00C1:
+ case 0x00C2:
+ case 0x00C4:
+ case 0x00C5:
+ case 0x00C6:
+ case 0x00C7:
+ case 0x00C8:
+ case 0x00C9:
+ case 0x00CA:
+ case 0x00CB:
+ case 0x00CD:
+ case 0x00CE:
+ case 0x00CF:
+ case 0x00D1:
+ case 0x00D3:
+ case 0x00D4:
+ case 0x00D6:
+ case 0x00D7:
+ case 0x00D8:
+ case 0x00D9:
+ case 0x00DA:
+ case 0x00DB:
+ case 0x00DC:
+ case 0x00DF:
+ case 0x00E0:
+ case 0x00E1:
+ case 0x00E2:
+ case 0x00E4:
+ case 0x00E5:
+ case 0x00E6:
+ case 0x00E7:
+ case 0x00E8:
+ case 0x00E9:
+ case 0x00EA:
+ case 0x00EB:
+ case 0x00ED:
+ case 0x00EE:
+ case 0x00EF:
+ case 0x00F1:
+ case 0x00F3:
+ case 0x00F4:
+ case 0x00F6:
+ case 0x00F7:
+ case 0x00F8:
+ case 0x00F9:
+ case 0x00FA:
+ case 0x00FB:
+ case 0x00FC:
+ case 0x00FF:
+ break;
+ case 0x0102: ch = 0xC3; break;
+ case 0x0103: ch = 0xE3; break;
+ case 0x0110: ch = 0xD0; break;
+ case 0x0111: ch = 0xF0; break;
+ case 0x0152: ch = 0x8C; break;
+ case 0x0153: ch = 0x9C; break;
+ case 0x0178: ch = 0x9F; break;
+ case 0x0192: ch = 0x83; break;
+ case 0x01A0: ch = 0xD5; break;
+ case 0x01A1: ch = 0xF5; break;
+ case 0x01AF: ch = 0xDD; break;
+ case 0x01B0: ch = 0xFD; break;
+ case 0x02C6: ch = 0x88; break;
+ case 0x02DC: ch = 0x98; break;
+ case 0x0300: ch = 0xCC; break;
+ case 0x0301: ch = 0xEC; break;
+ case 0x0303: ch = 0xDE; break;
+ case 0x0309: ch = 0xD2; break;
+ case 0x0323: ch = 0xF2; break;
+ case 0x2013: ch = 0x96; break;
+ case 0x2014: ch = 0x97; break;
+ case 0x2018: ch = 0x91; break;
+ case 0x2019: ch = 0x92; break;
+ case 0x201A: ch = 0x82; break;
+ case 0x201C: ch = 0x93; break;
+ case 0x201D: ch = 0x94; break;
+ case 0x201E: ch = 0x84; break;
+ case 0x2020: ch = 0x86; break;
+ case 0x2021: ch = 0x87; break;
+ case 0x2022: ch = 0x95; break;
+ case 0x2026: ch = 0x85; break;
+ case 0x2030: ch = 0x89; break;
+ case 0x2039: ch = 0x8B; break;
+ case 0x203A: ch = 0x9B; break;
+ case 0x20AB: ch = 0xFE; break;
+ case 0x20AC: ch = 0x80; break;
+ case 0x2122: ch = 0x99; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 128) switch(ch)
+ {
+ case 0x0081:
+ case 0x008A:
+ case 0x008D:
+ case 0x008E:
+ case 0x008F:
+ case 0x0090:
+ case 0x009A:
+ case 0x009D:
+ case 0x009E:
+ case 0x00A0:
+ case 0x00A1:
+ case 0x00A2:
+ case 0x00A3:
+ case 0x00A4:
+ case 0x00A5:
+ case 0x00A6:
+ case 0x00A7:
+ case 0x00A8:
+ case 0x00A9:
+ case 0x00AA:
+ case 0x00AB:
+ case 0x00AC:
+ case 0x00AD:
+ case 0x00AE:
+ case 0x00AF:
+ case 0x00B0:
+ case 0x00B1:
+ case 0x00B2:
+ case 0x00B3:
+ case 0x00B4:
+ case 0x00B5:
+ case 0x00B6:
+ case 0x00B7:
+ case 0x00B8:
+ case 0x00B9:
+ case 0x00BA:
+ case 0x00BB:
+ case 0x00BC:
+ case 0x00BD:
+ case 0x00BE:
+ case 0x00BF:
+ case 0x00C0:
+ case 0x00C1:
+ case 0x00C2:
+ case 0x00C4:
+ case 0x00C5:
+ case 0x00C6:
+ case 0x00C7:
+ case 0x00C8:
+ case 0x00C9:
+ case 0x00CA:
+ case 0x00CB:
+ case 0x00CD:
+ case 0x00CE:
+ case 0x00CF:
+ case 0x00D1:
+ case 0x00D3:
+ case 0x00D4:
+ case 0x00D6:
+ case 0x00D7:
+ case 0x00D8:
+ case 0x00D9:
+ case 0x00DA:
+ case 0x00DB:
+ case 0x00DC:
+ case 0x00DF:
+ case 0x00E0:
+ case 0x00E1:
+ case 0x00E2:
+ case 0x00E4:
+ case 0x00E5:
+ case 0x00E6:
+ case 0x00E7:
+ case 0x00E8:
+ case 0x00E9:
+ case 0x00EA:
+ case 0x00EB:
+ case 0x00ED:
+ case 0x00EE:
+ case 0x00EF:
+ case 0x00F1:
+ case 0x00F3:
+ case 0x00F4:
+ case 0x00F6:
+ case 0x00F7:
+ case 0x00F8:
+ case 0x00F9:
+ case 0x00FA:
+ case 0x00FB:
+ case 0x00FC:
+ case 0x00FF:
+ break;
+ case 0x0102: ch = 0xC3; break;
+ case 0x0103: ch = 0xE3; break;
+ case 0x0110: ch = 0xD0; break;
+ case 0x0111: ch = 0xF0; break;
+ case 0x0152: ch = 0x8C; break;
+ case 0x0153: ch = 0x9C; break;
+ case 0x0178: ch = 0x9F; break;
+ case 0x0192: ch = 0x83; break;
+ case 0x01A0: ch = 0xD5; break;
+ case 0x01A1: ch = 0xF5; break;
+ case 0x01AF: ch = 0xDD; break;
+ case 0x01B0: ch = 0xFD; break;
+ case 0x02C6: ch = 0x88; break;
+ case 0x02DC: ch = 0x98; break;
+ case 0x0300: ch = 0xCC; break;
+ case 0x0301: ch = 0xEC; break;
+ case 0x0303: ch = 0xDE; break;
+ case 0x0309: ch = 0xD2; break;
+ case 0x0323: ch = 0xF2; break;
+ case 0x2013: ch = 0x96; break;
+ case 0x2014: ch = 0x97; break;
+ case 0x2018: ch = 0x91; break;
+ case 0x2019: ch = 0x92; break;
+ case 0x201A: ch = 0x82; break;
+ case 0x201C: ch = 0x93; break;
+ case 0x201D: ch = 0x94; break;
+ case 0x201E: ch = 0x84; break;
+ case 0x2020: ch = 0x86; break;
+ case 0x2021: ch = 0x87; break;
+ case 0x2022: ch = 0x95; break;
+ case 0x2026: ch = 0x85; break;
+ case 0x2030: ch = 0x89; break;
+ case 0x2039: ch = 0x8B; break;
+ case 0x203A: ch = 0x9B; break;
+ case 0x20AB: ch = 0xFE; break;
+ case 0x20AC: ch = 0x80; break;
+ case 0x2122: ch = 0x99; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP1258
+
+public class ENCwindows_1258 : CP1258
+{
+ public ENCwindows_1258() : base() {}
+
+}; // class ENCwindows_1258
+
+}; // namespace I18N.Other
diff --git a/mcs/class/I18N/Other/CP20866.cs b/mcs/class/I18N/Other/CP20866.cs
new file mode 100644
index 00000000000..f6fe27016dc
--- /dev/null
+++ b/mcs/class/I18N/Other/CP20866.cs
@@ -0,0 +1,429 @@
+/*
+ * CP20866.cs - Cyrillic (KOI8-R) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-878.ucm".
+
+namespace I18N.Other
+{
+
+using System;
+using I18N.Common;
+
+public class CP20866 : ByteEncoding
+{
+ public CP20866()
+ : base(20866, ToChars, "Cyrillic (KOI8-R)",
+ "koi8-r", "koi8-r", "koi8-r",
+ true, true, true, true, 1251)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
+ '\u0006', '\u0007', '\u0008', '\u0009', '\u000A', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
+ '\u0018', '\u0019', '\u001A', '\u001B', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
+ '\u0024', '\u0025', '\u0026', '\u0027', '\u0028', '\u0029',
+ '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
+ '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
+ '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
+ '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
+ '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
+ '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
+ '\u005A', '\u005B', '\u005C', '\u005D', '\u005E', '\u005F',
+ '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
+ '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
+ '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
+ '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
+ '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
+ '\u007E', '\u007F', '\u2500', '\u2502', '\u250C', '\u2510',
+ '\u2514', '\u2518', '\u251C', '\u2524', '\u252C', '\u2534',
+ '\u253C', '\u2580', '\u2584', '\u2588', '\u258C', '\u2590',
+ '\u2591', '\u2592', '\u2593', '\u2320', '\u25A0', '\u2219',
+ '\u221A', '\u2248', '\u2264', '\u2265', '\u00A0', '\u2321',
+ '\u00B0', '\u00B2', '\u00B7', '\u00F7', '\u2550', '\u2551',
+ '\u2552', '\u0451', '\u2553', '\u2554', '\u2555', '\u2556',
+ '\u2557', '\u2558', '\u2559', '\u255A', '\u255B', '\u255C',
+ '\u255D', '\u255E', '\u255F', '\u2560', '\u2561', '\u0401',
+ '\u2562', '\u2563', '\u2564', '\u2565', '\u2566', '\u2567',
+ '\u2568', '\u2569', '\u256A', '\u256B', '\u256C', '\u00A9',
+ '\u044E', '\u0430', '\u0431', '\u0446', '\u0434', '\u0435',
+ '\u0444', '\u0433', '\u0445', '\u0438', '\u0439', '\u043A',
+ '\u043B', '\u043C', '\u043D', '\u043E', '\u043F', '\u044F',
+ '\u0440', '\u0441', '\u0442', '\u0443', '\u0436', '\u0432',
+ '\u044C', '\u044B', '\u0437', '\u0448', '\u044D', '\u0449',
+ '\u0447', '\u044A', '\u042E', '\u0410', '\u0411', '\u0426',
+ '\u0414', '\u0415', '\u0424', '\u0413', '\u0425', '\u0418',
+ '\u0419', '\u041A', '\u041B', '\u041C', '\u041D', '\u041E',
+ '\u041F', '\u042F', '\u0420', '\u0421', '\u0422', '\u0423',
+ '\u0416', '\u0412', '\u042C', '\u042B', '\u0417', '\u0428',
+ '\u042D', '\u0429', '\u0427', '\u042A',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 128) switch(ch)
+ {
+ case 0x00A0: ch = 0x9A; break;
+ case 0x00A9: ch = 0xBF; break;
+ case 0x00B0: ch = 0x9C; break;
+ case 0x00B2: ch = 0x9D; break;
+ case 0x00B7: ch = 0x9E; break;
+ case 0x00F7: ch = 0x9F; break;
+ case 0x0401: ch = 0xB3; break;
+ case 0x0410: ch = 0xE1; break;
+ case 0x0411: ch = 0xE2; break;
+ case 0x0412: ch = 0xF7; break;
+ case 0x0413: ch = 0xE7; break;
+ case 0x0414: ch = 0xE4; break;
+ case 0x0415: ch = 0xE5; break;
+ case 0x0416: ch = 0xF6; break;
+ case 0x0417: ch = 0xFA; break;
+ case 0x0418:
+ case 0x0419:
+ case 0x041A:
+ case 0x041B:
+ case 0x041C:
+ case 0x041D:
+ case 0x041E:
+ case 0x041F:
+ ch -= 0x032F;
+ break;
+ case 0x0420:
+ case 0x0421:
+ case 0x0422:
+ case 0x0423:
+ ch -= 0x032E;
+ break;
+ case 0x0424: ch = 0xE6; break;
+ case 0x0425: ch = 0xE8; break;
+ case 0x0426: ch = 0xE3; break;
+ case 0x0427: ch = 0xFE; break;
+ case 0x0428: ch = 0xFB; break;
+ case 0x0429: ch = 0xFD; break;
+ case 0x042A: ch = 0xFF; break;
+ case 0x042B: ch = 0xF9; break;
+ case 0x042C: ch = 0xF8; break;
+ case 0x042D: ch = 0xFC; break;
+ case 0x042E: ch = 0xE0; break;
+ case 0x042F: ch = 0xF1; break;
+ case 0x0430: ch = 0xC1; break;
+ case 0x0431: ch = 0xC2; break;
+ case 0x0432: ch = 0xD7; break;
+ case 0x0433: ch = 0xC7; break;
+ case 0x0434: ch = 0xC4; break;
+ case 0x0435: ch = 0xC5; break;
+ case 0x0436: ch = 0xD6; break;
+ case 0x0437: ch = 0xDA; break;
+ case 0x0438:
+ case 0x0439:
+ case 0x043A:
+ case 0x043B:
+ case 0x043C:
+ case 0x043D:
+ case 0x043E:
+ case 0x043F:
+ ch -= 0x036F;
+ break;
+ case 0x0440:
+ case 0x0441:
+ case 0x0442:
+ case 0x0443:
+ ch -= 0x036E;
+ break;
+ case 0x0444: ch = 0xC6; break;
+ case 0x0445: ch = 0xC8; break;
+ case 0x0446: ch = 0xC3; break;
+ case 0x0447: ch = 0xDE; break;
+ case 0x0448: ch = 0xDB; break;
+ case 0x0449: ch = 0xDD; break;
+ case 0x044A: ch = 0xDF; break;
+ case 0x044B: ch = 0xD9; break;
+ case 0x044C: ch = 0xD8; break;
+ case 0x044D: ch = 0xDC; break;
+ case 0x044E: ch = 0xC0; break;
+ case 0x044F: ch = 0xD1; break;
+ case 0x0451: ch = 0xA3; break;
+ case 0x2219: ch = 0x95; break;
+ case 0x221A: ch = 0x96; break;
+ case 0x2248: ch = 0x97; break;
+ case 0x2264: ch = 0x98; break;
+ case 0x2265: ch = 0x99; break;
+ case 0x2320: ch = 0x93; break;
+ case 0x2321: ch = 0x9B; break;
+ case 0x2500: ch = 0x80; break;
+ case 0x2502: ch = 0x81; break;
+ case 0x250C: ch = 0x82; break;
+ case 0x2510: ch = 0x83; break;
+ case 0x2514: ch = 0x84; break;
+ case 0x2518: ch = 0x85; break;
+ case 0x251C: ch = 0x86; break;
+ case 0x2524: ch = 0x87; break;
+ case 0x252C: ch = 0x88; break;
+ case 0x2534: ch = 0x89; break;
+ case 0x253C: ch = 0x8A; break;
+ case 0x2550: ch = 0xA0; break;
+ case 0x2551: ch = 0xA1; break;
+ case 0x2552: ch = 0xA2; break;
+ case 0x2553:
+ case 0x2554:
+ case 0x2555:
+ case 0x2556:
+ case 0x2557:
+ case 0x2558:
+ case 0x2559:
+ case 0x255A:
+ case 0x255B:
+ case 0x255C:
+ case 0x255D:
+ case 0x255E:
+ case 0x255F:
+ case 0x2560:
+ case 0x2561:
+ ch -= 0x24AF;
+ break;
+ case 0x2562:
+ case 0x2563:
+ case 0x2564:
+ case 0x2565:
+ case 0x2566:
+ case 0x2567:
+ case 0x2568:
+ case 0x2569:
+ case 0x256A:
+ case 0x256B:
+ case 0x256C:
+ ch -= 0x24AE;
+ break;
+ case 0x2580: ch = 0x8B; break;
+ case 0x2584: ch = 0x8C; break;
+ case 0x2588: ch = 0x8D; break;
+ case 0x258C: ch = 0x8E; break;
+ case 0x2590:
+ case 0x2591:
+ case 0x2592:
+ case 0x2593:
+ ch -= 0x2501;
+ break;
+ case 0x25A0: ch = 0x94; break;
+ case 0xFFE8: ch = 0x81; break;
+ case 0xFFED: ch = 0x94; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 128) switch(ch)
+ {
+ case 0x00A0: ch = 0x9A; break;
+ case 0x00A9: ch = 0xBF; break;
+ case 0x00B0: ch = 0x9C; break;
+ case 0x00B2: ch = 0x9D; break;
+ case 0x00B7: ch = 0x9E; break;
+ case 0x00F7: ch = 0x9F; break;
+ case 0x0401: ch = 0xB3; break;
+ case 0x0410: ch = 0xE1; break;
+ case 0x0411: ch = 0xE2; break;
+ case 0x0412: ch = 0xF7; break;
+ case 0x0413: ch = 0xE7; break;
+ case 0x0414: ch = 0xE4; break;
+ case 0x0415: ch = 0xE5; break;
+ case 0x0416: ch = 0xF6; break;
+ case 0x0417: ch = 0xFA; break;
+ case 0x0418:
+ case 0x0419:
+ case 0x041A:
+ case 0x041B:
+ case 0x041C:
+ case 0x041D:
+ case 0x041E:
+ case 0x041F:
+ ch -= 0x032F;
+ break;
+ case 0x0420:
+ case 0x0421:
+ case 0x0422:
+ case 0x0423:
+ ch -= 0x032E;
+ break;
+ case 0x0424: ch = 0xE6; break;
+ case 0x0425: ch = 0xE8; break;
+ case 0x0426: ch = 0xE3; break;
+ case 0x0427: ch = 0xFE; break;
+ case 0x0428: ch = 0xFB; break;
+ case 0x0429: ch = 0xFD; break;
+ case 0x042A: ch = 0xFF; break;
+ case 0x042B: ch = 0xF9; break;
+ case 0x042C: ch = 0xF8; break;
+ case 0x042D: ch = 0xFC; break;
+ case 0x042E: ch = 0xE0; break;
+ case 0x042F: ch = 0xF1; break;
+ case 0x0430: ch = 0xC1; break;
+ case 0x0431: ch = 0xC2; break;
+ case 0x0432: ch = 0xD7; break;
+ case 0x0433: ch = 0xC7; break;
+ case 0x0434: ch = 0xC4; break;
+ case 0x0435: ch = 0xC5; break;
+ case 0x0436: ch = 0xD6; break;
+ case 0x0437: ch = 0xDA; break;
+ case 0x0438:
+ case 0x0439:
+ case 0x043A:
+ case 0x043B:
+ case 0x043C:
+ case 0x043D:
+ case 0x043E:
+ case 0x043F:
+ ch -= 0x036F;
+ break;
+ case 0x0440:
+ case 0x0441:
+ case 0x0442:
+ case 0x0443:
+ ch -= 0x036E;
+ break;
+ case 0x0444: ch = 0xC6; break;
+ case 0x0445: ch = 0xC8; break;
+ case 0x0446: ch = 0xC3; break;
+ case 0x0447: ch = 0xDE; break;
+ case 0x0448: ch = 0xDB; break;
+ case 0x0449: ch = 0xDD; break;
+ case 0x044A: ch = 0xDF; break;
+ case 0x044B: ch = 0xD9; break;
+ case 0x044C: ch = 0xD8; break;
+ case 0x044D: ch = 0xDC; break;
+ case 0x044E: ch = 0xC0; break;
+ case 0x044F: ch = 0xD1; break;
+ case 0x0451: ch = 0xA3; break;
+ case 0x2219: ch = 0x95; break;
+ case 0x221A: ch = 0x96; break;
+ case 0x2248: ch = 0x97; break;
+ case 0x2264: ch = 0x98; break;
+ case 0x2265: ch = 0x99; break;
+ case 0x2320: ch = 0x93; break;
+ case 0x2321: ch = 0x9B; break;
+ case 0x2500: ch = 0x80; break;
+ case 0x2502: ch = 0x81; break;
+ case 0x250C: ch = 0x82; break;
+ case 0x2510: ch = 0x83; break;
+ case 0x2514: ch = 0x84; break;
+ case 0x2518: ch = 0x85; break;
+ case 0x251C: ch = 0x86; break;
+ case 0x2524: ch = 0x87; break;
+ case 0x252C: ch = 0x88; break;
+ case 0x2534: ch = 0x89; break;
+ case 0x253C: ch = 0x8A; break;
+ case 0x2550: ch = 0xA0; break;
+ case 0x2551: ch = 0xA1; break;
+ case 0x2552: ch = 0xA2; break;
+ case 0x2553:
+ case 0x2554:
+ case 0x2555:
+ case 0x2556:
+ case 0x2557:
+ case 0x2558:
+ case 0x2559:
+ case 0x255A:
+ case 0x255B:
+ case 0x255C:
+ case 0x255D:
+ case 0x255E:
+ case 0x255F:
+ case 0x2560:
+ case 0x2561:
+ ch -= 0x24AF;
+ break;
+ case 0x2562:
+ case 0x2563:
+ case 0x2564:
+ case 0x2565:
+ case 0x2566:
+ case 0x2567:
+ case 0x2568:
+ case 0x2569:
+ case 0x256A:
+ case 0x256B:
+ case 0x256C:
+ ch -= 0x24AE;
+ break;
+ case 0x2580: ch = 0x8B; break;
+ case 0x2584: ch = 0x8C; break;
+ case 0x2588: ch = 0x8D; break;
+ case 0x258C: ch = 0x8E; break;
+ case 0x2590:
+ case 0x2591:
+ case 0x2592:
+ case 0x2593:
+ ch -= 0x2501;
+ break;
+ case 0x25A0: ch = 0x94; break;
+ case 0xFFE8: ch = 0x81; break;
+ case 0xFFED: ch = 0x94; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP20866
+
+public class ENCkoi8_r : CP20866
+{
+ public ENCkoi8_r() : base() {}
+
+}; // class ENCkoi8_r
+
+}; // namespace I18N.Other
diff --git a/mcs/class/I18N/Other/CP21866.cs b/mcs/class/I18N/Other/CP21866.cs
new file mode 100644
index 00000000000..a8caecea347
--- /dev/null
+++ b/mcs/class/I18N/Other/CP21866.cs
@@ -0,0 +1,429 @@
+/*
+ * CP21866.cs - Ukrainian (KOI8-U) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "koi8-u.ucm".
+
+namespace I18N.Other
+{
+
+using System;
+using I18N.Common;
+
+public class CP21866 : ByteEncoding
+{
+ public CP21866()
+ : base(21866, ToChars, "Ukrainian (KOI8-U)",
+ "koi8-u", "koi8-u", "koi8-u",
+ true, true, true, true, 1251)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
+ '\u0006', '\u0007', '\u0008', '\u0009', '\u000A', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
+ '\u0018', '\u0019', '\u001A', '\u001B', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
+ '\u0024', '\u0025', '\u0026', '\u0027', '\u0028', '\u0029',
+ '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
+ '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
+ '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
+ '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
+ '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
+ '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
+ '\u005A', '\u005B', '\u005C', '\u005D', '\u005E', '\u005F',
+ '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
+ '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
+ '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
+ '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
+ '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
+ '\u007E', '\u007F', '\u2500', '\u2502', '\u250C', '\u2510',
+ '\u2514', '\u2518', '\u251C', '\u2524', '\u252C', '\u2534',
+ '\u253C', '\u2580', '\u2584', '\u2588', '\u258C', '\u2590',
+ '\u2591', '\u2592', '\u2593', '\u2320', '\u25A0', '\u2219',
+ '\u221A', '\u2248', '\u2264', '\u2265', '\u00A0', '\u2321',
+ '\u00B0', '\u00B2', '\u00B7', '\u00F7', '\u2550', '\u2551',
+ '\u2552', '\u0451', '\u0454', '\u2554', '\u0456', '\u0457',
+ '\u2557', '\u2558', '\u2559', '\u255A', '\u255B', '\u0491',
+ '\u255D', '\u255E', '\u255F', '\u2560', '\u2561', '\u0401',
+ '\u0404', '\u2563', '\u0406', '\u0407', '\u2566', '\u2567',
+ '\u2568', '\u2569', '\u256A', '\u0490', '\u256C', '\u00A9',
+ '\u044E', '\u0430', '\u0431', '\u0446', '\u0434', '\u0435',
+ '\u0444', '\u0433', '\u0445', '\u0438', '\u0439', '\u043A',
+ '\u043B', '\u043C', '\u043D', '\u043E', '\u043F', '\u044F',
+ '\u0440', '\u0441', '\u0442', '\u0443', '\u0436', '\u0432',
+ '\u044C', '\u044B', '\u0437', '\u0448', '\u044D', '\u0449',
+ '\u0447', '\u044A', '\u042E', '\u0410', '\u0411', '\u0426',
+ '\u0414', '\u0415', '\u0424', '\u0413', '\u0425', '\u0418',
+ '\u0419', '\u041A', '\u041B', '\u041C', '\u041D', '\u041E',
+ '\u041F', '\u042F', '\u0420', '\u0421', '\u0422', '\u0423',
+ '\u0416', '\u0412', '\u042C', '\u042B', '\u0417', '\u0428',
+ '\u042D', '\u0429', '\u0427', '\u042A',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 128) switch(ch)
+ {
+ case 0x00A0: ch = 0x9A; break;
+ case 0x00A9: ch = 0xBF; break;
+ case 0x00B0: ch = 0x9C; break;
+ case 0x00B2: ch = 0x9D; break;
+ case 0x00B7: ch = 0x9E; break;
+ case 0x00F7: ch = 0x9F; break;
+ case 0x0401: ch = 0xB3; break;
+ case 0x0404: ch = 0xB4; break;
+ case 0x0406: ch = 0xB6; break;
+ case 0x0407: ch = 0xB7; break;
+ case 0x0410: ch = 0xE1; break;
+ case 0x0411: ch = 0xE2; break;
+ case 0x0412: ch = 0xF7; break;
+ case 0x0413: ch = 0xE7; break;
+ case 0x0414: ch = 0xE4; break;
+ case 0x0415: ch = 0xE5; break;
+ case 0x0416: ch = 0xF6; break;
+ case 0x0417: ch = 0xFA; break;
+ case 0x0418:
+ case 0x0419:
+ case 0x041A:
+ case 0x041B:
+ case 0x041C:
+ case 0x041D:
+ case 0x041E:
+ case 0x041F:
+ ch -= 0x032F;
+ break;
+ case 0x0420:
+ case 0x0421:
+ case 0x0422:
+ case 0x0423:
+ ch -= 0x032E;
+ break;
+ case 0x0424: ch = 0xE6; break;
+ case 0x0425: ch = 0xE8; break;
+ case 0x0426: ch = 0xE3; break;
+ case 0x0427: ch = 0xFE; break;
+ case 0x0428: ch = 0xFB; break;
+ case 0x0429: ch = 0xFD; break;
+ case 0x042A: ch = 0xFF; break;
+ case 0x042B: ch = 0xF9; break;
+ case 0x042C: ch = 0xF8; break;
+ case 0x042D: ch = 0xFC; break;
+ case 0x042E: ch = 0xE0; break;
+ case 0x042F: ch = 0xF1; break;
+ case 0x0430: ch = 0xC1; break;
+ case 0x0431: ch = 0xC2; break;
+ case 0x0432: ch = 0xD7; break;
+ case 0x0433: ch = 0xC7; break;
+ case 0x0434: ch = 0xC4; break;
+ case 0x0435: ch = 0xC5; break;
+ case 0x0436: ch = 0xD6; break;
+ case 0x0437: ch = 0xDA; break;
+ case 0x0438:
+ case 0x0439:
+ case 0x043A:
+ case 0x043B:
+ case 0x043C:
+ case 0x043D:
+ case 0x043E:
+ case 0x043F:
+ ch -= 0x036F;
+ break;
+ case 0x0440:
+ case 0x0441:
+ case 0x0442:
+ case 0x0443:
+ ch -= 0x036E;
+ break;
+ case 0x0444: ch = 0xC6; break;
+ case 0x0445: ch = 0xC8; break;
+ case 0x0446: ch = 0xC3; break;
+ case 0x0447: ch = 0xDE; break;
+ case 0x0448: ch = 0xDB; break;
+ case 0x0449: ch = 0xDD; break;
+ case 0x044A: ch = 0xDF; break;
+ case 0x044B: ch = 0xD9; break;
+ case 0x044C: ch = 0xD8; break;
+ case 0x044D: ch = 0xDC; break;
+ case 0x044E: ch = 0xC0; break;
+ case 0x044F: ch = 0xD1; break;
+ case 0x0451: ch = 0xA3; break;
+ case 0x0454: ch = 0xA4; break;
+ case 0x0456: ch = 0xA6; break;
+ case 0x0457: ch = 0xA7; break;
+ case 0x0490: ch = 0xBD; break;
+ case 0x0491: ch = 0xAD; break;
+ case 0x2219: ch = 0x95; break;
+ case 0x221A: ch = 0x96; break;
+ case 0x2248: ch = 0x97; break;
+ case 0x2264: ch = 0x98; break;
+ case 0x2265: ch = 0x99; break;
+ case 0x2320: ch = 0x93; break;
+ case 0x2321: ch = 0x9B; break;
+ case 0x2500: ch = 0x80; break;
+ case 0x2502: ch = 0x81; break;
+ case 0x250C: ch = 0x82; break;
+ case 0x2510: ch = 0x83; break;
+ case 0x2514: ch = 0x84; break;
+ case 0x2518: ch = 0x85; break;
+ case 0x251C: ch = 0x86; break;
+ case 0x2524: ch = 0x87; break;
+ case 0x252C: ch = 0x88; break;
+ case 0x2534: ch = 0x89; break;
+ case 0x253C: ch = 0x8A; break;
+ case 0x2550: ch = 0xA0; break;
+ case 0x2551: ch = 0xA1; break;
+ case 0x2552: ch = 0xA2; break;
+ case 0x2554: ch = 0xA5; break;
+ case 0x2557:
+ case 0x2558:
+ case 0x2559:
+ case 0x255A:
+ case 0x255B:
+ ch -= 0x24AF;
+ break;
+ case 0x255D:
+ case 0x255E:
+ case 0x255F:
+ case 0x2560:
+ case 0x2561:
+ ch -= 0x24AF;
+ break;
+ case 0x2563: ch = 0xB5; break;
+ case 0x2566:
+ case 0x2567:
+ case 0x2568:
+ case 0x2569:
+ case 0x256A:
+ ch -= 0x24AE;
+ break;
+ case 0x256C: ch = 0xBE; break;
+ case 0x2580: ch = 0x8B; break;
+ case 0x2584: ch = 0x8C; break;
+ case 0x2588: ch = 0x8D; break;
+ case 0x258C: ch = 0x8E; break;
+ case 0x2590:
+ case 0x2591:
+ case 0x2592:
+ case 0x2593:
+ ch -= 0x2501;
+ break;
+ case 0x25A0: ch = 0x94; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 128) switch(ch)
+ {
+ case 0x00A0: ch = 0x9A; break;
+ case 0x00A9: ch = 0xBF; break;
+ case 0x00B0: ch = 0x9C; break;
+ case 0x00B2: ch = 0x9D; break;
+ case 0x00B7: ch = 0x9E; break;
+ case 0x00F7: ch = 0x9F; break;
+ case 0x0401: ch = 0xB3; break;
+ case 0x0404: ch = 0xB4; break;
+ case 0x0406: ch = 0xB6; break;
+ case 0x0407: ch = 0xB7; break;
+ case 0x0410: ch = 0xE1; break;
+ case 0x0411: ch = 0xE2; break;
+ case 0x0412: ch = 0xF7; break;
+ case 0x0413: ch = 0xE7; break;
+ case 0x0414: ch = 0xE4; break;
+ case 0x0415: ch = 0xE5; break;
+ case 0x0416: ch = 0xF6; break;
+ case 0x0417: ch = 0xFA; break;
+ case 0x0418:
+ case 0x0419:
+ case 0x041A:
+ case 0x041B:
+ case 0x041C:
+ case 0x041D:
+ case 0x041E:
+ case 0x041F:
+ ch -= 0x032F;
+ break;
+ case 0x0420:
+ case 0x0421:
+ case 0x0422:
+ case 0x0423:
+ ch -= 0x032E;
+ break;
+ case 0x0424: ch = 0xE6; break;
+ case 0x0425: ch = 0xE8; break;
+ case 0x0426: ch = 0xE3; break;
+ case 0x0427: ch = 0xFE; break;
+ case 0x0428: ch = 0xFB; break;
+ case 0x0429: ch = 0xFD; break;
+ case 0x042A: ch = 0xFF; break;
+ case 0x042B: ch = 0xF9; break;
+ case 0x042C: ch = 0xF8; break;
+ case 0x042D: ch = 0xFC; break;
+ case 0x042E: ch = 0xE0; break;
+ case 0x042F: ch = 0xF1; break;
+ case 0x0430: ch = 0xC1; break;
+ case 0x0431: ch = 0xC2; break;
+ case 0x0432: ch = 0xD7; break;
+ case 0x0433: ch = 0xC7; break;
+ case 0x0434: ch = 0xC4; break;
+ case 0x0435: ch = 0xC5; break;
+ case 0x0436: ch = 0xD6; break;
+ case 0x0437: ch = 0xDA; break;
+ case 0x0438:
+ case 0x0439:
+ case 0x043A:
+ case 0x043B:
+ case 0x043C:
+ case 0x043D:
+ case 0x043E:
+ case 0x043F:
+ ch -= 0x036F;
+ break;
+ case 0x0440:
+ case 0x0441:
+ case 0x0442:
+ case 0x0443:
+ ch -= 0x036E;
+ break;
+ case 0x0444: ch = 0xC6; break;
+ case 0x0445: ch = 0xC8; break;
+ case 0x0446: ch = 0xC3; break;
+ case 0x0447: ch = 0xDE; break;
+ case 0x0448: ch = 0xDB; break;
+ case 0x0449: ch = 0xDD; break;
+ case 0x044A: ch = 0xDF; break;
+ case 0x044B: ch = 0xD9; break;
+ case 0x044C: ch = 0xD8; break;
+ case 0x044D: ch = 0xDC; break;
+ case 0x044E: ch = 0xC0; break;
+ case 0x044F: ch = 0xD1; break;
+ case 0x0451: ch = 0xA3; break;
+ case 0x0454: ch = 0xA4; break;
+ case 0x0456: ch = 0xA6; break;
+ case 0x0457: ch = 0xA7; break;
+ case 0x0490: ch = 0xBD; break;
+ case 0x0491: ch = 0xAD; break;
+ case 0x2219: ch = 0x95; break;
+ case 0x221A: ch = 0x96; break;
+ case 0x2248: ch = 0x97; break;
+ case 0x2264: ch = 0x98; break;
+ case 0x2265: ch = 0x99; break;
+ case 0x2320: ch = 0x93; break;
+ case 0x2321: ch = 0x9B; break;
+ case 0x2500: ch = 0x80; break;
+ case 0x2502: ch = 0x81; break;
+ case 0x250C: ch = 0x82; break;
+ case 0x2510: ch = 0x83; break;
+ case 0x2514: ch = 0x84; break;
+ case 0x2518: ch = 0x85; break;
+ case 0x251C: ch = 0x86; break;
+ case 0x2524: ch = 0x87; break;
+ case 0x252C: ch = 0x88; break;
+ case 0x2534: ch = 0x89; break;
+ case 0x253C: ch = 0x8A; break;
+ case 0x2550: ch = 0xA0; break;
+ case 0x2551: ch = 0xA1; break;
+ case 0x2552: ch = 0xA2; break;
+ case 0x2554: ch = 0xA5; break;
+ case 0x2557:
+ case 0x2558:
+ case 0x2559:
+ case 0x255A:
+ case 0x255B:
+ ch -= 0x24AF;
+ break;
+ case 0x255D:
+ case 0x255E:
+ case 0x255F:
+ case 0x2560:
+ case 0x2561:
+ ch -= 0x24AF;
+ break;
+ case 0x2563: ch = 0xB5; break;
+ case 0x2566:
+ case 0x2567:
+ case 0x2568:
+ case 0x2569:
+ case 0x256A:
+ ch -= 0x24AE;
+ break;
+ case 0x256C: ch = 0xBE; break;
+ case 0x2580: ch = 0x8B; break;
+ case 0x2584: ch = 0x8C; break;
+ case 0x2588: ch = 0x8D; break;
+ case 0x258C: ch = 0x8E; break;
+ case 0x2590:
+ case 0x2591:
+ case 0x2592:
+ case 0x2593:
+ ch -= 0x2501;
+ break;
+ case 0x25A0: ch = 0x94; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP21866
+
+public class ENCkoi8_u : CP21866
+{
+ public ENCkoi8_u() : base() {}
+
+}; // class ENCkoi8_u
+
+}; // namespace I18N.Other
diff --git a/mcs/class/I18N/Other/CP28594.cs b/mcs/class/I18N/Other/CP28594.cs
new file mode 100644
index 00000000000..c8ca59fdfad
--- /dev/null
+++ b/mcs/class/I18N/Other/CP28594.cs
@@ -0,0 +1,333 @@
+/*
+ * CP28594.cs - Baltic (ISO) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-914.ucm".
+
+namespace I18N.Other
+{
+
+using System;
+using I18N.Common;
+
+public class CP28594 : ByteEncoding
+{
+ public CP28594()
+ : base(28594, ToChars, "Baltic (ISO)",
+ "iso-8859-4", "iso-8859-4", "iso-8859-4",
+ true, true, true, true, 1257)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
+ '\u0006', '\u0007', '\u0008', '\u0009', '\u000A', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
+ '\u0018', '\u0019', '\u001A', '\u001B', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
+ '\u0024', '\u0025', '\u0026', '\u0027', '\u0028', '\u0029',
+ '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
+ '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
+ '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
+ '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
+ '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
+ '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
+ '\u005A', '\u005B', '\u005C', '\u005D', '\u005E', '\u005F',
+ '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
+ '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
+ '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
+ '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
+ '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
+ '\u007E', '\u007F', '\u0080', '\u0081', '\u0082', '\u0083',
+ '\u0084', '\u0085', '\u0086', '\u0087', '\u0088', '\u0089',
+ '\u008A', '\u008B', '\u008C', '\u008D', '\u008E', '\u008F',
+ '\u0090', '\u0091', '\u0092', '\u0093', '\u0094', '\u0095',
+ '\u0096', '\u0097', '\u0098', '\u0099', '\u009A', '\u009B',
+ '\u009C', '\u009D', '\u009E', '\u009F', '\u00A0', '\u0104',
+ '\u0138', '\u0156', '\u00A4', '\u0128', '\u013B', '\u00A7',
+ '\u00A8', '\u0160', '\u0112', '\u0122', '\u0166', '\u00AD',
+ '\u017D', '\u00AF', '\u00B0', '\u0105', '\u02DB', '\u0157',
+ '\u00B4', '\u0129', '\u013C', '\u02C7', '\u00B8', '\u0161',
+ '\u0113', '\u0123', '\u0167', '\u014A', '\u017E', '\u014B',
+ '\u0100', '\u00C1', '\u00C2', '\u00C3', '\u00C4', '\u00C5',
+ '\u00C6', '\u012E', '\u010C', '\u00C9', '\u0118', '\u00CB',
+ '\u0116', '\u00CD', '\u00CE', '\u012A', '\u0110', '\u0145',
+ '\u014C', '\u0136', '\u00D4', '\u00D5', '\u00D6', '\u00D7',
+ '\u00D8', '\u0172', '\u00DA', '\u00DB', '\u00DC', '\u0168',
+ '\u016A', '\u00DF', '\u0101', '\u00E1', '\u00E2', '\u00E3',
+ '\u00E4', '\u00E5', '\u00E6', '\u012F', '\u010D', '\u00E9',
+ '\u0119', '\u00EB', '\u0117', '\u00ED', '\u00EE', '\u012B',
+ '\u0111', '\u0146', '\u014D', '\u0137', '\u00F4', '\u00F5',
+ '\u00F6', '\u00F7', '\u00F8', '\u0173', '\u00FA', '\u00FB',
+ '\u00FC', '\u0169', '\u016B', '\u02D9',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 161) switch(ch)
+ {
+ case 0x00A4:
+ case 0x00A7:
+ case 0x00A8:
+ case 0x00AD:
+ case 0x00AF:
+ case 0x00B0:
+ case 0x00B4:
+ case 0x00B8:
+ case 0x00C1:
+ case 0x00C2:
+ case 0x00C3:
+ case 0x00C4:
+ case 0x00C5:
+ case 0x00C6:
+ case 0x00C9:
+ case 0x00CB:
+ case 0x00CD:
+ case 0x00CE:
+ case 0x00D4:
+ case 0x00D5:
+ case 0x00D6:
+ case 0x00D7:
+ case 0x00D8:
+ case 0x00DA:
+ case 0x00DB:
+ case 0x00DC:
+ case 0x00DF:
+ case 0x00E1:
+ case 0x00E2:
+ case 0x00E3:
+ case 0x00E4:
+ case 0x00E5:
+ case 0x00E6:
+ case 0x00E9:
+ case 0x00EB:
+ case 0x00ED:
+ case 0x00EE:
+ case 0x00F4:
+ case 0x00F5:
+ case 0x00F6:
+ case 0x00F7:
+ case 0x00F8:
+ case 0x00FA:
+ case 0x00FB:
+ case 0x00FC:
+ break;
+ case 0x0100: ch = 0xC0; break;
+ case 0x0101: ch = 0xE0; break;
+ case 0x0104: ch = 0xA1; break;
+ case 0x0105: ch = 0xB1; break;
+ case 0x010C: ch = 0xC8; break;
+ case 0x010D: ch = 0xE8; break;
+ case 0x0110: ch = 0xD0; break;
+ case 0x0111: ch = 0xF0; break;
+ case 0x0112: ch = 0xAA; break;
+ case 0x0113: ch = 0xBA; break;
+ case 0x0116: ch = 0xCC; break;
+ case 0x0117: ch = 0xEC; break;
+ case 0x0118: ch = 0xCA; break;
+ case 0x0119: ch = 0xEA; break;
+ case 0x0122: ch = 0xAB; break;
+ case 0x0123: ch = 0xBB; break;
+ case 0x0128: ch = 0xA5; break;
+ case 0x0129: ch = 0xB5; break;
+ case 0x012A: ch = 0xCF; break;
+ case 0x012B: ch = 0xEF; break;
+ case 0x012E: ch = 0xC7; break;
+ case 0x012F: ch = 0xE7; break;
+ case 0x0136: ch = 0xD3; break;
+ case 0x0137: ch = 0xF3; break;
+ case 0x0138: ch = 0xA2; break;
+ case 0x013B: ch = 0xA6; break;
+ case 0x013C: ch = 0xB6; break;
+ case 0x0145: ch = 0xD1; break;
+ case 0x0146: ch = 0xF1; break;
+ case 0x014A: ch = 0xBD; break;
+ case 0x014B: ch = 0xBF; break;
+ case 0x014C: ch = 0xD2; break;
+ case 0x014D: ch = 0xF2; break;
+ case 0x0156: ch = 0xA3; break;
+ case 0x0157: ch = 0xB3; break;
+ case 0x0160: ch = 0xA9; break;
+ case 0x0161: ch = 0xB9; break;
+ case 0x0166: ch = 0xAC; break;
+ case 0x0167: ch = 0xBC; break;
+ case 0x0168: ch = 0xDD; break;
+ case 0x0169: ch = 0xFD; break;
+ case 0x016A: ch = 0xDE; break;
+ case 0x016B: ch = 0xFE; break;
+ case 0x0172: ch = 0xD9; break;
+ case 0x0173: ch = 0xF9; break;
+ case 0x017D: ch = 0xAE; break;
+ case 0x017E: ch = 0xBE; break;
+ case 0x02C7: ch = 0xB7; break;
+ case 0x02D9: ch = 0xFF; break;
+ case 0x02DB: ch = 0xB2; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 161) switch(ch)
+ {
+ case 0x00A4:
+ case 0x00A7:
+ case 0x00A8:
+ case 0x00AD:
+ case 0x00AF:
+ case 0x00B0:
+ case 0x00B4:
+ case 0x00B8:
+ case 0x00C1:
+ case 0x00C2:
+ case 0x00C3:
+ case 0x00C4:
+ case 0x00C5:
+ case 0x00C6:
+ case 0x00C9:
+ case 0x00CB:
+ case 0x00CD:
+ case 0x00CE:
+ case 0x00D4:
+ case 0x00D5:
+ case 0x00D6:
+ case 0x00D7:
+ case 0x00D8:
+ case 0x00DA:
+ case 0x00DB:
+ case 0x00DC:
+ case 0x00DF:
+ case 0x00E1:
+ case 0x00E2:
+ case 0x00E3:
+ case 0x00E4:
+ case 0x00E5:
+ case 0x00E6:
+ case 0x00E9:
+ case 0x00EB:
+ case 0x00ED:
+ case 0x00EE:
+ case 0x00F4:
+ case 0x00F5:
+ case 0x00F6:
+ case 0x00F7:
+ case 0x00F8:
+ case 0x00FA:
+ case 0x00FB:
+ case 0x00FC:
+ break;
+ case 0x0100: ch = 0xC0; break;
+ case 0x0101: ch = 0xE0; break;
+ case 0x0104: ch = 0xA1; break;
+ case 0x0105: ch = 0xB1; break;
+ case 0x010C: ch = 0xC8; break;
+ case 0x010D: ch = 0xE8; break;
+ case 0x0110: ch = 0xD0; break;
+ case 0x0111: ch = 0xF0; break;
+ case 0x0112: ch = 0xAA; break;
+ case 0x0113: ch = 0xBA; break;
+ case 0x0116: ch = 0xCC; break;
+ case 0x0117: ch = 0xEC; break;
+ case 0x0118: ch = 0xCA; break;
+ case 0x0119: ch = 0xEA; break;
+ case 0x0122: ch = 0xAB; break;
+ case 0x0123: ch = 0xBB; break;
+ case 0x0128: ch = 0xA5; break;
+ case 0x0129: ch = 0xB5; break;
+ case 0x012A: ch = 0xCF; break;
+ case 0x012B: ch = 0xEF; break;
+ case 0x012E: ch = 0xC7; break;
+ case 0x012F: ch = 0xE7; break;
+ case 0x0136: ch = 0xD3; break;
+ case 0x0137: ch = 0xF3; break;
+ case 0x0138: ch = 0xA2; break;
+ case 0x013B: ch = 0xA6; break;
+ case 0x013C: ch = 0xB6; break;
+ case 0x0145: ch = 0xD1; break;
+ case 0x0146: ch = 0xF1; break;
+ case 0x014A: ch = 0xBD; break;
+ case 0x014B: ch = 0xBF; break;
+ case 0x014C: ch = 0xD2; break;
+ case 0x014D: ch = 0xF2; break;
+ case 0x0156: ch = 0xA3; break;
+ case 0x0157: ch = 0xB3; break;
+ case 0x0160: ch = 0xA9; break;
+ case 0x0161: ch = 0xB9; break;
+ case 0x0166: ch = 0xAC; break;
+ case 0x0167: ch = 0xBC; break;
+ case 0x0168: ch = 0xDD; break;
+ case 0x0169: ch = 0xFD; break;
+ case 0x016A: ch = 0xDE; break;
+ case 0x016B: ch = 0xFE; break;
+ case 0x0172: ch = 0xD9; break;
+ case 0x0173: ch = 0xF9; break;
+ case 0x017D: ch = 0xAE; break;
+ case 0x017E: ch = 0xBE; break;
+ case 0x02C7: ch = 0xB7; break;
+ case 0x02D9: ch = 0xFF; break;
+ case 0x02DB: ch = 0xB2; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP28594
+
+public class ENCiso_8859_4 : CP28594
+{
+ public ENCiso_8859_4() : base() {}
+
+}; // class ENCiso_8859_4
+
+}; // namespace I18N.Other
diff --git a/mcs/class/I18N/Other/CP28595.cs b/mcs/class/I18N/Other/CP28595.cs
new file mode 100644
index 00000000000..6c8abbc37a7
--- /dev/null
+++ b/mcs/class/I18N/Other/CP28595.cs
@@ -0,0 +1,345 @@
+/*
+ * CP28595.cs - Cyrillic (ISO) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-915.ucm".
+
+namespace I18N.Other
+{
+
+using System;
+using I18N.Common;
+
+public class CP28595 : ByteEncoding
+{
+ public CP28595()
+ : base(28595, ToChars, "Cyrillic (ISO)",
+ "iso-8859-5", "iso-8859-5", "iso-8859-5",
+ true, true, true, true, 1251)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
+ '\u0006', '\u0007', '\u0008', '\u0009', '\u000A', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
+ '\u0018', '\u0019', '\u001A', '\u001B', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
+ '\u0024', '\u0025', '\u0026', '\u0027', '\u0028', '\u0029',
+ '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
+ '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
+ '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
+ '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
+ '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
+ '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
+ '\u005A', '\u005B', '\u005C', '\u005D', '\u005E', '\u005F',
+ '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
+ '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
+ '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
+ '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
+ '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
+ '\u007E', '\u007F', '\u0080', '\u0081', '\u0082', '\u0083',
+ '\u0084', '\u0085', '\u0086', '\u0087', '\u0088', '\u0089',
+ '\u008A', '\u008B', '\u008C', '\u008D', '\u008E', '\u008F',
+ '\u0090', '\u0091', '\u0092', '\u0093', '\u0094', '\u0095',
+ '\u0096', '\u0097', '\u0098', '\u0099', '\u009A', '\u009B',
+ '\u009C', '\u009D', '\u009E', '\u009F', '\u00A0', '\u0401',
+ '\u0402', '\u0403', '\u0404', '\u0405', '\u0406', '\u0407',
+ '\u0408', '\u0409', '\u040A', '\u040B', '\u040C', '\u00AD',
+ '\u040E', '\u040F', '\u0410', '\u0411', '\u0412', '\u0413',
+ '\u0414', '\u0415', '\u0416', '\u0417', '\u0418', '\u0419',
+ '\u041A', '\u041B', '\u041C', '\u041D', '\u041E', '\u041F',
+ '\u0420', '\u0421', '\u0422', '\u0423', '\u0424', '\u0425',
+ '\u0426', '\u0427', '\u0428', '\u0429', '\u042A', '\u042B',
+ '\u042C', '\u042D', '\u042E', '\u042F', '\u0430', '\u0431',
+ '\u0432', '\u0433', '\u0434', '\u0435', '\u0436', '\u0437',
+ '\u0438', '\u0439', '\u043A', '\u043B', '\u043C', '\u043D',
+ '\u043E', '\u043F', '\u0440', '\u0441', '\u0442', '\u0443',
+ '\u0444', '\u0445', '\u0446', '\u0447', '\u0448', '\u0449',
+ '\u044A', '\u044B', '\u044C', '\u044D', '\u044E', '\u044F',
+ '\u2116', '\u0451', '\u0452', '\u0453', '\u0454', '\u0455',
+ '\u0456', '\u0457', '\u0458', '\u0459', '\u045A', '\u045B',
+ '\u045C', '\u00A7', '\u045E', '\u045F',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 161) switch(ch)
+ {
+ case 0x00AD:
+ break;
+ case 0x00A7: ch = 0xFD; break;
+ case 0x0401:
+ case 0x0402:
+ case 0x0403:
+ case 0x0404:
+ case 0x0405:
+ case 0x0406:
+ case 0x0407:
+ case 0x0408:
+ case 0x0409:
+ case 0x040A:
+ case 0x040B:
+ case 0x040C:
+ ch -= 0x0360;
+ break;
+ case 0x040E:
+ case 0x040F:
+ case 0x0410:
+ case 0x0411:
+ case 0x0412:
+ case 0x0413:
+ case 0x0414:
+ case 0x0415:
+ case 0x0416:
+ case 0x0417:
+ case 0x0418:
+ case 0x0419:
+ case 0x041A:
+ case 0x041B:
+ case 0x041C:
+ case 0x041D:
+ case 0x041E:
+ case 0x041F:
+ case 0x0420:
+ case 0x0421:
+ case 0x0422:
+ case 0x0423:
+ case 0x0424:
+ case 0x0425:
+ case 0x0426:
+ case 0x0427:
+ case 0x0428:
+ case 0x0429:
+ case 0x042A:
+ case 0x042B:
+ case 0x042C:
+ case 0x042D:
+ case 0x042E:
+ case 0x042F:
+ case 0x0430:
+ case 0x0431:
+ case 0x0432:
+ case 0x0433:
+ case 0x0434:
+ case 0x0435:
+ case 0x0436:
+ case 0x0437:
+ case 0x0438:
+ case 0x0439:
+ case 0x043A:
+ case 0x043B:
+ case 0x043C:
+ case 0x043D:
+ case 0x043E:
+ case 0x043F:
+ case 0x0440:
+ case 0x0441:
+ case 0x0442:
+ case 0x0443:
+ case 0x0444:
+ case 0x0445:
+ case 0x0446:
+ case 0x0447:
+ case 0x0448:
+ case 0x0449:
+ case 0x044A:
+ case 0x044B:
+ case 0x044C:
+ case 0x044D:
+ case 0x044E:
+ case 0x044F:
+ ch -= 0x0360;
+ break;
+ case 0x0451:
+ case 0x0452:
+ case 0x0453:
+ case 0x0454:
+ case 0x0455:
+ case 0x0456:
+ case 0x0457:
+ case 0x0458:
+ case 0x0459:
+ case 0x045A:
+ case 0x045B:
+ case 0x045C:
+ ch -= 0x0360;
+ break;
+ case 0x045E: ch = 0xFE; break;
+ case 0x045F: ch = 0xFF; break;
+ case 0x2116: ch = 0xF0; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 161) switch(ch)
+ {
+ case 0x00AD:
+ break;
+ case 0x00A7: ch = 0xFD; break;
+ case 0x0401:
+ case 0x0402:
+ case 0x0403:
+ case 0x0404:
+ case 0x0405:
+ case 0x0406:
+ case 0x0407:
+ case 0x0408:
+ case 0x0409:
+ case 0x040A:
+ case 0x040B:
+ case 0x040C:
+ ch -= 0x0360;
+ break;
+ case 0x040E:
+ case 0x040F:
+ case 0x0410:
+ case 0x0411:
+ case 0x0412:
+ case 0x0413:
+ case 0x0414:
+ case 0x0415:
+ case 0x0416:
+ case 0x0417:
+ case 0x0418:
+ case 0x0419:
+ case 0x041A:
+ case 0x041B:
+ case 0x041C:
+ case 0x041D:
+ case 0x041E:
+ case 0x041F:
+ case 0x0420:
+ case 0x0421:
+ case 0x0422:
+ case 0x0423:
+ case 0x0424:
+ case 0x0425:
+ case 0x0426:
+ case 0x0427:
+ case 0x0428:
+ case 0x0429:
+ case 0x042A:
+ case 0x042B:
+ case 0x042C:
+ case 0x042D:
+ case 0x042E:
+ case 0x042F:
+ case 0x0430:
+ case 0x0431:
+ case 0x0432:
+ case 0x0433:
+ case 0x0434:
+ case 0x0435:
+ case 0x0436:
+ case 0x0437:
+ case 0x0438:
+ case 0x0439:
+ case 0x043A:
+ case 0x043B:
+ case 0x043C:
+ case 0x043D:
+ case 0x043E:
+ case 0x043F:
+ case 0x0440:
+ case 0x0441:
+ case 0x0442:
+ case 0x0443:
+ case 0x0444:
+ case 0x0445:
+ case 0x0446:
+ case 0x0447:
+ case 0x0448:
+ case 0x0449:
+ case 0x044A:
+ case 0x044B:
+ case 0x044C:
+ case 0x044D:
+ case 0x044E:
+ case 0x044F:
+ ch -= 0x0360;
+ break;
+ case 0x0451:
+ case 0x0452:
+ case 0x0453:
+ case 0x0454:
+ case 0x0455:
+ case 0x0456:
+ case 0x0457:
+ case 0x0458:
+ case 0x0459:
+ case 0x045A:
+ case 0x045B:
+ case 0x045C:
+ ch -= 0x0360;
+ break;
+ case 0x045E: ch = 0xFE; break;
+ case 0x045F: ch = 0xFF; break;
+ case 0x2116: ch = 0xF0; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP28595
+
+public class ENCiso_8859_5 : CP28595
+{
+ public ENCiso_8859_5() : base() {}
+
+}; // class ENCiso_8859_5
+
+}; // namespace I18N.Other
diff --git a/mcs/class/I18N/Other/CP57002.cs b/mcs/class/I18N/Other/CP57002.cs
new file mode 100644
index 00000000000..740f392b5c8
--- /dev/null
+++ b/mcs/class/I18N/Other/CP57002.cs
@@ -0,0 +1,496 @@
+/*
+ * CP57002.cs - ISCII code pages 57002-57011.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+namespace I18N.Other
+{
+
+using System;
+using System.Text;
+using I18N.Common;
+
+// This class provides an abstract base for the ISCII encodings,
+// which all have a similar pattern. Code points 0x00-0x7F are
+// the standard ASCII character set, and code points 0x80-0xFF
+// are a shifted version of the Unicode character set, starting
+// at a fixed offset.
+
+public abstract class ISCIIEncoding : Encoding
+{
+ // Internal state.
+ protected int shift;
+ protected String encodingName;
+ protected String webName;
+
+ // Constructor.
+ protected ISCIIEncoding(int codePage, int shift,
+ String encodingName, String webName)
+ : base(codePage)
+ {
+ this.shift = shift;
+ this.encodingName = encodingName;
+ this.webName = webName;
+ }
+
+ // Get the number of bytes needed to encode a character buffer.
+ public override int GetByteCount(char[] chars, int index, int count)
+ {
+ if(chars == null)
+ {
+ throw new ArgumentNullException("chars");
+ }
+ if(index < 0 || index > chars.Length)
+ {
+ throw new ArgumentOutOfRangeException
+ ("index", Strings.GetString("ArgRange_Array"));
+ }
+ if(count < 0 || count > (chars.Length - index))
+ {
+ throw new ArgumentOutOfRangeException
+ ("count", Strings.GetString("ArgRange_Array"));
+ }
+ return count;
+ }
+
+ // Convenience wrappers for "GetByteCount".
+ public override int GetByteCount(String s)
+ {
+ if(s == null)
+ {
+ throw new ArgumentNullException("s");
+ }
+ return s.Length;
+ }
+
+ // Get the bytes that result from encoding a character buffer.
+ public override int GetBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ if(chars == null)
+ {
+ throw new ArgumentNullException("chars");
+ }
+ if(bytes == null)
+ {
+ throw new ArgumentNullException("bytes");
+ }
+ if(charIndex < 0 || charIndex > chars.Length)
+ {
+ throw new ArgumentOutOfRangeException
+ ("charIndex", Strings.GetString("ArgRange_Array"));
+ }
+ if(charCount < 0 || charCount > (chars.Length - charIndex))
+ {
+ throw new ArgumentOutOfRangeException
+ ("charCount", Strings.GetString("ArgRange_Array"));
+ }
+ if(byteIndex < 0 || byteIndex > bytes.Length)
+ {
+ throw new ArgumentOutOfRangeException
+ ("byteIndex", Strings.GetString("ArgRange_Array"));
+ }
+ if((bytes.Length - byteIndex) < charCount)
+ {
+ throw new ArgumentException
+ (Strings.GetString("Arg_InsufficientSpace"), "bytes");
+ }
+
+ // Convert the characters into bytes.
+ char ch;
+ int posn = byteIndex;
+ char first = (char)shift;
+ char last = (char)(shift + 0x7F);
+ while(charCount-- > 0)
+ {
+ ch = chars[charIndex++];
+ if(ch < (char)0x0080)
+ {
+ // Regular ASCII subset.
+ bytes[posn++] = (byte)ch;
+ }
+ else if(ch >= first && ch <= last)
+ {
+ // ISCII range that we need to shift.
+ bytes[posn++] = (byte)(ch - first + 0x80);
+ }
+ else if(ch >= '\uFF01' && ch <= '\uFF5E')
+ {
+ // ASCII full-width characters.
+ bytes[posn++] = (byte)(ch - 0xFEE0);
+ }
+ else
+ {
+ bytes[posn++] = (byte)'?';
+ }
+ }
+
+ // Return the final length of the output.
+ return posn - byteIndex;
+ }
+
+ // Convenience wrappers for "GetBytes".
+ public override int GetBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ // Validate the parameters.
+ if(s == null)
+ {
+ throw new ArgumentNullException("s");
+ }
+ if(bytes == null)
+ {
+ throw new ArgumentNullException("bytes");
+ }
+ if(charIndex < 0 || charIndex > s.Length)
+ {
+ throw new ArgumentOutOfRangeException
+ ("charIndex",
+ Strings.GetString("ArgRange_StringIndex"));
+ }
+ if(charCount < 0 || charCount > (s.Length - charIndex))
+ {
+ throw new ArgumentOutOfRangeException
+ ("charCount",
+ Strings.GetString("ArgRange_StringRange"));
+ }
+ if(byteIndex < 0 || byteIndex > bytes.Length)
+ {
+ throw new ArgumentOutOfRangeException
+ ("byteIndex",
+ Strings.GetString("ArgRange_Array"));
+ }
+ if((bytes.Length - byteIndex) < charCount)
+ {
+ throw new ArgumentException
+ (Strings.GetString("Arg_InsufficientSpace"), "bytes");
+ }
+
+ // Convert the characters into bytes.
+ char ch;
+ int posn = byteIndex;
+ char first = (char)shift;
+ char last = (char)(shift + 0x7F);
+ while(charCount-- > 0)
+ {
+ ch = s[charIndex++];
+ if(ch < (char)0x0080)
+ {
+ // Regular ASCII subset.
+ bytes[posn++] = (byte)ch;
+ }
+ else if(ch >= first && ch <= last)
+ {
+ // ISCII range that we need to shift.
+ bytes[posn++] = (byte)(ch - first + 0x80);
+ }
+ else if(ch >= '\uFF01' && ch <= '\uFF5E')
+ {
+ // ASCII full-width characters.
+ bytes[posn++] = (byte)(ch - 0xFEE0);
+ }
+ else
+ {
+ bytes[posn++] = (byte)'?';
+ }
+ }
+
+ // Return the final length of the output.
+ return posn - byteIndex;
+ }
+
+ // Get the number of characters needed to decode a byte buffer.
+ public override int GetCharCount(byte[] bytes, int index, int count)
+ {
+ if(bytes == null)
+ {
+ throw new ArgumentNullException("bytes");
+ }
+ if(index < 0 || index > bytes.Length)
+ {
+ throw new ArgumentOutOfRangeException
+ ("index", Strings.GetString("ArgRange_Array"));
+ }
+ if(count < 0 || count > (bytes.Length - index))
+ {
+ throw new ArgumentOutOfRangeException
+ ("count", Strings.GetString("ArgRange_Array"));
+ }
+ return count;
+ }
+
+ // Get the characters that result from decoding a byte buffer.
+ public override int GetChars(byte[] bytes, int byteIndex, int byteCount,
+ char[] chars, int charIndex)
+ {
+ // Validate the parameters.
+ if(bytes == null)
+ {
+ throw new ArgumentNullException("bytes");
+ }
+ if(chars == null)
+ {
+ throw new ArgumentNullException("chars");
+ }
+ if(byteIndex < 0 || byteIndex > bytes.Length)
+ {
+ throw new ArgumentOutOfRangeException
+ ("byteIndex", Strings.GetString("ArgRange_Array"));
+ }
+ if(byteCount < 0 || byteCount > (bytes.Length - byteIndex))
+ {
+ throw new ArgumentOutOfRangeException
+ ("byteCount", Strings.GetString("ArgRange_Array"));
+ }
+ if(charIndex < 0 || charIndex > chars.Length)
+ {
+ throw new ArgumentOutOfRangeException
+ ("charIndex", Strings.GetString("ArgRange_Array"));
+ }
+ if((chars.Length - charIndex) < byteCount)
+ {
+ throw new ArgumentException
+ (Strings.GetString("Arg_InsufficientSpace"), "chars");
+ }
+
+ // Convert the bytes into characters.
+ int count = byteCount;
+ int byteval;
+ int shift = this.shift - 0x80;
+ while(count-- > 0)
+ {
+ byteval = (int)(bytes[byteIndex++]);
+ if(byteval < 0x80)
+ {
+ // Ordinary ASCII character.
+ chars[charIndex++] = (char)byteval;
+ }
+ else
+ {
+ // Shift the ISCII character into the Unicode page.
+ chars[charIndex++] = (char)(byteval + shift);
+ }
+ }
+ return byteCount;
+ }
+
+ // Get the maximum number of bytes needed to encode a
+ // specified number of characters.
+ public override int GetMaxByteCount(int charCount)
+ {
+ if(charCount < 0)
+ {
+ throw new ArgumentOutOfRangeException
+ ("charCount",
+ Strings.GetString("ArgRange_NonNegative"));
+ }
+ return charCount;
+ }
+
+ // Get the maximum number of characters needed to decode a
+ // specified number of bytes.
+ public override int GetMaxCharCount(int byteCount)
+ {
+ if(byteCount < 0)
+ {
+ throw new ArgumentOutOfRangeException
+ ("byteCount",
+ Strings.GetString("ArgRange_NonNegative"));
+ }
+ return byteCount;
+ }
+
+#if !ECMA_COMPAT
+
+ // Get the mail body name for this encoding.
+ public override String BodyName
+ {
+ get
+ {
+ return webName;
+ }
+ }
+
+ // Get the human-readable name for this encoding.
+ public override String EncodingName
+ {
+ get
+ {
+ return encodingName;
+ }
+ }
+
+ // Get the mail agent header name for this encoding.
+ public override String HeaderName
+ {
+ get
+ {
+ return webName;
+ }
+ }
+
+ // Get the IANA-preferred Web name for this encoding.
+ public override String WebName
+ {
+ get
+ {
+ return webName;
+ }
+ }
+
+#endif // !ECMA_COMPAT
+
+}; // class ISCIIEncoding
+
+// Define the ISCII code pages as subclasses of "ISCIIEncoding".
+
+public class CP57002 : ISCIIEncoding
+{
+ public CP57002() : base(57002, 0x0900, "ISCII Devanagari", "x-iscii-de") {}
+
+}; // class CP57002
+
+public class CP57003 : ISCIIEncoding
+{
+ public CP57003() : base(57003, 0x0980, "ISCII Bengali", "x-iscii-be") {}
+
+}; // class CP57003
+
+public class CP57004 : ISCIIEncoding
+{
+ public CP57004() : base(57004, 0x0B80, "ISCII Tamil", "x-iscii-ta") {}
+
+}; // class CP57004
+
+public class CP57005 : ISCIIEncoding
+{
+ public CP57005() : base(57005, 0x0B80, "ISCII Telugu", "x-iscii-te") {}
+
+}; // class CP57005
+
+public class CP57006 : ISCIIEncoding
+{
+ // Note: Unicode has a "Sinhala" page, but no "Assamese" page.
+ // Until I hear otherwise, I will assume that they are the same
+ // thing with different names - Rhys Weatherley, 16 April 2002.
+ public CP57006() : base(57006, 0x0D80, "ISCII Assamese", "x-iscii-as") {}
+
+}; // class CP57006
+
+public class CP57007 : ISCIIEncoding
+{
+ public CP57007() : base(57007, 0x0B00, "ISCII Oriya", "x-iscii-or") {}
+
+}; // class CP57007
+
+public class CP57008 : ISCIIEncoding
+{
+ public CP57008() : base(57008, 0x0C80, "ISCII Kannada", "x-iscii-ka") {}
+
+}; // class CP57008
+
+public class CP57009 : ISCIIEncoding
+{
+ public CP57009() : base(57009, 0x0D00, "ISCII Malayalam", "x-iscii-ma") {}
+
+}; // class CP57009
+
+public class CP57010 : ISCIIEncoding
+{
+ public CP57010() : base(57010, 0x0A80, "ISCII Gujarati", "x-iscii-gu") {}
+
+}; // class CP57010
+
+public class CP57011 : ISCIIEncoding
+{
+ // Note: Unicode has a "Gurmukhi" page, but no "Punjabi" page.
+ // Other ISCII-related information on the Internet seems to
+ // indicate that they are the same. Until I hear otherwise,
+ // I will assume that they are the same thing with different
+ // names - Rhys Weatherley, 16 April 2002.
+ public CP57011() : base(57011, 0x0A00, "ISCII Punjabi", "x-iscii-pa") {}
+
+}; // class CP57011
+
+// Define the web encoding name aliases for the above code pages.
+
+public class ENCx_iscii_de : CP57002
+{
+ public ENCx_iscii_de() : base() {}
+
+}; // class ENCx_iscii_de
+
+public class ENCx_iscii_be : CP57003
+{
+ public ENCx_iscii_be() : base() {}
+
+}; // class ENCx_iscii_be
+
+public class ENCx_iscii_ta : CP57004
+{
+ public ENCx_iscii_ta() : base() {}
+
+}; // class ENCx_iscii_ta
+
+public class ENCx_iscii_te : CP57005
+{
+ public ENCx_iscii_te() : base() {}
+
+}; // class ENCx_iscii_te
+
+public class ENCx_iscii_as : CP57006
+{
+ public ENCx_iscii_as() : base() {}
+
+}; // class ENCx_iscii_as
+
+public class ENCx_iscii_or : CP57007
+{
+ public ENCx_iscii_or() : base() {}
+
+}; // class ENCx_iscii_or
+
+public class ENCx_iscii_ka : CP57008
+{
+ public ENCx_iscii_ka() : base() {}
+
+}; // class ENCx_iscii_ka
+
+public class ENCx_iscii_ma : CP57009
+{
+ public ENCx_iscii_ma() : base() {}
+
+}; // class ENCx_iscii_ma
+
+public class ENCx_iscii_gu : CP57010
+{
+ public ENCx_iscii_gu() : base() {}
+
+}; // class ENCx_iscii_gu
+
+public class ENCx_iscii_pa : CP57011
+{
+ public ENCx_iscii_pa() : base() {}
+
+}; // class ENCx_iscii_pa
+
+}; // namespace I18N.Other
diff --git a/mcs/class/I18N/Other/CP874.cs b/mcs/class/I18N/Other/CP874.cs
new file mode 100644
index 00000000000..97b41aa29d8
--- /dev/null
+++ b/mcs/class/I18N/Other/CP874.cs
@@ -0,0 +1,537 @@
+/*
+ * CP874.cs - Thai (Windows) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-874.ucm".
+
+namespace I18N.Other
+{
+
+using System;
+using I18N.Common;
+
+public class CP874 : ByteEncoding
+{
+ public CP874()
+ : base(874, ToChars, "Thai (Windows)",
+ "windows-874", "windows-874", "windows-874",
+ true, true, true, true, 874)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
+ '\u0006', '\u0007', '\u0008', '\u0009', '\u000A', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
+ '\u0018', '\u0019', '\u001C', '\u001B', '\u007F', '\u001D',
+ '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
+ '\u0024', '\u0025', '\u0026', '\u0027', '\u0028', '\u0029',
+ '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
+ '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
+ '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
+ '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
+ '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
+ '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
+ '\u005A', '\u005B', '\u005C', '\u005D', '\u005E', '\u005F',
+ '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
+ '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
+ '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
+ '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
+ '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
+ '\u007E', '\u001A', '\u003F', '\u003F', '\u003F', '\u003F',
+ '\u003F', '\u003F', '\u003F', '\u003F', '\u003F', '\u003F',
+ '\u003F', '\u003F', '\u003F', '\u003F', '\u003F', '\u003F',
+ '\u003F', '\u003F', '\u003F', '\u003F', '\u003F', '\u003F',
+ '\u003F', '\u003F', '\u003F', '\u003F', '\u003F', '\u003F',
+ '\u003F', '\u003F', '\u003F', '\u003F', '\u0E48', '\u0E01',
+ '\u0E02', '\u0E03', '\u0E04', '\u0E05', '\u0E06', '\u0E07',
+ '\u0E08', '\u0E09', '\u0E0A', '\u0E0B', '\u0E0C', '\u0E0D',
+ '\u0E0E', '\u0E0F', '\u0E10', '\u0E11', '\u0E12', '\u0E13',
+ '\u0E14', '\u0E15', '\u0E16', '\u0E17', '\u0E18', '\u0E19',
+ '\u0E1A', '\u0E1B', '\u0E1C', '\u0E1D', '\u0E1E', '\u0E1F',
+ '\u0E20', '\u0E21', '\u0E22', '\u0E23', '\u0E24', '\u0E25',
+ '\u0E26', '\u0E27', '\u0E28', '\u0E29', '\u0E2A', '\u0E2B',
+ '\u0E2C', '\u0E2D', '\u0E2E', '\u0E2F', '\u0E30', '\u0E31',
+ '\u0E32', '\u0E33', '\u0E34', '\u0E35', '\u0E36', '\u0E37',
+ '\u0E38', '\u0E39', '\u0E3A', '\u0E49', '\u0E4A', '\u0E4B',
+ '\u0E4C', '\u0E3F', '\u0E40', '\u0E41', '\u0E42', '\u0E43',
+ '\u0E44', '\u0E45', '\u0E46', '\u0E47', '\u0E48', '\u0E49',
+ '\u0E4A', '\u0E4B', '\u0E4C', '\u0E4D', '\u0E4E', '\u0E4F',
+ '\u0E50', '\u0E51', '\u0E52', '\u0E53', '\u0E54', '\u0E55',
+ '\u0E56', '\u0E57', '\u0E58', '\u0E59', '\u0E5A', '\u0E5B',
+ '\u00A2', '\u00AC', '\u00A6', '\u00A0',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 26) switch(ch)
+ {
+ case 0x001B:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x0020:
+ case 0x0021:
+ case 0x0022:
+ case 0x0023:
+ case 0x0024:
+ case 0x0025:
+ case 0x0026:
+ case 0x0027:
+ case 0x0028:
+ case 0x0029:
+ case 0x002A:
+ case 0x002B:
+ case 0x002C:
+ case 0x002D:
+ case 0x002E:
+ case 0x002F:
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ case 0x003A:
+ case 0x003B:
+ case 0x003C:
+ case 0x003D:
+ case 0x003E:
+ case 0x003F:
+ case 0x0040:
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ case 0x005B:
+ case 0x005C:
+ case 0x005D:
+ case 0x005E:
+ case 0x005F:
+ case 0x0060:
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ case 0x007B:
+ case 0x007C:
+ case 0x007D:
+ case 0x007E:
+ break;
+ case 0x001A: ch = 0x7F; break;
+ case 0x001C: ch = 0x1A; break;
+ case 0x007F: ch = 0x1C; break;
+ case 0x00A0: ch = 0xFF; break;
+ case 0x00A2: ch = 0xFC; break;
+ case 0x00A6: ch = 0xFE; break;
+ case 0x00AC: ch = 0xFD; break;
+ case 0x0E01:
+ case 0x0E02:
+ case 0x0E03:
+ case 0x0E04:
+ case 0x0E05:
+ case 0x0E06:
+ case 0x0E07:
+ case 0x0E08:
+ case 0x0E09:
+ case 0x0E0A:
+ case 0x0E0B:
+ case 0x0E0C:
+ case 0x0E0D:
+ case 0x0E0E:
+ case 0x0E0F:
+ case 0x0E10:
+ case 0x0E11:
+ case 0x0E12:
+ case 0x0E13:
+ case 0x0E14:
+ case 0x0E15:
+ case 0x0E16:
+ case 0x0E17:
+ case 0x0E18:
+ case 0x0E19:
+ case 0x0E1A:
+ case 0x0E1B:
+ case 0x0E1C:
+ case 0x0E1D:
+ case 0x0E1E:
+ case 0x0E1F:
+ case 0x0E20:
+ case 0x0E21:
+ case 0x0E22:
+ case 0x0E23:
+ case 0x0E24:
+ case 0x0E25:
+ case 0x0E26:
+ case 0x0E27:
+ case 0x0E28:
+ case 0x0E29:
+ case 0x0E2A:
+ case 0x0E2B:
+ case 0x0E2C:
+ case 0x0E2D:
+ case 0x0E2E:
+ case 0x0E2F:
+ case 0x0E30:
+ case 0x0E31:
+ case 0x0E32:
+ case 0x0E33:
+ case 0x0E34:
+ case 0x0E35:
+ case 0x0E36:
+ case 0x0E37:
+ case 0x0E38:
+ case 0x0E39:
+ case 0x0E3A:
+ ch -= 0x0D60;
+ break;
+ case 0x0E3F:
+ case 0x0E40:
+ case 0x0E41:
+ case 0x0E42:
+ case 0x0E43:
+ case 0x0E44:
+ case 0x0E45:
+ case 0x0E46:
+ case 0x0E47:
+ case 0x0E48:
+ case 0x0E49:
+ case 0x0E4A:
+ case 0x0E4B:
+ case 0x0E4C:
+ case 0x0E4D:
+ case 0x0E4E:
+ case 0x0E4F:
+ case 0x0E50:
+ case 0x0E51:
+ case 0x0E52:
+ case 0x0E53:
+ case 0x0E54:
+ case 0x0E55:
+ case 0x0E56:
+ case 0x0E57:
+ case 0x0E58:
+ case 0x0E59:
+ case 0x0E5A:
+ case 0x0E5B:
+ ch -= 0x0D60;
+ break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 26) switch(ch)
+ {
+ case 0x001B:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x0020:
+ case 0x0021:
+ case 0x0022:
+ case 0x0023:
+ case 0x0024:
+ case 0x0025:
+ case 0x0026:
+ case 0x0027:
+ case 0x0028:
+ case 0x0029:
+ case 0x002A:
+ case 0x002B:
+ case 0x002C:
+ case 0x002D:
+ case 0x002E:
+ case 0x002F:
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ case 0x003A:
+ case 0x003B:
+ case 0x003C:
+ case 0x003D:
+ case 0x003E:
+ case 0x003F:
+ case 0x0040:
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ case 0x005B:
+ case 0x005C:
+ case 0x005D:
+ case 0x005E:
+ case 0x005F:
+ case 0x0060:
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ case 0x007B:
+ case 0x007C:
+ case 0x007D:
+ case 0x007E:
+ break;
+ case 0x001A: ch = 0x7F; break;
+ case 0x001C: ch = 0x1A; break;
+ case 0x007F: ch = 0x1C; break;
+ case 0x00A0: ch = 0xFF; break;
+ case 0x00A2: ch = 0xFC; break;
+ case 0x00A6: ch = 0xFE; break;
+ case 0x00AC: ch = 0xFD; break;
+ case 0x0E01:
+ case 0x0E02:
+ case 0x0E03:
+ case 0x0E04:
+ case 0x0E05:
+ case 0x0E06:
+ case 0x0E07:
+ case 0x0E08:
+ case 0x0E09:
+ case 0x0E0A:
+ case 0x0E0B:
+ case 0x0E0C:
+ case 0x0E0D:
+ case 0x0E0E:
+ case 0x0E0F:
+ case 0x0E10:
+ case 0x0E11:
+ case 0x0E12:
+ case 0x0E13:
+ case 0x0E14:
+ case 0x0E15:
+ case 0x0E16:
+ case 0x0E17:
+ case 0x0E18:
+ case 0x0E19:
+ case 0x0E1A:
+ case 0x0E1B:
+ case 0x0E1C:
+ case 0x0E1D:
+ case 0x0E1E:
+ case 0x0E1F:
+ case 0x0E20:
+ case 0x0E21:
+ case 0x0E22:
+ case 0x0E23:
+ case 0x0E24:
+ case 0x0E25:
+ case 0x0E26:
+ case 0x0E27:
+ case 0x0E28:
+ case 0x0E29:
+ case 0x0E2A:
+ case 0x0E2B:
+ case 0x0E2C:
+ case 0x0E2D:
+ case 0x0E2E:
+ case 0x0E2F:
+ case 0x0E30:
+ case 0x0E31:
+ case 0x0E32:
+ case 0x0E33:
+ case 0x0E34:
+ case 0x0E35:
+ case 0x0E36:
+ case 0x0E37:
+ case 0x0E38:
+ case 0x0E39:
+ case 0x0E3A:
+ ch -= 0x0D60;
+ break;
+ case 0x0E3F:
+ case 0x0E40:
+ case 0x0E41:
+ case 0x0E42:
+ case 0x0E43:
+ case 0x0E44:
+ case 0x0E45:
+ case 0x0E46:
+ case 0x0E47:
+ case 0x0E48:
+ case 0x0E49:
+ case 0x0E4A:
+ case 0x0E4B:
+ case 0x0E4C:
+ case 0x0E4D:
+ case 0x0E4E:
+ case 0x0E4F:
+ case 0x0E50:
+ case 0x0E51:
+ case 0x0E52:
+ case 0x0E53:
+ case 0x0E54:
+ case 0x0E55:
+ case 0x0E56:
+ case 0x0E57:
+ case 0x0E58:
+ case 0x0E59:
+ case 0x0E5A:
+ case 0x0E5B:
+ ch -= 0x0D60;
+ break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP874
+
+public class ENCwindows_874 : CP874
+{
+ public ENCwindows_874() : base() {}
+
+}; // class ENCwindows_874
+
+}; // namespace I18N.Other
diff --git a/mcs/class/I18N/Other/ibm-5347.ucm b/mcs/class/I18N/Other/ibm-5347.ucm
new file mode 100644
index 00000000000..fc262e6c0bc
--- /dev/null
+++ b/mcs/class/I18N/Other/ibm-5347.ucm
@@ -0,0 +1,377 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1998-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Mon Nov 13 08:50:44 2000
+#
+# File created by dtcocm version 3.00
+# from source files 44B014E3.RPMAP100 and 14E344B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-5347"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x1A
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-5347
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x1A |0
+<U001B> \x1B |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x7F |0
+<U0098> \x98 |0
+<U00A0> \xA0 |0
+<U00A4> \xA4 |0
+<U00A6> \xA6 |0
+<U00A7> \xA7 |0
+<U00A9> \xA9 |0
+<U00AB> \xAB |0
+<U00AC> \xAC |0
+<U00AD> \xAD |0
+<U00AE> \xAE |0
+<U00B0> \xB0 |0
+<U00B1> \xB1 |0
+<U00B5> \xB5 |0
+<U00B6> \xB6 |0
+<U00B7> \xB7 |0
+<U00BB> \xBB |0
+<U0401> \xA8 |0
+<U0402> \x80 |0
+<U0403> \x81 |0
+<U0404> \xAA |0
+<U0405> \xBD |0
+<U0406> \xB2 |0
+<U0407> \xAF |0
+<U0408> \xA3 |0
+<U0409> \x8A |0
+<U040A> \x8C |0
+<U040B> \x8E |0
+<U040C> \x8D |0
+<U040E> \xA1 |0
+<U040F> \x8F |0
+<U0410> \xC0 |0
+<U0411> \xC1 |0
+<U0412> \xC2 |0
+<U0413> \xC3 |0
+<U0414> \xC4 |0
+<U0415> \xC5 |0
+<U0416> \xC6 |0
+<U0417> \xC7 |0
+<U0418> \xC8 |0
+<U0419> \xC9 |0
+<U041A> \xCA |0
+<U041B> \xCB |0
+<U041C> \xCC |0
+<U041D> \xCD |0
+<U041E> \xCE |0
+<U041F> \xCF |0
+<U0420> \xD0 |0
+<U0421> \xD1 |0
+<U0422> \xD2 |0
+<U0423> \xD3 |0
+<U0424> \xD4 |0
+<U0425> \xD5 |0
+<U0426> \xD6 |0
+<U0427> \xD7 |0
+<U0428> \xD8 |0
+<U0429> \xD9 |0
+<U042A> \xDA |0
+<U042B> \xDB |0
+<U042C> \xDC |0
+<U042D> \xDD |0
+<U042E> \xDE |0
+<U042F> \xDF |0
+<U0430> \xE0 |0
+<U0431> \xE1 |0
+<U0432> \xE2 |0
+<U0433> \xE3 |0
+<U0434> \xE4 |0
+<U0435> \xE5 |0
+<U0436> \xE6 |0
+<U0437> \xE7 |0
+<U0438> \xE8 |0
+<U0439> \xE9 |0
+<U043A> \xEA |0
+<U043B> \xEB |0
+<U043C> \xEC |0
+<U043D> \xED |0
+<U043E> \xEE |0
+<U043F> \xEF |0
+<U0440> \xF0 |0
+<U0441> \xF1 |0
+<U0442> \xF2 |0
+<U0443> \xF3 |0
+<U0444> \xF4 |0
+<U0445> \xF5 |0
+<U0446> \xF6 |0
+<U0447> \xF7 |0
+<U0448> \xF8 |0
+<U0449> \xF9 |0
+<U044A> \xFA |0
+<U044B> \xFB |0
+<U044C> \xFC |0
+<U044D> \xFD |0
+<U044E> \xFE |0
+<U044F> \xFF |0
+<U0451> \xB8 |0
+<U0452> \x90 |0
+<U0453> \x83 |0
+<U0454> \xBA |0
+<U0455> \xBE |0
+<U0456> \xB3 |0
+<U0457> \xBF |0
+<U0458> \xBC |0
+<U0459> \x9A |0
+<U045A> \x9C |0
+<U045B> \x9E |0
+<U045C> \x9D |0
+<U045E> \xA2 |0
+<U045F> \x9F |0
+<U0490> \xA5 |0
+<U0491> \xB4 |0
+<U2013> \x96 |0
+<U2014> \x97 |0
+<U2018> \x91 |0
+<U2019> \x92 |0
+<U201A> \x82 |0
+<U201C> \x93 |0
+<U201D> \x94 |0
+<U201E> \x84 |0
+<U2020> \x86 |0
+<U2021> \x87 |0
+<U2022> \x95 |0
+<U2026> \x85 |0
+<U2030> \x89 |0
+<U2039> \x8B |0
+<U203A> \x9B |0
+<U20AC> \x88 |0
+<U2116> \xB9 |0
+<U2122> \x99 |0
+<UFF01> \x21 |1
+<UFF02> \x22 |1
+<UFF03> \x23 |1
+<UFF04> \x24 |1
+<UFF05> \x25 |1
+<UFF06> \x26 |1
+<UFF07> \x27 |1
+<UFF08> \x28 |1
+<UFF09> \x29 |1
+<UFF0A> \x2A |1
+<UFF0B> \x2B |1
+<UFF0C> \x2C |1
+<UFF0D> \x2D |1
+<UFF0E> \x2E |1
+<UFF0F> \x2F |1
+<UFF10> \x30 |1
+<UFF11> \x31 |1
+<UFF12> \x32 |1
+<UFF13> \x33 |1
+<UFF14> \x34 |1
+<UFF15> \x35 |1
+<UFF16> \x36 |1
+<UFF17> \x37 |1
+<UFF18> \x38 |1
+<UFF19> \x39 |1
+<UFF1A> \x3A |1
+<UFF1B> \x3B |1
+<UFF1C> \x3C |1
+<UFF1D> \x3D |1
+<UFF1E> \x3E |1
+<UFF1F> \x3F |1
+<UFF20> \x40 |1
+<UFF21> \x41 |1
+<UFF22> \x42 |1
+<UFF23> \x43 |1
+<UFF24> \x44 |1
+<UFF25> \x45 |1
+<UFF26> \x46 |1
+<UFF27> \x47 |1
+<UFF28> \x48 |1
+<UFF29> \x49 |1
+<UFF2A> \x4A |1
+<UFF2B> \x4B |1
+<UFF2C> \x4C |1
+<UFF2D> \x4D |1
+<UFF2E> \x4E |1
+<UFF2F> \x4F |1
+<UFF30> \x50 |1
+<UFF31> \x51 |1
+<UFF32> \x52 |1
+<UFF33> \x53 |1
+<UFF34> \x54 |1
+<UFF35> \x55 |1
+<UFF36> \x56 |1
+<UFF37> \x57 |1
+<UFF38> \x58 |1
+<UFF39> \x59 |1
+<UFF3A> \x5A |1
+<UFF3B> \x5B |1
+<UFF3C> \x5C |1
+<UFF3D> \x5D |1
+<UFF3E> \x5E |1
+<UFF3F> \x5F |1
+<UFF40> \x60 |1
+<UFF41> \x61 |1
+<UFF42> \x62 |1
+<UFF43> \x63 |1
+<UFF44> \x64 |1
+<UFF45> \x65 |1
+<UFF46> \x66 |1
+<UFF47> \x67 |1
+<UFF48> \x68 |1
+<UFF49> \x69 |1
+<UFF4A> \x6A |1
+<UFF4B> \x6B |1
+<UFF4C> \x6C |1
+<UFF4D> \x6D |1
+<UFF4E> \x6E |1
+<UFF4F> \x6F |1
+<UFF50> \x70 |1
+<UFF51> \x71 |1
+<UFF52> \x72 |1
+<UFF53> \x73 |1
+<UFF54> \x74 |1
+<UFF55> \x75 |1
+<UFF56> \x76 |1
+<UFF57> \x77 |1
+<UFF58> \x78 |1
+<UFF59> \x79 |1
+<UFF5A> \x7A |1
+<UFF5B> \x7B |1
+<UFF5C> \x7C |1
+<UFF5D> \x7D |1
+<UFF5E> \x7E |1
+END CHARMAP
diff --git a/mcs/class/I18N/Other/ibm-5353.ucm b/mcs/class/I18N/Other/ibm-5353.ucm
new file mode 100644
index 00000000000..3afd0182fea
--- /dev/null
+++ b/mcs/class/I18N/Other/ibm-5353.ucm
@@ -0,0 +1,377 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1998-2001, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Mon Nov 13 08:50:45 2000
+#
+# File created by dtcocm version 3.00
+# from source files 44B014E9.RPMAP100 and 14E944B0.TPMAP100
+#
+# Patched for jitterbug 792
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-5353"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x1A
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-5353
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x1A |0
+<U001B> \x1B |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x7F |0
+<U0081> \x81 |0
+<U0083> \x83 |0
+<U0088> \x88 |0
+<U008A> \x8A |0
+<U008C> \x8C |0
+<U0090> \x90 |0
+<U0098> \x98 |0
+<U009A> \x9A |0
+<U009C> \x9C |0
+<U009F> \x9F |0
+<U00A0> \xA0 |0
+<U00A2> \xA2 |0
+<U00A3> \xA3 |0
+<U00A4> \xA4 |0
+<U00A6> \xA6 |0
+<U00A7> \xA7 |0
+<U00A8> \x8D |0
+<U00A9> \xA9 |0
+<U00AB> \xAB |0
+<U00AC> \xAC |0
+<U00AD> \xAD |0
+<U00AE> \xAE |0
+<U00AF> \x9D |0
+<U00B0> \xB0 |0
+<U00B1> \xB1 |0
+<U00B2> \xB2 |0
+<U00B3> \xB3 |0
+<U00B4> \xB4 |0
+<U00B5> \xB5 |0
+<U00B6> \xB6 |0
+<U00B7> \xB7 |0
+<U00B8> \x8F |0
+<U00B9> \xB9 |0
+<U00BB> \xBB |0
+<U00BC> \xBC |0
+<U00BD> \xBD |0
+<U00BE> \xBE |0
+<U00C4> \xC4 |0
+<U00C5> \xC5 |0
+<U00C6> \xAF |0
+<U00C9> \xC9 |0
+<U00D3> \xD3 |0
+<U00D5> \xD5 |0
+<U00D6> \xD6 |0
+<U00D7> \xD7 |0
+<U00D8> \xA8 |0
+<U00DC> \xDC |0
+<U00DF> \xDF |0
+<U00E4> \xE4 |0
+<U00E5> \xE5 |0
+<U00E6> \xBF |0
+<U00E9> \xE9 |0
+<U00F3> \xF3 |0
+<U00F5> \xF5 |0
+<U00F6> \xF6 |0
+<U00F7> \xF7 |0
+<U00F8> \xB8 |0
+<U00FC> \xFC |0
+<U0100> \xC2 |0
+<U0101> \xE2 |0
+<U0104> \xC0 |0
+<U0105> \xE0 |0
+<U0106> \xC3 |0
+<U0107> \xE3 |0
+<U010C> \xC8 |0
+<U010D> \xE8 |0
+<U0112> \xC7 |0
+<U0113> \xE7 |0
+<U0116> \xCB |0
+<U0117> \xEB |0
+<U0118> \xC6 |0
+<U0119> \xE6 |0
+<U0122> \xCC |0
+<U0123> \xEC |0
+<U012A> \xCE |0
+<U012B> \xEE |0
+<U012E> \xC1 |0
+<U012F> \xE1 |0
+<U0136> \xCD |0
+<U0137> \xED |0
+<U013B> \xCF |0
+<U013C> \xEF |0
+<U0141> \xD9 |0
+<U0142> \xF9 |0
+<U0143> \xD1 |0
+<U0144> \xF1 |0
+<U0145> \xD2 |0
+<U0146> \xF2 |0
+<U014C> \xD4 |0
+<U014D> \xF4 |0
+<U0156> \xAA |0
+<U0157> \xBA |0
+<U015A> \xDA |0
+<U015B> \xFA |0
+<U0160> \xD0 |0
+<U0161> \xF0 |0
+<U016A> \xDB |0
+<U016B> \xFB |0
+<U0172> \xD8 |0
+<U0173> \xF8 |0
+<U0179> \xCA |0
+<U017A> \xEA |0
+<U017B> \xDD |0
+<U017C> \xFD |0
+<U017D> \xDE |0
+<U017E> \xFE |0
+<U02C7> \x8E |0
+<U02D9> \xFF |0
+<U02DB> \x9E |0
+<U2013> \x96 |0
+<U2014> \x97 |0
+<U2018> \x91 |0
+<U2019> \x92 |0
+<U201A> \x82 |0
+<U201C> \x93 |0
+<U201D> \x94 |0
+<U201E> \x84 |0
+<U2020> \x86 |0
+<U2021> \x87 |0
+<U2022> \x95 |0
+<U2026> \x85 |0
+<U2030> \x89 |0
+<U2039> \x8B |0
+<U203A> \x9B |0
+<U20AC> \x80 |0
+<U2122> \x99 |0
+<UFF01> \x21 |1
+<UFF02> \x22 |1
+<UFF03> \x23 |1
+<UFF04> \x24 |1
+<UFF05> \x25 |1
+<UFF06> \x26 |1
+<UFF07> \x27 |1
+<UFF08> \x28 |1
+<UFF09> \x29 |1
+<UFF0A> \x2A |1
+<UFF0B> \x2B |1
+<UFF0C> \x2C |1
+<UFF0D> \x2D |1
+<UFF0E> \x2E |1
+<UFF0F> \x2F |1
+<UFF10> \x30 |1
+<UFF11> \x31 |1
+<UFF12> \x32 |1
+<UFF13> \x33 |1
+<UFF14> \x34 |1
+<UFF15> \x35 |1
+<UFF16> \x36 |1
+<UFF17> \x37 |1
+<UFF18> \x38 |1
+<UFF19> \x39 |1
+<UFF1A> \x3A |1
+<UFF1B> \x3B |1
+<UFF1C> \x3C |1
+<UFF1D> \x3D |1
+<UFF1E> \x3E |1
+<UFF1F> \x3F |1
+<UFF20> \x40 |1
+<UFF21> \x41 |1
+<UFF22> \x42 |1
+<UFF23> \x43 |1
+<UFF24> \x44 |1
+<UFF25> \x45 |1
+<UFF26> \x46 |1
+<UFF27> \x47 |1
+<UFF28> \x48 |1
+<UFF29> \x49 |1
+<UFF2A> \x4A |1
+<UFF2B> \x4B |1
+<UFF2C> \x4C |1
+<UFF2D> \x4D |1
+<UFF2E> \x4E |1
+<UFF2F> \x4F |1
+<UFF30> \x50 |1
+<UFF31> \x51 |1
+<UFF32> \x52 |1
+<UFF33> \x53 |1
+<UFF34> \x54 |1
+<UFF35> \x55 |1
+<UFF36> \x56 |1
+<UFF37> \x57 |1
+<UFF38> \x58 |1
+<UFF39> \x59 |1
+<UFF3A> \x5A |1
+<UFF3B> \x5B |1
+<UFF3C> \x5C |1
+<UFF3D> \x5D |1
+<UFF3E> \x5E |1
+<UFF3F> \x5F |1
+<UFF40> \x60 |1
+<UFF41> \x61 |1
+<UFF42> \x62 |1
+<UFF43> \x63 |1
+<UFF44> \x64 |1
+<UFF45> \x65 |1
+<UFF46> \x66 |1
+<UFF47> \x67 |1
+<UFF48> \x68 |1
+<UFF49> \x69 |1
+<UFF4A> \x6A |1
+<UFF4B> \x6B |1
+<UFF4C> \x6C |1
+<UFF4D> \x6D |1
+<UFF4E> \x6E |1
+<UFF4F> \x6F |1
+<UFF50> \x70 |1
+<UFF51> \x71 |1
+<UFF52> \x72 |1
+<UFF53> \x73 |1
+<UFF54> \x74 |1
+<UFF55> \x75 |1
+<UFF56> \x76 |1
+<UFF57> \x77 |1
+<UFF58> \x78 |1
+<UFF59> \x79 |1
+<UFF5A> \x7A |1
+<UFF5B> \x7B |1
+<UFF5C> \x7C |1
+<UFF5D> \x7D |1
+<UFF5E> \x7E |1
+END CHARMAP
diff --git a/mcs/class/I18N/Other/ibm-5354.ucm b/mcs/class/I18N/Other/ibm-5354.ucm
new file mode 100644
index 00000000000..3d4bcaa7750
--- /dev/null
+++ b/mcs/class/I18N/Other/ibm-5354.ucm
@@ -0,0 +1,377 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1998-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Mon Nov 13 08:50:45 2000
+#
+# File created by dtcocm version 3.00
+# from source files 44B014EA.RPMAP100 and 14EA44B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-5354"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x1A
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-5354
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x1A |0
+<U001B> \x1B |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x7F |0
+<U0081> \x81 |0
+<U008A> \x8A |0
+<U008D> \x8D |0
+<U008E> \x8E |0
+<U008F> \x8F |0
+<U0090> \x90 |0
+<U009A> \x9A |0
+<U009D> \x9D |0
+<U009E> \x9E |0
+<U00A0> \xA0 |0
+<U00A1> \xA1 |0
+<U00A2> \xA2 |0
+<U00A3> \xA3 |0
+<U00A4> \xA4 |0
+<U00A5> \xA5 |0
+<U00A6> \xA6 |0
+<U00A7> \xA7 |0
+<U00A8> \xA8 |0
+<U00A9> \xA9 |0
+<U00AA> \xAA |0
+<U00AB> \xAB |0
+<U00AC> \xAC |0
+<U00AD> \xAD |0
+<U00AE> \xAE |0
+<U00AF> \xAF |0
+<U00B0> \xB0 |0
+<U00B1> \xB1 |0
+<U00B2> \xB2 |0
+<U00B3> \xB3 |0
+<U00B4> \xB4 |0
+<U00B5> \xB5 |0
+<U00B6> \xB6 |0
+<U00B7> \xB7 |0
+<U00B8> \xB8 |0
+<U00B9> \xB9 |0
+<U00BA> \xBA |0
+<U00BB> \xBB |0
+<U00BC> \xBC |0
+<U00BD> \xBD |0
+<U00BE> \xBE |0
+<U00BF> \xBF |0
+<U00C0> \xC0 |0
+<U00C1> \xC1 |0
+<U00C2> \xC2 |0
+<U00C4> \xC4 |0
+<U00C5> \xC5 |0
+<U00C6> \xC6 |0
+<U00C7> \xC7 |0
+<U00C8> \xC8 |0
+<U00C9> \xC9 |0
+<U00CA> \xCA |0
+<U00CB> \xCB |0
+<U00CD> \xCD |0
+<U00CE> \xCE |0
+<U00CF> \xCF |0
+<U00D1> \xD1 |0
+<U00D3> \xD3 |0
+<U00D4> \xD4 |0
+<U00D6> \xD6 |0
+<U00D7> \xD7 |0
+<U00D8> \xD8 |0
+<U00D9> \xD9 |0
+<U00DA> \xDA |0
+<U00DB> \xDB |0
+<U00DC> \xDC |0
+<U00DF> \xDF |0
+<U00E0> \xE0 |0
+<U00E1> \xE1 |0
+<U00E2> \xE2 |0
+<U00E4> \xE4 |0
+<U00E5> \xE5 |0
+<U00E6> \xE6 |0
+<U00E7> \xE7 |0
+<U00E8> \xE8 |0
+<U00E9> \xE9 |0
+<U00EA> \xEA |0
+<U00EB> \xEB |0
+<U00ED> \xED |0
+<U00EE> \xEE |0
+<U00EF> \xEF |0
+<U00F1> \xF1 |0
+<U00F3> \xF3 |0
+<U00F4> \xF4 |0
+<U00F6> \xF6 |0
+<U00F7> \xF7 |0
+<U00F8> \xF8 |0
+<U00F9> \xF9 |0
+<U00FA> \xFA |0
+<U00FB> \xFB |0
+<U00FC> \xFC |0
+<U00FF> \xFF |0
+<U0102> \xC3 |0
+<U0103> \xE3 |0
+<U0110> \xD0 |0
+<U0111> \xF0 |0
+<U0152> \x8C |0
+<U0153> \x9C |0
+<U0178> \x9F |0
+<U0192> \x83 |0
+<U01A0> \xD5 |0
+<U01A1> \xF5 |0
+<U01AF> \xDD |0
+<U01B0> \xFD |0
+<U02C6> \x88 |0
+<U02DC> \x98 |0
+<U0300> \xCC |0
+<U0301> \xEC |0
+<U0303> \xDE |0
+<U0309> \xD2 |0
+<U0323> \xF2 |0
+<U2013> \x96 |0
+<U2014> \x97 |0
+<U2018> \x91 |0
+<U2019> \x92 |0
+<U201A> \x82 |0
+<U201C> \x93 |0
+<U201D> \x94 |0
+<U201E> \x84 |0
+<U2020> \x86 |0
+<U2021> \x87 |0
+<U2022> \x95 |0
+<U2026> \x85 |0
+<U2030> \x89 |0
+<U2039> \x8B |0
+<U203A> \x9B |0
+<U20AB> \xFE |0
+<U20AC> \x80 |0
+<U2122> \x99 |0
+<UFF01> \x21 |1
+<UFF02> \x22 |1
+<UFF03> \x23 |1
+<UFF04> \x24 |1
+<UFF05> \x25 |1
+<UFF06> \x26 |1
+<UFF07> \x27 |1
+<UFF08> \x28 |1
+<UFF09> \x29 |1
+<UFF0A> \x2A |1
+<UFF0B> \x2B |1
+<UFF0C> \x2C |1
+<UFF0D> \x2D |1
+<UFF0E> \x2E |1
+<UFF0F> \x2F |1
+<UFF10> \x30 |1
+<UFF11> \x31 |1
+<UFF12> \x32 |1
+<UFF13> \x33 |1
+<UFF14> \x34 |1
+<UFF15> \x35 |1
+<UFF16> \x36 |1
+<UFF17> \x37 |1
+<UFF18> \x38 |1
+<UFF19> \x39 |1
+<UFF1A> \x3A |1
+<UFF1B> \x3B |1
+<UFF1C> \x3C |1
+<UFF1D> \x3D |1
+<UFF1E> \x3E |1
+<UFF1F> \x3F |1
+<UFF20> \x40 |1
+<UFF21> \x41 |1
+<UFF22> \x42 |1
+<UFF23> \x43 |1
+<UFF24> \x44 |1
+<UFF25> \x45 |1
+<UFF26> \x46 |1
+<UFF27> \x47 |1
+<UFF28> \x48 |1
+<UFF29> \x49 |1
+<UFF2A> \x4A |1
+<UFF2B> \x4B |1
+<UFF2C> \x4C |1
+<UFF2D> \x4D |1
+<UFF2E> \x4E |1
+<UFF2F> \x4F |1
+<UFF30> \x50 |1
+<UFF31> \x51 |1
+<UFF32> \x52 |1
+<UFF33> \x53 |1
+<UFF34> \x54 |1
+<UFF35> \x55 |1
+<UFF36> \x56 |1
+<UFF37> \x57 |1
+<UFF38> \x58 |1
+<UFF39> \x59 |1
+<UFF3A> \x5A |1
+<UFF3B> \x5B |1
+<UFF3C> \x5C |1
+<UFF3D> \x5D |1
+<UFF3E> \x5E |1
+<UFF3F> \x5F |1
+<UFF40> \x60 |1
+<UFF41> \x61 |1
+<UFF42> \x62 |1
+<UFF43> \x63 |1
+<UFF44> \x64 |1
+<UFF45> \x65 |1
+<UFF46> \x66 |1
+<UFF47> \x67 |1
+<UFF48> \x68 |1
+<UFF49> \x69 |1
+<UFF4A> \x6A |1
+<UFF4B> \x6B |1
+<UFF4C> \x6C |1
+<UFF4D> \x6D |1
+<UFF4E> \x6E |1
+<UFF4F> \x6F |1
+<UFF50> \x70 |1
+<UFF51> \x71 |1
+<UFF52> \x72 |1
+<UFF53> \x73 |1
+<UFF54> \x74 |1
+<UFF55> \x75 |1
+<UFF56> \x76 |1
+<UFF57> \x77 |1
+<UFF58> \x78 |1
+<UFF59> \x79 |1
+<UFF5A> \x7A |1
+<UFF5B> \x7B |1
+<UFF5C> \x7C |1
+<UFF5D> \x7D |1
+<UFF5E> \x7E |1
+END CHARMAP
diff --git a/mcs/class/I18N/Other/ibm-874.ucm b/mcs/class/I18N/Other/ibm-874.ucm
new file mode 100644
index 00000000000..ecf2d88890f
--- /dev/null
+++ b/mcs/class/I18N/Other/ibm-874.ucm
@@ -0,0 +1,345 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1995-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Mon Nov 13 09:28:03 2000
+#
+# File created by dtcocm version 3.00
+# from source files 34B0036A.RPMAP100 and 036A34B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-874"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x7F
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-874
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x7F |0
+<U001B> \x1B |0
+<U001C> \x1A |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x1C |0
+<U00A0> \xFF |0
+<U00A2> \xFC |0
+<U00A6> \xFE |0
+<U00AC> \xFD |0
+<U0E01> \xA1 |0
+<U0E02> \xA2 |0
+<U0E03> \xA3 |0
+<U0E04> \xA4 |0
+<U0E05> \xA5 |0
+<U0E06> \xA6 |0
+<U0E07> \xA7 |0
+<U0E08> \xA8 |0
+<U0E09> \xA9 |0
+<U0E0A> \xAA |0
+<U0E0B> \xAB |0
+<U0E0C> \xAC |0
+<U0E0D> \xAD |0
+<U0E0E> \xAE |0
+<U0E0F> \xAF |0
+<U0E10> \xB0 |0
+<U0E11> \xB1 |0
+<U0E12> \xB2 |0
+<U0E13> \xB3 |0
+<U0E14> \xB4 |0
+<U0E15> \xB5 |0
+<U0E16> \xB6 |0
+<U0E17> \xB7 |0
+<U0E18> \xB8 |0
+<U0E19> \xB9 |0
+<U0E1A> \xBA |0
+<U0E1B> \xBB |0
+<U0E1C> \xBC |0
+<U0E1D> \xBD |0
+<U0E1E> \xBE |0
+<U0E1F> \xBF |0
+<U0E20> \xC0 |0
+<U0E21> \xC1 |0
+<U0E22> \xC2 |0
+<U0E23> \xC3 |0
+<U0E24> \xC4 |0
+<U0E25> \xC5 |0
+<U0E26> \xC6 |0
+<U0E27> \xC7 |0
+<U0E28> \xC8 |0
+<U0E29> \xC9 |0
+<U0E2A> \xCA |0
+<U0E2B> \xCB |0
+<U0E2C> \xCC |0
+<U0E2D> \xCD |0
+<U0E2E> \xCE |0
+<U0E2F> \xCF |0
+<U0E30> \xD0 |0
+<U0E31> \xD1 |0
+<U0E32> \xD2 |0
+<U0E33> \xD3 |0
+<U0E34> \xD4 |0
+<U0E35> \xD5 |0
+<U0E36> \xD6 |0
+<U0E37> \xD7 |0
+<U0E38> \xD8 |0
+<U0E39> \xD9 |0
+<U0E3A> \xDA |0
+<U0E3F> \xDF |0
+<U0E40> \xE0 |0
+<U0E41> \xE1 |0
+<U0E42> \xE2 |0
+<U0E43> \xE3 |0
+<U0E44> \xE4 |0
+<U0E45> \xE5 |0
+<U0E46> \xE6 |0
+<U0E47> \xE7 |0
+<U0E48> \xA0 |3
+<U0E48> \xE8 |0
+<U0E49> \xDB |3
+<U0E49> \xE9 |0
+<U0E4A> \xDC |3
+<U0E4A> \xEA |0
+<U0E4B> \xDD |3
+<U0E4B> \xEB |0
+<U0E4C> \xDE |3
+<U0E4C> \xEC |0
+<U0E4D> \xED |0
+<U0E4E> \xEE |0
+<U0E4F> \xEF |0
+<U0E50> \xF0 |0
+<U0E51> \xF1 |0
+<U0E52> \xF2 |0
+<U0E53> \xF3 |0
+<U0E54> \xF4 |0
+<U0E55> \xF5 |0
+<U0E56> \xF6 |0
+<U0E57> \xF7 |0
+<U0E58> \xF8 |0
+<U0E59> \xF9 |0
+<U0E5A> \xFA |0
+<U0E5B> \xFB |0
+<UFF01> \x21 |1
+<UFF02> \x22 |1
+<UFF03> \x23 |1
+<UFF04> \x24 |1
+<UFF05> \x25 |1
+<UFF06> \x26 |1
+<UFF07> \x27 |1
+<UFF08> \x28 |1
+<UFF09> \x29 |1
+<UFF0A> \x2A |1
+<UFF0B> \x2B |1
+<UFF0C> \x2C |1
+<UFF0D> \x2D |1
+<UFF0E> \x2E |1
+<UFF0F> \x2F |1
+<UFF10> \x30 |1
+<UFF11> \x31 |1
+<UFF12> \x32 |1
+<UFF13> \x33 |1
+<UFF14> \x34 |1
+<UFF15> \x35 |1
+<UFF16> \x36 |1
+<UFF17> \x37 |1
+<UFF18> \x38 |1
+<UFF19> \x39 |1
+<UFF1A> \x3A |1
+<UFF1B> \x3B |1
+<UFF1C> \x3C |1
+<UFF1D> \x3D |1
+<UFF1E> \x3E |1
+<UFF1F> \x3F |1
+<UFF20> \x40 |1
+<UFF21> \x41 |1
+<UFF22> \x42 |1
+<UFF23> \x43 |1
+<UFF24> \x44 |1
+<UFF25> \x45 |1
+<UFF26> \x46 |1
+<UFF27> \x47 |1
+<UFF28> \x48 |1
+<UFF29> \x49 |1
+<UFF2A> \x4A |1
+<UFF2B> \x4B |1
+<UFF2C> \x4C |1
+<UFF2D> \x4D |1
+<UFF2E> \x4E |1
+<UFF2F> \x4F |1
+<UFF30> \x50 |1
+<UFF31> \x51 |1
+<UFF32> \x52 |1
+<UFF33> \x53 |1
+<UFF34> \x54 |1
+<UFF35> \x55 |1
+<UFF36> \x56 |1
+<UFF37> \x57 |1
+<UFF38> \x58 |1
+<UFF39> \x59 |1
+<UFF3A> \x5A |1
+<UFF3B> \x5B |1
+<UFF3C> \x5C |1
+<UFF3D> \x5D |1
+<UFF3E> \x5E |1
+<UFF3F> \x5F |1
+<UFF40> \x60 |1
+<UFF41> \x61 |1
+<UFF42> \x62 |1
+<UFF43> \x63 |1
+<UFF44> \x64 |1
+<UFF45> \x65 |1
+<UFF46> \x66 |1
+<UFF47> \x67 |1
+<UFF48> \x68 |1
+<UFF49> \x69 |1
+<UFF4A> \x6A |1
+<UFF4B> \x6B |1
+<UFF4C> \x6C |1
+<UFF4D> \x6D |1
+<UFF4E> \x6E |1
+<UFF4F> \x6F |1
+<UFF50> \x70 |1
+<UFF51> \x71 |1
+<UFF52> \x72 |1
+<UFF53> \x73 |1
+<UFF54> \x74 |1
+<UFF55> \x75 |1
+<UFF56> \x76 |1
+<UFF57> \x77 |1
+<UFF58> \x78 |1
+<UFF59> \x79 |1
+<UFF5A> \x7A |1
+<UFF5B> \x7B |1
+<UFF5C> \x7C |1
+<UFF5D> \x7D |1
+<UFF5E> \x7E |1
+END CHARMAP
diff --git a/mcs/class/I18N/Other/ibm-878.ucm b/mcs/class/I18N/Other/ibm-878.ucm
new file mode 100644
index 00000000000..e564740a787
--- /dev/null
+++ b/mcs/class/I18N/Other/ibm-878.ucm
@@ -0,0 +1,379 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1995-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Mon Nov 13 09:28:03 2000
+#
+# File created by dtcocm version 3.00
+# from source files 34B0036E.RPMAP100 and 036E34B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-878"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x1A
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-878
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x1A |0
+<U001B> \x1B |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x7F |0
+<U00A0> \x9A |0
+<U00A9> \xBF |0
+<U00B0> \x9C |0
+<U00B2> \x9D |0
+<U00B7> \x9E |0
+<U00F7> \x9F |0
+<U0401> \xB3 |0
+<U0410> \xE1 |0
+<U0411> \xE2 |0
+<U0412> \xF7 |0
+<U0413> \xE7 |0
+<U0414> \xE4 |0
+<U0415> \xE5 |0
+<U0416> \xF6 |0
+<U0417> \xFA |0
+<U0418> \xE9 |0
+<U0419> \xEA |0
+<U041A> \xEB |0
+<U041B> \xEC |0
+<U041C> \xED |0
+<U041D> \xEE |0
+<U041E> \xEF |0
+<U041F> \xF0 |0
+<U0420> \xF2 |0
+<U0421> \xF3 |0
+<U0422> \xF4 |0
+<U0423> \xF5 |0
+<U0424> \xE6 |0
+<U0425> \xE8 |0
+<U0426> \xE3 |0
+<U0427> \xFE |0
+<U0428> \xFB |0
+<U0429> \xFD |0
+<U042A> \xFF |0
+<U042B> \xF9 |0
+<U042C> \xF8 |0
+<U042D> \xFC |0
+<U042E> \xE0 |0
+<U042F> \xF1 |0
+<U0430> \xC1 |0
+<U0431> \xC2 |0
+<U0432> \xD7 |0
+<U0433> \xC7 |0
+<U0434> \xC4 |0
+<U0435> \xC5 |0
+<U0436> \xD6 |0
+<U0437> \xDA |0
+<U0438> \xC9 |0
+<U0439> \xCA |0
+<U043A> \xCB |0
+<U043B> \xCC |0
+<U043C> \xCD |0
+<U043D> \xCE |0
+<U043E> \xCF |0
+<U043F> \xD0 |0
+<U0440> \xD2 |0
+<U0441> \xD3 |0
+<U0442> \xD4 |0
+<U0443> \xD5 |0
+<U0444> \xC6 |0
+<U0445> \xC8 |0
+<U0446> \xC3 |0
+<U0447> \xDE |0
+<U0448> \xDB |0
+<U0449> \xDD |0
+<U044A> \xDF |0
+<U044B> \xD9 |0
+<U044C> \xD8 |0
+<U044D> \xDC |0
+<U044E> \xC0 |0
+<U044F> \xD1 |0
+<U0451> \xA3 |0
+<U2219> \x95 |0
+<U221A> \x96 |0
+<U2248> \x97 |0
+<U2264> \x98 |0
+<U2265> \x99 |0
+<U2320> \x93 |0
+<U2321> \x9B |0
+<U2500> \x80 |0
+<U2502> \x81 |0
+<U250C> \x82 |0
+<U2510> \x83 |0
+<U2514> \x84 |0
+<U2518> \x85 |0
+<U251C> \x86 |0
+<U2524> \x87 |0
+<U252C> \x88 |0
+<U2534> \x89 |0
+<U253C> \x8A |0
+<U2550> \xA0 |0
+<U2551> \xA1 |0
+<U2552> \xA2 |0
+<U2553> \xA4 |0
+<U2554> \xA5 |0
+<U2555> \xA6 |0
+<U2556> \xA7 |0
+<U2557> \xA8 |0
+<U2558> \xA9 |0
+<U2559> \xAA |0
+<U255A> \xAB |0
+<U255B> \xAC |0
+<U255C> \xAD |0
+<U255D> \xAE |0
+<U255E> \xAF |0
+<U255F> \xB0 |0
+<U2560> \xB1 |0
+<U2561> \xB2 |0
+<U2562> \xB4 |0
+<U2563> \xB5 |0
+<U2564> \xB6 |0
+<U2565> \xB7 |0
+<U2566> \xB8 |0
+<U2567> \xB9 |0
+<U2568> \xBA |0
+<U2569> \xBB |0
+<U256A> \xBC |0
+<U256B> \xBD |0
+<U256C> \xBE |0
+<U2580> \x8B |0
+<U2584> \x8C |0
+<U2588> \x8D |0
+<U258C> \x8E |0
+<U2590> \x8F |0
+<U2591> \x90 |0
+<U2592> \x91 |0
+<U2593> \x92 |0
+<U25A0> \x94 |0
+<UFF01> \x21 |1
+<UFF02> \x22 |1
+<UFF03> \x23 |1
+<UFF04> \x24 |1
+<UFF05> \x25 |1
+<UFF06> \x26 |1
+<UFF07> \x27 |1
+<UFF08> \x28 |1
+<UFF09> \x29 |1
+<UFF0A> \x2A |1
+<UFF0B> \x2B |1
+<UFF0C> \x2C |1
+<UFF0D> \x2D |1
+<UFF0E> \x2E |1
+<UFF0F> \x2F |1
+<UFF10> \x30 |1
+<UFF11> \x31 |1
+<UFF12> \x32 |1
+<UFF13> \x33 |1
+<UFF14> \x34 |1
+<UFF15> \x35 |1
+<UFF16> \x36 |1
+<UFF17> \x37 |1
+<UFF18> \x38 |1
+<UFF19> \x39 |1
+<UFF1A> \x3A |1
+<UFF1B> \x3B |1
+<UFF1C> \x3C |1
+<UFF1D> \x3D |1
+<UFF1E> \x3E |1
+<UFF1F> \x3F |1
+<UFF20> \x40 |1
+<UFF21> \x41 |1
+<UFF22> \x42 |1
+<UFF23> \x43 |1
+<UFF24> \x44 |1
+<UFF25> \x45 |1
+<UFF26> \x46 |1
+<UFF27> \x47 |1
+<UFF28> \x48 |1
+<UFF29> \x49 |1
+<UFF2A> \x4A |1
+<UFF2B> \x4B |1
+<UFF2C> \x4C |1
+<UFF2D> \x4D |1
+<UFF2E> \x4E |1
+<UFF2F> \x4F |1
+<UFF30> \x50 |1
+<UFF31> \x51 |1
+<UFF32> \x52 |1
+<UFF33> \x53 |1
+<UFF34> \x54 |1
+<UFF35> \x55 |1
+<UFF36> \x56 |1
+<UFF37> \x57 |1
+<UFF38> \x58 |1
+<UFF39> \x59 |1
+<UFF3A> \x5A |1
+<UFF3B> \x5B |1
+<UFF3C> \x5C |1
+<UFF3D> \x5D |1
+<UFF3E> \x5E |1
+<UFF3F> \x5F |1
+<UFF40> \x60 |1
+<UFF41> \x61 |1
+<UFF42> \x62 |1
+<UFF43> \x63 |1
+<UFF44> \x64 |1
+<UFF45> \x65 |1
+<UFF46> \x66 |1
+<UFF47> \x67 |1
+<UFF48> \x68 |1
+<UFF49> \x69 |1
+<UFF4A> \x6A |1
+<UFF4B> \x6B |1
+<UFF4C> \x6C |1
+<UFF4D> \x6D |1
+<UFF4E> \x6E |1
+<UFF4F> \x6F |1
+<UFF50> \x70 |1
+<UFF51> \x71 |1
+<UFF52> \x72 |1
+<UFF53> \x73 |1
+<UFF54> \x74 |1
+<UFF55> \x75 |1
+<UFF56> \x76 |1
+<UFF57> \x77 |1
+<UFF58> \x78 |1
+<UFF59> \x79 |1
+<UFF5A> \x7A |1
+<UFF5B> \x7B |1
+<UFF5C> \x7C |1
+<UFF5D> \x7D |1
+<UFF5E> \x7E |1
+<UFFE8> \x81 |1
+<UFFED> \x94 |1
+END CHARMAP
diff --git a/mcs/class/I18N/Other/ibm-914.ucm b/mcs/class/I18N/Other/ibm-914.ucm
new file mode 100644
index 00000000000..afafc4f22e3
--- /dev/null
+++ b/mcs/class/I18N/Other/ibm-914.ucm
@@ -0,0 +1,377 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1995-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Mon Nov 13 09:28:04 2000
+#
+# File created by dtcocm version 3.00
+# from source files 34B00392.RPMAP100 and 039234B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-914"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x1A
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-914
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x1A |0
+<U001B> \x1B |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x7F |0
+<U0080> \x80 |0
+<U0081> \x81 |0
+<U0082> \x82 |0
+<U0083> \x83 |0
+<U0084> \x84 |0
+<U0085> \x85 |0
+<U0086> \x86 |0
+<U0087> \x87 |0
+<U0088> \x88 |0
+<U0089> \x89 |0
+<U008A> \x8A |0
+<U008B> \x8B |0
+<U008C> \x8C |0
+<U008D> \x8D |0
+<U008E> \x8E |0
+<U008F> \x8F |0
+<U0090> \x90 |0
+<U0091> \x91 |0
+<U0092> \x92 |0
+<U0093> \x93 |0
+<U0094> \x94 |0
+<U0095> \x95 |0
+<U0096> \x96 |0
+<U0097> \x97 |0
+<U0098> \x98 |0
+<U0099> \x99 |0
+<U009A> \x9A |0
+<U009B> \x9B |0
+<U009C> \x9C |0
+<U009D> \x9D |0
+<U009E> \x9E |0
+<U009F> \x9F |0
+<U00A0> \xA0 |0
+<U00A4> \xA4 |0
+<U00A7> \xA7 |0
+<U00A8> \xA8 |0
+<U00AD> \xAD |0
+<U00AF> \xAF |0
+<U00B0> \xB0 |0
+<U00B4> \xB4 |0
+<U00B8> \xB8 |0
+<U00C1> \xC1 |0
+<U00C2> \xC2 |0
+<U00C3> \xC3 |0
+<U00C4> \xC4 |0
+<U00C5> \xC5 |0
+<U00C6> \xC6 |0
+<U00C9> \xC9 |0
+<U00CB> \xCB |0
+<U00CD> \xCD |0
+<U00CE> \xCE |0
+<U00D4> \xD4 |0
+<U00D5> \xD5 |0
+<U00D6> \xD6 |0
+<U00D7> \xD7 |0
+<U00D8> \xD8 |0
+<U00DA> \xDA |0
+<U00DB> \xDB |0
+<U00DC> \xDC |0
+<U00DF> \xDF |0
+<U00E1> \xE1 |0
+<U00E2> \xE2 |0
+<U00E3> \xE3 |0
+<U00E4> \xE4 |0
+<U00E5> \xE5 |0
+<U00E6> \xE6 |0
+<U00E9> \xE9 |0
+<U00EB> \xEB |0
+<U00ED> \xED |0
+<U00EE> \xEE |0
+<U00F4> \xF4 |0
+<U00F5> \xF5 |0
+<U00F6> \xF6 |0
+<U00F7> \xF7 |0
+<U00F8> \xF8 |0
+<U00FA> \xFA |0
+<U00FB> \xFB |0
+<U00FC> \xFC |0
+<U0100> \xC0 |0
+<U0101> \xE0 |0
+<U0104> \xA1 |0
+<U0105> \xB1 |0
+<U010C> \xC8 |0
+<U010D> \xE8 |0
+<U0110> \xD0 |0
+<U0111> \xF0 |0
+<U0112> \xAA |0
+<U0113> \xBA |0
+<U0116> \xCC |0
+<U0117> \xEC |0
+<U0118> \xCA |0
+<U0119> \xEA |0
+<U0122> \xAB |0
+<U0123> \xBB |0
+<U0128> \xA5 |0
+<U0129> \xB5 |0
+<U012A> \xCF |0
+<U012B> \xEF |0
+<U012E> \xC7 |0
+<U012F> \xE7 |0
+<U0136> \xD3 |0
+<U0137> \xF3 |0
+<U0138> \xA2 |0
+<U013B> \xA6 |0
+<U013C> \xB6 |0
+<U0145> \xD1 |0
+<U0146> \xF1 |0
+<U014A> \xBD |0
+<U014B> \xBF |0
+<U014C> \xD2 |0
+<U014D> \xF2 |0
+<U0156> \xA3 |0
+<U0157> \xB3 |0
+<U0160> \xA9 |0
+<U0161> \xB9 |0
+<U0166> \xAC |0
+<U0167> \xBC |0
+<U0168> \xDD |0
+<U0169> \xFD |0
+<U016A> \xDE |0
+<U016B> \xFE |0
+<U0172> \xD9 |0
+<U0173> \xF9 |0
+<U017D> \xAE |0
+<U017E> \xBE |0
+<U02C7> \xB7 |0
+<U02D9> \xFF |0
+<U02DB> \xB2 |0
+<UFF01> \x21 |1
+<UFF02> \x22 |1
+<UFF03> \x23 |1
+<UFF04> \x24 |1
+<UFF05> \x25 |1
+<UFF06> \x26 |1
+<UFF07> \x27 |1
+<UFF08> \x28 |1
+<UFF09> \x29 |1
+<UFF0A> \x2A |1
+<UFF0B> \x2B |1
+<UFF0C> \x2C |1
+<UFF0D> \x2D |1
+<UFF0E> \x2E |1
+<UFF0F> \x2F |1
+<UFF10> \x30 |1
+<UFF11> \x31 |1
+<UFF12> \x32 |1
+<UFF13> \x33 |1
+<UFF14> \x34 |1
+<UFF15> \x35 |1
+<UFF16> \x36 |1
+<UFF17> \x37 |1
+<UFF18> \x38 |1
+<UFF19> \x39 |1
+<UFF1A> \x3A |1
+<UFF1B> \x3B |1
+<UFF1C> \x3C |1
+<UFF1D> \x3D |1
+<UFF1E> \x3E |1
+<UFF1F> \x3F |1
+<UFF20> \x40 |1
+<UFF21> \x41 |1
+<UFF22> \x42 |1
+<UFF23> \x43 |1
+<UFF24> \x44 |1
+<UFF25> \x45 |1
+<UFF26> \x46 |1
+<UFF27> \x47 |1
+<UFF28> \x48 |1
+<UFF29> \x49 |1
+<UFF2A> \x4A |1
+<UFF2B> \x4B |1
+<UFF2C> \x4C |1
+<UFF2D> \x4D |1
+<UFF2E> \x4E |1
+<UFF2F> \x4F |1
+<UFF30> \x50 |1
+<UFF31> \x51 |1
+<UFF32> \x52 |1
+<UFF33> \x53 |1
+<UFF34> \x54 |1
+<UFF35> \x55 |1
+<UFF36> \x56 |1
+<UFF37> \x57 |1
+<UFF38> \x58 |1
+<UFF39> \x59 |1
+<UFF3A> \x5A |1
+<UFF3B> \x5B |1
+<UFF3C> \x5C |1
+<UFF3D> \x5D |1
+<UFF3E> \x5E |1
+<UFF3F> \x5F |1
+<UFF40> \x60 |1
+<UFF41> \x61 |1
+<UFF42> \x62 |1
+<UFF43> \x63 |1
+<UFF44> \x64 |1
+<UFF45> \x65 |1
+<UFF46> \x66 |1
+<UFF47> \x67 |1
+<UFF48> \x68 |1
+<UFF49> \x69 |1
+<UFF4A> \x6A |1
+<UFF4B> \x6B |1
+<UFF4C> \x6C |1
+<UFF4D> \x6D |1
+<UFF4E> \x6E |1
+<UFF4F> \x6F |1
+<UFF50> \x70 |1
+<UFF51> \x71 |1
+<UFF52> \x72 |1
+<UFF53> \x73 |1
+<UFF54> \x74 |1
+<UFF55> \x75 |1
+<UFF56> \x76 |1
+<UFF57> \x77 |1
+<UFF58> \x78 |1
+<UFF59> \x79 |1
+<UFF5A> \x7A |1
+<UFF5B> \x7B |1
+<UFF5C> \x7C |1
+<UFF5D> \x7D |1
+<UFF5E> \x7E |1
+END CHARMAP
diff --git a/mcs/class/I18N/Other/ibm-915.ucm b/mcs/class/I18N/Other/ibm-915.ucm
new file mode 100644
index 00000000000..94e83ddceb4
--- /dev/null
+++ b/mcs/class/I18N/Other/ibm-915.ucm
@@ -0,0 +1,377 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1995-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Mon Nov 13 09:28:04 2000
+#
+# File created by dtcocm version 3.00
+# from source files 34B00393.RPMAP100 and 039334B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-915"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x1A
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-915
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x1A |0
+<U001B> \x1B |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x7F |0
+<U0080> \x80 |0
+<U0081> \x81 |0
+<U0082> \x82 |0
+<U0083> \x83 |0
+<U0084> \x84 |0
+<U0085> \x85 |0
+<U0086> \x86 |0
+<U0087> \x87 |0
+<U0088> \x88 |0
+<U0089> \x89 |0
+<U008A> \x8A |0
+<U008B> \x8B |0
+<U008C> \x8C |0
+<U008D> \x8D |0
+<U008E> \x8E |0
+<U008F> \x8F |0
+<U0090> \x90 |0
+<U0091> \x91 |0
+<U0092> \x92 |0
+<U0093> \x93 |0
+<U0094> \x94 |0
+<U0095> \x95 |0
+<U0096> \x96 |0
+<U0097> \x97 |0
+<U0098> \x98 |0
+<U0099> \x99 |0
+<U009A> \x9A |0
+<U009B> \x9B |0
+<U009C> \x9C |0
+<U009D> \x9D |0
+<U009E> \x9E |0
+<U009F> \x9F |0
+<U00A0> \xA0 |0
+<U00A7> \xFD |0
+<U00AD> \xAD |0
+<U0401> \xA1 |0
+<U0402> \xA2 |0
+<U0403> \xA3 |0
+<U0404> \xA4 |0
+<U0405> \xA5 |0
+<U0406> \xA6 |0
+<U0407> \xA7 |0
+<U0408> \xA8 |0
+<U0409> \xA9 |0
+<U040A> \xAA |0
+<U040B> \xAB |0
+<U040C> \xAC |0
+<U040E> \xAE |0
+<U040F> \xAF |0
+<U0410> \xB0 |0
+<U0411> \xB1 |0
+<U0412> \xB2 |0
+<U0413> \xB3 |0
+<U0414> \xB4 |0
+<U0415> \xB5 |0
+<U0416> \xB6 |0
+<U0417> \xB7 |0
+<U0418> \xB8 |0
+<U0419> \xB9 |0
+<U041A> \xBA |0
+<U041B> \xBB |0
+<U041C> \xBC |0
+<U041D> \xBD |0
+<U041E> \xBE |0
+<U041F> \xBF |0
+<U0420> \xC0 |0
+<U0421> \xC1 |0
+<U0422> \xC2 |0
+<U0423> \xC3 |0
+<U0424> \xC4 |0
+<U0425> \xC5 |0
+<U0426> \xC6 |0
+<U0427> \xC7 |0
+<U0428> \xC8 |0
+<U0429> \xC9 |0
+<U042A> \xCA |0
+<U042B> \xCB |0
+<U042C> \xCC |0
+<U042D> \xCD |0
+<U042E> \xCE |0
+<U042F> \xCF |0
+<U0430> \xD0 |0
+<U0431> \xD1 |0
+<U0432> \xD2 |0
+<U0433> \xD3 |0
+<U0434> \xD4 |0
+<U0435> \xD5 |0
+<U0436> \xD6 |0
+<U0437> \xD7 |0
+<U0438> \xD8 |0
+<U0439> \xD9 |0
+<U043A> \xDA |0
+<U043B> \xDB |0
+<U043C> \xDC |0
+<U043D> \xDD |0
+<U043E> \xDE |0
+<U043F> \xDF |0
+<U0440> \xE0 |0
+<U0441> \xE1 |0
+<U0442> \xE2 |0
+<U0443> \xE3 |0
+<U0444> \xE4 |0
+<U0445> \xE5 |0
+<U0446> \xE6 |0
+<U0447> \xE7 |0
+<U0448> \xE8 |0
+<U0449> \xE9 |0
+<U044A> \xEA |0
+<U044B> \xEB |0
+<U044C> \xEC |0
+<U044D> \xED |0
+<U044E> \xEE |0
+<U044F> \xEF |0
+<U0451> \xF1 |0
+<U0452> \xF2 |0
+<U0453> \xF3 |0
+<U0454> \xF4 |0
+<U0455> \xF5 |0
+<U0456> \xF6 |0
+<U0457> \xF7 |0
+<U0458> \xF8 |0
+<U0459> \xF9 |0
+<U045A> \xFA |0
+<U045B> \xFB |0
+<U045C> \xFC |0
+<U045E> \xFE |0
+<U045F> \xFF |0
+<U2116> \xF0 |0
+<UFF01> \x21 |1
+<UFF02> \x22 |1
+<UFF03> \x23 |1
+<UFF04> \x24 |1
+<UFF05> \x25 |1
+<UFF06> \x26 |1
+<UFF07> \x27 |1
+<UFF08> \x28 |1
+<UFF09> \x29 |1
+<UFF0A> \x2A |1
+<UFF0B> \x2B |1
+<UFF0C> \x2C |1
+<UFF0D> \x2D |1
+<UFF0E> \x2E |1
+<UFF0F> \x2F |1
+<UFF10> \x30 |1
+<UFF11> \x31 |1
+<UFF12> \x32 |1
+<UFF13> \x33 |1
+<UFF14> \x34 |1
+<UFF15> \x35 |1
+<UFF16> \x36 |1
+<UFF17> \x37 |1
+<UFF18> \x38 |1
+<UFF19> \x39 |1
+<UFF1A> \x3A |1
+<UFF1B> \x3B |1
+<UFF1C> \x3C |1
+<UFF1D> \x3D |1
+<UFF1E> \x3E |1
+<UFF1F> \x3F |1
+<UFF20> \x40 |1
+<UFF21> \x41 |1
+<UFF22> \x42 |1
+<UFF23> \x43 |1
+<UFF24> \x44 |1
+<UFF25> \x45 |1
+<UFF26> \x46 |1
+<UFF27> \x47 |1
+<UFF28> \x48 |1
+<UFF29> \x49 |1
+<UFF2A> \x4A |1
+<UFF2B> \x4B |1
+<UFF2C> \x4C |1
+<UFF2D> \x4D |1
+<UFF2E> \x4E |1
+<UFF2F> \x4F |1
+<UFF30> \x50 |1
+<UFF31> \x51 |1
+<UFF32> \x52 |1
+<UFF33> \x53 |1
+<UFF34> \x54 |1
+<UFF35> \x55 |1
+<UFF36> \x56 |1
+<UFF37> \x57 |1
+<UFF38> \x58 |1
+<UFF39> \x59 |1
+<UFF3A> \x5A |1
+<UFF3B> \x5B |1
+<UFF3C> \x5C |1
+<UFF3D> \x5D |1
+<UFF3E> \x5E |1
+<UFF3F> \x5F |1
+<UFF40> \x60 |1
+<UFF41> \x61 |1
+<UFF42> \x62 |1
+<UFF43> \x63 |1
+<UFF44> \x64 |1
+<UFF45> \x65 |1
+<UFF46> \x66 |1
+<UFF47> \x67 |1
+<UFF48> \x68 |1
+<UFF49> \x69 |1
+<UFF4A> \x6A |1
+<UFF4B> \x6B |1
+<UFF4C> \x6C |1
+<UFF4D> \x6D |1
+<UFF4E> \x6E |1
+<UFF4F> \x6F |1
+<UFF50> \x70 |1
+<UFF51> \x71 |1
+<UFF52> \x72 |1
+<UFF53> \x73 |1
+<UFF54> \x74 |1
+<UFF55> \x75 |1
+<UFF56> \x76 |1
+<UFF57> \x77 |1
+<UFF58> \x78 |1
+<UFF59> \x79 |1
+<UFF5A> \x7A |1
+<UFF5B> \x7B |1
+<UFF5C> \x7C |1
+<UFF5D> \x7D |1
+<UFF5E> \x7E |1
+END CHARMAP
diff --git a/mcs/class/I18N/Other/koi8-u.ucm b/mcs/class/I18N/Other/koi8-u.ucm
new file mode 100644
index 00000000000..8ed9c3df14c
--- /dev/null
+++ b/mcs/class/I18N/Other/koi8-u.ucm
@@ -0,0 +1,363 @@
+% This file is a combination of the glibc-2.2.5 charmap for
+% koi8-u, adjusted to IBM's UCM syntax, with extra characters
+% added for full-width Latin 1 -- Rhys Weatherley, 17 April 2002.
+
+<code_set_name> KOI8-U
+<comment_char> %
+<escape_char> /
+% version: 1.1
+% source: RFC 2319
+% source: http://www.net.ua/KOI8-U/
+
+CHARMAP
+<U0000> \x00 |0 NULL (NUL)
+<U0001> \x01 |0 START OF HEADING (SOH)
+<U0002> \x02 |0 START OF TEXT (STX)
+<U0003> \x03 |0 END OF TEXT (ETX)
+<U0004> \x04 |0 END OF TRANSMISSION (EOT)
+<U0005> \x05 |0 ENQUIRY (ENQ)
+<U0006> \x06 |0 ACKNOWLEDGE (ACK)
+<U0007> \x07 |0 BELL (BEL)
+<U0008> \x08 |0 BACKSPACE (BS)
+<U0009> \x09 |0 CHARACTER TABULATION (HT)
+<U000A> \x0a |0 LINE FEED (LF)
+<U000B> \x0b |0 LINE TABULATION (VT)
+<U000C> \x0c |0 FORM FEED (FF)
+<U000D> \x0d |0 CARRIAGE RETURN (CR)
+<U000E> \x0e |0 SHIFT OUT (SO)
+<U000F> \x0f |0 SHIFT IN (SI)
+<U0010> \x10 |0 DATALINK ESCAPE (DLE)
+<U0011> \x11 |0 DEVICE CONTROL ONE (DC1)
+<U0012> \x12 |0 DEVICE CONTROL TWO (DC2)
+<U0013> \x13 |0 DEVICE CONTROL THREE (DC3)
+<U0014> \x14 |0 DEVICE CONTROL FOUR (DC4)
+<U0015> \x15 |0 NEGATIVE ACKNOWLEDGE (NAK)
+<U0016> \x16 |0 SYNCHRONOUS IDLE (SYN)
+<U0017> \x17 |0 END OF TRANSMISSION BLOCK (ETB)
+<U0018> \x18 |0 CANCEL (CAN)
+<U0019> \x19 |0 END OF MEDIUM (EM)
+<U001A> \x1a |0 SUBSTITUTE (SUB)
+<U001B> \x1b |0 ESCAPE (ESC)
+<U001C> \x1c |0 FILE SEPARATOR (IS4)
+<U001D> \x1d |0 GROUP SEPARATOR (IS3)
+<U001E> \x1e |0 RECORD SEPARATOR (IS2)
+<U001F> \x1f |0 UNIT SEPARATOR (IS1)
+<U0020> \x20 |0 SPACE
+<U0021> \x21 |0 EXCLAMATION MARK
+<U0022> \x22 |0 QUOTATION MARK
+<U0023> \x23 |0 NUMBER SIGN
+<U0024> \x24 |0 DOLLAR SIGN
+<U0025> \x25 |0 PERCENT SIGN
+<U0026> \x26 |0 AMPERSAND
+<U0027> \x27 |0 APOSTROPHE
+<U0028> \x28 |0 LEFT PARENTHESIS
+<U0029> \x29 |0 RIGHT PARENTHESIS
+<U002A> \x2a |0 ASTERISK
+<U002B> \x2b |0 PLUS SIGN
+<U002C> \x2c |0 COMMA
+<U002D> \x2d |0 HYPHEN-MINUS
+<U002E> \x2e |0 FULL STOP
+<U002F> \x2f |0 SOLIDUS
+<U0030> \x30 |0 DIGIT ZERO
+<U0031> \x31 |0 DIGIT ONE
+<U0032> \x32 |0 DIGIT TWO
+<U0033> \x33 |0 DIGIT THREE
+<U0034> \x34 |0 DIGIT FOUR
+<U0035> \x35 |0 DIGIT FIVE
+<U0036> \x36 |0 DIGIT SIX
+<U0037> \x37 |0 DIGIT SEVEN
+<U0038> \x38 |0 DIGIT EIGHT
+<U0039> \x39 |0 DIGIT NINE
+<U003A> \x3a |0 COLON
+<U003B> \x3b |0 SEMICOLON
+<U003C> \x3c |0 LESS-THAN SIGN
+<U003D> \x3d |0 EQUALS SIGN
+<U003E> \x3e |0 GREATER-THAN SIGN
+<U003F> \x3f |0 QUESTION MARK
+<U0040> \x40 |0 COMMERCIAL AT
+<U0041> \x41 |0 LATIN CAPITAL LETTER A
+<U0042> \x42 |0 LATIN CAPITAL LETTER B
+<U0043> \x43 |0 LATIN CAPITAL LETTER C
+<U0044> \x44 |0 LATIN CAPITAL LETTER D
+<U0045> \x45 |0 LATIN CAPITAL LETTER E
+<U0046> \x46 |0 LATIN CAPITAL LETTER F
+<U0047> \x47 |0 LATIN CAPITAL LETTER G
+<U0048> \x48 |0 LATIN CAPITAL LETTER H
+<U0049> \x49 |0 LATIN CAPITAL LETTER I
+<U004A> \x4a |0 LATIN CAPITAL LETTER J
+<U004B> \x4b |0 LATIN CAPITAL LETTER K
+<U004C> \x4c |0 LATIN CAPITAL LETTER L
+<U004D> \x4d |0 LATIN CAPITAL LETTER M
+<U004E> \x4e |0 LATIN CAPITAL LETTER N
+<U004F> \x4f |0 LATIN CAPITAL LETTER O
+<U0050> \x50 |0 LATIN CAPITAL LETTER P
+<U0051> \x51 |0 LATIN CAPITAL LETTER Q
+<U0052> \x52 |0 LATIN CAPITAL LETTER R
+<U0053> \x53 |0 LATIN CAPITAL LETTER S
+<U0054> \x54 |0 LATIN CAPITAL LETTER T
+<U0055> \x55 |0 LATIN CAPITAL LETTER U
+<U0056> \x56 |0 LATIN CAPITAL LETTER V
+<U0057> \x57 |0 LATIN CAPITAL LETTER W
+<U0058> \x58 |0 LATIN CAPITAL LETTER X
+<U0059> \x59 |0 LATIN CAPITAL LETTER Y
+<U005A> \x5a |0 LATIN CAPITAL LETTER Z
+<U005B> \x5b |0 LEFT SQUARE BRACKET
+<U005C> \x5c |0 REVERSE SOLIDUS
+<U005D> \x5d |0 RIGHT SQUARE BRACKET
+<U005E> \x5e |0 CIRCUMFLEX ACCENT
+<U005F> \x5f |0 LOW LINE
+<U0060> \x60 |0 GRAVE ACCENT
+<U0061> \x61 |0 LATIN SMALL LETTER A
+<U0062> \x62 |0 LATIN SMALL LETTER B
+<U0063> \x63 |0 LATIN SMALL LETTER C
+<U0064> \x64 |0 LATIN SMALL LETTER D
+<U0065> \x65 |0 LATIN SMALL LETTER E
+<U0066> \x66 |0 LATIN SMALL LETTER F
+<U0067> \x67 |0 LATIN SMALL LETTER G
+<U0068> \x68 |0 LATIN SMALL LETTER H
+<U0069> \x69 |0 LATIN SMALL LETTER I
+<U006A> \x6a |0 LATIN SMALL LETTER J
+<U006B> \x6b |0 LATIN SMALL LETTER K
+<U006C> \x6c |0 LATIN SMALL LETTER L
+<U006D> \x6d |0 LATIN SMALL LETTER M
+<U006E> \x6e |0 LATIN SMALL LETTER N
+<U006F> \x6f |0 LATIN SMALL LETTER O
+<U0070> \x70 |0 LATIN SMALL LETTER P
+<U0071> \x71 |0 LATIN SMALL LETTER Q
+<U0072> \x72 |0 LATIN SMALL LETTER R
+<U0073> \x73 |0 LATIN SMALL LETTER S
+<U0074> \x74 |0 LATIN SMALL LETTER T
+<U0075> \x75 |0 LATIN SMALL LETTER U
+<U0076> \x76 |0 LATIN SMALL LETTER V
+<U0077> \x77 |0 LATIN SMALL LETTER W
+<U0078> \x78 |0 LATIN SMALL LETTER X
+<U0079> \x79 |0 LATIN SMALL LETTER Y
+<U007A> \x7a |0 LATIN SMALL LETTER Z
+<U007B> \x7b |0 LEFT CURLY BRACKET
+<U007C> \x7c |0 VERTICAL LINE
+<U007D> \x7d |0 RIGHT CURLY BRACKET
+<U007E> \x7e |0 TILDE
+<U007F> \x7f |0 DELETE (DEL)
+<U2500> \x80 |0 BOX DRAWINGS LIGHT HORIZONTAL
+<U2502> \x81 |0 BOX DRAWINGS LIGHT VERTICAL
+<U250C> \x82 |0 BOX DRAWINGS LIGHT DOWN AND RIGHT
+<U2510> \x83 |0 BOX DRAWINGS LIGHT DOWN AND LEFT
+<U2514> \x84 |0 BOX DRAWINGS LIGHT UP AND RIGHT
+<U2518> \x85 |0 BOX DRAWINGS LIGHT UP AND LEFT
+<U251C> \x86 |0 BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+<U2524> \x87 |0 BOX DRAWINGS LIGHT VERTICAL AND LEFT
+<U252C> \x88 |0 BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+<U2534> \x89 |0 BOX DRAWINGS LIGHT UP AND HORIZONTAL
+<U253C> \x8a |0 BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+<U2580> \x8b |0 UPPER HALF BLOCK
+<U2584> \x8c |0 LOWER HALF BLOCK
+<U2588> \x8d |0 FULL BLOCK
+<U258C> \x8e |0 LEFT HALF BLOCK
+<U2590> \x8f |0 RIGHT HALF BLOCK
+<U2591> \x90 |0 LIGHT SHADE
+<U2592> \x91 |0 MEDIUM SHADE
+<U2593> \x92 |0 DARK SHADE
+<U2320> \x93 |0 TOP HALF INTEGRAL
+<U25A0> \x94 |0 BLACK SQUARE
+<U2219> \x95 |0 BULLET OPERATOR
+<U221A> \x96 |0 SQUARE ROOT
+<U2248> \x97 |0 ALMOST EQUAL TO
+<U2264> \x98 |0 LESS THAN OR EQUAL TO
+<U2265> \x99 |0 GREATER THAN OR EQUAL TO
+<U00A0> \x9a |0 NO-BREAK SPACE
+<U2321> \x9b |0 BOTTOM HALF INTEGRAL
+<U00B0> \x9c |0 DEGREE SIGN
+<U00B2> \x9d |0 SUPERSCRIPT DIGIT TWO
+<U00B7> \x9e |0 MIDDLE DOT
+<U00F7> \x9f |0 DIVISION SIGN
+<U2550> \xa0 |0 BOX DRAWINGS DOUBLE HORIZONTAL
+<U2551> \xa1 |0 BOX DRAWINGS DOUBLE VERTICAL
+<U2552> \xa2 |0 BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+<U0451> \xa3 |0 CYRILLIC SMALL LETTER IO
+<U0454> \xa4 |0 CYRILLIC SMALL LETTER UKRAINIAN IE
+<U2554> \xa5 |0 BOX DRAWINGS DOUBLE DOWN AND RIGHT
+<U0456> \xa6 |0 CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+<U0457> \xa7 |0 CYRILLIC SMALL LETTER YI (Ukrainian)
+<U2557> \xa8 |0 BOX DRAWINGS DOUBLE DOWN AND LEFT
+<U2558> \xa9 |0 BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+<U2559> \xaa |0 BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+<U255A> \xab |0 BOX DRAWINGS DOUBLE UP AND RIGHT
+<U255B> \xac |0 BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+<U0491> \xad |0 CYRILLIC SMALL LETTER GHE WITH UPTURN
+<U255D> \xae |0 BOX DRAWINGS DOUBLE UP AND LEFT
+<U255E> \xaf |0 BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+<U255F> \xb0 |0 BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+<U2560> \xb1 |0 BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+<U2561> \xb2 |0 BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+<U0401> \xb3 |0 CYRILLIC CAPITAL LETTER IO
+<U0404> \xb4 |0 CYRILLIC CAPITAL LETTER UKRAINIAN IE
+<U2563> \xb5 |0 DOUBLE VERTICAL AND LEFT
+<U0406> \xb6 |0 CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+<U0407> \xb7 |0 CYRILLIC CAPITAL LETTER YI (Ukrainian)
+<U2566> \xb8 |0 BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+<U2567> \xb9 |0 BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+<U2568> \xba |0 BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+<U2569> \xbb |0 BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+<U256A> \xbc |0 BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+<U0490> \xbd |0 CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+<U256C> \xbe |0 BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+<U00A9> \xbf |0 COPYRIGHT SIGN
+<U044E> \xc0 |0 CYRILLIC SMALL LETTER YU
+<U0430> \xc1 |0 CYRILLIC SMALL LETTER A
+<U0431> \xc2 |0 CYRILLIC SMALL LETTER BE
+<U0446> \xc3 |0 CYRILLIC SMALL LETTER TSE
+<U0434> \xc4 |0 CYRILLIC SMALL LETTER DE
+<U0435> \xc5 |0 CYRILLIC SMALL LETTER IE
+<U0444> \xc6 |0 CYRILLIC SMALL LETTER EF
+<U0433> \xc7 |0 CYRILLIC SMALL LETTER GHE
+<U0445> \xc8 |0 CYRILLIC SMALL LETTER HA
+<U0438> \xc9 |0 CYRILLIC SMALL LETTER I
+<U0439> \xca |0 CYRILLIC SMALL LETTER SHORT I
+<U043A> \xcb |0 CYRILLIC SMALL LETTER KA
+<U043B> \xcc |0 CYRILLIC SMALL LETTER EL
+<U043C> \xcd |0 CYRILLIC SMALL LETTER EM
+<U043D> \xce |0 CYRILLIC SMALL LETTER EN
+<U043E> \xcf |0 CYRILLIC SMALL LETTER O
+<U043F> \xd0 |0 CYRILLIC SMALL LETTER PE
+<U044F> \xd1 |0 CYRILLIC SMALL LETTER YA
+<U0440> \xd2 |0 CYRILLIC SMALL LETTER ER
+<U0441> \xd3 |0 CYRILLIC SMALL LETTER ES
+<U0442> \xd4 |0 CYRILLIC SMALL LETTER TE
+<U0443> \xd5 |0 CYRILLIC SMALL LETTER U
+<U0436> \xd6 |0 CYRILLIC SMALL LETTER ZHE
+<U0432> \xd7 |0 CYRILLIC SMALL LETTER VE
+<U044C> \xd8 |0 CYRILLIC SMALL LETTER SOFT SIGN
+<U044B> \xd9 |0 CYRILLIC SMALL LETTER YERU
+<U0437> \xda |0 CYRILLIC SMALL LETTER ZE
+<U0448> \xdb |0 CYRILLIC SMALL LETTER SHA
+<U044D> \xdc |0 CYRILLIC SMALL LETTER E
+<U0449> \xdd |0 CYRILLIC SMALL LETTER SHCHA
+<U0447> \xde |0 CYRILLIC SMALL LETTER CHE
+<U044A> \xdf |0 CYRILLIC SMALL LETTER HARD SIGN
+<U042E> \xe0 |0 CYRILLIC CAPITAL LETTER YU
+<U0410> \xe1 |0 CYRILLIC CAPITAL LETTER A
+<U0411> \xe2 |0 CYRILLIC CAPITAL LETTER BE
+<U0426> \xe3 |0 CYRILLIC CAPITAL LETTER TSE
+<U0414> \xe4 |0 CYRILLIC CAPITAL LETTER DE
+<U0415> \xe5 |0 CYRILLIC CAPITAL LETTER IE
+<U0424> \xe6 |0 CYRILLIC CAPITAL LETTER EF
+<U0413> \xe7 |0 CYRILLIC CAPITAL LETTER GHE
+<U0425> \xe8 |0 CYRILLIC CAPITAL LETTER HA
+<U0418> \xe9 |0 CYRILLIC CAPITAL LETTER I
+<U0419> \xea |0 CYRILLIC CAPITAL LETTER SHORT I
+<U041A> \xeb |0 CYRILLIC CAPITAL LETTER KA
+<U041B> \xec |0 CYRILLIC CAPITAL LETTER EL
+<U041C> \xed |0 CYRILLIC CAPITAL LETTER EM
+<U041D> \xee |0 CYRILLIC CAPITAL LETTER EN
+<U041E> \xef |0 CYRILLIC CAPITAL LETTER O
+<U041F> \xf0 |0 CYRILLIC CAPITAL LETTER PE
+<U042F> \xf1 |0 CYRILLIC CAPITAL LETTER YA
+<U0420> \xf2 |0 CYRILLIC CAPITAL LETTER ER
+<U0421> \xf3 |0 CYRILLIC CAPITAL LETTER ES
+<U0422> \xf4 |0 CYRILLIC CAPITAL LETTER TE
+<U0423> \xf5 |0 CYRILLIC CAPITAL LETTER U
+<U0416> \xf6 |0 CYRILLIC CAPITAL LETTER ZHE
+<U0412> \xf7 |0 CYRILLIC CAPITAL LETTER VE
+<U042C> \xf8 |0 CYRILLIC CAPITAL LETTER SOFT SIGN
+<U042B> \xf9 |0 CYRILLIC CAPITAL LETTER YERU
+<U0417> \xfa |0 CYRILLIC CAPITAL LETTER ZE
+<U0428> \xfb |0 CYRILLIC CAPITAL LETTER SHA
+<U042D> \xfc |0 CYRILLIC CAPITAL LETTER E
+<U0429> \xfd |0 CYRILLIC CAPITAL LETTER SHCHA
+<U0427> \xfe |0 CYRILLIC CAPITAL LETTER CHE
+<U042A> \xff |0 CYRILLIC CAPITAL LETTER HARD SIGN
+<UFF01> \x21 |1
+<UFF02> \x22 |1
+<UFF03> \x23 |1
+<UFF04> \x24 |1
+<UFF05> \x25 |1
+<UFF06> \x26 |1
+<UFF07> \x27 |1
+<UFF08> \x28 |1
+<UFF09> \x29 |1
+<UFF0A> \x2A |1
+<UFF0B> \x2B |1
+<UFF0C> \x2C |1
+<UFF0D> \x2D |1
+<UFF0E> \x2E |1
+<UFF0F> \x2F |1
+<UFF10> \x30 |1
+<UFF11> \x31 |1
+<UFF12> \x32 |1
+<UFF13> \x33 |1
+<UFF14> \x34 |1
+<UFF15> \x35 |1
+<UFF16> \x36 |1
+<UFF17> \x37 |1
+<UFF18> \x38 |1
+<UFF19> \x39 |1
+<UFF1A> \x3A |1
+<UFF1B> \x3B |1
+<UFF1C> \x3C |1
+<UFF1D> \x3D |1
+<UFF1E> \x3E |1
+<UFF1F> \x3F |1
+<UFF20> \x40 |1
+<UFF21> \x41 |1
+<UFF22> \x42 |1
+<UFF23> \x43 |1
+<UFF24> \x44 |1
+<UFF25> \x45 |1
+<UFF26> \x46 |1
+<UFF27> \x47 |1
+<UFF28> \x48 |1
+<UFF29> \x49 |1
+<UFF2A> \x4A |1
+<UFF2B> \x4B |1
+<UFF2C> \x4C |1
+<UFF2D> \x4D |1
+<UFF2E> \x4E |1
+<UFF2F> \x4F |1
+<UFF30> \x50 |1
+<UFF31> \x51 |1
+<UFF32> \x52 |1
+<UFF33> \x53 |1
+<UFF34> \x54 |1
+<UFF35> \x55 |1
+<UFF36> \x56 |1
+<UFF37> \x57 |1
+<UFF38> \x58 |1
+<UFF39> \x59 |1
+<UFF3A> \x5A |1
+<UFF3B> \x5B |1
+<UFF3C> \x5C |1
+<UFF3D> \x5D |1
+<UFF3E> \x5E |1
+<UFF3F> \x5F |1
+<UFF40> \x60 |1
+<UFF41> \x61 |1
+<UFF42> \x62 |1
+<UFF43> \x63 |1
+<UFF44> \x64 |1
+<UFF45> \x65 |1
+<UFF46> \x66 |1
+<UFF47> \x67 |1
+<UFF48> \x68 |1
+<UFF49> \x69 |1
+<UFF4A> \x6A |1
+<UFF4B> \x6B |1
+<UFF4C> \x6C |1
+<UFF4D> \x6D |1
+<UFF4E> \x6E |1
+<UFF4F> \x6F |1
+<UFF50> \x70 |1
+<UFF51> \x71 |1
+<UFF52> \x72 |1
+<UFF53> \x73 |1
+<UFF54> \x74 |1
+<UFF55> \x75 |1
+<UFF56> \x76 |1
+<UFF57> \x77 |1
+<UFF58> \x78 |1
+<UFF59> \x79 |1
+<UFF5A> \x7A |1
+<UFF5B> \x7B |1
+<UFF5C> \x7C |1
+<UFF5D> \x7D |1
+<UFF5E> \x7E |1
+END CHARMAP
diff --git a/mcs/class/I18N/Other/list.unix b/mcs/class/I18N/Other/list.unix
new file mode 100755
index 00000000000..ba7d74a68db
--- /dev/null
+++ b/mcs/class/I18N/Other/list.unix
@@ -0,0 +1,9 @@
+CP1251.cs
+CP1257.cs
+CP1258.cs
+CP20866.cs
+CP21866.cs
+CP28594.cs
+CP28595.cs
+CP57002.cs
+CP874.cs
diff --git a/mcs/class/I18N/Other/makefile.gnu b/mcs/class/I18N/Other/makefile.gnu
new file mode 100755
index 00000000000..c13fbb95068
--- /dev/null
+++ b/mcs/class/I18N/Other/makefile.gnu
@@ -0,0 +1,13 @@
+topdir = ../../..
+
+LIBRARY = $(topdir)/class/lib/I18N.Other.dll
+
+LIB_LIST = list.unix
+LIB_FLAGS = -r corlib -r mscorlib -r I18N
+
+SOURCES_INCLUDE=*.cs
+SOURCES_EXCLUDE=
+
+export MONO_PATH_PREFIX = $(topdir)/class/lib:
+
+include $(topdir)/class/library.make
diff --git a/mcs/class/I18N/README b/mcs/class/I18N/README
new file mode 100644
index 00000000000..29852983254
--- /dev/null
+++ b/mcs/class/I18N/README
@@ -0,0 +1,158 @@
+
+I18N: Pnetlib Internationalization Framework Libary
+===================================================
+
+Using the library
+-----------------
+
+This library provides plug-in i18n module support for C# base class
+libraries such as pnetlib's "runtime". The base class library uses
+it as follows:
+
+ - Load the "I18N.dll" assembly using "System.Reflection.Assembly.Load".
+
+ - Obtain the value of the static "PrimaryManager" property within the
+ "I18N.Common.Manager" class using "System.Reflection" facilities.
+
+ - Invoke methods on the manager class to obtain i18n-sensitive
+ objects such as "CultureInfo" and "Encoding" instances.
+
+ - The "I18N.Common.Manager" class loads the requested i18n object
+ and returns it to the base class library, which can then use it
+ in the usual fashion.
+
+A more detailed example is given in a later section.
+
+I18N handlers
+-------------
+
+Because there are so many i18n-sensitive cases to be handled, the culture
+information has been split across several region-specific assemblies:
+
+ I18N.CJK.dll
+ I18N.MidEast.dll
+ I18N.Other.dll
+ I18N.Rare.dll
+ I18N.West.dll
+
+The "I18N.dll" assembly only loads those region-specific assemblies that
+it needs, based on the user's requests.
+
+I18N handlers within these assemblies use the naming convention
+"I18N.<Region>.<Prefix><Value>" where:
+
+ <Region>
+ The region handler. e.g. "West", "CJK", "India", etc.
+
+ <Prefix>
+ The prefix for the handler type.
+
+ <Value>
+ The identifier value which is supplied by the caller.
+ e.g. a culture identifier, an encoding name, etc.
+
+The following prefixes are supported:
+
+ CP
+ Code page handler. e.g. "CP1252".
+
+ ENC
+ Web encoding handler. e.g. "ENCiso_8869_8".
+
+ CID
+ Culture, based on identifier. e.g. "CID2c01".
+
+ CIDO
+
+ Culture, based on identifier, with user overrides. e.g. "CIDO2c01".
+ Falls back to the "CID" handler if no override handler.
+
+ CN
+ Culture, based on name. e.g. "CNar_jo".
+
+ CNO
+ Culture, based on name, with user overrides. e.g. "CNOar_jo".
+ Falls back to the "CN" handler if no override handler.
+
+Handlers that are based on name will normalize the name to be in all
+lower case, with all instances of '-' replaced with '_'.
+
+The "I18N.dll" assembly knows which region assembly to load from the
+"I18N-handlers.def" file. This file is automatically generated during
+the build process and contains a list of all I18N handler classes.
+It must reside in the same directory as "I18N.dll".
+
+Example
+-------
+
+As an example of the I18N loading process, we will describe what happens
+when code page 932 is requested:
+
+ - The user's code calls "System.Text.Encoding.GetEncoding(932)".
+
+ - The "Encoding" class loads "I18N.dll" using reflection.
+
+ - The "Encoding" class accesses the "PrimaryManager" property via
+ reflection to get an instance of "I18N.Common.Manager".
+
+ - The "Encoding" class calls the "GetEncoding(int)" method on
+ the "I18N.Common.Manager" instance using reflection.
+
+ - "I18N.Common.Manager" constructs the name of the handler class - "CP932".
+
+ - The file "I18N-handlers.def" is consulted to determine the full
+ namespace and name of the "CP932" class - "I18N.CJK.CP932".
+
+ - The region assembly "I18N.CJK.dll" is loaded using reflection.
+
+ - An instance of the class "I18N.CJK.CP923" in the loaded assembly
+ is constructed and returned to the caller.
+
+The results of previous requests are cached to smooth overall performance
+of the system.
+
+Dependencies
+------------
+
+This section describes the facilities that must be available from the
+base class library to make the I18N framework function.
+
+The framework makes heavy use of facilities from "System.Reflection"
+to load assemblies and to access their contents.
+
+String resources are assumed to be embedded as manifest string resources,
+based on tag names. The "I18N.Common.Strings" class takes care of the
+resource needs of all of the I18N assemblies. It relies upon a working
+implementation of "ResourceManager", that can load and process manifest
+string resources.
+
+It is assumed that the base class library contains its own implementation
+of the invariant culture. i.e. the invariant culture cannot be loaded
+dynamically.
+
+The "I18N.CJK.dll" assembly contains a single "InternalCall" method in
+the "I18N.CJK.CodeTable" class if the "__PNET__" symbol is defined when
+the assembly is compiled. This gives more efficient access to conversion
+CJK tables when running on the Portable.NET runtime engine. If the
+"__PNET__" symbol is not defined, then the implementation will fall back
+to a less efficient way of loading the tables.
+
+The method "System.Reflection.Assembly.GetFile(String)" is assumed to
+have slightly different semantics to the .NET Framework SDK. Normally,
+this method accesses a file that is listed in the assembly manifest.
+We have extended it so that it can also access files in the same directory
+as the assembly, even if not mentioned in the manifest.
+
+The altered semantics is necessary to access the "I18N-handlers.def" file,
+which defines which assembly contains which I18N handler. This file can
+be altered by third parties to install new handler assemblies.
+
+If the runtime engine does not implement the altered "GetFile" semantics,
+the library will fall back to an internal list that must be maintained
+internally and which cannot be dynamically extended by third parties.
+
+Security considerations
+-----------------------
+
+The "GetAddress" and "GetFile" methods need to be implemented carefully
+to prevent arbitrary applications using them to circumvent system security.
diff --git a/mcs/class/I18N/README.mono b/mcs/class/I18N/README.mono
new file mode 100755
index 00000000000..dcedd9c2264
--- /dev/null
+++ b/mcs/class/I18N/README.mono
@@ -0,0 +1,13 @@
+Note: the I18N assemblies code is imported from the pnetlib sources.
+The code was donated by Rhys Weatherley <rweather@southern-storm.com.au>
+for use in mono.
+_Any_ change and bugfix to these assemblies that is not mono-specific
+should be also sent to the pnetlib maintainers to keep the sources in
+sync as much as possible.
+
+The code was initially imported with the command:
+ cvs -d login@mono-cvs.ximian.com:/cvs/public import -m "First import" \
+ mcs/class/I18N SAVANNAH_CVS RHYS_20020821
+
+Please follow the same convention for future imports. Thanks.
+
diff --git a/mcs/class/I18N/Rare/.cvsignore b/mcs/class/I18N/Rare/.cvsignore
new file mode 100644
index 00000000000..0c2ee6906fa
--- /dev/null
+++ b/mcs/class/I18N/Rare/.cvsignore
@@ -0,0 +1,4 @@
+list
+.makefrag
+.response
+library-deps.stamp
diff --git a/mcs/class/I18N/Rare/CP1026.cs b/mcs/class/I18N/Rare/CP1026.cs
new file mode 100644
index 00000000000..82dffbbd0ca
--- /dev/null
+++ b/mcs/class/I18N/Rare/CP1026.cs
@@ -0,0 +1,895 @@
+/*
+ * CP1026.cs - IBM EBCDIC (Turkish) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-1026.ucm".
+
+namespace I18N.Rare
+{
+
+using System;
+using I18N.Common;
+
+public class CP1026 : ByteEncoding
+{
+ public CP1026()
+ : base(1026, ToChars, "IBM EBCDIC (Turkish)",
+ "ibm1026", "ibm1026", "ibm1026",
+ false, false, false, false, 1254)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u009C', '\u0009',
+ '\u0086', '\u007F', '\u0097', '\u008D', '\u008E', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u009D', '\u0085', '\u0008', '\u0087',
+ '\u0018', '\u0019', '\u0092', '\u008F', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0080', '\u0081', '\u0082', '\u0083',
+ '\u0084', '\u000A', '\u0017', '\u001B', '\u0088', '\u0089',
+ '\u008A', '\u008B', '\u008C', '\u0005', '\u0006', '\u0007',
+ '\u0090', '\u0091', '\u0016', '\u0093', '\u0094', '\u0095',
+ '\u0096', '\u0004', '\u0098', '\u0099', '\u009A', '\u009B',
+ '\u0014', '\u0015', '\u009E', '\u001A', '\u0020', '\u00A0',
+ '\u00E2', '\u00E4', '\u00E0', '\u00E1', '\u00E3', '\u00E5',
+ '\u007B', '\u00F1', '\u00C7', '\u002E', '\u003C', '\u0028',
+ '\u002B', '\u0021', '\u0026', '\u00E9', '\u00EA', '\u00EB',
+ '\u00E8', '\u00ED', '\u00EE', '\u00EF', '\u00EC', '\u00DF',
+ '\u011E', '\u0130', '\u002A', '\u0029', '\u003B', '\u005E',
+ '\u002D', '\u002F', '\u00C2', '\u00C4', '\u00C0', '\u00C1',
+ '\u00C3', '\u00C5', '\u005B', '\u00D1', '\u015F', '\u002C',
+ '\u0025', '\u005F', '\u003E', '\u003F', '\u00F8', '\u00C9',
+ '\u00CA', '\u00CB', '\u00C8', '\u00CD', '\u00CE', '\u00CF',
+ '\u00CC', '\u0131', '\u003A', '\u00D6', '\u015E', '\u0027',
+ '\u003D', '\u00DC', '\u00D8', '\u0061', '\u0062', '\u0063',
+ '\u0064', '\u0065', '\u0066', '\u0067', '\u0068', '\u0069',
+ '\u00AB', '\u00BB', '\u007D', '\u0060', '\u00A6', '\u00B1',
+ '\u00B0', '\u006A', '\u006B', '\u006C', '\u006D', '\u006E',
+ '\u006F', '\u0070', '\u0071', '\u0072', '\u00AA', '\u00BA',
+ '\u00E6', '\u00B8', '\u00C6', '\u00A4', '\u00B5', '\u00F6',
+ '\u0073', '\u0074', '\u0075', '\u0076', '\u0077', '\u0078',
+ '\u0079', '\u007A', '\u00A1', '\u00BF', '\u005D', '\u0024',
+ '\u0040', '\u00AE', '\u00A2', '\u00A3', '\u00A5', '\u00B7',
+ '\u00A9', '\u00A7', '\u00B6', '\u00BC', '\u00BD', '\u00BE',
+ '\u00AC', '\u007C', '\u00AF', '\u00A8', '\u00B4', '\u00D7',
+ '\u00E7', '\u0041', '\u0042', '\u0043', '\u0044', '\u0045',
+ '\u0046', '\u0047', '\u0048', '\u0049', '\u00AD', '\u00F4',
+ '\u007E', '\u00F2', '\u00F3', '\u00F5', '\u011F', '\u004A',
+ '\u004B', '\u004C', '\u004D', '\u004E', '\u004F', '\u0050',
+ '\u0051', '\u0052', '\u00B9', '\u00FB', '\u005C', '\u00F9',
+ '\u00FA', '\u00FF', '\u00FC', '\u00F7', '\u0053', '\u0054',
+ '\u0055', '\u0056', '\u0057', '\u0058', '\u0059', '\u005A',
+ '\u00B2', '\u00D4', '\u0023', '\u00D2', '\u00D3', '\u00D5',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u00B3', '\u00DB',
+ '\u0022', '\u00D9', '\u00DA', '\u009F',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x00B6:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x4F; break;
+ case 0x0022: ch = 0xFC; break;
+ case 0x0023: ch = 0xEC; break;
+ case 0x0024: ch = 0xAD; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0xAE; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0x68; break;
+ case 0x005C: ch = 0xDC; break;
+ case 0x005D: ch = 0xAC; break;
+ case 0x005E: ch = 0x5F; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0x8D; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0x48; break;
+ case 0x007C: ch = 0xBB; break;
+ case 0x007D: ch = 0x8C; break;
+ case 0x007E: ch = 0xCC; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A1: ch = 0xAA; break;
+ case 0x00A2: ch = 0xB0; break;
+ case 0x00A3: ch = 0xB1; break;
+ case 0x00A4: ch = 0x9F; break;
+ case 0x00A5: ch = 0xB2; break;
+ case 0x00A6: ch = 0x8E; break;
+ case 0x00A7: ch = 0xB5; break;
+ case 0x00A8: ch = 0xBD; break;
+ case 0x00A9: ch = 0xB4; break;
+ case 0x00AA: ch = 0x9A; break;
+ case 0x00AB: ch = 0x8A; break;
+ case 0x00AC: ch = 0xBA; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00AE: ch = 0xAF; break;
+ case 0x00AF: ch = 0xBC; break;
+ case 0x00B0: ch = 0x90; break;
+ case 0x00B1: ch = 0x8F; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xBE; break;
+ case 0x00B5: ch = 0xA0; break;
+ case 0x00B7: ch = 0xB3; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00B9: ch = 0xDA; break;
+ case 0x00BA: ch = 0x9B; break;
+ case 0x00BB: ch = 0x8B; break;
+ case 0x00BC: ch = 0xB7; break;
+ case 0x00BD: ch = 0xB8; break;
+ case 0x00BE: ch = 0xB9; break;
+ case 0x00BF: ch = 0xAB; break;
+ case 0x00C0: ch = 0x64; break;
+ case 0x00C1: ch = 0x65; break;
+ case 0x00C2: ch = 0x62; break;
+ case 0x00C3: ch = 0x66; break;
+ case 0x00C4: ch = 0x63; break;
+ case 0x00C5: ch = 0x67; break;
+ case 0x00C6: ch = 0x9E; break;
+ case 0x00C7: ch = 0x4A; break;
+ case 0x00C8: ch = 0x74; break;
+ case 0x00C9: ch = 0x71; break;
+ case 0x00CA: ch = 0x72; break;
+ case 0x00CB: ch = 0x73; break;
+ case 0x00CC: ch = 0x78; break;
+ case 0x00CD: ch = 0x75; break;
+ case 0x00CE: ch = 0x76; break;
+ case 0x00CF: ch = 0x77; break;
+ case 0x00D1: ch = 0x69; break;
+ case 0x00D2: ch = 0xED; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEB; break;
+ case 0x00D5: ch = 0xEF; break;
+ case 0x00D6: ch = 0x7B; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00D8: ch = 0x80; break;
+ case 0x00D9: ch = 0xFD; break;
+ case 0x00DA: ch = 0xFE; break;
+ case 0x00DB: ch = 0xFB; break;
+ case 0x00DC: ch = 0x7F; break;
+ case 0x00DF: ch = 0x59; break;
+ case 0x00E0: ch = 0x44; break;
+ case 0x00E1: ch = 0x45; break;
+ case 0x00E2: ch = 0x42; break;
+ case 0x00E3: ch = 0x46; break;
+ case 0x00E4: ch = 0x43; break;
+ case 0x00E5: ch = 0x47; break;
+ case 0x00E6: ch = 0x9C; break;
+ case 0x00E7: ch = 0xC0; break;
+ case 0x00E8: ch = 0x54; break;
+ case 0x00E9: ch = 0x51; break;
+ case 0x00EA: ch = 0x52; break;
+ case 0x00EB: ch = 0x53; break;
+ case 0x00EC: ch = 0x58; break;
+ case 0x00ED: ch = 0x55; break;
+ case 0x00EE: ch = 0x56; break;
+ case 0x00EF: ch = 0x57; break;
+ case 0x00F1: ch = 0x49; break;
+ case 0x00F2: ch = 0xCD; break;
+ case 0x00F3: ch = 0xCE; break;
+ case 0x00F4: ch = 0xCB; break;
+ case 0x00F5: ch = 0xCF; break;
+ case 0x00F6: ch = 0xA1; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x00F8: ch = 0x70; break;
+ case 0x00F9: ch = 0xDD; break;
+ case 0x00FA: ch = 0xDE; break;
+ case 0x00FB: ch = 0xDB; break;
+ case 0x00FC: ch = 0xE0; break;
+ case 0x00FF: ch = 0xDF; break;
+ case 0x011E: ch = 0x5A; break;
+ case 0x011F: ch = 0xD0; break;
+ case 0x0130: ch = 0x5B; break;
+ case 0x0131: ch = 0x79; break;
+ case 0x015E: ch = 0x7C; break;
+ case 0x015F: ch = 0x6A; break;
+ case 0x203E: ch = 0xBC; break;
+ case 0xFF01: ch = 0x4F; break;
+ case 0xFF02: ch = 0xFC; break;
+ case 0xFF03: ch = 0xEC; break;
+ case 0xFF04: ch = 0xAD; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0xAE; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0x68; break;
+ case 0xFF3C: ch = 0xDC; break;
+ case 0xFF3D: ch = 0xAC; break;
+ case 0xFF3E: ch = 0x5F; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0x8D; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0x48; break;
+ case 0xFF5C: ch = 0xBB; break;
+ case 0xFF5D: ch = 0x8C; break;
+ case 0xFF5E: ch = 0xCC; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x00B6:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x4F; break;
+ case 0x0022: ch = 0xFC; break;
+ case 0x0023: ch = 0xEC; break;
+ case 0x0024: ch = 0xAD; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0xAE; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0x68; break;
+ case 0x005C: ch = 0xDC; break;
+ case 0x005D: ch = 0xAC; break;
+ case 0x005E: ch = 0x5F; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0x8D; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0x48; break;
+ case 0x007C: ch = 0xBB; break;
+ case 0x007D: ch = 0x8C; break;
+ case 0x007E: ch = 0xCC; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A1: ch = 0xAA; break;
+ case 0x00A2: ch = 0xB0; break;
+ case 0x00A3: ch = 0xB1; break;
+ case 0x00A4: ch = 0x9F; break;
+ case 0x00A5: ch = 0xB2; break;
+ case 0x00A6: ch = 0x8E; break;
+ case 0x00A7: ch = 0xB5; break;
+ case 0x00A8: ch = 0xBD; break;
+ case 0x00A9: ch = 0xB4; break;
+ case 0x00AA: ch = 0x9A; break;
+ case 0x00AB: ch = 0x8A; break;
+ case 0x00AC: ch = 0xBA; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00AE: ch = 0xAF; break;
+ case 0x00AF: ch = 0xBC; break;
+ case 0x00B0: ch = 0x90; break;
+ case 0x00B1: ch = 0x8F; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xBE; break;
+ case 0x00B5: ch = 0xA0; break;
+ case 0x00B7: ch = 0xB3; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00B9: ch = 0xDA; break;
+ case 0x00BA: ch = 0x9B; break;
+ case 0x00BB: ch = 0x8B; break;
+ case 0x00BC: ch = 0xB7; break;
+ case 0x00BD: ch = 0xB8; break;
+ case 0x00BE: ch = 0xB9; break;
+ case 0x00BF: ch = 0xAB; break;
+ case 0x00C0: ch = 0x64; break;
+ case 0x00C1: ch = 0x65; break;
+ case 0x00C2: ch = 0x62; break;
+ case 0x00C3: ch = 0x66; break;
+ case 0x00C4: ch = 0x63; break;
+ case 0x00C5: ch = 0x67; break;
+ case 0x00C6: ch = 0x9E; break;
+ case 0x00C7: ch = 0x4A; break;
+ case 0x00C8: ch = 0x74; break;
+ case 0x00C9: ch = 0x71; break;
+ case 0x00CA: ch = 0x72; break;
+ case 0x00CB: ch = 0x73; break;
+ case 0x00CC: ch = 0x78; break;
+ case 0x00CD: ch = 0x75; break;
+ case 0x00CE: ch = 0x76; break;
+ case 0x00CF: ch = 0x77; break;
+ case 0x00D1: ch = 0x69; break;
+ case 0x00D2: ch = 0xED; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEB; break;
+ case 0x00D5: ch = 0xEF; break;
+ case 0x00D6: ch = 0x7B; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00D8: ch = 0x80; break;
+ case 0x00D9: ch = 0xFD; break;
+ case 0x00DA: ch = 0xFE; break;
+ case 0x00DB: ch = 0xFB; break;
+ case 0x00DC: ch = 0x7F; break;
+ case 0x00DF: ch = 0x59; break;
+ case 0x00E0: ch = 0x44; break;
+ case 0x00E1: ch = 0x45; break;
+ case 0x00E2: ch = 0x42; break;
+ case 0x00E3: ch = 0x46; break;
+ case 0x00E4: ch = 0x43; break;
+ case 0x00E5: ch = 0x47; break;
+ case 0x00E6: ch = 0x9C; break;
+ case 0x00E7: ch = 0xC0; break;
+ case 0x00E8: ch = 0x54; break;
+ case 0x00E9: ch = 0x51; break;
+ case 0x00EA: ch = 0x52; break;
+ case 0x00EB: ch = 0x53; break;
+ case 0x00EC: ch = 0x58; break;
+ case 0x00ED: ch = 0x55; break;
+ case 0x00EE: ch = 0x56; break;
+ case 0x00EF: ch = 0x57; break;
+ case 0x00F1: ch = 0x49; break;
+ case 0x00F2: ch = 0xCD; break;
+ case 0x00F3: ch = 0xCE; break;
+ case 0x00F4: ch = 0xCB; break;
+ case 0x00F5: ch = 0xCF; break;
+ case 0x00F6: ch = 0xA1; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x00F8: ch = 0x70; break;
+ case 0x00F9: ch = 0xDD; break;
+ case 0x00FA: ch = 0xDE; break;
+ case 0x00FB: ch = 0xDB; break;
+ case 0x00FC: ch = 0xE0; break;
+ case 0x00FF: ch = 0xDF; break;
+ case 0x011E: ch = 0x5A; break;
+ case 0x011F: ch = 0xD0; break;
+ case 0x0130: ch = 0x5B; break;
+ case 0x0131: ch = 0x79; break;
+ case 0x015E: ch = 0x7C; break;
+ case 0x015F: ch = 0x6A; break;
+ case 0x203E: ch = 0xBC; break;
+ case 0xFF01: ch = 0x4F; break;
+ case 0xFF02: ch = 0xFC; break;
+ case 0xFF03: ch = 0xEC; break;
+ case 0xFF04: ch = 0xAD; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0xAE; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0x68; break;
+ case 0xFF3C: ch = 0xDC; break;
+ case 0xFF3D: ch = 0xAC; break;
+ case 0xFF3E: ch = 0x5F; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0x8D; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0x48; break;
+ case 0xFF5C: ch = 0xBB; break;
+ case 0xFF5D: ch = 0x8C; break;
+ case 0xFF5E: ch = 0xCC; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP1026
+
+public class ENCibm1026 : CP1026
+{
+ public ENCibm1026() : base() {}
+
+}; // class ENCibm1026
+
+}; // namespace I18N.Rare
diff --git a/mcs/class/I18N/Rare/CP1047.cs b/mcs/class/I18N/Rare/CP1047.cs
new file mode 100644
index 00000000000..9c6da572a3f
--- /dev/null
+++ b/mcs/class/I18N/Rare/CP1047.cs
@@ -0,0 +1,895 @@
+/*
+ * CP1047.cs - IBM EBCDIC (Open Systems Latin 1) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-1047.ucm".
+
+namespace I18N.Rare
+{
+
+using System;
+using I18N.Common;
+
+public class CP1047 : ByteEncoding
+{
+ public CP1047()
+ : base(1047, ToChars, "IBM EBCDIC (Open Systems Latin 1)",
+ "ibm1047", "ibm1047", "ibm1047",
+ false, false, false, false, 1252)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u009C', '\u0009',
+ '\u0086', '\u007F', '\u0097', '\u008D', '\u008E', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u009D', '\u0085', '\u0008', '\u0087',
+ '\u0018', '\u0019', '\u0092', '\u008F', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0080', '\u0081', '\u0082', '\u0083',
+ '\u0084', '\u000A', '\u0017', '\u001B', '\u0088', '\u0089',
+ '\u008A', '\u008B', '\u008C', '\u0005', '\u0006', '\u0007',
+ '\u0090', '\u0091', '\u0016', '\u0093', '\u0094', '\u0095',
+ '\u0096', '\u0004', '\u0098', '\u0099', '\u009A', '\u009B',
+ '\u0014', '\u0015', '\u009E', '\u001A', '\u0020', '\u00A0',
+ '\u00E2', '\u00E4', '\u00E0', '\u00E1', '\u00E3', '\u00E5',
+ '\u00E7', '\u00F1', '\u00A2', '\u002E', '\u003C', '\u0028',
+ '\u002B', '\u007C', '\u0026', '\u00E9', '\u00EA', '\u00EB',
+ '\u00E8', '\u00ED', '\u00EE', '\u00EF', '\u00EC', '\u00DF',
+ '\u0021', '\u0024', '\u002A', '\u0029', '\u003B', '\u005E',
+ '\u002D', '\u002F', '\u00C2', '\u00C4', '\u00C0', '\u00C1',
+ '\u00C3', '\u00C5', '\u00C7', '\u00D1', '\u00A6', '\u002C',
+ '\u0025', '\u005F', '\u003E', '\u003F', '\u00F8', '\u00C9',
+ '\u00CA', '\u00CB', '\u00C8', '\u00CD', '\u00CE', '\u00CF',
+ '\u00CC', '\u0060', '\u003A', '\u0023', '\u0040', '\u0027',
+ '\u003D', '\u0022', '\u00D8', '\u0061', '\u0062', '\u0063',
+ '\u0064', '\u0065', '\u0066', '\u0067', '\u0068', '\u0069',
+ '\u00AB', '\u00BB', '\u00F0', '\u00FD', '\u00FE', '\u00B1',
+ '\u00B0', '\u006A', '\u006B', '\u006C', '\u006D', '\u006E',
+ '\u006F', '\u0070', '\u0071', '\u0072', '\u00AA', '\u00BA',
+ '\u00E6', '\u00B8', '\u00C6', '\u00A4', '\u00B5', '\u007E',
+ '\u0073', '\u0074', '\u0075', '\u0076', '\u0077', '\u0078',
+ '\u0079', '\u007A', '\u00A1', '\u00BF', '\u00D0', '\u005B',
+ '\u00DE', '\u00AE', '\u00AC', '\u00A3', '\u00A5', '\u00B7',
+ '\u00A9', '\u00A7', '\u00B6', '\u00BC', '\u00BD', '\u00BE',
+ '\u00DD', '\u00A8', '\u00AF', '\u005D', '\u00B4', '\u00D7',
+ '\u007B', '\u0041', '\u0042', '\u0043', '\u0044', '\u0045',
+ '\u0046', '\u0047', '\u0048', '\u0049', '\u00AD', '\u00F4',
+ '\u00F6', '\u00F2', '\u00F3', '\u00F5', '\u007D', '\u004A',
+ '\u004B', '\u004C', '\u004D', '\u004E', '\u004F', '\u0050',
+ '\u0051', '\u0052', '\u00B9', '\u00FB', '\u00FC', '\u00F9',
+ '\u00FA', '\u00FF', '\u005C', '\u00F7', '\u0053', '\u0054',
+ '\u0055', '\u0056', '\u0057', '\u0058', '\u0059', '\u005A',
+ '\u00B2', '\u00D4', '\u00D6', '\u00D2', '\u00D3', '\u00D5',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u00B3', '\u00DB',
+ '\u00DC', '\u00D9', '\u00DA', '\u009F',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x00B6:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x5A; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0x7B; break;
+ case 0x0024: ch = 0x5B; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0x7C; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0xAD; break;
+ case 0x005C: ch = 0xE0; break;
+ case 0x005D: ch = 0xBD; break;
+ case 0x005E: ch = 0x5F; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0x79; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0xC0; break;
+ case 0x007C: ch = 0x4F; break;
+ case 0x007D: ch = 0xD0; break;
+ case 0x007E: ch = 0xA1; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A1: ch = 0xAA; break;
+ case 0x00A2: ch = 0x4A; break;
+ case 0x00A3: ch = 0xB1; break;
+ case 0x00A4: ch = 0x9F; break;
+ case 0x00A5: ch = 0xB2; break;
+ case 0x00A6: ch = 0x6A; break;
+ case 0x00A7: ch = 0xB5; break;
+ case 0x00A8: ch = 0xBB; break;
+ case 0x00A9: ch = 0xB4; break;
+ case 0x00AA: ch = 0x9A; break;
+ case 0x00AB: ch = 0x8A; break;
+ case 0x00AC: ch = 0xB0; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00AE: ch = 0xAF; break;
+ case 0x00AF: ch = 0xBC; break;
+ case 0x00B0: ch = 0x90; break;
+ case 0x00B1: ch = 0x8F; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xBE; break;
+ case 0x00B5: ch = 0xA0; break;
+ case 0x00B7: ch = 0xB3; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00B9: ch = 0xDA; break;
+ case 0x00BA: ch = 0x9B; break;
+ case 0x00BB: ch = 0x8B; break;
+ case 0x00BC: ch = 0xB7; break;
+ case 0x00BD: ch = 0xB8; break;
+ case 0x00BE: ch = 0xB9; break;
+ case 0x00BF: ch = 0xAB; break;
+ case 0x00C0: ch = 0x64; break;
+ case 0x00C1: ch = 0x65; break;
+ case 0x00C2: ch = 0x62; break;
+ case 0x00C3: ch = 0x66; break;
+ case 0x00C4: ch = 0x63; break;
+ case 0x00C5: ch = 0x67; break;
+ case 0x00C6: ch = 0x9E; break;
+ case 0x00C7: ch = 0x68; break;
+ case 0x00C8: ch = 0x74; break;
+ case 0x00C9: ch = 0x71; break;
+ case 0x00CA: ch = 0x72; break;
+ case 0x00CB: ch = 0x73; break;
+ case 0x00CC: ch = 0x78; break;
+ case 0x00CD: ch = 0x75; break;
+ case 0x00CE: ch = 0x76; break;
+ case 0x00CF: ch = 0x77; break;
+ case 0x00D0: ch = 0xAC; break;
+ case 0x00D1: ch = 0x69; break;
+ case 0x00D2: ch = 0xED; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEB; break;
+ case 0x00D5: ch = 0xEF; break;
+ case 0x00D6: ch = 0xEC; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00D8: ch = 0x80; break;
+ case 0x00D9: ch = 0xFD; break;
+ case 0x00DA: ch = 0xFE; break;
+ case 0x00DB: ch = 0xFB; break;
+ case 0x00DC: ch = 0xFC; break;
+ case 0x00DD: ch = 0xBA; break;
+ case 0x00DE: ch = 0xAE; break;
+ case 0x00DF: ch = 0x59; break;
+ case 0x00E0: ch = 0x44; break;
+ case 0x00E1: ch = 0x45; break;
+ case 0x00E2: ch = 0x42; break;
+ case 0x00E3: ch = 0x46; break;
+ case 0x00E4: ch = 0x43; break;
+ case 0x00E5: ch = 0x47; break;
+ case 0x00E6: ch = 0x9C; break;
+ case 0x00E7: ch = 0x48; break;
+ case 0x00E8: ch = 0x54; break;
+ case 0x00E9: ch = 0x51; break;
+ case 0x00EA: ch = 0x52; break;
+ case 0x00EB: ch = 0x53; break;
+ case 0x00EC: ch = 0x58; break;
+ case 0x00ED: ch = 0x55; break;
+ case 0x00EE: ch = 0x56; break;
+ case 0x00EF: ch = 0x57; break;
+ case 0x00F0: ch = 0x8C; break;
+ case 0x00F1: ch = 0x49; break;
+ case 0x00F2: ch = 0xCD; break;
+ case 0x00F3: ch = 0xCE; break;
+ case 0x00F4: ch = 0xCB; break;
+ case 0x00F5: ch = 0xCF; break;
+ case 0x00F6: ch = 0xCC; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x00F8: ch = 0x70; break;
+ case 0x00F9: ch = 0xDD; break;
+ case 0x00FA: ch = 0xDE; break;
+ case 0x00FB: ch = 0xDB; break;
+ case 0x00FC: ch = 0xDC; break;
+ case 0x00FD: ch = 0x8D; break;
+ case 0x00FE: ch = 0x8E; break;
+ case 0x00FF: ch = 0xDF; break;
+ case 0x203E: ch = 0xBC; break;
+ case 0xFF01: ch = 0x5A; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0x7B; break;
+ case 0xFF04: ch = 0x5B; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0x7C; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0xAD; break;
+ case 0xFF3C: ch = 0xE0; break;
+ case 0xFF3D: ch = 0xBD; break;
+ case 0xFF3E: ch = 0x5F; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0x79; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0xC0; break;
+ case 0xFF5C: ch = 0x4F; break;
+ case 0xFF5D: ch = 0xD0; break;
+ case 0xFF5E: ch = 0xA1; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x00B6:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x5A; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0x7B; break;
+ case 0x0024: ch = 0x5B; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0x7C; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0xAD; break;
+ case 0x005C: ch = 0xE0; break;
+ case 0x005D: ch = 0xBD; break;
+ case 0x005E: ch = 0x5F; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0x79; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0xC0; break;
+ case 0x007C: ch = 0x4F; break;
+ case 0x007D: ch = 0xD0; break;
+ case 0x007E: ch = 0xA1; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A1: ch = 0xAA; break;
+ case 0x00A2: ch = 0x4A; break;
+ case 0x00A3: ch = 0xB1; break;
+ case 0x00A4: ch = 0x9F; break;
+ case 0x00A5: ch = 0xB2; break;
+ case 0x00A6: ch = 0x6A; break;
+ case 0x00A7: ch = 0xB5; break;
+ case 0x00A8: ch = 0xBB; break;
+ case 0x00A9: ch = 0xB4; break;
+ case 0x00AA: ch = 0x9A; break;
+ case 0x00AB: ch = 0x8A; break;
+ case 0x00AC: ch = 0xB0; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00AE: ch = 0xAF; break;
+ case 0x00AF: ch = 0xBC; break;
+ case 0x00B0: ch = 0x90; break;
+ case 0x00B1: ch = 0x8F; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xBE; break;
+ case 0x00B5: ch = 0xA0; break;
+ case 0x00B7: ch = 0xB3; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00B9: ch = 0xDA; break;
+ case 0x00BA: ch = 0x9B; break;
+ case 0x00BB: ch = 0x8B; break;
+ case 0x00BC: ch = 0xB7; break;
+ case 0x00BD: ch = 0xB8; break;
+ case 0x00BE: ch = 0xB9; break;
+ case 0x00BF: ch = 0xAB; break;
+ case 0x00C0: ch = 0x64; break;
+ case 0x00C1: ch = 0x65; break;
+ case 0x00C2: ch = 0x62; break;
+ case 0x00C3: ch = 0x66; break;
+ case 0x00C4: ch = 0x63; break;
+ case 0x00C5: ch = 0x67; break;
+ case 0x00C6: ch = 0x9E; break;
+ case 0x00C7: ch = 0x68; break;
+ case 0x00C8: ch = 0x74; break;
+ case 0x00C9: ch = 0x71; break;
+ case 0x00CA: ch = 0x72; break;
+ case 0x00CB: ch = 0x73; break;
+ case 0x00CC: ch = 0x78; break;
+ case 0x00CD: ch = 0x75; break;
+ case 0x00CE: ch = 0x76; break;
+ case 0x00CF: ch = 0x77; break;
+ case 0x00D0: ch = 0xAC; break;
+ case 0x00D1: ch = 0x69; break;
+ case 0x00D2: ch = 0xED; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEB; break;
+ case 0x00D5: ch = 0xEF; break;
+ case 0x00D6: ch = 0xEC; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00D8: ch = 0x80; break;
+ case 0x00D9: ch = 0xFD; break;
+ case 0x00DA: ch = 0xFE; break;
+ case 0x00DB: ch = 0xFB; break;
+ case 0x00DC: ch = 0xFC; break;
+ case 0x00DD: ch = 0xBA; break;
+ case 0x00DE: ch = 0xAE; break;
+ case 0x00DF: ch = 0x59; break;
+ case 0x00E0: ch = 0x44; break;
+ case 0x00E1: ch = 0x45; break;
+ case 0x00E2: ch = 0x42; break;
+ case 0x00E3: ch = 0x46; break;
+ case 0x00E4: ch = 0x43; break;
+ case 0x00E5: ch = 0x47; break;
+ case 0x00E6: ch = 0x9C; break;
+ case 0x00E7: ch = 0x48; break;
+ case 0x00E8: ch = 0x54; break;
+ case 0x00E9: ch = 0x51; break;
+ case 0x00EA: ch = 0x52; break;
+ case 0x00EB: ch = 0x53; break;
+ case 0x00EC: ch = 0x58; break;
+ case 0x00ED: ch = 0x55; break;
+ case 0x00EE: ch = 0x56; break;
+ case 0x00EF: ch = 0x57; break;
+ case 0x00F0: ch = 0x8C; break;
+ case 0x00F1: ch = 0x49; break;
+ case 0x00F2: ch = 0xCD; break;
+ case 0x00F3: ch = 0xCE; break;
+ case 0x00F4: ch = 0xCB; break;
+ case 0x00F5: ch = 0xCF; break;
+ case 0x00F6: ch = 0xCC; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x00F8: ch = 0x70; break;
+ case 0x00F9: ch = 0xDD; break;
+ case 0x00FA: ch = 0xDE; break;
+ case 0x00FB: ch = 0xDB; break;
+ case 0x00FC: ch = 0xDC; break;
+ case 0x00FD: ch = 0x8D; break;
+ case 0x00FE: ch = 0x8E; break;
+ case 0x00FF: ch = 0xDF; break;
+ case 0x203E: ch = 0xBC; break;
+ case 0xFF01: ch = 0x5A; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0x7B; break;
+ case 0xFF04: ch = 0x5B; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0x7C; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0xAD; break;
+ case 0xFF3C: ch = 0xE0; break;
+ case 0xFF3D: ch = 0xBD; break;
+ case 0xFF3E: ch = 0x5F; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0x79; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0xC0; break;
+ case 0xFF5C: ch = 0x4F; break;
+ case 0xFF5D: ch = 0xD0; break;
+ case 0xFF5E: ch = 0xA1; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP1047
+
+public class ENCibm1047 : CP1047
+{
+ public ENCibm1047() : base() {}
+
+}; // class ENCibm1047
+
+}; // namespace I18N.Rare
diff --git a/mcs/class/I18N/Rare/CP1140.cs b/mcs/class/I18N/Rare/CP1140.cs
new file mode 100644
index 00000000000..479c3c39875
--- /dev/null
+++ b/mcs/class/I18N/Rare/CP1140.cs
@@ -0,0 +1,895 @@
+/*
+ * CP1140.cs - IBM EBCDIC (US-Canada with Euro) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-1140.ucm".
+
+namespace I18N.Rare
+{
+
+using System;
+using I18N.Common;
+
+public class CP1140 : ByteEncoding
+{
+ public CP1140()
+ : base(1140, ToChars, "IBM EBCDIC (US-Canada with Euro)",
+ "IBM01140", "IBM01140", "IBM01140",
+ false, false, false, false, 1252)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u009C', '\u0009',
+ '\u0086', '\u007F', '\u0097', '\u008D', '\u008E', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u009D', '\u0085', '\u0008', '\u0087',
+ '\u0018', '\u0019', '\u0092', '\u008F', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0080', '\u0081', '\u0082', '\u0083',
+ '\u0084', '\u000A', '\u0017', '\u001B', '\u0088', '\u0089',
+ '\u008A', '\u008B', '\u008C', '\u0005', '\u0006', '\u0007',
+ '\u0090', '\u0091', '\u0016', '\u0093', '\u0094', '\u0095',
+ '\u0096', '\u0004', '\u0098', '\u0099', '\u009A', '\u009B',
+ '\u0014', '\u0015', '\u009E', '\u001A', '\u0020', '\u00A0',
+ '\u00E2', '\u00E4', '\u00E0', '\u00E1', '\u00E3', '\u00E5',
+ '\u00E7', '\u00F1', '\u00A2', '\u002E', '\u003C', '\u0028',
+ '\u002B', '\u007C', '\u0026', '\u00E9', '\u00EA', '\u00EB',
+ '\u00E8', '\u00ED', '\u00EE', '\u00EF', '\u00EC', '\u00DF',
+ '\u0021', '\u0024', '\u002A', '\u0029', '\u003B', '\u00AC',
+ '\u002D', '\u002F', '\u00C2', '\u00C4', '\u00C0', '\u00C1',
+ '\u00C3', '\u00C5', '\u00C7', '\u00D1', '\u00A6', '\u002C',
+ '\u0025', '\u005F', '\u003E', '\u003F', '\u00F8', '\u00C9',
+ '\u00CA', '\u00CB', '\u00C8', '\u00CD', '\u00CE', '\u00CF',
+ '\u00CC', '\u0060', '\u003A', '\u0023', '\u0040', '\u0027',
+ '\u003D', '\u0022', '\u00D8', '\u0061', '\u0062', '\u0063',
+ '\u0064', '\u0065', '\u0066', '\u0067', '\u0068', '\u0069',
+ '\u00AB', '\u00BB', '\u00F0', '\u00FD', '\u00FE', '\u00B1',
+ '\u00B0', '\u006A', '\u006B', '\u006C', '\u006D', '\u006E',
+ '\u006F', '\u0070', '\u0071', '\u0072', '\u00AA', '\u00BA',
+ '\u00E6', '\u00B8', '\u00C6', '\u20AC', '\u00B5', '\u007E',
+ '\u0073', '\u0074', '\u0075', '\u0076', '\u0077', '\u0078',
+ '\u0079', '\u007A', '\u00A1', '\u00BF', '\u00D0', '\u00DD',
+ '\u00DE', '\u00AE', '\u005E', '\u00A3', '\u00A5', '\u00B7',
+ '\u00A9', '\u00A7', '\u00B6', '\u00BC', '\u00BD', '\u00BE',
+ '\u005B', '\u005D', '\u00AF', '\u00A8', '\u00B4', '\u00D7',
+ '\u007B', '\u0041', '\u0042', '\u0043', '\u0044', '\u0045',
+ '\u0046', '\u0047', '\u0048', '\u0049', '\u00AD', '\u00F4',
+ '\u00F6', '\u00F2', '\u00F3', '\u00F5', '\u007D', '\u004A',
+ '\u004B', '\u004C', '\u004D', '\u004E', '\u004F', '\u0050',
+ '\u0051', '\u0052', '\u00B9', '\u00FB', '\u00FC', '\u00F9',
+ '\u00FA', '\u00FF', '\u005C', '\u00F7', '\u0053', '\u0054',
+ '\u0055', '\u0056', '\u0057', '\u0058', '\u0059', '\u005A',
+ '\u00B2', '\u00D4', '\u00D6', '\u00D2', '\u00D3', '\u00D5',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u00B3', '\u00DB',
+ '\u00DC', '\u00D9', '\u00DA', '\u009F',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x00B6:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x5A; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0x7B; break;
+ case 0x0024: ch = 0x5B; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0x7C; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0xBA; break;
+ case 0x005C: ch = 0xE0; break;
+ case 0x005D: ch = 0xBB; break;
+ case 0x005E: ch = 0xB0; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0x79; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0xC0; break;
+ case 0x007C: ch = 0x4F; break;
+ case 0x007D: ch = 0xD0; break;
+ case 0x007E: ch = 0xA1; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A1: ch = 0xAA; break;
+ case 0x00A2: ch = 0x4A; break;
+ case 0x00A3: ch = 0xB1; break;
+ case 0x00A5: ch = 0xB2; break;
+ case 0x00A6: ch = 0x6A; break;
+ case 0x00A7: ch = 0xB5; break;
+ case 0x00A8: ch = 0xBD; break;
+ case 0x00A9: ch = 0xB4; break;
+ case 0x00AA: ch = 0x9A; break;
+ case 0x00AB: ch = 0x8A; break;
+ case 0x00AC: ch = 0x5F; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00AE: ch = 0xAF; break;
+ case 0x00AF: ch = 0xBC; break;
+ case 0x00B0: ch = 0x90; break;
+ case 0x00B1: ch = 0x8F; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xBE; break;
+ case 0x00B5: ch = 0xA0; break;
+ case 0x00B7: ch = 0xB3; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00B9: ch = 0xDA; break;
+ case 0x00BA: ch = 0x9B; break;
+ case 0x00BB: ch = 0x8B; break;
+ case 0x00BC: ch = 0xB7; break;
+ case 0x00BD: ch = 0xB8; break;
+ case 0x00BE: ch = 0xB9; break;
+ case 0x00BF: ch = 0xAB; break;
+ case 0x00C0: ch = 0x64; break;
+ case 0x00C1: ch = 0x65; break;
+ case 0x00C2: ch = 0x62; break;
+ case 0x00C3: ch = 0x66; break;
+ case 0x00C4: ch = 0x63; break;
+ case 0x00C5: ch = 0x67; break;
+ case 0x00C6: ch = 0x9E; break;
+ case 0x00C7: ch = 0x68; break;
+ case 0x00C8: ch = 0x74; break;
+ case 0x00C9: ch = 0x71; break;
+ case 0x00CA: ch = 0x72; break;
+ case 0x00CB: ch = 0x73; break;
+ case 0x00CC: ch = 0x78; break;
+ case 0x00CD: ch = 0x75; break;
+ case 0x00CE: ch = 0x76; break;
+ case 0x00CF: ch = 0x77; break;
+ case 0x00D0: ch = 0xAC; break;
+ case 0x00D1: ch = 0x69; break;
+ case 0x00D2: ch = 0xED; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEB; break;
+ case 0x00D5: ch = 0xEF; break;
+ case 0x00D6: ch = 0xEC; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00D8: ch = 0x80; break;
+ case 0x00D9: ch = 0xFD; break;
+ case 0x00DA: ch = 0xFE; break;
+ case 0x00DB: ch = 0xFB; break;
+ case 0x00DC: ch = 0xFC; break;
+ case 0x00DD: ch = 0xAD; break;
+ case 0x00DE: ch = 0xAE; break;
+ case 0x00DF: ch = 0x59; break;
+ case 0x00E0: ch = 0x44; break;
+ case 0x00E1: ch = 0x45; break;
+ case 0x00E2: ch = 0x42; break;
+ case 0x00E3: ch = 0x46; break;
+ case 0x00E4: ch = 0x43; break;
+ case 0x00E5: ch = 0x47; break;
+ case 0x00E6: ch = 0x9C; break;
+ case 0x00E7: ch = 0x48; break;
+ case 0x00E8: ch = 0x54; break;
+ case 0x00E9: ch = 0x51; break;
+ case 0x00EA: ch = 0x52; break;
+ case 0x00EB: ch = 0x53; break;
+ case 0x00EC: ch = 0x58; break;
+ case 0x00ED: ch = 0x55; break;
+ case 0x00EE: ch = 0x56; break;
+ case 0x00EF: ch = 0x57; break;
+ case 0x00F0: ch = 0x8C; break;
+ case 0x00F1: ch = 0x49; break;
+ case 0x00F2: ch = 0xCD; break;
+ case 0x00F3: ch = 0xCE; break;
+ case 0x00F4: ch = 0xCB; break;
+ case 0x00F5: ch = 0xCF; break;
+ case 0x00F6: ch = 0xCC; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x00F8: ch = 0x70; break;
+ case 0x00F9: ch = 0xDD; break;
+ case 0x00FA: ch = 0xDE; break;
+ case 0x00FB: ch = 0xDB; break;
+ case 0x00FC: ch = 0xDC; break;
+ case 0x00FD: ch = 0x8D; break;
+ case 0x00FE: ch = 0x8E; break;
+ case 0x00FF: ch = 0xDF; break;
+ case 0x203E: ch = 0xBC; break;
+ case 0x20AC: ch = 0x9F; break;
+ case 0xFF01: ch = 0x5A; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0x7B; break;
+ case 0xFF04: ch = 0x5B; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0x7C; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0xBA; break;
+ case 0xFF3C: ch = 0xE0; break;
+ case 0xFF3D: ch = 0xBB; break;
+ case 0xFF3E: ch = 0xB0; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0x79; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0xC0; break;
+ case 0xFF5C: ch = 0x4F; break;
+ case 0xFF5D: ch = 0xD0; break;
+ case 0xFF5E: ch = 0xA1; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x00B6:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x5A; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0x7B; break;
+ case 0x0024: ch = 0x5B; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0x7C; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0xBA; break;
+ case 0x005C: ch = 0xE0; break;
+ case 0x005D: ch = 0xBB; break;
+ case 0x005E: ch = 0xB0; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0x79; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0xC0; break;
+ case 0x007C: ch = 0x4F; break;
+ case 0x007D: ch = 0xD0; break;
+ case 0x007E: ch = 0xA1; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A1: ch = 0xAA; break;
+ case 0x00A2: ch = 0x4A; break;
+ case 0x00A3: ch = 0xB1; break;
+ case 0x00A5: ch = 0xB2; break;
+ case 0x00A6: ch = 0x6A; break;
+ case 0x00A7: ch = 0xB5; break;
+ case 0x00A8: ch = 0xBD; break;
+ case 0x00A9: ch = 0xB4; break;
+ case 0x00AA: ch = 0x9A; break;
+ case 0x00AB: ch = 0x8A; break;
+ case 0x00AC: ch = 0x5F; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00AE: ch = 0xAF; break;
+ case 0x00AF: ch = 0xBC; break;
+ case 0x00B0: ch = 0x90; break;
+ case 0x00B1: ch = 0x8F; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xBE; break;
+ case 0x00B5: ch = 0xA0; break;
+ case 0x00B7: ch = 0xB3; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00B9: ch = 0xDA; break;
+ case 0x00BA: ch = 0x9B; break;
+ case 0x00BB: ch = 0x8B; break;
+ case 0x00BC: ch = 0xB7; break;
+ case 0x00BD: ch = 0xB8; break;
+ case 0x00BE: ch = 0xB9; break;
+ case 0x00BF: ch = 0xAB; break;
+ case 0x00C0: ch = 0x64; break;
+ case 0x00C1: ch = 0x65; break;
+ case 0x00C2: ch = 0x62; break;
+ case 0x00C3: ch = 0x66; break;
+ case 0x00C4: ch = 0x63; break;
+ case 0x00C5: ch = 0x67; break;
+ case 0x00C6: ch = 0x9E; break;
+ case 0x00C7: ch = 0x68; break;
+ case 0x00C8: ch = 0x74; break;
+ case 0x00C9: ch = 0x71; break;
+ case 0x00CA: ch = 0x72; break;
+ case 0x00CB: ch = 0x73; break;
+ case 0x00CC: ch = 0x78; break;
+ case 0x00CD: ch = 0x75; break;
+ case 0x00CE: ch = 0x76; break;
+ case 0x00CF: ch = 0x77; break;
+ case 0x00D0: ch = 0xAC; break;
+ case 0x00D1: ch = 0x69; break;
+ case 0x00D2: ch = 0xED; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEB; break;
+ case 0x00D5: ch = 0xEF; break;
+ case 0x00D6: ch = 0xEC; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00D8: ch = 0x80; break;
+ case 0x00D9: ch = 0xFD; break;
+ case 0x00DA: ch = 0xFE; break;
+ case 0x00DB: ch = 0xFB; break;
+ case 0x00DC: ch = 0xFC; break;
+ case 0x00DD: ch = 0xAD; break;
+ case 0x00DE: ch = 0xAE; break;
+ case 0x00DF: ch = 0x59; break;
+ case 0x00E0: ch = 0x44; break;
+ case 0x00E1: ch = 0x45; break;
+ case 0x00E2: ch = 0x42; break;
+ case 0x00E3: ch = 0x46; break;
+ case 0x00E4: ch = 0x43; break;
+ case 0x00E5: ch = 0x47; break;
+ case 0x00E6: ch = 0x9C; break;
+ case 0x00E7: ch = 0x48; break;
+ case 0x00E8: ch = 0x54; break;
+ case 0x00E9: ch = 0x51; break;
+ case 0x00EA: ch = 0x52; break;
+ case 0x00EB: ch = 0x53; break;
+ case 0x00EC: ch = 0x58; break;
+ case 0x00ED: ch = 0x55; break;
+ case 0x00EE: ch = 0x56; break;
+ case 0x00EF: ch = 0x57; break;
+ case 0x00F0: ch = 0x8C; break;
+ case 0x00F1: ch = 0x49; break;
+ case 0x00F2: ch = 0xCD; break;
+ case 0x00F3: ch = 0xCE; break;
+ case 0x00F4: ch = 0xCB; break;
+ case 0x00F5: ch = 0xCF; break;
+ case 0x00F6: ch = 0xCC; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x00F8: ch = 0x70; break;
+ case 0x00F9: ch = 0xDD; break;
+ case 0x00FA: ch = 0xDE; break;
+ case 0x00FB: ch = 0xDB; break;
+ case 0x00FC: ch = 0xDC; break;
+ case 0x00FD: ch = 0x8D; break;
+ case 0x00FE: ch = 0x8E; break;
+ case 0x00FF: ch = 0xDF; break;
+ case 0x203E: ch = 0xBC; break;
+ case 0x20AC: ch = 0x9F; break;
+ case 0xFF01: ch = 0x5A; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0x7B; break;
+ case 0xFF04: ch = 0x5B; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0x7C; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0xBA; break;
+ case 0xFF3C: ch = 0xE0; break;
+ case 0xFF3D: ch = 0xBB; break;
+ case 0xFF3E: ch = 0xB0; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0x79; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0xC0; break;
+ case 0xFF5C: ch = 0x4F; break;
+ case 0xFF5D: ch = 0xD0; break;
+ case 0xFF5E: ch = 0xA1; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP1140
+
+public class ENCibm01140 : CP1140
+{
+ public ENCibm01140() : base() {}
+
+}; // class ENCibm01140
+
+}; // namespace I18N.Rare
diff --git a/mcs/class/I18N/Rare/CP1141.cs b/mcs/class/I18N/Rare/CP1141.cs
new file mode 100644
index 00000000000..345b13d5cf9
--- /dev/null
+++ b/mcs/class/I18N/Rare/CP1141.cs
@@ -0,0 +1,895 @@
+/*
+ * CP1141.cs - IBM EBCDIC (Germany with Euro) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-1141.ucm".
+
+namespace I18N.Rare
+{
+
+using System;
+using I18N.Common;
+
+public class CP1141 : ByteEncoding
+{
+ public CP1141()
+ : base(1141, ToChars, "IBM EBCDIC (Germany with Euro)",
+ "IBM01141", "IBM01141", "IBM01141",
+ false, false, false, false, 1252)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u009C', '\u0009',
+ '\u0086', '\u007F', '\u0097', '\u008D', '\u008E', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u009D', '\u0085', '\u0008', '\u0087',
+ '\u0018', '\u0019', '\u0092', '\u008F', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0080', '\u0081', '\u0082', '\u0083',
+ '\u0084', '\u000A', '\u0017', '\u001B', '\u0088', '\u0089',
+ '\u008A', '\u008B', '\u008C', '\u0005', '\u0006', '\u0007',
+ '\u0090', '\u0091', '\u0016', '\u0093', '\u0094', '\u0095',
+ '\u0096', '\u0004', '\u0098', '\u0099', '\u009A', '\u009B',
+ '\u0014', '\u0015', '\u009E', '\u001A', '\u0020', '\u00A0',
+ '\u00E2', '\u007B', '\u00E0', '\u00E1', '\u00E3', '\u00E5',
+ '\u00E7', '\u00F1', '\u00C4', '\u002E', '\u003C', '\u0028',
+ '\u002B', '\u0021', '\u0026', '\u00E9', '\u00EA', '\u00EB',
+ '\u00E8', '\u00ED', '\u00EE', '\u00EF', '\u00EC', '\u007E',
+ '\u00DC', '\u0024', '\u002A', '\u0029', '\u003B', '\u005E',
+ '\u002D', '\u002F', '\u00C2', '\u005B', '\u00C0', '\u00C1',
+ '\u00C3', '\u00C5', '\u00C7', '\u00D1', '\u00F6', '\u002C',
+ '\u0025', '\u005F', '\u003E', '\u003F', '\u00F8', '\u00C9',
+ '\u00CA', '\u00CB', '\u00C8', '\u00CD', '\u00CE', '\u00CF',
+ '\u00CC', '\u0060', '\u003A', '\u0023', '\u00A7', '\u0027',
+ '\u003D', '\u0022', '\u00D8', '\u0061', '\u0062', '\u0063',
+ '\u0064', '\u0065', '\u0066', '\u0067', '\u0068', '\u0069',
+ '\u00AB', '\u00BB', '\u00F0', '\u00FD', '\u00FE', '\u00B1',
+ '\u00B0', '\u006A', '\u006B', '\u006C', '\u006D', '\u006E',
+ '\u006F', '\u0070', '\u0071', '\u0072', '\u00AA', '\u00BA',
+ '\u00E6', '\u00B8', '\u00C6', '\u20AC', '\u00B5', '\u00DF',
+ '\u0073', '\u0074', '\u0075', '\u0076', '\u0077', '\u0078',
+ '\u0079', '\u007A', '\u00A1', '\u00BF', '\u00D0', '\u00DD',
+ '\u00DE', '\u00AE', '\u00A2', '\u00A3', '\u00A5', '\u00B7',
+ '\u00A9', '\u0040', '\u00B6', '\u00BC', '\u00BD', '\u00BE',
+ '\u00AC', '\u007C', '\u00AF', '\u00A8', '\u00B4', '\u00D7',
+ '\u00E4', '\u0041', '\u0042', '\u0043', '\u0044', '\u0045',
+ '\u0046', '\u0047', '\u0048', '\u0049', '\u00AD', '\u00F4',
+ '\u00A6', '\u00F2', '\u00F3', '\u00F5', '\u00FC', '\u004A',
+ '\u004B', '\u004C', '\u004D', '\u004E', '\u004F', '\u0050',
+ '\u0051', '\u0052', '\u00B9', '\u00FB', '\u007D', '\u00F9',
+ '\u00FA', '\u00FF', '\u00D6', '\u00F7', '\u0053', '\u0054',
+ '\u0055', '\u0056', '\u0057', '\u0058', '\u0059', '\u005A',
+ '\u00B2', '\u00D4', '\u005C', '\u00D2', '\u00D3', '\u00D5',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u00B3', '\u00DB',
+ '\u005D', '\u00D9', '\u00DA', '\u009F',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x00B6:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x4F; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0x7B; break;
+ case 0x0024: ch = 0x5B; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0xB5; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0x63; break;
+ case 0x005C: ch = 0xEC; break;
+ case 0x005D: ch = 0xFC; break;
+ case 0x005E: ch = 0x5F; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0x79; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0x43; break;
+ case 0x007C: ch = 0xBB; break;
+ case 0x007D: ch = 0xDC; break;
+ case 0x007E: ch = 0x59; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A1: ch = 0xAA; break;
+ case 0x00A2: ch = 0xB0; break;
+ case 0x00A3: ch = 0xB1; break;
+ case 0x00A5: ch = 0xB2; break;
+ case 0x00A6: ch = 0xCC; break;
+ case 0x00A7: ch = 0x7C; break;
+ case 0x00A8: ch = 0xBD; break;
+ case 0x00A9: ch = 0xB4; break;
+ case 0x00AA: ch = 0x9A; break;
+ case 0x00AB: ch = 0x8A; break;
+ case 0x00AC: ch = 0xBA; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00AE: ch = 0xAF; break;
+ case 0x00AF: ch = 0xBC; break;
+ case 0x00B0: ch = 0x90; break;
+ case 0x00B1: ch = 0x8F; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xBE; break;
+ case 0x00B5: ch = 0xA0; break;
+ case 0x00B7: ch = 0xB3; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00B9: ch = 0xDA; break;
+ case 0x00BA: ch = 0x9B; break;
+ case 0x00BB: ch = 0x8B; break;
+ case 0x00BC: ch = 0xB7; break;
+ case 0x00BD: ch = 0xB8; break;
+ case 0x00BE: ch = 0xB9; break;
+ case 0x00BF: ch = 0xAB; break;
+ case 0x00C0: ch = 0x64; break;
+ case 0x00C1: ch = 0x65; break;
+ case 0x00C2: ch = 0x62; break;
+ case 0x00C3: ch = 0x66; break;
+ case 0x00C4: ch = 0x4A; break;
+ case 0x00C5: ch = 0x67; break;
+ case 0x00C6: ch = 0x9E; break;
+ case 0x00C7: ch = 0x68; break;
+ case 0x00C8: ch = 0x74; break;
+ case 0x00C9: ch = 0x71; break;
+ case 0x00CA: ch = 0x72; break;
+ case 0x00CB: ch = 0x73; break;
+ case 0x00CC: ch = 0x78; break;
+ case 0x00CD: ch = 0x75; break;
+ case 0x00CE: ch = 0x76; break;
+ case 0x00CF: ch = 0x77; break;
+ case 0x00D0: ch = 0xAC; break;
+ case 0x00D1: ch = 0x69; break;
+ case 0x00D2: ch = 0xED; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEB; break;
+ case 0x00D5: ch = 0xEF; break;
+ case 0x00D6: ch = 0xE0; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00D8: ch = 0x80; break;
+ case 0x00D9: ch = 0xFD; break;
+ case 0x00DA: ch = 0xFE; break;
+ case 0x00DB: ch = 0xFB; break;
+ case 0x00DC: ch = 0x5A; break;
+ case 0x00DD: ch = 0xAD; break;
+ case 0x00DE: ch = 0xAE; break;
+ case 0x00DF: ch = 0xA1; break;
+ case 0x00E0: ch = 0x44; break;
+ case 0x00E1: ch = 0x45; break;
+ case 0x00E2: ch = 0x42; break;
+ case 0x00E3: ch = 0x46; break;
+ case 0x00E4: ch = 0xC0; break;
+ case 0x00E5: ch = 0x47; break;
+ case 0x00E6: ch = 0x9C; break;
+ case 0x00E7: ch = 0x48; break;
+ case 0x00E8: ch = 0x54; break;
+ case 0x00E9: ch = 0x51; break;
+ case 0x00EA: ch = 0x52; break;
+ case 0x00EB: ch = 0x53; break;
+ case 0x00EC: ch = 0x58; break;
+ case 0x00ED: ch = 0x55; break;
+ case 0x00EE: ch = 0x56; break;
+ case 0x00EF: ch = 0x57; break;
+ case 0x00F0: ch = 0x8C; break;
+ case 0x00F1: ch = 0x49; break;
+ case 0x00F2: ch = 0xCD; break;
+ case 0x00F3: ch = 0xCE; break;
+ case 0x00F4: ch = 0xCB; break;
+ case 0x00F5: ch = 0xCF; break;
+ case 0x00F6: ch = 0x6A; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x00F8: ch = 0x70; break;
+ case 0x00F9: ch = 0xDD; break;
+ case 0x00FA: ch = 0xDE; break;
+ case 0x00FB: ch = 0xDB; break;
+ case 0x00FC: ch = 0xD0; break;
+ case 0x00FD: ch = 0x8D; break;
+ case 0x00FE: ch = 0x8E; break;
+ case 0x00FF: ch = 0xDF; break;
+ case 0x203E: ch = 0xBC; break;
+ case 0x20AC: ch = 0x9F; break;
+ case 0xFF01: ch = 0x4F; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0x7B; break;
+ case 0xFF04: ch = 0x5B; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0xB5; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0x63; break;
+ case 0xFF3C: ch = 0xEC; break;
+ case 0xFF3D: ch = 0xFC; break;
+ case 0xFF3E: ch = 0x5F; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0x79; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0x43; break;
+ case 0xFF5C: ch = 0xBB; break;
+ case 0xFF5D: ch = 0xDC; break;
+ case 0xFF5E: ch = 0x59; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x00B6:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x4F; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0x7B; break;
+ case 0x0024: ch = 0x5B; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0xB5; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0x63; break;
+ case 0x005C: ch = 0xEC; break;
+ case 0x005D: ch = 0xFC; break;
+ case 0x005E: ch = 0x5F; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0x79; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0x43; break;
+ case 0x007C: ch = 0xBB; break;
+ case 0x007D: ch = 0xDC; break;
+ case 0x007E: ch = 0x59; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A1: ch = 0xAA; break;
+ case 0x00A2: ch = 0xB0; break;
+ case 0x00A3: ch = 0xB1; break;
+ case 0x00A5: ch = 0xB2; break;
+ case 0x00A6: ch = 0xCC; break;
+ case 0x00A7: ch = 0x7C; break;
+ case 0x00A8: ch = 0xBD; break;
+ case 0x00A9: ch = 0xB4; break;
+ case 0x00AA: ch = 0x9A; break;
+ case 0x00AB: ch = 0x8A; break;
+ case 0x00AC: ch = 0xBA; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00AE: ch = 0xAF; break;
+ case 0x00AF: ch = 0xBC; break;
+ case 0x00B0: ch = 0x90; break;
+ case 0x00B1: ch = 0x8F; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xBE; break;
+ case 0x00B5: ch = 0xA0; break;
+ case 0x00B7: ch = 0xB3; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00B9: ch = 0xDA; break;
+ case 0x00BA: ch = 0x9B; break;
+ case 0x00BB: ch = 0x8B; break;
+ case 0x00BC: ch = 0xB7; break;
+ case 0x00BD: ch = 0xB8; break;
+ case 0x00BE: ch = 0xB9; break;
+ case 0x00BF: ch = 0xAB; break;
+ case 0x00C0: ch = 0x64; break;
+ case 0x00C1: ch = 0x65; break;
+ case 0x00C2: ch = 0x62; break;
+ case 0x00C3: ch = 0x66; break;
+ case 0x00C4: ch = 0x4A; break;
+ case 0x00C5: ch = 0x67; break;
+ case 0x00C6: ch = 0x9E; break;
+ case 0x00C7: ch = 0x68; break;
+ case 0x00C8: ch = 0x74; break;
+ case 0x00C9: ch = 0x71; break;
+ case 0x00CA: ch = 0x72; break;
+ case 0x00CB: ch = 0x73; break;
+ case 0x00CC: ch = 0x78; break;
+ case 0x00CD: ch = 0x75; break;
+ case 0x00CE: ch = 0x76; break;
+ case 0x00CF: ch = 0x77; break;
+ case 0x00D0: ch = 0xAC; break;
+ case 0x00D1: ch = 0x69; break;
+ case 0x00D2: ch = 0xED; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEB; break;
+ case 0x00D5: ch = 0xEF; break;
+ case 0x00D6: ch = 0xE0; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00D8: ch = 0x80; break;
+ case 0x00D9: ch = 0xFD; break;
+ case 0x00DA: ch = 0xFE; break;
+ case 0x00DB: ch = 0xFB; break;
+ case 0x00DC: ch = 0x5A; break;
+ case 0x00DD: ch = 0xAD; break;
+ case 0x00DE: ch = 0xAE; break;
+ case 0x00DF: ch = 0xA1; break;
+ case 0x00E0: ch = 0x44; break;
+ case 0x00E1: ch = 0x45; break;
+ case 0x00E2: ch = 0x42; break;
+ case 0x00E3: ch = 0x46; break;
+ case 0x00E4: ch = 0xC0; break;
+ case 0x00E5: ch = 0x47; break;
+ case 0x00E6: ch = 0x9C; break;
+ case 0x00E7: ch = 0x48; break;
+ case 0x00E8: ch = 0x54; break;
+ case 0x00E9: ch = 0x51; break;
+ case 0x00EA: ch = 0x52; break;
+ case 0x00EB: ch = 0x53; break;
+ case 0x00EC: ch = 0x58; break;
+ case 0x00ED: ch = 0x55; break;
+ case 0x00EE: ch = 0x56; break;
+ case 0x00EF: ch = 0x57; break;
+ case 0x00F0: ch = 0x8C; break;
+ case 0x00F1: ch = 0x49; break;
+ case 0x00F2: ch = 0xCD; break;
+ case 0x00F3: ch = 0xCE; break;
+ case 0x00F4: ch = 0xCB; break;
+ case 0x00F5: ch = 0xCF; break;
+ case 0x00F6: ch = 0x6A; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x00F8: ch = 0x70; break;
+ case 0x00F9: ch = 0xDD; break;
+ case 0x00FA: ch = 0xDE; break;
+ case 0x00FB: ch = 0xDB; break;
+ case 0x00FC: ch = 0xD0; break;
+ case 0x00FD: ch = 0x8D; break;
+ case 0x00FE: ch = 0x8E; break;
+ case 0x00FF: ch = 0xDF; break;
+ case 0x203E: ch = 0xBC; break;
+ case 0x20AC: ch = 0x9F; break;
+ case 0xFF01: ch = 0x4F; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0x7B; break;
+ case 0xFF04: ch = 0x5B; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0xB5; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0x63; break;
+ case 0xFF3C: ch = 0xEC; break;
+ case 0xFF3D: ch = 0xFC; break;
+ case 0xFF3E: ch = 0x5F; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0x79; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0x43; break;
+ case 0xFF5C: ch = 0xBB; break;
+ case 0xFF5D: ch = 0xDC; break;
+ case 0xFF5E: ch = 0x59; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP1141
+
+public class ENCibm01141 : CP1141
+{
+ public ENCibm01141() : base() {}
+
+}; // class ENCibm01141
+
+}; // namespace I18N.Rare
diff --git a/mcs/class/I18N/Rare/CP1142.cs b/mcs/class/I18N/Rare/CP1142.cs
new file mode 100644
index 00000000000..a6d618e23db
--- /dev/null
+++ b/mcs/class/I18N/Rare/CP1142.cs
@@ -0,0 +1,895 @@
+/*
+ * CP1142.cs - IBM EBCDIC (Denmark/Norway with Euro) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-1142.ucm".
+
+namespace I18N.Rare
+{
+
+using System;
+using I18N.Common;
+
+public class CP1142 : ByteEncoding
+{
+ public CP1142()
+ : base(1142, ToChars, "IBM EBCDIC (Denmark/Norway with Euro)",
+ "IBM01142", "IBM01142", "IBM01142",
+ false, false, false, false, 1252)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u009C', '\u0009',
+ '\u0086', '\u007F', '\u0097', '\u008D', '\u008E', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u009D', '\u0085', '\u0008', '\u0087',
+ '\u0018', '\u0019', '\u0092', '\u008F', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0080', '\u0081', '\u0082', '\u0083',
+ '\u0084', '\u000A', '\u0017', '\u001B', '\u0088', '\u0089',
+ '\u008A', '\u008B', '\u008C', '\u0005', '\u0006', '\u0007',
+ '\u0090', '\u0091', '\u0016', '\u0093', '\u0094', '\u0095',
+ '\u0096', '\u0004', '\u0098', '\u0099', '\u009A', '\u009B',
+ '\u0014', '\u0015', '\u009E', '\u001A', '\u0020', '\u00A0',
+ '\u00E2', '\u00E4', '\u00E0', '\u00E1', '\u00E3', '\u007D',
+ '\u00E7', '\u00F1', '\u0023', '\u002E', '\u003C', '\u0028',
+ '\u002B', '\u0021', '\u0026', '\u00E9', '\u00EA', '\u00EB',
+ '\u00E8', '\u00ED', '\u00EE', '\u00EF', '\u00EC', '\u00DF',
+ '\u20AC', '\u00C5', '\u002A', '\u0029', '\u003B', '\u005E',
+ '\u002D', '\u002F', '\u00C2', '\u00C4', '\u00C0', '\u00C1',
+ '\u00C3', '\u0024', '\u00C7', '\u00D1', '\u00F8', '\u002C',
+ '\u0025', '\u005F', '\u003E', '\u003F', '\u00A6', '\u00C9',
+ '\u00CA', '\u00CB', '\u00C8', '\u00CD', '\u00CE', '\u00CF',
+ '\u00CC', '\u0060', '\u003A', '\u00C6', '\u00D8', '\u0027',
+ '\u003D', '\u0022', '\u0040', '\u0061', '\u0062', '\u0063',
+ '\u0064', '\u0065', '\u0066', '\u0067', '\u0068', '\u0069',
+ '\u00AB', '\u00BB', '\u00F0', '\u00FD', '\u00FE', '\u00B1',
+ '\u00B0', '\u006A', '\u006B', '\u006C', '\u006D', '\u006E',
+ '\u006F', '\u0070', '\u0071', '\u0072', '\u00AA', '\u00BA',
+ '\u007B', '\u00B8', '\u005B', '\u005D', '\u00B5', '\u00FC',
+ '\u0073', '\u0074', '\u0075', '\u0076', '\u0077', '\u0078',
+ '\u0079', '\u007A', '\u00A1', '\u00BF', '\u00D0', '\u00DD',
+ '\u00DE', '\u00AE', '\u00A2', '\u00A3', '\u00A5', '\u00B7',
+ '\u00A9', '\u00A7', '\u00B6', '\u00BC', '\u00BD', '\u00BE',
+ '\u00AC', '\u007C', '\u00AF', '\u00A8', '\u00B4', '\u00D7',
+ '\u00E6', '\u0041', '\u0042', '\u0043', '\u0044', '\u0045',
+ '\u0046', '\u0047', '\u0048', '\u0049', '\u00AD', '\u00F4',
+ '\u00F6', '\u00F2', '\u00F3', '\u00F5', '\u00E5', '\u004A',
+ '\u004B', '\u004C', '\u004D', '\u004E', '\u004F', '\u0050',
+ '\u0051', '\u0052', '\u00B9', '\u00FB', '\u007E', '\u00F9',
+ '\u00FA', '\u00FF', '\u005C', '\u00F7', '\u0053', '\u0054',
+ '\u0055', '\u0056', '\u0057', '\u0058', '\u0059', '\u005A',
+ '\u00B2', '\u00D4', '\u00D6', '\u00D2', '\u00D3', '\u00D5',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u00B3', '\u00DB',
+ '\u00DC', '\u00D9', '\u00DA', '\u009F',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x00B6:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x4F; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0x4A; break;
+ case 0x0024: ch = 0x67; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0x80; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0x9E; break;
+ case 0x005C: ch = 0xE0; break;
+ case 0x005D: ch = 0x9F; break;
+ case 0x005E: ch = 0x5F; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0x79; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0x9C; break;
+ case 0x007C: ch = 0xBB; break;
+ case 0x007D: ch = 0x47; break;
+ case 0x007E: ch = 0xDC; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A1: ch = 0xAA; break;
+ case 0x00A2: ch = 0xB0; break;
+ case 0x00A3: ch = 0xB1; break;
+ case 0x00A5: ch = 0xB2; break;
+ case 0x00A6: ch = 0x70; break;
+ case 0x00A7: ch = 0xB5; break;
+ case 0x00A8: ch = 0xBD; break;
+ case 0x00A9: ch = 0xB4; break;
+ case 0x00AA: ch = 0x9A; break;
+ case 0x00AB: ch = 0x8A; break;
+ case 0x00AC: ch = 0xBA; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00AE: ch = 0xAF; break;
+ case 0x00AF: ch = 0xBC; break;
+ case 0x00B0: ch = 0x90; break;
+ case 0x00B1: ch = 0x8F; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xBE; break;
+ case 0x00B5: ch = 0xA0; break;
+ case 0x00B7: ch = 0xB3; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00B9: ch = 0xDA; break;
+ case 0x00BA: ch = 0x9B; break;
+ case 0x00BB: ch = 0x8B; break;
+ case 0x00BC: ch = 0xB7; break;
+ case 0x00BD: ch = 0xB8; break;
+ case 0x00BE: ch = 0xB9; break;
+ case 0x00BF: ch = 0xAB; break;
+ case 0x00C0: ch = 0x64; break;
+ case 0x00C1: ch = 0x65; break;
+ case 0x00C2: ch = 0x62; break;
+ case 0x00C3: ch = 0x66; break;
+ case 0x00C4: ch = 0x63; break;
+ case 0x00C5: ch = 0x5B; break;
+ case 0x00C6: ch = 0x7B; break;
+ case 0x00C7: ch = 0x68; break;
+ case 0x00C8: ch = 0x74; break;
+ case 0x00C9: ch = 0x71; break;
+ case 0x00CA: ch = 0x72; break;
+ case 0x00CB: ch = 0x73; break;
+ case 0x00CC: ch = 0x78; break;
+ case 0x00CD: ch = 0x75; break;
+ case 0x00CE: ch = 0x76; break;
+ case 0x00CF: ch = 0x77; break;
+ case 0x00D0: ch = 0xAC; break;
+ case 0x00D1: ch = 0x69; break;
+ case 0x00D2: ch = 0xED; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEB; break;
+ case 0x00D5: ch = 0xEF; break;
+ case 0x00D6: ch = 0xEC; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00D8: ch = 0x7C; break;
+ case 0x00D9: ch = 0xFD; break;
+ case 0x00DA: ch = 0xFE; break;
+ case 0x00DB: ch = 0xFB; break;
+ case 0x00DC: ch = 0xFC; break;
+ case 0x00DD: ch = 0xAD; break;
+ case 0x00DE: ch = 0xAE; break;
+ case 0x00DF: ch = 0x59; break;
+ case 0x00E0: ch = 0x44; break;
+ case 0x00E1: ch = 0x45; break;
+ case 0x00E2: ch = 0x42; break;
+ case 0x00E3: ch = 0x46; break;
+ case 0x00E4: ch = 0x43; break;
+ case 0x00E5: ch = 0xD0; break;
+ case 0x00E6: ch = 0xC0; break;
+ case 0x00E7: ch = 0x48; break;
+ case 0x00E8: ch = 0x54; break;
+ case 0x00E9: ch = 0x51; break;
+ case 0x00EA: ch = 0x52; break;
+ case 0x00EB: ch = 0x53; break;
+ case 0x00EC: ch = 0x58; break;
+ case 0x00ED: ch = 0x55; break;
+ case 0x00EE: ch = 0x56; break;
+ case 0x00EF: ch = 0x57; break;
+ case 0x00F0: ch = 0x8C; break;
+ case 0x00F1: ch = 0x49; break;
+ case 0x00F2: ch = 0xCD; break;
+ case 0x00F3: ch = 0xCE; break;
+ case 0x00F4: ch = 0xCB; break;
+ case 0x00F5: ch = 0xCF; break;
+ case 0x00F6: ch = 0xCC; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x00F8: ch = 0x6A; break;
+ case 0x00F9: ch = 0xDD; break;
+ case 0x00FA: ch = 0xDE; break;
+ case 0x00FB: ch = 0xDB; break;
+ case 0x00FC: ch = 0xA1; break;
+ case 0x00FD: ch = 0x8D; break;
+ case 0x00FE: ch = 0x8E; break;
+ case 0x00FF: ch = 0xDF; break;
+ case 0x203E: ch = 0xBC; break;
+ case 0x20AC: ch = 0x5A; break;
+ case 0xFF01: ch = 0x4F; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0x4A; break;
+ case 0xFF04: ch = 0x67; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0x80; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0x9E; break;
+ case 0xFF3C: ch = 0xE0; break;
+ case 0xFF3D: ch = 0x9F; break;
+ case 0xFF3E: ch = 0x5F; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0x79; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0x9C; break;
+ case 0xFF5C: ch = 0xBB; break;
+ case 0xFF5D: ch = 0x47; break;
+ case 0xFF5E: ch = 0xDC; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x00B6:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x4F; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0x4A; break;
+ case 0x0024: ch = 0x67; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0x80; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0x9E; break;
+ case 0x005C: ch = 0xE0; break;
+ case 0x005D: ch = 0x9F; break;
+ case 0x005E: ch = 0x5F; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0x79; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0x9C; break;
+ case 0x007C: ch = 0xBB; break;
+ case 0x007D: ch = 0x47; break;
+ case 0x007E: ch = 0xDC; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A1: ch = 0xAA; break;
+ case 0x00A2: ch = 0xB0; break;
+ case 0x00A3: ch = 0xB1; break;
+ case 0x00A5: ch = 0xB2; break;
+ case 0x00A6: ch = 0x70; break;
+ case 0x00A7: ch = 0xB5; break;
+ case 0x00A8: ch = 0xBD; break;
+ case 0x00A9: ch = 0xB4; break;
+ case 0x00AA: ch = 0x9A; break;
+ case 0x00AB: ch = 0x8A; break;
+ case 0x00AC: ch = 0xBA; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00AE: ch = 0xAF; break;
+ case 0x00AF: ch = 0xBC; break;
+ case 0x00B0: ch = 0x90; break;
+ case 0x00B1: ch = 0x8F; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xBE; break;
+ case 0x00B5: ch = 0xA0; break;
+ case 0x00B7: ch = 0xB3; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00B9: ch = 0xDA; break;
+ case 0x00BA: ch = 0x9B; break;
+ case 0x00BB: ch = 0x8B; break;
+ case 0x00BC: ch = 0xB7; break;
+ case 0x00BD: ch = 0xB8; break;
+ case 0x00BE: ch = 0xB9; break;
+ case 0x00BF: ch = 0xAB; break;
+ case 0x00C0: ch = 0x64; break;
+ case 0x00C1: ch = 0x65; break;
+ case 0x00C2: ch = 0x62; break;
+ case 0x00C3: ch = 0x66; break;
+ case 0x00C4: ch = 0x63; break;
+ case 0x00C5: ch = 0x5B; break;
+ case 0x00C6: ch = 0x7B; break;
+ case 0x00C7: ch = 0x68; break;
+ case 0x00C8: ch = 0x74; break;
+ case 0x00C9: ch = 0x71; break;
+ case 0x00CA: ch = 0x72; break;
+ case 0x00CB: ch = 0x73; break;
+ case 0x00CC: ch = 0x78; break;
+ case 0x00CD: ch = 0x75; break;
+ case 0x00CE: ch = 0x76; break;
+ case 0x00CF: ch = 0x77; break;
+ case 0x00D0: ch = 0xAC; break;
+ case 0x00D1: ch = 0x69; break;
+ case 0x00D2: ch = 0xED; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEB; break;
+ case 0x00D5: ch = 0xEF; break;
+ case 0x00D6: ch = 0xEC; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00D8: ch = 0x7C; break;
+ case 0x00D9: ch = 0xFD; break;
+ case 0x00DA: ch = 0xFE; break;
+ case 0x00DB: ch = 0xFB; break;
+ case 0x00DC: ch = 0xFC; break;
+ case 0x00DD: ch = 0xAD; break;
+ case 0x00DE: ch = 0xAE; break;
+ case 0x00DF: ch = 0x59; break;
+ case 0x00E0: ch = 0x44; break;
+ case 0x00E1: ch = 0x45; break;
+ case 0x00E2: ch = 0x42; break;
+ case 0x00E3: ch = 0x46; break;
+ case 0x00E4: ch = 0x43; break;
+ case 0x00E5: ch = 0xD0; break;
+ case 0x00E6: ch = 0xC0; break;
+ case 0x00E7: ch = 0x48; break;
+ case 0x00E8: ch = 0x54; break;
+ case 0x00E9: ch = 0x51; break;
+ case 0x00EA: ch = 0x52; break;
+ case 0x00EB: ch = 0x53; break;
+ case 0x00EC: ch = 0x58; break;
+ case 0x00ED: ch = 0x55; break;
+ case 0x00EE: ch = 0x56; break;
+ case 0x00EF: ch = 0x57; break;
+ case 0x00F0: ch = 0x8C; break;
+ case 0x00F1: ch = 0x49; break;
+ case 0x00F2: ch = 0xCD; break;
+ case 0x00F3: ch = 0xCE; break;
+ case 0x00F4: ch = 0xCB; break;
+ case 0x00F5: ch = 0xCF; break;
+ case 0x00F6: ch = 0xCC; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x00F8: ch = 0x6A; break;
+ case 0x00F9: ch = 0xDD; break;
+ case 0x00FA: ch = 0xDE; break;
+ case 0x00FB: ch = 0xDB; break;
+ case 0x00FC: ch = 0xA1; break;
+ case 0x00FD: ch = 0x8D; break;
+ case 0x00FE: ch = 0x8E; break;
+ case 0x00FF: ch = 0xDF; break;
+ case 0x203E: ch = 0xBC; break;
+ case 0x20AC: ch = 0x5A; break;
+ case 0xFF01: ch = 0x4F; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0x4A; break;
+ case 0xFF04: ch = 0x67; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0x80; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0x9E; break;
+ case 0xFF3C: ch = 0xE0; break;
+ case 0xFF3D: ch = 0x9F; break;
+ case 0xFF3E: ch = 0x5F; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0x79; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0x9C; break;
+ case 0xFF5C: ch = 0xBB; break;
+ case 0xFF5D: ch = 0x47; break;
+ case 0xFF5E: ch = 0xDC; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP1142
+
+public class ENCibm01142 : CP1142
+{
+ public ENCibm01142() : base() {}
+
+}; // class ENCibm01142
+
+}; // namespace I18N.Rare
diff --git a/mcs/class/I18N/Rare/CP1143.cs b/mcs/class/I18N/Rare/CP1143.cs
new file mode 100644
index 00000000000..26566973b89
--- /dev/null
+++ b/mcs/class/I18N/Rare/CP1143.cs
@@ -0,0 +1,895 @@
+/*
+ * CP1143.cs - IBM EBCDIC (Finland/Sweden with Euro) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-1143.ucm".
+
+namespace I18N.Rare
+{
+
+using System;
+using I18N.Common;
+
+public class CP1143 : ByteEncoding
+{
+ public CP1143()
+ : base(1143, ToChars, "IBM EBCDIC (Finland/Sweden with Euro)",
+ "IBM01143", "IBM01143", "IBM01143",
+ false, false, false, false, 1252)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u009C', '\u0009',
+ '\u0086', '\u007F', '\u0097', '\u008D', '\u008E', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u009D', '\u0085', '\u0008', '\u0087',
+ '\u0018', '\u0019', '\u0092', '\u008F', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0080', '\u0081', '\u0082', '\u0083',
+ '\u0084', '\u000A', '\u0017', '\u001B', '\u0088', '\u0089',
+ '\u008A', '\u008B', '\u008C', '\u0005', '\u0006', '\u0007',
+ '\u0090', '\u0091', '\u0016', '\u0093', '\u0094', '\u0095',
+ '\u0096', '\u0004', '\u0098', '\u0099', '\u009A', '\u009B',
+ '\u0014', '\u0015', '\u009E', '\u001A', '\u0020', '\u00A0',
+ '\u00E2', '\u007B', '\u00E0', '\u00E1', '\u00E3', '\u007D',
+ '\u00E7', '\u00F1', '\u00A7', '\u002E', '\u003C', '\u0028',
+ '\u002B', '\u0021', '\u0026', '\u0060', '\u00EA', '\u00EB',
+ '\u00E8', '\u00ED', '\u00EE', '\u00EF', '\u00EC', '\u00DF',
+ '\u20AC', '\u00C5', '\u002A', '\u0029', '\u003B', '\u005E',
+ '\u002D', '\u002F', '\u00C2', '\u0023', '\u00C0', '\u00C1',
+ '\u00C3', '\u0024', '\u00C7', '\u00D1', '\u00F6', '\u002C',
+ '\u0025', '\u005F', '\u003E', '\u003F', '\u00F8', '\u005C',
+ '\u00CA', '\u00CB', '\u00C8', '\u00CD', '\u00CE', '\u00CF',
+ '\u00CC', '\u00E9', '\u003A', '\u00C4', '\u00D6', '\u0027',
+ '\u003D', '\u0022', '\u00D8', '\u0061', '\u0062', '\u0063',
+ '\u0064', '\u0065', '\u0066', '\u0067', '\u0068', '\u0069',
+ '\u00AB', '\u00BB', '\u00F0', '\u00FD', '\u00FE', '\u00B1',
+ '\u00B0', '\u006A', '\u006B', '\u006C', '\u006D', '\u006E',
+ '\u006F', '\u0070', '\u0071', '\u0072', '\u00AA', '\u00BA',
+ '\u00E6', '\u00B8', '\u00C6', '\u005D', '\u00B5', '\u00FC',
+ '\u0073', '\u0074', '\u0075', '\u0076', '\u0077', '\u0078',
+ '\u0079', '\u007A', '\u00A1', '\u00BF', '\u00D0', '\u00DD',
+ '\u00DE', '\u00AE', '\u00A2', '\u00A3', '\u00A5', '\u00B7',
+ '\u00A9', '\u005B', '\u00B6', '\u00BC', '\u00BD', '\u00BE',
+ '\u00AC', '\u007C', '\u00AF', '\u00A8', '\u00B4', '\u00D7',
+ '\u00E4', '\u0041', '\u0042', '\u0043', '\u0044', '\u0045',
+ '\u0046', '\u0047', '\u0048', '\u0049', '\u00AD', '\u00F4',
+ '\u00A6', '\u00F2', '\u00F3', '\u00F5', '\u00E5', '\u004A',
+ '\u004B', '\u004C', '\u004D', '\u004E', '\u004F', '\u0050',
+ '\u0051', '\u0052', '\u00B9', '\u00FB', '\u007E', '\u00F9',
+ '\u00FA', '\u00FF', '\u00C9', '\u00F7', '\u0053', '\u0054',
+ '\u0055', '\u0056', '\u0057', '\u0058', '\u0059', '\u005A',
+ '\u00B2', '\u00D4', '\u0040', '\u00D2', '\u00D3', '\u00D5',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u00B3', '\u00DB',
+ '\u00DC', '\u00D9', '\u00DA', '\u009F',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x00B6:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x4F; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0x63; break;
+ case 0x0024: ch = 0x67; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0xEC; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0xB5; break;
+ case 0x005C: ch = 0x71; break;
+ case 0x005D: ch = 0x9F; break;
+ case 0x005E: ch = 0x5F; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0x51; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0x43; break;
+ case 0x007C: ch = 0xBB; break;
+ case 0x007D: ch = 0x47; break;
+ case 0x007E: ch = 0xDC; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A1: ch = 0xAA; break;
+ case 0x00A2: ch = 0xB0; break;
+ case 0x00A3: ch = 0xB1; break;
+ case 0x00A5: ch = 0xB2; break;
+ case 0x00A6: ch = 0xCC; break;
+ case 0x00A7: ch = 0x4A; break;
+ case 0x00A8: ch = 0xBD; break;
+ case 0x00A9: ch = 0xB4; break;
+ case 0x00AA: ch = 0x9A; break;
+ case 0x00AB: ch = 0x8A; break;
+ case 0x00AC: ch = 0xBA; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00AE: ch = 0xAF; break;
+ case 0x00AF: ch = 0xBC; break;
+ case 0x00B0: ch = 0x90; break;
+ case 0x00B1: ch = 0x8F; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xBE; break;
+ case 0x00B5: ch = 0xA0; break;
+ case 0x00B7: ch = 0xB3; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00B9: ch = 0xDA; break;
+ case 0x00BA: ch = 0x9B; break;
+ case 0x00BB: ch = 0x8B; break;
+ case 0x00BC: ch = 0xB7; break;
+ case 0x00BD: ch = 0xB8; break;
+ case 0x00BE: ch = 0xB9; break;
+ case 0x00BF: ch = 0xAB; break;
+ case 0x00C0: ch = 0x64; break;
+ case 0x00C1: ch = 0x65; break;
+ case 0x00C2: ch = 0x62; break;
+ case 0x00C3: ch = 0x66; break;
+ case 0x00C4: ch = 0x7B; break;
+ case 0x00C5: ch = 0x5B; break;
+ case 0x00C6: ch = 0x9E; break;
+ case 0x00C7: ch = 0x68; break;
+ case 0x00C8: ch = 0x74; break;
+ case 0x00C9: ch = 0xE0; break;
+ case 0x00CA: ch = 0x72; break;
+ case 0x00CB: ch = 0x73; break;
+ case 0x00CC: ch = 0x78; break;
+ case 0x00CD: ch = 0x75; break;
+ case 0x00CE: ch = 0x76; break;
+ case 0x00CF: ch = 0x77; break;
+ case 0x00D0: ch = 0xAC; break;
+ case 0x00D1: ch = 0x69; break;
+ case 0x00D2: ch = 0xED; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEB; break;
+ case 0x00D5: ch = 0xEF; break;
+ case 0x00D6: ch = 0x7C; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00D8: ch = 0x80; break;
+ case 0x00D9: ch = 0xFD; break;
+ case 0x00DA: ch = 0xFE; break;
+ case 0x00DB: ch = 0xFB; break;
+ case 0x00DC: ch = 0xFC; break;
+ case 0x00DD: ch = 0xAD; break;
+ case 0x00DE: ch = 0xAE; break;
+ case 0x00DF: ch = 0x59; break;
+ case 0x00E0: ch = 0x44; break;
+ case 0x00E1: ch = 0x45; break;
+ case 0x00E2: ch = 0x42; break;
+ case 0x00E3: ch = 0x46; break;
+ case 0x00E4: ch = 0xC0; break;
+ case 0x00E5: ch = 0xD0; break;
+ case 0x00E6: ch = 0x9C; break;
+ case 0x00E7: ch = 0x48; break;
+ case 0x00E8: ch = 0x54; break;
+ case 0x00E9: ch = 0x79; break;
+ case 0x00EA: ch = 0x52; break;
+ case 0x00EB: ch = 0x53; break;
+ case 0x00EC: ch = 0x58; break;
+ case 0x00ED: ch = 0x55; break;
+ case 0x00EE: ch = 0x56; break;
+ case 0x00EF: ch = 0x57; break;
+ case 0x00F0: ch = 0x8C; break;
+ case 0x00F1: ch = 0x49; break;
+ case 0x00F2: ch = 0xCD; break;
+ case 0x00F3: ch = 0xCE; break;
+ case 0x00F4: ch = 0xCB; break;
+ case 0x00F5: ch = 0xCF; break;
+ case 0x00F6: ch = 0x6A; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x00F8: ch = 0x70; break;
+ case 0x00F9: ch = 0xDD; break;
+ case 0x00FA: ch = 0xDE; break;
+ case 0x00FB: ch = 0xDB; break;
+ case 0x00FC: ch = 0xA1; break;
+ case 0x00FD: ch = 0x8D; break;
+ case 0x00FE: ch = 0x8E; break;
+ case 0x00FF: ch = 0xDF; break;
+ case 0x203E: ch = 0xBC; break;
+ case 0x20AC: ch = 0x5A; break;
+ case 0xFF01: ch = 0x4F; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0x63; break;
+ case 0xFF04: ch = 0x67; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0xEC; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0xB5; break;
+ case 0xFF3C: ch = 0x71; break;
+ case 0xFF3D: ch = 0x9F; break;
+ case 0xFF3E: ch = 0x5F; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0x51; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0x43; break;
+ case 0xFF5C: ch = 0xBB; break;
+ case 0xFF5D: ch = 0x47; break;
+ case 0xFF5E: ch = 0xDC; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x00B6:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x4F; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0x63; break;
+ case 0x0024: ch = 0x67; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0xEC; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0xB5; break;
+ case 0x005C: ch = 0x71; break;
+ case 0x005D: ch = 0x9F; break;
+ case 0x005E: ch = 0x5F; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0x51; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0x43; break;
+ case 0x007C: ch = 0xBB; break;
+ case 0x007D: ch = 0x47; break;
+ case 0x007E: ch = 0xDC; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A1: ch = 0xAA; break;
+ case 0x00A2: ch = 0xB0; break;
+ case 0x00A3: ch = 0xB1; break;
+ case 0x00A5: ch = 0xB2; break;
+ case 0x00A6: ch = 0xCC; break;
+ case 0x00A7: ch = 0x4A; break;
+ case 0x00A8: ch = 0xBD; break;
+ case 0x00A9: ch = 0xB4; break;
+ case 0x00AA: ch = 0x9A; break;
+ case 0x00AB: ch = 0x8A; break;
+ case 0x00AC: ch = 0xBA; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00AE: ch = 0xAF; break;
+ case 0x00AF: ch = 0xBC; break;
+ case 0x00B0: ch = 0x90; break;
+ case 0x00B1: ch = 0x8F; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xBE; break;
+ case 0x00B5: ch = 0xA0; break;
+ case 0x00B7: ch = 0xB3; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00B9: ch = 0xDA; break;
+ case 0x00BA: ch = 0x9B; break;
+ case 0x00BB: ch = 0x8B; break;
+ case 0x00BC: ch = 0xB7; break;
+ case 0x00BD: ch = 0xB8; break;
+ case 0x00BE: ch = 0xB9; break;
+ case 0x00BF: ch = 0xAB; break;
+ case 0x00C0: ch = 0x64; break;
+ case 0x00C1: ch = 0x65; break;
+ case 0x00C2: ch = 0x62; break;
+ case 0x00C3: ch = 0x66; break;
+ case 0x00C4: ch = 0x7B; break;
+ case 0x00C5: ch = 0x5B; break;
+ case 0x00C6: ch = 0x9E; break;
+ case 0x00C7: ch = 0x68; break;
+ case 0x00C8: ch = 0x74; break;
+ case 0x00C9: ch = 0xE0; break;
+ case 0x00CA: ch = 0x72; break;
+ case 0x00CB: ch = 0x73; break;
+ case 0x00CC: ch = 0x78; break;
+ case 0x00CD: ch = 0x75; break;
+ case 0x00CE: ch = 0x76; break;
+ case 0x00CF: ch = 0x77; break;
+ case 0x00D0: ch = 0xAC; break;
+ case 0x00D1: ch = 0x69; break;
+ case 0x00D2: ch = 0xED; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEB; break;
+ case 0x00D5: ch = 0xEF; break;
+ case 0x00D6: ch = 0x7C; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00D8: ch = 0x80; break;
+ case 0x00D9: ch = 0xFD; break;
+ case 0x00DA: ch = 0xFE; break;
+ case 0x00DB: ch = 0xFB; break;
+ case 0x00DC: ch = 0xFC; break;
+ case 0x00DD: ch = 0xAD; break;
+ case 0x00DE: ch = 0xAE; break;
+ case 0x00DF: ch = 0x59; break;
+ case 0x00E0: ch = 0x44; break;
+ case 0x00E1: ch = 0x45; break;
+ case 0x00E2: ch = 0x42; break;
+ case 0x00E3: ch = 0x46; break;
+ case 0x00E4: ch = 0xC0; break;
+ case 0x00E5: ch = 0xD0; break;
+ case 0x00E6: ch = 0x9C; break;
+ case 0x00E7: ch = 0x48; break;
+ case 0x00E8: ch = 0x54; break;
+ case 0x00E9: ch = 0x79; break;
+ case 0x00EA: ch = 0x52; break;
+ case 0x00EB: ch = 0x53; break;
+ case 0x00EC: ch = 0x58; break;
+ case 0x00ED: ch = 0x55; break;
+ case 0x00EE: ch = 0x56; break;
+ case 0x00EF: ch = 0x57; break;
+ case 0x00F0: ch = 0x8C; break;
+ case 0x00F1: ch = 0x49; break;
+ case 0x00F2: ch = 0xCD; break;
+ case 0x00F3: ch = 0xCE; break;
+ case 0x00F4: ch = 0xCB; break;
+ case 0x00F5: ch = 0xCF; break;
+ case 0x00F6: ch = 0x6A; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x00F8: ch = 0x70; break;
+ case 0x00F9: ch = 0xDD; break;
+ case 0x00FA: ch = 0xDE; break;
+ case 0x00FB: ch = 0xDB; break;
+ case 0x00FC: ch = 0xA1; break;
+ case 0x00FD: ch = 0x8D; break;
+ case 0x00FE: ch = 0x8E; break;
+ case 0x00FF: ch = 0xDF; break;
+ case 0x203E: ch = 0xBC; break;
+ case 0x20AC: ch = 0x5A; break;
+ case 0xFF01: ch = 0x4F; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0x63; break;
+ case 0xFF04: ch = 0x67; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0xEC; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0xB5; break;
+ case 0xFF3C: ch = 0x71; break;
+ case 0xFF3D: ch = 0x9F; break;
+ case 0xFF3E: ch = 0x5F; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0x51; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0x43; break;
+ case 0xFF5C: ch = 0xBB; break;
+ case 0xFF5D: ch = 0x47; break;
+ case 0xFF5E: ch = 0xDC; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP1143
+
+public class ENCibm01143 : CP1143
+{
+ public ENCibm01143() : base() {}
+
+}; // class ENCibm01143
+
+}; // namespace I18N.Rare
diff --git a/mcs/class/I18N/Rare/CP1144.cs b/mcs/class/I18N/Rare/CP1144.cs
new file mode 100644
index 00000000000..4debbd934eb
--- /dev/null
+++ b/mcs/class/I18N/Rare/CP1144.cs
@@ -0,0 +1,895 @@
+/*
+ * CP1144.cs - IBM EBCDIC (Italy with Euro) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-1144.ucm".
+
+namespace I18N.Rare
+{
+
+using System;
+using I18N.Common;
+
+public class CP1144 : ByteEncoding
+{
+ public CP1144()
+ : base(1144, ToChars, "IBM EBCDIC (Italy with Euro)",
+ "ibm1144", "ibm1144", "ibm1144",
+ false, false, false, false, 1252)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u009C', '\u0009',
+ '\u0086', '\u007F', '\u0097', '\u008D', '\u008E', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u009D', '\u0085', '\u0008', '\u0087',
+ '\u0018', '\u0019', '\u0092', '\u008F', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0080', '\u0081', '\u0082', '\u0083',
+ '\u0084', '\u000A', '\u0017', '\u001B', '\u0088', '\u0089',
+ '\u008A', '\u008B', '\u008C', '\u0005', '\u0006', '\u0007',
+ '\u0090', '\u0091', '\u0016', '\u0093', '\u0094', '\u0095',
+ '\u0096', '\u0004', '\u0098', '\u0099', '\u009A', '\u009B',
+ '\u0014', '\u0015', '\u009E', '\u001A', '\u0020', '\u00A0',
+ '\u00E2', '\u00E4', '\u007B', '\u00E1', '\u00E3', '\u00E5',
+ '\u005C', '\u00F1', '\u00B0', '\u002E', '\u003C', '\u0028',
+ '\u002B', '\u0021', '\u0026', '\u005D', '\u00EA', '\u00EB',
+ '\u007D', '\u00ED', '\u00EE', '\u00EF', '\u007E', '\u00DF',
+ '\u00E9', '\u0024', '\u002A', '\u0029', '\u003B', '\u005E',
+ '\u002D', '\u002F', '\u00C2', '\u00C4', '\u00C0', '\u00C1',
+ '\u00C3', '\u00C5', '\u00C7', '\u00D1', '\u00F2', '\u002C',
+ '\u0025', '\u005F', '\u003E', '\u003F', '\u00F8', '\u00C9',
+ '\u00CA', '\u00CB', '\u00C8', '\u00CD', '\u00CE', '\u00CF',
+ '\u00CC', '\u00F9', '\u003A', '\u00A3', '\u00A7', '\u0027',
+ '\u003D', '\u0022', '\u00D8', '\u0061', '\u0062', '\u0063',
+ '\u0064', '\u0065', '\u0066', '\u0067', '\u0068', '\u0069',
+ '\u00AB', '\u00BB', '\u00F0', '\u00FD', '\u00FE', '\u00B1',
+ '\u005B', '\u006A', '\u006B', '\u006C', '\u006D', '\u006E',
+ '\u006F', '\u0070', '\u0071', '\u0072', '\u00AA', '\u00BA',
+ '\u00E6', '\u00B8', '\u00C6', '\u20AC', '\u00B5', '\u00EC',
+ '\u0073', '\u0074', '\u0075', '\u0076', '\u0077', '\u0078',
+ '\u0079', '\u007A', '\u00A1', '\u00BF', '\u00D0', '\u00DD',
+ '\u00DE', '\u00AE', '\u00A2', '\u0023', '\u00A5', '\u00B7',
+ '\u00A9', '\u0040', '\u00B6', '\u00BC', '\u00BD', '\u00BE',
+ '\u00AC', '\u007C', '\u00AF', '\u00A8', '\u00B4', '\u00D7',
+ '\u00E0', '\u0041', '\u0042', '\u0043', '\u0044', '\u0045',
+ '\u0046', '\u0047', '\u0048', '\u0049', '\u00AD', '\u00F4',
+ '\u00F6', '\u00A6', '\u00F3', '\u00F5', '\u00E8', '\u004A',
+ '\u004B', '\u004C', '\u004D', '\u004E', '\u004F', '\u0050',
+ '\u0051', '\u0052', '\u00B9', '\u00FB', '\u00FC', '\u0060',
+ '\u00FA', '\u00FF', '\u00E7', '\u00F7', '\u0053', '\u0054',
+ '\u0055', '\u0056', '\u0057', '\u0058', '\u0059', '\u005A',
+ '\u00B2', '\u00D4', '\u00D6', '\u00D2', '\u00D3', '\u00D5',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u00B3', '\u00DB',
+ '\u00DC', '\u00D9', '\u00DA', '\u009F',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x00B6:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x4F; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0xB1; break;
+ case 0x0024: ch = 0x5B; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0xB5; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0x90; break;
+ case 0x005C: ch = 0x48; break;
+ case 0x005D: ch = 0x51; break;
+ case 0x005E: ch = 0x5F; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0xDD; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0x44; break;
+ case 0x007C: ch = 0xBB; break;
+ case 0x007D: ch = 0x54; break;
+ case 0x007E: ch = 0x58; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A1: ch = 0xAA; break;
+ case 0x00A2: ch = 0xB0; break;
+ case 0x00A3: ch = 0x7B; break;
+ case 0x00A5: ch = 0xB2; break;
+ case 0x00A6: ch = 0xCD; break;
+ case 0x00A7: ch = 0x7C; break;
+ case 0x00A8: ch = 0xBD; break;
+ case 0x00A9: ch = 0xB4; break;
+ case 0x00AA: ch = 0x9A; break;
+ case 0x00AB: ch = 0x8A; break;
+ case 0x00AC: ch = 0xBA; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00AE: ch = 0xAF; break;
+ case 0x00AF: ch = 0xBC; break;
+ case 0x00B0: ch = 0x4A; break;
+ case 0x00B1: ch = 0x8F; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xBE; break;
+ case 0x00B5: ch = 0xA0; break;
+ case 0x00B7: ch = 0xB3; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00B9: ch = 0xDA; break;
+ case 0x00BA: ch = 0x9B; break;
+ case 0x00BB: ch = 0x8B; break;
+ case 0x00BC: ch = 0xB7; break;
+ case 0x00BD: ch = 0xB8; break;
+ case 0x00BE: ch = 0xB9; break;
+ case 0x00BF: ch = 0xAB; break;
+ case 0x00C0: ch = 0x64; break;
+ case 0x00C1: ch = 0x65; break;
+ case 0x00C2: ch = 0x62; break;
+ case 0x00C3: ch = 0x66; break;
+ case 0x00C4: ch = 0x63; break;
+ case 0x00C5: ch = 0x67; break;
+ case 0x00C6: ch = 0x9E; break;
+ case 0x00C7: ch = 0x68; break;
+ case 0x00C8: ch = 0x74; break;
+ case 0x00C9: ch = 0x71; break;
+ case 0x00CA: ch = 0x72; break;
+ case 0x00CB: ch = 0x73; break;
+ case 0x00CC: ch = 0x78; break;
+ case 0x00CD: ch = 0x75; break;
+ case 0x00CE: ch = 0x76; break;
+ case 0x00CF: ch = 0x77; break;
+ case 0x00D0: ch = 0xAC; break;
+ case 0x00D1: ch = 0x69; break;
+ case 0x00D2: ch = 0xED; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEB; break;
+ case 0x00D5: ch = 0xEF; break;
+ case 0x00D6: ch = 0xEC; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00D8: ch = 0x80; break;
+ case 0x00D9: ch = 0xFD; break;
+ case 0x00DA: ch = 0xFE; break;
+ case 0x00DB: ch = 0xFB; break;
+ case 0x00DC: ch = 0xFC; break;
+ case 0x00DD: ch = 0xAD; break;
+ case 0x00DE: ch = 0xAE; break;
+ case 0x00DF: ch = 0x59; break;
+ case 0x00E0: ch = 0xC0; break;
+ case 0x00E1: ch = 0x45; break;
+ case 0x00E2: ch = 0x42; break;
+ case 0x00E3: ch = 0x46; break;
+ case 0x00E4: ch = 0x43; break;
+ case 0x00E5: ch = 0x47; break;
+ case 0x00E6: ch = 0x9C; break;
+ case 0x00E7: ch = 0xE0; break;
+ case 0x00E8: ch = 0xD0; break;
+ case 0x00E9: ch = 0x5A; break;
+ case 0x00EA: ch = 0x52; break;
+ case 0x00EB: ch = 0x53; break;
+ case 0x00EC: ch = 0xA1; break;
+ case 0x00ED: ch = 0x55; break;
+ case 0x00EE: ch = 0x56; break;
+ case 0x00EF: ch = 0x57; break;
+ case 0x00F0: ch = 0x8C; break;
+ case 0x00F1: ch = 0x49; break;
+ case 0x00F2: ch = 0x6A; break;
+ case 0x00F3: ch = 0xCE; break;
+ case 0x00F4: ch = 0xCB; break;
+ case 0x00F5: ch = 0xCF; break;
+ case 0x00F6: ch = 0xCC; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x00F8: ch = 0x70; break;
+ case 0x00F9: ch = 0x79; break;
+ case 0x00FA: ch = 0xDE; break;
+ case 0x00FB: ch = 0xDB; break;
+ case 0x00FC: ch = 0xDC; break;
+ case 0x00FD: ch = 0x8D; break;
+ case 0x00FE: ch = 0x8E; break;
+ case 0x00FF: ch = 0xDF; break;
+ case 0x203E: ch = 0xBC; break;
+ case 0x20AC: ch = 0x9F; break;
+ case 0xFF01: ch = 0x4F; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0xB1; break;
+ case 0xFF04: ch = 0x5B; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0xB5; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0x90; break;
+ case 0xFF3C: ch = 0x48; break;
+ case 0xFF3D: ch = 0x51; break;
+ case 0xFF3E: ch = 0x5F; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0xDD; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0x44; break;
+ case 0xFF5C: ch = 0xBB; break;
+ case 0xFF5D: ch = 0x54; break;
+ case 0xFF5E: ch = 0x58; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x00B6:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x4F; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0xB1; break;
+ case 0x0024: ch = 0x5B; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0xB5; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0x90; break;
+ case 0x005C: ch = 0x48; break;
+ case 0x005D: ch = 0x51; break;
+ case 0x005E: ch = 0x5F; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0xDD; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0x44; break;
+ case 0x007C: ch = 0xBB; break;
+ case 0x007D: ch = 0x54; break;
+ case 0x007E: ch = 0x58; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A1: ch = 0xAA; break;
+ case 0x00A2: ch = 0xB0; break;
+ case 0x00A3: ch = 0x7B; break;
+ case 0x00A5: ch = 0xB2; break;
+ case 0x00A6: ch = 0xCD; break;
+ case 0x00A7: ch = 0x7C; break;
+ case 0x00A8: ch = 0xBD; break;
+ case 0x00A9: ch = 0xB4; break;
+ case 0x00AA: ch = 0x9A; break;
+ case 0x00AB: ch = 0x8A; break;
+ case 0x00AC: ch = 0xBA; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00AE: ch = 0xAF; break;
+ case 0x00AF: ch = 0xBC; break;
+ case 0x00B0: ch = 0x4A; break;
+ case 0x00B1: ch = 0x8F; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xBE; break;
+ case 0x00B5: ch = 0xA0; break;
+ case 0x00B7: ch = 0xB3; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00B9: ch = 0xDA; break;
+ case 0x00BA: ch = 0x9B; break;
+ case 0x00BB: ch = 0x8B; break;
+ case 0x00BC: ch = 0xB7; break;
+ case 0x00BD: ch = 0xB8; break;
+ case 0x00BE: ch = 0xB9; break;
+ case 0x00BF: ch = 0xAB; break;
+ case 0x00C0: ch = 0x64; break;
+ case 0x00C1: ch = 0x65; break;
+ case 0x00C2: ch = 0x62; break;
+ case 0x00C3: ch = 0x66; break;
+ case 0x00C4: ch = 0x63; break;
+ case 0x00C5: ch = 0x67; break;
+ case 0x00C6: ch = 0x9E; break;
+ case 0x00C7: ch = 0x68; break;
+ case 0x00C8: ch = 0x74; break;
+ case 0x00C9: ch = 0x71; break;
+ case 0x00CA: ch = 0x72; break;
+ case 0x00CB: ch = 0x73; break;
+ case 0x00CC: ch = 0x78; break;
+ case 0x00CD: ch = 0x75; break;
+ case 0x00CE: ch = 0x76; break;
+ case 0x00CF: ch = 0x77; break;
+ case 0x00D0: ch = 0xAC; break;
+ case 0x00D1: ch = 0x69; break;
+ case 0x00D2: ch = 0xED; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEB; break;
+ case 0x00D5: ch = 0xEF; break;
+ case 0x00D6: ch = 0xEC; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00D8: ch = 0x80; break;
+ case 0x00D9: ch = 0xFD; break;
+ case 0x00DA: ch = 0xFE; break;
+ case 0x00DB: ch = 0xFB; break;
+ case 0x00DC: ch = 0xFC; break;
+ case 0x00DD: ch = 0xAD; break;
+ case 0x00DE: ch = 0xAE; break;
+ case 0x00DF: ch = 0x59; break;
+ case 0x00E0: ch = 0xC0; break;
+ case 0x00E1: ch = 0x45; break;
+ case 0x00E2: ch = 0x42; break;
+ case 0x00E3: ch = 0x46; break;
+ case 0x00E4: ch = 0x43; break;
+ case 0x00E5: ch = 0x47; break;
+ case 0x00E6: ch = 0x9C; break;
+ case 0x00E7: ch = 0xE0; break;
+ case 0x00E8: ch = 0xD0; break;
+ case 0x00E9: ch = 0x5A; break;
+ case 0x00EA: ch = 0x52; break;
+ case 0x00EB: ch = 0x53; break;
+ case 0x00EC: ch = 0xA1; break;
+ case 0x00ED: ch = 0x55; break;
+ case 0x00EE: ch = 0x56; break;
+ case 0x00EF: ch = 0x57; break;
+ case 0x00F0: ch = 0x8C; break;
+ case 0x00F1: ch = 0x49; break;
+ case 0x00F2: ch = 0x6A; break;
+ case 0x00F3: ch = 0xCE; break;
+ case 0x00F4: ch = 0xCB; break;
+ case 0x00F5: ch = 0xCF; break;
+ case 0x00F6: ch = 0xCC; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x00F8: ch = 0x70; break;
+ case 0x00F9: ch = 0x79; break;
+ case 0x00FA: ch = 0xDE; break;
+ case 0x00FB: ch = 0xDB; break;
+ case 0x00FC: ch = 0xDC; break;
+ case 0x00FD: ch = 0x8D; break;
+ case 0x00FE: ch = 0x8E; break;
+ case 0x00FF: ch = 0xDF; break;
+ case 0x203E: ch = 0xBC; break;
+ case 0x20AC: ch = 0x9F; break;
+ case 0xFF01: ch = 0x4F; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0xB1; break;
+ case 0xFF04: ch = 0x5B; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0xB5; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0x90; break;
+ case 0xFF3C: ch = 0x48; break;
+ case 0xFF3D: ch = 0x51; break;
+ case 0xFF3E: ch = 0x5F; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0xDD; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0x44; break;
+ case 0xFF5C: ch = 0xBB; break;
+ case 0xFF5D: ch = 0x54; break;
+ case 0xFF5E: ch = 0x58; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP1144
+
+public class ENCibm1144 : CP1144
+{
+ public ENCibm1144() : base() {}
+
+}; // class ENCibm1144
+
+}; // namespace I18N.Rare
diff --git a/mcs/class/I18N/Rare/CP1145.cs b/mcs/class/I18N/Rare/CP1145.cs
new file mode 100644
index 00000000000..d2e01263499
--- /dev/null
+++ b/mcs/class/I18N/Rare/CP1145.cs
@@ -0,0 +1,895 @@
+/*
+ * CP1145.cs - IBM EBCDIC (Latin America/Spain with Euro) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-1145.ucm".
+
+namespace I18N.Rare
+{
+
+using System;
+using I18N.Common;
+
+public class CP1145 : ByteEncoding
+{
+ public CP1145()
+ : base(1145, ToChars, "IBM EBCDIC (Latin America/Spain with Euro)",
+ "ibm1145", "ibm1145", "ibm1145",
+ false, false, false, false, 1252)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u009C', '\u0009',
+ '\u0086', '\u007F', '\u0097', '\u008D', '\u008E', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u009D', '\u0085', '\u0008', '\u0087',
+ '\u0018', '\u0019', '\u0092', '\u008F', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0080', '\u0081', '\u0082', '\u0083',
+ '\u0084', '\u000A', '\u0017', '\u001B', '\u0088', '\u0089',
+ '\u008A', '\u008B', '\u008C', '\u0005', '\u0006', '\u0007',
+ '\u0090', '\u0091', '\u0016', '\u0093', '\u0094', '\u0095',
+ '\u0096', '\u0004', '\u0098', '\u0099', '\u009A', '\u009B',
+ '\u0014', '\u0015', '\u009E', '\u001A', '\u0020', '\u00A0',
+ '\u00E2', '\u00E4', '\u00E0', '\u00E1', '\u00E3', '\u00E5',
+ '\u00E7', '\u00A6', '\u005B', '\u002E', '\u003C', '\u0028',
+ '\u002B', '\u007C', '\u0026', '\u00E9', '\u00EA', '\u00EB',
+ '\u00E8', '\u00ED', '\u00EE', '\u00EF', '\u00EC', '\u00DF',
+ '\u005D', '\u0024', '\u002A', '\u0029', '\u003B', '\u00AC',
+ '\u002D', '\u002F', '\u00C2', '\u00C4', '\u00C0', '\u00C1',
+ '\u00C3', '\u00C5', '\u00C7', '\u0023', '\u00F1', '\u002C',
+ '\u0025', '\u005F', '\u003E', '\u003F', '\u00F8', '\u00C9',
+ '\u00CA', '\u00CB', '\u00C8', '\u00CD', '\u00CE', '\u00CF',
+ '\u00CC', '\u0060', '\u003A', '\u00D1', '\u0040', '\u0027',
+ '\u003D', '\u0022', '\u00D8', '\u0061', '\u0062', '\u0063',
+ '\u0064', '\u0065', '\u0066', '\u0067', '\u0068', '\u0069',
+ '\u00AB', '\u00BB', '\u00F0', '\u00FD', '\u00FE', '\u00B1',
+ '\u00B0', '\u006A', '\u006B', '\u006C', '\u006D', '\u006E',
+ '\u006F', '\u0070', '\u0071', '\u0072', '\u00AA', '\u00BA',
+ '\u00E6', '\u00B8', '\u00C6', '\u20AC', '\u00B5', '\u00A8',
+ '\u0073', '\u0074', '\u0075', '\u0076', '\u0077', '\u0078',
+ '\u0079', '\u007A', '\u00A1', '\u00BF', '\u00D0', '\u00DD',
+ '\u00DE', '\u00AE', '\u00A2', '\u00A3', '\u00A5', '\u00B7',
+ '\u00A9', '\u00A7', '\u00B6', '\u00BC', '\u00BD', '\u00BE',
+ '\u005E', '\u0021', '\u00AF', '\u007E', '\u00B4', '\u00D7',
+ '\u007B', '\u0041', '\u0042', '\u0043', '\u0044', '\u0045',
+ '\u0046', '\u0047', '\u0048', '\u0049', '\u00AD', '\u00F4',
+ '\u00F6', '\u00F2', '\u00F3', '\u00F5', '\u007D', '\u004A',
+ '\u004B', '\u004C', '\u004D', '\u004E', '\u004F', '\u0050',
+ '\u0051', '\u0052', '\u00B9', '\u00FB', '\u00FC', '\u00F9',
+ '\u00FA', '\u00FF', '\u005C', '\u00F7', '\u0053', '\u0054',
+ '\u0055', '\u0056', '\u0057', '\u0058', '\u0059', '\u005A',
+ '\u00B2', '\u00D4', '\u00D6', '\u00D2', '\u00D3', '\u00D5',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u00B3', '\u00DB',
+ '\u00DC', '\u00D9', '\u00DA', '\u009F',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x00B6:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0xBB; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0x69; break;
+ case 0x0024: ch = 0x5B; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0x7C; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0x4A; break;
+ case 0x005C: ch = 0xE0; break;
+ case 0x005D: ch = 0x5A; break;
+ case 0x005E: ch = 0xBA; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0x79; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0xC0; break;
+ case 0x007C: ch = 0x4F; break;
+ case 0x007D: ch = 0xD0; break;
+ case 0x007E: ch = 0xBD; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A1: ch = 0xAA; break;
+ case 0x00A2: ch = 0xB0; break;
+ case 0x00A3: ch = 0xB1; break;
+ case 0x00A5: ch = 0xB2; break;
+ case 0x00A6: ch = 0x49; break;
+ case 0x00A7: ch = 0xB5; break;
+ case 0x00A8: ch = 0xA1; break;
+ case 0x00A9: ch = 0xB4; break;
+ case 0x00AA: ch = 0x9A; break;
+ case 0x00AB: ch = 0x8A; break;
+ case 0x00AC: ch = 0x5F; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00AE: ch = 0xAF; break;
+ case 0x00AF: ch = 0xBC; break;
+ case 0x00B0: ch = 0x90; break;
+ case 0x00B1: ch = 0x8F; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xBE; break;
+ case 0x00B5: ch = 0xA0; break;
+ case 0x00B7: ch = 0xB3; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00B9: ch = 0xDA; break;
+ case 0x00BA: ch = 0x9B; break;
+ case 0x00BB: ch = 0x8B; break;
+ case 0x00BC: ch = 0xB7; break;
+ case 0x00BD: ch = 0xB8; break;
+ case 0x00BE: ch = 0xB9; break;
+ case 0x00BF: ch = 0xAB; break;
+ case 0x00C0: ch = 0x64; break;
+ case 0x00C1: ch = 0x65; break;
+ case 0x00C2: ch = 0x62; break;
+ case 0x00C3: ch = 0x66; break;
+ case 0x00C4: ch = 0x63; break;
+ case 0x00C5: ch = 0x67; break;
+ case 0x00C6: ch = 0x9E; break;
+ case 0x00C7: ch = 0x68; break;
+ case 0x00C8: ch = 0x74; break;
+ case 0x00C9: ch = 0x71; break;
+ case 0x00CA: ch = 0x72; break;
+ case 0x00CB: ch = 0x73; break;
+ case 0x00CC: ch = 0x78; break;
+ case 0x00CD: ch = 0x75; break;
+ case 0x00CE: ch = 0x76; break;
+ case 0x00CF: ch = 0x77; break;
+ case 0x00D0: ch = 0xAC; break;
+ case 0x00D1: ch = 0x7B; break;
+ case 0x00D2: ch = 0xED; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEB; break;
+ case 0x00D5: ch = 0xEF; break;
+ case 0x00D6: ch = 0xEC; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00D8: ch = 0x80; break;
+ case 0x00D9: ch = 0xFD; break;
+ case 0x00DA: ch = 0xFE; break;
+ case 0x00DB: ch = 0xFB; break;
+ case 0x00DC: ch = 0xFC; break;
+ case 0x00DD: ch = 0xAD; break;
+ case 0x00DE: ch = 0xAE; break;
+ case 0x00DF: ch = 0x59; break;
+ case 0x00E0: ch = 0x44; break;
+ case 0x00E1: ch = 0x45; break;
+ case 0x00E2: ch = 0x42; break;
+ case 0x00E3: ch = 0x46; break;
+ case 0x00E4: ch = 0x43; break;
+ case 0x00E5: ch = 0x47; break;
+ case 0x00E6: ch = 0x9C; break;
+ case 0x00E7: ch = 0x48; break;
+ case 0x00E8: ch = 0x54; break;
+ case 0x00E9: ch = 0x51; break;
+ case 0x00EA: ch = 0x52; break;
+ case 0x00EB: ch = 0x53; break;
+ case 0x00EC: ch = 0x58; break;
+ case 0x00ED: ch = 0x55; break;
+ case 0x00EE: ch = 0x56; break;
+ case 0x00EF: ch = 0x57; break;
+ case 0x00F0: ch = 0x8C; break;
+ case 0x00F1: ch = 0x6A; break;
+ case 0x00F2: ch = 0xCD; break;
+ case 0x00F3: ch = 0xCE; break;
+ case 0x00F4: ch = 0xCB; break;
+ case 0x00F5: ch = 0xCF; break;
+ case 0x00F6: ch = 0xCC; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x00F8: ch = 0x70; break;
+ case 0x00F9: ch = 0xDD; break;
+ case 0x00FA: ch = 0xDE; break;
+ case 0x00FB: ch = 0xDB; break;
+ case 0x00FC: ch = 0xDC; break;
+ case 0x00FD: ch = 0x8D; break;
+ case 0x00FE: ch = 0x8E; break;
+ case 0x00FF: ch = 0xDF; break;
+ case 0x203E: ch = 0xBC; break;
+ case 0x20AC: ch = 0x9F; break;
+ case 0xFF01: ch = 0xBB; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0x69; break;
+ case 0xFF04: ch = 0x5B; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0x7C; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0x4A; break;
+ case 0xFF3C: ch = 0xE0; break;
+ case 0xFF3D: ch = 0x5A; break;
+ case 0xFF3E: ch = 0xBA; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0x79; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0xC0; break;
+ case 0xFF5C: ch = 0x4F; break;
+ case 0xFF5D: ch = 0xD0; break;
+ case 0xFF5E: ch = 0xBD; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x00B6:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0xBB; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0x69; break;
+ case 0x0024: ch = 0x5B; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0x7C; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0x4A; break;
+ case 0x005C: ch = 0xE0; break;
+ case 0x005D: ch = 0x5A; break;
+ case 0x005E: ch = 0xBA; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0x79; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0xC0; break;
+ case 0x007C: ch = 0x4F; break;
+ case 0x007D: ch = 0xD0; break;
+ case 0x007E: ch = 0xBD; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A1: ch = 0xAA; break;
+ case 0x00A2: ch = 0xB0; break;
+ case 0x00A3: ch = 0xB1; break;
+ case 0x00A5: ch = 0xB2; break;
+ case 0x00A6: ch = 0x49; break;
+ case 0x00A7: ch = 0xB5; break;
+ case 0x00A8: ch = 0xA1; break;
+ case 0x00A9: ch = 0xB4; break;
+ case 0x00AA: ch = 0x9A; break;
+ case 0x00AB: ch = 0x8A; break;
+ case 0x00AC: ch = 0x5F; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00AE: ch = 0xAF; break;
+ case 0x00AF: ch = 0xBC; break;
+ case 0x00B0: ch = 0x90; break;
+ case 0x00B1: ch = 0x8F; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xBE; break;
+ case 0x00B5: ch = 0xA0; break;
+ case 0x00B7: ch = 0xB3; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00B9: ch = 0xDA; break;
+ case 0x00BA: ch = 0x9B; break;
+ case 0x00BB: ch = 0x8B; break;
+ case 0x00BC: ch = 0xB7; break;
+ case 0x00BD: ch = 0xB8; break;
+ case 0x00BE: ch = 0xB9; break;
+ case 0x00BF: ch = 0xAB; break;
+ case 0x00C0: ch = 0x64; break;
+ case 0x00C1: ch = 0x65; break;
+ case 0x00C2: ch = 0x62; break;
+ case 0x00C3: ch = 0x66; break;
+ case 0x00C4: ch = 0x63; break;
+ case 0x00C5: ch = 0x67; break;
+ case 0x00C6: ch = 0x9E; break;
+ case 0x00C7: ch = 0x68; break;
+ case 0x00C8: ch = 0x74; break;
+ case 0x00C9: ch = 0x71; break;
+ case 0x00CA: ch = 0x72; break;
+ case 0x00CB: ch = 0x73; break;
+ case 0x00CC: ch = 0x78; break;
+ case 0x00CD: ch = 0x75; break;
+ case 0x00CE: ch = 0x76; break;
+ case 0x00CF: ch = 0x77; break;
+ case 0x00D0: ch = 0xAC; break;
+ case 0x00D1: ch = 0x7B; break;
+ case 0x00D2: ch = 0xED; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEB; break;
+ case 0x00D5: ch = 0xEF; break;
+ case 0x00D6: ch = 0xEC; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00D8: ch = 0x80; break;
+ case 0x00D9: ch = 0xFD; break;
+ case 0x00DA: ch = 0xFE; break;
+ case 0x00DB: ch = 0xFB; break;
+ case 0x00DC: ch = 0xFC; break;
+ case 0x00DD: ch = 0xAD; break;
+ case 0x00DE: ch = 0xAE; break;
+ case 0x00DF: ch = 0x59; break;
+ case 0x00E0: ch = 0x44; break;
+ case 0x00E1: ch = 0x45; break;
+ case 0x00E2: ch = 0x42; break;
+ case 0x00E3: ch = 0x46; break;
+ case 0x00E4: ch = 0x43; break;
+ case 0x00E5: ch = 0x47; break;
+ case 0x00E6: ch = 0x9C; break;
+ case 0x00E7: ch = 0x48; break;
+ case 0x00E8: ch = 0x54; break;
+ case 0x00E9: ch = 0x51; break;
+ case 0x00EA: ch = 0x52; break;
+ case 0x00EB: ch = 0x53; break;
+ case 0x00EC: ch = 0x58; break;
+ case 0x00ED: ch = 0x55; break;
+ case 0x00EE: ch = 0x56; break;
+ case 0x00EF: ch = 0x57; break;
+ case 0x00F0: ch = 0x8C; break;
+ case 0x00F1: ch = 0x6A; break;
+ case 0x00F2: ch = 0xCD; break;
+ case 0x00F3: ch = 0xCE; break;
+ case 0x00F4: ch = 0xCB; break;
+ case 0x00F5: ch = 0xCF; break;
+ case 0x00F6: ch = 0xCC; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x00F8: ch = 0x70; break;
+ case 0x00F9: ch = 0xDD; break;
+ case 0x00FA: ch = 0xDE; break;
+ case 0x00FB: ch = 0xDB; break;
+ case 0x00FC: ch = 0xDC; break;
+ case 0x00FD: ch = 0x8D; break;
+ case 0x00FE: ch = 0x8E; break;
+ case 0x00FF: ch = 0xDF; break;
+ case 0x203E: ch = 0xBC; break;
+ case 0x20AC: ch = 0x9F; break;
+ case 0xFF01: ch = 0xBB; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0x69; break;
+ case 0xFF04: ch = 0x5B; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0x7C; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0x4A; break;
+ case 0xFF3C: ch = 0xE0; break;
+ case 0xFF3D: ch = 0x5A; break;
+ case 0xFF3E: ch = 0xBA; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0x79; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0xC0; break;
+ case 0xFF5C: ch = 0x4F; break;
+ case 0xFF5D: ch = 0xD0; break;
+ case 0xFF5E: ch = 0xBD; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP1145
+
+public class ENCibm1145 : CP1145
+{
+ public ENCibm1145() : base() {}
+
+}; // class ENCibm1145
+
+}; // namespace I18N.Rare
diff --git a/mcs/class/I18N/Rare/CP1146.cs b/mcs/class/I18N/Rare/CP1146.cs
new file mode 100644
index 00000000000..a68de00de82
--- /dev/null
+++ b/mcs/class/I18N/Rare/CP1146.cs
@@ -0,0 +1,895 @@
+/*
+ * CP1146.cs - IBM EBCDIC (United Kingdom with Euro) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-1146.ucm".
+
+namespace I18N.Rare
+{
+
+using System;
+using I18N.Common;
+
+public class CP1146 : ByteEncoding
+{
+ public CP1146()
+ : base(1146, ToChars, "IBM EBCDIC (United Kingdom with Euro)",
+ "ibm1146", "ibm1146", "ibm1146",
+ false, false, false, false, 1252)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u009C', '\u0009',
+ '\u0086', '\u007F', '\u0097', '\u008D', '\u008E', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u009D', '\u0085', '\u0008', '\u0087',
+ '\u0018', '\u0019', '\u0092', '\u008F', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0080', '\u0081', '\u0082', '\u0083',
+ '\u0084', '\u000A', '\u0017', '\u001B', '\u0088', '\u0089',
+ '\u008A', '\u008B', '\u008C', '\u0005', '\u0006', '\u0007',
+ '\u0090', '\u0091', '\u0016', '\u0093', '\u0094', '\u0095',
+ '\u0096', '\u0004', '\u0098', '\u0099', '\u009A', '\u009B',
+ '\u0014', '\u0015', '\u009E', '\u001A', '\u0020', '\u00A0',
+ '\u00E2', '\u00E4', '\u00E0', '\u00E1', '\u00E3', '\u00E5',
+ '\u00E7', '\u00F1', '\u0024', '\u002E', '\u003C', '\u0028',
+ '\u002B', '\u007C', '\u0026', '\u00E9', '\u00EA', '\u00EB',
+ '\u00E8', '\u00ED', '\u00EE', '\u00EF', '\u00EC', '\u00DF',
+ '\u0021', '\u00A3', '\u002A', '\u0029', '\u003B', '\u00AC',
+ '\u002D', '\u002F', '\u00C2', '\u00C4', '\u00C0', '\u00C1',
+ '\u00C3', '\u00C5', '\u00C7', '\u00D1', '\u00A6', '\u002C',
+ '\u0025', '\u005F', '\u003E', '\u003F', '\u00F8', '\u00C9',
+ '\u00CA', '\u00CB', '\u00C8', '\u00CD', '\u00CE', '\u00CF',
+ '\u00CC', '\u0060', '\u003A', '\u0023', '\u0040', '\u0027',
+ '\u003D', '\u0022', '\u00D8', '\u0061', '\u0062', '\u0063',
+ '\u0064', '\u0065', '\u0066', '\u0067', '\u0068', '\u0069',
+ '\u00AB', '\u00BB', '\u00F0', '\u00FD', '\u00FE', '\u00B1',
+ '\u00B0', '\u006A', '\u006B', '\u006C', '\u006D', '\u006E',
+ '\u006F', '\u0070', '\u0071', '\u0072', '\u00AA', '\u00BA',
+ '\u00E6', '\u00B8', '\u00C6', '\u20AC', '\u00B5', '\u00AF',
+ '\u0073', '\u0074', '\u0075', '\u0076', '\u0077', '\u0078',
+ '\u0079', '\u007A', '\u00A1', '\u00BF', '\u00D0', '\u00DD',
+ '\u00DE', '\u00AE', '\u00A2', '\u005B', '\u00A5', '\u00B7',
+ '\u00A9', '\u00A7', '\u00B6', '\u00BC', '\u00BD', '\u00BE',
+ '\u005E', '\u005D', '\u007E', '\u00A8', '\u00B4', '\u00D7',
+ '\u007B', '\u0041', '\u0042', '\u0043', '\u0044', '\u0045',
+ '\u0046', '\u0047', '\u0048', '\u0049', '\u00AD', '\u00F4',
+ '\u00F6', '\u00F2', '\u00F3', '\u00F5', '\u007D', '\u004A',
+ '\u004B', '\u004C', '\u004D', '\u004E', '\u004F', '\u0050',
+ '\u0051', '\u0052', '\u00B9', '\u00FB', '\u00FC', '\u00F9',
+ '\u00FA', '\u00FF', '\u005C', '\u00F7', '\u0053', '\u0054',
+ '\u0055', '\u0056', '\u0057', '\u0058', '\u0059', '\u005A',
+ '\u00B2', '\u00D4', '\u00D6', '\u00D2', '\u00D3', '\u00D5',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u00B3', '\u00DB',
+ '\u00DC', '\u00D9', '\u00DA', '\u009F',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x00B6:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x5A; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0x7B; break;
+ case 0x0024: ch = 0x4A; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0x7C; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0xB1; break;
+ case 0x005C: ch = 0xE0; break;
+ case 0x005D: ch = 0xBB; break;
+ case 0x005E: ch = 0xBA; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0x79; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0xC0; break;
+ case 0x007C: ch = 0x4F; break;
+ case 0x007D: ch = 0xD0; break;
+ case 0x007E: ch = 0xBC; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A1: ch = 0xAA; break;
+ case 0x00A2: ch = 0xB0; break;
+ case 0x00A3: ch = 0x5B; break;
+ case 0x00A5: ch = 0xB2; break;
+ case 0x00A6: ch = 0x6A; break;
+ case 0x00A7: ch = 0xB5; break;
+ case 0x00A8: ch = 0xBD; break;
+ case 0x00A9: ch = 0xB4; break;
+ case 0x00AA: ch = 0x9A; break;
+ case 0x00AB: ch = 0x8A; break;
+ case 0x00AC: ch = 0x5F; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00AE: ch = 0xAF; break;
+ case 0x00AF: ch = 0xA1; break;
+ case 0x00B0: ch = 0x90; break;
+ case 0x00B1: ch = 0x8F; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xBE; break;
+ case 0x00B5: ch = 0xA0; break;
+ case 0x00B7: ch = 0xB3; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00B9: ch = 0xDA; break;
+ case 0x00BA: ch = 0x9B; break;
+ case 0x00BB: ch = 0x8B; break;
+ case 0x00BC: ch = 0xB7; break;
+ case 0x00BD: ch = 0xB8; break;
+ case 0x00BE: ch = 0xB9; break;
+ case 0x00BF: ch = 0xAB; break;
+ case 0x00C0: ch = 0x64; break;
+ case 0x00C1: ch = 0x65; break;
+ case 0x00C2: ch = 0x62; break;
+ case 0x00C3: ch = 0x66; break;
+ case 0x00C4: ch = 0x63; break;
+ case 0x00C5: ch = 0x67; break;
+ case 0x00C6: ch = 0x9E; break;
+ case 0x00C7: ch = 0x68; break;
+ case 0x00C8: ch = 0x74; break;
+ case 0x00C9: ch = 0x71; break;
+ case 0x00CA: ch = 0x72; break;
+ case 0x00CB: ch = 0x73; break;
+ case 0x00CC: ch = 0x78; break;
+ case 0x00CD: ch = 0x75; break;
+ case 0x00CE: ch = 0x76; break;
+ case 0x00CF: ch = 0x77; break;
+ case 0x00D0: ch = 0xAC; break;
+ case 0x00D1: ch = 0x69; break;
+ case 0x00D2: ch = 0xED; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEB; break;
+ case 0x00D5: ch = 0xEF; break;
+ case 0x00D6: ch = 0xEC; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00D8: ch = 0x80; break;
+ case 0x00D9: ch = 0xFD; break;
+ case 0x00DA: ch = 0xFE; break;
+ case 0x00DB: ch = 0xFB; break;
+ case 0x00DC: ch = 0xFC; break;
+ case 0x00DD: ch = 0xAD; break;
+ case 0x00DE: ch = 0xAE; break;
+ case 0x00DF: ch = 0x59; break;
+ case 0x00E0: ch = 0x44; break;
+ case 0x00E1: ch = 0x45; break;
+ case 0x00E2: ch = 0x42; break;
+ case 0x00E3: ch = 0x46; break;
+ case 0x00E4: ch = 0x43; break;
+ case 0x00E5: ch = 0x47; break;
+ case 0x00E6: ch = 0x9C; break;
+ case 0x00E7: ch = 0x48; break;
+ case 0x00E8: ch = 0x54; break;
+ case 0x00E9: ch = 0x51; break;
+ case 0x00EA: ch = 0x52; break;
+ case 0x00EB: ch = 0x53; break;
+ case 0x00EC: ch = 0x58; break;
+ case 0x00ED: ch = 0x55; break;
+ case 0x00EE: ch = 0x56; break;
+ case 0x00EF: ch = 0x57; break;
+ case 0x00F0: ch = 0x8C; break;
+ case 0x00F1: ch = 0x49; break;
+ case 0x00F2: ch = 0xCD; break;
+ case 0x00F3: ch = 0xCE; break;
+ case 0x00F4: ch = 0xCB; break;
+ case 0x00F5: ch = 0xCF; break;
+ case 0x00F6: ch = 0xCC; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x00F8: ch = 0x70; break;
+ case 0x00F9: ch = 0xDD; break;
+ case 0x00FA: ch = 0xDE; break;
+ case 0x00FB: ch = 0xDB; break;
+ case 0x00FC: ch = 0xDC; break;
+ case 0x00FD: ch = 0x8D; break;
+ case 0x00FE: ch = 0x8E; break;
+ case 0x00FF: ch = 0xDF; break;
+ case 0x203E: ch = 0xA1; break;
+ case 0x20AC: ch = 0x9F; break;
+ case 0xFF01: ch = 0x5A; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0x7B; break;
+ case 0xFF04: ch = 0x4A; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0x7C; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0xB1; break;
+ case 0xFF3C: ch = 0xE0; break;
+ case 0xFF3D: ch = 0xBB; break;
+ case 0xFF3E: ch = 0xBA; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0x79; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0xC0; break;
+ case 0xFF5C: ch = 0x4F; break;
+ case 0xFF5D: ch = 0xD0; break;
+ case 0xFF5E: ch = 0xBC; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x00B6:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x5A; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0x7B; break;
+ case 0x0024: ch = 0x4A; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0x7C; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0xB1; break;
+ case 0x005C: ch = 0xE0; break;
+ case 0x005D: ch = 0xBB; break;
+ case 0x005E: ch = 0xBA; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0x79; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0xC0; break;
+ case 0x007C: ch = 0x4F; break;
+ case 0x007D: ch = 0xD0; break;
+ case 0x007E: ch = 0xBC; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A1: ch = 0xAA; break;
+ case 0x00A2: ch = 0xB0; break;
+ case 0x00A3: ch = 0x5B; break;
+ case 0x00A5: ch = 0xB2; break;
+ case 0x00A6: ch = 0x6A; break;
+ case 0x00A7: ch = 0xB5; break;
+ case 0x00A8: ch = 0xBD; break;
+ case 0x00A9: ch = 0xB4; break;
+ case 0x00AA: ch = 0x9A; break;
+ case 0x00AB: ch = 0x8A; break;
+ case 0x00AC: ch = 0x5F; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00AE: ch = 0xAF; break;
+ case 0x00AF: ch = 0xA1; break;
+ case 0x00B0: ch = 0x90; break;
+ case 0x00B1: ch = 0x8F; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xBE; break;
+ case 0x00B5: ch = 0xA0; break;
+ case 0x00B7: ch = 0xB3; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00B9: ch = 0xDA; break;
+ case 0x00BA: ch = 0x9B; break;
+ case 0x00BB: ch = 0x8B; break;
+ case 0x00BC: ch = 0xB7; break;
+ case 0x00BD: ch = 0xB8; break;
+ case 0x00BE: ch = 0xB9; break;
+ case 0x00BF: ch = 0xAB; break;
+ case 0x00C0: ch = 0x64; break;
+ case 0x00C1: ch = 0x65; break;
+ case 0x00C2: ch = 0x62; break;
+ case 0x00C3: ch = 0x66; break;
+ case 0x00C4: ch = 0x63; break;
+ case 0x00C5: ch = 0x67; break;
+ case 0x00C6: ch = 0x9E; break;
+ case 0x00C7: ch = 0x68; break;
+ case 0x00C8: ch = 0x74; break;
+ case 0x00C9: ch = 0x71; break;
+ case 0x00CA: ch = 0x72; break;
+ case 0x00CB: ch = 0x73; break;
+ case 0x00CC: ch = 0x78; break;
+ case 0x00CD: ch = 0x75; break;
+ case 0x00CE: ch = 0x76; break;
+ case 0x00CF: ch = 0x77; break;
+ case 0x00D0: ch = 0xAC; break;
+ case 0x00D1: ch = 0x69; break;
+ case 0x00D2: ch = 0xED; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEB; break;
+ case 0x00D5: ch = 0xEF; break;
+ case 0x00D6: ch = 0xEC; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00D8: ch = 0x80; break;
+ case 0x00D9: ch = 0xFD; break;
+ case 0x00DA: ch = 0xFE; break;
+ case 0x00DB: ch = 0xFB; break;
+ case 0x00DC: ch = 0xFC; break;
+ case 0x00DD: ch = 0xAD; break;
+ case 0x00DE: ch = 0xAE; break;
+ case 0x00DF: ch = 0x59; break;
+ case 0x00E0: ch = 0x44; break;
+ case 0x00E1: ch = 0x45; break;
+ case 0x00E2: ch = 0x42; break;
+ case 0x00E3: ch = 0x46; break;
+ case 0x00E4: ch = 0x43; break;
+ case 0x00E5: ch = 0x47; break;
+ case 0x00E6: ch = 0x9C; break;
+ case 0x00E7: ch = 0x48; break;
+ case 0x00E8: ch = 0x54; break;
+ case 0x00E9: ch = 0x51; break;
+ case 0x00EA: ch = 0x52; break;
+ case 0x00EB: ch = 0x53; break;
+ case 0x00EC: ch = 0x58; break;
+ case 0x00ED: ch = 0x55; break;
+ case 0x00EE: ch = 0x56; break;
+ case 0x00EF: ch = 0x57; break;
+ case 0x00F0: ch = 0x8C; break;
+ case 0x00F1: ch = 0x49; break;
+ case 0x00F2: ch = 0xCD; break;
+ case 0x00F3: ch = 0xCE; break;
+ case 0x00F4: ch = 0xCB; break;
+ case 0x00F5: ch = 0xCF; break;
+ case 0x00F6: ch = 0xCC; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x00F8: ch = 0x70; break;
+ case 0x00F9: ch = 0xDD; break;
+ case 0x00FA: ch = 0xDE; break;
+ case 0x00FB: ch = 0xDB; break;
+ case 0x00FC: ch = 0xDC; break;
+ case 0x00FD: ch = 0x8D; break;
+ case 0x00FE: ch = 0x8E; break;
+ case 0x00FF: ch = 0xDF; break;
+ case 0x203E: ch = 0xA1; break;
+ case 0x20AC: ch = 0x9F; break;
+ case 0xFF01: ch = 0x5A; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0x7B; break;
+ case 0xFF04: ch = 0x4A; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0x7C; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0xB1; break;
+ case 0xFF3C: ch = 0xE0; break;
+ case 0xFF3D: ch = 0xBB; break;
+ case 0xFF3E: ch = 0xBA; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0x79; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0xC0; break;
+ case 0xFF5C: ch = 0x4F; break;
+ case 0xFF5D: ch = 0xD0; break;
+ case 0xFF5E: ch = 0xBC; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP1146
+
+public class ENCibm1146 : CP1146
+{
+ public ENCibm1146() : base() {}
+
+}; // class ENCibm1146
+
+}; // namespace I18N.Rare
diff --git a/mcs/class/I18N/Rare/CP1147.cs b/mcs/class/I18N/Rare/CP1147.cs
new file mode 100644
index 00000000000..700d07bbc94
--- /dev/null
+++ b/mcs/class/I18N/Rare/CP1147.cs
@@ -0,0 +1,895 @@
+/*
+ * CP1147.cs - IBM EBCDIC (France with Euro) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-1147.ucm".
+
+namespace I18N.Rare
+{
+
+using System;
+using I18N.Common;
+
+public class CP1147 : ByteEncoding
+{
+ public CP1147()
+ : base(1147, ToChars, "IBM EBCDIC (France with Euro)",
+ "ibm1147", "ibm1147", "ibm1147",
+ false, false, false, false, 1252)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u009C', '\u0009',
+ '\u0086', '\u007F', '\u0097', '\u008D', '\u008E', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u009D', '\u0085', '\u0008', '\u0087',
+ '\u0018', '\u0019', '\u0092', '\u008F', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0080', '\u0081', '\u0082', '\u0083',
+ '\u0084', '\u000A', '\u0017', '\u001B', '\u0088', '\u0089',
+ '\u008A', '\u008B', '\u008C', '\u0005', '\u0006', '\u0007',
+ '\u0090', '\u0091', '\u0016', '\u0093', '\u0094', '\u0095',
+ '\u0096', '\u0004', '\u0098', '\u0099', '\u009A', '\u009B',
+ '\u0014', '\u0015', '\u009E', '\u001A', '\u0020', '\u00A0',
+ '\u00E2', '\u00E4', '\u0040', '\u00E1', '\u00E3', '\u00E5',
+ '\u005C', '\u00F1', '\u00B0', '\u002E', '\u003C', '\u0028',
+ '\u002B', '\u0021', '\u0026', '\u007B', '\u00EA', '\u00EB',
+ '\u007D', '\u00ED', '\u00EE', '\u00EF', '\u00EC', '\u00DF',
+ '\u00A7', '\u0024', '\u002A', '\u0029', '\u003B', '\u005E',
+ '\u002D', '\u002F', '\u00C2', '\u00C4', '\u00C0', '\u00C1',
+ '\u00C3', '\u00C5', '\u00C7', '\u00D1', '\u00F9', '\u002C',
+ '\u0025', '\u005F', '\u003E', '\u003F', '\u00F8', '\u00C9',
+ '\u00CA', '\u00CB', '\u00C8', '\u00CD', '\u00CE', '\u00CF',
+ '\u00CC', '\u00B5', '\u003A', '\u00A3', '\u00E0', '\u0027',
+ '\u003D', '\u0022', '\u00D8', '\u0061', '\u0062', '\u0063',
+ '\u0064', '\u0065', '\u0066', '\u0067', '\u0068', '\u0069',
+ '\u00AB', '\u00BB', '\u00F0', '\u00FD', '\u00FE', '\u00B1',
+ '\u005B', '\u006A', '\u006B', '\u006C', '\u006D', '\u006E',
+ '\u006F', '\u0070', '\u0071', '\u0072', '\u00AA', '\u00BA',
+ '\u00E6', '\u00B8', '\u00C6', '\u20AC', '\u0060', '\u00A8',
+ '\u0073', '\u0074', '\u0075', '\u0076', '\u0077', '\u0078',
+ '\u0079', '\u007A', '\u00A1', '\u00BF', '\u00D0', '\u00DD',
+ '\u00DE', '\u00AE', '\u00A2', '\u0023', '\u00A5', '\u00B7',
+ '\u00A9', '\u005D', '\u00B6', '\u00BC', '\u00BD', '\u00BE',
+ '\u00AC', '\u007C', '\u00AF', '\u007E', '\u00B4', '\u00D7',
+ '\u00E9', '\u0041', '\u0042', '\u0043', '\u0044', '\u0045',
+ '\u0046', '\u0047', '\u0048', '\u0049', '\u00AD', '\u00F4',
+ '\u00F6', '\u00F2', '\u00F3', '\u00F5', '\u00E8', '\u004A',
+ '\u004B', '\u004C', '\u004D', '\u004E', '\u004F', '\u0050',
+ '\u0051', '\u0052', '\u00B9', '\u00FB', '\u00FC', '\u00A6',
+ '\u00FA', '\u00FF', '\u00E7', '\u00F7', '\u0053', '\u0054',
+ '\u0055', '\u0056', '\u0057', '\u0058', '\u0059', '\u005A',
+ '\u00B2', '\u00D4', '\u00D6', '\u00D2', '\u00D3', '\u00D5',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u00B3', '\u00DB',
+ '\u00DC', '\u00D9', '\u00DA', '\u009F',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x00B6:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x4F; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0xB1; break;
+ case 0x0024: ch = 0x5B; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0x44; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0x90; break;
+ case 0x005C: ch = 0x48; break;
+ case 0x005D: ch = 0xB5; break;
+ case 0x005E: ch = 0x5F; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0xA0; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0x51; break;
+ case 0x007C: ch = 0xBB; break;
+ case 0x007D: ch = 0x54; break;
+ case 0x007E: ch = 0xBD; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A1: ch = 0xAA; break;
+ case 0x00A2: ch = 0xB0; break;
+ case 0x00A3: ch = 0x7B; break;
+ case 0x00A5: ch = 0xB2; break;
+ case 0x00A6: ch = 0xDD; break;
+ case 0x00A7: ch = 0x5A; break;
+ case 0x00A8: ch = 0xA1; break;
+ case 0x00A9: ch = 0xB4; break;
+ case 0x00AA: ch = 0x9A; break;
+ case 0x00AB: ch = 0x8A; break;
+ case 0x00AC: ch = 0xBA; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00AE: ch = 0xAF; break;
+ case 0x00AF: ch = 0xBC; break;
+ case 0x00B0: ch = 0x4A; break;
+ case 0x00B1: ch = 0x8F; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xBE; break;
+ case 0x00B5: ch = 0x79; break;
+ case 0x00B7: ch = 0xB3; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00B9: ch = 0xDA; break;
+ case 0x00BA: ch = 0x9B; break;
+ case 0x00BB: ch = 0x8B; break;
+ case 0x00BC: ch = 0xB7; break;
+ case 0x00BD: ch = 0xB8; break;
+ case 0x00BE: ch = 0xB9; break;
+ case 0x00BF: ch = 0xAB; break;
+ case 0x00C0: ch = 0x64; break;
+ case 0x00C1: ch = 0x65; break;
+ case 0x00C2: ch = 0x62; break;
+ case 0x00C3: ch = 0x66; break;
+ case 0x00C4: ch = 0x63; break;
+ case 0x00C5: ch = 0x67; break;
+ case 0x00C6: ch = 0x9E; break;
+ case 0x00C7: ch = 0x68; break;
+ case 0x00C8: ch = 0x74; break;
+ case 0x00C9: ch = 0x71; break;
+ case 0x00CA: ch = 0x72; break;
+ case 0x00CB: ch = 0x73; break;
+ case 0x00CC: ch = 0x78; break;
+ case 0x00CD: ch = 0x75; break;
+ case 0x00CE: ch = 0x76; break;
+ case 0x00CF: ch = 0x77; break;
+ case 0x00D0: ch = 0xAC; break;
+ case 0x00D1: ch = 0x69; break;
+ case 0x00D2: ch = 0xED; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEB; break;
+ case 0x00D5: ch = 0xEF; break;
+ case 0x00D6: ch = 0xEC; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00D8: ch = 0x80; break;
+ case 0x00D9: ch = 0xFD; break;
+ case 0x00DA: ch = 0xFE; break;
+ case 0x00DB: ch = 0xFB; break;
+ case 0x00DC: ch = 0xFC; break;
+ case 0x00DD: ch = 0xAD; break;
+ case 0x00DE: ch = 0xAE; break;
+ case 0x00DF: ch = 0x59; break;
+ case 0x00E0: ch = 0x7C; break;
+ case 0x00E1: ch = 0x45; break;
+ case 0x00E2: ch = 0x42; break;
+ case 0x00E3: ch = 0x46; break;
+ case 0x00E4: ch = 0x43; break;
+ case 0x00E5: ch = 0x47; break;
+ case 0x00E6: ch = 0x9C; break;
+ case 0x00E7: ch = 0xE0; break;
+ case 0x00E8: ch = 0xD0; break;
+ case 0x00E9: ch = 0xC0; break;
+ case 0x00EA: ch = 0x52; break;
+ case 0x00EB: ch = 0x53; break;
+ case 0x00EC: ch = 0x58; break;
+ case 0x00ED: ch = 0x55; break;
+ case 0x00EE: ch = 0x56; break;
+ case 0x00EF: ch = 0x57; break;
+ case 0x00F0: ch = 0x8C; break;
+ case 0x00F1: ch = 0x49; break;
+ case 0x00F2: ch = 0xCD; break;
+ case 0x00F3: ch = 0xCE; break;
+ case 0x00F4: ch = 0xCB; break;
+ case 0x00F5: ch = 0xCF; break;
+ case 0x00F6: ch = 0xCC; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x00F8: ch = 0x70; break;
+ case 0x00F9: ch = 0x6A; break;
+ case 0x00FA: ch = 0xDE; break;
+ case 0x00FB: ch = 0xDB; break;
+ case 0x00FC: ch = 0xDC; break;
+ case 0x00FD: ch = 0x8D; break;
+ case 0x00FE: ch = 0x8E; break;
+ case 0x00FF: ch = 0xDF; break;
+ case 0x203E: ch = 0xBC; break;
+ case 0x20AC: ch = 0x9F; break;
+ case 0xFF01: ch = 0x4F; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0xB1; break;
+ case 0xFF04: ch = 0x5B; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0x44; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0x90; break;
+ case 0xFF3C: ch = 0x48; break;
+ case 0xFF3D: ch = 0xB5; break;
+ case 0xFF3E: ch = 0x5F; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0xA0; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0x51; break;
+ case 0xFF5C: ch = 0xBB; break;
+ case 0xFF5D: ch = 0x54; break;
+ case 0xFF5E: ch = 0xBD; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x00B6:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x4F; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0xB1; break;
+ case 0x0024: ch = 0x5B; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0x44; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0x90; break;
+ case 0x005C: ch = 0x48; break;
+ case 0x005D: ch = 0xB5; break;
+ case 0x005E: ch = 0x5F; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0xA0; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0x51; break;
+ case 0x007C: ch = 0xBB; break;
+ case 0x007D: ch = 0x54; break;
+ case 0x007E: ch = 0xBD; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A1: ch = 0xAA; break;
+ case 0x00A2: ch = 0xB0; break;
+ case 0x00A3: ch = 0x7B; break;
+ case 0x00A5: ch = 0xB2; break;
+ case 0x00A6: ch = 0xDD; break;
+ case 0x00A7: ch = 0x5A; break;
+ case 0x00A8: ch = 0xA1; break;
+ case 0x00A9: ch = 0xB4; break;
+ case 0x00AA: ch = 0x9A; break;
+ case 0x00AB: ch = 0x8A; break;
+ case 0x00AC: ch = 0xBA; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00AE: ch = 0xAF; break;
+ case 0x00AF: ch = 0xBC; break;
+ case 0x00B0: ch = 0x4A; break;
+ case 0x00B1: ch = 0x8F; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xBE; break;
+ case 0x00B5: ch = 0x79; break;
+ case 0x00B7: ch = 0xB3; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00B9: ch = 0xDA; break;
+ case 0x00BA: ch = 0x9B; break;
+ case 0x00BB: ch = 0x8B; break;
+ case 0x00BC: ch = 0xB7; break;
+ case 0x00BD: ch = 0xB8; break;
+ case 0x00BE: ch = 0xB9; break;
+ case 0x00BF: ch = 0xAB; break;
+ case 0x00C0: ch = 0x64; break;
+ case 0x00C1: ch = 0x65; break;
+ case 0x00C2: ch = 0x62; break;
+ case 0x00C3: ch = 0x66; break;
+ case 0x00C4: ch = 0x63; break;
+ case 0x00C5: ch = 0x67; break;
+ case 0x00C6: ch = 0x9E; break;
+ case 0x00C7: ch = 0x68; break;
+ case 0x00C8: ch = 0x74; break;
+ case 0x00C9: ch = 0x71; break;
+ case 0x00CA: ch = 0x72; break;
+ case 0x00CB: ch = 0x73; break;
+ case 0x00CC: ch = 0x78; break;
+ case 0x00CD: ch = 0x75; break;
+ case 0x00CE: ch = 0x76; break;
+ case 0x00CF: ch = 0x77; break;
+ case 0x00D0: ch = 0xAC; break;
+ case 0x00D1: ch = 0x69; break;
+ case 0x00D2: ch = 0xED; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEB; break;
+ case 0x00D5: ch = 0xEF; break;
+ case 0x00D6: ch = 0xEC; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00D8: ch = 0x80; break;
+ case 0x00D9: ch = 0xFD; break;
+ case 0x00DA: ch = 0xFE; break;
+ case 0x00DB: ch = 0xFB; break;
+ case 0x00DC: ch = 0xFC; break;
+ case 0x00DD: ch = 0xAD; break;
+ case 0x00DE: ch = 0xAE; break;
+ case 0x00DF: ch = 0x59; break;
+ case 0x00E0: ch = 0x7C; break;
+ case 0x00E1: ch = 0x45; break;
+ case 0x00E2: ch = 0x42; break;
+ case 0x00E3: ch = 0x46; break;
+ case 0x00E4: ch = 0x43; break;
+ case 0x00E5: ch = 0x47; break;
+ case 0x00E6: ch = 0x9C; break;
+ case 0x00E7: ch = 0xE0; break;
+ case 0x00E8: ch = 0xD0; break;
+ case 0x00E9: ch = 0xC0; break;
+ case 0x00EA: ch = 0x52; break;
+ case 0x00EB: ch = 0x53; break;
+ case 0x00EC: ch = 0x58; break;
+ case 0x00ED: ch = 0x55; break;
+ case 0x00EE: ch = 0x56; break;
+ case 0x00EF: ch = 0x57; break;
+ case 0x00F0: ch = 0x8C; break;
+ case 0x00F1: ch = 0x49; break;
+ case 0x00F2: ch = 0xCD; break;
+ case 0x00F3: ch = 0xCE; break;
+ case 0x00F4: ch = 0xCB; break;
+ case 0x00F5: ch = 0xCF; break;
+ case 0x00F6: ch = 0xCC; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x00F8: ch = 0x70; break;
+ case 0x00F9: ch = 0x6A; break;
+ case 0x00FA: ch = 0xDE; break;
+ case 0x00FB: ch = 0xDB; break;
+ case 0x00FC: ch = 0xDC; break;
+ case 0x00FD: ch = 0x8D; break;
+ case 0x00FE: ch = 0x8E; break;
+ case 0x00FF: ch = 0xDF; break;
+ case 0x203E: ch = 0xBC; break;
+ case 0x20AC: ch = 0x9F; break;
+ case 0xFF01: ch = 0x4F; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0xB1; break;
+ case 0xFF04: ch = 0x5B; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0x44; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0x90; break;
+ case 0xFF3C: ch = 0x48; break;
+ case 0xFF3D: ch = 0xB5; break;
+ case 0xFF3E: ch = 0x5F; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0xA0; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0x51; break;
+ case 0xFF5C: ch = 0xBB; break;
+ case 0xFF5D: ch = 0x54; break;
+ case 0xFF5E: ch = 0xBD; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP1147
+
+public class ENCibm1147 : CP1147
+{
+ public ENCibm1147() : base() {}
+
+}; // class ENCibm1147
+
+}; // namespace I18N.Rare
diff --git a/mcs/class/I18N/Rare/CP1148.cs b/mcs/class/I18N/Rare/CP1148.cs
new file mode 100644
index 00000000000..6d911aa295c
--- /dev/null
+++ b/mcs/class/I18N/Rare/CP1148.cs
@@ -0,0 +1,895 @@
+/*
+ * CP1148.cs - IBM EBCDIC (International with Euro) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-1148.ucm".
+
+namespace I18N.Rare
+{
+
+using System;
+using I18N.Common;
+
+public class CP1148 : ByteEncoding
+{
+ public CP1148()
+ : base(1148, ToChars, "IBM EBCDIC (International with Euro)",
+ "ibm1148", "ibm1148", "ibm1148",
+ false, false, false, false, 1252)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u009C', '\u0009',
+ '\u0086', '\u007F', '\u0097', '\u008D', '\u008E', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u009D', '\u0085', '\u0008', '\u0087',
+ '\u0018', '\u0019', '\u0092', '\u008F', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0080', '\u0081', '\u0082', '\u0083',
+ '\u0084', '\u000A', '\u0017', '\u001B', '\u0088', '\u0089',
+ '\u008A', '\u008B', '\u008C', '\u0005', '\u0006', '\u0007',
+ '\u0090', '\u0091', '\u0016', '\u0093', '\u0094', '\u0095',
+ '\u0096', '\u0004', '\u0098', '\u0099', '\u009A', '\u009B',
+ '\u0014', '\u0015', '\u009E', '\u001A', '\u0020', '\u00A0',
+ '\u00E2', '\u00E4', '\u00E0', '\u00E1', '\u00E3', '\u00E5',
+ '\u00E7', '\u00F1', '\u005B', '\u002E', '\u003C', '\u0028',
+ '\u002B', '\u0021', '\u0026', '\u00E9', '\u00EA', '\u00EB',
+ '\u00E8', '\u00ED', '\u00EE', '\u00EF', '\u00EC', '\u00DF',
+ '\u005D', '\u0024', '\u002A', '\u0029', '\u003B', '\u005E',
+ '\u002D', '\u002F', '\u00C2', '\u00C4', '\u00C0', '\u00C1',
+ '\u00C3', '\u00C5', '\u00C7', '\u00D1', '\u00A6', '\u002C',
+ '\u0025', '\u005F', '\u003E', '\u003F', '\u00F8', '\u00C9',
+ '\u00CA', '\u00CB', '\u00C8', '\u00CD', '\u00CE', '\u00CF',
+ '\u00CC', '\u0060', '\u003A', '\u0023', '\u0040', '\u0027',
+ '\u003D', '\u0022', '\u00D8', '\u0061', '\u0062', '\u0063',
+ '\u0064', '\u0065', '\u0066', '\u0067', '\u0068', '\u0069',
+ '\u00AB', '\u00BB', '\u00F0', '\u00FD', '\u00FE', '\u00B1',
+ '\u00B0', '\u006A', '\u006B', '\u006C', '\u006D', '\u006E',
+ '\u006F', '\u0070', '\u0071', '\u0072', '\u00AA', '\u00BA',
+ '\u00E6', '\u00B8', '\u00C6', '\u20AC', '\u00B5', '\u007E',
+ '\u0073', '\u0074', '\u0075', '\u0076', '\u0077', '\u0078',
+ '\u0079', '\u007A', '\u00A1', '\u00BF', '\u00D0', '\u00DD',
+ '\u00DE', '\u00AE', '\u00A2', '\u00A3', '\u00A5', '\u00B7',
+ '\u00A9', '\u00A7', '\u00B6', '\u00BC', '\u00BD', '\u00BE',
+ '\u00AC', '\u007C', '\u00AF', '\u00A8', '\u00B4', '\u00D7',
+ '\u007B', '\u0041', '\u0042', '\u0043', '\u0044', '\u0045',
+ '\u0046', '\u0047', '\u0048', '\u0049', '\u00AD', '\u00F4',
+ '\u00F6', '\u00F2', '\u00F3', '\u00F5', '\u007D', '\u004A',
+ '\u004B', '\u004C', '\u004D', '\u004E', '\u004F', '\u0050',
+ '\u0051', '\u0052', '\u00B9', '\u00FB', '\u00FC', '\u00F9',
+ '\u00FA', '\u00FF', '\u005C', '\u00F7', '\u0053', '\u0054',
+ '\u0055', '\u0056', '\u0057', '\u0058', '\u0059', '\u005A',
+ '\u00B2', '\u00D4', '\u00D6', '\u00D2', '\u00D3', '\u00D5',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u00B3', '\u00DB',
+ '\u00DC', '\u00D9', '\u00DA', '\u009F',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x00B6:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x4F; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0x7B; break;
+ case 0x0024: ch = 0x5B; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0x7C; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0x4A; break;
+ case 0x005C: ch = 0xE0; break;
+ case 0x005D: ch = 0x5A; break;
+ case 0x005E: ch = 0x5F; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0x79; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0xC0; break;
+ case 0x007C: ch = 0xBB; break;
+ case 0x007D: ch = 0xD0; break;
+ case 0x007E: ch = 0xA1; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A1: ch = 0xAA; break;
+ case 0x00A2: ch = 0xB0; break;
+ case 0x00A3: ch = 0xB1; break;
+ case 0x00A5: ch = 0xB2; break;
+ case 0x00A6: ch = 0x6A; break;
+ case 0x00A7: ch = 0xB5; break;
+ case 0x00A8: ch = 0xBD; break;
+ case 0x00A9: ch = 0xB4; break;
+ case 0x00AA: ch = 0x9A; break;
+ case 0x00AB: ch = 0x8A; break;
+ case 0x00AC: ch = 0xBA; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00AE: ch = 0xAF; break;
+ case 0x00AF: ch = 0xBC; break;
+ case 0x00B0: ch = 0x90; break;
+ case 0x00B1: ch = 0x8F; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xBE; break;
+ case 0x00B5: ch = 0xA0; break;
+ case 0x00B7: ch = 0xB3; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00B9: ch = 0xDA; break;
+ case 0x00BA: ch = 0x9B; break;
+ case 0x00BB: ch = 0x8B; break;
+ case 0x00BC: ch = 0xB7; break;
+ case 0x00BD: ch = 0xB8; break;
+ case 0x00BE: ch = 0xB9; break;
+ case 0x00BF: ch = 0xAB; break;
+ case 0x00C0: ch = 0x64; break;
+ case 0x00C1: ch = 0x65; break;
+ case 0x00C2: ch = 0x62; break;
+ case 0x00C3: ch = 0x66; break;
+ case 0x00C4: ch = 0x63; break;
+ case 0x00C5: ch = 0x67; break;
+ case 0x00C6: ch = 0x9E; break;
+ case 0x00C7: ch = 0x68; break;
+ case 0x00C8: ch = 0x74; break;
+ case 0x00C9: ch = 0x71; break;
+ case 0x00CA: ch = 0x72; break;
+ case 0x00CB: ch = 0x73; break;
+ case 0x00CC: ch = 0x78; break;
+ case 0x00CD: ch = 0x75; break;
+ case 0x00CE: ch = 0x76; break;
+ case 0x00CF: ch = 0x77; break;
+ case 0x00D0: ch = 0xAC; break;
+ case 0x00D1: ch = 0x69; break;
+ case 0x00D2: ch = 0xED; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEB; break;
+ case 0x00D5: ch = 0xEF; break;
+ case 0x00D6: ch = 0xEC; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00D8: ch = 0x80; break;
+ case 0x00D9: ch = 0xFD; break;
+ case 0x00DA: ch = 0xFE; break;
+ case 0x00DB: ch = 0xFB; break;
+ case 0x00DC: ch = 0xFC; break;
+ case 0x00DD: ch = 0xAD; break;
+ case 0x00DE: ch = 0xAE; break;
+ case 0x00DF: ch = 0x59; break;
+ case 0x00E0: ch = 0x44; break;
+ case 0x00E1: ch = 0x45; break;
+ case 0x00E2: ch = 0x42; break;
+ case 0x00E3: ch = 0x46; break;
+ case 0x00E4: ch = 0x43; break;
+ case 0x00E5: ch = 0x47; break;
+ case 0x00E6: ch = 0x9C; break;
+ case 0x00E7: ch = 0x48; break;
+ case 0x00E8: ch = 0x54; break;
+ case 0x00E9: ch = 0x51; break;
+ case 0x00EA: ch = 0x52; break;
+ case 0x00EB: ch = 0x53; break;
+ case 0x00EC: ch = 0x58; break;
+ case 0x00ED: ch = 0x55; break;
+ case 0x00EE: ch = 0x56; break;
+ case 0x00EF: ch = 0x57; break;
+ case 0x00F0: ch = 0x8C; break;
+ case 0x00F1: ch = 0x49; break;
+ case 0x00F2: ch = 0xCD; break;
+ case 0x00F3: ch = 0xCE; break;
+ case 0x00F4: ch = 0xCB; break;
+ case 0x00F5: ch = 0xCF; break;
+ case 0x00F6: ch = 0xCC; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x00F8: ch = 0x70; break;
+ case 0x00F9: ch = 0xDD; break;
+ case 0x00FA: ch = 0xDE; break;
+ case 0x00FB: ch = 0xDB; break;
+ case 0x00FC: ch = 0xDC; break;
+ case 0x00FD: ch = 0x8D; break;
+ case 0x00FE: ch = 0x8E; break;
+ case 0x00FF: ch = 0xDF; break;
+ case 0x203E: ch = 0xBC; break;
+ case 0x20AC: ch = 0x9F; break;
+ case 0xFF01: ch = 0x4F; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0x7B; break;
+ case 0xFF04: ch = 0x5B; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0x7C; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0x4A; break;
+ case 0xFF3C: ch = 0xE0; break;
+ case 0xFF3D: ch = 0x5A; break;
+ case 0xFF3E: ch = 0x5F; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0x79; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0xC0; break;
+ case 0xFF5C: ch = 0xBB; break;
+ case 0xFF5D: ch = 0xD0; break;
+ case 0xFF5E: ch = 0xA1; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x00B6:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x4F; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0x7B; break;
+ case 0x0024: ch = 0x5B; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0x7C; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0x4A; break;
+ case 0x005C: ch = 0xE0; break;
+ case 0x005D: ch = 0x5A; break;
+ case 0x005E: ch = 0x5F; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0x79; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0xC0; break;
+ case 0x007C: ch = 0xBB; break;
+ case 0x007D: ch = 0xD0; break;
+ case 0x007E: ch = 0xA1; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A1: ch = 0xAA; break;
+ case 0x00A2: ch = 0xB0; break;
+ case 0x00A3: ch = 0xB1; break;
+ case 0x00A5: ch = 0xB2; break;
+ case 0x00A6: ch = 0x6A; break;
+ case 0x00A7: ch = 0xB5; break;
+ case 0x00A8: ch = 0xBD; break;
+ case 0x00A9: ch = 0xB4; break;
+ case 0x00AA: ch = 0x9A; break;
+ case 0x00AB: ch = 0x8A; break;
+ case 0x00AC: ch = 0xBA; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00AE: ch = 0xAF; break;
+ case 0x00AF: ch = 0xBC; break;
+ case 0x00B0: ch = 0x90; break;
+ case 0x00B1: ch = 0x8F; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xBE; break;
+ case 0x00B5: ch = 0xA0; break;
+ case 0x00B7: ch = 0xB3; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00B9: ch = 0xDA; break;
+ case 0x00BA: ch = 0x9B; break;
+ case 0x00BB: ch = 0x8B; break;
+ case 0x00BC: ch = 0xB7; break;
+ case 0x00BD: ch = 0xB8; break;
+ case 0x00BE: ch = 0xB9; break;
+ case 0x00BF: ch = 0xAB; break;
+ case 0x00C0: ch = 0x64; break;
+ case 0x00C1: ch = 0x65; break;
+ case 0x00C2: ch = 0x62; break;
+ case 0x00C3: ch = 0x66; break;
+ case 0x00C4: ch = 0x63; break;
+ case 0x00C5: ch = 0x67; break;
+ case 0x00C6: ch = 0x9E; break;
+ case 0x00C7: ch = 0x68; break;
+ case 0x00C8: ch = 0x74; break;
+ case 0x00C9: ch = 0x71; break;
+ case 0x00CA: ch = 0x72; break;
+ case 0x00CB: ch = 0x73; break;
+ case 0x00CC: ch = 0x78; break;
+ case 0x00CD: ch = 0x75; break;
+ case 0x00CE: ch = 0x76; break;
+ case 0x00CF: ch = 0x77; break;
+ case 0x00D0: ch = 0xAC; break;
+ case 0x00D1: ch = 0x69; break;
+ case 0x00D2: ch = 0xED; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEB; break;
+ case 0x00D5: ch = 0xEF; break;
+ case 0x00D6: ch = 0xEC; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00D8: ch = 0x80; break;
+ case 0x00D9: ch = 0xFD; break;
+ case 0x00DA: ch = 0xFE; break;
+ case 0x00DB: ch = 0xFB; break;
+ case 0x00DC: ch = 0xFC; break;
+ case 0x00DD: ch = 0xAD; break;
+ case 0x00DE: ch = 0xAE; break;
+ case 0x00DF: ch = 0x59; break;
+ case 0x00E0: ch = 0x44; break;
+ case 0x00E1: ch = 0x45; break;
+ case 0x00E2: ch = 0x42; break;
+ case 0x00E3: ch = 0x46; break;
+ case 0x00E4: ch = 0x43; break;
+ case 0x00E5: ch = 0x47; break;
+ case 0x00E6: ch = 0x9C; break;
+ case 0x00E7: ch = 0x48; break;
+ case 0x00E8: ch = 0x54; break;
+ case 0x00E9: ch = 0x51; break;
+ case 0x00EA: ch = 0x52; break;
+ case 0x00EB: ch = 0x53; break;
+ case 0x00EC: ch = 0x58; break;
+ case 0x00ED: ch = 0x55; break;
+ case 0x00EE: ch = 0x56; break;
+ case 0x00EF: ch = 0x57; break;
+ case 0x00F0: ch = 0x8C; break;
+ case 0x00F1: ch = 0x49; break;
+ case 0x00F2: ch = 0xCD; break;
+ case 0x00F3: ch = 0xCE; break;
+ case 0x00F4: ch = 0xCB; break;
+ case 0x00F5: ch = 0xCF; break;
+ case 0x00F6: ch = 0xCC; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x00F8: ch = 0x70; break;
+ case 0x00F9: ch = 0xDD; break;
+ case 0x00FA: ch = 0xDE; break;
+ case 0x00FB: ch = 0xDB; break;
+ case 0x00FC: ch = 0xDC; break;
+ case 0x00FD: ch = 0x8D; break;
+ case 0x00FE: ch = 0x8E; break;
+ case 0x00FF: ch = 0xDF; break;
+ case 0x203E: ch = 0xBC; break;
+ case 0x20AC: ch = 0x9F; break;
+ case 0xFF01: ch = 0x4F; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0x7B; break;
+ case 0xFF04: ch = 0x5B; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0x7C; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0x4A; break;
+ case 0xFF3C: ch = 0xE0; break;
+ case 0xFF3D: ch = 0x5A; break;
+ case 0xFF3E: ch = 0x5F; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0x79; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0xC0; break;
+ case 0xFF5C: ch = 0xBB; break;
+ case 0xFF5D: ch = 0xD0; break;
+ case 0xFF5E: ch = 0xA1; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP1148
+
+public class ENCibm1148 : CP1148
+{
+ public ENCibm1148() : base() {}
+
+}; // class ENCibm1148
+
+}; // namespace I18N.Rare
diff --git a/mcs/class/I18N/Rare/CP1149.cs b/mcs/class/I18N/Rare/CP1149.cs
new file mode 100644
index 00000000000..97864e9b9c0
--- /dev/null
+++ b/mcs/class/I18N/Rare/CP1149.cs
@@ -0,0 +1,895 @@
+/*
+ * CP1149.cs - IBM EBCDIC (Icelandic with Euro) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-1149.ucm".
+
+namespace I18N.Rare
+{
+
+using System;
+using I18N.Common;
+
+public class CP1149 : ByteEncoding
+{
+ public CP1149()
+ : base(1149, ToChars, "IBM EBCDIC (Icelandic with Euro)",
+ "ibm1149", "ibm1149", "ibm1149",
+ false, false, false, false, 1252)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u009C', '\u0009',
+ '\u0086', '\u007F', '\u0097', '\u008D', '\u008E', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u009D', '\u0085', '\u0008', '\u0087',
+ '\u0018', '\u0019', '\u0092', '\u008F', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0080', '\u0081', '\u0082', '\u0083',
+ '\u0084', '\u000A', '\u0017', '\u001B', '\u0088', '\u0089',
+ '\u008A', '\u008B', '\u008C', '\u0005', '\u0006', '\u0007',
+ '\u0090', '\u0091', '\u0016', '\u0093', '\u0094', '\u0095',
+ '\u0096', '\u0004', '\u0098', '\u0099', '\u009A', '\u009B',
+ '\u0014', '\u0015', '\u009E', '\u001A', '\u0020', '\u00A0',
+ '\u00E2', '\u00E4', '\u00E0', '\u00E1', '\u00E3', '\u00E5',
+ '\u00E7', '\u00F1', '\u00DE', '\u002E', '\u003C', '\u0028',
+ '\u002B', '\u0021', '\u0026', '\u00E9', '\u00EA', '\u00EB',
+ '\u00E8', '\u00ED', '\u00EE', '\u00EF', '\u00EC', '\u00DF',
+ '\u00C6', '\u0024', '\u002A', '\u0029', '\u003B', '\u00D6',
+ '\u002D', '\u002F', '\u00C2', '\u00C4', '\u00C0', '\u00C1',
+ '\u00C3', '\u00C5', '\u00C7', '\u00D1', '\u00A6', '\u002C',
+ '\u0025', '\u005F', '\u003E', '\u003F', '\u00F8', '\u00C9',
+ '\u00CA', '\u00CB', '\u00C8', '\u00CD', '\u00CE', '\u00CF',
+ '\u00CC', '\u00F0', '\u003A', '\u0023', '\u00D0', '\u0027',
+ '\u003D', '\u0022', '\u00D8', '\u0061', '\u0062', '\u0063',
+ '\u0064', '\u0065', '\u0066', '\u0067', '\u0068', '\u0069',
+ '\u00AB', '\u00BB', '\u0060', '\u00FD', '\u007B', '\u00B1',
+ '\u00B0', '\u006A', '\u006B', '\u006C', '\u006D', '\u006E',
+ '\u006F', '\u0070', '\u0071', '\u0072', '\u00AA', '\u00BA',
+ '\u007D', '\u00B8', '\u005D', '\u20AC', '\u00B5', '\u00F6',
+ '\u0073', '\u0074', '\u0075', '\u0076', '\u0077', '\u0078',
+ '\u0079', '\u007A', '\u00A1', '\u00BF', '\u0040', '\u00DD',
+ '\u005B', '\u00AE', '\u00A2', '\u00A3', '\u00A5', '\u00B7',
+ '\u00A9', '\u00A7', '\u00B6', '\u00BC', '\u00BD', '\u00BE',
+ '\u00AC', '\u007C', '\u00AF', '\u00A8', '\u005C', '\u00D7',
+ '\u00FE', '\u0041', '\u0042', '\u0043', '\u0044', '\u0045',
+ '\u0046', '\u0047', '\u0048', '\u0049', '\u00AD', '\u00F4',
+ '\u007E', '\u00F2', '\u00F3', '\u00F5', '\u00E6', '\u004A',
+ '\u004B', '\u004C', '\u004D', '\u004E', '\u004F', '\u0050',
+ '\u0051', '\u0052', '\u00B9', '\u00FB', '\u00FC', '\u00F9',
+ '\u00FA', '\u00FF', '\u00B4', '\u00F7', '\u0053', '\u0054',
+ '\u0055', '\u0056', '\u0057', '\u0058', '\u0059', '\u005A',
+ '\u00B2', '\u00D4', '\u005E', '\u00D2', '\u00D3', '\u00D5',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u00B3', '\u00DB',
+ '\u00DC', '\u00D9', '\u00DA', '\u009F',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x00B6:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x4F; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0x7B; break;
+ case 0x0024: ch = 0x5B; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0xAC; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0xAE; break;
+ case 0x005C: ch = 0xBE; break;
+ case 0x005D: ch = 0x9E; break;
+ case 0x005E: ch = 0xEC; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0x8C; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0x8E; break;
+ case 0x007C: ch = 0xBB; break;
+ case 0x007D: ch = 0x9C; break;
+ case 0x007E: ch = 0xCC; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A1: ch = 0xAA; break;
+ case 0x00A2: ch = 0xB0; break;
+ case 0x00A3: ch = 0xB1; break;
+ case 0x00A5: ch = 0xB2; break;
+ case 0x00A6: ch = 0x6A; break;
+ case 0x00A7: ch = 0xB5; break;
+ case 0x00A8: ch = 0xBD; break;
+ case 0x00A9: ch = 0xB4; break;
+ case 0x00AA: ch = 0x9A; break;
+ case 0x00AB: ch = 0x8A; break;
+ case 0x00AC: ch = 0xBA; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00AE: ch = 0xAF; break;
+ case 0x00AF: ch = 0xBC; break;
+ case 0x00B0: ch = 0x90; break;
+ case 0x00B1: ch = 0x8F; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xE0; break;
+ case 0x00B5: ch = 0xA0; break;
+ case 0x00B7: ch = 0xB3; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00B9: ch = 0xDA; break;
+ case 0x00BA: ch = 0x9B; break;
+ case 0x00BB: ch = 0x8B; break;
+ case 0x00BC: ch = 0xB7; break;
+ case 0x00BD: ch = 0xB8; break;
+ case 0x00BE: ch = 0xB9; break;
+ case 0x00BF: ch = 0xAB; break;
+ case 0x00C0: ch = 0x64; break;
+ case 0x00C1: ch = 0x65; break;
+ case 0x00C2: ch = 0x62; break;
+ case 0x00C3: ch = 0x66; break;
+ case 0x00C4: ch = 0x63; break;
+ case 0x00C5: ch = 0x67; break;
+ case 0x00C6: ch = 0x5A; break;
+ case 0x00C7: ch = 0x68; break;
+ case 0x00C8: ch = 0x74; break;
+ case 0x00C9: ch = 0x71; break;
+ case 0x00CA: ch = 0x72; break;
+ case 0x00CB: ch = 0x73; break;
+ case 0x00CC: ch = 0x78; break;
+ case 0x00CD: ch = 0x75; break;
+ case 0x00CE: ch = 0x76; break;
+ case 0x00CF: ch = 0x77; break;
+ case 0x00D0: ch = 0x7C; break;
+ case 0x00D1: ch = 0x69; break;
+ case 0x00D2: ch = 0xED; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEB; break;
+ case 0x00D5: ch = 0xEF; break;
+ case 0x00D6: ch = 0x5F; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00D8: ch = 0x80; break;
+ case 0x00D9: ch = 0xFD; break;
+ case 0x00DA: ch = 0xFE; break;
+ case 0x00DB: ch = 0xFB; break;
+ case 0x00DC: ch = 0xFC; break;
+ case 0x00DD: ch = 0xAD; break;
+ case 0x00DE: ch = 0x4A; break;
+ case 0x00DF: ch = 0x59; break;
+ case 0x00E0: ch = 0x44; break;
+ case 0x00E1: ch = 0x45; break;
+ case 0x00E2: ch = 0x42; break;
+ case 0x00E3: ch = 0x46; break;
+ case 0x00E4: ch = 0x43; break;
+ case 0x00E5: ch = 0x47; break;
+ case 0x00E6: ch = 0xD0; break;
+ case 0x00E7: ch = 0x48; break;
+ case 0x00E8: ch = 0x54; break;
+ case 0x00E9: ch = 0x51; break;
+ case 0x00EA: ch = 0x52; break;
+ case 0x00EB: ch = 0x53; break;
+ case 0x00EC: ch = 0x58; break;
+ case 0x00ED: ch = 0x55; break;
+ case 0x00EE: ch = 0x56; break;
+ case 0x00EF: ch = 0x57; break;
+ case 0x00F0: ch = 0x79; break;
+ case 0x00F1: ch = 0x49; break;
+ case 0x00F2: ch = 0xCD; break;
+ case 0x00F3: ch = 0xCE; break;
+ case 0x00F4: ch = 0xCB; break;
+ case 0x00F5: ch = 0xCF; break;
+ case 0x00F6: ch = 0xA1; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x00F8: ch = 0x70; break;
+ case 0x00F9: ch = 0xDD; break;
+ case 0x00FA: ch = 0xDE; break;
+ case 0x00FB: ch = 0xDB; break;
+ case 0x00FC: ch = 0xDC; break;
+ case 0x00FD: ch = 0x8D; break;
+ case 0x00FE: ch = 0xC0; break;
+ case 0x00FF: ch = 0xDF; break;
+ case 0x203E: ch = 0xBC; break;
+ case 0x20AC: ch = 0x9F; break;
+ case 0xFF01: ch = 0x4F; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0x7B; break;
+ case 0xFF04: ch = 0x5B; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0xAC; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0xAE; break;
+ case 0xFF3C: ch = 0xBE; break;
+ case 0xFF3D: ch = 0x9E; break;
+ case 0xFF3E: ch = 0xEC; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0x8C; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0x8E; break;
+ case 0xFF5C: ch = 0xBB; break;
+ case 0xFF5D: ch = 0x9C; break;
+ case 0xFF5E: ch = 0xCC; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x00B6:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x4F; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0x7B; break;
+ case 0x0024: ch = 0x5B; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0xAC; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0xAE; break;
+ case 0x005C: ch = 0xBE; break;
+ case 0x005D: ch = 0x9E; break;
+ case 0x005E: ch = 0xEC; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0x8C; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0x8E; break;
+ case 0x007C: ch = 0xBB; break;
+ case 0x007D: ch = 0x9C; break;
+ case 0x007E: ch = 0xCC; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A1: ch = 0xAA; break;
+ case 0x00A2: ch = 0xB0; break;
+ case 0x00A3: ch = 0xB1; break;
+ case 0x00A5: ch = 0xB2; break;
+ case 0x00A6: ch = 0x6A; break;
+ case 0x00A7: ch = 0xB5; break;
+ case 0x00A8: ch = 0xBD; break;
+ case 0x00A9: ch = 0xB4; break;
+ case 0x00AA: ch = 0x9A; break;
+ case 0x00AB: ch = 0x8A; break;
+ case 0x00AC: ch = 0xBA; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00AE: ch = 0xAF; break;
+ case 0x00AF: ch = 0xBC; break;
+ case 0x00B0: ch = 0x90; break;
+ case 0x00B1: ch = 0x8F; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xE0; break;
+ case 0x00B5: ch = 0xA0; break;
+ case 0x00B7: ch = 0xB3; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00B9: ch = 0xDA; break;
+ case 0x00BA: ch = 0x9B; break;
+ case 0x00BB: ch = 0x8B; break;
+ case 0x00BC: ch = 0xB7; break;
+ case 0x00BD: ch = 0xB8; break;
+ case 0x00BE: ch = 0xB9; break;
+ case 0x00BF: ch = 0xAB; break;
+ case 0x00C0: ch = 0x64; break;
+ case 0x00C1: ch = 0x65; break;
+ case 0x00C2: ch = 0x62; break;
+ case 0x00C3: ch = 0x66; break;
+ case 0x00C4: ch = 0x63; break;
+ case 0x00C5: ch = 0x67; break;
+ case 0x00C6: ch = 0x5A; break;
+ case 0x00C7: ch = 0x68; break;
+ case 0x00C8: ch = 0x74; break;
+ case 0x00C9: ch = 0x71; break;
+ case 0x00CA: ch = 0x72; break;
+ case 0x00CB: ch = 0x73; break;
+ case 0x00CC: ch = 0x78; break;
+ case 0x00CD: ch = 0x75; break;
+ case 0x00CE: ch = 0x76; break;
+ case 0x00CF: ch = 0x77; break;
+ case 0x00D0: ch = 0x7C; break;
+ case 0x00D1: ch = 0x69; break;
+ case 0x00D2: ch = 0xED; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEB; break;
+ case 0x00D5: ch = 0xEF; break;
+ case 0x00D6: ch = 0x5F; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00D8: ch = 0x80; break;
+ case 0x00D9: ch = 0xFD; break;
+ case 0x00DA: ch = 0xFE; break;
+ case 0x00DB: ch = 0xFB; break;
+ case 0x00DC: ch = 0xFC; break;
+ case 0x00DD: ch = 0xAD; break;
+ case 0x00DE: ch = 0x4A; break;
+ case 0x00DF: ch = 0x59; break;
+ case 0x00E0: ch = 0x44; break;
+ case 0x00E1: ch = 0x45; break;
+ case 0x00E2: ch = 0x42; break;
+ case 0x00E3: ch = 0x46; break;
+ case 0x00E4: ch = 0x43; break;
+ case 0x00E5: ch = 0x47; break;
+ case 0x00E6: ch = 0xD0; break;
+ case 0x00E7: ch = 0x48; break;
+ case 0x00E8: ch = 0x54; break;
+ case 0x00E9: ch = 0x51; break;
+ case 0x00EA: ch = 0x52; break;
+ case 0x00EB: ch = 0x53; break;
+ case 0x00EC: ch = 0x58; break;
+ case 0x00ED: ch = 0x55; break;
+ case 0x00EE: ch = 0x56; break;
+ case 0x00EF: ch = 0x57; break;
+ case 0x00F0: ch = 0x79; break;
+ case 0x00F1: ch = 0x49; break;
+ case 0x00F2: ch = 0xCD; break;
+ case 0x00F3: ch = 0xCE; break;
+ case 0x00F4: ch = 0xCB; break;
+ case 0x00F5: ch = 0xCF; break;
+ case 0x00F6: ch = 0xA1; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x00F8: ch = 0x70; break;
+ case 0x00F9: ch = 0xDD; break;
+ case 0x00FA: ch = 0xDE; break;
+ case 0x00FB: ch = 0xDB; break;
+ case 0x00FC: ch = 0xDC; break;
+ case 0x00FD: ch = 0x8D; break;
+ case 0x00FE: ch = 0xC0; break;
+ case 0x00FF: ch = 0xDF; break;
+ case 0x203E: ch = 0xBC; break;
+ case 0x20AC: ch = 0x9F; break;
+ case 0xFF01: ch = 0x4F; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0x7B; break;
+ case 0xFF04: ch = 0x5B; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0xAC; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0xAE; break;
+ case 0xFF3C: ch = 0xBE; break;
+ case 0xFF3D: ch = 0x9E; break;
+ case 0xFF3E: ch = 0xEC; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0x8C; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0x8E; break;
+ case 0xFF5C: ch = 0xBB; break;
+ case 0xFF5D: ch = 0x9C; break;
+ case 0xFF5E: ch = 0xCC; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP1149
+
+public class ENCibm1149 : CP1149
+{
+ public ENCibm1149() : base() {}
+
+}; // class ENCibm1149
+
+}; // namespace I18N.Rare
diff --git a/mcs/class/I18N/Rare/CP20273.cs b/mcs/class/I18N/Rare/CP20273.cs
new file mode 100644
index 00000000000..2590ba7e18d
--- /dev/null
+++ b/mcs/class/I18N/Rare/CP20273.cs
@@ -0,0 +1,897 @@
+/*
+ * CP20273.cs - IBM EBCDIC (Germany) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-273.ucm".
+
+namespace I18N.Rare
+{
+
+using System;
+using I18N.Common;
+
+public class CP20273 : ByteEncoding
+{
+ public CP20273()
+ : base(20273, ToChars, "IBM EBCDIC (Germany)",
+ "IBM273", "IBM273", "IBM273",
+ false, false, false, false, 1252)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u009C', '\u0009',
+ '\u0086', '\u007F', '\u0097', '\u008D', '\u008E', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u009D', '\u0085', '\u0008', '\u0087',
+ '\u0018', '\u0019', '\u0092', '\u008F', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0080', '\u0081', '\u0082', '\u0083',
+ '\u0084', '\u000A', '\u0017', '\u001B', '\u0088', '\u0089',
+ '\u008A', '\u008B', '\u008C', '\u0005', '\u0006', '\u0007',
+ '\u0090', '\u0091', '\u0016', '\u0093', '\u0094', '\u0095',
+ '\u0096', '\u0004', '\u0098', '\u0099', '\u009A', '\u009B',
+ '\u0014', '\u0015', '\u009E', '\u001A', '\u0020', '\u00A0',
+ '\u00E2', '\u007B', '\u00E0', '\u00E1', '\u00E3', '\u00E5',
+ '\u00E7', '\u00F1', '\u00C4', '\u002E', '\u003C', '\u0028',
+ '\u002B', '\u0021', '\u0026', '\u00E9', '\u00EA', '\u00EB',
+ '\u00E8', '\u00ED', '\u00EE', '\u00EF', '\u00EC', '\u007E',
+ '\u00DC', '\u0024', '\u002A', '\u0029', '\u003B', '\u005E',
+ '\u002D', '\u002F', '\u00C2', '\u005B', '\u00C0', '\u00C1',
+ '\u00C3', '\u00C5', '\u00C7', '\u00D1', '\u00F6', '\u002C',
+ '\u0025', '\u005F', '\u003E', '\u003F', '\u00F8', '\u00C9',
+ '\u00CA', '\u00CB', '\u00C8', '\u00CD', '\u00CE', '\u00CF',
+ '\u00CC', '\u0060', '\u003A', '\u0023', '\u00A7', '\u0027',
+ '\u003D', '\u0022', '\u00D8', '\u0061', '\u0062', '\u0063',
+ '\u0064', '\u0065', '\u0066', '\u0067', '\u0068', '\u0069',
+ '\u00AB', '\u00BB', '\u00F0', '\u00FD', '\u00FE', '\u00B1',
+ '\u00B0', '\u006A', '\u006B', '\u006C', '\u006D', '\u006E',
+ '\u006F', '\u0070', '\u0071', '\u0072', '\u00AA', '\u00BA',
+ '\u00E6', '\u00B8', '\u00C6', '\u00A4', '\u00B5', '\u00DF',
+ '\u0073', '\u0074', '\u0075', '\u0076', '\u0077', '\u0078',
+ '\u0079', '\u007A', '\u00A1', '\u00BF', '\u00D0', '\u00DD',
+ '\u00DE', '\u00AE', '\u00A2', '\u00A3', '\u00A5', '\u00B7',
+ '\u00A9', '\u0040', '\u00B6', '\u00BC', '\u00BD', '\u00BE',
+ '\u00AC', '\u007C', '\u00AF', '\u00A8', '\u00B4', '\u00D7',
+ '\u00E4', '\u0041', '\u0042', '\u0043', '\u0044', '\u0045',
+ '\u0046', '\u0047', '\u0048', '\u0049', '\u00AD', '\u00F4',
+ '\u00A6', '\u00F2', '\u00F3', '\u00F5', '\u00FC', '\u004A',
+ '\u004B', '\u004C', '\u004D', '\u004E', '\u004F', '\u0050',
+ '\u0051', '\u0052', '\u00B9', '\u00FB', '\u007D', '\u00F9',
+ '\u00FA', '\u00FF', '\u00D6', '\u00F7', '\u0053', '\u0054',
+ '\u0055', '\u0056', '\u0057', '\u0058', '\u0059', '\u005A',
+ '\u00B2', '\u00D4', '\u005C', '\u00D2', '\u00D3', '\u00D5',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u00B3', '\u00DB',
+ '\u005D', '\u00D9', '\u00DA', '\u009F',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x00B6:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x4F; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0x7B; break;
+ case 0x0024: ch = 0x5B; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0xB5; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0x63; break;
+ case 0x005C: ch = 0xEC; break;
+ case 0x005D: ch = 0xFC; break;
+ case 0x005E: ch = 0x5F; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0x79; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0x43; break;
+ case 0x007C: ch = 0xBB; break;
+ case 0x007D: ch = 0xDC; break;
+ case 0x007E: ch = 0x59; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A1: ch = 0xAA; break;
+ case 0x00A2: ch = 0xB0; break;
+ case 0x00A3: ch = 0xB1; break;
+ case 0x00A4: ch = 0x9F; break;
+ case 0x00A5: ch = 0xB2; break;
+ case 0x00A6: ch = 0xCC; break;
+ case 0x00A7: ch = 0x7C; break;
+ case 0x00A8: ch = 0xBD; break;
+ case 0x00A9: ch = 0xB4; break;
+ case 0x00AA: ch = 0x9A; break;
+ case 0x00AB: ch = 0x8A; break;
+ case 0x00AC: ch = 0xBA; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00AE: ch = 0xAF; break;
+ case 0x00AF: ch = 0xBC; break;
+ case 0x00B0: ch = 0x90; break;
+ case 0x00B1: ch = 0x8F; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xBE; break;
+ case 0x00B5: ch = 0xA0; break;
+ case 0x00B7: ch = 0xB3; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00B9: ch = 0xDA; break;
+ case 0x00BA: ch = 0x9B; break;
+ case 0x00BB: ch = 0x8B; break;
+ case 0x00BC: ch = 0xB7; break;
+ case 0x00BD: ch = 0xB8; break;
+ case 0x00BE: ch = 0xB9; break;
+ case 0x00BF: ch = 0xAB; break;
+ case 0x00C0: ch = 0x64; break;
+ case 0x00C1: ch = 0x65; break;
+ case 0x00C2: ch = 0x62; break;
+ case 0x00C3: ch = 0x66; break;
+ case 0x00C4: ch = 0x4A; break;
+ case 0x00C5: ch = 0x67; break;
+ case 0x00C6: ch = 0x9E; break;
+ case 0x00C7: ch = 0x68; break;
+ case 0x00C8: ch = 0x74; break;
+ case 0x00C9: ch = 0x71; break;
+ case 0x00CA: ch = 0x72; break;
+ case 0x00CB: ch = 0x73; break;
+ case 0x00CC: ch = 0x78; break;
+ case 0x00CD: ch = 0x75; break;
+ case 0x00CE: ch = 0x76; break;
+ case 0x00CF: ch = 0x77; break;
+ case 0x00D0: ch = 0xAC; break;
+ case 0x00D1: ch = 0x69; break;
+ case 0x00D2: ch = 0xED; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEB; break;
+ case 0x00D5: ch = 0xEF; break;
+ case 0x00D6: ch = 0xE0; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00D8: ch = 0x80; break;
+ case 0x00D9: ch = 0xFD; break;
+ case 0x00DA: ch = 0xFE; break;
+ case 0x00DB: ch = 0xFB; break;
+ case 0x00DC: ch = 0x5A; break;
+ case 0x00DD: ch = 0xAD; break;
+ case 0x00DE: ch = 0xAE; break;
+ case 0x00DF: ch = 0xA1; break;
+ case 0x00E0: ch = 0x44; break;
+ case 0x00E1: ch = 0x45; break;
+ case 0x00E2: ch = 0x42; break;
+ case 0x00E3: ch = 0x46; break;
+ case 0x00E4: ch = 0xC0; break;
+ case 0x00E5: ch = 0x47; break;
+ case 0x00E6: ch = 0x9C; break;
+ case 0x00E7: ch = 0x48; break;
+ case 0x00E8: ch = 0x54; break;
+ case 0x00E9: ch = 0x51; break;
+ case 0x00EA: ch = 0x52; break;
+ case 0x00EB: ch = 0x53; break;
+ case 0x00EC: ch = 0x58; break;
+ case 0x00ED: ch = 0x55; break;
+ case 0x00EE: ch = 0x56; break;
+ case 0x00EF: ch = 0x57; break;
+ case 0x00F0: ch = 0x8C; break;
+ case 0x00F1: ch = 0x49; break;
+ case 0x00F2: ch = 0xCD; break;
+ case 0x00F3: ch = 0xCE; break;
+ case 0x00F4: ch = 0xCB; break;
+ case 0x00F5: ch = 0xCF; break;
+ case 0x00F6: ch = 0x6A; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x00F8: ch = 0x70; break;
+ case 0x00F9: ch = 0xDD; break;
+ case 0x00FA: ch = 0xDE; break;
+ case 0x00FB: ch = 0xDB; break;
+ case 0x00FC: ch = 0xD0; break;
+ case 0x00FD: ch = 0x8D; break;
+ case 0x00FE: ch = 0x8E; break;
+ case 0x00FF: ch = 0xDF; break;
+ case 0x0110: ch = 0xAC; break;
+ case 0x203E: ch = 0xBC; break;
+ case 0xFF01: ch = 0x4F; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0x7B; break;
+ case 0xFF04: ch = 0x5B; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0xB5; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0x63; break;
+ case 0xFF3C: ch = 0xEC; break;
+ case 0xFF3D: ch = 0xFC; break;
+ case 0xFF3E: ch = 0x5F; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0x79; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0x43; break;
+ case 0xFF5C: ch = 0xBB; break;
+ case 0xFF5D: ch = 0xDC; break;
+ case 0xFF5E: ch = 0x59; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x00B6:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x4F; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0x7B; break;
+ case 0x0024: ch = 0x5B; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0xB5; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0x63; break;
+ case 0x005C: ch = 0xEC; break;
+ case 0x005D: ch = 0xFC; break;
+ case 0x005E: ch = 0x5F; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0x79; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0x43; break;
+ case 0x007C: ch = 0xBB; break;
+ case 0x007D: ch = 0xDC; break;
+ case 0x007E: ch = 0x59; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A1: ch = 0xAA; break;
+ case 0x00A2: ch = 0xB0; break;
+ case 0x00A3: ch = 0xB1; break;
+ case 0x00A4: ch = 0x9F; break;
+ case 0x00A5: ch = 0xB2; break;
+ case 0x00A6: ch = 0xCC; break;
+ case 0x00A7: ch = 0x7C; break;
+ case 0x00A8: ch = 0xBD; break;
+ case 0x00A9: ch = 0xB4; break;
+ case 0x00AA: ch = 0x9A; break;
+ case 0x00AB: ch = 0x8A; break;
+ case 0x00AC: ch = 0xBA; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00AE: ch = 0xAF; break;
+ case 0x00AF: ch = 0xBC; break;
+ case 0x00B0: ch = 0x90; break;
+ case 0x00B1: ch = 0x8F; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xBE; break;
+ case 0x00B5: ch = 0xA0; break;
+ case 0x00B7: ch = 0xB3; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00B9: ch = 0xDA; break;
+ case 0x00BA: ch = 0x9B; break;
+ case 0x00BB: ch = 0x8B; break;
+ case 0x00BC: ch = 0xB7; break;
+ case 0x00BD: ch = 0xB8; break;
+ case 0x00BE: ch = 0xB9; break;
+ case 0x00BF: ch = 0xAB; break;
+ case 0x00C0: ch = 0x64; break;
+ case 0x00C1: ch = 0x65; break;
+ case 0x00C2: ch = 0x62; break;
+ case 0x00C3: ch = 0x66; break;
+ case 0x00C4: ch = 0x4A; break;
+ case 0x00C5: ch = 0x67; break;
+ case 0x00C6: ch = 0x9E; break;
+ case 0x00C7: ch = 0x68; break;
+ case 0x00C8: ch = 0x74; break;
+ case 0x00C9: ch = 0x71; break;
+ case 0x00CA: ch = 0x72; break;
+ case 0x00CB: ch = 0x73; break;
+ case 0x00CC: ch = 0x78; break;
+ case 0x00CD: ch = 0x75; break;
+ case 0x00CE: ch = 0x76; break;
+ case 0x00CF: ch = 0x77; break;
+ case 0x00D0: ch = 0xAC; break;
+ case 0x00D1: ch = 0x69; break;
+ case 0x00D2: ch = 0xED; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEB; break;
+ case 0x00D5: ch = 0xEF; break;
+ case 0x00D6: ch = 0xE0; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00D8: ch = 0x80; break;
+ case 0x00D9: ch = 0xFD; break;
+ case 0x00DA: ch = 0xFE; break;
+ case 0x00DB: ch = 0xFB; break;
+ case 0x00DC: ch = 0x5A; break;
+ case 0x00DD: ch = 0xAD; break;
+ case 0x00DE: ch = 0xAE; break;
+ case 0x00DF: ch = 0xA1; break;
+ case 0x00E0: ch = 0x44; break;
+ case 0x00E1: ch = 0x45; break;
+ case 0x00E2: ch = 0x42; break;
+ case 0x00E3: ch = 0x46; break;
+ case 0x00E4: ch = 0xC0; break;
+ case 0x00E5: ch = 0x47; break;
+ case 0x00E6: ch = 0x9C; break;
+ case 0x00E7: ch = 0x48; break;
+ case 0x00E8: ch = 0x54; break;
+ case 0x00E9: ch = 0x51; break;
+ case 0x00EA: ch = 0x52; break;
+ case 0x00EB: ch = 0x53; break;
+ case 0x00EC: ch = 0x58; break;
+ case 0x00ED: ch = 0x55; break;
+ case 0x00EE: ch = 0x56; break;
+ case 0x00EF: ch = 0x57; break;
+ case 0x00F0: ch = 0x8C; break;
+ case 0x00F1: ch = 0x49; break;
+ case 0x00F2: ch = 0xCD; break;
+ case 0x00F3: ch = 0xCE; break;
+ case 0x00F4: ch = 0xCB; break;
+ case 0x00F5: ch = 0xCF; break;
+ case 0x00F6: ch = 0x6A; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x00F8: ch = 0x70; break;
+ case 0x00F9: ch = 0xDD; break;
+ case 0x00FA: ch = 0xDE; break;
+ case 0x00FB: ch = 0xDB; break;
+ case 0x00FC: ch = 0xD0; break;
+ case 0x00FD: ch = 0x8D; break;
+ case 0x00FE: ch = 0x8E; break;
+ case 0x00FF: ch = 0xDF; break;
+ case 0x0110: ch = 0xAC; break;
+ case 0x203E: ch = 0xBC; break;
+ case 0xFF01: ch = 0x4F; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0x7B; break;
+ case 0xFF04: ch = 0x5B; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0xB5; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0x63; break;
+ case 0xFF3C: ch = 0xEC; break;
+ case 0xFF3D: ch = 0xFC; break;
+ case 0xFF3E: ch = 0x5F; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0x79; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0x43; break;
+ case 0xFF5C: ch = 0xBB; break;
+ case 0xFF5D: ch = 0xDC; break;
+ case 0xFF5E: ch = 0x59; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP20273
+
+public class ENCibm273 : CP20273
+{
+ public ENCibm273() : base() {}
+
+}; // class ENCibm273
+
+}; // namespace I18N.Rare
diff --git a/mcs/class/I18N/Rare/CP20277.cs b/mcs/class/I18N/Rare/CP20277.cs
new file mode 100644
index 00000000000..8b0c5e56926
--- /dev/null
+++ b/mcs/class/I18N/Rare/CP20277.cs
@@ -0,0 +1,897 @@
+/*
+ * CP20277.cs - IBM EBCDIC (Denmark/Norway) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-277.ucm".
+
+namespace I18N.Rare
+{
+
+using System;
+using I18N.Common;
+
+public class CP20277 : ByteEncoding
+{
+ public CP20277()
+ : base(20277, ToChars, "IBM EBCDIC (Denmark/Norway)",
+ "IBM277", "IBM277", "IBM277",
+ false, false, false, false, 1252)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u009C', '\u0009',
+ '\u0086', '\u007F', '\u0097', '\u008D', '\u008E', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u009D', '\u0085', '\u0008', '\u0087',
+ '\u0018', '\u0019', '\u0092', '\u008F', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0080', '\u0081', '\u0082', '\u0083',
+ '\u0084', '\u000A', '\u0017', '\u001B', '\u0088', '\u0089',
+ '\u008A', '\u008B', '\u008C', '\u0005', '\u0006', '\u0007',
+ '\u0090', '\u0091', '\u0016', '\u0093', '\u0094', '\u0095',
+ '\u0096', '\u0004', '\u0098', '\u0099', '\u009A', '\u009B',
+ '\u0014', '\u0015', '\u009E', '\u001A', '\u0020', '\u00A0',
+ '\u00E2', '\u00E4', '\u00E0', '\u00E1', '\u00E3', '\u007D',
+ '\u00E7', '\u00F1', '\u0023', '\u002E', '\u003C', '\u0028',
+ '\u002B', '\u0021', '\u0026', '\u00E9', '\u00EA', '\u00EB',
+ '\u00E8', '\u00ED', '\u00EE', '\u00EF', '\u00EC', '\u00DF',
+ '\u00A4', '\u00C5', '\u002A', '\u0029', '\u003B', '\u005E',
+ '\u002D', '\u002F', '\u00C2', '\u00C4', '\u00C0', '\u00C1',
+ '\u00C3', '\u0024', '\u00C7', '\u00D1', '\u00F8', '\u002C',
+ '\u0025', '\u005F', '\u003E', '\u003F', '\u00A6', '\u00C9',
+ '\u00CA', '\u00CB', '\u00C8', '\u00CD', '\u00CE', '\u00CF',
+ '\u00CC', '\u0060', '\u003A', '\u00C6', '\u00D8', '\u0027',
+ '\u003D', '\u0022', '\u0040', '\u0061', '\u0062', '\u0063',
+ '\u0064', '\u0065', '\u0066', '\u0067', '\u0068', '\u0069',
+ '\u00AB', '\u00BB', '\u00F0', '\u00FD', '\u00FE', '\u00B1',
+ '\u00B0', '\u006A', '\u006B', '\u006C', '\u006D', '\u006E',
+ '\u006F', '\u0070', '\u0071', '\u0072', '\u00AA', '\u00BA',
+ '\u007B', '\u00B8', '\u005B', '\u005D', '\u00B5', '\u00FC',
+ '\u0073', '\u0074', '\u0075', '\u0076', '\u0077', '\u0078',
+ '\u0079', '\u007A', '\u00A1', '\u00BF', '\u00D0', '\u00DD',
+ '\u00DE', '\u00AE', '\u00A2', '\u00A3', '\u00A5', '\u00B7',
+ '\u00A9', '\u00A7', '\u00B6', '\u00BC', '\u00BD', '\u00BE',
+ '\u00AC', '\u007C', '\u00AF', '\u00A8', '\u00B4', '\u00D7',
+ '\u00E6', '\u0041', '\u0042', '\u0043', '\u0044', '\u0045',
+ '\u0046', '\u0047', '\u0048', '\u0049', '\u00AD', '\u00F4',
+ '\u00F6', '\u00F2', '\u00F3', '\u00F5', '\u00E5', '\u004A',
+ '\u004B', '\u004C', '\u004D', '\u004E', '\u004F', '\u0050',
+ '\u0051', '\u0052', '\u00B9', '\u00FB', '\u007E', '\u00F9',
+ '\u00FA', '\u00FF', '\u005C', '\u00F7', '\u0053', '\u0054',
+ '\u0055', '\u0056', '\u0057', '\u0058', '\u0059', '\u005A',
+ '\u00B2', '\u00D4', '\u00D6', '\u00D2', '\u00D3', '\u00D5',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u00B3', '\u00DB',
+ '\u00DC', '\u00D9', '\u00DA', '\u009F',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x00B6:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x4F; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0x4A; break;
+ case 0x0024: ch = 0x67; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0x80; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0x9E; break;
+ case 0x005C: ch = 0xE0; break;
+ case 0x005D: ch = 0x9F; break;
+ case 0x005E: ch = 0x5F; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0x79; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0x9C; break;
+ case 0x007C: ch = 0xBB; break;
+ case 0x007D: ch = 0x47; break;
+ case 0x007E: ch = 0xDC; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A1: ch = 0xAA; break;
+ case 0x00A2: ch = 0xB0; break;
+ case 0x00A3: ch = 0xB1; break;
+ case 0x00A4: ch = 0x5A; break;
+ case 0x00A5: ch = 0xB2; break;
+ case 0x00A6: ch = 0x70; break;
+ case 0x00A7: ch = 0xB5; break;
+ case 0x00A8: ch = 0xBD; break;
+ case 0x00A9: ch = 0xB4; break;
+ case 0x00AA: ch = 0x9A; break;
+ case 0x00AB: ch = 0x8A; break;
+ case 0x00AC: ch = 0xBA; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00AE: ch = 0xAF; break;
+ case 0x00AF: ch = 0xBC; break;
+ case 0x00B0: ch = 0x90; break;
+ case 0x00B1: ch = 0x8F; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xBE; break;
+ case 0x00B5: ch = 0xA0; break;
+ case 0x00B7: ch = 0xB3; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00B9: ch = 0xDA; break;
+ case 0x00BA: ch = 0x9B; break;
+ case 0x00BB: ch = 0x8B; break;
+ case 0x00BC: ch = 0xB7; break;
+ case 0x00BD: ch = 0xB8; break;
+ case 0x00BE: ch = 0xB9; break;
+ case 0x00BF: ch = 0xAB; break;
+ case 0x00C0: ch = 0x64; break;
+ case 0x00C1: ch = 0x65; break;
+ case 0x00C2: ch = 0x62; break;
+ case 0x00C3: ch = 0x66; break;
+ case 0x00C4: ch = 0x63; break;
+ case 0x00C5: ch = 0x5B; break;
+ case 0x00C6: ch = 0x7B; break;
+ case 0x00C7: ch = 0x68; break;
+ case 0x00C8: ch = 0x74; break;
+ case 0x00C9: ch = 0x71; break;
+ case 0x00CA: ch = 0x72; break;
+ case 0x00CB: ch = 0x73; break;
+ case 0x00CC: ch = 0x78; break;
+ case 0x00CD: ch = 0x75; break;
+ case 0x00CE: ch = 0x76; break;
+ case 0x00CF: ch = 0x77; break;
+ case 0x00D0: ch = 0xAC; break;
+ case 0x00D1: ch = 0x69; break;
+ case 0x00D2: ch = 0xED; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEB; break;
+ case 0x00D5: ch = 0xEF; break;
+ case 0x00D6: ch = 0xEC; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00D8: ch = 0x7C; break;
+ case 0x00D9: ch = 0xFD; break;
+ case 0x00DA: ch = 0xFE; break;
+ case 0x00DB: ch = 0xFB; break;
+ case 0x00DC: ch = 0xFC; break;
+ case 0x00DD: ch = 0xAD; break;
+ case 0x00DE: ch = 0xAE; break;
+ case 0x00DF: ch = 0x59; break;
+ case 0x00E0: ch = 0x44; break;
+ case 0x00E1: ch = 0x45; break;
+ case 0x00E2: ch = 0x42; break;
+ case 0x00E3: ch = 0x46; break;
+ case 0x00E4: ch = 0x43; break;
+ case 0x00E5: ch = 0xD0; break;
+ case 0x00E6: ch = 0xC0; break;
+ case 0x00E7: ch = 0x48; break;
+ case 0x00E8: ch = 0x54; break;
+ case 0x00E9: ch = 0x51; break;
+ case 0x00EA: ch = 0x52; break;
+ case 0x00EB: ch = 0x53; break;
+ case 0x00EC: ch = 0x58; break;
+ case 0x00ED: ch = 0x55; break;
+ case 0x00EE: ch = 0x56; break;
+ case 0x00EF: ch = 0x57; break;
+ case 0x00F0: ch = 0x8C; break;
+ case 0x00F1: ch = 0x49; break;
+ case 0x00F2: ch = 0xCD; break;
+ case 0x00F3: ch = 0xCE; break;
+ case 0x00F4: ch = 0xCB; break;
+ case 0x00F5: ch = 0xCF; break;
+ case 0x00F6: ch = 0xCC; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x00F8: ch = 0x6A; break;
+ case 0x00F9: ch = 0xDD; break;
+ case 0x00FA: ch = 0xDE; break;
+ case 0x00FB: ch = 0xDB; break;
+ case 0x00FC: ch = 0xA1; break;
+ case 0x00FD: ch = 0x8D; break;
+ case 0x00FE: ch = 0x8E; break;
+ case 0x00FF: ch = 0xDF; break;
+ case 0x0110: ch = 0xAC; break;
+ case 0x203E: ch = 0xBC; break;
+ case 0xFF01: ch = 0x4F; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0x4A; break;
+ case 0xFF04: ch = 0x67; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0x80; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0x9E; break;
+ case 0xFF3C: ch = 0xE0; break;
+ case 0xFF3D: ch = 0x9F; break;
+ case 0xFF3E: ch = 0x5F; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0x79; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0x9C; break;
+ case 0xFF5C: ch = 0xBB; break;
+ case 0xFF5D: ch = 0x47; break;
+ case 0xFF5E: ch = 0xDC; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x00B6:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x4F; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0x4A; break;
+ case 0x0024: ch = 0x67; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0x80; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0x9E; break;
+ case 0x005C: ch = 0xE0; break;
+ case 0x005D: ch = 0x9F; break;
+ case 0x005E: ch = 0x5F; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0x79; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0x9C; break;
+ case 0x007C: ch = 0xBB; break;
+ case 0x007D: ch = 0x47; break;
+ case 0x007E: ch = 0xDC; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A1: ch = 0xAA; break;
+ case 0x00A2: ch = 0xB0; break;
+ case 0x00A3: ch = 0xB1; break;
+ case 0x00A4: ch = 0x5A; break;
+ case 0x00A5: ch = 0xB2; break;
+ case 0x00A6: ch = 0x70; break;
+ case 0x00A7: ch = 0xB5; break;
+ case 0x00A8: ch = 0xBD; break;
+ case 0x00A9: ch = 0xB4; break;
+ case 0x00AA: ch = 0x9A; break;
+ case 0x00AB: ch = 0x8A; break;
+ case 0x00AC: ch = 0xBA; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00AE: ch = 0xAF; break;
+ case 0x00AF: ch = 0xBC; break;
+ case 0x00B0: ch = 0x90; break;
+ case 0x00B1: ch = 0x8F; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xBE; break;
+ case 0x00B5: ch = 0xA0; break;
+ case 0x00B7: ch = 0xB3; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00B9: ch = 0xDA; break;
+ case 0x00BA: ch = 0x9B; break;
+ case 0x00BB: ch = 0x8B; break;
+ case 0x00BC: ch = 0xB7; break;
+ case 0x00BD: ch = 0xB8; break;
+ case 0x00BE: ch = 0xB9; break;
+ case 0x00BF: ch = 0xAB; break;
+ case 0x00C0: ch = 0x64; break;
+ case 0x00C1: ch = 0x65; break;
+ case 0x00C2: ch = 0x62; break;
+ case 0x00C3: ch = 0x66; break;
+ case 0x00C4: ch = 0x63; break;
+ case 0x00C5: ch = 0x5B; break;
+ case 0x00C6: ch = 0x7B; break;
+ case 0x00C7: ch = 0x68; break;
+ case 0x00C8: ch = 0x74; break;
+ case 0x00C9: ch = 0x71; break;
+ case 0x00CA: ch = 0x72; break;
+ case 0x00CB: ch = 0x73; break;
+ case 0x00CC: ch = 0x78; break;
+ case 0x00CD: ch = 0x75; break;
+ case 0x00CE: ch = 0x76; break;
+ case 0x00CF: ch = 0x77; break;
+ case 0x00D0: ch = 0xAC; break;
+ case 0x00D1: ch = 0x69; break;
+ case 0x00D2: ch = 0xED; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEB; break;
+ case 0x00D5: ch = 0xEF; break;
+ case 0x00D6: ch = 0xEC; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00D8: ch = 0x7C; break;
+ case 0x00D9: ch = 0xFD; break;
+ case 0x00DA: ch = 0xFE; break;
+ case 0x00DB: ch = 0xFB; break;
+ case 0x00DC: ch = 0xFC; break;
+ case 0x00DD: ch = 0xAD; break;
+ case 0x00DE: ch = 0xAE; break;
+ case 0x00DF: ch = 0x59; break;
+ case 0x00E0: ch = 0x44; break;
+ case 0x00E1: ch = 0x45; break;
+ case 0x00E2: ch = 0x42; break;
+ case 0x00E3: ch = 0x46; break;
+ case 0x00E4: ch = 0x43; break;
+ case 0x00E5: ch = 0xD0; break;
+ case 0x00E6: ch = 0xC0; break;
+ case 0x00E7: ch = 0x48; break;
+ case 0x00E8: ch = 0x54; break;
+ case 0x00E9: ch = 0x51; break;
+ case 0x00EA: ch = 0x52; break;
+ case 0x00EB: ch = 0x53; break;
+ case 0x00EC: ch = 0x58; break;
+ case 0x00ED: ch = 0x55; break;
+ case 0x00EE: ch = 0x56; break;
+ case 0x00EF: ch = 0x57; break;
+ case 0x00F0: ch = 0x8C; break;
+ case 0x00F1: ch = 0x49; break;
+ case 0x00F2: ch = 0xCD; break;
+ case 0x00F3: ch = 0xCE; break;
+ case 0x00F4: ch = 0xCB; break;
+ case 0x00F5: ch = 0xCF; break;
+ case 0x00F6: ch = 0xCC; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x00F8: ch = 0x6A; break;
+ case 0x00F9: ch = 0xDD; break;
+ case 0x00FA: ch = 0xDE; break;
+ case 0x00FB: ch = 0xDB; break;
+ case 0x00FC: ch = 0xA1; break;
+ case 0x00FD: ch = 0x8D; break;
+ case 0x00FE: ch = 0x8E; break;
+ case 0x00FF: ch = 0xDF; break;
+ case 0x0110: ch = 0xAC; break;
+ case 0x203E: ch = 0xBC; break;
+ case 0xFF01: ch = 0x4F; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0x4A; break;
+ case 0xFF04: ch = 0x67; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0x80; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0x9E; break;
+ case 0xFF3C: ch = 0xE0; break;
+ case 0xFF3D: ch = 0x9F; break;
+ case 0xFF3E: ch = 0x5F; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0x79; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0x9C; break;
+ case 0xFF5C: ch = 0xBB; break;
+ case 0xFF5D: ch = 0x47; break;
+ case 0xFF5E: ch = 0xDC; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP20277
+
+public class ENCibm277 : CP20277
+{
+ public ENCibm277() : base() {}
+
+}; // class ENCibm277
+
+}; // namespace I18N.Rare
diff --git a/mcs/class/I18N/Rare/CP20278.cs b/mcs/class/I18N/Rare/CP20278.cs
new file mode 100644
index 00000000000..56f03e2f5aa
--- /dev/null
+++ b/mcs/class/I18N/Rare/CP20278.cs
@@ -0,0 +1,897 @@
+/*
+ * CP20278.cs - IBM EBCDIC (Finland/Sweden) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-278.ucm".
+
+namespace I18N.Rare
+{
+
+using System;
+using I18N.Common;
+
+public class CP20278 : ByteEncoding
+{
+ public CP20278()
+ : base(20278, ToChars, "IBM EBCDIC (Finland/Sweden)",
+ "IBM278", "IBM278", "IBM278",
+ false, false, false, false, 1252)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u009C', '\u0009',
+ '\u0086', '\u007F', '\u0097', '\u008D', '\u008E', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u009D', '\u0085', '\u0008', '\u0087',
+ '\u0018', '\u0019', '\u0092', '\u008F', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0080', '\u0081', '\u0082', '\u0083',
+ '\u0084', '\u000A', '\u0017', '\u001B', '\u0088', '\u0089',
+ '\u008A', '\u008B', '\u008C', '\u0005', '\u0006', '\u0007',
+ '\u0090', '\u0091', '\u0016', '\u0093', '\u0094', '\u0095',
+ '\u0096', '\u0004', '\u0098', '\u0099', '\u009A', '\u009B',
+ '\u0014', '\u0015', '\u009E', '\u001A', '\u0020', '\u00A0',
+ '\u00E2', '\u007B', '\u00E0', '\u00E1', '\u00E3', '\u007D',
+ '\u00E7', '\u00F1', '\u00A7', '\u002E', '\u003C', '\u0028',
+ '\u002B', '\u0021', '\u0026', '\u0060', '\u00EA', '\u00EB',
+ '\u00E8', '\u00ED', '\u00EE', '\u00EF', '\u00EC', '\u00DF',
+ '\u00A4', '\u00C5', '\u002A', '\u0029', '\u003B', '\u005E',
+ '\u002D', '\u002F', '\u00C2', '\u0023', '\u00C0', '\u00C1',
+ '\u00C3', '\u0024', '\u00C7', '\u00D1', '\u00F6', '\u002C',
+ '\u0025', '\u005F', '\u003E', '\u003F', '\u00F8', '\u005C',
+ '\u00CA', '\u00CB', '\u00C8', '\u00CD', '\u00CE', '\u00CF',
+ '\u00CC', '\u00E9', '\u003A', '\u00C4', '\u00D6', '\u0027',
+ '\u003D', '\u0022', '\u00D8', '\u0061', '\u0062', '\u0063',
+ '\u0064', '\u0065', '\u0066', '\u0067', '\u0068', '\u0069',
+ '\u00AB', '\u00BB', '\u00F0', '\u00FD', '\u00FE', '\u00B1',
+ '\u00B0', '\u006A', '\u006B', '\u006C', '\u006D', '\u006E',
+ '\u006F', '\u0070', '\u0071', '\u0072', '\u00AA', '\u00BA',
+ '\u00E6', '\u00B8', '\u00C6', '\u005D', '\u00B5', '\u00FC',
+ '\u0073', '\u0074', '\u0075', '\u0076', '\u0077', '\u0078',
+ '\u0079', '\u007A', '\u00A1', '\u00BF', '\u00D0', '\u00DD',
+ '\u00DE', '\u00AE', '\u00A2', '\u00A3', '\u00A5', '\u00B7',
+ '\u00A9', '\u005B', '\u00B6', '\u00BC', '\u00BD', '\u00BE',
+ '\u00AC', '\u007C', '\u00AF', '\u00A8', '\u00B4', '\u00D7',
+ '\u00E4', '\u0041', '\u0042', '\u0043', '\u0044', '\u0045',
+ '\u0046', '\u0047', '\u0048', '\u0049', '\u00AD', '\u00F4',
+ '\u00A6', '\u00F2', '\u00F3', '\u00F5', '\u00E5', '\u004A',
+ '\u004B', '\u004C', '\u004D', '\u004E', '\u004F', '\u0050',
+ '\u0051', '\u0052', '\u00B9', '\u00FB', '\u007E', '\u00F9',
+ '\u00FA', '\u00FF', '\u00C9', '\u00F7', '\u0053', '\u0054',
+ '\u0055', '\u0056', '\u0057', '\u0058', '\u0059', '\u005A',
+ '\u00B2', '\u00D4', '\u0040', '\u00D2', '\u00D3', '\u00D5',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u00B3', '\u00DB',
+ '\u00DC', '\u00D9', '\u00DA', '\u009F',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x00B6:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x4F; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0x63; break;
+ case 0x0024: ch = 0x67; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0xEC; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0xB5; break;
+ case 0x005C: ch = 0x71; break;
+ case 0x005D: ch = 0x9F; break;
+ case 0x005E: ch = 0x5F; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0x51; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0x43; break;
+ case 0x007C: ch = 0xBB; break;
+ case 0x007D: ch = 0x47; break;
+ case 0x007E: ch = 0xDC; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A1: ch = 0xAA; break;
+ case 0x00A2: ch = 0xB0; break;
+ case 0x00A3: ch = 0xB1; break;
+ case 0x00A4: ch = 0x5A; break;
+ case 0x00A5: ch = 0xB2; break;
+ case 0x00A6: ch = 0xCC; break;
+ case 0x00A7: ch = 0x4A; break;
+ case 0x00A8: ch = 0xBD; break;
+ case 0x00A9: ch = 0xB4; break;
+ case 0x00AA: ch = 0x9A; break;
+ case 0x00AB: ch = 0x8A; break;
+ case 0x00AC: ch = 0xBA; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00AE: ch = 0xAF; break;
+ case 0x00AF: ch = 0xBC; break;
+ case 0x00B0: ch = 0x90; break;
+ case 0x00B1: ch = 0x8F; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xBE; break;
+ case 0x00B5: ch = 0xA0; break;
+ case 0x00B7: ch = 0xB3; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00B9: ch = 0xDA; break;
+ case 0x00BA: ch = 0x9B; break;
+ case 0x00BB: ch = 0x8B; break;
+ case 0x00BC: ch = 0xB7; break;
+ case 0x00BD: ch = 0xB8; break;
+ case 0x00BE: ch = 0xB9; break;
+ case 0x00BF: ch = 0xAB; break;
+ case 0x00C0: ch = 0x64; break;
+ case 0x00C1: ch = 0x65; break;
+ case 0x00C2: ch = 0x62; break;
+ case 0x00C3: ch = 0x66; break;
+ case 0x00C4: ch = 0x7B; break;
+ case 0x00C5: ch = 0x5B; break;
+ case 0x00C6: ch = 0x9E; break;
+ case 0x00C7: ch = 0x68; break;
+ case 0x00C8: ch = 0x74; break;
+ case 0x00C9: ch = 0xE0; break;
+ case 0x00CA: ch = 0x72; break;
+ case 0x00CB: ch = 0x73; break;
+ case 0x00CC: ch = 0x78; break;
+ case 0x00CD: ch = 0x75; break;
+ case 0x00CE: ch = 0x76; break;
+ case 0x00CF: ch = 0x77; break;
+ case 0x00D0: ch = 0xAC; break;
+ case 0x00D1: ch = 0x69; break;
+ case 0x00D2: ch = 0xED; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEB; break;
+ case 0x00D5: ch = 0xEF; break;
+ case 0x00D6: ch = 0x7C; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00D8: ch = 0x80; break;
+ case 0x00D9: ch = 0xFD; break;
+ case 0x00DA: ch = 0xFE; break;
+ case 0x00DB: ch = 0xFB; break;
+ case 0x00DC: ch = 0xFC; break;
+ case 0x00DD: ch = 0xAD; break;
+ case 0x00DE: ch = 0xAE; break;
+ case 0x00DF: ch = 0x59; break;
+ case 0x00E0: ch = 0x44; break;
+ case 0x00E1: ch = 0x45; break;
+ case 0x00E2: ch = 0x42; break;
+ case 0x00E3: ch = 0x46; break;
+ case 0x00E4: ch = 0xC0; break;
+ case 0x00E5: ch = 0xD0; break;
+ case 0x00E6: ch = 0x9C; break;
+ case 0x00E7: ch = 0x48; break;
+ case 0x00E8: ch = 0x54; break;
+ case 0x00E9: ch = 0x79; break;
+ case 0x00EA: ch = 0x52; break;
+ case 0x00EB: ch = 0x53; break;
+ case 0x00EC: ch = 0x58; break;
+ case 0x00ED: ch = 0x55; break;
+ case 0x00EE: ch = 0x56; break;
+ case 0x00EF: ch = 0x57; break;
+ case 0x00F0: ch = 0x8C; break;
+ case 0x00F1: ch = 0x49; break;
+ case 0x00F2: ch = 0xCD; break;
+ case 0x00F3: ch = 0xCE; break;
+ case 0x00F4: ch = 0xCB; break;
+ case 0x00F5: ch = 0xCF; break;
+ case 0x00F6: ch = 0x6A; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x00F8: ch = 0x70; break;
+ case 0x00F9: ch = 0xDD; break;
+ case 0x00FA: ch = 0xDE; break;
+ case 0x00FB: ch = 0xDB; break;
+ case 0x00FC: ch = 0xA1; break;
+ case 0x00FD: ch = 0x8D; break;
+ case 0x00FE: ch = 0x8E; break;
+ case 0x00FF: ch = 0xDF; break;
+ case 0x0110: ch = 0xAC; break;
+ case 0x203E: ch = 0xBC; break;
+ case 0xFF01: ch = 0x4F; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0x63; break;
+ case 0xFF04: ch = 0x67; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0xEC; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0xB5; break;
+ case 0xFF3C: ch = 0x71; break;
+ case 0xFF3D: ch = 0x9F; break;
+ case 0xFF3E: ch = 0x5F; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0x51; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0x43; break;
+ case 0xFF5C: ch = 0xBB; break;
+ case 0xFF5D: ch = 0x47; break;
+ case 0xFF5E: ch = 0xDC; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x00B6:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x4F; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0x63; break;
+ case 0x0024: ch = 0x67; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0xEC; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0xB5; break;
+ case 0x005C: ch = 0x71; break;
+ case 0x005D: ch = 0x9F; break;
+ case 0x005E: ch = 0x5F; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0x51; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0x43; break;
+ case 0x007C: ch = 0xBB; break;
+ case 0x007D: ch = 0x47; break;
+ case 0x007E: ch = 0xDC; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A1: ch = 0xAA; break;
+ case 0x00A2: ch = 0xB0; break;
+ case 0x00A3: ch = 0xB1; break;
+ case 0x00A4: ch = 0x5A; break;
+ case 0x00A5: ch = 0xB2; break;
+ case 0x00A6: ch = 0xCC; break;
+ case 0x00A7: ch = 0x4A; break;
+ case 0x00A8: ch = 0xBD; break;
+ case 0x00A9: ch = 0xB4; break;
+ case 0x00AA: ch = 0x9A; break;
+ case 0x00AB: ch = 0x8A; break;
+ case 0x00AC: ch = 0xBA; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00AE: ch = 0xAF; break;
+ case 0x00AF: ch = 0xBC; break;
+ case 0x00B0: ch = 0x90; break;
+ case 0x00B1: ch = 0x8F; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xBE; break;
+ case 0x00B5: ch = 0xA0; break;
+ case 0x00B7: ch = 0xB3; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00B9: ch = 0xDA; break;
+ case 0x00BA: ch = 0x9B; break;
+ case 0x00BB: ch = 0x8B; break;
+ case 0x00BC: ch = 0xB7; break;
+ case 0x00BD: ch = 0xB8; break;
+ case 0x00BE: ch = 0xB9; break;
+ case 0x00BF: ch = 0xAB; break;
+ case 0x00C0: ch = 0x64; break;
+ case 0x00C1: ch = 0x65; break;
+ case 0x00C2: ch = 0x62; break;
+ case 0x00C3: ch = 0x66; break;
+ case 0x00C4: ch = 0x7B; break;
+ case 0x00C5: ch = 0x5B; break;
+ case 0x00C6: ch = 0x9E; break;
+ case 0x00C7: ch = 0x68; break;
+ case 0x00C8: ch = 0x74; break;
+ case 0x00C9: ch = 0xE0; break;
+ case 0x00CA: ch = 0x72; break;
+ case 0x00CB: ch = 0x73; break;
+ case 0x00CC: ch = 0x78; break;
+ case 0x00CD: ch = 0x75; break;
+ case 0x00CE: ch = 0x76; break;
+ case 0x00CF: ch = 0x77; break;
+ case 0x00D0: ch = 0xAC; break;
+ case 0x00D1: ch = 0x69; break;
+ case 0x00D2: ch = 0xED; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEB; break;
+ case 0x00D5: ch = 0xEF; break;
+ case 0x00D6: ch = 0x7C; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00D8: ch = 0x80; break;
+ case 0x00D9: ch = 0xFD; break;
+ case 0x00DA: ch = 0xFE; break;
+ case 0x00DB: ch = 0xFB; break;
+ case 0x00DC: ch = 0xFC; break;
+ case 0x00DD: ch = 0xAD; break;
+ case 0x00DE: ch = 0xAE; break;
+ case 0x00DF: ch = 0x59; break;
+ case 0x00E0: ch = 0x44; break;
+ case 0x00E1: ch = 0x45; break;
+ case 0x00E2: ch = 0x42; break;
+ case 0x00E3: ch = 0x46; break;
+ case 0x00E4: ch = 0xC0; break;
+ case 0x00E5: ch = 0xD0; break;
+ case 0x00E6: ch = 0x9C; break;
+ case 0x00E7: ch = 0x48; break;
+ case 0x00E8: ch = 0x54; break;
+ case 0x00E9: ch = 0x79; break;
+ case 0x00EA: ch = 0x52; break;
+ case 0x00EB: ch = 0x53; break;
+ case 0x00EC: ch = 0x58; break;
+ case 0x00ED: ch = 0x55; break;
+ case 0x00EE: ch = 0x56; break;
+ case 0x00EF: ch = 0x57; break;
+ case 0x00F0: ch = 0x8C; break;
+ case 0x00F1: ch = 0x49; break;
+ case 0x00F2: ch = 0xCD; break;
+ case 0x00F3: ch = 0xCE; break;
+ case 0x00F4: ch = 0xCB; break;
+ case 0x00F5: ch = 0xCF; break;
+ case 0x00F6: ch = 0x6A; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x00F8: ch = 0x70; break;
+ case 0x00F9: ch = 0xDD; break;
+ case 0x00FA: ch = 0xDE; break;
+ case 0x00FB: ch = 0xDB; break;
+ case 0x00FC: ch = 0xA1; break;
+ case 0x00FD: ch = 0x8D; break;
+ case 0x00FE: ch = 0x8E; break;
+ case 0x00FF: ch = 0xDF; break;
+ case 0x0110: ch = 0xAC; break;
+ case 0x203E: ch = 0xBC; break;
+ case 0xFF01: ch = 0x4F; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0x63; break;
+ case 0xFF04: ch = 0x67; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0xEC; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0xB5; break;
+ case 0xFF3C: ch = 0x71; break;
+ case 0xFF3D: ch = 0x9F; break;
+ case 0xFF3E: ch = 0x5F; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0x51; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0x43; break;
+ case 0xFF5C: ch = 0xBB; break;
+ case 0xFF5D: ch = 0x47; break;
+ case 0xFF5E: ch = 0xDC; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP20278
+
+public class ENCibm278 : CP20278
+{
+ public ENCibm278() : base() {}
+
+}; // class ENCibm278
+
+}; // namespace I18N.Rare
diff --git a/mcs/class/I18N/Rare/CP20280.cs b/mcs/class/I18N/Rare/CP20280.cs
new file mode 100644
index 00000000000..d675956d980
--- /dev/null
+++ b/mcs/class/I18N/Rare/CP20280.cs
@@ -0,0 +1,897 @@
+/*
+ * CP20280.cs - IBM EBCDIC (Italy) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-280.ucm".
+
+namespace I18N.Rare
+{
+
+using System;
+using I18N.Common;
+
+public class CP20280 : ByteEncoding
+{
+ public CP20280()
+ : base(20280, ToChars, "IBM EBCDIC (Italy)",
+ "IBM280", "IBM280", "IBM280",
+ false, false, false, false, 1252)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u009C', '\u0009',
+ '\u0086', '\u007F', '\u0097', '\u008D', '\u008E', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u009D', '\u0085', '\u0008', '\u0087',
+ '\u0018', '\u0019', '\u0092', '\u008F', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0080', '\u0081', '\u0082', '\u0083',
+ '\u0084', '\u000A', '\u0017', '\u001B', '\u0088', '\u0089',
+ '\u008A', '\u008B', '\u008C', '\u0005', '\u0006', '\u0007',
+ '\u0090', '\u0091', '\u0016', '\u0093', '\u0094', '\u0095',
+ '\u0096', '\u0004', '\u0098', '\u0099', '\u009A', '\u009B',
+ '\u0014', '\u0015', '\u009E', '\u001A', '\u0020', '\u00A0',
+ '\u00E2', '\u00E4', '\u007B', '\u00E1', '\u00E3', '\u00E5',
+ '\u005C', '\u00F1', '\u00B0', '\u002E', '\u003C', '\u0028',
+ '\u002B', '\u0021', '\u0026', '\u005D', '\u00EA', '\u00EB',
+ '\u007D', '\u00ED', '\u00EE', '\u00EF', '\u007E', '\u00DF',
+ '\u00E9', '\u0024', '\u002A', '\u0029', '\u003B', '\u005E',
+ '\u002D', '\u002F', '\u00C2', '\u00C4', '\u00C0', '\u00C1',
+ '\u00C3', '\u00C5', '\u00C7', '\u00D1', '\u00F2', '\u002C',
+ '\u0025', '\u005F', '\u003E', '\u003F', '\u00F8', '\u00C9',
+ '\u00CA', '\u00CB', '\u00C8', '\u00CD', '\u00CE', '\u00CF',
+ '\u00CC', '\u00F9', '\u003A', '\u00A3', '\u00A7', '\u0027',
+ '\u003D', '\u0022', '\u00D8', '\u0061', '\u0062', '\u0063',
+ '\u0064', '\u0065', '\u0066', '\u0067', '\u0068', '\u0069',
+ '\u00AB', '\u00BB', '\u00F0', '\u00FD', '\u00FE', '\u00B1',
+ '\u005B', '\u006A', '\u006B', '\u006C', '\u006D', '\u006E',
+ '\u006F', '\u0070', '\u0071', '\u0072', '\u00AA', '\u00BA',
+ '\u00E6', '\u00B8', '\u00C6', '\u00A4', '\u00B5', '\u00EC',
+ '\u0073', '\u0074', '\u0075', '\u0076', '\u0077', '\u0078',
+ '\u0079', '\u007A', '\u00A1', '\u00BF', '\u00D0', '\u00DD',
+ '\u00DE', '\u00AE', '\u00A2', '\u0023', '\u00A5', '\u00B7',
+ '\u00A9', '\u0040', '\u00B6', '\u00BC', '\u00BD', '\u00BE',
+ '\u00AC', '\u007C', '\u00AF', '\u00A8', '\u00B4', '\u00D7',
+ '\u00E0', '\u0041', '\u0042', '\u0043', '\u0044', '\u0045',
+ '\u0046', '\u0047', '\u0048', '\u0049', '\u00AD', '\u00F4',
+ '\u00F6', '\u00A6', '\u00F3', '\u00F5', '\u00E8', '\u004A',
+ '\u004B', '\u004C', '\u004D', '\u004E', '\u004F', '\u0050',
+ '\u0051', '\u0052', '\u00B9', '\u00FB', '\u00FC', '\u0060',
+ '\u00FA', '\u00FF', '\u00E7', '\u00F7', '\u0053', '\u0054',
+ '\u0055', '\u0056', '\u0057', '\u0058', '\u0059', '\u005A',
+ '\u00B2', '\u00D4', '\u00D6', '\u00D2', '\u00D3', '\u00D5',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u00B3', '\u00DB',
+ '\u00DC', '\u00D9', '\u00DA', '\u009F',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x00B6:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x4F; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0xB1; break;
+ case 0x0024: ch = 0x5B; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0xB5; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0x90; break;
+ case 0x005C: ch = 0x48; break;
+ case 0x005D: ch = 0x51; break;
+ case 0x005E: ch = 0x5F; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0xDD; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0x44; break;
+ case 0x007C: ch = 0xBB; break;
+ case 0x007D: ch = 0x54; break;
+ case 0x007E: ch = 0x58; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A1: ch = 0xAA; break;
+ case 0x00A2: ch = 0xB0; break;
+ case 0x00A3: ch = 0x7B; break;
+ case 0x00A4: ch = 0x9F; break;
+ case 0x00A5: ch = 0xB2; break;
+ case 0x00A6: ch = 0xCD; break;
+ case 0x00A7: ch = 0x7C; break;
+ case 0x00A8: ch = 0xBD; break;
+ case 0x00A9: ch = 0xB4; break;
+ case 0x00AA: ch = 0x9A; break;
+ case 0x00AB: ch = 0x8A; break;
+ case 0x00AC: ch = 0xBA; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00AE: ch = 0xAF; break;
+ case 0x00AF: ch = 0xBC; break;
+ case 0x00B0: ch = 0x4A; break;
+ case 0x00B1: ch = 0x8F; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xBE; break;
+ case 0x00B5: ch = 0xA0; break;
+ case 0x00B7: ch = 0xB3; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00B9: ch = 0xDA; break;
+ case 0x00BA: ch = 0x9B; break;
+ case 0x00BB: ch = 0x8B; break;
+ case 0x00BC: ch = 0xB7; break;
+ case 0x00BD: ch = 0xB8; break;
+ case 0x00BE: ch = 0xB9; break;
+ case 0x00BF: ch = 0xAB; break;
+ case 0x00C0: ch = 0x64; break;
+ case 0x00C1: ch = 0x65; break;
+ case 0x00C2: ch = 0x62; break;
+ case 0x00C3: ch = 0x66; break;
+ case 0x00C4: ch = 0x63; break;
+ case 0x00C5: ch = 0x67; break;
+ case 0x00C6: ch = 0x9E; break;
+ case 0x00C7: ch = 0x68; break;
+ case 0x00C8: ch = 0x74; break;
+ case 0x00C9: ch = 0x71; break;
+ case 0x00CA: ch = 0x72; break;
+ case 0x00CB: ch = 0x73; break;
+ case 0x00CC: ch = 0x78; break;
+ case 0x00CD: ch = 0x75; break;
+ case 0x00CE: ch = 0x76; break;
+ case 0x00CF: ch = 0x77; break;
+ case 0x00D0: ch = 0xAC; break;
+ case 0x00D1: ch = 0x69; break;
+ case 0x00D2: ch = 0xED; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEB; break;
+ case 0x00D5: ch = 0xEF; break;
+ case 0x00D6: ch = 0xEC; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00D8: ch = 0x80; break;
+ case 0x00D9: ch = 0xFD; break;
+ case 0x00DA: ch = 0xFE; break;
+ case 0x00DB: ch = 0xFB; break;
+ case 0x00DC: ch = 0xFC; break;
+ case 0x00DD: ch = 0xAD; break;
+ case 0x00DE: ch = 0xAE; break;
+ case 0x00DF: ch = 0x59; break;
+ case 0x00E0: ch = 0xC0; break;
+ case 0x00E1: ch = 0x45; break;
+ case 0x00E2: ch = 0x42; break;
+ case 0x00E3: ch = 0x46; break;
+ case 0x00E4: ch = 0x43; break;
+ case 0x00E5: ch = 0x47; break;
+ case 0x00E6: ch = 0x9C; break;
+ case 0x00E7: ch = 0xE0; break;
+ case 0x00E8: ch = 0xD0; break;
+ case 0x00E9: ch = 0x5A; break;
+ case 0x00EA: ch = 0x52; break;
+ case 0x00EB: ch = 0x53; break;
+ case 0x00EC: ch = 0xA1; break;
+ case 0x00ED: ch = 0x55; break;
+ case 0x00EE: ch = 0x56; break;
+ case 0x00EF: ch = 0x57; break;
+ case 0x00F0: ch = 0x8C; break;
+ case 0x00F1: ch = 0x49; break;
+ case 0x00F2: ch = 0x6A; break;
+ case 0x00F3: ch = 0xCE; break;
+ case 0x00F4: ch = 0xCB; break;
+ case 0x00F5: ch = 0xCF; break;
+ case 0x00F6: ch = 0xCC; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x00F8: ch = 0x70; break;
+ case 0x00F9: ch = 0x79; break;
+ case 0x00FA: ch = 0xDE; break;
+ case 0x00FB: ch = 0xDB; break;
+ case 0x00FC: ch = 0xDC; break;
+ case 0x00FD: ch = 0x8D; break;
+ case 0x00FE: ch = 0x8E; break;
+ case 0x00FF: ch = 0xDF; break;
+ case 0x0110: ch = 0xAC; break;
+ case 0x203E: ch = 0xBC; break;
+ case 0xFF01: ch = 0x4F; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0xB1; break;
+ case 0xFF04: ch = 0x5B; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0xB5; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0x90; break;
+ case 0xFF3C: ch = 0x48; break;
+ case 0xFF3D: ch = 0x51; break;
+ case 0xFF3E: ch = 0x5F; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0xDD; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0x44; break;
+ case 0xFF5C: ch = 0xBB; break;
+ case 0xFF5D: ch = 0x54; break;
+ case 0xFF5E: ch = 0x58; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x00B6:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x4F; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0xB1; break;
+ case 0x0024: ch = 0x5B; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0xB5; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0x90; break;
+ case 0x005C: ch = 0x48; break;
+ case 0x005D: ch = 0x51; break;
+ case 0x005E: ch = 0x5F; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0xDD; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0x44; break;
+ case 0x007C: ch = 0xBB; break;
+ case 0x007D: ch = 0x54; break;
+ case 0x007E: ch = 0x58; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A1: ch = 0xAA; break;
+ case 0x00A2: ch = 0xB0; break;
+ case 0x00A3: ch = 0x7B; break;
+ case 0x00A4: ch = 0x9F; break;
+ case 0x00A5: ch = 0xB2; break;
+ case 0x00A6: ch = 0xCD; break;
+ case 0x00A7: ch = 0x7C; break;
+ case 0x00A8: ch = 0xBD; break;
+ case 0x00A9: ch = 0xB4; break;
+ case 0x00AA: ch = 0x9A; break;
+ case 0x00AB: ch = 0x8A; break;
+ case 0x00AC: ch = 0xBA; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00AE: ch = 0xAF; break;
+ case 0x00AF: ch = 0xBC; break;
+ case 0x00B0: ch = 0x4A; break;
+ case 0x00B1: ch = 0x8F; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xBE; break;
+ case 0x00B5: ch = 0xA0; break;
+ case 0x00B7: ch = 0xB3; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00B9: ch = 0xDA; break;
+ case 0x00BA: ch = 0x9B; break;
+ case 0x00BB: ch = 0x8B; break;
+ case 0x00BC: ch = 0xB7; break;
+ case 0x00BD: ch = 0xB8; break;
+ case 0x00BE: ch = 0xB9; break;
+ case 0x00BF: ch = 0xAB; break;
+ case 0x00C0: ch = 0x64; break;
+ case 0x00C1: ch = 0x65; break;
+ case 0x00C2: ch = 0x62; break;
+ case 0x00C3: ch = 0x66; break;
+ case 0x00C4: ch = 0x63; break;
+ case 0x00C5: ch = 0x67; break;
+ case 0x00C6: ch = 0x9E; break;
+ case 0x00C7: ch = 0x68; break;
+ case 0x00C8: ch = 0x74; break;
+ case 0x00C9: ch = 0x71; break;
+ case 0x00CA: ch = 0x72; break;
+ case 0x00CB: ch = 0x73; break;
+ case 0x00CC: ch = 0x78; break;
+ case 0x00CD: ch = 0x75; break;
+ case 0x00CE: ch = 0x76; break;
+ case 0x00CF: ch = 0x77; break;
+ case 0x00D0: ch = 0xAC; break;
+ case 0x00D1: ch = 0x69; break;
+ case 0x00D2: ch = 0xED; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEB; break;
+ case 0x00D5: ch = 0xEF; break;
+ case 0x00D6: ch = 0xEC; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00D8: ch = 0x80; break;
+ case 0x00D9: ch = 0xFD; break;
+ case 0x00DA: ch = 0xFE; break;
+ case 0x00DB: ch = 0xFB; break;
+ case 0x00DC: ch = 0xFC; break;
+ case 0x00DD: ch = 0xAD; break;
+ case 0x00DE: ch = 0xAE; break;
+ case 0x00DF: ch = 0x59; break;
+ case 0x00E0: ch = 0xC0; break;
+ case 0x00E1: ch = 0x45; break;
+ case 0x00E2: ch = 0x42; break;
+ case 0x00E3: ch = 0x46; break;
+ case 0x00E4: ch = 0x43; break;
+ case 0x00E5: ch = 0x47; break;
+ case 0x00E6: ch = 0x9C; break;
+ case 0x00E7: ch = 0xE0; break;
+ case 0x00E8: ch = 0xD0; break;
+ case 0x00E9: ch = 0x5A; break;
+ case 0x00EA: ch = 0x52; break;
+ case 0x00EB: ch = 0x53; break;
+ case 0x00EC: ch = 0xA1; break;
+ case 0x00ED: ch = 0x55; break;
+ case 0x00EE: ch = 0x56; break;
+ case 0x00EF: ch = 0x57; break;
+ case 0x00F0: ch = 0x8C; break;
+ case 0x00F1: ch = 0x49; break;
+ case 0x00F2: ch = 0x6A; break;
+ case 0x00F3: ch = 0xCE; break;
+ case 0x00F4: ch = 0xCB; break;
+ case 0x00F5: ch = 0xCF; break;
+ case 0x00F6: ch = 0xCC; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x00F8: ch = 0x70; break;
+ case 0x00F9: ch = 0x79; break;
+ case 0x00FA: ch = 0xDE; break;
+ case 0x00FB: ch = 0xDB; break;
+ case 0x00FC: ch = 0xDC; break;
+ case 0x00FD: ch = 0x8D; break;
+ case 0x00FE: ch = 0x8E; break;
+ case 0x00FF: ch = 0xDF; break;
+ case 0x0110: ch = 0xAC; break;
+ case 0x203E: ch = 0xBC; break;
+ case 0xFF01: ch = 0x4F; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0xB1; break;
+ case 0xFF04: ch = 0x5B; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0xB5; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0x90; break;
+ case 0xFF3C: ch = 0x48; break;
+ case 0xFF3D: ch = 0x51; break;
+ case 0xFF3E: ch = 0x5F; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0xDD; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0x44; break;
+ case 0xFF5C: ch = 0xBB; break;
+ case 0xFF5D: ch = 0x54; break;
+ case 0xFF5E: ch = 0x58; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP20280
+
+public class ENCibm280 : CP20280
+{
+ public ENCibm280() : base() {}
+
+}; // class ENCibm280
+
+}; // namespace I18N.Rare
diff --git a/mcs/class/I18N/Rare/CP20284.cs b/mcs/class/I18N/Rare/CP20284.cs
new file mode 100644
index 00000000000..df03a5271ea
--- /dev/null
+++ b/mcs/class/I18N/Rare/CP20284.cs
@@ -0,0 +1,897 @@
+/*
+ * CP20284.cs - IBM EBCDIC (Latin America/Spain) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-284.ucm".
+
+namespace I18N.Rare
+{
+
+using System;
+using I18N.Common;
+
+public class CP20284 : ByteEncoding
+{
+ public CP20284()
+ : base(20284, ToChars, "IBM EBCDIC (Latin America/Spain)",
+ "IBM284", "IBM284", "IBM284",
+ false, false, false, false, 1252)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u009C', '\u0009',
+ '\u0086', '\u007F', '\u0097', '\u008D', '\u008E', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u009D', '\u0085', '\u0008', '\u0087',
+ '\u0018', '\u0019', '\u0092', '\u008F', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0080', '\u0081', '\u0082', '\u0083',
+ '\u0084', '\u000A', '\u0017', '\u001B', '\u0088', '\u0089',
+ '\u008A', '\u008B', '\u008C', '\u0005', '\u0006', '\u0007',
+ '\u0090', '\u0091', '\u0016', '\u0093', '\u0094', '\u0095',
+ '\u0096', '\u0004', '\u0098', '\u0099', '\u009A', '\u009B',
+ '\u0014', '\u0015', '\u009E', '\u001A', '\u0020', '\u00A0',
+ '\u00E2', '\u00E4', '\u00E0', '\u00E1', '\u00E3', '\u00E5',
+ '\u00E7', '\u00A6', '\u005B', '\u002E', '\u003C', '\u0028',
+ '\u002B', '\u007C', '\u0026', '\u00E9', '\u00EA', '\u00EB',
+ '\u00E8', '\u00ED', '\u00EE', '\u00EF', '\u00EC', '\u00DF',
+ '\u005D', '\u0024', '\u002A', '\u0029', '\u003B', '\u00AC',
+ '\u002D', '\u002F', '\u00C2', '\u00C4', '\u00C0', '\u00C1',
+ '\u00C3', '\u00C5', '\u00C7', '\u0023', '\u00F1', '\u002C',
+ '\u0025', '\u005F', '\u003E', '\u003F', '\u00F8', '\u00C9',
+ '\u00CA', '\u00CB', '\u00C8', '\u00CD', '\u00CE', '\u00CF',
+ '\u00CC', '\u0060', '\u003A', '\u00D1', '\u0040', '\u0027',
+ '\u003D', '\u0022', '\u00D8', '\u0061', '\u0062', '\u0063',
+ '\u0064', '\u0065', '\u0066', '\u0067', '\u0068', '\u0069',
+ '\u00AB', '\u00BB', '\u00F0', '\u00FD', '\u00FE', '\u00B1',
+ '\u00B0', '\u006A', '\u006B', '\u006C', '\u006D', '\u006E',
+ '\u006F', '\u0070', '\u0071', '\u0072', '\u00AA', '\u00BA',
+ '\u00E6', '\u00B8', '\u00C6', '\u00A4', '\u00B5', '\u00A8',
+ '\u0073', '\u0074', '\u0075', '\u0076', '\u0077', '\u0078',
+ '\u0079', '\u007A', '\u00A1', '\u00BF', '\u00D0', '\u00DD',
+ '\u00DE', '\u00AE', '\u00A2', '\u00A3', '\u00A5', '\u00B7',
+ '\u00A9', '\u00A7', '\u00B6', '\u00BC', '\u00BD', '\u00BE',
+ '\u005E', '\u0021', '\u00AF', '\u007E', '\u00B4', '\u00D7',
+ '\u007B', '\u0041', '\u0042', '\u0043', '\u0044', '\u0045',
+ '\u0046', '\u0047', '\u0048', '\u0049', '\u00AD', '\u00F4',
+ '\u00F6', '\u00F2', '\u00F3', '\u00F5', '\u007D', '\u004A',
+ '\u004B', '\u004C', '\u004D', '\u004E', '\u004F', '\u0050',
+ '\u0051', '\u0052', '\u00B9', '\u00FB', '\u00FC', '\u00F9',
+ '\u00FA', '\u00FF', '\u005C', '\u00F7', '\u0053', '\u0054',
+ '\u0055', '\u0056', '\u0057', '\u0058', '\u0059', '\u005A',
+ '\u00B2', '\u00D4', '\u00D6', '\u00D2', '\u00D3', '\u00D5',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u00B3', '\u00DB',
+ '\u00DC', '\u00D9', '\u00DA', '\u009F',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x00B6:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0xBB; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0x69; break;
+ case 0x0024: ch = 0x5B; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0x7C; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0x4A; break;
+ case 0x005C: ch = 0xE0; break;
+ case 0x005D: ch = 0x5A; break;
+ case 0x005E: ch = 0xBA; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0x79; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0xC0; break;
+ case 0x007C: ch = 0x4F; break;
+ case 0x007D: ch = 0xD0; break;
+ case 0x007E: ch = 0xBD; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A1: ch = 0xAA; break;
+ case 0x00A2: ch = 0xB0; break;
+ case 0x00A3: ch = 0xB1; break;
+ case 0x00A4: ch = 0x9F; break;
+ case 0x00A5: ch = 0xB2; break;
+ case 0x00A6: ch = 0x49; break;
+ case 0x00A7: ch = 0xB5; break;
+ case 0x00A8: ch = 0xA1; break;
+ case 0x00A9: ch = 0xB4; break;
+ case 0x00AA: ch = 0x9A; break;
+ case 0x00AB: ch = 0x8A; break;
+ case 0x00AC: ch = 0x5F; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00AE: ch = 0xAF; break;
+ case 0x00AF: ch = 0xBC; break;
+ case 0x00B0: ch = 0x90; break;
+ case 0x00B1: ch = 0x8F; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xBE; break;
+ case 0x00B5: ch = 0xA0; break;
+ case 0x00B7: ch = 0xB3; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00B9: ch = 0xDA; break;
+ case 0x00BA: ch = 0x9B; break;
+ case 0x00BB: ch = 0x8B; break;
+ case 0x00BC: ch = 0xB7; break;
+ case 0x00BD: ch = 0xB8; break;
+ case 0x00BE: ch = 0xB9; break;
+ case 0x00BF: ch = 0xAB; break;
+ case 0x00C0: ch = 0x64; break;
+ case 0x00C1: ch = 0x65; break;
+ case 0x00C2: ch = 0x62; break;
+ case 0x00C3: ch = 0x66; break;
+ case 0x00C4: ch = 0x63; break;
+ case 0x00C5: ch = 0x67; break;
+ case 0x00C6: ch = 0x9E; break;
+ case 0x00C7: ch = 0x68; break;
+ case 0x00C8: ch = 0x74; break;
+ case 0x00C9: ch = 0x71; break;
+ case 0x00CA: ch = 0x72; break;
+ case 0x00CB: ch = 0x73; break;
+ case 0x00CC: ch = 0x78; break;
+ case 0x00CD: ch = 0x75; break;
+ case 0x00CE: ch = 0x76; break;
+ case 0x00CF: ch = 0x77; break;
+ case 0x00D0: ch = 0xAC; break;
+ case 0x00D1: ch = 0x7B; break;
+ case 0x00D2: ch = 0xED; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEB; break;
+ case 0x00D5: ch = 0xEF; break;
+ case 0x00D6: ch = 0xEC; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00D8: ch = 0x80; break;
+ case 0x00D9: ch = 0xFD; break;
+ case 0x00DA: ch = 0xFE; break;
+ case 0x00DB: ch = 0xFB; break;
+ case 0x00DC: ch = 0xFC; break;
+ case 0x00DD: ch = 0xAD; break;
+ case 0x00DE: ch = 0xAE; break;
+ case 0x00DF: ch = 0x59; break;
+ case 0x00E0: ch = 0x44; break;
+ case 0x00E1: ch = 0x45; break;
+ case 0x00E2: ch = 0x42; break;
+ case 0x00E3: ch = 0x46; break;
+ case 0x00E4: ch = 0x43; break;
+ case 0x00E5: ch = 0x47; break;
+ case 0x00E6: ch = 0x9C; break;
+ case 0x00E7: ch = 0x48; break;
+ case 0x00E8: ch = 0x54; break;
+ case 0x00E9: ch = 0x51; break;
+ case 0x00EA: ch = 0x52; break;
+ case 0x00EB: ch = 0x53; break;
+ case 0x00EC: ch = 0x58; break;
+ case 0x00ED: ch = 0x55; break;
+ case 0x00EE: ch = 0x56; break;
+ case 0x00EF: ch = 0x57; break;
+ case 0x00F0: ch = 0x8C; break;
+ case 0x00F1: ch = 0x6A; break;
+ case 0x00F2: ch = 0xCD; break;
+ case 0x00F3: ch = 0xCE; break;
+ case 0x00F4: ch = 0xCB; break;
+ case 0x00F5: ch = 0xCF; break;
+ case 0x00F6: ch = 0xCC; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x00F8: ch = 0x70; break;
+ case 0x00F9: ch = 0xDD; break;
+ case 0x00FA: ch = 0xDE; break;
+ case 0x00FB: ch = 0xDB; break;
+ case 0x00FC: ch = 0xDC; break;
+ case 0x00FD: ch = 0x8D; break;
+ case 0x00FE: ch = 0x8E; break;
+ case 0x00FF: ch = 0xDF; break;
+ case 0x0110: ch = 0xAC; break;
+ case 0x203E: ch = 0xBC; break;
+ case 0xFF01: ch = 0xBB; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0x69; break;
+ case 0xFF04: ch = 0x5B; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0x7C; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0x4A; break;
+ case 0xFF3C: ch = 0xE0; break;
+ case 0xFF3D: ch = 0x5A; break;
+ case 0xFF3E: ch = 0xBA; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0x79; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0xC0; break;
+ case 0xFF5C: ch = 0x4F; break;
+ case 0xFF5D: ch = 0xD0; break;
+ case 0xFF5E: ch = 0xBD; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x00B6:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0xBB; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0x69; break;
+ case 0x0024: ch = 0x5B; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0x7C; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0x4A; break;
+ case 0x005C: ch = 0xE0; break;
+ case 0x005D: ch = 0x5A; break;
+ case 0x005E: ch = 0xBA; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0x79; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0xC0; break;
+ case 0x007C: ch = 0x4F; break;
+ case 0x007D: ch = 0xD0; break;
+ case 0x007E: ch = 0xBD; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A1: ch = 0xAA; break;
+ case 0x00A2: ch = 0xB0; break;
+ case 0x00A3: ch = 0xB1; break;
+ case 0x00A4: ch = 0x9F; break;
+ case 0x00A5: ch = 0xB2; break;
+ case 0x00A6: ch = 0x49; break;
+ case 0x00A7: ch = 0xB5; break;
+ case 0x00A8: ch = 0xA1; break;
+ case 0x00A9: ch = 0xB4; break;
+ case 0x00AA: ch = 0x9A; break;
+ case 0x00AB: ch = 0x8A; break;
+ case 0x00AC: ch = 0x5F; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00AE: ch = 0xAF; break;
+ case 0x00AF: ch = 0xBC; break;
+ case 0x00B0: ch = 0x90; break;
+ case 0x00B1: ch = 0x8F; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xBE; break;
+ case 0x00B5: ch = 0xA0; break;
+ case 0x00B7: ch = 0xB3; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00B9: ch = 0xDA; break;
+ case 0x00BA: ch = 0x9B; break;
+ case 0x00BB: ch = 0x8B; break;
+ case 0x00BC: ch = 0xB7; break;
+ case 0x00BD: ch = 0xB8; break;
+ case 0x00BE: ch = 0xB9; break;
+ case 0x00BF: ch = 0xAB; break;
+ case 0x00C0: ch = 0x64; break;
+ case 0x00C1: ch = 0x65; break;
+ case 0x00C2: ch = 0x62; break;
+ case 0x00C3: ch = 0x66; break;
+ case 0x00C4: ch = 0x63; break;
+ case 0x00C5: ch = 0x67; break;
+ case 0x00C6: ch = 0x9E; break;
+ case 0x00C7: ch = 0x68; break;
+ case 0x00C8: ch = 0x74; break;
+ case 0x00C9: ch = 0x71; break;
+ case 0x00CA: ch = 0x72; break;
+ case 0x00CB: ch = 0x73; break;
+ case 0x00CC: ch = 0x78; break;
+ case 0x00CD: ch = 0x75; break;
+ case 0x00CE: ch = 0x76; break;
+ case 0x00CF: ch = 0x77; break;
+ case 0x00D0: ch = 0xAC; break;
+ case 0x00D1: ch = 0x7B; break;
+ case 0x00D2: ch = 0xED; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEB; break;
+ case 0x00D5: ch = 0xEF; break;
+ case 0x00D6: ch = 0xEC; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00D8: ch = 0x80; break;
+ case 0x00D9: ch = 0xFD; break;
+ case 0x00DA: ch = 0xFE; break;
+ case 0x00DB: ch = 0xFB; break;
+ case 0x00DC: ch = 0xFC; break;
+ case 0x00DD: ch = 0xAD; break;
+ case 0x00DE: ch = 0xAE; break;
+ case 0x00DF: ch = 0x59; break;
+ case 0x00E0: ch = 0x44; break;
+ case 0x00E1: ch = 0x45; break;
+ case 0x00E2: ch = 0x42; break;
+ case 0x00E3: ch = 0x46; break;
+ case 0x00E4: ch = 0x43; break;
+ case 0x00E5: ch = 0x47; break;
+ case 0x00E6: ch = 0x9C; break;
+ case 0x00E7: ch = 0x48; break;
+ case 0x00E8: ch = 0x54; break;
+ case 0x00E9: ch = 0x51; break;
+ case 0x00EA: ch = 0x52; break;
+ case 0x00EB: ch = 0x53; break;
+ case 0x00EC: ch = 0x58; break;
+ case 0x00ED: ch = 0x55; break;
+ case 0x00EE: ch = 0x56; break;
+ case 0x00EF: ch = 0x57; break;
+ case 0x00F0: ch = 0x8C; break;
+ case 0x00F1: ch = 0x6A; break;
+ case 0x00F2: ch = 0xCD; break;
+ case 0x00F3: ch = 0xCE; break;
+ case 0x00F4: ch = 0xCB; break;
+ case 0x00F5: ch = 0xCF; break;
+ case 0x00F6: ch = 0xCC; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x00F8: ch = 0x70; break;
+ case 0x00F9: ch = 0xDD; break;
+ case 0x00FA: ch = 0xDE; break;
+ case 0x00FB: ch = 0xDB; break;
+ case 0x00FC: ch = 0xDC; break;
+ case 0x00FD: ch = 0x8D; break;
+ case 0x00FE: ch = 0x8E; break;
+ case 0x00FF: ch = 0xDF; break;
+ case 0x0110: ch = 0xAC; break;
+ case 0x203E: ch = 0xBC; break;
+ case 0xFF01: ch = 0xBB; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0x69; break;
+ case 0xFF04: ch = 0x5B; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0x7C; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0x4A; break;
+ case 0xFF3C: ch = 0xE0; break;
+ case 0xFF3D: ch = 0x5A; break;
+ case 0xFF3E: ch = 0xBA; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0x79; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0xC0; break;
+ case 0xFF5C: ch = 0x4F; break;
+ case 0xFF5D: ch = 0xD0; break;
+ case 0xFF5E: ch = 0xBD; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP20284
+
+public class ENCibm284 : CP20284
+{
+ public ENCibm284() : base() {}
+
+}; // class ENCibm284
+
+}; // namespace I18N.Rare
diff --git a/mcs/class/I18N/Rare/CP20285.cs b/mcs/class/I18N/Rare/CP20285.cs
new file mode 100644
index 00000000000..20efc688ffb
--- /dev/null
+++ b/mcs/class/I18N/Rare/CP20285.cs
@@ -0,0 +1,897 @@
+/*
+ * CP20285.cs - IBM EBCDIC (United Kingdom) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-285.ucm".
+
+namespace I18N.Rare
+{
+
+using System;
+using I18N.Common;
+
+public class CP20285 : ByteEncoding
+{
+ public CP20285()
+ : base(20285, ToChars, "IBM EBCDIC (United Kingdom)",
+ "IBM285", "IBM285", "IBM285",
+ false, false, false, false, 1252)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u009C', '\u0009',
+ '\u0086', '\u007F', '\u0097', '\u008D', '\u008E', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u009D', '\u0085', '\u0008', '\u0087',
+ '\u0018', '\u0019', '\u0092', '\u008F', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0080', '\u0081', '\u0082', '\u0083',
+ '\u0084', '\u000A', '\u0017', '\u001B', '\u0088', '\u0089',
+ '\u008A', '\u008B', '\u008C', '\u0005', '\u0006', '\u0007',
+ '\u0090', '\u0091', '\u0016', '\u0093', '\u0094', '\u0095',
+ '\u0096', '\u0004', '\u0098', '\u0099', '\u009A', '\u009B',
+ '\u0014', '\u0015', '\u009E', '\u001A', '\u0020', '\u00A0',
+ '\u00E2', '\u00E4', '\u00E0', '\u00E1', '\u00E3', '\u00E5',
+ '\u00E7', '\u00F1', '\u0024', '\u002E', '\u003C', '\u0028',
+ '\u002B', '\u007C', '\u0026', '\u00E9', '\u00EA', '\u00EB',
+ '\u00E8', '\u00ED', '\u00EE', '\u00EF', '\u00EC', '\u00DF',
+ '\u0021', '\u00A3', '\u002A', '\u0029', '\u003B', '\u00AC',
+ '\u002D', '\u002F', '\u00C2', '\u00C4', '\u00C0', '\u00C1',
+ '\u00C3', '\u00C5', '\u00C7', '\u00D1', '\u00A6', '\u002C',
+ '\u0025', '\u005F', '\u003E', '\u003F', '\u00F8', '\u00C9',
+ '\u00CA', '\u00CB', '\u00C8', '\u00CD', '\u00CE', '\u00CF',
+ '\u00CC', '\u0060', '\u003A', '\u0023', '\u0040', '\u0027',
+ '\u003D', '\u0022', '\u00D8', '\u0061', '\u0062', '\u0063',
+ '\u0064', '\u0065', '\u0066', '\u0067', '\u0068', '\u0069',
+ '\u00AB', '\u00BB', '\u00F0', '\u00FD', '\u00FE', '\u00B1',
+ '\u00B0', '\u006A', '\u006B', '\u006C', '\u006D', '\u006E',
+ '\u006F', '\u0070', '\u0071', '\u0072', '\u00AA', '\u00BA',
+ '\u00E6', '\u00B8', '\u00C6', '\u00A4', '\u00B5', '\u00AF',
+ '\u0073', '\u0074', '\u0075', '\u0076', '\u0077', '\u0078',
+ '\u0079', '\u007A', '\u00A1', '\u00BF', '\u00D0', '\u00DD',
+ '\u00DE', '\u00AE', '\u00A2', '\u005B', '\u00A5', '\u00B7',
+ '\u00A9', '\u00A7', '\u00B6', '\u00BC', '\u00BD', '\u00BE',
+ '\u005E', '\u005D', '\u007E', '\u00A8', '\u00B4', '\u00D7',
+ '\u007B', '\u0041', '\u0042', '\u0043', '\u0044', '\u0045',
+ '\u0046', '\u0047', '\u0048', '\u0049', '\u00AD', '\u00F4',
+ '\u00F6', '\u00F2', '\u00F3', '\u00F5', '\u007D', '\u004A',
+ '\u004B', '\u004C', '\u004D', '\u004E', '\u004F', '\u0050',
+ '\u0051', '\u0052', '\u00B9', '\u00FB', '\u00FC', '\u00F9',
+ '\u00FA', '\u00FF', '\u005C', '\u00F7', '\u0053', '\u0054',
+ '\u0055', '\u0056', '\u0057', '\u0058', '\u0059', '\u005A',
+ '\u00B2', '\u00D4', '\u00D6', '\u00D2', '\u00D3', '\u00D5',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u00B3', '\u00DB',
+ '\u00DC', '\u00D9', '\u00DA', '\u009F',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x00B6:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x5A; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0x7B; break;
+ case 0x0024: ch = 0x4A; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0x7C; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0xB1; break;
+ case 0x005C: ch = 0xE0; break;
+ case 0x005D: ch = 0xBB; break;
+ case 0x005E: ch = 0xBA; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0x79; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0xC0; break;
+ case 0x007C: ch = 0x4F; break;
+ case 0x007D: ch = 0xD0; break;
+ case 0x007E: ch = 0xBC; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A1: ch = 0xAA; break;
+ case 0x00A2: ch = 0xB0; break;
+ case 0x00A3: ch = 0x5B; break;
+ case 0x00A4: ch = 0x9F; break;
+ case 0x00A5: ch = 0xB2; break;
+ case 0x00A6: ch = 0x6A; break;
+ case 0x00A7: ch = 0xB5; break;
+ case 0x00A8: ch = 0xBD; break;
+ case 0x00A9: ch = 0xB4; break;
+ case 0x00AA: ch = 0x9A; break;
+ case 0x00AB: ch = 0x8A; break;
+ case 0x00AC: ch = 0x5F; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00AE: ch = 0xAF; break;
+ case 0x00AF: ch = 0xA1; break;
+ case 0x00B0: ch = 0x90; break;
+ case 0x00B1: ch = 0x8F; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xBE; break;
+ case 0x00B5: ch = 0xA0; break;
+ case 0x00B7: ch = 0xB3; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00B9: ch = 0xDA; break;
+ case 0x00BA: ch = 0x9B; break;
+ case 0x00BB: ch = 0x8B; break;
+ case 0x00BC: ch = 0xB7; break;
+ case 0x00BD: ch = 0xB8; break;
+ case 0x00BE: ch = 0xB9; break;
+ case 0x00BF: ch = 0xAB; break;
+ case 0x00C0: ch = 0x64; break;
+ case 0x00C1: ch = 0x65; break;
+ case 0x00C2: ch = 0x62; break;
+ case 0x00C3: ch = 0x66; break;
+ case 0x00C4: ch = 0x63; break;
+ case 0x00C5: ch = 0x67; break;
+ case 0x00C6: ch = 0x9E; break;
+ case 0x00C7: ch = 0x68; break;
+ case 0x00C8: ch = 0x74; break;
+ case 0x00C9: ch = 0x71; break;
+ case 0x00CA: ch = 0x72; break;
+ case 0x00CB: ch = 0x73; break;
+ case 0x00CC: ch = 0x78; break;
+ case 0x00CD: ch = 0x75; break;
+ case 0x00CE: ch = 0x76; break;
+ case 0x00CF: ch = 0x77; break;
+ case 0x00D0: ch = 0xAC; break;
+ case 0x00D1: ch = 0x69; break;
+ case 0x00D2: ch = 0xED; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEB; break;
+ case 0x00D5: ch = 0xEF; break;
+ case 0x00D6: ch = 0xEC; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00D8: ch = 0x80; break;
+ case 0x00D9: ch = 0xFD; break;
+ case 0x00DA: ch = 0xFE; break;
+ case 0x00DB: ch = 0xFB; break;
+ case 0x00DC: ch = 0xFC; break;
+ case 0x00DD: ch = 0xAD; break;
+ case 0x00DE: ch = 0xAE; break;
+ case 0x00DF: ch = 0x59; break;
+ case 0x00E0: ch = 0x44; break;
+ case 0x00E1: ch = 0x45; break;
+ case 0x00E2: ch = 0x42; break;
+ case 0x00E3: ch = 0x46; break;
+ case 0x00E4: ch = 0x43; break;
+ case 0x00E5: ch = 0x47; break;
+ case 0x00E6: ch = 0x9C; break;
+ case 0x00E7: ch = 0x48; break;
+ case 0x00E8: ch = 0x54; break;
+ case 0x00E9: ch = 0x51; break;
+ case 0x00EA: ch = 0x52; break;
+ case 0x00EB: ch = 0x53; break;
+ case 0x00EC: ch = 0x58; break;
+ case 0x00ED: ch = 0x55; break;
+ case 0x00EE: ch = 0x56; break;
+ case 0x00EF: ch = 0x57; break;
+ case 0x00F0: ch = 0x8C; break;
+ case 0x00F1: ch = 0x49; break;
+ case 0x00F2: ch = 0xCD; break;
+ case 0x00F3: ch = 0xCE; break;
+ case 0x00F4: ch = 0xCB; break;
+ case 0x00F5: ch = 0xCF; break;
+ case 0x00F6: ch = 0xCC; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x00F8: ch = 0x70; break;
+ case 0x00F9: ch = 0xDD; break;
+ case 0x00FA: ch = 0xDE; break;
+ case 0x00FB: ch = 0xDB; break;
+ case 0x00FC: ch = 0xDC; break;
+ case 0x00FD: ch = 0x8D; break;
+ case 0x00FE: ch = 0x8E; break;
+ case 0x00FF: ch = 0xDF; break;
+ case 0x0110: ch = 0xAC; break;
+ case 0x203E: ch = 0xA1; break;
+ case 0xFF01: ch = 0x5A; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0x7B; break;
+ case 0xFF04: ch = 0x4A; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0x7C; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0xB1; break;
+ case 0xFF3C: ch = 0xE0; break;
+ case 0xFF3D: ch = 0xBB; break;
+ case 0xFF3E: ch = 0xBA; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0x79; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0xC0; break;
+ case 0xFF5C: ch = 0x4F; break;
+ case 0xFF5D: ch = 0xD0; break;
+ case 0xFF5E: ch = 0xBC; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x00B6:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x5A; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0x7B; break;
+ case 0x0024: ch = 0x4A; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0x7C; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0xB1; break;
+ case 0x005C: ch = 0xE0; break;
+ case 0x005D: ch = 0xBB; break;
+ case 0x005E: ch = 0xBA; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0x79; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0xC0; break;
+ case 0x007C: ch = 0x4F; break;
+ case 0x007D: ch = 0xD0; break;
+ case 0x007E: ch = 0xBC; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A1: ch = 0xAA; break;
+ case 0x00A2: ch = 0xB0; break;
+ case 0x00A3: ch = 0x5B; break;
+ case 0x00A4: ch = 0x9F; break;
+ case 0x00A5: ch = 0xB2; break;
+ case 0x00A6: ch = 0x6A; break;
+ case 0x00A7: ch = 0xB5; break;
+ case 0x00A8: ch = 0xBD; break;
+ case 0x00A9: ch = 0xB4; break;
+ case 0x00AA: ch = 0x9A; break;
+ case 0x00AB: ch = 0x8A; break;
+ case 0x00AC: ch = 0x5F; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00AE: ch = 0xAF; break;
+ case 0x00AF: ch = 0xA1; break;
+ case 0x00B0: ch = 0x90; break;
+ case 0x00B1: ch = 0x8F; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xBE; break;
+ case 0x00B5: ch = 0xA0; break;
+ case 0x00B7: ch = 0xB3; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00B9: ch = 0xDA; break;
+ case 0x00BA: ch = 0x9B; break;
+ case 0x00BB: ch = 0x8B; break;
+ case 0x00BC: ch = 0xB7; break;
+ case 0x00BD: ch = 0xB8; break;
+ case 0x00BE: ch = 0xB9; break;
+ case 0x00BF: ch = 0xAB; break;
+ case 0x00C0: ch = 0x64; break;
+ case 0x00C1: ch = 0x65; break;
+ case 0x00C2: ch = 0x62; break;
+ case 0x00C3: ch = 0x66; break;
+ case 0x00C4: ch = 0x63; break;
+ case 0x00C5: ch = 0x67; break;
+ case 0x00C6: ch = 0x9E; break;
+ case 0x00C7: ch = 0x68; break;
+ case 0x00C8: ch = 0x74; break;
+ case 0x00C9: ch = 0x71; break;
+ case 0x00CA: ch = 0x72; break;
+ case 0x00CB: ch = 0x73; break;
+ case 0x00CC: ch = 0x78; break;
+ case 0x00CD: ch = 0x75; break;
+ case 0x00CE: ch = 0x76; break;
+ case 0x00CF: ch = 0x77; break;
+ case 0x00D0: ch = 0xAC; break;
+ case 0x00D1: ch = 0x69; break;
+ case 0x00D2: ch = 0xED; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEB; break;
+ case 0x00D5: ch = 0xEF; break;
+ case 0x00D6: ch = 0xEC; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00D8: ch = 0x80; break;
+ case 0x00D9: ch = 0xFD; break;
+ case 0x00DA: ch = 0xFE; break;
+ case 0x00DB: ch = 0xFB; break;
+ case 0x00DC: ch = 0xFC; break;
+ case 0x00DD: ch = 0xAD; break;
+ case 0x00DE: ch = 0xAE; break;
+ case 0x00DF: ch = 0x59; break;
+ case 0x00E0: ch = 0x44; break;
+ case 0x00E1: ch = 0x45; break;
+ case 0x00E2: ch = 0x42; break;
+ case 0x00E3: ch = 0x46; break;
+ case 0x00E4: ch = 0x43; break;
+ case 0x00E5: ch = 0x47; break;
+ case 0x00E6: ch = 0x9C; break;
+ case 0x00E7: ch = 0x48; break;
+ case 0x00E8: ch = 0x54; break;
+ case 0x00E9: ch = 0x51; break;
+ case 0x00EA: ch = 0x52; break;
+ case 0x00EB: ch = 0x53; break;
+ case 0x00EC: ch = 0x58; break;
+ case 0x00ED: ch = 0x55; break;
+ case 0x00EE: ch = 0x56; break;
+ case 0x00EF: ch = 0x57; break;
+ case 0x00F0: ch = 0x8C; break;
+ case 0x00F1: ch = 0x49; break;
+ case 0x00F2: ch = 0xCD; break;
+ case 0x00F3: ch = 0xCE; break;
+ case 0x00F4: ch = 0xCB; break;
+ case 0x00F5: ch = 0xCF; break;
+ case 0x00F6: ch = 0xCC; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x00F8: ch = 0x70; break;
+ case 0x00F9: ch = 0xDD; break;
+ case 0x00FA: ch = 0xDE; break;
+ case 0x00FB: ch = 0xDB; break;
+ case 0x00FC: ch = 0xDC; break;
+ case 0x00FD: ch = 0x8D; break;
+ case 0x00FE: ch = 0x8E; break;
+ case 0x00FF: ch = 0xDF; break;
+ case 0x0110: ch = 0xAC; break;
+ case 0x203E: ch = 0xA1; break;
+ case 0xFF01: ch = 0x5A; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0x7B; break;
+ case 0xFF04: ch = 0x4A; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0x7C; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0xB1; break;
+ case 0xFF3C: ch = 0xE0; break;
+ case 0xFF3D: ch = 0xBB; break;
+ case 0xFF3E: ch = 0xBA; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0x79; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0xC0; break;
+ case 0xFF5C: ch = 0x4F; break;
+ case 0xFF5D: ch = 0xD0; break;
+ case 0xFF5E: ch = 0xBC; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP20285
+
+public class ENCibm285 : CP20285
+{
+ public ENCibm285() : base() {}
+
+}; // class ENCibm285
+
+}; // namespace I18N.Rare
diff --git a/mcs/class/I18N/Rare/CP20290.cs b/mcs/class/I18N/Rare/CP20290.cs
new file mode 100644
index 00000000000..4df3d74ce2b
--- /dev/null
+++ b/mcs/class/I18N/Rare/CP20290.cs
@@ -0,0 +1,865 @@
+/*
+ * CP20290.cs - IBM EBCDIC (Japanese Katakana Extended) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-290.ucm".
+
+namespace I18N.Rare
+{
+
+using System;
+using I18N.Common;
+
+public class CP20290 : ByteEncoding
+{
+ public CP20290()
+ : base(20290, ToChars, "IBM EBCDIC (Japanese Katakana Extended)",
+ "IBM290", "IBM290", "IBM290",
+ false, false, false, false, 932)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u009C', '\u0009',
+ '\u0086', '\u007F', '\u0097', '\u008D', '\u008E', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u009D', '\u0085', '\u0008', '\u0087',
+ '\u0018', '\u0019', '\u0092', '\u008F', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0080', '\u0081', '\u0082', '\u0083',
+ '\u0084', '\u000A', '\u0017', '\u001B', '\u0088', '\u0089',
+ '\u008A', '\u008B', '\u008C', '\u0005', '\u0006', '\u0007',
+ '\u0090', '\u0091', '\u0016', '\u0093', '\u0094', '\u0095',
+ '\u0096', '\u0004', '\u0098', '\u0099', '\u009A', '\u009B',
+ '\u0014', '\u0015', '\u009E', '\u001A', '\u0020', '\uFF61',
+ '\uFF62', '\uFF63', '\uFF64', '\uFF65', '\uFF66', '\uFF67',
+ '\uFF68', '\uFF69', '\u00A3', '\u002E', '\u003C', '\u0028',
+ '\u002B', '\u007C', '\u0026', '\uFF6A', '\uFF6B', '\uFF6C',
+ '\uFF6D', '\uFF6E', '\uFF6F', '\u003F', '\uFF70', '\u003F',
+ '\u0021', '\u00A5', '\u002A', '\u0029', '\u003B', '\u00AC',
+ '\u002D', '\u002F', '\u0061', '\u0062', '\u0063', '\u0064',
+ '\u0065', '\u0066', '\u0067', '\u0068', '\u003F', '\u002C',
+ '\u0025', '\u005F', '\u003E', '\u003F', '\u005B', '\u0069',
+ '\u006A', '\u006B', '\u006C', '\u006D', '\u006E', '\u006F',
+ '\u0070', '\u0060', '\u003A', '\u0023', '\u0040', '\u0027',
+ '\u003D', '\u0022', '\u005D', '\uFF71', '\uFF72', '\uFF73',
+ '\uFF74', '\uFF75', '\uFF76', '\uFF77', '\uFF78', '\uFF79',
+ '\uFF7A', '\u0071', '\uFF7B', '\uFF7C', '\uFF7D', '\uFF7E',
+ '\uFF7F', '\uFF80', '\uFF81', '\uFF82', '\uFF83', '\uFF84',
+ '\uFF85', '\uFF86', '\uFF87', '\uFF88', '\uFF89', '\u0072',
+ '\u003F', '\uFF8A', '\uFF8B', '\uFF8C', '\u007E', '\u203E',
+ '\uFF8D', '\uFF8E', '\uFF8F', '\uFF90', '\uFF91', '\uFF92',
+ '\uFF93', '\uFF94', '\uFF95', '\u0073', '\uFF96', '\uFF97',
+ '\uFF98', '\uFF99', '\u005E', '\u00A2', '\u005C', '\u0074',
+ '\u0075', '\u0076', '\u0077', '\u0078', '\u0079', '\u007A',
+ '\uFF9A', '\uFF9B', '\uFF9C', '\uFF9D', '\uFF9E', '\uFF9F',
+ '\u007B', '\u0041', '\u0042', '\u0043', '\u0044', '\u0045',
+ '\u0046', '\u0047', '\u0048', '\u0049', '\u003F', '\u003F',
+ '\u003F', '\u003F', '\u003F', '\u003F', '\u007D', '\u004A',
+ '\u004B', '\u004C', '\u004D', '\u004E', '\u004F', '\u0050',
+ '\u0051', '\u0052', '\u003F', '\u003F', '\u003F', '\u003F',
+ '\u003F', '\u003F', '\u0024', '\u003F', '\u0053', '\u0054',
+ '\u0055', '\u0056', '\u0057', '\u0058', '\u0059', '\u005A',
+ '\u003F', '\u003F', '\u003F', '\u003F', '\u003F', '\u003F',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u003F', '\u003F',
+ '\u003F', '\u003F', '\u003F', '\u009F',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x5A; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0x7B; break;
+ case 0x0024: ch = 0xE0; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0x7C; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0x70; break;
+ case 0x005C: ch = 0xB2; break;
+ case 0x005D: ch = 0x80; break;
+ case 0x005E: ch = 0xB0; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0x79; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ ch += 0x0001;
+ break;
+ case 0x0069:
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ ch += 0x0008;
+ break;
+ case 0x0071: ch = 0x8B; break;
+ case 0x0072: ch = 0x9B; break;
+ case 0x0073: ch = 0xAB; break;
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x003F;
+ break;
+ case 0x007B: ch = 0xC0; break;
+ case 0x007C: ch = 0x4F; break;
+ case 0x007D: ch = 0xD0; break;
+ case 0x007E: ch = 0xA0; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A2: ch = 0xB1; break;
+ case 0x00A3: ch = 0x4A; break;
+ case 0x00A5: ch = 0x5B; break;
+ case 0x00AC: ch = 0x5F; break;
+ case 0x203E: ch = 0xA1; break;
+ case 0xFF01: ch = 0x5A; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0x7B; break;
+ case 0xFF04: ch = 0xE0; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0x7C; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0x70; break;
+ case 0xFF3C: ch = 0xB2; break;
+ case 0xFF3D: ch = 0x80; break;
+ case 0xFF3E: ch = 0xB0; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0x79; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ ch -= 0xFEDF;
+ break;
+ case 0xFF49:
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ ch -= 0xFED8;
+ break;
+ case 0xFF51: ch = 0x8B; break;
+ case 0xFF52: ch = 0x9B; break;
+ case 0xFF53: ch = 0xAB; break;
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEA1;
+ break;
+ case 0xFF5B: ch = 0xC0; break;
+ case 0xFF5C: ch = 0x4F; break;
+ case 0xFF5D: ch = 0xD0; break;
+ case 0xFF5E: ch = 0xA0; break;
+ case 0xFF61:
+ case 0xFF62:
+ case 0xFF63:
+ case 0xFF64:
+ case 0xFF65:
+ case 0xFF66:
+ case 0xFF67:
+ case 0xFF68:
+ case 0xFF69:
+ ch -= 0xFF20;
+ break;
+ case 0xFF6A:
+ case 0xFF6B:
+ case 0xFF6C:
+ case 0xFF6D:
+ case 0xFF6E:
+ case 0xFF6F:
+ ch -= 0xFF19;
+ break;
+ case 0xFF70: ch = 0x58; break;
+ case 0xFF71:
+ case 0xFF72:
+ case 0xFF73:
+ case 0xFF74:
+ case 0xFF75:
+ case 0xFF76:
+ case 0xFF77:
+ case 0xFF78:
+ case 0xFF79:
+ case 0xFF7A:
+ ch -= 0xFEF0;
+ break;
+ case 0xFF7B:
+ case 0xFF7C:
+ case 0xFF7D:
+ case 0xFF7E:
+ case 0xFF7F:
+ case 0xFF80:
+ case 0xFF81:
+ case 0xFF82:
+ case 0xFF83:
+ case 0xFF84:
+ case 0xFF85:
+ case 0xFF86:
+ case 0xFF87:
+ case 0xFF88:
+ case 0xFF89:
+ ch -= 0xFEEF;
+ break;
+ case 0xFF8A: ch = 0x9D; break;
+ case 0xFF8B: ch = 0x9E; break;
+ case 0xFF8C: ch = 0x9F; break;
+ case 0xFF8D:
+ case 0xFF8E:
+ case 0xFF8F:
+ case 0xFF90:
+ case 0xFF91:
+ case 0xFF92:
+ case 0xFF93:
+ case 0xFF94:
+ case 0xFF95:
+ ch -= 0xFEEB;
+ break;
+ case 0xFF96:
+ case 0xFF97:
+ case 0xFF98:
+ case 0xFF99:
+ ch -= 0xFEEA;
+ break;
+ case 0xFF9A:
+ case 0xFF9B:
+ case 0xFF9C:
+ case 0xFF9D:
+ case 0xFF9E:
+ case 0xFF9F:
+ ch -= 0xFEE0;
+ break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x5A; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0x7B; break;
+ case 0x0024: ch = 0xE0; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0x7C; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0x70; break;
+ case 0x005C: ch = 0xB2; break;
+ case 0x005D: ch = 0x80; break;
+ case 0x005E: ch = 0xB0; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0x79; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ ch += 0x0001;
+ break;
+ case 0x0069:
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ ch += 0x0008;
+ break;
+ case 0x0071: ch = 0x8B; break;
+ case 0x0072: ch = 0x9B; break;
+ case 0x0073: ch = 0xAB; break;
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x003F;
+ break;
+ case 0x007B: ch = 0xC0; break;
+ case 0x007C: ch = 0x4F; break;
+ case 0x007D: ch = 0xD0; break;
+ case 0x007E: ch = 0xA0; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A2: ch = 0xB1; break;
+ case 0x00A3: ch = 0x4A; break;
+ case 0x00A5: ch = 0x5B; break;
+ case 0x00AC: ch = 0x5F; break;
+ case 0x203E: ch = 0xA1; break;
+ case 0xFF01: ch = 0x5A; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0x7B; break;
+ case 0xFF04: ch = 0xE0; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0x7C; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0x70; break;
+ case 0xFF3C: ch = 0xB2; break;
+ case 0xFF3D: ch = 0x80; break;
+ case 0xFF3E: ch = 0xB0; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0x79; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ ch -= 0xFEDF;
+ break;
+ case 0xFF49:
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ ch -= 0xFED8;
+ break;
+ case 0xFF51: ch = 0x8B; break;
+ case 0xFF52: ch = 0x9B; break;
+ case 0xFF53: ch = 0xAB; break;
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEA1;
+ break;
+ case 0xFF5B: ch = 0xC0; break;
+ case 0xFF5C: ch = 0x4F; break;
+ case 0xFF5D: ch = 0xD0; break;
+ case 0xFF5E: ch = 0xA0; break;
+ case 0xFF61:
+ case 0xFF62:
+ case 0xFF63:
+ case 0xFF64:
+ case 0xFF65:
+ case 0xFF66:
+ case 0xFF67:
+ case 0xFF68:
+ case 0xFF69:
+ ch -= 0xFF20;
+ break;
+ case 0xFF6A:
+ case 0xFF6B:
+ case 0xFF6C:
+ case 0xFF6D:
+ case 0xFF6E:
+ case 0xFF6F:
+ ch -= 0xFF19;
+ break;
+ case 0xFF70: ch = 0x58; break;
+ case 0xFF71:
+ case 0xFF72:
+ case 0xFF73:
+ case 0xFF74:
+ case 0xFF75:
+ case 0xFF76:
+ case 0xFF77:
+ case 0xFF78:
+ case 0xFF79:
+ case 0xFF7A:
+ ch -= 0xFEF0;
+ break;
+ case 0xFF7B:
+ case 0xFF7C:
+ case 0xFF7D:
+ case 0xFF7E:
+ case 0xFF7F:
+ case 0xFF80:
+ case 0xFF81:
+ case 0xFF82:
+ case 0xFF83:
+ case 0xFF84:
+ case 0xFF85:
+ case 0xFF86:
+ case 0xFF87:
+ case 0xFF88:
+ case 0xFF89:
+ ch -= 0xFEEF;
+ break;
+ case 0xFF8A: ch = 0x9D; break;
+ case 0xFF8B: ch = 0x9E; break;
+ case 0xFF8C: ch = 0x9F; break;
+ case 0xFF8D:
+ case 0xFF8E:
+ case 0xFF8F:
+ case 0xFF90:
+ case 0xFF91:
+ case 0xFF92:
+ case 0xFF93:
+ case 0xFF94:
+ case 0xFF95:
+ ch -= 0xFEEB;
+ break;
+ case 0xFF96:
+ case 0xFF97:
+ case 0xFF98:
+ case 0xFF99:
+ ch -= 0xFEEA;
+ break;
+ case 0xFF9A:
+ case 0xFF9B:
+ case 0xFF9C:
+ case 0xFF9D:
+ case 0xFF9E:
+ case 0xFF9F:
+ ch -= 0xFEE0;
+ break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP20290
+
+public class ENCibm290 : CP20290
+{
+ public ENCibm290() : base() {}
+
+}; // class ENCibm290
+
+}; // namespace I18N.Rare
diff --git a/mcs/class/I18N/Rare/CP20297.cs b/mcs/class/I18N/Rare/CP20297.cs
new file mode 100644
index 00000000000..439aeefbd4a
--- /dev/null
+++ b/mcs/class/I18N/Rare/CP20297.cs
@@ -0,0 +1,897 @@
+/*
+ * CP20297.cs - IBM EBCDIC (France) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-297.ucm".
+
+namespace I18N.Rare
+{
+
+using System;
+using I18N.Common;
+
+public class CP20297 : ByteEncoding
+{
+ public CP20297()
+ : base(20297, ToChars, "IBM EBCDIC (France)",
+ "IBM297", "IBM297", "IBM297",
+ false, false, false, false, 1252)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u009C', '\u0009',
+ '\u0086', '\u007F', '\u0097', '\u008D', '\u008E', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u009D', '\u0085', '\u0008', '\u0087',
+ '\u0018', '\u0019', '\u0092', '\u008F', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0080', '\u0081', '\u0082', '\u0083',
+ '\u0084', '\u000A', '\u0017', '\u001B', '\u0088', '\u0089',
+ '\u008A', '\u008B', '\u008C', '\u0005', '\u0006', '\u0007',
+ '\u0090', '\u0091', '\u0016', '\u0093', '\u0094', '\u0095',
+ '\u0096', '\u0004', '\u0098', '\u0099', '\u009A', '\u009B',
+ '\u0014', '\u0015', '\u009E', '\u001A', '\u0020', '\u00A0',
+ '\u00E2', '\u00E4', '\u0040', '\u00E1', '\u00E3', '\u00E5',
+ '\u005C', '\u00F1', '\u00B0', '\u002E', '\u003C', '\u0028',
+ '\u002B', '\u0021', '\u0026', '\u007B', '\u00EA', '\u00EB',
+ '\u007D', '\u00ED', '\u00EE', '\u00EF', '\u00EC', '\u00DF',
+ '\u00A7', '\u0024', '\u002A', '\u0029', '\u003B', '\u005E',
+ '\u002D', '\u002F', '\u00C2', '\u00C4', '\u00C0', '\u00C1',
+ '\u00C3', '\u00C5', '\u00C7', '\u00D1', '\u00F9', '\u002C',
+ '\u0025', '\u005F', '\u003E', '\u003F', '\u00F8', '\u00C9',
+ '\u00CA', '\u00CB', '\u00C8', '\u00CD', '\u00CE', '\u00CF',
+ '\u00CC', '\u00B5', '\u003A', '\u00A3', '\u00E0', '\u0027',
+ '\u003D', '\u0022', '\u00D8', '\u0061', '\u0062', '\u0063',
+ '\u0064', '\u0065', '\u0066', '\u0067', '\u0068', '\u0069',
+ '\u00AB', '\u00BB', '\u00F0', '\u00FD', '\u00FE', '\u00B1',
+ '\u005B', '\u006A', '\u006B', '\u006C', '\u006D', '\u006E',
+ '\u006F', '\u0070', '\u0071', '\u0072', '\u00AA', '\u00BA',
+ '\u00E6', '\u00B8', '\u00C6', '\u00A4', '\u0060', '\u00A8',
+ '\u0073', '\u0074', '\u0075', '\u0076', '\u0077', '\u0078',
+ '\u0079', '\u007A', '\u00A1', '\u00BF', '\u00D0', '\u00DD',
+ '\u00DE', '\u00AE', '\u00A2', '\u0023', '\u00A5', '\u00B7',
+ '\u00A9', '\u005D', '\u00B6', '\u00BC', '\u00BD', '\u00BE',
+ '\u00AC', '\u007C', '\u00AF', '\u007E', '\u00B4', '\u00D7',
+ '\u00E9', '\u0041', '\u0042', '\u0043', '\u0044', '\u0045',
+ '\u0046', '\u0047', '\u0048', '\u0049', '\u00AD', '\u00F4',
+ '\u00F6', '\u00F2', '\u00F3', '\u00F5', '\u00E8', '\u004A',
+ '\u004B', '\u004C', '\u004D', '\u004E', '\u004F', '\u0050',
+ '\u0051', '\u0052', '\u00B9', '\u00FB', '\u00FC', '\u00A6',
+ '\u00FA', '\u00FF', '\u00E7', '\u00F7', '\u0053', '\u0054',
+ '\u0055', '\u0056', '\u0057', '\u0058', '\u0059', '\u005A',
+ '\u00B2', '\u00D4', '\u00D6', '\u00D2', '\u00D3', '\u00D5',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u00B3', '\u00DB',
+ '\u00DC', '\u00D9', '\u00DA', '\u009F',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x00B6:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x4F; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0xB1; break;
+ case 0x0024: ch = 0x5B; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0x44; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0x90; break;
+ case 0x005C: ch = 0x48; break;
+ case 0x005D: ch = 0xB5; break;
+ case 0x005E: ch = 0x5F; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0xA0; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0x51; break;
+ case 0x007C: ch = 0xBB; break;
+ case 0x007D: ch = 0x54; break;
+ case 0x007E: ch = 0xBD; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A1: ch = 0xAA; break;
+ case 0x00A2: ch = 0xB0; break;
+ case 0x00A3: ch = 0x7B; break;
+ case 0x00A4: ch = 0x9F; break;
+ case 0x00A5: ch = 0xB2; break;
+ case 0x00A6: ch = 0xDD; break;
+ case 0x00A7: ch = 0x5A; break;
+ case 0x00A8: ch = 0xA1; break;
+ case 0x00A9: ch = 0xB4; break;
+ case 0x00AA: ch = 0x9A; break;
+ case 0x00AB: ch = 0x8A; break;
+ case 0x00AC: ch = 0xBA; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00AE: ch = 0xAF; break;
+ case 0x00AF: ch = 0xBC; break;
+ case 0x00B0: ch = 0x4A; break;
+ case 0x00B1: ch = 0x8F; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xBE; break;
+ case 0x00B5: ch = 0x79; break;
+ case 0x00B7: ch = 0xB3; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00B9: ch = 0xDA; break;
+ case 0x00BA: ch = 0x9B; break;
+ case 0x00BB: ch = 0x8B; break;
+ case 0x00BC: ch = 0xB7; break;
+ case 0x00BD: ch = 0xB8; break;
+ case 0x00BE: ch = 0xB9; break;
+ case 0x00BF: ch = 0xAB; break;
+ case 0x00C0: ch = 0x64; break;
+ case 0x00C1: ch = 0x65; break;
+ case 0x00C2: ch = 0x62; break;
+ case 0x00C3: ch = 0x66; break;
+ case 0x00C4: ch = 0x63; break;
+ case 0x00C5: ch = 0x67; break;
+ case 0x00C6: ch = 0x9E; break;
+ case 0x00C7: ch = 0x68; break;
+ case 0x00C8: ch = 0x74; break;
+ case 0x00C9: ch = 0x71; break;
+ case 0x00CA: ch = 0x72; break;
+ case 0x00CB: ch = 0x73; break;
+ case 0x00CC: ch = 0x78; break;
+ case 0x00CD: ch = 0x75; break;
+ case 0x00CE: ch = 0x76; break;
+ case 0x00CF: ch = 0x77; break;
+ case 0x00D0: ch = 0xAC; break;
+ case 0x00D1: ch = 0x69; break;
+ case 0x00D2: ch = 0xED; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEB; break;
+ case 0x00D5: ch = 0xEF; break;
+ case 0x00D6: ch = 0xEC; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00D8: ch = 0x80; break;
+ case 0x00D9: ch = 0xFD; break;
+ case 0x00DA: ch = 0xFE; break;
+ case 0x00DB: ch = 0xFB; break;
+ case 0x00DC: ch = 0xFC; break;
+ case 0x00DD: ch = 0xAD; break;
+ case 0x00DE: ch = 0xAE; break;
+ case 0x00DF: ch = 0x59; break;
+ case 0x00E0: ch = 0x7C; break;
+ case 0x00E1: ch = 0x45; break;
+ case 0x00E2: ch = 0x42; break;
+ case 0x00E3: ch = 0x46; break;
+ case 0x00E4: ch = 0x43; break;
+ case 0x00E5: ch = 0x47; break;
+ case 0x00E6: ch = 0x9C; break;
+ case 0x00E7: ch = 0xE0; break;
+ case 0x00E8: ch = 0xD0; break;
+ case 0x00E9: ch = 0xC0; break;
+ case 0x00EA: ch = 0x52; break;
+ case 0x00EB: ch = 0x53; break;
+ case 0x00EC: ch = 0x58; break;
+ case 0x00ED: ch = 0x55; break;
+ case 0x00EE: ch = 0x56; break;
+ case 0x00EF: ch = 0x57; break;
+ case 0x00F0: ch = 0x8C; break;
+ case 0x00F1: ch = 0x49; break;
+ case 0x00F2: ch = 0xCD; break;
+ case 0x00F3: ch = 0xCE; break;
+ case 0x00F4: ch = 0xCB; break;
+ case 0x00F5: ch = 0xCF; break;
+ case 0x00F6: ch = 0xCC; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x00F8: ch = 0x70; break;
+ case 0x00F9: ch = 0x6A; break;
+ case 0x00FA: ch = 0xDE; break;
+ case 0x00FB: ch = 0xDB; break;
+ case 0x00FC: ch = 0xDC; break;
+ case 0x00FD: ch = 0x8D; break;
+ case 0x00FE: ch = 0x8E; break;
+ case 0x00FF: ch = 0xDF; break;
+ case 0x0110: ch = 0xAC; break;
+ case 0x203E: ch = 0xBC; break;
+ case 0xFF01: ch = 0x4F; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0xB1; break;
+ case 0xFF04: ch = 0x5B; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0x44; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0x90; break;
+ case 0xFF3C: ch = 0x48; break;
+ case 0xFF3D: ch = 0xB5; break;
+ case 0xFF3E: ch = 0x5F; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0xA0; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0x51; break;
+ case 0xFF5C: ch = 0xBB; break;
+ case 0xFF5D: ch = 0x54; break;
+ case 0xFF5E: ch = 0xBD; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x00B6:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x4F; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0xB1; break;
+ case 0x0024: ch = 0x5B; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0x44; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0x90; break;
+ case 0x005C: ch = 0x48; break;
+ case 0x005D: ch = 0xB5; break;
+ case 0x005E: ch = 0x5F; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0xA0; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0x51; break;
+ case 0x007C: ch = 0xBB; break;
+ case 0x007D: ch = 0x54; break;
+ case 0x007E: ch = 0xBD; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A1: ch = 0xAA; break;
+ case 0x00A2: ch = 0xB0; break;
+ case 0x00A3: ch = 0x7B; break;
+ case 0x00A4: ch = 0x9F; break;
+ case 0x00A5: ch = 0xB2; break;
+ case 0x00A6: ch = 0xDD; break;
+ case 0x00A7: ch = 0x5A; break;
+ case 0x00A8: ch = 0xA1; break;
+ case 0x00A9: ch = 0xB4; break;
+ case 0x00AA: ch = 0x9A; break;
+ case 0x00AB: ch = 0x8A; break;
+ case 0x00AC: ch = 0xBA; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00AE: ch = 0xAF; break;
+ case 0x00AF: ch = 0xBC; break;
+ case 0x00B0: ch = 0x4A; break;
+ case 0x00B1: ch = 0x8F; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xBE; break;
+ case 0x00B5: ch = 0x79; break;
+ case 0x00B7: ch = 0xB3; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00B9: ch = 0xDA; break;
+ case 0x00BA: ch = 0x9B; break;
+ case 0x00BB: ch = 0x8B; break;
+ case 0x00BC: ch = 0xB7; break;
+ case 0x00BD: ch = 0xB8; break;
+ case 0x00BE: ch = 0xB9; break;
+ case 0x00BF: ch = 0xAB; break;
+ case 0x00C0: ch = 0x64; break;
+ case 0x00C1: ch = 0x65; break;
+ case 0x00C2: ch = 0x62; break;
+ case 0x00C3: ch = 0x66; break;
+ case 0x00C4: ch = 0x63; break;
+ case 0x00C5: ch = 0x67; break;
+ case 0x00C6: ch = 0x9E; break;
+ case 0x00C7: ch = 0x68; break;
+ case 0x00C8: ch = 0x74; break;
+ case 0x00C9: ch = 0x71; break;
+ case 0x00CA: ch = 0x72; break;
+ case 0x00CB: ch = 0x73; break;
+ case 0x00CC: ch = 0x78; break;
+ case 0x00CD: ch = 0x75; break;
+ case 0x00CE: ch = 0x76; break;
+ case 0x00CF: ch = 0x77; break;
+ case 0x00D0: ch = 0xAC; break;
+ case 0x00D1: ch = 0x69; break;
+ case 0x00D2: ch = 0xED; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEB; break;
+ case 0x00D5: ch = 0xEF; break;
+ case 0x00D6: ch = 0xEC; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00D8: ch = 0x80; break;
+ case 0x00D9: ch = 0xFD; break;
+ case 0x00DA: ch = 0xFE; break;
+ case 0x00DB: ch = 0xFB; break;
+ case 0x00DC: ch = 0xFC; break;
+ case 0x00DD: ch = 0xAD; break;
+ case 0x00DE: ch = 0xAE; break;
+ case 0x00DF: ch = 0x59; break;
+ case 0x00E0: ch = 0x7C; break;
+ case 0x00E1: ch = 0x45; break;
+ case 0x00E2: ch = 0x42; break;
+ case 0x00E3: ch = 0x46; break;
+ case 0x00E4: ch = 0x43; break;
+ case 0x00E5: ch = 0x47; break;
+ case 0x00E6: ch = 0x9C; break;
+ case 0x00E7: ch = 0xE0; break;
+ case 0x00E8: ch = 0xD0; break;
+ case 0x00E9: ch = 0xC0; break;
+ case 0x00EA: ch = 0x52; break;
+ case 0x00EB: ch = 0x53; break;
+ case 0x00EC: ch = 0x58; break;
+ case 0x00ED: ch = 0x55; break;
+ case 0x00EE: ch = 0x56; break;
+ case 0x00EF: ch = 0x57; break;
+ case 0x00F0: ch = 0x8C; break;
+ case 0x00F1: ch = 0x49; break;
+ case 0x00F2: ch = 0xCD; break;
+ case 0x00F3: ch = 0xCE; break;
+ case 0x00F4: ch = 0xCB; break;
+ case 0x00F5: ch = 0xCF; break;
+ case 0x00F6: ch = 0xCC; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x00F8: ch = 0x70; break;
+ case 0x00F9: ch = 0x6A; break;
+ case 0x00FA: ch = 0xDE; break;
+ case 0x00FB: ch = 0xDB; break;
+ case 0x00FC: ch = 0xDC; break;
+ case 0x00FD: ch = 0x8D; break;
+ case 0x00FE: ch = 0x8E; break;
+ case 0x00FF: ch = 0xDF; break;
+ case 0x0110: ch = 0xAC; break;
+ case 0x203E: ch = 0xBC; break;
+ case 0xFF01: ch = 0x4F; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0xB1; break;
+ case 0xFF04: ch = 0x5B; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0x44; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0x90; break;
+ case 0xFF3C: ch = 0x48; break;
+ case 0xFF3D: ch = 0xB5; break;
+ case 0xFF3E: ch = 0x5F; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0xA0; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0x51; break;
+ case 0xFF5C: ch = 0xBB; break;
+ case 0xFF5D: ch = 0x54; break;
+ case 0xFF5E: ch = 0xBD; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP20297
+
+public class ENCibm297 : CP20297
+{
+ public ENCibm297() : base() {}
+
+}; // class ENCibm297
+
+}; // namespace I18N.Rare
diff --git a/mcs/class/I18N/Rare/CP20420.cs b/mcs/class/I18N/Rare/CP20420.cs
new file mode 100644
index 00000000000..ee601514f32
--- /dev/null
+++ b/mcs/class/I18N/Rare/CP20420.cs
@@ -0,0 +1,1073 @@
+/*
+ * CP20420.cs - IBM EBCDIC (Arabic) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-420.ucm".
+
+namespace I18N.Rare
+{
+
+using System;
+using I18N.Common;
+
+public class CP20420 : ByteEncoding
+{
+ public CP20420()
+ : base(20420, ToChars, "IBM EBCDIC (Arabic)",
+ "IBM420", "IBM420", "IBM420",
+ false, false, false, false, 1256)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u009C', '\u0009',
+ '\u0086', '\u007F', '\u0097', '\u008D', '\u008E', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u009D', '\u0085', '\u0008', '\u0087',
+ '\u0018', '\u0019', '\u0092', '\u008F', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0080', '\u0081', '\u0082', '\u0083',
+ '\u0084', '\u000A', '\u0017', '\u001B', '\u0088', '\u0089',
+ '\u008A', '\u008B', '\u008C', '\u0005', '\u0006', '\u0007',
+ '\u0090', '\u0091', '\u0016', '\u0093', '\u0094', '\u0095',
+ '\u0096', '\u0004', '\u0098', '\u0099', '\u009A', '\u009B',
+ '\u0014', '\u0015', '\u009E', '\u001A', '\u0020', '\u00A0',
+ '\u0651', '\uFE7D', '\u0640', '\u200B', '\u0621', '\u0622',
+ '\uFE82', '\u0623', '\u00A2', '\u002E', '\u003C', '\u0028',
+ '\u002B', '\u007C', '\u0026', '\uFE84', '\u0624', '\u003F',
+ '\u003F', '\u0626', '\u0627', '\uFE8E', '\u0628', '\uFE91',
+ '\u0021', '\u0024', '\u002A', '\u0029', '\u003B', '\u00AC',
+ '\u002D', '\u002F', '\u0629', '\u062A', '\uFE97', '\u062B',
+ '\uFE9B', '\u062C', '\uFE9F', '\u062D', '\u00A6', '\u002C',
+ '\u0025', '\u005F', '\u003E', '\u003F', '\uFEA3', '\u062E',
+ '\uFEA7', '\u062F', '\u0630', '\u0631', '\u0632', '\u0633',
+ '\uFEB3', '\u060C', '\u003A', '\u0023', '\u0040', '\u0027',
+ '\u003D', '\u0022', '\u0634', '\u0061', '\u0062', '\u0063',
+ '\u0064', '\u0065', '\u0066', '\u0067', '\u0068', '\u0069',
+ '\uFEB7', '\u0635', '\uFEBB', '\u0636', '\uFEBF', '\u0637',
+ '\u0638', '\u006A', '\u006B', '\u006C', '\u006D', '\u006E',
+ '\u006F', '\u0070', '\u0071', '\u0072', '\u0639', '\uFECA',
+ '\uFECB', '\uFECC', '\u063A', '\uFECE', '\uFECF', '\u00F7',
+ '\u0073', '\u0074', '\u0075', '\u0076', '\u0077', '\u0078',
+ '\u0079', '\u007A', '\uFED0', '\u0641', '\uFED3', '\u0642',
+ '\uFED7', '\u0643', '\uFEDB', '\u0644', '\uFEF5', '\uFEF6',
+ '\uFEF7', '\uFEF8', '\u003F', '\u003F', '\uFEFB', '\uFEFC',
+ '\uFEDF', '\u0645', '\uFEE3', '\u0646', '\uFEE7', '\u0647',
+ '\u061B', '\u0041', '\u0042', '\u0043', '\u0044', '\u0045',
+ '\u0046', '\u0047', '\u0048', '\u0049', '\u00AD', '\uFEEB',
+ '\u003F', '\uFEEC', '\u003F', '\u0648', '\u061F', '\u004A',
+ '\u004B', '\u004C', '\u004D', '\u004E', '\u004F', '\u0050',
+ '\u0051', '\u0052', '\u0649', '\uFEF0', '\u064A', '\uFEF2',
+ '\uFEF3', '\u0660', '\u00D7', '\u003F', '\u0053', '\u0054',
+ '\u0055', '\u0056', '\u0057', '\u0058', '\u0059', '\u005A',
+ '\u0661', '\u0662', '\u003F', '\u0663', '\u0664', '\u0665',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u003F', '\u0666',
+ '\u0667', '\u0668', '\u0669', '\u009F',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x5A; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0x7B; break;
+ case 0x0024: ch = 0x5B; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0x7C; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007C: ch = 0x4F; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A2: ch = 0x4A; break;
+ case 0x00A6: ch = 0x6A; break;
+ case 0x00AC: ch = 0x5F; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00D7: ch = 0xE0; break;
+ case 0x00F7: ch = 0xA1; break;
+ case 0x060C: ch = 0x79; break;
+ case 0x061B: ch = 0xC0; break;
+ case 0x061F: ch = 0xD0; break;
+ case 0x0621: ch = 0x46; break;
+ case 0x0622: ch = 0x47; break;
+ case 0x0623: ch = 0x49; break;
+ case 0x0624: ch = 0x52; break;
+ case 0x0625: ch = 0x56; break;
+ case 0x0626: ch = 0x55; break;
+ case 0x0627: ch = 0x56; break;
+ case 0x0628: ch = 0x58; break;
+ case 0x0629: ch = 0x62; break;
+ case 0x062A: ch = 0x63; break;
+ case 0x062B: ch = 0x65; break;
+ case 0x062C: ch = 0x67; break;
+ case 0x062D: ch = 0x69; break;
+ case 0x062E: ch = 0x71; break;
+ case 0x062F:
+ case 0x0630:
+ case 0x0631:
+ case 0x0632:
+ case 0x0633:
+ ch -= 0x05BC;
+ break;
+ case 0x0634: ch = 0x80; break;
+ case 0x0635: ch = 0x8B; break;
+ case 0x0636: ch = 0x8D; break;
+ case 0x0637: ch = 0x8F; break;
+ case 0x0638: ch = 0x90; break;
+ case 0x0639: ch = 0x9A; break;
+ case 0x063A: ch = 0x9E; break;
+ case 0x0640: ch = 0x44; break;
+ case 0x0641: ch = 0xAB; break;
+ case 0x0642: ch = 0xAD; break;
+ case 0x0643: ch = 0xAF; break;
+ case 0x0644: ch = 0xB1; break;
+ case 0x0645: ch = 0xBB; break;
+ case 0x0646: ch = 0xBD; break;
+ case 0x0647: ch = 0xBF; break;
+ case 0x0648: ch = 0xCF; break;
+ case 0x0649: ch = 0xDA; break;
+ case 0x064A: ch = 0xDC; break;
+ case 0x0651: ch = 0x42; break;
+ case 0x0660: ch = 0xDF; break;
+ case 0x0661: ch = 0xEA; break;
+ case 0x0662: ch = 0xEB; break;
+ case 0x0663: ch = 0xED; break;
+ case 0x0664: ch = 0xEE; break;
+ case 0x0665: ch = 0xEF; break;
+ case 0x0666:
+ case 0x0667:
+ case 0x0668:
+ case 0x0669:
+ ch -= 0x056B;
+ break;
+ case 0x066A: ch = 0x6C; break;
+ case 0x066B: ch = 0x6B; break;
+ case 0x066C: ch = 0x4B; break;
+ case 0x066D: ch = 0x5C; break;
+ case 0x200B: ch = 0x45; break;
+ case 0xFE7C: ch = 0x42; break;
+ case 0xFE7D: ch = 0x43; break;
+ case 0xFE80:
+ case 0xFE81:
+ case 0xFE82:
+ case 0xFE83:
+ ch -= 0xFE3A;
+ break;
+ case 0xFE84: ch = 0x51; break;
+ case 0xFE85: ch = 0x52; break;
+ case 0xFE86: ch = 0x52; break;
+ case 0xFE87: ch = 0x56; break;
+ case 0xFE88: ch = 0x57; break;
+ case 0xFE8B: ch = 0x55; break;
+ case 0xFE8C:
+ case 0xFE8D:
+ case 0xFE8E:
+ case 0xFE8F:
+ ch -= 0xFE37;
+ break;
+ case 0xFE90: ch = 0x58; break;
+ case 0xFE91: ch = 0x59; break;
+ case 0xFE92: ch = 0x59; break;
+ case 0xFE93: ch = 0x62; break;
+ case 0xFE94: ch = 0x62; break;
+ case 0xFE95: ch = 0x63; break;
+ case 0xFE96: ch = 0x63; break;
+ case 0xFE97: ch = 0x64; break;
+ case 0xFE98: ch = 0x64; break;
+ case 0xFE99: ch = 0x65; break;
+ case 0xFE9A: ch = 0x65; break;
+ case 0xFE9B: ch = 0x66; break;
+ case 0xFE9C: ch = 0x66; break;
+ case 0xFE9D: ch = 0x67; break;
+ case 0xFE9E: ch = 0x67; break;
+ case 0xFE9F: ch = 0x68; break;
+ case 0xFEA0: ch = 0x68; break;
+ case 0xFEA1: ch = 0x69; break;
+ case 0xFEA2: ch = 0x69; break;
+ case 0xFEA3: ch = 0x70; break;
+ case 0xFEA4: ch = 0x70; break;
+ case 0xFEA5: ch = 0x71; break;
+ case 0xFEA6: ch = 0x71; break;
+ case 0xFEA7: ch = 0x72; break;
+ case 0xFEA8: ch = 0x72; break;
+ case 0xFEA9: ch = 0x73; break;
+ case 0xFEAA: ch = 0x73; break;
+ case 0xFEAB: ch = 0x74; break;
+ case 0xFEAC: ch = 0x74; break;
+ case 0xFEAD: ch = 0x75; break;
+ case 0xFEAE: ch = 0x75; break;
+ case 0xFEAF: ch = 0x76; break;
+ case 0xFEB0: ch = 0x76; break;
+ case 0xFEB1: ch = 0x77; break;
+ case 0xFEB2: ch = 0x77; break;
+ case 0xFEB3: ch = 0x78; break;
+ case 0xFEB4: ch = 0x78; break;
+ case 0xFEB5: ch = 0x80; break;
+ case 0xFEB6: ch = 0x80; break;
+ case 0xFEB7: ch = 0x8A; break;
+ case 0xFEB8: ch = 0x8A; break;
+ case 0xFEB9: ch = 0x8B; break;
+ case 0xFEBA: ch = 0x8B; break;
+ case 0xFEBB: ch = 0x8C; break;
+ case 0xFEBC: ch = 0x8C; break;
+ case 0xFEBD: ch = 0x8D; break;
+ case 0xFEBE: ch = 0x8D; break;
+ case 0xFEBF: ch = 0x8E; break;
+ case 0xFEC0: ch = 0x8E; break;
+ case 0xFEC1: ch = 0x8F; break;
+ case 0xFEC2: ch = 0x8F; break;
+ case 0xFEC3: ch = 0x8F; break;
+ case 0xFEC4: ch = 0x8F; break;
+ case 0xFEC5: ch = 0x90; break;
+ case 0xFEC6: ch = 0x90; break;
+ case 0xFEC7: ch = 0x90; break;
+ case 0xFEC8: ch = 0x90; break;
+ case 0xFEC9:
+ case 0xFECA:
+ case 0xFECB:
+ case 0xFECC:
+ case 0xFECD:
+ case 0xFECE:
+ case 0xFECF:
+ ch -= 0xFE2F;
+ break;
+ case 0xFED0: ch = 0xAA; break;
+ case 0xFED1: ch = 0xAB; break;
+ case 0xFED2: ch = 0xAB; break;
+ case 0xFED3: ch = 0xAC; break;
+ case 0xFED4: ch = 0xAC; break;
+ case 0xFED5: ch = 0xAD; break;
+ case 0xFED6: ch = 0xAD; break;
+ case 0xFED7: ch = 0xAE; break;
+ case 0xFED8: ch = 0xAE; break;
+ case 0xFED9: ch = 0xAF; break;
+ case 0xFEDA: ch = 0xAF; break;
+ case 0xFEDB: ch = 0xB0; break;
+ case 0xFEDC: ch = 0xB0; break;
+ case 0xFEDD: ch = 0xB1; break;
+ case 0xFEDE: ch = 0xB1; break;
+ case 0xFEDF: ch = 0xBA; break;
+ case 0xFEE0: ch = 0xBA; break;
+ case 0xFEE1: ch = 0xBB; break;
+ case 0xFEE2: ch = 0xBB; break;
+ case 0xFEE3: ch = 0xBC; break;
+ case 0xFEE4: ch = 0xBC; break;
+ case 0xFEE5: ch = 0xBD; break;
+ case 0xFEE6: ch = 0xBD; break;
+ case 0xFEE7: ch = 0xBE; break;
+ case 0xFEE8: ch = 0xBE; break;
+ case 0xFEE9: ch = 0xBF; break;
+ case 0xFEEA: ch = 0xBF; break;
+ case 0xFEEB: ch = 0xCB; break;
+ case 0xFEEC: ch = 0xCD; break;
+ case 0xFEED: ch = 0xCF; break;
+ case 0xFEEE: ch = 0xCF; break;
+ case 0xFEEF:
+ case 0xFEF0:
+ case 0xFEF1:
+ case 0xFEF2:
+ case 0xFEF3:
+ ch -= 0xFE15;
+ break;
+ case 0xFEF4: ch = 0xDE; break;
+ case 0xFEF5:
+ case 0xFEF6:
+ case 0xFEF7:
+ case 0xFEF8:
+ ch -= 0xFE43;
+ break;
+ case 0xFEF9: ch = 0xB8; break;
+ case 0xFEFA: ch = 0xB9; break;
+ case 0xFEFB: ch = 0xB8; break;
+ case 0xFEFC: ch = 0xB9; break;
+ case 0xFF01: ch = 0x5A; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0x7B; break;
+ case 0xFF04: ch = 0x5B; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0x7C; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5C: ch = 0x4F; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x5A; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0x7B; break;
+ case 0x0024: ch = 0x5B; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0x7C; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007C: ch = 0x4F; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A2: ch = 0x4A; break;
+ case 0x00A6: ch = 0x6A; break;
+ case 0x00AC: ch = 0x5F; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00D7: ch = 0xE0; break;
+ case 0x00F7: ch = 0xA1; break;
+ case 0x060C: ch = 0x79; break;
+ case 0x061B: ch = 0xC0; break;
+ case 0x061F: ch = 0xD0; break;
+ case 0x0621: ch = 0x46; break;
+ case 0x0622: ch = 0x47; break;
+ case 0x0623: ch = 0x49; break;
+ case 0x0624: ch = 0x52; break;
+ case 0x0625: ch = 0x56; break;
+ case 0x0626: ch = 0x55; break;
+ case 0x0627: ch = 0x56; break;
+ case 0x0628: ch = 0x58; break;
+ case 0x0629: ch = 0x62; break;
+ case 0x062A: ch = 0x63; break;
+ case 0x062B: ch = 0x65; break;
+ case 0x062C: ch = 0x67; break;
+ case 0x062D: ch = 0x69; break;
+ case 0x062E: ch = 0x71; break;
+ case 0x062F:
+ case 0x0630:
+ case 0x0631:
+ case 0x0632:
+ case 0x0633:
+ ch -= 0x05BC;
+ break;
+ case 0x0634: ch = 0x80; break;
+ case 0x0635: ch = 0x8B; break;
+ case 0x0636: ch = 0x8D; break;
+ case 0x0637: ch = 0x8F; break;
+ case 0x0638: ch = 0x90; break;
+ case 0x0639: ch = 0x9A; break;
+ case 0x063A: ch = 0x9E; break;
+ case 0x0640: ch = 0x44; break;
+ case 0x0641: ch = 0xAB; break;
+ case 0x0642: ch = 0xAD; break;
+ case 0x0643: ch = 0xAF; break;
+ case 0x0644: ch = 0xB1; break;
+ case 0x0645: ch = 0xBB; break;
+ case 0x0646: ch = 0xBD; break;
+ case 0x0647: ch = 0xBF; break;
+ case 0x0648: ch = 0xCF; break;
+ case 0x0649: ch = 0xDA; break;
+ case 0x064A: ch = 0xDC; break;
+ case 0x0651: ch = 0x42; break;
+ case 0x0660: ch = 0xDF; break;
+ case 0x0661: ch = 0xEA; break;
+ case 0x0662: ch = 0xEB; break;
+ case 0x0663: ch = 0xED; break;
+ case 0x0664: ch = 0xEE; break;
+ case 0x0665: ch = 0xEF; break;
+ case 0x0666:
+ case 0x0667:
+ case 0x0668:
+ case 0x0669:
+ ch -= 0x056B;
+ break;
+ case 0x066A: ch = 0x6C; break;
+ case 0x066B: ch = 0x6B; break;
+ case 0x066C: ch = 0x4B; break;
+ case 0x066D: ch = 0x5C; break;
+ case 0x200B: ch = 0x45; break;
+ case 0xFE7C: ch = 0x42; break;
+ case 0xFE7D: ch = 0x43; break;
+ case 0xFE80:
+ case 0xFE81:
+ case 0xFE82:
+ case 0xFE83:
+ ch -= 0xFE3A;
+ break;
+ case 0xFE84: ch = 0x51; break;
+ case 0xFE85: ch = 0x52; break;
+ case 0xFE86: ch = 0x52; break;
+ case 0xFE87: ch = 0x56; break;
+ case 0xFE88: ch = 0x57; break;
+ case 0xFE8B: ch = 0x55; break;
+ case 0xFE8C:
+ case 0xFE8D:
+ case 0xFE8E:
+ case 0xFE8F:
+ ch -= 0xFE37;
+ break;
+ case 0xFE90: ch = 0x58; break;
+ case 0xFE91: ch = 0x59; break;
+ case 0xFE92: ch = 0x59; break;
+ case 0xFE93: ch = 0x62; break;
+ case 0xFE94: ch = 0x62; break;
+ case 0xFE95: ch = 0x63; break;
+ case 0xFE96: ch = 0x63; break;
+ case 0xFE97: ch = 0x64; break;
+ case 0xFE98: ch = 0x64; break;
+ case 0xFE99: ch = 0x65; break;
+ case 0xFE9A: ch = 0x65; break;
+ case 0xFE9B: ch = 0x66; break;
+ case 0xFE9C: ch = 0x66; break;
+ case 0xFE9D: ch = 0x67; break;
+ case 0xFE9E: ch = 0x67; break;
+ case 0xFE9F: ch = 0x68; break;
+ case 0xFEA0: ch = 0x68; break;
+ case 0xFEA1: ch = 0x69; break;
+ case 0xFEA2: ch = 0x69; break;
+ case 0xFEA3: ch = 0x70; break;
+ case 0xFEA4: ch = 0x70; break;
+ case 0xFEA5: ch = 0x71; break;
+ case 0xFEA6: ch = 0x71; break;
+ case 0xFEA7: ch = 0x72; break;
+ case 0xFEA8: ch = 0x72; break;
+ case 0xFEA9: ch = 0x73; break;
+ case 0xFEAA: ch = 0x73; break;
+ case 0xFEAB: ch = 0x74; break;
+ case 0xFEAC: ch = 0x74; break;
+ case 0xFEAD: ch = 0x75; break;
+ case 0xFEAE: ch = 0x75; break;
+ case 0xFEAF: ch = 0x76; break;
+ case 0xFEB0: ch = 0x76; break;
+ case 0xFEB1: ch = 0x77; break;
+ case 0xFEB2: ch = 0x77; break;
+ case 0xFEB3: ch = 0x78; break;
+ case 0xFEB4: ch = 0x78; break;
+ case 0xFEB5: ch = 0x80; break;
+ case 0xFEB6: ch = 0x80; break;
+ case 0xFEB7: ch = 0x8A; break;
+ case 0xFEB8: ch = 0x8A; break;
+ case 0xFEB9: ch = 0x8B; break;
+ case 0xFEBA: ch = 0x8B; break;
+ case 0xFEBB: ch = 0x8C; break;
+ case 0xFEBC: ch = 0x8C; break;
+ case 0xFEBD: ch = 0x8D; break;
+ case 0xFEBE: ch = 0x8D; break;
+ case 0xFEBF: ch = 0x8E; break;
+ case 0xFEC0: ch = 0x8E; break;
+ case 0xFEC1: ch = 0x8F; break;
+ case 0xFEC2: ch = 0x8F; break;
+ case 0xFEC3: ch = 0x8F; break;
+ case 0xFEC4: ch = 0x8F; break;
+ case 0xFEC5: ch = 0x90; break;
+ case 0xFEC6: ch = 0x90; break;
+ case 0xFEC7: ch = 0x90; break;
+ case 0xFEC8: ch = 0x90; break;
+ case 0xFEC9:
+ case 0xFECA:
+ case 0xFECB:
+ case 0xFECC:
+ case 0xFECD:
+ case 0xFECE:
+ case 0xFECF:
+ ch -= 0xFE2F;
+ break;
+ case 0xFED0: ch = 0xAA; break;
+ case 0xFED1: ch = 0xAB; break;
+ case 0xFED2: ch = 0xAB; break;
+ case 0xFED3: ch = 0xAC; break;
+ case 0xFED4: ch = 0xAC; break;
+ case 0xFED5: ch = 0xAD; break;
+ case 0xFED6: ch = 0xAD; break;
+ case 0xFED7: ch = 0xAE; break;
+ case 0xFED8: ch = 0xAE; break;
+ case 0xFED9: ch = 0xAF; break;
+ case 0xFEDA: ch = 0xAF; break;
+ case 0xFEDB: ch = 0xB0; break;
+ case 0xFEDC: ch = 0xB0; break;
+ case 0xFEDD: ch = 0xB1; break;
+ case 0xFEDE: ch = 0xB1; break;
+ case 0xFEDF: ch = 0xBA; break;
+ case 0xFEE0: ch = 0xBA; break;
+ case 0xFEE1: ch = 0xBB; break;
+ case 0xFEE2: ch = 0xBB; break;
+ case 0xFEE3: ch = 0xBC; break;
+ case 0xFEE4: ch = 0xBC; break;
+ case 0xFEE5: ch = 0xBD; break;
+ case 0xFEE6: ch = 0xBD; break;
+ case 0xFEE7: ch = 0xBE; break;
+ case 0xFEE8: ch = 0xBE; break;
+ case 0xFEE9: ch = 0xBF; break;
+ case 0xFEEA: ch = 0xBF; break;
+ case 0xFEEB: ch = 0xCB; break;
+ case 0xFEEC: ch = 0xCD; break;
+ case 0xFEED: ch = 0xCF; break;
+ case 0xFEEE: ch = 0xCF; break;
+ case 0xFEEF:
+ case 0xFEF0:
+ case 0xFEF1:
+ case 0xFEF2:
+ case 0xFEF3:
+ ch -= 0xFE15;
+ break;
+ case 0xFEF4: ch = 0xDE; break;
+ case 0xFEF5:
+ case 0xFEF6:
+ case 0xFEF7:
+ case 0xFEF8:
+ ch -= 0xFE43;
+ break;
+ case 0xFEF9: ch = 0xB8; break;
+ case 0xFEFA: ch = 0xB9; break;
+ case 0xFEFB: ch = 0xB8; break;
+ case 0xFEFC: ch = 0xB9; break;
+ case 0xFF01: ch = 0x5A; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0x7B; break;
+ case 0xFF04: ch = 0x5B; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0x7C; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5C: ch = 0x4F; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP20420
+
+public class ENCibm420 : CP20420
+{
+ public ENCibm420() : base() {}
+
+}; // class ENCibm420
+
+}; // namespace I18N.Rare
diff --git a/mcs/class/I18N/Rare/CP20424.cs b/mcs/class/I18N/Rare/CP20424.cs
new file mode 100644
index 00000000000..224cd0da02a
--- /dev/null
+++ b/mcs/class/I18N/Rare/CP20424.cs
@@ -0,0 +1,829 @@
+/*
+ * CP20424.cs - IBM EBCDIC (Hebrew) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-424.ucm".
+
+namespace I18N.Rare
+{
+
+using System;
+using I18N.Common;
+
+public class CP20424 : ByteEncoding
+{
+ public CP20424()
+ : base(20424, ToChars, "IBM EBCDIC (Hebrew)",
+ "IBM424", "IBM424", "IBM424",
+ false, false, false, false, 1255)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u009C', '\u0009',
+ '\u0086', '\u007F', '\u0097', '\u008D', '\u008E', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u009D', '\u0085', '\u0008', '\u0087',
+ '\u0018', '\u0019', '\u0092', '\u008F', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0080', '\u0081', '\u0082', '\u0083',
+ '\u0084', '\u000A', '\u0017', '\u001B', '\u0088', '\u0089',
+ '\u008A', '\u008B', '\u008C', '\u0005', '\u0006', '\u0007',
+ '\u0090', '\u0091', '\u0016', '\u0093', '\u0094', '\u0095',
+ '\u0096', '\u0004', '\u0098', '\u0099', '\u009A', '\u009B',
+ '\u0014', '\u0015', '\u009E', '\u001A', '\u0020', '\u05D0',
+ '\u05D1', '\u05D2', '\u05D3', '\u05D4', '\u05D5', '\u05D6',
+ '\u05D7', '\u05D8', '\u00A2', '\u002E', '\u003C', '\u0028',
+ '\u002B', '\u007C', '\u0026', '\u05D9', '\u05DA', '\u05DB',
+ '\u05DC', '\u05DD', '\u05DE', '\u05DF', '\u05E0', '\u05E1',
+ '\u0021', '\u0024', '\u002A', '\u0029', '\u003B', '\u00AC',
+ '\u002D', '\u002F', '\u05E2', '\u05E3', '\u05E4', '\u05E5',
+ '\u05E6', '\u05E7', '\u05E8', '\u05E9', '\u00A6', '\u002C',
+ '\u0025', '\u005F', '\u003E', '\u003F', '\u003F', '\u05EA',
+ '\u003F', '\u003F', '\u00A0', '\u003F', '\u003F', '\u003F',
+ '\u2017', '\u0060', '\u003A', '\u0023', '\u0040', '\u0027',
+ '\u003D', '\u0022', '\u003F', '\u0061', '\u0062', '\u0063',
+ '\u0064', '\u0065', '\u0066', '\u0067', '\u0068', '\u0069',
+ '\u00AB', '\u00BB', '\u003F', '\u003F', '\u003F', '\u00B1',
+ '\u00B0', '\u006A', '\u006B', '\u006C', '\u006D', '\u006E',
+ '\u006F', '\u0070', '\u0071', '\u0072', '\u003F', '\u003F',
+ '\u003F', '\u00B8', '\u003F', '\u00A4', '\u00B5', '\u007E',
+ '\u0073', '\u0074', '\u0075', '\u0076', '\u0077', '\u0078',
+ '\u0079', '\u007A', '\u003F', '\u003F', '\u003F', '\u003F',
+ '\u003F', '\u00AE', '\u005E', '\u00A3', '\u00A5', '\u2022',
+ '\u00A9', '\u00A7', '\u00B6', '\u00BC', '\u00BD', '\u00BE',
+ '\u005B', '\u005D', '\u203E', '\u00A8', '\u00B4', '\u00D7',
+ '\u007B', '\u0041', '\u0042', '\u0043', '\u0044', '\u0045',
+ '\u0046', '\u0047', '\u0048', '\u0049', '\u00AD', '\u003F',
+ '\u003F', '\u003F', '\u003F', '\u003F', '\u007D', '\u004A',
+ '\u004B', '\u004C', '\u004D', '\u004E', '\u004F', '\u0050',
+ '\u0051', '\u0052', '\u00B9', '\u003F', '\u003F', '\u003F',
+ '\u003F', '\u003F', '\u005C', '\u00F7', '\u0053', '\u0054',
+ '\u0055', '\u0056', '\u0057', '\u0058', '\u0059', '\u005A',
+ '\u00B2', '\u003F', '\u003F', '\u003F', '\u003F', '\u003F',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u00B3', '\u003F',
+ '\u003F', '\u003F', '\u003F', '\u009F',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x00B6:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x5A; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0x7B; break;
+ case 0x0024: ch = 0x5B; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0x7C; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0xBA; break;
+ case 0x005C: ch = 0xE0; break;
+ case 0x005D: ch = 0xBB; break;
+ case 0x005E: ch = 0xB0; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0x79; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0xC0; break;
+ case 0x007C: ch = 0x4F; break;
+ case 0x007D: ch = 0xD0; break;
+ case 0x007E: ch = 0xA1; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x74; break;
+ case 0x00A2: ch = 0x4A; break;
+ case 0x00A3: ch = 0xB1; break;
+ case 0x00A4: ch = 0x9F; break;
+ case 0x00A5: ch = 0xB2; break;
+ case 0x00A6: ch = 0x6A; break;
+ case 0x00A7: ch = 0xB5; break;
+ case 0x00A8: ch = 0xBD; break;
+ case 0x00A9: ch = 0xB4; break;
+ case 0x00AB: ch = 0x8A; break;
+ case 0x00AC: ch = 0x5F; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00AE: ch = 0xAF; break;
+ case 0x00B0: ch = 0x90; break;
+ case 0x00B1: ch = 0x8F; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xBE; break;
+ case 0x00B5: ch = 0xA0; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00B9: ch = 0xDA; break;
+ case 0x00BB: ch = 0x8B; break;
+ case 0x00BC: ch = 0xB7; break;
+ case 0x00BD: ch = 0xB8; break;
+ case 0x00BE: ch = 0xB9; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x05D0:
+ case 0x05D1:
+ case 0x05D2:
+ case 0x05D3:
+ case 0x05D4:
+ case 0x05D5:
+ case 0x05D6:
+ case 0x05D7:
+ case 0x05D8:
+ ch -= 0x058F;
+ break;
+ case 0x05D9:
+ case 0x05DA:
+ case 0x05DB:
+ case 0x05DC:
+ case 0x05DD:
+ case 0x05DE:
+ case 0x05DF:
+ case 0x05E0:
+ case 0x05E1:
+ ch -= 0x0588;
+ break;
+ case 0x05E2:
+ case 0x05E3:
+ case 0x05E4:
+ case 0x05E5:
+ case 0x05E6:
+ case 0x05E7:
+ case 0x05E8:
+ case 0x05E9:
+ ch -= 0x0580;
+ break;
+ case 0x05EA: ch = 0x71; break;
+ case 0x2017: ch = 0x78; break;
+ case 0x2022: ch = 0xB3; break;
+ case 0x203E: ch = 0xBC; break;
+ case 0xFF01: ch = 0x5A; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0x7B; break;
+ case 0xFF04: ch = 0x5B; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0x7C; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0xBA; break;
+ case 0xFF3C: ch = 0xE0; break;
+ case 0xFF3D: ch = 0xBB; break;
+ case 0xFF3E: ch = 0xB0; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0x79; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0xC0; break;
+ case 0xFF5C: ch = 0x4F; break;
+ case 0xFF5D: ch = 0xD0; break;
+ case 0xFF5E: ch = 0xA1; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x00B6:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x5A; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0x7B; break;
+ case 0x0024: ch = 0x5B; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0x7C; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0xBA; break;
+ case 0x005C: ch = 0xE0; break;
+ case 0x005D: ch = 0xBB; break;
+ case 0x005E: ch = 0xB0; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0x79; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0xC0; break;
+ case 0x007C: ch = 0x4F; break;
+ case 0x007D: ch = 0xD0; break;
+ case 0x007E: ch = 0xA1; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x74; break;
+ case 0x00A2: ch = 0x4A; break;
+ case 0x00A3: ch = 0xB1; break;
+ case 0x00A4: ch = 0x9F; break;
+ case 0x00A5: ch = 0xB2; break;
+ case 0x00A6: ch = 0x6A; break;
+ case 0x00A7: ch = 0xB5; break;
+ case 0x00A8: ch = 0xBD; break;
+ case 0x00A9: ch = 0xB4; break;
+ case 0x00AB: ch = 0x8A; break;
+ case 0x00AC: ch = 0x5F; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00AE: ch = 0xAF; break;
+ case 0x00B0: ch = 0x90; break;
+ case 0x00B1: ch = 0x8F; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xBE; break;
+ case 0x00B5: ch = 0xA0; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00B9: ch = 0xDA; break;
+ case 0x00BB: ch = 0x8B; break;
+ case 0x00BC: ch = 0xB7; break;
+ case 0x00BD: ch = 0xB8; break;
+ case 0x00BE: ch = 0xB9; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x05D0:
+ case 0x05D1:
+ case 0x05D2:
+ case 0x05D3:
+ case 0x05D4:
+ case 0x05D5:
+ case 0x05D6:
+ case 0x05D7:
+ case 0x05D8:
+ ch -= 0x058F;
+ break;
+ case 0x05D9:
+ case 0x05DA:
+ case 0x05DB:
+ case 0x05DC:
+ case 0x05DD:
+ case 0x05DE:
+ case 0x05DF:
+ case 0x05E0:
+ case 0x05E1:
+ ch -= 0x0588;
+ break;
+ case 0x05E2:
+ case 0x05E3:
+ case 0x05E4:
+ case 0x05E5:
+ case 0x05E6:
+ case 0x05E7:
+ case 0x05E8:
+ case 0x05E9:
+ ch -= 0x0580;
+ break;
+ case 0x05EA: ch = 0x71; break;
+ case 0x2017: ch = 0x78; break;
+ case 0x2022: ch = 0xB3; break;
+ case 0x203E: ch = 0xBC; break;
+ case 0xFF01: ch = 0x5A; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0x7B; break;
+ case 0xFF04: ch = 0x5B; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0x7C; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0xBA; break;
+ case 0xFF3C: ch = 0xE0; break;
+ case 0xFF3D: ch = 0xBB; break;
+ case 0xFF3E: ch = 0xB0; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0x79; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0xC0; break;
+ case 0xFF5C: ch = 0x4F; break;
+ case 0xFF5D: ch = 0xD0; break;
+ case 0xFF5E: ch = 0xA1; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP20424
+
+public class ENCibm424 : CP20424
+{
+ public ENCibm424() : base() {}
+
+}; // class ENCibm424
+
+}; // namespace I18N.Rare
diff --git a/mcs/class/I18N/Rare/CP20871.cs b/mcs/class/I18N/Rare/CP20871.cs
new file mode 100644
index 00000000000..fdb11807505
--- /dev/null
+++ b/mcs/class/I18N/Rare/CP20871.cs
@@ -0,0 +1,897 @@
+/*
+ * CP20871.cs - IBM EBCDIC (Icelandic) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-871.ucm".
+
+namespace I18N.Rare
+{
+
+using System;
+using I18N.Common;
+
+public class CP20871 : ByteEncoding
+{
+ public CP20871()
+ : base(20871, ToChars, "IBM EBCDIC (Icelandic)",
+ "IBM871", "IBM871", "IBM871",
+ false, false, false, false, 1252)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u009C', '\u0009',
+ '\u0086', '\u007F', '\u0097', '\u008D', '\u008E', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u009D', '\u0085', '\u0008', '\u0087',
+ '\u0018', '\u0019', '\u0092', '\u008F', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0080', '\u0081', '\u0082', '\u0083',
+ '\u0084', '\u000A', '\u0017', '\u001B', '\u0088', '\u0089',
+ '\u008A', '\u008B', '\u008C', '\u0005', '\u0006', '\u0007',
+ '\u0090', '\u0091', '\u0016', '\u0093', '\u0094', '\u0095',
+ '\u0096', '\u0004', '\u0098', '\u0099', '\u009A', '\u009B',
+ '\u0014', '\u0015', '\u009E', '\u001A', '\u0020', '\u00A0',
+ '\u00E2', '\u00E4', '\u00E0', '\u00E1', '\u00E3', '\u00E5',
+ '\u00E7', '\u00F1', '\u00DE', '\u002E', '\u003C', '\u0028',
+ '\u002B', '\u0021', '\u0026', '\u00E9', '\u00EA', '\u00EB',
+ '\u00E8', '\u00ED', '\u00EE', '\u00EF', '\u00EC', '\u00DF',
+ '\u00C6', '\u0024', '\u002A', '\u0029', '\u003B', '\u00D6',
+ '\u002D', '\u002F', '\u00C2', '\u00C4', '\u00C0', '\u00C1',
+ '\u00C3', '\u00C5', '\u00C7', '\u00D1', '\u00A6', '\u002C',
+ '\u0025', '\u005F', '\u003E', '\u003F', '\u00F8', '\u00C9',
+ '\u00CA', '\u00CB', '\u00C8', '\u00CD', '\u00CE', '\u00CF',
+ '\u00CC', '\u00F0', '\u003A', '\u0023', '\u00D0', '\u0027',
+ '\u003D', '\u0022', '\u00D8', '\u0061', '\u0062', '\u0063',
+ '\u0064', '\u0065', '\u0066', '\u0067', '\u0068', '\u0069',
+ '\u00AB', '\u00BB', '\u0060', '\u00FD', '\u007B', '\u00B1',
+ '\u00B0', '\u006A', '\u006B', '\u006C', '\u006D', '\u006E',
+ '\u006F', '\u0070', '\u0071', '\u0072', '\u00AA', '\u00BA',
+ '\u007D', '\u00B8', '\u005D', '\u00A4', '\u00B5', '\u00F6',
+ '\u0073', '\u0074', '\u0075', '\u0076', '\u0077', '\u0078',
+ '\u0079', '\u007A', '\u00A1', '\u00BF', '\u0040', '\u00DD',
+ '\u005B', '\u00AE', '\u00A2', '\u00A3', '\u00A5', '\u00B7',
+ '\u00A9', '\u00A7', '\u00B6', '\u00BC', '\u00BD', '\u00BE',
+ '\u00AC', '\u007C', '\u00AF', '\u00A8', '\u005C', '\u00D7',
+ '\u00FE', '\u0041', '\u0042', '\u0043', '\u0044', '\u0045',
+ '\u0046', '\u0047', '\u0048', '\u0049', '\u00AD', '\u00F4',
+ '\u007E', '\u00F2', '\u00F3', '\u00F5', '\u00E6', '\u004A',
+ '\u004B', '\u004C', '\u004D', '\u004E', '\u004F', '\u0050',
+ '\u0051', '\u0052', '\u00B9', '\u00FB', '\u00FC', '\u00F9',
+ '\u00FA', '\u00FF', '\u00B4', '\u00F7', '\u0053', '\u0054',
+ '\u0055', '\u0056', '\u0057', '\u0058', '\u0059', '\u005A',
+ '\u00B2', '\u00D4', '\u005E', '\u00D2', '\u00D3', '\u00D5',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u00B3', '\u00DB',
+ '\u00DC', '\u00D9', '\u00DA', '\u009F',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x00B6:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x4F; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0x7B; break;
+ case 0x0024: ch = 0x5B; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0xAC; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0xAE; break;
+ case 0x005C: ch = 0xBE; break;
+ case 0x005D: ch = 0x9E; break;
+ case 0x005E: ch = 0xEC; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0x8C; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0x8E; break;
+ case 0x007C: ch = 0xBB; break;
+ case 0x007D: ch = 0x9C; break;
+ case 0x007E: ch = 0xCC; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A1: ch = 0xAA; break;
+ case 0x00A2: ch = 0xB0; break;
+ case 0x00A3: ch = 0xB1; break;
+ case 0x00A4: ch = 0x9F; break;
+ case 0x00A5: ch = 0xB2; break;
+ case 0x00A6: ch = 0x6A; break;
+ case 0x00A7: ch = 0xB5; break;
+ case 0x00A8: ch = 0xBD; break;
+ case 0x00A9: ch = 0xB4; break;
+ case 0x00AA: ch = 0x9A; break;
+ case 0x00AB: ch = 0x8A; break;
+ case 0x00AC: ch = 0xBA; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00AE: ch = 0xAF; break;
+ case 0x00AF: ch = 0xBC; break;
+ case 0x00B0: ch = 0x90; break;
+ case 0x00B1: ch = 0x8F; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xE0; break;
+ case 0x00B5: ch = 0xA0; break;
+ case 0x00B7: ch = 0xB3; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00B9: ch = 0xDA; break;
+ case 0x00BA: ch = 0x9B; break;
+ case 0x00BB: ch = 0x8B; break;
+ case 0x00BC: ch = 0xB7; break;
+ case 0x00BD: ch = 0xB8; break;
+ case 0x00BE: ch = 0xB9; break;
+ case 0x00BF: ch = 0xAB; break;
+ case 0x00C0: ch = 0x64; break;
+ case 0x00C1: ch = 0x65; break;
+ case 0x00C2: ch = 0x62; break;
+ case 0x00C3: ch = 0x66; break;
+ case 0x00C4: ch = 0x63; break;
+ case 0x00C5: ch = 0x67; break;
+ case 0x00C6: ch = 0x5A; break;
+ case 0x00C7: ch = 0x68; break;
+ case 0x00C8: ch = 0x74; break;
+ case 0x00C9: ch = 0x71; break;
+ case 0x00CA: ch = 0x72; break;
+ case 0x00CB: ch = 0x73; break;
+ case 0x00CC: ch = 0x78; break;
+ case 0x00CD: ch = 0x75; break;
+ case 0x00CE: ch = 0x76; break;
+ case 0x00CF: ch = 0x77; break;
+ case 0x00D0: ch = 0x7C; break;
+ case 0x00D1: ch = 0x69; break;
+ case 0x00D2: ch = 0xED; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEB; break;
+ case 0x00D5: ch = 0xEF; break;
+ case 0x00D6: ch = 0x5F; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00D8: ch = 0x80; break;
+ case 0x00D9: ch = 0xFD; break;
+ case 0x00DA: ch = 0xFE; break;
+ case 0x00DB: ch = 0xFB; break;
+ case 0x00DC: ch = 0xFC; break;
+ case 0x00DD: ch = 0xAD; break;
+ case 0x00DE: ch = 0x4A; break;
+ case 0x00DF: ch = 0x59; break;
+ case 0x00E0: ch = 0x44; break;
+ case 0x00E1: ch = 0x45; break;
+ case 0x00E2: ch = 0x42; break;
+ case 0x00E3: ch = 0x46; break;
+ case 0x00E4: ch = 0x43; break;
+ case 0x00E5: ch = 0x47; break;
+ case 0x00E6: ch = 0xD0; break;
+ case 0x00E7: ch = 0x48; break;
+ case 0x00E8: ch = 0x54; break;
+ case 0x00E9: ch = 0x51; break;
+ case 0x00EA: ch = 0x52; break;
+ case 0x00EB: ch = 0x53; break;
+ case 0x00EC: ch = 0x58; break;
+ case 0x00ED: ch = 0x55; break;
+ case 0x00EE: ch = 0x56; break;
+ case 0x00EF: ch = 0x57; break;
+ case 0x00F0: ch = 0x79; break;
+ case 0x00F1: ch = 0x49; break;
+ case 0x00F2: ch = 0xCD; break;
+ case 0x00F3: ch = 0xCE; break;
+ case 0x00F4: ch = 0xCB; break;
+ case 0x00F5: ch = 0xCF; break;
+ case 0x00F6: ch = 0xA1; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x00F8: ch = 0x70; break;
+ case 0x00F9: ch = 0xDD; break;
+ case 0x00FA: ch = 0xDE; break;
+ case 0x00FB: ch = 0xDB; break;
+ case 0x00FC: ch = 0xDC; break;
+ case 0x00FD: ch = 0x8D; break;
+ case 0x00FE: ch = 0xC0; break;
+ case 0x00FF: ch = 0xDF; break;
+ case 0x0110: ch = 0x7C; break;
+ case 0x203E: ch = 0xBC; break;
+ case 0xFF01: ch = 0x4F; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0x7B; break;
+ case 0xFF04: ch = 0x5B; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0xAC; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0xAE; break;
+ case 0xFF3C: ch = 0xBE; break;
+ case 0xFF3D: ch = 0x9E; break;
+ case 0xFF3E: ch = 0xEC; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0x8C; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0x8E; break;
+ case 0xFF5C: ch = 0xBB; break;
+ case 0xFF5D: ch = 0x9C; break;
+ case 0xFF5E: ch = 0xCC; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x00B6:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x4F; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0x7B; break;
+ case 0x0024: ch = 0x5B; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0xAC; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0xAE; break;
+ case 0x005C: ch = 0xBE; break;
+ case 0x005D: ch = 0x9E; break;
+ case 0x005E: ch = 0xEC; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0x8C; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0x8E; break;
+ case 0x007C: ch = 0xBB; break;
+ case 0x007D: ch = 0x9C; break;
+ case 0x007E: ch = 0xCC; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A1: ch = 0xAA; break;
+ case 0x00A2: ch = 0xB0; break;
+ case 0x00A3: ch = 0xB1; break;
+ case 0x00A4: ch = 0x9F; break;
+ case 0x00A5: ch = 0xB2; break;
+ case 0x00A6: ch = 0x6A; break;
+ case 0x00A7: ch = 0xB5; break;
+ case 0x00A8: ch = 0xBD; break;
+ case 0x00A9: ch = 0xB4; break;
+ case 0x00AA: ch = 0x9A; break;
+ case 0x00AB: ch = 0x8A; break;
+ case 0x00AC: ch = 0xBA; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00AE: ch = 0xAF; break;
+ case 0x00AF: ch = 0xBC; break;
+ case 0x00B0: ch = 0x90; break;
+ case 0x00B1: ch = 0x8F; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xE0; break;
+ case 0x00B5: ch = 0xA0; break;
+ case 0x00B7: ch = 0xB3; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00B9: ch = 0xDA; break;
+ case 0x00BA: ch = 0x9B; break;
+ case 0x00BB: ch = 0x8B; break;
+ case 0x00BC: ch = 0xB7; break;
+ case 0x00BD: ch = 0xB8; break;
+ case 0x00BE: ch = 0xB9; break;
+ case 0x00BF: ch = 0xAB; break;
+ case 0x00C0: ch = 0x64; break;
+ case 0x00C1: ch = 0x65; break;
+ case 0x00C2: ch = 0x62; break;
+ case 0x00C3: ch = 0x66; break;
+ case 0x00C4: ch = 0x63; break;
+ case 0x00C5: ch = 0x67; break;
+ case 0x00C6: ch = 0x5A; break;
+ case 0x00C7: ch = 0x68; break;
+ case 0x00C8: ch = 0x74; break;
+ case 0x00C9: ch = 0x71; break;
+ case 0x00CA: ch = 0x72; break;
+ case 0x00CB: ch = 0x73; break;
+ case 0x00CC: ch = 0x78; break;
+ case 0x00CD: ch = 0x75; break;
+ case 0x00CE: ch = 0x76; break;
+ case 0x00CF: ch = 0x77; break;
+ case 0x00D0: ch = 0x7C; break;
+ case 0x00D1: ch = 0x69; break;
+ case 0x00D2: ch = 0xED; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEB; break;
+ case 0x00D5: ch = 0xEF; break;
+ case 0x00D6: ch = 0x5F; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00D8: ch = 0x80; break;
+ case 0x00D9: ch = 0xFD; break;
+ case 0x00DA: ch = 0xFE; break;
+ case 0x00DB: ch = 0xFB; break;
+ case 0x00DC: ch = 0xFC; break;
+ case 0x00DD: ch = 0xAD; break;
+ case 0x00DE: ch = 0x4A; break;
+ case 0x00DF: ch = 0x59; break;
+ case 0x00E0: ch = 0x44; break;
+ case 0x00E1: ch = 0x45; break;
+ case 0x00E2: ch = 0x42; break;
+ case 0x00E3: ch = 0x46; break;
+ case 0x00E4: ch = 0x43; break;
+ case 0x00E5: ch = 0x47; break;
+ case 0x00E6: ch = 0xD0; break;
+ case 0x00E7: ch = 0x48; break;
+ case 0x00E8: ch = 0x54; break;
+ case 0x00E9: ch = 0x51; break;
+ case 0x00EA: ch = 0x52; break;
+ case 0x00EB: ch = 0x53; break;
+ case 0x00EC: ch = 0x58; break;
+ case 0x00ED: ch = 0x55; break;
+ case 0x00EE: ch = 0x56; break;
+ case 0x00EF: ch = 0x57; break;
+ case 0x00F0: ch = 0x79; break;
+ case 0x00F1: ch = 0x49; break;
+ case 0x00F2: ch = 0xCD; break;
+ case 0x00F3: ch = 0xCE; break;
+ case 0x00F4: ch = 0xCB; break;
+ case 0x00F5: ch = 0xCF; break;
+ case 0x00F6: ch = 0xA1; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x00F8: ch = 0x70; break;
+ case 0x00F9: ch = 0xDD; break;
+ case 0x00FA: ch = 0xDE; break;
+ case 0x00FB: ch = 0xDB; break;
+ case 0x00FC: ch = 0xDC; break;
+ case 0x00FD: ch = 0x8D; break;
+ case 0x00FE: ch = 0xC0; break;
+ case 0x00FF: ch = 0xDF; break;
+ case 0x0110: ch = 0x7C; break;
+ case 0x203E: ch = 0xBC; break;
+ case 0xFF01: ch = 0x4F; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0x7B; break;
+ case 0xFF04: ch = 0x5B; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0xAC; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0xAE; break;
+ case 0xFF3C: ch = 0xBE; break;
+ case 0xFF3D: ch = 0x9E; break;
+ case 0xFF3E: ch = 0xEC; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0x8C; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0x8E; break;
+ case 0xFF5C: ch = 0xBB; break;
+ case 0xFF5D: ch = 0x9C; break;
+ case 0xFF5E: ch = 0xCC; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP20871
+
+public class ENCibm871 : CP20871
+{
+ public ENCibm871() : base() {}
+
+}; // class ENCibm871
+
+}; // namespace I18N.Rare
diff --git a/mcs/class/I18N/Rare/CP21025.cs b/mcs/class/I18N/Rare/CP21025.cs
new file mode 100644
index 00000000000..8285d1ba3a4
--- /dev/null
+++ b/mcs/class/I18N/Rare/CP21025.cs
@@ -0,0 +1,917 @@
+/*
+ * CP21025.cs - IBM EBCDIC (Cyrillic - Serbian, Bulgarian) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-1025.ucm".
+
+namespace I18N.Rare
+{
+
+using System;
+using I18N.Common;
+
+public class CP21025 : ByteEncoding
+{
+ public CP21025()
+ : base(21025, ToChars, "IBM EBCDIC (Cyrillic - Serbian, Bulgarian)",
+ "IBM1025", "IBM1025", "IBM1025",
+ false, false, false, false, 1257)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u009C', '\u0009',
+ '\u0086', '\u007F', '\u0097', '\u008D', '\u008E', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u009D', '\u0085', '\u0008', '\u0087',
+ '\u0018', '\u0019', '\u0092', '\u008F', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0080', '\u0081', '\u0082', '\u0083',
+ '\u0084', '\u000A', '\u0017', '\u001B', '\u0088', '\u0089',
+ '\u008A', '\u008B', '\u008C', '\u0005', '\u0006', '\u0007',
+ '\u0090', '\u0091', '\u0016', '\u0093', '\u0094', '\u0095',
+ '\u0096', '\u0004', '\u0098', '\u0099', '\u009A', '\u009B',
+ '\u0014', '\u0015', '\u009E', '\u001A', '\u0020', '\u00A0',
+ '\u0452', '\u0453', '\u0451', '\u0454', '\u0455', '\u0456',
+ '\u0457', '\u0458', '\u005B', '\u002E', '\u003C', '\u0028',
+ '\u002B', '\u0021', '\u0026', '\u0459', '\u045A', '\u045B',
+ '\u045C', '\u045E', '\u045F', '\u042A', '\u2116', '\u0402',
+ '\u005D', '\u0024', '\u002A', '\u0029', '\u003B', '\u005E',
+ '\u002D', '\u002F', '\u0403', '\u0401', '\u0404', '\u0405',
+ '\u0406', '\u0407', '\u0408', '\u0409', '\u007C', '\u002C',
+ '\u0025', '\u005F', '\u003E', '\u003F', '\u040A', '\u040B',
+ '\u040C', '\u00AD', '\u040E', '\u040F', '\u044E', '\u0430',
+ '\u0431', '\u0060', '\u003A', '\u0023', '\u0040', '\u0027',
+ '\u003D', '\u0022', '\u0446', '\u0061', '\u0062', '\u0063',
+ '\u0064', '\u0065', '\u0066', '\u0067', '\u0068', '\u0069',
+ '\u0434', '\u0435', '\u0444', '\u0433', '\u0445', '\u0438',
+ '\u0439', '\u006A', '\u006B', '\u006C', '\u006D', '\u006E',
+ '\u006F', '\u0070', '\u0071', '\u0072', '\u043A', '\u043B',
+ '\u043C', '\u043D', '\u043E', '\u043F', '\u044F', '\u007E',
+ '\u0073', '\u0074', '\u0075', '\u0076', '\u0077', '\u0078',
+ '\u0079', '\u007A', '\u0440', '\u0441', '\u0442', '\u0443',
+ '\u0436', '\u0432', '\u044C', '\u044B', '\u0437', '\u0448',
+ '\u044D', '\u0449', '\u0447', '\u044A', '\u042E', '\u0410',
+ '\u0411', '\u0426', '\u0414', '\u0415', '\u0424', '\u0413',
+ '\u007B', '\u0041', '\u0042', '\u0043', '\u0044', '\u0045',
+ '\u0046', '\u0047', '\u0048', '\u0049', '\u0425', '\u0418',
+ '\u0419', '\u041A', '\u041B', '\u041C', '\u007D', '\u004A',
+ '\u004B', '\u004C', '\u004D', '\u004E', '\u004F', '\u0050',
+ '\u0051', '\u0052', '\u041D', '\u041E', '\u041F', '\u042F',
+ '\u0420', '\u0421', '\u005C', '\u00A7', '\u0053', '\u0054',
+ '\u0055', '\u0056', '\u0057', '\u0058', '\u0059', '\u005A',
+ '\u0422', '\u0423', '\u0416', '\u0412', '\u042C', '\u042B',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u0417', '\u0428',
+ '\u042D', '\u0429', '\u0427', '\u009F',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x4F; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0x7B; break;
+ case 0x0024: ch = 0x5B; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0x7C; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0x4A; break;
+ case 0x005C: ch = 0xE0; break;
+ case 0x005D: ch = 0x5A; break;
+ case 0x005E: ch = 0x5F; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0x79; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0xC0; break;
+ case 0x007C: ch = 0x6A; break;
+ case 0x007D: ch = 0xD0; break;
+ case 0x007E: ch = 0xA1; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A7: ch = 0xE1; break;
+ case 0x00AD: ch = 0x73; break;
+ case 0x0401: ch = 0x63; break;
+ case 0x0402: ch = 0x59; break;
+ case 0x0403: ch = 0x62; break;
+ case 0x0404:
+ case 0x0405:
+ case 0x0406:
+ case 0x0407:
+ case 0x0408:
+ case 0x0409:
+ ch -= 0x03A0;
+ break;
+ case 0x040A: ch = 0x70; break;
+ case 0x040B: ch = 0x71; break;
+ case 0x040C: ch = 0x72; break;
+ case 0x040E: ch = 0x74; break;
+ case 0x040F: ch = 0x75; break;
+ case 0x0410: ch = 0xB9; break;
+ case 0x0411: ch = 0xBA; break;
+ case 0x0412: ch = 0xED; break;
+ case 0x0413: ch = 0xBF; break;
+ case 0x0414: ch = 0xBC; break;
+ case 0x0415: ch = 0xBD; break;
+ case 0x0416: ch = 0xEC; break;
+ case 0x0417: ch = 0xFA; break;
+ case 0x0418:
+ case 0x0419:
+ case 0x041A:
+ case 0x041B:
+ case 0x041C:
+ ch -= 0x034D;
+ break;
+ case 0x041D: ch = 0xDA; break;
+ case 0x041E: ch = 0xDB; break;
+ case 0x041F: ch = 0xDC; break;
+ case 0x0420: ch = 0xDE; break;
+ case 0x0421: ch = 0xDF; break;
+ case 0x0422: ch = 0xEA; break;
+ case 0x0423: ch = 0xEB; break;
+ case 0x0424: ch = 0xBE; break;
+ case 0x0425: ch = 0xCA; break;
+ case 0x0426: ch = 0xBB; break;
+ case 0x0427: ch = 0xFE; break;
+ case 0x0428: ch = 0xFB; break;
+ case 0x0429: ch = 0xFD; break;
+ case 0x042A: ch = 0x57; break;
+ case 0x042B: ch = 0xEF; break;
+ case 0x042C: ch = 0xEE; break;
+ case 0x042D: ch = 0xFC; break;
+ case 0x042E: ch = 0xB8; break;
+ case 0x042F: ch = 0xDD; break;
+ case 0x0430: ch = 0x77; break;
+ case 0x0431: ch = 0x78; break;
+ case 0x0432: ch = 0xAF; break;
+ case 0x0433: ch = 0x8D; break;
+ case 0x0434: ch = 0x8A; break;
+ case 0x0435: ch = 0x8B; break;
+ case 0x0436: ch = 0xAE; break;
+ case 0x0437: ch = 0xB2; break;
+ case 0x0438: ch = 0x8F; break;
+ case 0x0439: ch = 0x90; break;
+ case 0x043A:
+ case 0x043B:
+ case 0x043C:
+ case 0x043D:
+ case 0x043E:
+ case 0x043F:
+ ch -= 0x03A0;
+ break;
+ case 0x0440:
+ case 0x0441:
+ case 0x0442:
+ case 0x0443:
+ ch -= 0x0396;
+ break;
+ case 0x0444: ch = 0x8C; break;
+ case 0x0445: ch = 0x8E; break;
+ case 0x0446: ch = 0x80; break;
+ case 0x0447: ch = 0xB6; break;
+ case 0x0448: ch = 0xB3; break;
+ case 0x0449: ch = 0xB5; break;
+ case 0x044A: ch = 0xB7; break;
+ case 0x044B: ch = 0xB1; break;
+ case 0x044C: ch = 0xB0; break;
+ case 0x044D: ch = 0xB4; break;
+ case 0x044E: ch = 0x76; break;
+ case 0x044F: ch = 0xA0; break;
+ case 0x0451: ch = 0x44; break;
+ case 0x0452: ch = 0x42; break;
+ case 0x0453: ch = 0x43; break;
+ case 0x0454:
+ case 0x0455:
+ case 0x0456:
+ case 0x0457:
+ case 0x0458:
+ ch -= 0x040F;
+ break;
+ case 0x0459:
+ case 0x045A:
+ case 0x045B:
+ case 0x045C:
+ ch -= 0x0408;
+ break;
+ case 0x045E: ch = 0x55; break;
+ case 0x045F: ch = 0x56; break;
+ case 0x2116: ch = 0x58; break;
+ case 0xFF01: ch = 0x4F; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0x7B; break;
+ case 0xFF04: ch = 0x5B; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0x7C; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0x4A; break;
+ case 0xFF3C: ch = 0xE0; break;
+ case 0xFF3D: ch = 0x5A; break;
+ case 0xFF3E: ch = 0x5F; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0x79; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0xC0; break;
+ case 0xFF5C: ch = 0x6A; break;
+ case 0xFF5D: ch = 0xD0; break;
+ case 0xFF5E: ch = 0xA1; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x4F; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0x7B; break;
+ case 0x0024: ch = 0x5B; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0x7C; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0x4A; break;
+ case 0x005C: ch = 0xE0; break;
+ case 0x005D: ch = 0x5A; break;
+ case 0x005E: ch = 0x5F; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0x79; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0xC0; break;
+ case 0x007C: ch = 0x6A; break;
+ case 0x007D: ch = 0xD0; break;
+ case 0x007E: ch = 0xA1; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A7: ch = 0xE1; break;
+ case 0x00AD: ch = 0x73; break;
+ case 0x0401: ch = 0x63; break;
+ case 0x0402: ch = 0x59; break;
+ case 0x0403: ch = 0x62; break;
+ case 0x0404:
+ case 0x0405:
+ case 0x0406:
+ case 0x0407:
+ case 0x0408:
+ case 0x0409:
+ ch -= 0x03A0;
+ break;
+ case 0x040A: ch = 0x70; break;
+ case 0x040B: ch = 0x71; break;
+ case 0x040C: ch = 0x72; break;
+ case 0x040E: ch = 0x74; break;
+ case 0x040F: ch = 0x75; break;
+ case 0x0410: ch = 0xB9; break;
+ case 0x0411: ch = 0xBA; break;
+ case 0x0412: ch = 0xED; break;
+ case 0x0413: ch = 0xBF; break;
+ case 0x0414: ch = 0xBC; break;
+ case 0x0415: ch = 0xBD; break;
+ case 0x0416: ch = 0xEC; break;
+ case 0x0417: ch = 0xFA; break;
+ case 0x0418:
+ case 0x0419:
+ case 0x041A:
+ case 0x041B:
+ case 0x041C:
+ ch -= 0x034D;
+ break;
+ case 0x041D: ch = 0xDA; break;
+ case 0x041E: ch = 0xDB; break;
+ case 0x041F: ch = 0xDC; break;
+ case 0x0420: ch = 0xDE; break;
+ case 0x0421: ch = 0xDF; break;
+ case 0x0422: ch = 0xEA; break;
+ case 0x0423: ch = 0xEB; break;
+ case 0x0424: ch = 0xBE; break;
+ case 0x0425: ch = 0xCA; break;
+ case 0x0426: ch = 0xBB; break;
+ case 0x0427: ch = 0xFE; break;
+ case 0x0428: ch = 0xFB; break;
+ case 0x0429: ch = 0xFD; break;
+ case 0x042A: ch = 0x57; break;
+ case 0x042B: ch = 0xEF; break;
+ case 0x042C: ch = 0xEE; break;
+ case 0x042D: ch = 0xFC; break;
+ case 0x042E: ch = 0xB8; break;
+ case 0x042F: ch = 0xDD; break;
+ case 0x0430: ch = 0x77; break;
+ case 0x0431: ch = 0x78; break;
+ case 0x0432: ch = 0xAF; break;
+ case 0x0433: ch = 0x8D; break;
+ case 0x0434: ch = 0x8A; break;
+ case 0x0435: ch = 0x8B; break;
+ case 0x0436: ch = 0xAE; break;
+ case 0x0437: ch = 0xB2; break;
+ case 0x0438: ch = 0x8F; break;
+ case 0x0439: ch = 0x90; break;
+ case 0x043A:
+ case 0x043B:
+ case 0x043C:
+ case 0x043D:
+ case 0x043E:
+ case 0x043F:
+ ch -= 0x03A0;
+ break;
+ case 0x0440:
+ case 0x0441:
+ case 0x0442:
+ case 0x0443:
+ ch -= 0x0396;
+ break;
+ case 0x0444: ch = 0x8C; break;
+ case 0x0445: ch = 0x8E; break;
+ case 0x0446: ch = 0x80; break;
+ case 0x0447: ch = 0xB6; break;
+ case 0x0448: ch = 0xB3; break;
+ case 0x0449: ch = 0xB5; break;
+ case 0x044A: ch = 0xB7; break;
+ case 0x044B: ch = 0xB1; break;
+ case 0x044C: ch = 0xB0; break;
+ case 0x044D: ch = 0xB4; break;
+ case 0x044E: ch = 0x76; break;
+ case 0x044F: ch = 0xA0; break;
+ case 0x0451: ch = 0x44; break;
+ case 0x0452: ch = 0x42; break;
+ case 0x0453: ch = 0x43; break;
+ case 0x0454:
+ case 0x0455:
+ case 0x0456:
+ case 0x0457:
+ case 0x0458:
+ ch -= 0x040F;
+ break;
+ case 0x0459:
+ case 0x045A:
+ case 0x045B:
+ case 0x045C:
+ ch -= 0x0408;
+ break;
+ case 0x045E: ch = 0x55; break;
+ case 0x045F: ch = 0x56; break;
+ case 0x2116: ch = 0x58; break;
+ case 0xFF01: ch = 0x4F; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0x7B; break;
+ case 0xFF04: ch = 0x5B; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0x7C; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0x4A; break;
+ case 0xFF3C: ch = 0xE0; break;
+ case 0xFF3D: ch = 0x5A; break;
+ case 0xFF3E: ch = 0x5F; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0x79; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0xC0; break;
+ case 0xFF5C: ch = 0x6A; break;
+ case 0xFF5D: ch = 0xD0; break;
+ case 0xFF5E: ch = 0xA1; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP21025
+
+public class ENCibm1025 : CP21025
+{
+ public ENCibm1025() : base() {}
+
+}; // class ENCibm1025
+
+}; // namespace I18N.Rare
diff --git a/mcs/class/I18N/Rare/CP37.cs b/mcs/class/I18N/Rare/CP37.cs
new file mode 100644
index 00000000000..e7c7da24d5b
--- /dev/null
+++ b/mcs/class/I18N/Rare/CP37.cs
@@ -0,0 +1,897 @@
+/*
+ * CP37.cs - IBM EBCDIC (US-Canada) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-37.ucm".
+
+namespace I18N.Rare
+{
+
+using System;
+using I18N.Common;
+
+public class CP37 : ByteEncoding
+{
+ public CP37()
+ : base(37, ToChars, "IBM EBCDIC (US-Canada)",
+ "IBM037", "IBM037", "IBM037",
+ false, false, false, false, 1252)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u009C', '\u0009',
+ '\u0086', '\u007F', '\u0097', '\u008D', '\u008E', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u009D', '\u0085', '\u0008', '\u0087',
+ '\u0018', '\u0019', '\u0092', '\u008F', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0080', '\u0081', '\u0082', '\u0083',
+ '\u0084', '\u000A', '\u0017', '\u001B', '\u0088', '\u0089',
+ '\u008A', '\u008B', '\u008C', '\u0005', '\u0006', '\u0007',
+ '\u0090', '\u0091', '\u0016', '\u0093', '\u0094', '\u0095',
+ '\u0096', '\u0004', '\u0098', '\u0099', '\u009A', '\u009B',
+ '\u0014', '\u0015', '\u009E', '\u001A', '\u0020', '\u00A0',
+ '\u00E2', '\u00E4', '\u00E0', '\u00E1', '\u00E3', '\u00E5',
+ '\u00E7', '\u00F1', '\u00A2', '\u002E', '\u003C', '\u0028',
+ '\u002B', '\u007C', '\u0026', '\u00E9', '\u00EA', '\u00EB',
+ '\u00E8', '\u00ED', '\u00EE', '\u00EF', '\u00EC', '\u00DF',
+ '\u0021', '\u0024', '\u002A', '\u0029', '\u003B', '\u00AC',
+ '\u002D', '\u002F', '\u00C2', '\u00C4', '\u00C0', '\u00C1',
+ '\u00C3', '\u00C5', '\u00C7', '\u00D1', '\u00A6', '\u002C',
+ '\u0025', '\u005F', '\u003E', '\u003F', '\u00F8', '\u00C9',
+ '\u00CA', '\u00CB', '\u00C8', '\u00CD', '\u00CE', '\u00CF',
+ '\u00CC', '\u0060', '\u003A', '\u0023', '\u0040', '\u0027',
+ '\u003D', '\u0022', '\u00D8', '\u0061', '\u0062', '\u0063',
+ '\u0064', '\u0065', '\u0066', '\u0067', '\u0068', '\u0069',
+ '\u00AB', '\u00BB', '\u00F0', '\u00FD', '\u00FE', '\u00B1',
+ '\u00B0', '\u006A', '\u006B', '\u006C', '\u006D', '\u006E',
+ '\u006F', '\u0070', '\u0071', '\u0072', '\u00AA', '\u00BA',
+ '\u00E6', '\u00B8', '\u00C6', '\u00A4', '\u00B5', '\u007E',
+ '\u0073', '\u0074', '\u0075', '\u0076', '\u0077', '\u0078',
+ '\u0079', '\u007A', '\u00A1', '\u00BF', '\u00D0', '\u00DD',
+ '\u00DE', '\u00AE', '\u005E', '\u00A3', '\u00A5', '\u00B7',
+ '\u00A9', '\u00A7', '\u00B6', '\u00BC', '\u00BD', '\u00BE',
+ '\u005B', '\u005D', '\u00AF', '\u00A8', '\u00B4', '\u00D7',
+ '\u007B', '\u0041', '\u0042', '\u0043', '\u0044', '\u0045',
+ '\u0046', '\u0047', '\u0048', '\u0049', '\u00AD', '\u00F4',
+ '\u00F6', '\u00F2', '\u00F3', '\u00F5', '\u007D', '\u004A',
+ '\u004B', '\u004C', '\u004D', '\u004E', '\u004F', '\u0050',
+ '\u0051', '\u0052', '\u00B9', '\u00FB', '\u00FC', '\u00F9',
+ '\u00FA', '\u00FF', '\u005C', '\u00F7', '\u0053', '\u0054',
+ '\u0055', '\u0056', '\u0057', '\u0058', '\u0059', '\u005A',
+ '\u00B2', '\u00D4', '\u00D6', '\u00D2', '\u00D3', '\u00D5',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u00B3', '\u00DB',
+ '\u00DC', '\u00D9', '\u00DA', '\u009F',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x00B6:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x5A; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0x7B; break;
+ case 0x0024: ch = 0x5B; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0x7C; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0xBA; break;
+ case 0x005C: ch = 0xE0; break;
+ case 0x005D: ch = 0xBB; break;
+ case 0x005E: ch = 0xB0; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0x79; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0xC0; break;
+ case 0x007C: ch = 0x4F; break;
+ case 0x007D: ch = 0xD0; break;
+ case 0x007E: ch = 0xA1; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A1: ch = 0xAA; break;
+ case 0x00A2: ch = 0x4A; break;
+ case 0x00A3: ch = 0xB1; break;
+ case 0x00A4: ch = 0x9F; break;
+ case 0x00A5: ch = 0xB2; break;
+ case 0x00A6: ch = 0x6A; break;
+ case 0x00A7: ch = 0xB5; break;
+ case 0x00A8: ch = 0xBD; break;
+ case 0x00A9: ch = 0xB4; break;
+ case 0x00AA: ch = 0x9A; break;
+ case 0x00AB: ch = 0x8A; break;
+ case 0x00AC: ch = 0x5F; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00AE: ch = 0xAF; break;
+ case 0x00AF: ch = 0xBC; break;
+ case 0x00B0: ch = 0x90; break;
+ case 0x00B1: ch = 0x8F; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xBE; break;
+ case 0x00B5: ch = 0xA0; break;
+ case 0x00B7: ch = 0xB3; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00B9: ch = 0xDA; break;
+ case 0x00BA: ch = 0x9B; break;
+ case 0x00BB: ch = 0x8B; break;
+ case 0x00BC: ch = 0xB7; break;
+ case 0x00BD: ch = 0xB8; break;
+ case 0x00BE: ch = 0xB9; break;
+ case 0x00BF: ch = 0xAB; break;
+ case 0x00C0: ch = 0x64; break;
+ case 0x00C1: ch = 0x65; break;
+ case 0x00C2: ch = 0x62; break;
+ case 0x00C3: ch = 0x66; break;
+ case 0x00C4: ch = 0x63; break;
+ case 0x00C5: ch = 0x67; break;
+ case 0x00C6: ch = 0x9E; break;
+ case 0x00C7: ch = 0x68; break;
+ case 0x00C8: ch = 0x74; break;
+ case 0x00C9: ch = 0x71; break;
+ case 0x00CA: ch = 0x72; break;
+ case 0x00CB: ch = 0x73; break;
+ case 0x00CC: ch = 0x78; break;
+ case 0x00CD: ch = 0x75; break;
+ case 0x00CE: ch = 0x76; break;
+ case 0x00CF: ch = 0x77; break;
+ case 0x00D0: ch = 0xAC; break;
+ case 0x00D1: ch = 0x69; break;
+ case 0x00D2: ch = 0xED; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEB; break;
+ case 0x00D5: ch = 0xEF; break;
+ case 0x00D6: ch = 0xEC; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00D8: ch = 0x80; break;
+ case 0x00D9: ch = 0xFD; break;
+ case 0x00DA: ch = 0xFE; break;
+ case 0x00DB: ch = 0xFB; break;
+ case 0x00DC: ch = 0xFC; break;
+ case 0x00DD: ch = 0xAD; break;
+ case 0x00DE: ch = 0xAE; break;
+ case 0x00DF: ch = 0x59; break;
+ case 0x00E0: ch = 0x44; break;
+ case 0x00E1: ch = 0x45; break;
+ case 0x00E2: ch = 0x42; break;
+ case 0x00E3: ch = 0x46; break;
+ case 0x00E4: ch = 0x43; break;
+ case 0x00E5: ch = 0x47; break;
+ case 0x00E6: ch = 0x9C; break;
+ case 0x00E7: ch = 0x48; break;
+ case 0x00E8: ch = 0x54; break;
+ case 0x00E9: ch = 0x51; break;
+ case 0x00EA: ch = 0x52; break;
+ case 0x00EB: ch = 0x53; break;
+ case 0x00EC: ch = 0x58; break;
+ case 0x00ED: ch = 0x55; break;
+ case 0x00EE: ch = 0x56; break;
+ case 0x00EF: ch = 0x57; break;
+ case 0x00F0: ch = 0x8C; break;
+ case 0x00F1: ch = 0x49; break;
+ case 0x00F2: ch = 0xCD; break;
+ case 0x00F3: ch = 0xCE; break;
+ case 0x00F4: ch = 0xCB; break;
+ case 0x00F5: ch = 0xCF; break;
+ case 0x00F6: ch = 0xCC; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x00F8: ch = 0x70; break;
+ case 0x00F9: ch = 0xDD; break;
+ case 0x00FA: ch = 0xDE; break;
+ case 0x00FB: ch = 0xDB; break;
+ case 0x00FC: ch = 0xDC; break;
+ case 0x00FD: ch = 0x8D; break;
+ case 0x00FE: ch = 0x8E; break;
+ case 0x00FF: ch = 0xDF; break;
+ case 0x0110: ch = 0xAC; break;
+ case 0x203E: ch = 0xBC; break;
+ case 0xFF01: ch = 0x5A; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0x7B; break;
+ case 0xFF04: ch = 0x5B; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0x7C; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0xBA; break;
+ case 0xFF3C: ch = 0xE0; break;
+ case 0xFF3D: ch = 0xBB; break;
+ case 0xFF3E: ch = 0xB0; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0x79; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0xC0; break;
+ case 0xFF5C: ch = 0x4F; break;
+ case 0xFF5D: ch = 0xD0; break;
+ case 0xFF5E: ch = 0xA1; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x00B6:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x5A; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0x7B; break;
+ case 0x0024: ch = 0x5B; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0x7C; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0xBA; break;
+ case 0x005C: ch = 0xE0; break;
+ case 0x005D: ch = 0xBB; break;
+ case 0x005E: ch = 0xB0; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0x79; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0xC0; break;
+ case 0x007C: ch = 0x4F; break;
+ case 0x007D: ch = 0xD0; break;
+ case 0x007E: ch = 0xA1; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A1: ch = 0xAA; break;
+ case 0x00A2: ch = 0x4A; break;
+ case 0x00A3: ch = 0xB1; break;
+ case 0x00A4: ch = 0x9F; break;
+ case 0x00A5: ch = 0xB2; break;
+ case 0x00A6: ch = 0x6A; break;
+ case 0x00A7: ch = 0xB5; break;
+ case 0x00A8: ch = 0xBD; break;
+ case 0x00A9: ch = 0xB4; break;
+ case 0x00AA: ch = 0x9A; break;
+ case 0x00AB: ch = 0x8A; break;
+ case 0x00AC: ch = 0x5F; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00AE: ch = 0xAF; break;
+ case 0x00AF: ch = 0xBC; break;
+ case 0x00B0: ch = 0x90; break;
+ case 0x00B1: ch = 0x8F; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xBE; break;
+ case 0x00B5: ch = 0xA0; break;
+ case 0x00B7: ch = 0xB3; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00B9: ch = 0xDA; break;
+ case 0x00BA: ch = 0x9B; break;
+ case 0x00BB: ch = 0x8B; break;
+ case 0x00BC: ch = 0xB7; break;
+ case 0x00BD: ch = 0xB8; break;
+ case 0x00BE: ch = 0xB9; break;
+ case 0x00BF: ch = 0xAB; break;
+ case 0x00C0: ch = 0x64; break;
+ case 0x00C1: ch = 0x65; break;
+ case 0x00C2: ch = 0x62; break;
+ case 0x00C3: ch = 0x66; break;
+ case 0x00C4: ch = 0x63; break;
+ case 0x00C5: ch = 0x67; break;
+ case 0x00C6: ch = 0x9E; break;
+ case 0x00C7: ch = 0x68; break;
+ case 0x00C8: ch = 0x74; break;
+ case 0x00C9: ch = 0x71; break;
+ case 0x00CA: ch = 0x72; break;
+ case 0x00CB: ch = 0x73; break;
+ case 0x00CC: ch = 0x78; break;
+ case 0x00CD: ch = 0x75; break;
+ case 0x00CE: ch = 0x76; break;
+ case 0x00CF: ch = 0x77; break;
+ case 0x00D0: ch = 0xAC; break;
+ case 0x00D1: ch = 0x69; break;
+ case 0x00D2: ch = 0xED; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEB; break;
+ case 0x00D5: ch = 0xEF; break;
+ case 0x00D6: ch = 0xEC; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00D8: ch = 0x80; break;
+ case 0x00D9: ch = 0xFD; break;
+ case 0x00DA: ch = 0xFE; break;
+ case 0x00DB: ch = 0xFB; break;
+ case 0x00DC: ch = 0xFC; break;
+ case 0x00DD: ch = 0xAD; break;
+ case 0x00DE: ch = 0xAE; break;
+ case 0x00DF: ch = 0x59; break;
+ case 0x00E0: ch = 0x44; break;
+ case 0x00E1: ch = 0x45; break;
+ case 0x00E2: ch = 0x42; break;
+ case 0x00E3: ch = 0x46; break;
+ case 0x00E4: ch = 0x43; break;
+ case 0x00E5: ch = 0x47; break;
+ case 0x00E6: ch = 0x9C; break;
+ case 0x00E7: ch = 0x48; break;
+ case 0x00E8: ch = 0x54; break;
+ case 0x00E9: ch = 0x51; break;
+ case 0x00EA: ch = 0x52; break;
+ case 0x00EB: ch = 0x53; break;
+ case 0x00EC: ch = 0x58; break;
+ case 0x00ED: ch = 0x55; break;
+ case 0x00EE: ch = 0x56; break;
+ case 0x00EF: ch = 0x57; break;
+ case 0x00F0: ch = 0x8C; break;
+ case 0x00F1: ch = 0x49; break;
+ case 0x00F2: ch = 0xCD; break;
+ case 0x00F3: ch = 0xCE; break;
+ case 0x00F4: ch = 0xCB; break;
+ case 0x00F5: ch = 0xCF; break;
+ case 0x00F6: ch = 0xCC; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x00F8: ch = 0x70; break;
+ case 0x00F9: ch = 0xDD; break;
+ case 0x00FA: ch = 0xDE; break;
+ case 0x00FB: ch = 0xDB; break;
+ case 0x00FC: ch = 0xDC; break;
+ case 0x00FD: ch = 0x8D; break;
+ case 0x00FE: ch = 0x8E; break;
+ case 0x00FF: ch = 0xDF; break;
+ case 0x0110: ch = 0xAC; break;
+ case 0x203E: ch = 0xBC; break;
+ case 0xFF01: ch = 0x5A; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0x7B; break;
+ case 0xFF04: ch = 0x5B; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0x7C; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0xBA; break;
+ case 0xFF3C: ch = 0xE0; break;
+ case 0xFF3D: ch = 0xBB; break;
+ case 0xFF3E: ch = 0xB0; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0x79; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0xC0; break;
+ case 0xFF5C: ch = 0x4F; break;
+ case 0xFF5D: ch = 0xD0; break;
+ case 0xFF5E: ch = 0xA1; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP37
+
+public class ENCibm037 : CP37
+{
+ public ENCibm037() : base() {}
+
+}; // class ENCibm037
+
+}; // namespace I18N.Rare
diff --git a/mcs/class/I18N/Rare/CP500.cs b/mcs/class/I18N/Rare/CP500.cs
new file mode 100644
index 00000000000..631ba6c71f8
--- /dev/null
+++ b/mcs/class/I18N/Rare/CP500.cs
@@ -0,0 +1,897 @@
+/*
+ * CP500.cs - IBM EBCDIC (International) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-500.ucm".
+
+namespace I18N.Rare
+{
+
+using System;
+using I18N.Common;
+
+public class CP500 : ByteEncoding
+{
+ public CP500()
+ : base(500, ToChars, "IBM EBCDIC (International)",
+ "IBM500", "IBM500", "IBM500",
+ false, false, false, false, 1252)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u009C', '\u0009',
+ '\u0086', '\u007F', '\u0097', '\u008D', '\u008E', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u009D', '\u0085', '\u0008', '\u0087',
+ '\u0018', '\u0019', '\u0092', '\u008F', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0080', '\u0081', '\u0082', '\u0083',
+ '\u0084', '\u000A', '\u0017', '\u001B', '\u0088', '\u0089',
+ '\u008A', '\u008B', '\u008C', '\u0005', '\u0006', '\u0007',
+ '\u0090', '\u0091', '\u0016', '\u0093', '\u0094', '\u0095',
+ '\u0096', '\u0004', '\u0098', '\u0099', '\u009A', '\u009B',
+ '\u0014', '\u0015', '\u009E', '\u001A', '\u0020', '\u00A0',
+ '\u00E2', '\u00E4', '\u00E0', '\u00E1', '\u00E3', '\u00E5',
+ '\u00E7', '\u00F1', '\u005B', '\u002E', '\u003C', '\u0028',
+ '\u002B', '\u0021', '\u0026', '\u00E9', '\u00EA', '\u00EB',
+ '\u00E8', '\u00ED', '\u00EE', '\u00EF', '\u00EC', '\u00DF',
+ '\u005D', '\u0024', '\u002A', '\u0029', '\u003B', '\u005E',
+ '\u002D', '\u002F', '\u00C2', '\u00C4', '\u00C0', '\u00C1',
+ '\u00C3', '\u00C5', '\u00C7', '\u00D1', '\u00A6', '\u002C',
+ '\u0025', '\u005F', '\u003E', '\u003F', '\u00F8', '\u00C9',
+ '\u00CA', '\u00CB', '\u00C8', '\u00CD', '\u00CE', '\u00CF',
+ '\u00CC', '\u0060', '\u003A', '\u0023', '\u0040', '\u0027',
+ '\u003D', '\u0022', '\u00D8', '\u0061', '\u0062', '\u0063',
+ '\u0064', '\u0065', '\u0066', '\u0067', '\u0068', '\u0069',
+ '\u00AB', '\u00BB', '\u00F0', '\u00FD', '\u00FE', '\u00B1',
+ '\u00B0', '\u006A', '\u006B', '\u006C', '\u006D', '\u006E',
+ '\u006F', '\u0070', '\u0071', '\u0072', '\u00AA', '\u00BA',
+ '\u00E6', '\u00B8', '\u00C6', '\u00A4', '\u00B5', '\u007E',
+ '\u0073', '\u0074', '\u0075', '\u0076', '\u0077', '\u0078',
+ '\u0079', '\u007A', '\u00A1', '\u00BF', '\u00D0', '\u00DD',
+ '\u00DE', '\u00AE', '\u00A2', '\u00A3', '\u00A5', '\u00B7',
+ '\u00A9', '\u00A7', '\u00B6', '\u00BC', '\u00BD', '\u00BE',
+ '\u00AC', '\u007C', '\u00AF', '\u00A8', '\u00B4', '\u00D7',
+ '\u007B', '\u0041', '\u0042', '\u0043', '\u0044', '\u0045',
+ '\u0046', '\u0047', '\u0048', '\u0049', '\u00AD', '\u00F4',
+ '\u00F6', '\u00F2', '\u00F3', '\u00F5', '\u007D', '\u004A',
+ '\u004B', '\u004C', '\u004D', '\u004E', '\u004F', '\u0050',
+ '\u0051', '\u0052', '\u00B9', '\u00FB', '\u00FC', '\u00F9',
+ '\u00FA', '\u00FF', '\u005C', '\u00F7', '\u0053', '\u0054',
+ '\u0055', '\u0056', '\u0057', '\u0058', '\u0059', '\u005A',
+ '\u00B2', '\u00D4', '\u00D6', '\u00D2', '\u00D3', '\u00D5',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u00B3', '\u00DB',
+ '\u00DC', '\u00D9', '\u00DA', '\u009F',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x00B6:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x4F; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0x7B; break;
+ case 0x0024: ch = 0x5B; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0x7C; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0x4A; break;
+ case 0x005C: ch = 0xE0; break;
+ case 0x005D: ch = 0x5A; break;
+ case 0x005E: ch = 0x5F; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0x79; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0xC0; break;
+ case 0x007C: ch = 0xBB; break;
+ case 0x007D: ch = 0xD0; break;
+ case 0x007E: ch = 0xA1; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A1: ch = 0xAA; break;
+ case 0x00A2: ch = 0xB0; break;
+ case 0x00A3: ch = 0xB1; break;
+ case 0x00A4: ch = 0x9F; break;
+ case 0x00A5: ch = 0xB2; break;
+ case 0x00A6: ch = 0x6A; break;
+ case 0x00A7: ch = 0xB5; break;
+ case 0x00A8: ch = 0xBD; break;
+ case 0x00A9: ch = 0xB4; break;
+ case 0x00AA: ch = 0x9A; break;
+ case 0x00AB: ch = 0x8A; break;
+ case 0x00AC: ch = 0xBA; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00AE: ch = 0xAF; break;
+ case 0x00AF: ch = 0xBC; break;
+ case 0x00B0: ch = 0x90; break;
+ case 0x00B1: ch = 0x8F; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xBE; break;
+ case 0x00B5: ch = 0xA0; break;
+ case 0x00B7: ch = 0xB3; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00B9: ch = 0xDA; break;
+ case 0x00BA: ch = 0x9B; break;
+ case 0x00BB: ch = 0x8B; break;
+ case 0x00BC: ch = 0xB7; break;
+ case 0x00BD: ch = 0xB8; break;
+ case 0x00BE: ch = 0xB9; break;
+ case 0x00BF: ch = 0xAB; break;
+ case 0x00C0: ch = 0x64; break;
+ case 0x00C1: ch = 0x65; break;
+ case 0x00C2: ch = 0x62; break;
+ case 0x00C3: ch = 0x66; break;
+ case 0x00C4: ch = 0x63; break;
+ case 0x00C5: ch = 0x67; break;
+ case 0x00C6: ch = 0x9E; break;
+ case 0x00C7: ch = 0x68; break;
+ case 0x00C8: ch = 0x74; break;
+ case 0x00C9: ch = 0x71; break;
+ case 0x00CA: ch = 0x72; break;
+ case 0x00CB: ch = 0x73; break;
+ case 0x00CC: ch = 0x78; break;
+ case 0x00CD: ch = 0x75; break;
+ case 0x00CE: ch = 0x76; break;
+ case 0x00CF: ch = 0x77; break;
+ case 0x00D0: ch = 0xAC; break;
+ case 0x00D1: ch = 0x69; break;
+ case 0x00D2: ch = 0xED; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEB; break;
+ case 0x00D5: ch = 0xEF; break;
+ case 0x00D6: ch = 0xEC; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00D8: ch = 0x80; break;
+ case 0x00D9: ch = 0xFD; break;
+ case 0x00DA: ch = 0xFE; break;
+ case 0x00DB: ch = 0xFB; break;
+ case 0x00DC: ch = 0xFC; break;
+ case 0x00DD: ch = 0xAD; break;
+ case 0x00DE: ch = 0xAE; break;
+ case 0x00DF: ch = 0x59; break;
+ case 0x00E0: ch = 0x44; break;
+ case 0x00E1: ch = 0x45; break;
+ case 0x00E2: ch = 0x42; break;
+ case 0x00E3: ch = 0x46; break;
+ case 0x00E4: ch = 0x43; break;
+ case 0x00E5: ch = 0x47; break;
+ case 0x00E6: ch = 0x9C; break;
+ case 0x00E7: ch = 0x48; break;
+ case 0x00E8: ch = 0x54; break;
+ case 0x00E9: ch = 0x51; break;
+ case 0x00EA: ch = 0x52; break;
+ case 0x00EB: ch = 0x53; break;
+ case 0x00EC: ch = 0x58; break;
+ case 0x00ED: ch = 0x55; break;
+ case 0x00EE: ch = 0x56; break;
+ case 0x00EF: ch = 0x57; break;
+ case 0x00F0: ch = 0x8C; break;
+ case 0x00F1: ch = 0x49; break;
+ case 0x00F2: ch = 0xCD; break;
+ case 0x00F3: ch = 0xCE; break;
+ case 0x00F4: ch = 0xCB; break;
+ case 0x00F5: ch = 0xCF; break;
+ case 0x00F6: ch = 0xCC; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x00F8: ch = 0x70; break;
+ case 0x00F9: ch = 0xDD; break;
+ case 0x00FA: ch = 0xDE; break;
+ case 0x00FB: ch = 0xDB; break;
+ case 0x00FC: ch = 0xDC; break;
+ case 0x00FD: ch = 0x8D; break;
+ case 0x00FE: ch = 0x8E; break;
+ case 0x00FF: ch = 0xDF; break;
+ case 0x0110: ch = 0xAC; break;
+ case 0x203E: ch = 0xBC; break;
+ case 0xFF01: ch = 0x4F; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0x7B; break;
+ case 0xFF04: ch = 0x5B; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0x7C; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0x4A; break;
+ case 0xFF3C: ch = 0xE0; break;
+ case 0xFF3D: ch = 0x5A; break;
+ case 0xFF3E: ch = 0x5F; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0x79; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0xC0; break;
+ case 0xFF5C: ch = 0xBB; break;
+ case 0xFF5D: ch = 0xD0; break;
+ case 0xFF5E: ch = 0xA1; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x00B6:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x4F; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0x7B; break;
+ case 0x0024: ch = 0x5B; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0x7C; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0x4A; break;
+ case 0x005C: ch = 0xE0; break;
+ case 0x005D: ch = 0x5A; break;
+ case 0x005E: ch = 0x5F; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0x79; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0xC0; break;
+ case 0x007C: ch = 0xBB; break;
+ case 0x007D: ch = 0xD0; break;
+ case 0x007E: ch = 0xA1; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A1: ch = 0xAA; break;
+ case 0x00A2: ch = 0xB0; break;
+ case 0x00A3: ch = 0xB1; break;
+ case 0x00A4: ch = 0x9F; break;
+ case 0x00A5: ch = 0xB2; break;
+ case 0x00A6: ch = 0x6A; break;
+ case 0x00A7: ch = 0xB5; break;
+ case 0x00A8: ch = 0xBD; break;
+ case 0x00A9: ch = 0xB4; break;
+ case 0x00AA: ch = 0x9A; break;
+ case 0x00AB: ch = 0x8A; break;
+ case 0x00AC: ch = 0xBA; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00AE: ch = 0xAF; break;
+ case 0x00AF: ch = 0xBC; break;
+ case 0x00B0: ch = 0x90; break;
+ case 0x00B1: ch = 0x8F; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xBE; break;
+ case 0x00B5: ch = 0xA0; break;
+ case 0x00B7: ch = 0xB3; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00B9: ch = 0xDA; break;
+ case 0x00BA: ch = 0x9B; break;
+ case 0x00BB: ch = 0x8B; break;
+ case 0x00BC: ch = 0xB7; break;
+ case 0x00BD: ch = 0xB8; break;
+ case 0x00BE: ch = 0xB9; break;
+ case 0x00BF: ch = 0xAB; break;
+ case 0x00C0: ch = 0x64; break;
+ case 0x00C1: ch = 0x65; break;
+ case 0x00C2: ch = 0x62; break;
+ case 0x00C3: ch = 0x66; break;
+ case 0x00C4: ch = 0x63; break;
+ case 0x00C5: ch = 0x67; break;
+ case 0x00C6: ch = 0x9E; break;
+ case 0x00C7: ch = 0x68; break;
+ case 0x00C8: ch = 0x74; break;
+ case 0x00C9: ch = 0x71; break;
+ case 0x00CA: ch = 0x72; break;
+ case 0x00CB: ch = 0x73; break;
+ case 0x00CC: ch = 0x78; break;
+ case 0x00CD: ch = 0x75; break;
+ case 0x00CE: ch = 0x76; break;
+ case 0x00CF: ch = 0x77; break;
+ case 0x00D0: ch = 0xAC; break;
+ case 0x00D1: ch = 0x69; break;
+ case 0x00D2: ch = 0xED; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEB; break;
+ case 0x00D5: ch = 0xEF; break;
+ case 0x00D6: ch = 0xEC; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00D8: ch = 0x80; break;
+ case 0x00D9: ch = 0xFD; break;
+ case 0x00DA: ch = 0xFE; break;
+ case 0x00DB: ch = 0xFB; break;
+ case 0x00DC: ch = 0xFC; break;
+ case 0x00DD: ch = 0xAD; break;
+ case 0x00DE: ch = 0xAE; break;
+ case 0x00DF: ch = 0x59; break;
+ case 0x00E0: ch = 0x44; break;
+ case 0x00E1: ch = 0x45; break;
+ case 0x00E2: ch = 0x42; break;
+ case 0x00E3: ch = 0x46; break;
+ case 0x00E4: ch = 0x43; break;
+ case 0x00E5: ch = 0x47; break;
+ case 0x00E6: ch = 0x9C; break;
+ case 0x00E7: ch = 0x48; break;
+ case 0x00E8: ch = 0x54; break;
+ case 0x00E9: ch = 0x51; break;
+ case 0x00EA: ch = 0x52; break;
+ case 0x00EB: ch = 0x53; break;
+ case 0x00EC: ch = 0x58; break;
+ case 0x00ED: ch = 0x55; break;
+ case 0x00EE: ch = 0x56; break;
+ case 0x00EF: ch = 0x57; break;
+ case 0x00F0: ch = 0x8C; break;
+ case 0x00F1: ch = 0x49; break;
+ case 0x00F2: ch = 0xCD; break;
+ case 0x00F3: ch = 0xCE; break;
+ case 0x00F4: ch = 0xCB; break;
+ case 0x00F5: ch = 0xCF; break;
+ case 0x00F6: ch = 0xCC; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x00F8: ch = 0x70; break;
+ case 0x00F9: ch = 0xDD; break;
+ case 0x00FA: ch = 0xDE; break;
+ case 0x00FB: ch = 0xDB; break;
+ case 0x00FC: ch = 0xDC; break;
+ case 0x00FD: ch = 0x8D; break;
+ case 0x00FE: ch = 0x8E; break;
+ case 0x00FF: ch = 0xDF; break;
+ case 0x0110: ch = 0xAC; break;
+ case 0x203E: ch = 0xBC; break;
+ case 0xFF01: ch = 0x4F; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0x7B; break;
+ case 0xFF04: ch = 0x5B; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0x7C; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0x4A; break;
+ case 0xFF3C: ch = 0xE0; break;
+ case 0xFF3D: ch = 0x5A; break;
+ case 0xFF3E: ch = 0x5F; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0x79; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0xC0; break;
+ case 0xFF5C: ch = 0xBB; break;
+ case 0xFF5D: ch = 0xD0; break;
+ case 0xFF5E: ch = 0xA1; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP500
+
+public class ENCibm500 : CP500
+{
+ public ENCibm500() : base() {}
+
+}; // class ENCibm500
+
+}; // namespace I18N.Rare
diff --git a/mcs/class/I18N/Rare/CP708.cs b/mcs/class/I18N/Rare/CP708.cs
new file mode 100644
index 00000000000..8bd621acc24
--- /dev/null
+++ b/mcs/class/I18N/Rare/CP708.cs
@@ -0,0 +1,545 @@
+/*
+ * CP708.cs - Arabic (ASMO 708) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-1089.ucm".
+
+namespace I18N.Rare
+{
+
+using System;
+using I18N.Common;
+
+public class CP708 : ByteEncoding
+{
+ public CP708()
+ : base(708, ToChars, "Arabic (ASMO 708)",
+ "iso-8859-6", "asmo-708", "asmo-708",
+ false, false, false, false, 1256)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
+ '\u0006', '\u0007', '\u0008', '\u0009', '\u000A', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
+ '\u0018', '\u0019', '\u001A', '\u001B', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
+ '\u0024', '\u0025', '\u0026', '\u0027', '\u0028', '\u0029',
+ '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
+ '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
+ '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
+ '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
+ '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
+ '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
+ '\u005A', '\u005B', '\u005C', '\u005D', '\u005E', '\u005F',
+ '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
+ '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
+ '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
+ '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
+ '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
+ '\u007E', '\u007F', '\u0080', '\u0081', '\u0082', '\u0083',
+ '\u0084', '\u0085', '\u0086', '\u0087', '\u0088', '\u0089',
+ '\u008A', '\u008B', '\u008C', '\u008D', '\u008E', '\u008F',
+ '\u0090', '\u0091', '\u0092', '\u0093', '\u0094', '\u0095',
+ '\u0096', '\u0097', '\u0098', '\u0099', '\u009A', '\u009B',
+ '\u009C', '\u009D', '\u009E', '\u009F', '\u00A0', '\u003F',
+ '\u003F', '\u003F', '\u00A4', '\u003F', '\u003F', '\u003F',
+ '\u003F', '\u003F', '\u003F', '\u003F', '\u060C', '\u00AD',
+ '\u003F', '\u003F', '\u003F', '\u003F', '\u003F', '\u003F',
+ '\u003F', '\u003F', '\u003F', '\u003F', '\u003F', '\u003F',
+ '\u003F', '\u061B', '\u003F', '\u003F', '\u003F', '\u061F',
+ '\u003F', '\u0621', '\u0622', '\u0623', '\u0624', '\u0625',
+ '\u0626', '\u0627', '\u0628', '\u0629', '\u062A', '\u062B',
+ '\u062C', '\u062D', '\u062E', '\u062F', '\u0630', '\u0631',
+ '\u0632', '\u0633', '\u0634', '\u0635', '\u0636', '\u0637',
+ '\u0638', '\u0639', '\u063A', '\u003F', '\u003F', '\u003F',
+ '\u003F', '\u003F', '\u0640', '\u0641', '\u0642', '\u0643',
+ '\u0644', '\u0645', '\u0646', '\u0647', '\u0648', '\u0649',
+ '\u064A', '\u064B', '\u064C', '\u064D', '\u064E', '\u064F',
+ '\u0650', '\u0651', '\u0652', '\u003F', '\u003F', '\u003F',
+ '\u003F', '\u003F', '\u003F', '\u003F', '\u003F', '\u003F',
+ '\u003F', '\u003F', '\u003F', '\u003F',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 161) switch(ch)
+ {
+ case 0x00A4:
+ case 0x00AD:
+ break;
+ case 0x060C: ch = 0xAC; break;
+ case 0x061B: ch = 0xBB; break;
+ case 0x061F: ch = 0xBF; break;
+ case 0x0621:
+ case 0x0622:
+ case 0x0623:
+ case 0x0624:
+ case 0x0625:
+ case 0x0626:
+ case 0x0627:
+ case 0x0628:
+ case 0x0629:
+ case 0x062A:
+ case 0x062B:
+ case 0x062C:
+ case 0x062D:
+ case 0x062E:
+ case 0x062F:
+ case 0x0630:
+ case 0x0631:
+ case 0x0632:
+ case 0x0633:
+ case 0x0634:
+ case 0x0635:
+ case 0x0636:
+ case 0x0637:
+ case 0x0638:
+ case 0x0639:
+ case 0x063A:
+ ch -= 0x0560;
+ break;
+ case 0x0640:
+ case 0x0641:
+ case 0x0642:
+ case 0x0643:
+ case 0x0644:
+ case 0x0645:
+ case 0x0646:
+ case 0x0647:
+ case 0x0648:
+ case 0x0649:
+ case 0x064A:
+ case 0x064B:
+ case 0x064C:
+ case 0x064D:
+ case 0x064E:
+ case 0x064F:
+ case 0x0650:
+ case 0x0651:
+ case 0x0652:
+ ch -= 0x0560;
+ break;
+ case 0x0660:
+ case 0x0661:
+ case 0x0662:
+ case 0x0663:
+ case 0x0664:
+ case 0x0665:
+ case 0x0666:
+ case 0x0667:
+ case 0x0668:
+ case 0x0669:
+ ch -= 0x0630;
+ break;
+ case 0x066A: ch = 0x25; break;
+ case 0x066B: ch = 0x2C; break;
+ case 0x066C: ch = 0x2E; break;
+ case 0x066D: ch = 0x2A; break;
+ case 0xFE70: ch = 0xEB; break;
+ case 0xFE71: ch = 0xEB; break;
+ case 0xFE72: ch = 0xEC; break;
+ case 0xFE74: ch = 0xED; break;
+ case 0xFE76: ch = 0xEE; break;
+ case 0xFE77: ch = 0xEE; break;
+ case 0xFE78: ch = 0xEF; break;
+ case 0xFE79: ch = 0xEF; break;
+ case 0xFE7A: ch = 0xF0; break;
+ case 0xFE7B: ch = 0xF0; break;
+ case 0xFE7C: ch = 0xF1; break;
+ case 0xFE7D: ch = 0xF1; break;
+ case 0xFE7E: ch = 0xF2; break;
+ case 0xFE7F: ch = 0xF2; break;
+ case 0xFE80: ch = 0xC1; break;
+ case 0xFE81: ch = 0xC2; break;
+ case 0xFE82: ch = 0xC2; break;
+ case 0xFE83: ch = 0xC3; break;
+ case 0xFE84: ch = 0xC3; break;
+ case 0xFE85: ch = 0xC4; break;
+ case 0xFE86: ch = 0xC4; break;
+ case 0xFE87: ch = 0xC5; break;
+ case 0xFE88: ch = 0xC5; break;
+ case 0xFE89: ch = 0xC6; break;
+ case 0xFE8A: ch = 0xC6; break;
+ case 0xFE8B: ch = 0xC6; break;
+ case 0xFE8C: ch = 0xC6; break;
+ case 0xFE8D: ch = 0xC7; break;
+ case 0xFE8E: ch = 0xC7; break;
+ case 0xFE8F: ch = 0xC8; break;
+ case 0xFE90: ch = 0xC8; break;
+ case 0xFE91: ch = 0xC8; break;
+ case 0xFE92: ch = 0xC8; break;
+ case 0xFE93: ch = 0xC9; break;
+ case 0xFE94: ch = 0xC9; break;
+ case 0xFE95: ch = 0xCA; break;
+ case 0xFE96: ch = 0xCA; break;
+ case 0xFE97: ch = 0xCA; break;
+ case 0xFE98: ch = 0xCA; break;
+ case 0xFE99: ch = 0xCB; break;
+ case 0xFE9A: ch = 0xCB; break;
+ case 0xFE9B: ch = 0xCB; break;
+ case 0xFE9C: ch = 0xCB; break;
+ case 0xFE9D: ch = 0xCC; break;
+ case 0xFE9E: ch = 0xCC; break;
+ case 0xFE9F: ch = 0xCC; break;
+ case 0xFEA0: ch = 0xCC; break;
+ case 0xFEA1: ch = 0xCD; break;
+ case 0xFEA2: ch = 0xCD; break;
+ case 0xFEA3: ch = 0xCD; break;
+ case 0xFEA4: ch = 0xCD; break;
+ case 0xFEA5: ch = 0xCE; break;
+ case 0xFEA6: ch = 0xCE; break;
+ case 0xFEA7: ch = 0xCE; break;
+ case 0xFEA8: ch = 0xCE; break;
+ case 0xFEA9: ch = 0xCF; break;
+ case 0xFEAA: ch = 0xCF; break;
+ case 0xFEAB: ch = 0xD0; break;
+ case 0xFEAC: ch = 0xD0; break;
+ case 0xFEAD: ch = 0xD1; break;
+ case 0xFEAE: ch = 0xD1; break;
+ case 0xFEAF: ch = 0xD2; break;
+ case 0xFEB0: ch = 0xD2; break;
+ case 0xFEB1: ch = 0xD3; break;
+ case 0xFEB2: ch = 0xD3; break;
+ case 0xFEB3: ch = 0xD3; break;
+ case 0xFEB4: ch = 0xD3; break;
+ case 0xFEB5: ch = 0xD4; break;
+ case 0xFEB6: ch = 0xD4; break;
+ case 0xFEB7: ch = 0xD4; break;
+ case 0xFEB8: ch = 0xD4; break;
+ case 0xFEB9: ch = 0xD5; break;
+ case 0xFEBA: ch = 0xD5; break;
+ case 0xFEBB: ch = 0xD5; break;
+ case 0xFEBC: ch = 0xD5; break;
+ case 0xFEBD: ch = 0xD6; break;
+ case 0xFEBE: ch = 0xD6; break;
+ case 0xFEBF: ch = 0xD6; break;
+ case 0xFEC0: ch = 0xD6; break;
+ case 0xFEC1: ch = 0xD7; break;
+ case 0xFEC2: ch = 0xD7; break;
+ case 0xFEC3: ch = 0xD7; break;
+ case 0xFEC4: ch = 0xD7; break;
+ case 0xFEC5: ch = 0xD8; break;
+ case 0xFEC6: ch = 0xD8; break;
+ case 0xFEC7: ch = 0xD8; break;
+ case 0xFEC8: ch = 0xD8; break;
+ case 0xFEC9: ch = 0xD9; break;
+ case 0xFECA: ch = 0xD9; break;
+ case 0xFECB: ch = 0xD9; break;
+ case 0xFECC: ch = 0xD9; break;
+ case 0xFECD: ch = 0xDA; break;
+ case 0xFECE: ch = 0xDA; break;
+ case 0xFECF: ch = 0xDA; break;
+ case 0xFED0: ch = 0xDA; break;
+ case 0xFED1: ch = 0xE1; break;
+ case 0xFED2: ch = 0xE1; break;
+ case 0xFED3: ch = 0xE1; break;
+ case 0xFED4: ch = 0xE1; break;
+ case 0xFED5: ch = 0xE2; break;
+ case 0xFED6: ch = 0xE2; break;
+ case 0xFED7: ch = 0xE2; break;
+ case 0xFED8: ch = 0xE2; break;
+ case 0xFED9: ch = 0xE3; break;
+ case 0xFEDA: ch = 0xE3; break;
+ case 0xFEDB: ch = 0xE3; break;
+ case 0xFEDC: ch = 0xE3; break;
+ case 0xFEDD: ch = 0xE4; break;
+ case 0xFEDE: ch = 0xE4; break;
+ case 0xFEDF: ch = 0xE4; break;
+ case 0xFEE0: ch = 0xE4; break;
+ case 0xFEE1: ch = 0xE5; break;
+ case 0xFEE2: ch = 0xE5; break;
+ case 0xFEE3: ch = 0xE5; break;
+ case 0xFEE4: ch = 0xE5; break;
+ case 0xFEE5: ch = 0xE6; break;
+ case 0xFEE6: ch = 0xE6; break;
+ case 0xFEE7: ch = 0xE6; break;
+ case 0xFEE8: ch = 0xE6; break;
+ case 0xFEE9: ch = 0xE7; break;
+ case 0xFEEA: ch = 0xE7; break;
+ case 0xFEEB: ch = 0xE7; break;
+ case 0xFEEC: ch = 0xE7; break;
+ case 0xFEED: ch = 0xE8; break;
+ case 0xFEEE: ch = 0xE8; break;
+ case 0xFEEF: ch = 0xE9; break;
+ case 0xFEF0: ch = 0xE9; break;
+ case 0xFEF1: ch = 0xEA; break;
+ case 0xFEF2: ch = 0xEA; break;
+ case 0xFEF3: ch = 0xEA; break;
+ case 0xFEF4: ch = 0xEA; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 161) switch(ch)
+ {
+ case 0x00A4:
+ case 0x00AD:
+ break;
+ case 0x060C: ch = 0xAC; break;
+ case 0x061B: ch = 0xBB; break;
+ case 0x061F: ch = 0xBF; break;
+ case 0x0621:
+ case 0x0622:
+ case 0x0623:
+ case 0x0624:
+ case 0x0625:
+ case 0x0626:
+ case 0x0627:
+ case 0x0628:
+ case 0x0629:
+ case 0x062A:
+ case 0x062B:
+ case 0x062C:
+ case 0x062D:
+ case 0x062E:
+ case 0x062F:
+ case 0x0630:
+ case 0x0631:
+ case 0x0632:
+ case 0x0633:
+ case 0x0634:
+ case 0x0635:
+ case 0x0636:
+ case 0x0637:
+ case 0x0638:
+ case 0x0639:
+ case 0x063A:
+ ch -= 0x0560;
+ break;
+ case 0x0640:
+ case 0x0641:
+ case 0x0642:
+ case 0x0643:
+ case 0x0644:
+ case 0x0645:
+ case 0x0646:
+ case 0x0647:
+ case 0x0648:
+ case 0x0649:
+ case 0x064A:
+ case 0x064B:
+ case 0x064C:
+ case 0x064D:
+ case 0x064E:
+ case 0x064F:
+ case 0x0650:
+ case 0x0651:
+ case 0x0652:
+ ch -= 0x0560;
+ break;
+ case 0x0660:
+ case 0x0661:
+ case 0x0662:
+ case 0x0663:
+ case 0x0664:
+ case 0x0665:
+ case 0x0666:
+ case 0x0667:
+ case 0x0668:
+ case 0x0669:
+ ch -= 0x0630;
+ break;
+ case 0x066A: ch = 0x25; break;
+ case 0x066B: ch = 0x2C; break;
+ case 0x066C: ch = 0x2E; break;
+ case 0x066D: ch = 0x2A; break;
+ case 0xFE70: ch = 0xEB; break;
+ case 0xFE71: ch = 0xEB; break;
+ case 0xFE72: ch = 0xEC; break;
+ case 0xFE74: ch = 0xED; break;
+ case 0xFE76: ch = 0xEE; break;
+ case 0xFE77: ch = 0xEE; break;
+ case 0xFE78: ch = 0xEF; break;
+ case 0xFE79: ch = 0xEF; break;
+ case 0xFE7A: ch = 0xF0; break;
+ case 0xFE7B: ch = 0xF0; break;
+ case 0xFE7C: ch = 0xF1; break;
+ case 0xFE7D: ch = 0xF1; break;
+ case 0xFE7E: ch = 0xF2; break;
+ case 0xFE7F: ch = 0xF2; break;
+ case 0xFE80: ch = 0xC1; break;
+ case 0xFE81: ch = 0xC2; break;
+ case 0xFE82: ch = 0xC2; break;
+ case 0xFE83: ch = 0xC3; break;
+ case 0xFE84: ch = 0xC3; break;
+ case 0xFE85: ch = 0xC4; break;
+ case 0xFE86: ch = 0xC4; break;
+ case 0xFE87: ch = 0xC5; break;
+ case 0xFE88: ch = 0xC5; break;
+ case 0xFE89: ch = 0xC6; break;
+ case 0xFE8A: ch = 0xC6; break;
+ case 0xFE8B: ch = 0xC6; break;
+ case 0xFE8C: ch = 0xC6; break;
+ case 0xFE8D: ch = 0xC7; break;
+ case 0xFE8E: ch = 0xC7; break;
+ case 0xFE8F: ch = 0xC8; break;
+ case 0xFE90: ch = 0xC8; break;
+ case 0xFE91: ch = 0xC8; break;
+ case 0xFE92: ch = 0xC8; break;
+ case 0xFE93: ch = 0xC9; break;
+ case 0xFE94: ch = 0xC9; break;
+ case 0xFE95: ch = 0xCA; break;
+ case 0xFE96: ch = 0xCA; break;
+ case 0xFE97: ch = 0xCA; break;
+ case 0xFE98: ch = 0xCA; break;
+ case 0xFE99: ch = 0xCB; break;
+ case 0xFE9A: ch = 0xCB; break;
+ case 0xFE9B: ch = 0xCB; break;
+ case 0xFE9C: ch = 0xCB; break;
+ case 0xFE9D: ch = 0xCC; break;
+ case 0xFE9E: ch = 0xCC; break;
+ case 0xFE9F: ch = 0xCC; break;
+ case 0xFEA0: ch = 0xCC; break;
+ case 0xFEA1: ch = 0xCD; break;
+ case 0xFEA2: ch = 0xCD; break;
+ case 0xFEA3: ch = 0xCD; break;
+ case 0xFEA4: ch = 0xCD; break;
+ case 0xFEA5: ch = 0xCE; break;
+ case 0xFEA6: ch = 0xCE; break;
+ case 0xFEA7: ch = 0xCE; break;
+ case 0xFEA8: ch = 0xCE; break;
+ case 0xFEA9: ch = 0xCF; break;
+ case 0xFEAA: ch = 0xCF; break;
+ case 0xFEAB: ch = 0xD0; break;
+ case 0xFEAC: ch = 0xD0; break;
+ case 0xFEAD: ch = 0xD1; break;
+ case 0xFEAE: ch = 0xD1; break;
+ case 0xFEAF: ch = 0xD2; break;
+ case 0xFEB0: ch = 0xD2; break;
+ case 0xFEB1: ch = 0xD3; break;
+ case 0xFEB2: ch = 0xD3; break;
+ case 0xFEB3: ch = 0xD3; break;
+ case 0xFEB4: ch = 0xD3; break;
+ case 0xFEB5: ch = 0xD4; break;
+ case 0xFEB6: ch = 0xD4; break;
+ case 0xFEB7: ch = 0xD4; break;
+ case 0xFEB8: ch = 0xD4; break;
+ case 0xFEB9: ch = 0xD5; break;
+ case 0xFEBA: ch = 0xD5; break;
+ case 0xFEBB: ch = 0xD5; break;
+ case 0xFEBC: ch = 0xD5; break;
+ case 0xFEBD: ch = 0xD6; break;
+ case 0xFEBE: ch = 0xD6; break;
+ case 0xFEBF: ch = 0xD6; break;
+ case 0xFEC0: ch = 0xD6; break;
+ case 0xFEC1: ch = 0xD7; break;
+ case 0xFEC2: ch = 0xD7; break;
+ case 0xFEC3: ch = 0xD7; break;
+ case 0xFEC4: ch = 0xD7; break;
+ case 0xFEC5: ch = 0xD8; break;
+ case 0xFEC6: ch = 0xD8; break;
+ case 0xFEC7: ch = 0xD8; break;
+ case 0xFEC8: ch = 0xD8; break;
+ case 0xFEC9: ch = 0xD9; break;
+ case 0xFECA: ch = 0xD9; break;
+ case 0xFECB: ch = 0xD9; break;
+ case 0xFECC: ch = 0xD9; break;
+ case 0xFECD: ch = 0xDA; break;
+ case 0xFECE: ch = 0xDA; break;
+ case 0xFECF: ch = 0xDA; break;
+ case 0xFED0: ch = 0xDA; break;
+ case 0xFED1: ch = 0xE1; break;
+ case 0xFED2: ch = 0xE1; break;
+ case 0xFED3: ch = 0xE1; break;
+ case 0xFED4: ch = 0xE1; break;
+ case 0xFED5: ch = 0xE2; break;
+ case 0xFED6: ch = 0xE2; break;
+ case 0xFED7: ch = 0xE2; break;
+ case 0xFED8: ch = 0xE2; break;
+ case 0xFED9: ch = 0xE3; break;
+ case 0xFEDA: ch = 0xE3; break;
+ case 0xFEDB: ch = 0xE3; break;
+ case 0xFEDC: ch = 0xE3; break;
+ case 0xFEDD: ch = 0xE4; break;
+ case 0xFEDE: ch = 0xE4; break;
+ case 0xFEDF: ch = 0xE4; break;
+ case 0xFEE0: ch = 0xE4; break;
+ case 0xFEE1: ch = 0xE5; break;
+ case 0xFEE2: ch = 0xE5; break;
+ case 0xFEE3: ch = 0xE5; break;
+ case 0xFEE4: ch = 0xE5; break;
+ case 0xFEE5: ch = 0xE6; break;
+ case 0xFEE6: ch = 0xE6; break;
+ case 0xFEE7: ch = 0xE6; break;
+ case 0xFEE8: ch = 0xE6; break;
+ case 0xFEE9: ch = 0xE7; break;
+ case 0xFEEA: ch = 0xE7; break;
+ case 0xFEEB: ch = 0xE7; break;
+ case 0xFEEC: ch = 0xE7; break;
+ case 0xFEED: ch = 0xE8; break;
+ case 0xFEEE: ch = 0xE8; break;
+ case 0xFEEF: ch = 0xE9; break;
+ case 0xFEF0: ch = 0xE9; break;
+ case 0xFEF1: ch = 0xEA; break;
+ case 0xFEF2: ch = 0xEA; break;
+ case 0xFEF3: ch = 0xEA; break;
+ case 0xFEF4: ch = 0xEA; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP708
+
+public class ENCasmo_708 : CP708
+{
+ public ENCasmo_708() : base() {}
+
+}; // class ENCasmo_708
+
+}; // namespace I18N.Rare
diff --git a/mcs/class/I18N/Rare/CP852.cs b/mcs/class/I18N/Rare/CP852.cs
new file mode 100644
index 00000000000..7f768b3a6f1
--- /dev/null
+++ b/mcs/class/I18N/Rare/CP852.cs
@@ -0,0 +1,679 @@
+/*
+ * CP852.cs - Central European (DOS) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-852.ucm".
+
+namespace I18N.Rare
+{
+
+using System;
+using I18N.Common;
+
+public class CP852 : ByteEncoding
+{
+ public CP852()
+ : base(852, ToChars, "Central European (DOS)",
+ "ibm852", "ibm852", "ibm852",
+ false, false, false, false, 1250)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
+ '\u0006', '\u0007', '\u0008', '\u0009', '\u000A', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
+ '\u0018', '\u0019', '\u001C', '\u001B', '\u007F', '\u001D',
+ '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
+ '\u0024', '\u0025', '\u0026', '\u0027', '\u0028', '\u0029',
+ '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
+ '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
+ '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
+ '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
+ '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
+ '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
+ '\u005A', '\u005B', '\u005C', '\u005D', '\u005E', '\u005F',
+ '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
+ '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
+ '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
+ '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
+ '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
+ '\u007E', '\u001A', '\u00C7', '\u00FC', '\u00E9', '\u00E2',
+ '\u00E4', '\u016F', '\u0107', '\u00E7', '\u0142', '\u00EB',
+ '\u0150', '\u0151', '\u00EE', '\u0179', '\u00C4', '\u0106',
+ '\u00C9', '\u0139', '\u013A', '\u00F4', '\u00F6', '\u013D',
+ '\u013E', '\u015A', '\u015B', '\u00D6', '\u00DC', '\u0164',
+ '\u0165', '\u0141', '\u00D7', '\u010D', '\u00E1', '\u00ED',
+ '\u00F3', '\u00FA', '\u0104', '\u0105', '\u017D', '\u017E',
+ '\u0118', '\u0119', '\u003F', '\u017A', '\u010C', '\u015F',
+ '\u00AB', '\u00BB', '\u2591', '\u2592', '\u2593', '\u2502',
+ '\u2524', '\u00C1', '\u00C2', '\u011A', '\u015E', '\u2563',
+ '\u2551', '\u2557', '\u255D', '\u017B', '\u017C', '\u2510',
+ '\u2514', '\u2534', '\u252C', '\u251C', '\u2500', '\u253C',
+ '\u0102', '\u0103', '\u255A', '\u2554', '\u2569', '\u2566',
+ '\u2560', '\u2550', '\u256C', '\u00A4', '\u0111', '\u0110',
+ '\u010E', '\u00CB', '\u010F', '\u0147', '\u00CD', '\u00CE',
+ '\u011B', '\u2518', '\u250C', '\u2588', '\u2584', '\u0162',
+ '\u016E', '\u2580', '\u00D3', '\u00DF', '\u00D4', '\u0143',
+ '\u0144', '\u0148', '\u0160', '\u0161', '\u0154', '\u00DA',
+ '\u0155', '\u0170', '\u00FD', '\u00DD', '\u0163', '\u00B4',
+ '\u00AD', '\u02DD', '\u02DB', '\u02C7', '\u02D8', '\u00A7',
+ '\u00F7', '\u00B8', '\u00B0', '\u00A8', '\u02D9', '\u0171',
+ '\u0158', '\u0159', '\u25A0', '\u00A0',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 26) switch(ch)
+ {
+ case 0x001B:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x0020:
+ case 0x0021:
+ case 0x0022:
+ case 0x0023:
+ case 0x0024:
+ case 0x0025:
+ case 0x0026:
+ case 0x0027:
+ case 0x0028:
+ case 0x0029:
+ case 0x002A:
+ case 0x002B:
+ case 0x002C:
+ case 0x002D:
+ case 0x002E:
+ case 0x002F:
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ case 0x003A:
+ case 0x003B:
+ case 0x003C:
+ case 0x003D:
+ case 0x003E:
+ case 0x003F:
+ case 0x0040:
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ case 0x005B:
+ case 0x005C:
+ case 0x005D:
+ case 0x005E:
+ case 0x005F:
+ case 0x0060:
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ case 0x007B:
+ case 0x007C:
+ case 0x007D:
+ case 0x007E:
+ break;
+ case 0x001A: ch = 0x7F; break;
+ case 0x001C: ch = 0x1A; break;
+ case 0x007F: ch = 0x1C; break;
+ case 0x00A0: ch = 0xFF; break;
+ case 0x00A4: ch = 0xCF; break;
+ case 0x00A7: ch = 0xF5; break;
+ case 0x00A8: ch = 0xF9; break;
+ case 0x00AB: ch = 0xAE; break;
+ case 0x00AD: ch = 0xF0; break;
+ case 0x00B0: ch = 0xF8; break;
+ case 0x00B4: ch = 0xEF; break;
+ case 0x00B6: ch = 0x14; break;
+ case 0x00B8: ch = 0xF7; break;
+ case 0x00BB: ch = 0xAF; break;
+ case 0x00C1: ch = 0xB5; break;
+ case 0x00C2: ch = 0xB6; break;
+ case 0x00C4: ch = 0x8E; break;
+ case 0x00C7: ch = 0x80; break;
+ case 0x00C9: ch = 0x90; break;
+ case 0x00CB: ch = 0xD3; break;
+ case 0x00CD: ch = 0xD6; break;
+ case 0x00CE: ch = 0xD7; break;
+ case 0x00D0: ch = 0xD1; break;
+ case 0x00D3: ch = 0xE0; break;
+ case 0x00D4: ch = 0xE2; break;
+ case 0x00D6: ch = 0x99; break;
+ case 0x00D7: ch = 0x9E; break;
+ case 0x00DA: ch = 0xE9; break;
+ case 0x00DC: ch = 0x9A; break;
+ case 0x00DD: ch = 0xED; break;
+ case 0x00DF: ch = 0xE1; break;
+ case 0x00E1: ch = 0xA0; break;
+ case 0x00E2: ch = 0x83; break;
+ case 0x00E4: ch = 0x84; break;
+ case 0x00E7: ch = 0x87; break;
+ case 0x00E9: ch = 0x82; break;
+ case 0x00EB: ch = 0x89; break;
+ case 0x00ED: ch = 0xA1; break;
+ case 0x00EE: ch = 0x8C; break;
+ case 0x00F3: ch = 0xA2; break;
+ case 0x00F4: ch = 0x93; break;
+ case 0x00F6: ch = 0x94; break;
+ case 0x00F7: ch = 0xF6; break;
+ case 0x00FA: ch = 0xA3; break;
+ case 0x00FC: ch = 0x81; break;
+ case 0x00FD: ch = 0xEC; break;
+ case 0x0102: ch = 0xC6; break;
+ case 0x0103: ch = 0xC7; break;
+ case 0x0104: ch = 0xA4; break;
+ case 0x0105: ch = 0xA5; break;
+ case 0x0106: ch = 0x8F; break;
+ case 0x0107: ch = 0x86; break;
+ case 0x010C: ch = 0xAC; break;
+ case 0x010D: ch = 0x9F; break;
+ case 0x010E: ch = 0xD2; break;
+ case 0x010F: ch = 0xD4; break;
+ case 0x0110: ch = 0xD1; break;
+ case 0x0111: ch = 0xD0; break;
+ case 0x0118: ch = 0xA8; break;
+ case 0x0119: ch = 0xA9; break;
+ case 0x011A: ch = 0xB7; break;
+ case 0x011B: ch = 0xD8; break;
+ case 0x0139: ch = 0x91; break;
+ case 0x013A: ch = 0x92; break;
+ case 0x013D: ch = 0x95; break;
+ case 0x013E: ch = 0x96; break;
+ case 0x0141: ch = 0x9D; break;
+ case 0x0142: ch = 0x88; break;
+ case 0x0143: ch = 0xE3; break;
+ case 0x0144: ch = 0xE4; break;
+ case 0x0147: ch = 0xD5; break;
+ case 0x0148: ch = 0xE5; break;
+ case 0x0150: ch = 0x8A; break;
+ case 0x0151: ch = 0x8B; break;
+ case 0x0154: ch = 0xE8; break;
+ case 0x0155: ch = 0xEA; break;
+ case 0x0158: ch = 0xFC; break;
+ case 0x0159: ch = 0xFD; break;
+ case 0x015A: ch = 0x97; break;
+ case 0x015B: ch = 0x98; break;
+ case 0x015E: ch = 0xB8; break;
+ case 0x015F: ch = 0xAD; break;
+ case 0x0160: ch = 0xE6; break;
+ case 0x0161: ch = 0xE7; break;
+ case 0x0162: ch = 0xDD; break;
+ case 0x0163: ch = 0xEE; break;
+ case 0x0164: ch = 0x9B; break;
+ case 0x0165: ch = 0x9C; break;
+ case 0x016E: ch = 0xDE; break;
+ case 0x016F: ch = 0x85; break;
+ case 0x0170: ch = 0xEB; break;
+ case 0x0171: ch = 0xFB; break;
+ case 0x0179: ch = 0x8D; break;
+ case 0x017A: ch = 0xAB; break;
+ case 0x017B: ch = 0xBD; break;
+ case 0x017C: ch = 0xBE; break;
+ case 0x017D: ch = 0xA6; break;
+ case 0x017E: ch = 0xA7; break;
+ case 0x02C7: ch = 0xF3; break;
+ case 0x02D8: ch = 0xF4; break;
+ case 0x02D9: ch = 0xFA; break;
+ case 0x02DB: ch = 0xF2; break;
+ case 0x02DD: ch = 0xF1; break;
+ case 0x2022: ch = 0x07; break;
+ case 0x203C: ch = 0x13; break;
+ case 0x2190: ch = 0x1B; break;
+ case 0x2191: ch = 0x18; break;
+ case 0x2192: ch = 0x1A; break;
+ case 0x2193: ch = 0x19; break;
+ case 0x2194: ch = 0x1D; break;
+ case 0x2195: ch = 0x12; break;
+ case 0x21A8: ch = 0x17; break;
+ case 0x221F: ch = 0x1C; break;
+ case 0x2302: ch = 0x7F; break;
+ case 0x2500: ch = 0xC4; break;
+ case 0x2502: ch = 0xB3; break;
+ case 0x250C: ch = 0xDA; break;
+ case 0x2510: ch = 0xBF; break;
+ case 0x2514: ch = 0xC0; break;
+ case 0x2518: ch = 0xD9; break;
+ case 0x251C: ch = 0xC3; break;
+ case 0x2524: ch = 0xB4; break;
+ case 0x252C: ch = 0xC2; break;
+ case 0x2534: ch = 0xC1; break;
+ case 0x253C: ch = 0xC5; break;
+ case 0x2550: ch = 0xCD; break;
+ case 0x2551: ch = 0xBA; break;
+ case 0x2554: ch = 0xC9; break;
+ case 0x2557: ch = 0xBB; break;
+ case 0x255A: ch = 0xC8; break;
+ case 0x255D: ch = 0xBC; break;
+ case 0x2560: ch = 0xCC; break;
+ case 0x2563: ch = 0xB9; break;
+ case 0x2566: ch = 0xCB; break;
+ case 0x2569: ch = 0xCA; break;
+ case 0x256C: ch = 0xCE; break;
+ case 0x2580: ch = 0xDF; break;
+ case 0x2584: ch = 0xDC; break;
+ case 0x2588: ch = 0xDB; break;
+ case 0x2591: ch = 0xB0; break;
+ case 0x2592: ch = 0xB1; break;
+ case 0x2593: ch = 0xB2; break;
+ case 0x25A0: ch = 0xFE; break;
+ case 0x25AC: ch = 0x16; break;
+ case 0x25B2: ch = 0x1E; break;
+ case 0x25BA: ch = 0x10; break;
+ case 0x25BC: ch = 0x1F; break;
+ case 0x25C4: ch = 0x11; break;
+ case 0x25CB: ch = 0x09; break;
+ case 0x25D8: ch = 0x08; break;
+ case 0x25D9: ch = 0x0A; break;
+ case 0x263A: ch = 0x01; break;
+ case 0x263B: ch = 0x02; break;
+ case 0x263C: ch = 0x0F; break;
+ case 0x2640: ch = 0x0C; break;
+ case 0x2642: ch = 0x0B; break;
+ case 0x2660: ch = 0x06; break;
+ case 0x2663: ch = 0x05; break;
+ case 0x2665: ch = 0x03; break;
+ case 0x2666: ch = 0x04; break;
+ case 0x266A: ch = 0x0D; break;
+ case 0x266C: ch = 0x0E; break;
+ case 0xFFE8: ch = 0xB3; break;
+ case 0xFFE9: ch = 0x1B; break;
+ case 0xFFEA: ch = 0x18; break;
+ case 0xFFEB: ch = 0x1A; break;
+ case 0xFFEC: ch = 0x19; break;
+ case 0xFFED: ch = 0xFE; break;
+ case 0xFFEE: ch = 0x09; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 26) switch(ch)
+ {
+ case 0x001B:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x0020:
+ case 0x0021:
+ case 0x0022:
+ case 0x0023:
+ case 0x0024:
+ case 0x0025:
+ case 0x0026:
+ case 0x0027:
+ case 0x0028:
+ case 0x0029:
+ case 0x002A:
+ case 0x002B:
+ case 0x002C:
+ case 0x002D:
+ case 0x002E:
+ case 0x002F:
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ case 0x003A:
+ case 0x003B:
+ case 0x003C:
+ case 0x003D:
+ case 0x003E:
+ case 0x003F:
+ case 0x0040:
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ case 0x005B:
+ case 0x005C:
+ case 0x005D:
+ case 0x005E:
+ case 0x005F:
+ case 0x0060:
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ case 0x007B:
+ case 0x007C:
+ case 0x007D:
+ case 0x007E:
+ break;
+ case 0x001A: ch = 0x7F; break;
+ case 0x001C: ch = 0x1A; break;
+ case 0x007F: ch = 0x1C; break;
+ case 0x00A0: ch = 0xFF; break;
+ case 0x00A4: ch = 0xCF; break;
+ case 0x00A7: ch = 0xF5; break;
+ case 0x00A8: ch = 0xF9; break;
+ case 0x00AB: ch = 0xAE; break;
+ case 0x00AD: ch = 0xF0; break;
+ case 0x00B0: ch = 0xF8; break;
+ case 0x00B4: ch = 0xEF; break;
+ case 0x00B6: ch = 0x14; break;
+ case 0x00B8: ch = 0xF7; break;
+ case 0x00BB: ch = 0xAF; break;
+ case 0x00C1: ch = 0xB5; break;
+ case 0x00C2: ch = 0xB6; break;
+ case 0x00C4: ch = 0x8E; break;
+ case 0x00C7: ch = 0x80; break;
+ case 0x00C9: ch = 0x90; break;
+ case 0x00CB: ch = 0xD3; break;
+ case 0x00CD: ch = 0xD6; break;
+ case 0x00CE: ch = 0xD7; break;
+ case 0x00D0: ch = 0xD1; break;
+ case 0x00D3: ch = 0xE0; break;
+ case 0x00D4: ch = 0xE2; break;
+ case 0x00D6: ch = 0x99; break;
+ case 0x00D7: ch = 0x9E; break;
+ case 0x00DA: ch = 0xE9; break;
+ case 0x00DC: ch = 0x9A; break;
+ case 0x00DD: ch = 0xED; break;
+ case 0x00DF: ch = 0xE1; break;
+ case 0x00E1: ch = 0xA0; break;
+ case 0x00E2: ch = 0x83; break;
+ case 0x00E4: ch = 0x84; break;
+ case 0x00E7: ch = 0x87; break;
+ case 0x00E9: ch = 0x82; break;
+ case 0x00EB: ch = 0x89; break;
+ case 0x00ED: ch = 0xA1; break;
+ case 0x00EE: ch = 0x8C; break;
+ case 0x00F3: ch = 0xA2; break;
+ case 0x00F4: ch = 0x93; break;
+ case 0x00F6: ch = 0x94; break;
+ case 0x00F7: ch = 0xF6; break;
+ case 0x00FA: ch = 0xA3; break;
+ case 0x00FC: ch = 0x81; break;
+ case 0x00FD: ch = 0xEC; break;
+ case 0x0102: ch = 0xC6; break;
+ case 0x0103: ch = 0xC7; break;
+ case 0x0104: ch = 0xA4; break;
+ case 0x0105: ch = 0xA5; break;
+ case 0x0106: ch = 0x8F; break;
+ case 0x0107: ch = 0x86; break;
+ case 0x010C: ch = 0xAC; break;
+ case 0x010D: ch = 0x9F; break;
+ case 0x010E: ch = 0xD2; break;
+ case 0x010F: ch = 0xD4; break;
+ case 0x0110: ch = 0xD1; break;
+ case 0x0111: ch = 0xD0; break;
+ case 0x0118: ch = 0xA8; break;
+ case 0x0119: ch = 0xA9; break;
+ case 0x011A: ch = 0xB7; break;
+ case 0x011B: ch = 0xD8; break;
+ case 0x0139: ch = 0x91; break;
+ case 0x013A: ch = 0x92; break;
+ case 0x013D: ch = 0x95; break;
+ case 0x013E: ch = 0x96; break;
+ case 0x0141: ch = 0x9D; break;
+ case 0x0142: ch = 0x88; break;
+ case 0x0143: ch = 0xE3; break;
+ case 0x0144: ch = 0xE4; break;
+ case 0x0147: ch = 0xD5; break;
+ case 0x0148: ch = 0xE5; break;
+ case 0x0150: ch = 0x8A; break;
+ case 0x0151: ch = 0x8B; break;
+ case 0x0154: ch = 0xE8; break;
+ case 0x0155: ch = 0xEA; break;
+ case 0x0158: ch = 0xFC; break;
+ case 0x0159: ch = 0xFD; break;
+ case 0x015A: ch = 0x97; break;
+ case 0x015B: ch = 0x98; break;
+ case 0x015E: ch = 0xB8; break;
+ case 0x015F: ch = 0xAD; break;
+ case 0x0160: ch = 0xE6; break;
+ case 0x0161: ch = 0xE7; break;
+ case 0x0162: ch = 0xDD; break;
+ case 0x0163: ch = 0xEE; break;
+ case 0x0164: ch = 0x9B; break;
+ case 0x0165: ch = 0x9C; break;
+ case 0x016E: ch = 0xDE; break;
+ case 0x016F: ch = 0x85; break;
+ case 0x0170: ch = 0xEB; break;
+ case 0x0171: ch = 0xFB; break;
+ case 0x0179: ch = 0x8D; break;
+ case 0x017A: ch = 0xAB; break;
+ case 0x017B: ch = 0xBD; break;
+ case 0x017C: ch = 0xBE; break;
+ case 0x017D: ch = 0xA6; break;
+ case 0x017E: ch = 0xA7; break;
+ case 0x02C7: ch = 0xF3; break;
+ case 0x02D8: ch = 0xF4; break;
+ case 0x02D9: ch = 0xFA; break;
+ case 0x02DB: ch = 0xF2; break;
+ case 0x02DD: ch = 0xF1; break;
+ case 0x2022: ch = 0x07; break;
+ case 0x203C: ch = 0x13; break;
+ case 0x2190: ch = 0x1B; break;
+ case 0x2191: ch = 0x18; break;
+ case 0x2192: ch = 0x1A; break;
+ case 0x2193: ch = 0x19; break;
+ case 0x2194: ch = 0x1D; break;
+ case 0x2195: ch = 0x12; break;
+ case 0x21A8: ch = 0x17; break;
+ case 0x221F: ch = 0x1C; break;
+ case 0x2302: ch = 0x7F; break;
+ case 0x2500: ch = 0xC4; break;
+ case 0x2502: ch = 0xB3; break;
+ case 0x250C: ch = 0xDA; break;
+ case 0x2510: ch = 0xBF; break;
+ case 0x2514: ch = 0xC0; break;
+ case 0x2518: ch = 0xD9; break;
+ case 0x251C: ch = 0xC3; break;
+ case 0x2524: ch = 0xB4; break;
+ case 0x252C: ch = 0xC2; break;
+ case 0x2534: ch = 0xC1; break;
+ case 0x253C: ch = 0xC5; break;
+ case 0x2550: ch = 0xCD; break;
+ case 0x2551: ch = 0xBA; break;
+ case 0x2554: ch = 0xC9; break;
+ case 0x2557: ch = 0xBB; break;
+ case 0x255A: ch = 0xC8; break;
+ case 0x255D: ch = 0xBC; break;
+ case 0x2560: ch = 0xCC; break;
+ case 0x2563: ch = 0xB9; break;
+ case 0x2566: ch = 0xCB; break;
+ case 0x2569: ch = 0xCA; break;
+ case 0x256C: ch = 0xCE; break;
+ case 0x2580: ch = 0xDF; break;
+ case 0x2584: ch = 0xDC; break;
+ case 0x2588: ch = 0xDB; break;
+ case 0x2591: ch = 0xB0; break;
+ case 0x2592: ch = 0xB1; break;
+ case 0x2593: ch = 0xB2; break;
+ case 0x25A0: ch = 0xFE; break;
+ case 0x25AC: ch = 0x16; break;
+ case 0x25B2: ch = 0x1E; break;
+ case 0x25BA: ch = 0x10; break;
+ case 0x25BC: ch = 0x1F; break;
+ case 0x25C4: ch = 0x11; break;
+ case 0x25CB: ch = 0x09; break;
+ case 0x25D8: ch = 0x08; break;
+ case 0x25D9: ch = 0x0A; break;
+ case 0x263A: ch = 0x01; break;
+ case 0x263B: ch = 0x02; break;
+ case 0x263C: ch = 0x0F; break;
+ case 0x2640: ch = 0x0C; break;
+ case 0x2642: ch = 0x0B; break;
+ case 0x2660: ch = 0x06; break;
+ case 0x2663: ch = 0x05; break;
+ case 0x2665: ch = 0x03; break;
+ case 0x2666: ch = 0x04; break;
+ case 0x266A: ch = 0x0D; break;
+ case 0x266C: ch = 0x0E; break;
+ case 0xFFE8: ch = 0xB3; break;
+ case 0xFFE9: ch = 0x1B; break;
+ case 0xFFEA: ch = 0x18; break;
+ case 0xFFEB: ch = 0x1A; break;
+ case 0xFFEC: ch = 0x19; break;
+ case 0xFFED: ch = 0xFE; break;
+ case 0xFFEE: ch = 0x09; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP852
+
+public class ENCibm852 : CP852
+{
+ public ENCibm852() : base() {}
+
+}; // class ENCibm852
+
+}; // namespace I18N.Rare
diff --git a/mcs/class/I18N/Rare/CP855.cs b/mcs/class/I18N/Rare/CP855.cs
new file mode 100644
index 00000000000..665ece07051
--- /dev/null
+++ b/mcs/class/I18N/Rare/CP855.cs
@@ -0,0 +1,679 @@
+/*
+ * CP855.cs - Cyrillic (DOS) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-855.ucm".
+
+namespace I18N.Rare
+{
+
+using System;
+using I18N.Common;
+
+public class CP855 : ByteEncoding
+{
+ public CP855()
+ : base(855, ToChars, "Cyrillic (DOS)",
+ "ibm855", "ibm855", "ibm855",
+ false, false, false, false, 1251)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
+ '\u0006', '\u0007', '\u0008', '\u0009', '\u000A', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
+ '\u0018', '\u0019', '\u001C', '\u001B', '\u007F', '\u001D',
+ '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
+ '\u0024', '\u0025', '\u0026', '\u0027', '\u0028', '\u0029',
+ '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
+ '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
+ '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
+ '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
+ '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
+ '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
+ '\u005A', '\u005B', '\u005C', '\u005D', '\u005E', '\u005F',
+ '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
+ '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
+ '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
+ '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
+ '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
+ '\u007E', '\u001A', '\u0452', '\u0402', '\u0453', '\u0403',
+ '\u0451', '\u0401', '\u0454', '\u0404', '\u0455', '\u0405',
+ '\u0456', '\u0406', '\u0457', '\u0407', '\u0458', '\u0408',
+ '\u0459', '\u0409', '\u045A', '\u040A', '\u045B', '\u040B',
+ '\u045C', '\u040C', '\u045E', '\u040E', '\u045F', '\u040F',
+ '\u044E', '\u042E', '\u044A', '\u042A', '\u0430', '\u0410',
+ '\u0431', '\u0411', '\u0446', '\u0426', '\u0434', '\u0414',
+ '\u0435', '\u0415', '\u0444', '\u0424', '\u0433', '\u0413',
+ '\u00AB', '\u00BB', '\u2591', '\u2592', '\u2593', '\u2502',
+ '\u2524', '\u0445', '\u0425', '\u0438', '\u0418', '\u2563',
+ '\u2551', '\u2557', '\u255D', '\u0439', '\u0419', '\u2510',
+ '\u2514', '\u2534', '\u252C', '\u251C', '\u2500', '\u253C',
+ '\u043A', '\u041A', '\u255A', '\u2554', '\u2569', '\u2566',
+ '\u2560', '\u2550', '\u256C', '\u00A4', '\u043B', '\u041B',
+ '\u043C', '\u041C', '\u043D', '\u041D', '\u043E', '\u041E',
+ '\u043F', '\u2518', '\u250C', '\u2588', '\u2584', '\u041F',
+ '\u044F', '\u2580', '\u042F', '\u0440', '\u0420', '\u0441',
+ '\u0421', '\u0442', '\u0422', '\u0443', '\u0423', '\u0436',
+ '\u0416', '\u0432', '\u0412', '\u044C', '\u042C', '\u2116',
+ '\u00AD', '\u044B', '\u042B', '\u0437', '\u0417', '\u0448',
+ '\u0428', '\u044D', '\u042D', '\u0449', '\u0429', '\u0447',
+ '\u0427', '\u00A7', '\u25A0', '\u00A0',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 26) switch(ch)
+ {
+ case 0x001B:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x0020:
+ case 0x0021:
+ case 0x0022:
+ case 0x0023:
+ case 0x0024:
+ case 0x0025:
+ case 0x0026:
+ case 0x0027:
+ case 0x0028:
+ case 0x0029:
+ case 0x002A:
+ case 0x002B:
+ case 0x002C:
+ case 0x002D:
+ case 0x002E:
+ case 0x002F:
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ case 0x003A:
+ case 0x003B:
+ case 0x003C:
+ case 0x003D:
+ case 0x003E:
+ case 0x003F:
+ case 0x0040:
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ case 0x005B:
+ case 0x005C:
+ case 0x005D:
+ case 0x005E:
+ case 0x005F:
+ case 0x0060:
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ case 0x007B:
+ case 0x007C:
+ case 0x007D:
+ case 0x007E:
+ break;
+ case 0x001A: ch = 0x7F; break;
+ case 0x001C: ch = 0x1A; break;
+ case 0x007F: ch = 0x1C; break;
+ case 0x00A0: ch = 0xFF; break;
+ case 0x00A4: ch = 0xCF; break;
+ case 0x00A7: ch = 0xFD; break;
+ case 0x00AB: ch = 0xAE; break;
+ case 0x00AD: ch = 0xF0; break;
+ case 0x00B6: ch = 0x14; break;
+ case 0x00BB: ch = 0xAF; break;
+ case 0x0401: ch = 0x85; break;
+ case 0x0402: ch = 0x81; break;
+ case 0x0403: ch = 0x83; break;
+ case 0x0404: ch = 0x87; break;
+ case 0x0405: ch = 0x89; break;
+ case 0x0406: ch = 0x8B; break;
+ case 0x0407: ch = 0x8D; break;
+ case 0x0408: ch = 0x8F; break;
+ case 0x0409: ch = 0x91; break;
+ case 0x040A: ch = 0x93; break;
+ case 0x040B: ch = 0x95; break;
+ case 0x040C: ch = 0x97; break;
+ case 0x040E: ch = 0x99; break;
+ case 0x040F: ch = 0x9B; break;
+ case 0x0410: ch = 0xA1; break;
+ case 0x0411: ch = 0xA3; break;
+ case 0x0412: ch = 0xEC; break;
+ case 0x0413: ch = 0xAD; break;
+ case 0x0414: ch = 0xA7; break;
+ case 0x0415: ch = 0xA9; break;
+ case 0x0416: ch = 0xEA; break;
+ case 0x0417: ch = 0xF4; break;
+ case 0x0418: ch = 0xB8; break;
+ case 0x0419: ch = 0xBE; break;
+ case 0x041A: ch = 0xC7; break;
+ case 0x041B: ch = 0xD1; break;
+ case 0x041C: ch = 0xD3; break;
+ case 0x041D: ch = 0xD5; break;
+ case 0x041E: ch = 0xD7; break;
+ case 0x041F: ch = 0xDD; break;
+ case 0x0420: ch = 0xE2; break;
+ case 0x0421: ch = 0xE4; break;
+ case 0x0422: ch = 0xE6; break;
+ case 0x0423: ch = 0xE8; break;
+ case 0x0424: ch = 0xAB; break;
+ case 0x0425: ch = 0xB6; break;
+ case 0x0426: ch = 0xA5; break;
+ case 0x0427: ch = 0xFC; break;
+ case 0x0428: ch = 0xF6; break;
+ case 0x0429: ch = 0xFA; break;
+ case 0x042A: ch = 0x9F; break;
+ case 0x042B: ch = 0xF2; break;
+ case 0x042C: ch = 0xEE; break;
+ case 0x042D: ch = 0xF8; break;
+ case 0x042E: ch = 0x9D; break;
+ case 0x042F: ch = 0xE0; break;
+ case 0x0430: ch = 0xA0; break;
+ case 0x0431: ch = 0xA2; break;
+ case 0x0432: ch = 0xEB; break;
+ case 0x0433: ch = 0xAC; break;
+ case 0x0434: ch = 0xA6; break;
+ case 0x0435: ch = 0xA8; break;
+ case 0x0436: ch = 0xE9; break;
+ case 0x0437: ch = 0xF3; break;
+ case 0x0438: ch = 0xB7; break;
+ case 0x0439: ch = 0xBD; break;
+ case 0x043A: ch = 0xC6; break;
+ case 0x043B: ch = 0xD0; break;
+ case 0x043C: ch = 0xD2; break;
+ case 0x043D: ch = 0xD4; break;
+ case 0x043E: ch = 0xD6; break;
+ case 0x043F: ch = 0xD8; break;
+ case 0x0440: ch = 0xE1; break;
+ case 0x0441: ch = 0xE3; break;
+ case 0x0442: ch = 0xE5; break;
+ case 0x0443: ch = 0xE7; break;
+ case 0x0444: ch = 0xAA; break;
+ case 0x0445: ch = 0xB5; break;
+ case 0x0446: ch = 0xA4; break;
+ case 0x0447: ch = 0xFB; break;
+ case 0x0448: ch = 0xF5; break;
+ case 0x0449: ch = 0xF9; break;
+ case 0x044A: ch = 0x9E; break;
+ case 0x044B: ch = 0xF1; break;
+ case 0x044C: ch = 0xED; break;
+ case 0x044D: ch = 0xF7; break;
+ case 0x044E: ch = 0x9C; break;
+ case 0x044F: ch = 0xDE; break;
+ case 0x0451: ch = 0x84; break;
+ case 0x0452: ch = 0x80; break;
+ case 0x0453: ch = 0x82; break;
+ case 0x0454: ch = 0x86; break;
+ case 0x0455: ch = 0x88; break;
+ case 0x0456: ch = 0x8A; break;
+ case 0x0457: ch = 0x8C; break;
+ case 0x0458: ch = 0x8E; break;
+ case 0x0459: ch = 0x90; break;
+ case 0x045A: ch = 0x92; break;
+ case 0x045B: ch = 0x94; break;
+ case 0x045C: ch = 0x96; break;
+ case 0x045E: ch = 0x98; break;
+ case 0x045F: ch = 0x9A; break;
+ case 0x2022: ch = 0x07; break;
+ case 0x203C: ch = 0x13; break;
+ case 0x2116: ch = 0xEF; break;
+ case 0x2190: ch = 0x1B; break;
+ case 0x2191: ch = 0x18; break;
+ case 0x2192: ch = 0x1A; break;
+ case 0x2193: ch = 0x19; break;
+ case 0x2194: ch = 0x1D; break;
+ case 0x2195: ch = 0x12; break;
+ case 0x21A8: ch = 0x17; break;
+ case 0x221F: ch = 0x1C; break;
+ case 0x2302: ch = 0x7F; break;
+ case 0x2500: ch = 0xC4; break;
+ case 0x2502: ch = 0xB3; break;
+ case 0x250C: ch = 0xDA; break;
+ case 0x2510: ch = 0xBF; break;
+ case 0x2514: ch = 0xC0; break;
+ case 0x2518: ch = 0xD9; break;
+ case 0x251C: ch = 0xC3; break;
+ case 0x2524: ch = 0xB4; break;
+ case 0x252C: ch = 0xC2; break;
+ case 0x2534: ch = 0xC1; break;
+ case 0x253C: ch = 0xC5; break;
+ case 0x2550: ch = 0xCD; break;
+ case 0x2551: ch = 0xBA; break;
+ case 0x2554: ch = 0xC9; break;
+ case 0x2557: ch = 0xBB; break;
+ case 0x255A: ch = 0xC8; break;
+ case 0x255D: ch = 0xBC; break;
+ case 0x2560: ch = 0xCC; break;
+ case 0x2563: ch = 0xB9; break;
+ case 0x2566: ch = 0xCB; break;
+ case 0x2569: ch = 0xCA; break;
+ case 0x256C: ch = 0xCE; break;
+ case 0x2580: ch = 0xDF; break;
+ case 0x2584: ch = 0xDC; break;
+ case 0x2588: ch = 0xDB; break;
+ case 0x2591: ch = 0xB0; break;
+ case 0x2592: ch = 0xB1; break;
+ case 0x2593: ch = 0xB2; break;
+ case 0x25A0: ch = 0xFE; break;
+ case 0x25AC: ch = 0x16; break;
+ case 0x25B2: ch = 0x1E; break;
+ case 0x25BA: ch = 0x10; break;
+ case 0x25BC: ch = 0x1F; break;
+ case 0x25C4: ch = 0x11; break;
+ case 0x25CB: ch = 0x09; break;
+ case 0x25D8: ch = 0x08; break;
+ case 0x25D9: ch = 0x0A; break;
+ case 0x263A: ch = 0x01; break;
+ case 0x263B: ch = 0x02; break;
+ case 0x263C: ch = 0x0F; break;
+ case 0x2640: ch = 0x0C; break;
+ case 0x2642: ch = 0x0B; break;
+ case 0x2660: ch = 0x06; break;
+ case 0x2663: ch = 0x05; break;
+ case 0x2665: ch = 0x03; break;
+ case 0x2666: ch = 0x04; break;
+ case 0x266A: ch = 0x0D; break;
+ case 0x266B: ch = 0x0E; break;
+ case 0xFFE8: ch = 0xB3; break;
+ case 0xFFE9: ch = 0x1B; break;
+ case 0xFFEA: ch = 0x18; break;
+ case 0xFFEB: ch = 0x1A; break;
+ case 0xFFEC: ch = 0x19; break;
+ case 0xFFED: ch = 0xFE; break;
+ case 0xFFEE: ch = 0x09; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 26) switch(ch)
+ {
+ case 0x001B:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x0020:
+ case 0x0021:
+ case 0x0022:
+ case 0x0023:
+ case 0x0024:
+ case 0x0025:
+ case 0x0026:
+ case 0x0027:
+ case 0x0028:
+ case 0x0029:
+ case 0x002A:
+ case 0x002B:
+ case 0x002C:
+ case 0x002D:
+ case 0x002E:
+ case 0x002F:
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ case 0x003A:
+ case 0x003B:
+ case 0x003C:
+ case 0x003D:
+ case 0x003E:
+ case 0x003F:
+ case 0x0040:
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ case 0x005B:
+ case 0x005C:
+ case 0x005D:
+ case 0x005E:
+ case 0x005F:
+ case 0x0060:
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ case 0x007B:
+ case 0x007C:
+ case 0x007D:
+ case 0x007E:
+ break;
+ case 0x001A: ch = 0x7F; break;
+ case 0x001C: ch = 0x1A; break;
+ case 0x007F: ch = 0x1C; break;
+ case 0x00A0: ch = 0xFF; break;
+ case 0x00A4: ch = 0xCF; break;
+ case 0x00A7: ch = 0xFD; break;
+ case 0x00AB: ch = 0xAE; break;
+ case 0x00AD: ch = 0xF0; break;
+ case 0x00B6: ch = 0x14; break;
+ case 0x00BB: ch = 0xAF; break;
+ case 0x0401: ch = 0x85; break;
+ case 0x0402: ch = 0x81; break;
+ case 0x0403: ch = 0x83; break;
+ case 0x0404: ch = 0x87; break;
+ case 0x0405: ch = 0x89; break;
+ case 0x0406: ch = 0x8B; break;
+ case 0x0407: ch = 0x8D; break;
+ case 0x0408: ch = 0x8F; break;
+ case 0x0409: ch = 0x91; break;
+ case 0x040A: ch = 0x93; break;
+ case 0x040B: ch = 0x95; break;
+ case 0x040C: ch = 0x97; break;
+ case 0x040E: ch = 0x99; break;
+ case 0x040F: ch = 0x9B; break;
+ case 0x0410: ch = 0xA1; break;
+ case 0x0411: ch = 0xA3; break;
+ case 0x0412: ch = 0xEC; break;
+ case 0x0413: ch = 0xAD; break;
+ case 0x0414: ch = 0xA7; break;
+ case 0x0415: ch = 0xA9; break;
+ case 0x0416: ch = 0xEA; break;
+ case 0x0417: ch = 0xF4; break;
+ case 0x0418: ch = 0xB8; break;
+ case 0x0419: ch = 0xBE; break;
+ case 0x041A: ch = 0xC7; break;
+ case 0x041B: ch = 0xD1; break;
+ case 0x041C: ch = 0xD3; break;
+ case 0x041D: ch = 0xD5; break;
+ case 0x041E: ch = 0xD7; break;
+ case 0x041F: ch = 0xDD; break;
+ case 0x0420: ch = 0xE2; break;
+ case 0x0421: ch = 0xE4; break;
+ case 0x0422: ch = 0xE6; break;
+ case 0x0423: ch = 0xE8; break;
+ case 0x0424: ch = 0xAB; break;
+ case 0x0425: ch = 0xB6; break;
+ case 0x0426: ch = 0xA5; break;
+ case 0x0427: ch = 0xFC; break;
+ case 0x0428: ch = 0xF6; break;
+ case 0x0429: ch = 0xFA; break;
+ case 0x042A: ch = 0x9F; break;
+ case 0x042B: ch = 0xF2; break;
+ case 0x042C: ch = 0xEE; break;
+ case 0x042D: ch = 0xF8; break;
+ case 0x042E: ch = 0x9D; break;
+ case 0x042F: ch = 0xE0; break;
+ case 0x0430: ch = 0xA0; break;
+ case 0x0431: ch = 0xA2; break;
+ case 0x0432: ch = 0xEB; break;
+ case 0x0433: ch = 0xAC; break;
+ case 0x0434: ch = 0xA6; break;
+ case 0x0435: ch = 0xA8; break;
+ case 0x0436: ch = 0xE9; break;
+ case 0x0437: ch = 0xF3; break;
+ case 0x0438: ch = 0xB7; break;
+ case 0x0439: ch = 0xBD; break;
+ case 0x043A: ch = 0xC6; break;
+ case 0x043B: ch = 0xD0; break;
+ case 0x043C: ch = 0xD2; break;
+ case 0x043D: ch = 0xD4; break;
+ case 0x043E: ch = 0xD6; break;
+ case 0x043F: ch = 0xD8; break;
+ case 0x0440: ch = 0xE1; break;
+ case 0x0441: ch = 0xE3; break;
+ case 0x0442: ch = 0xE5; break;
+ case 0x0443: ch = 0xE7; break;
+ case 0x0444: ch = 0xAA; break;
+ case 0x0445: ch = 0xB5; break;
+ case 0x0446: ch = 0xA4; break;
+ case 0x0447: ch = 0xFB; break;
+ case 0x0448: ch = 0xF5; break;
+ case 0x0449: ch = 0xF9; break;
+ case 0x044A: ch = 0x9E; break;
+ case 0x044B: ch = 0xF1; break;
+ case 0x044C: ch = 0xED; break;
+ case 0x044D: ch = 0xF7; break;
+ case 0x044E: ch = 0x9C; break;
+ case 0x044F: ch = 0xDE; break;
+ case 0x0451: ch = 0x84; break;
+ case 0x0452: ch = 0x80; break;
+ case 0x0453: ch = 0x82; break;
+ case 0x0454: ch = 0x86; break;
+ case 0x0455: ch = 0x88; break;
+ case 0x0456: ch = 0x8A; break;
+ case 0x0457: ch = 0x8C; break;
+ case 0x0458: ch = 0x8E; break;
+ case 0x0459: ch = 0x90; break;
+ case 0x045A: ch = 0x92; break;
+ case 0x045B: ch = 0x94; break;
+ case 0x045C: ch = 0x96; break;
+ case 0x045E: ch = 0x98; break;
+ case 0x045F: ch = 0x9A; break;
+ case 0x2022: ch = 0x07; break;
+ case 0x203C: ch = 0x13; break;
+ case 0x2116: ch = 0xEF; break;
+ case 0x2190: ch = 0x1B; break;
+ case 0x2191: ch = 0x18; break;
+ case 0x2192: ch = 0x1A; break;
+ case 0x2193: ch = 0x19; break;
+ case 0x2194: ch = 0x1D; break;
+ case 0x2195: ch = 0x12; break;
+ case 0x21A8: ch = 0x17; break;
+ case 0x221F: ch = 0x1C; break;
+ case 0x2302: ch = 0x7F; break;
+ case 0x2500: ch = 0xC4; break;
+ case 0x2502: ch = 0xB3; break;
+ case 0x250C: ch = 0xDA; break;
+ case 0x2510: ch = 0xBF; break;
+ case 0x2514: ch = 0xC0; break;
+ case 0x2518: ch = 0xD9; break;
+ case 0x251C: ch = 0xC3; break;
+ case 0x2524: ch = 0xB4; break;
+ case 0x252C: ch = 0xC2; break;
+ case 0x2534: ch = 0xC1; break;
+ case 0x253C: ch = 0xC5; break;
+ case 0x2550: ch = 0xCD; break;
+ case 0x2551: ch = 0xBA; break;
+ case 0x2554: ch = 0xC9; break;
+ case 0x2557: ch = 0xBB; break;
+ case 0x255A: ch = 0xC8; break;
+ case 0x255D: ch = 0xBC; break;
+ case 0x2560: ch = 0xCC; break;
+ case 0x2563: ch = 0xB9; break;
+ case 0x2566: ch = 0xCB; break;
+ case 0x2569: ch = 0xCA; break;
+ case 0x256C: ch = 0xCE; break;
+ case 0x2580: ch = 0xDF; break;
+ case 0x2584: ch = 0xDC; break;
+ case 0x2588: ch = 0xDB; break;
+ case 0x2591: ch = 0xB0; break;
+ case 0x2592: ch = 0xB1; break;
+ case 0x2593: ch = 0xB2; break;
+ case 0x25A0: ch = 0xFE; break;
+ case 0x25AC: ch = 0x16; break;
+ case 0x25B2: ch = 0x1E; break;
+ case 0x25BA: ch = 0x10; break;
+ case 0x25BC: ch = 0x1F; break;
+ case 0x25C4: ch = 0x11; break;
+ case 0x25CB: ch = 0x09; break;
+ case 0x25D8: ch = 0x08; break;
+ case 0x25D9: ch = 0x0A; break;
+ case 0x263A: ch = 0x01; break;
+ case 0x263B: ch = 0x02; break;
+ case 0x263C: ch = 0x0F; break;
+ case 0x2640: ch = 0x0C; break;
+ case 0x2642: ch = 0x0B; break;
+ case 0x2660: ch = 0x06; break;
+ case 0x2663: ch = 0x05; break;
+ case 0x2665: ch = 0x03; break;
+ case 0x2666: ch = 0x04; break;
+ case 0x266A: ch = 0x0D; break;
+ case 0x266B: ch = 0x0E; break;
+ case 0xFFE8: ch = 0xB3; break;
+ case 0xFFE9: ch = 0x1B; break;
+ case 0xFFEA: ch = 0x18; break;
+ case 0xFFEB: ch = 0x1A; break;
+ case 0xFFEC: ch = 0x19; break;
+ case 0xFFED: ch = 0xFE; break;
+ case 0xFFEE: ch = 0x09; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP855
+
+public class ENCibm855 : CP855
+{
+ public ENCibm855() : base() {}
+
+}; // class ENCibm855
+
+}; // namespace I18N.Rare
diff --git a/mcs/class/I18N/Rare/CP857.cs b/mcs/class/I18N/Rare/CP857.cs
new file mode 100644
index 00000000000..9d2b85e0708
--- /dev/null
+++ b/mcs/class/I18N/Rare/CP857.cs
@@ -0,0 +1,673 @@
+/*
+ * CP857.cs - Turkish (DOS) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-857.ucm".
+
+namespace I18N.Rare
+{
+
+using System;
+using I18N.Common;
+
+public class CP857 : ByteEncoding
+{
+ public CP857()
+ : base(857, ToChars, "Turkish (DOS)",
+ "ibm857", "ibm857", "ibm857",
+ false, false, false, false, 1254)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
+ '\u0006', '\u0007', '\u0008', '\u0009', '\u000A', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
+ '\u0018', '\u0019', '\u001C', '\u001B', '\u007F', '\u001D',
+ '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
+ '\u0024', '\u0025', '\u0026', '\u0027', '\u0028', '\u0029',
+ '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
+ '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
+ '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
+ '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
+ '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
+ '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
+ '\u005A', '\u005B', '\u005C', '\u005D', '\u005E', '\u005F',
+ '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
+ '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
+ '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
+ '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
+ '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
+ '\u007E', '\u001A', '\u00C7', '\u00FC', '\u00E9', '\u00E2',
+ '\u00E4', '\u00E0', '\u00E5', '\u00E7', '\u00EA', '\u00EB',
+ '\u00E8', '\u00EF', '\u00EE', '\u0131', '\u00C4', '\u00C5',
+ '\u00C9', '\u00E6', '\u00C6', '\u00F4', '\u00F6', '\u00F2',
+ '\u00FB', '\u00F9', '\u0130', '\u00D6', '\u00DC', '\u00F8',
+ '\u00A3', '\u00D8', '\u015E', '\u015F', '\u00E1', '\u00ED',
+ '\u00F3', '\u00FA', '\u00F1', '\u00D1', '\u011E', '\u011F',
+ '\u00BF', '\u00AE', '\u00AC', '\u00BD', '\u00BC', '\u00A1',
+ '\u00AB', '\u00BB', '\u2591', '\u2592', '\u2593', '\u2502',
+ '\u2524', '\u00C1', '\u00C2', '\u00C0', '\u00A9', '\u2563',
+ '\u2551', '\u2557', '\u255D', '\u00A2', '\u00A5', '\u2510',
+ '\u2514', '\u2534', '\u252C', '\u251C', '\u2500', '\u253C',
+ '\u00E3', '\u00C3', '\u255A', '\u2554', '\u2569', '\u2566',
+ '\u2560', '\u2550', '\u256C', '\u00A4', '\u00BA', '\u00AA',
+ '\u00CA', '\u00CB', '\u00C8', '\u003F', '\u00CD', '\u00CE',
+ '\u00CF', '\u2518', '\u250C', '\u2588', '\u2584', '\u00A6',
+ '\u00CC', '\u2580', '\u00D3', '\u00DF', '\u00D4', '\u00D2',
+ '\u00F5', '\u00D5', '\u00B5', '\u003F', '\u00D7', '\u00DA',
+ '\u00DB', '\u00D9', '\u00EC', '\u00FF', '\u00AF', '\u00B4',
+ '\u00AD', '\u00B1', '\u003F', '\u00BE', '\u00B6', '\u00A7',
+ '\u00F7', '\u00B8', '\u00B0', '\u00A8', '\u00B7', '\u00B9',
+ '\u00B3', '\u00B2', '\u25A0', '\u00A0',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 26) switch(ch)
+ {
+ case 0x001B:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x0020:
+ case 0x0021:
+ case 0x0022:
+ case 0x0023:
+ case 0x0024:
+ case 0x0025:
+ case 0x0026:
+ case 0x0027:
+ case 0x0028:
+ case 0x0029:
+ case 0x002A:
+ case 0x002B:
+ case 0x002C:
+ case 0x002D:
+ case 0x002E:
+ case 0x002F:
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ case 0x003A:
+ case 0x003B:
+ case 0x003C:
+ case 0x003D:
+ case 0x003E:
+ case 0x003F:
+ case 0x0040:
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ case 0x005B:
+ case 0x005C:
+ case 0x005D:
+ case 0x005E:
+ case 0x005F:
+ case 0x0060:
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ case 0x007B:
+ case 0x007C:
+ case 0x007D:
+ case 0x007E:
+ case 0x00EC:
+ break;
+ case 0x001A: ch = 0x7F; break;
+ case 0x001C: ch = 0x1A; break;
+ case 0x007F: ch = 0x1C; break;
+ case 0x00A0: ch = 0xFF; break;
+ case 0x00A1: ch = 0xAD; break;
+ case 0x00A2: ch = 0xBD; break;
+ case 0x00A3: ch = 0x9C; break;
+ case 0x00A4: ch = 0xCF; break;
+ case 0x00A5: ch = 0xBE; break;
+ case 0x00A6: ch = 0xDD; break;
+ case 0x00A7: ch = 0xF5; break;
+ case 0x00A8: ch = 0xF9; break;
+ case 0x00A9: ch = 0xB8; break;
+ case 0x00AA: ch = 0xD1; break;
+ case 0x00AB: ch = 0xAE; break;
+ case 0x00AC: ch = 0xAA; break;
+ case 0x00AD: ch = 0xF0; break;
+ case 0x00AE: ch = 0xA9; break;
+ case 0x00AF: ch = 0xEE; break;
+ case 0x00B0: ch = 0xF8; break;
+ case 0x00B1: ch = 0xF1; break;
+ case 0x00B2: ch = 0xFD; break;
+ case 0x00B3: ch = 0xFC; break;
+ case 0x00B4: ch = 0xEF; break;
+ case 0x00B5: ch = 0xE6; break;
+ case 0x00B6: ch = 0xF4; break;
+ case 0x00B7: ch = 0xFA; break;
+ case 0x00B8: ch = 0xF7; break;
+ case 0x00B9: ch = 0xFB; break;
+ case 0x00BA: ch = 0xD0; break;
+ case 0x00BB: ch = 0xAF; break;
+ case 0x00BC: ch = 0xAC; break;
+ case 0x00BD: ch = 0xAB; break;
+ case 0x00BE: ch = 0xF3; break;
+ case 0x00BF: ch = 0xA8; break;
+ case 0x00C0: ch = 0xB7; break;
+ case 0x00C1: ch = 0xB5; break;
+ case 0x00C2: ch = 0xB6; break;
+ case 0x00C3: ch = 0xC7; break;
+ case 0x00C4: ch = 0x8E; break;
+ case 0x00C5: ch = 0x8F; break;
+ case 0x00C6: ch = 0x92; break;
+ case 0x00C7: ch = 0x80; break;
+ case 0x00C8: ch = 0xD4; break;
+ case 0x00C9: ch = 0x90; break;
+ case 0x00CA: ch = 0xD2; break;
+ case 0x00CB: ch = 0xD3; break;
+ case 0x00CC: ch = 0xDE; break;
+ case 0x00CD: ch = 0xD6; break;
+ case 0x00CE: ch = 0xD7; break;
+ case 0x00CF: ch = 0xD8; break;
+ case 0x00D1: ch = 0xA5; break;
+ case 0x00D2: ch = 0xE3; break;
+ case 0x00D3: ch = 0xE0; break;
+ case 0x00D4: ch = 0xE2; break;
+ case 0x00D5: ch = 0xE5; break;
+ case 0x00D6: ch = 0x99; break;
+ case 0x00D7: ch = 0xE8; break;
+ case 0x00D8: ch = 0x9D; break;
+ case 0x00D9: ch = 0xEB; break;
+ case 0x00DA: ch = 0xE9; break;
+ case 0x00DB: ch = 0xEA; break;
+ case 0x00DC: ch = 0x9A; break;
+ case 0x00DF: ch = 0xE1; break;
+ case 0x00E0: ch = 0x85; break;
+ case 0x00E1: ch = 0xA0; break;
+ case 0x00E2: ch = 0x83; break;
+ case 0x00E3: ch = 0xC6; break;
+ case 0x00E4: ch = 0x84; break;
+ case 0x00E5: ch = 0x86; break;
+ case 0x00E6: ch = 0x91; break;
+ case 0x00E7: ch = 0x87; break;
+ case 0x00E8: ch = 0x8A; break;
+ case 0x00E9: ch = 0x82; break;
+ case 0x00EA: ch = 0x88; break;
+ case 0x00EB: ch = 0x89; break;
+ case 0x00ED: ch = 0xA1; break;
+ case 0x00EE: ch = 0x8C; break;
+ case 0x00EF: ch = 0x8B; break;
+ case 0x00F1: ch = 0xA4; break;
+ case 0x00F2: ch = 0x95; break;
+ case 0x00F3: ch = 0xA2; break;
+ case 0x00F4: ch = 0x93; break;
+ case 0x00F5: ch = 0xE4; break;
+ case 0x00F6: ch = 0x94; break;
+ case 0x00F7: ch = 0xF6; break;
+ case 0x00F8: ch = 0x9B; break;
+ case 0x00F9: ch = 0x97; break;
+ case 0x00FA: ch = 0xA3; break;
+ case 0x00FB: ch = 0x96; break;
+ case 0x00FC: ch = 0x81; break;
+ case 0x00FF: ch = 0xED; break;
+ case 0x011E: ch = 0xA6; break;
+ case 0x011F: ch = 0xA7; break;
+ case 0x0130: ch = 0x98; break;
+ case 0x0131: ch = 0x8D; break;
+ case 0x015E: ch = 0x9E; break;
+ case 0x015F: ch = 0x9F; break;
+ case 0x2022: ch = 0x07; break;
+ case 0x203C: ch = 0x13; break;
+ case 0x203E: ch = 0xEE; break;
+ case 0x2190: ch = 0x1B; break;
+ case 0x2191: ch = 0x18; break;
+ case 0x2192: ch = 0x1A; break;
+ case 0x2193: ch = 0x19; break;
+ case 0x2194: ch = 0x1D; break;
+ case 0x2195: ch = 0x12; break;
+ case 0x21A8: ch = 0x17; break;
+ case 0x221F: ch = 0x1C; break;
+ case 0x2302: ch = 0x7F; break;
+ case 0x2500: ch = 0xC4; break;
+ case 0x2502: ch = 0xB3; break;
+ case 0x250C: ch = 0xDA; break;
+ case 0x2510: ch = 0xBF; break;
+ case 0x2514: ch = 0xC0; break;
+ case 0x2518: ch = 0xD9; break;
+ case 0x251C: ch = 0xC3; break;
+ case 0x2524: ch = 0xB4; break;
+ case 0x252C: ch = 0xC2; break;
+ case 0x2534: ch = 0xC1; break;
+ case 0x253C: ch = 0xC5; break;
+ case 0x2550: ch = 0xCD; break;
+ case 0x2551: ch = 0xBA; break;
+ case 0x2554: ch = 0xC9; break;
+ case 0x2557: ch = 0xBB; break;
+ case 0x255A: ch = 0xC8; break;
+ case 0x255D: ch = 0xBC; break;
+ case 0x2560: ch = 0xCC; break;
+ case 0x2563: ch = 0xB9; break;
+ case 0x2566: ch = 0xCB; break;
+ case 0x2569: ch = 0xCA; break;
+ case 0x256C: ch = 0xCE; break;
+ case 0x2580: ch = 0xDF; break;
+ case 0x2584: ch = 0xDC; break;
+ case 0x2588: ch = 0xDB; break;
+ case 0x2591: ch = 0xB0; break;
+ case 0x2592: ch = 0xB1; break;
+ case 0x2593: ch = 0xB2; break;
+ case 0x25A0: ch = 0xFE; break;
+ case 0x25AC: ch = 0x16; break;
+ case 0x25B2: ch = 0x1E; break;
+ case 0x25BA: ch = 0x10; break;
+ case 0x25BC: ch = 0x1F; break;
+ case 0x25C4: ch = 0x11; break;
+ case 0x25CB: ch = 0x09; break;
+ case 0x25D8: ch = 0x08; break;
+ case 0x25D9: ch = 0x0A; break;
+ case 0x263A: ch = 0x01; break;
+ case 0x263B: ch = 0x02; break;
+ case 0x263C: ch = 0x0F; break;
+ case 0x2640: ch = 0x0C; break;
+ case 0x2642: ch = 0x0B; break;
+ case 0x2660: ch = 0x06; break;
+ case 0x2663: ch = 0x05; break;
+ case 0x2665: ch = 0x03; break;
+ case 0x2666: ch = 0x04; break;
+ case 0x266A: ch = 0x0D; break;
+ case 0x266B: ch = 0x0E; break;
+ case 0xFFE8: ch = 0xB3; break;
+ case 0xFFE9: ch = 0x1B; break;
+ case 0xFFEA: ch = 0x18; break;
+ case 0xFFEB: ch = 0x1A; break;
+ case 0xFFEC: ch = 0x19; break;
+ case 0xFFED: ch = 0xFE; break;
+ case 0xFFEE: ch = 0x09; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 26) switch(ch)
+ {
+ case 0x001B:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x0020:
+ case 0x0021:
+ case 0x0022:
+ case 0x0023:
+ case 0x0024:
+ case 0x0025:
+ case 0x0026:
+ case 0x0027:
+ case 0x0028:
+ case 0x0029:
+ case 0x002A:
+ case 0x002B:
+ case 0x002C:
+ case 0x002D:
+ case 0x002E:
+ case 0x002F:
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ case 0x003A:
+ case 0x003B:
+ case 0x003C:
+ case 0x003D:
+ case 0x003E:
+ case 0x003F:
+ case 0x0040:
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ case 0x005B:
+ case 0x005C:
+ case 0x005D:
+ case 0x005E:
+ case 0x005F:
+ case 0x0060:
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ case 0x007B:
+ case 0x007C:
+ case 0x007D:
+ case 0x007E:
+ case 0x00EC:
+ break;
+ case 0x001A: ch = 0x7F; break;
+ case 0x001C: ch = 0x1A; break;
+ case 0x007F: ch = 0x1C; break;
+ case 0x00A0: ch = 0xFF; break;
+ case 0x00A1: ch = 0xAD; break;
+ case 0x00A2: ch = 0xBD; break;
+ case 0x00A3: ch = 0x9C; break;
+ case 0x00A4: ch = 0xCF; break;
+ case 0x00A5: ch = 0xBE; break;
+ case 0x00A6: ch = 0xDD; break;
+ case 0x00A7: ch = 0xF5; break;
+ case 0x00A8: ch = 0xF9; break;
+ case 0x00A9: ch = 0xB8; break;
+ case 0x00AA: ch = 0xD1; break;
+ case 0x00AB: ch = 0xAE; break;
+ case 0x00AC: ch = 0xAA; break;
+ case 0x00AD: ch = 0xF0; break;
+ case 0x00AE: ch = 0xA9; break;
+ case 0x00AF: ch = 0xEE; break;
+ case 0x00B0: ch = 0xF8; break;
+ case 0x00B1: ch = 0xF1; break;
+ case 0x00B2: ch = 0xFD; break;
+ case 0x00B3: ch = 0xFC; break;
+ case 0x00B4: ch = 0xEF; break;
+ case 0x00B5: ch = 0xE6; break;
+ case 0x00B6: ch = 0xF4; break;
+ case 0x00B7: ch = 0xFA; break;
+ case 0x00B8: ch = 0xF7; break;
+ case 0x00B9: ch = 0xFB; break;
+ case 0x00BA: ch = 0xD0; break;
+ case 0x00BB: ch = 0xAF; break;
+ case 0x00BC: ch = 0xAC; break;
+ case 0x00BD: ch = 0xAB; break;
+ case 0x00BE: ch = 0xF3; break;
+ case 0x00BF: ch = 0xA8; break;
+ case 0x00C0: ch = 0xB7; break;
+ case 0x00C1: ch = 0xB5; break;
+ case 0x00C2: ch = 0xB6; break;
+ case 0x00C3: ch = 0xC7; break;
+ case 0x00C4: ch = 0x8E; break;
+ case 0x00C5: ch = 0x8F; break;
+ case 0x00C6: ch = 0x92; break;
+ case 0x00C7: ch = 0x80; break;
+ case 0x00C8: ch = 0xD4; break;
+ case 0x00C9: ch = 0x90; break;
+ case 0x00CA: ch = 0xD2; break;
+ case 0x00CB: ch = 0xD3; break;
+ case 0x00CC: ch = 0xDE; break;
+ case 0x00CD: ch = 0xD6; break;
+ case 0x00CE: ch = 0xD7; break;
+ case 0x00CF: ch = 0xD8; break;
+ case 0x00D1: ch = 0xA5; break;
+ case 0x00D2: ch = 0xE3; break;
+ case 0x00D3: ch = 0xE0; break;
+ case 0x00D4: ch = 0xE2; break;
+ case 0x00D5: ch = 0xE5; break;
+ case 0x00D6: ch = 0x99; break;
+ case 0x00D7: ch = 0xE8; break;
+ case 0x00D8: ch = 0x9D; break;
+ case 0x00D9: ch = 0xEB; break;
+ case 0x00DA: ch = 0xE9; break;
+ case 0x00DB: ch = 0xEA; break;
+ case 0x00DC: ch = 0x9A; break;
+ case 0x00DF: ch = 0xE1; break;
+ case 0x00E0: ch = 0x85; break;
+ case 0x00E1: ch = 0xA0; break;
+ case 0x00E2: ch = 0x83; break;
+ case 0x00E3: ch = 0xC6; break;
+ case 0x00E4: ch = 0x84; break;
+ case 0x00E5: ch = 0x86; break;
+ case 0x00E6: ch = 0x91; break;
+ case 0x00E7: ch = 0x87; break;
+ case 0x00E8: ch = 0x8A; break;
+ case 0x00E9: ch = 0x82; break;
+ case 0x00EA: ch = 0x88; break;
+ case 0x00EB: ch = 0x89; break;
+ case 0x00ED: ch = 0xA1; break;
+ case 0x00EE: ch = 0x8C; break;
+ case 0x00EF: ch = 0x8B; break;
+ case 0x00F1: ch = 0xA4; break;
+ case 0x00F2: ch = 0x95; break;
+ case 0x00F3: ch = 0xA2; break;
+ case 0x00F4: ch = 0x93; break;
+ case 0x00F5: ch = 0xE4; break;
+ case 0x00F6: ch = 0x94; break;
+ case 0x00F7: ch = 0xF6; break;
+ case 0x00F8: ch = 0x9B; break;
+ case 0x00F9: ch = 0x97; break;
+ case 0x00FA: ch = 0xA3; break;
+ case 0x00FB: ch = 0x96; break;
+ case 0x00FC: ch = 0x81; break;
+ case 0x00FF: ch = 0xED; break;
+ case 0x011E: ch = 0xA6; break;
+ case 0x011F: ch = 0xA7; break;
+ case 0x0130: ch = 0x98; break;
+ case 0x0131: ch = 0x8D; break;
+ case 0x015E: ch = 0x9E; break;
+ case 0x015F: ch = 0x9F; break;
+ case 0x2022: ch = 0x07; break;
+ case 0x203C: ch = 0x13; break;
+ case 0x203E: ch = 0xEE; break;
+ case 0x2190: ch = 0x1B; break;
+ case 0x2191: ch = 0x18; break;
+ case 0x2192: ch = 0x1A; break;
+ case 0x2193: ch = 0x19; break;
+ case 0x2194: ch = 0x1D; break;
+ case 0x2195: ch = 0x12; break;
+ case 0x21A8: ch = 0x17; break;
+ case 0x221F: ch = 0x1C; break;
+ case 0x2302: ch = 0x7F; break;
+ case 0x2500: ch = 0xC4; break;
+ case 0x2502: ch = 0xB3; break;
+ case 0x250C: ch = 0xDA; break;
+ case 0x2510: ch = 0xBF; break;
+ case 0x2514: ch = 0xC0; break;
+ case 0x2518: ch = 0xD9; break;
+ case 0x251C: ch = 0xC3; break;
+ case 0x2524: ch = 0xB4; break;
+ case 0x252C: ch = 0xC2; break;
+ case 0x2534: ch = 0xC1; break;
+ case 0x253C: ch = 0xC5; break;
+ case 0x2550: ch = 0xCD; break;
+ case 0x2551: ch = 0xBA; break;
+ case 0x2554: ch = 0xC9; break;
+ case 0x2557: ch = 0xBB; break;
+ case 0x255A: ch = 0xC8; break;
+ case 0x255D: ch = 0xBC; break;
+ case 0x2560: ch = 0xCC; break;
+ case 0x2563: ch = 0xB9; break;
+ case 0x2566: ch = 0xCB; break;
+ case 0x2569: ch = 0xCA; break;
+ case 0x256C: ch = 0xCE; break;
+ case 0x2580: ch = 0xDF; break;
+ case 0x2584: ch = 0xDC; break;
+ case 0x2588: ch = 0xDB; break;
+ case 0x2591: ch = 0xB0; break;
+ case 0x2592: ch = 0xB1; break;
+ case 0x2593: ch = 0xB2; break;
+ case 0x25A0: ch = 0xFE; break;
+ case 0x25AC: ch = 0x16; break;
+ case 0x25B2: ch = 0x1E; break;
+ case 0x25BA: ch = 0x10; break;
+ case 0x25BC: ch = 0x1F; break;
+ case 0x25C4: ch = 0x11; break;
+ case 0x25CB: ch = 0x09; break;
+ case 0x25D8: ch = 0x08; break;
+ case 0x25D9: ch = 0x0A; break;
+ case 0x263A: ch = 0x01; break;
+ case 0x263B: ch = 0x02; break;
+ case 0x263C: ch = 0x0F; break;
+ case 0x2640: ch = 0x0C; break;
+ case 0x2642: ch = 0x0B; break;
+ case 0x2660: ch = 0x06; break;
+ case 0x2663: ch = 0x05; break;
+ case 0x2665: ch = 0x03; break;
+ case 0x2666: ch = 0x04; break;
+ case 0x266A: ch = 0x0D; break;
+ case 0x266B: ch = 0x0E; break;
+ case 0xFFE8: ch = 0xB3; break;
+ case 0xFFE9: ch = 0x1B; break;
+ case 0xFFEA: ch = 0x18; break;
+ case 0xFFEB: ch = 0x1A; break;
+ case 0xFFEC: ch = 0x19; break;
+ case 0xFFED: ch = 0xFE; break;
+ case 0xFFEE: ch = 0x09; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP857
+
+public class ENCibm857 : CP857
+{
+ public ENCibm857() : base() {}
+
+}; // class ENCibm857
+
+}; // namespace I18N.Rare
diff --git a/mcs/class/I18N/Rare/CP858.cs b/mcs/class/I18N/Rare/CP858.cs
new file mode 100644
index 00000000000..3ad8fc85a42
--- /dev/null
+++ b/mcs/class/I18N/Rare/CP858.cs
@@ -0,0 +1,679 @@
+/*
+ * CP858.cs - Western European (DOS with Euro) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-858.ucm".
+
+namespace I18N.Rare
+{
+
+using System;
+using I18N.Common;
+
+public class CP858 : ByteEncoding
+{
+ public CP858()
+ : base(858, ToChars, "Western European (DOS with Euro)",
+ "IBM00858", "IBM00858", "IBM00858",
+ false, false, false, false, 1252)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
+ '\u0006', '\u0007', '\u0008', '\u0009', '\u000A', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
+ '\u0018', '\u0019', '\u001C', '\u001B', '\u007F', '\u001D',
+ '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
+ '\u0024', '\u0025', '\u0026', '\u0027', '\u0028', '\u0029',
+ '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
+ '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
+ '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
+ '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
+ '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
+ '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
+ '\u005A', '\u005B', '\u005C', '\u005D', '\u005E', '\u005F',
+ '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
+ '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
+ '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
+ '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
+ '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
+ '\u007E', '\u001A', '\u00C7', '\u00FC', '\u00E9', '\u00E2',
+ '\u00E4', '\u00E0', '\u00E5', '\u00E7', '\u00EA', '\u00EB',
+ '\u00E8', '\u00EF', '\u00EE', '\u00EC', '\u00C4', '\u00C5',
+ '\u00C9', '\u00E6', '\u00C6', '\u00F4', '\u00F6', '\u00F2',
+ '\u00FB', '\u00F9', '\u00FF', '\u00D6', '\u00DC', '\u00F8',
+ '\u00A3', '\u00D8', '\u00D7', '\u0192', '\u00E1', '\u00ED',
+ '\u00F3', '\u00FA', '\u00F1', '\u00D1', '\u00AA', '\u00BA',
+ '\u00BF', '\u00AE', '\u00AC', '\u00BD', '\u00BC', '\u00A1',
+ '\u00AB', '\u00BB', '\u2591', '\u2592', '\u2593', '\u2502',
+ '\u2524', '\u00C1', '\u00C2', '\u00C0', '\u00A9', '\u2563',
+ '\u2551', '\u2557', '\u255D', '\u00A2', '\u00A5', '\u2510',
+ '\u2514', '\u2534', '\u252C', '\u251C', '\u2500', '\u253C',
+ '\u00E3', '\u00C3', '\u255A', '\u2554', '\u2569', '\u2566',
+ '\u2560', '\u2550', '\u256C', '\u00A4', '\u00F0', '\u00D0',
+ '\u00CA', '\u00CB', '\u00C8', '\u20AC', '\u00CD', '\u00CE',
+ '\u00CF', '\u2518', '\u250C', '\u2588', '\u2584', '\u00A6',
+ '\u00CC', '\u2580', '\u00D3', '\u00DF', '\u00D4', '\u00D2',
+ '\u00F5', '\u00D5', '\u00B5', '\u00FE', '\u00DE', '\u00DA',
+ '\u00DB', '\u00D9', '\u00FD', '\u00DD', '\u00AF', '\u00B4',
+ '\u00AD', '\u00B1', '\u2017', '\u00BE', '\u00B6', '\u00A7',
+ '\u00F7', '\u00B8', '\u00B0', '\u00A8', '\u00B7', '\u00B9',
+ '\u00B3', '\u00B2', '\u25A0', '\u00A0',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 26) switch(ch)
+ {
+ case 0x001B:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x0020:
+ case 0x0021:
+ case 0x0022:
+ case 0x0023:
+ case 0x0024:
+ case 0x0025:
+ case 0x0026:
+ case 0x0027:
+ case 0x0028:
+ case 0x0029:
+ case 0x002A:
+ case 0x002B:
+ case 0x002C:
+ case 0x002D:
+ case 0x002E:
+ case 0x002F:
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ case 0x003A:
+ case 0x003B:
+ case 0x003C:
+ case 0x003D:
+ case 0x003E:
+ case 0x003F:
+ case 0x0040:
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ case 0x005B:
+ case 0x005C:
+ case 0x005D:
+ case 0x005E:
+ case 0x005F:
+ case 0x0060:
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ case 0x007B:
+ case 0x007C:
+ case 0x007D:
+ case 0x007E:
+ break;
+ case 0x001A: ch = 0x7F; break;
+ case 0x001C: ch = 0x1A; break;
+ case 0x007F: ch = 0x1C; break;
+ case 0x00A0: ch = 0xFF; break;
+ case 0x00A1: ch = 0xAD; break;
+ case 0x00A2: ch = 0xBD; break;
+ case 0x00A3: ch = 0x9C; break;
+ case 0x00A4: ch = 0xCF; break;
+ case 0x00A5: ch = 0xBE; break;
+ case 0x00A6: ch = 0xDD; break;
+ case 0x00A7: ch = 0xF5; break;
+ case 0x00A8: ch = 0xF9; break;
+ case 0x00A9: ch = 0xB8; break;
+ case 0x00AA: ch = 0xA6; break;
+ case 0x00AB: ch = 0xAE; break;
+ case 0x00AC: ch = 0xAA; break;
+ case 0x00AD: ch = 0xF0; break;
+ case 0x00AE: ch = 0xA9; break;
+ case 0x00AF: ch = 0xEE; break;
+ case 0x00B0: ch = 0xF8; break;
+ case 0x00B1: ch = 0xF1; break;
+ case 0x00B2: ch = 0xFD; break;
+ case 0x00B3: ch = 0xFC; break;
+ case 0x00B4: ch = 0xEF; break;
+ case 0x00B5: ch = 0xE6; break;
+ case 0x00B6: ch = 0xF4; break;
+ case 0x00B7: ch = 0xFA; break;
+ case 0x00B8: ch = 0xF7; break;
+ case 0x00B9: ch = 0xFB; break;
+ case 0x00BA: ch = 0xA7; break;
+ case 0x00BB: ch = 0xAF; break;
+ case 0x00BC: ch = 0xAC; break;
+ case 0x00BD: ch = 0xAB; break;
+ case 0x00BE: ch = 0xF3; break;
+ case 0x00BF: ch = 0xA8; break;
+ case 0x00C0: ch = 0xB7; break;
+ case 0x00C1: ch = 0xB5; break;
+ case 0x00C2: ch = 0xB6; break;
+ case 0x00C3: ch = 0xC7; break;
+ case 0x00C4: ch = 0x8E; break;
+ case 0x00C5: ch = 0x8F; break;
+ case 0x00C6: ch = 0x92; break;
+ case 0x00C7: ch = 0x80; break;
+ case 0x00C8: ch = 0xD4; break;
+ case 0x00C9: ch = 0x90; break;
+ case 0x00CA: ch = 0xD2; break;
+ case 0x00CB: ch = 0xD3; break;
+ case 0x00CC: ch = 0xDE; break;
+ case 0x00CD: ch = 0xD6; break;
+ case 0x00CE: ch = 0xD7; break;
+ case 0x00CF: ch = 0xD8; break;
+ case 0x00D0: ch = 0xD1; break;
+ case 0x00D1: ch = 0xA5; break;
+ case 0x00D2: ch = 0xE3; break;
+ case 0x00D3: ch = 0xE0; break;
+ case 0x00D4: ch = 0xE2; break;
+ case 0x00D5: ch = 0xE5; break;
+ case 0x00D6: ch = 0x99; break;
+ case 0x00D7: ch = 0x9E; break;
+ case 0x00D8: ch = 0x9D; break;
+ case 0x00D9: ch = 0xEB; break;
+ case 0x00DA: ch = 0xE9; break;
+ case 0x00DB: ch = 0xEA; break;
+ case 0x00DC: ch = 0x9A; break;
+ case 0x00DD: ch = 0xED; break;
+ case 0x00DE: ch = 0xE8; break;
+ case 0x00DF: ch = 0xE1; break;
+ case 0x00E0: ch = 0x85; break;
+ case 0x00E1: ch = 0xA0; break;
+ case 0x00E2: ch = 0x83; break;
+ case 0x00E3: ch = 0xC6; break;
+ case 0x00E4: ch = 0x84; break;
+ case 0x00E5: ch = 0x86; break;
+ case 0x00E6: ch = 0x91; break;
+ case 0x00E7: ch = 0x87; break;
+ case 0x00E8: ch = 0x8A; break;
+ case 0x00E9: ch = 0x82; break;
+ case 0x00EA: ch = 0x88; break;
+ case 0x00EB: ch = 0x89; break;
+ case 0x00EC: ch = 0x8D; break;
+ case 0x00ED: ch = 0xA1; break;
+ case 0x00EE: ch = 0x8C; break;
+ case 0x00EF: ch = 0x8B; break;
+ case 0x00F0: ch = 0xD0; break;
+ case 0x00F1: ch = 0xA4; break;
+ case 0x00F2: ch = 0x95; break;
+ case 0x00F3: ch = 0xA2; break;
+ case 0x00F4: ch = 0x93; break;
+ case 0x00F5: ch = 0xE4; break;
+ case 0x00F6: ch = 0x94; break;
+ case 0x00F7: ch = 0xF6; break;
+ case 0x00F8: ch = 0x9B; break;
+ case 0x00F9: ch = 0x97; break;
+ case 0x00FA: ch = 0xA3; break;
+ case 0x00FB: ch = 0x96; break;
+ case 0x00FC: ch = 0x81; break;
+ case 0x00FD: ch = 0xEC; break;
+ case 0x00FE: ch = 0xE7; break;
+ case 0x00FF: ch = 0x98; break;
+ case 0x0192: ch = 0x9F; break;
+ case 0x2017: ch = 0xF2; break;
+ case 0x2022: ch = 0x07; break;
+ case 0x203C: ch = 0x13; break;
+ case 0x203E: ch = 0xEE; break;
+ case 0x20AC: ch = 0xD5; break;
+ case 0x2190: ch = 0x1B; break;
+ case 0x2191: ch = 0x18; break;
+ case 0x2192: ch = 0x1A; break;
+ case 0x2193: ch = 0x19; break;
+ case 0x2194: ch = 0x1D; break;
+ case 0x2195: ch = 0x12; break;
+ case 0x21A8: ch = 0x17; break;
+ case 0x221F: ch = 0x1C; break;
+ case 0x2302: ch = 0x7F; break;
+ case 0x2500: ch = 0xC4; break;
+ case 0x2502: ch = 0xB3; break;
+ case 0x250C: ch = 0xDA; break;
+ case 0x2510: ch = 0xBF; break;
+ case 0x2514: ch = 0xC0; break;
+ case 0x2518: ch = 0xD9; break;
+ case 0x251C: ch = 0xC3; break;
+ case 0x2524: ch = 0xB4; break;
+ case 0x252C: ch = 0xC2; break;
+ case 0x2534: ch = 0xC1; break;
+ case 0x253C: ch = 0xC5; break;
+ case 0x2550: ch = 0xCD; break;
+ case 0x2551: ch = 0xBA; break;
+ case 0x2554: ch = 0xC9; break;
+ case 0x2557: ch = 0xBB; break;
+ case 0x255A: ch = 0xC8; break;
+ case 0x255D: ch = 0xBC; break;
+ case 0x2560: ch = 0xCC; break;
+ case 0x2563: ch = 0xB9; break;
+ case 0x2566: ch = 0xCB; break;
+ case 0x2569: ch = 0xCA; break;
+ case 0x256C: ch = 0xCE; break;
+ case 0x2580: ch = 0xDF; break;
+ case 0x2584: ch = 0xDC; break;
+ case 0x2588: ch = 0xDB; break;
+ case 0x2591: ch = 0xB0; break;
+ case 0x2592: ch = 0xB1; break;
+ case 0x2593: ch = 0xB2; break;
+ case 0x25A0: ch = 0xFE; break;
+ case 0x25AC: ch = 0x16; break;
+ case 0x25B2: ch = 0x1E; break;
+ case 0x25BA: ch = 0x10; break;
+ case 0x25BC: ch = 0x1F; break;
+ case 0x25C4: ch = 0x11; break;
+ case 0x25CB: ch = 0x09; break;
+ case 0x25D8: ch = 0x08; break;
+ case 0x25D9: ch = 0x0A; break;
+ case 0x263A: ch = 0x01; break;
+ case 0x263B: ch = 0x02; break;
+ case 0x263C: ch = 0x0F; break;
+ case 0x2640: ch = 0x0C; break;
+ case 0x2642: ch = 0x0B; break;
+ case 0x2660: ch = 0x06; break;
+ case 0x2663: ch = 0x05; break;
+ case 0x2665: ch = 0x03; break;
+ case 0x2666: ch = 0x04; break;
+ case 0x266A: ch = 0x0D; break;
+ case 0x266C: ch = 0x0E; break;
+ case 0xFFE8: ch = 0xB3; break;
+ case 0xFFE9: ch = 0x1B; break;
+ case 0xFFEA: ch = 0x18; break;
+ case 0xFFEB: ch = 0x1A; break;
+ case 0xFFEC: ch = 0x19; break;
+ case 0xFFED: ch = 0xFE; break;
+ case 0xFFEE: ch = 0x09; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 26) switch(ch)
+ {
+ case 0x001B:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x0020:
+ case 0x0021:
+ case 0x0022:
+ case 0x0023:
+ case 0x0024:
+ case 0x0025:
+ case 0x0026:
+ case 0x0027:
+ case 0x0028:
+ case 0x0029:
+ case 0x002A:
+ case 0x002B:
+ case 0x002C:
+ case 0x002D:
+ case 0x002E:
+ case 0x002F:
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ case 0x003A:
+ case 0x003B:
+ case 0x003C:
+ case 0x003D:
+ case 0x003E:
+ case 0x003F:
+ case 0x0040:
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ case 0x005B:
+ case 0x005C:
+ case 0x005D:
+ case 0x005E:
+ case 0x005F:
+ case 0x0060:
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ case 0x007B:
+ case 0x007C:
+ case 0x007D:
+ case 0x007E:
+ break;
+ case 0x001A: ch = 0x7F; break;
+ case 0x001C: ch = 0x1A; break;
+ case 0x007F: ch = 0x1C; break;
+ case 0x00A0: ch = 0xFF; break;
+ case 0x00A1: ch = 0xAD; break;
+ case 0x00A2: ch = 0xBD; break;
+ case 0x00A3: ch = 0x9C; break;
+ case 0x00A4: ch = 0xCF; break;
+ case 0x00A5: ch = 0xBE; break;
+ case 0x00A6: ch = 0xDD; break;
+ case 0x00A7: ch = 0xF5; break;
+ case 0x00A8: ch = 0xF9; break;
+ case 0x00A9: ch = 0xB8; break;
+ case 0x00AA: ch = 0xA6; break;
+ case 0x00AB: ch = 0xAE; break;
+ case 0x00AC: ch = 0xAA; break;
+ case 0x00AD: ch = 0xF0; break;
+ case 0x00AE: ch = 0xA9; break;
+ case 0x00AF: ch = 0xEE; break;
+ case 0x00B0: ch = 0xF8; break;
+ case 0x00B1: ch = 0xF1; break;
+ case 0x00B2: ch = 0xFD; break;
+ case 0x00B3: ch = 0xFC; break;
+ case 0x00B4: ch = 0xEF; break;
+ case 0x00B5: ch = 0xE6; break;
+ case 0x00B6: ch = 0xF4; break;
+ case 0x00B7: ch = 0xFA; break;
+ case 0x00B8: ch = 0xF7; break;
+ case 0x00B9: ch = 0xFB; break;
+ case 0x00BA: ch = 0xA7; break;
+ case 0x00BB: ch = 0xAF; break;
+ case 0x00BC: ch = 0xAC; break;
+ case 0x00BD: ch = 0xAB; break;
+ case 0x00BE: ch = 0xF3; break;
+ case 0x00BF: ch = 0xA8; break;
+ case 0x00C0: ch = 0xB7; break;
+ case 0x00C1: ch = 0xB5; break;
+ case 0x00C2: ch = 0xB6; break;
+ case 0x00C3: ch = 0xC7; break;
+ case 0x00C4: ch = 0x8E; break;
+ case 0x00C5: ch = 0x8F; break;
+ case 0x00C6: ch = 0x92; break;
+ case 0x00C7: ch = 0x80; break;
+ case 0x00C8: ch = 0xD4; break;
+ case 0x00C9: ch = 0x90; break;
+ case 0x00CA: ch = 0xD2; break;
+ case 0x00CB: ch = 0xD3; break;
+ case 0x00CC: ch = 0xDE; break;
+ case 0x00CD: ch = 0xD6; break;
+ case 0x00CE: ch = 0xD7; break;
+ case 0x00CF: ch = 0xD8; break;
+ case 0x00D0: ch = 0xD1; break;
+ case 0x00D1: ch = 0xA5; break;
+ case 0x00D2: ch = 0xE3; break;
+ case 0x00D3: ch = 0xE0; break;
+ case 0x00D4: ch = 0xE2; break;
+ case 0x00D5: ch = 0xE5; break;
+ case 0x00D6: ch = 0x99; break;
+ case 0x00D7: ch = 0x9E; break;
+ case 0x00D8: ch = 0x9D; break;
+ case 0x00D9: ch = 0xEB; break;
+ case 0x00DA: ch = 0xE9; break;
+ case 0x00DB: ch = 0xEA; break;
+ case 0x00DC: ch = 0x9A; break;
+ case 0x00DD: ch = 0xED; break;
+ case 0x00DE: ch = 0xE8; break;
+ case 0x00DF: ch = 0xE1; break;
+ case 0x00E0: ch = 0x85; break;
+ case 0x00E1: ch = 0xA0; break;
+ case 0x00E2: ch = 0x83; break;
+ case 0x00E3: ch = 0xC6; break;
+ case 0x00E4: ch = 0x84; break;
+ case 0x00E5: ch = 0x86; break;
+ case 0x00E6: ch = 0x91; break;
+ case 0x00E7: ch = 0x87; break;
+ case 0x00E8: ch = 0x8A; break;
+ case 0x00E9: ch = 0x82; break;
+ case 0x00EA: ch = 0x88; break;
+ case 0x00EB: ch = 0x89; break;
+ case 0x00EC: ch = 0x8D; break;
+ case 0x00ED: ch = 0xA1; break;
+ case 0x00EE: ch = 0x8C; break;
+ case 0x00EF: ch = 0x8B; break;
+ case 0x00F0: ch = 0xD0; break;
+ case 0x00F1: ch = 0xA4; break;
+ case 0x00F2: ch = 0x95; break;
+ case 0x00F3: ch = 0xA2; break;
+ case 0x00F4: ch = 0x93; break;
+ case 0x00F5: ch = 0xE4; break;
+ case 0x00F6: ch = 0x94; break;
+ case 0x00F7: ch = 0xF6; break;
+ case 0x00F8: ch = 0x9B; break;
+ case 0x00F9: ch = 0x97; break;
+ case 0x00FA: ch = 0xA3; break;
+ case 0x00FB: ch = 0x96; break;
+ case 0x00FC: ch = 0x81; break;
+ case 0x00FD: ch = 0xEC; break;
+ case 0x00FE: ch = 0xE7; break;
+ case 0x00FF: ch = 0x98; break;
+ case 0x0192: ch = 0x9F; break;
+ case 0x2017: ch = 0xF2; break;
+ case 0x2022: ch = 0x07; break;
+ case 0x203C: ch = 0x13; break;
+ case 0x203E: ch = 0xEE; break;
+ case 0x20AC: ch = 0xD5; break;
+ case 0x2190: ch = 0x1B; break;
+ case 0x2191: ch = 0x18; break;
+ case 0x2192: ch = 0x1A; break;
+ case 0x2193: ch = 0x19; break;
+ case 0x2194: ch = 0x1D; break;
+ case 0x2195: ch = 0x12; break;
+ case 0x21A8: ch = 0x17; break;
+ case 0x221F: ch = 0x1C; break;
+ case 0x2302: ch = 0x7F; break;
+ case 0x2500: ch = 0xC4; break;
+ case 0x2502: ch = 0xB3; break;
+ case 0x250C: ch = 0xDA; break;
+ case 0x2510: ch = 0xBF; break;
+ case 0x2514: ch = 0xC0; break;
+ case 0x2518: ch = 0xD9; break;
+ case 0x251C: ch = 0xC3; break;
+ case 0x2524: ch = 0xB4; break;
+ case 0x252C: ch = 0xC2; break;
+ case 0x2534: ch = 0xC1; break;
+ case 0x253C: ch = 0xC5; break;
+ case 0x2550: ch = 0xCD; break;
+ case 0x2551: ch = 0xBA; break;
+ case 0x2554: ch = 0xC9; break;
+ case 0x2557: ch = 0xBB; break;
+ case 0x255A: ch = 0xC8; break;
+ case 0x255D: ch = 0xBC; break;
+ case 0x2560: ch = 0xCC; break;
+ case 0x2563: ch = 0xB9; break;
+ case 0x2566: ch = 0xCB; break;
+ case 0x2569: ch = 0xCA; break;
+ case 0x256C: ch = 0xCE; break;
+ case 0x2580: ch = 0xDF; break;
+ case 0x2584: ch = 0xDC; break;
+ case 0x2588: ch = 0xDB; break;
+ case 0x2591: ch = 0xB0; break;
+ case 0x2592: ch = 0xB1; break;
+ case 0x2593: ch = 0xB2; break;
+ case 0x25A0: ch = 0xFE; break;
+ case 0x25AC: ch = 0x16; break;
+ case 0x25B2: ch = 0x1E; break;
+ case 0x25BA: ch = 0x10; break;
+ case 0x25BC: ch = 0x1F; break;
+ case 0x25C4: ch = 0x11; break;
+ case 0x25CB: ch = 0x09; break;
+ case 0x25D8: ch = 0x08; break;
+ case 0x25D9: ch = 0x0A; break;
+ case 0x263A: ch = 0x01; break;
+ case 0x263B: ch = 0x02; break;
+ case 0x263C: ch = 0x0F; break;
+ case 0x2640: ch = 0x0C; break;
+ case 0x2642: ch = 0x0B; break;
+ case 0x2660: ch = 0x06; break;
+ case 0x2663: ch = 0x05; break;
+ case 0x2665: ch = 0x03; break;
+ case 0x2666: ch = 0x04; break;
+ case 0x266A: ch = 0x0D; break;
+ case 0x266C: ch = 0x0E; break;
+ case 0xFFE8: ch = 0xB3; break;
+ case 0xFFE9: ch = 0x1B; break;
+ case 0xFFEA: ch = 0x18; break;
+ case 0xFFEB: ch = 0x1A; break;
+ case 0xFFEC: ch = 0x19; break;
+ case 0xFFED: ch = 0xFE; break;
+ case 0xFFEE: ch = 0x09; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP858
+
+public class ENCibm00858 : CP858
+{
+ public ENCibm00858() : base() {}
+
+}; // class ENCibm00858
+
+}; // namespace I18N.Rare
diff --git a/mcs/class/I18N/Rare/CP862.cs b/mcs/class/I18N/Rare/CP862.cs
new file mode 100644
index 00000000000..182fcb33e45
--- /dev/null
+++ b/mcs/class/I18N/Rare/CP862.cs
@@ -0,0 +1,685 @@
+/*
+ * CP862.cs - Hebrew (DOS) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-862.ucm".
+
+namespace I18N.Rare
+{
+
+using System;
+using I18N.Common;
+
+public class CP862 : ByteEncoding
+{
+ public CP862()
+ : base(862, ToChars, "Hebrew (DOS)",
+ "ibm862", "ibm861", "ibm862",
+ false, false, false, false, 1255)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
+ '\u0006', '\u0007', '\u0008', '\u0009', '\u000A', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
+ '\u0018', '\u0019', '\u001C', '\u001B', '\u007F', '\u001D',
+ '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
+ '\u0024', '\u0025', '\u0026', '\u0027', '\u0028', '\u0029',
+ '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
+ '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
+ '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
+ '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
+ '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
+ '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
+ '\u005A', '\u005B', '\u005C', '\u005D', '\u005E', '\u005F',
+ '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
+ '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
+ '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
+ '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
+ '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
+ '\u007E', '\u001A', '\u05D0', '\u05D1', '\u05D2', '\u05D3',
+ '\u05D4', '\u05D5', '\u05D6', '\u05D7', '\u05D8', '\u05D9',
+ '\u05DA', '\u05DB', '\u05DC', '\u05DD', '\u05DE', '\u05DF',
+ '\u05E0', '\u05E1', '\u05E2', '\u05E3', '\u05E4', '\u05E5',
+ '\u05E6', '\u05E7', '\u05E8', '\u05E9', '\u05EA', '\u00A2',
+ '\u00A3', '\u00A5', '\u20A7', '\u0192', '\u00E1', '\u00ED',
+ '\u00F3', '\u00FA', '\u00F1', '\u00D1', '\u00AA', '\u00BA',
+ '\u00BF', '\u2310', '\u00AC', '\u00BD', '\u00BC', '\u00A1',
+ '\u00AB', '\u00BB', '\u2591', '\u2592', '\u2593', '\u2502',
+ '\u2524', '\u2561', '\u2562', '\u2556', '\u2555', '\u2563',
+ '\u2551', '\u2557', '\u255D', '\u255C', '\u255B', '\u2510',
+ '\u2514', '\u2534', '\u252C', '\u251C', '\u2500', '\u253C',
+ '\u255E', '\u255F', '\u255A', '\u2554', '\u2569', '\u2566',
+ '\u2560', '\u2550', '\u256C', '\u2567', '\u2568', '\u2564',
+ '\u2565', '\u2559', '\u2558', '\u2552', '\u2553', '\u256B',
+ '\u256A', '\u2518', '\u250C', '\u2588', '\u2584', '\u258C',
+ '\u2590', '\u2580', '\u03B1', '\u00DF', '\u0393', '\u03C0',
+ '\u03A3', '\u03C3', '\u03BC', '\u03C4', '\u03A6', '\u0398',
+ '\u03A9', '\u03B4', '\u221E', '\u03C6', '\u03B5', '\u2229',
+ '\u2261', '\u00B1', '\u2265', '\u2264', '\u2320', '\u2321',
+ '\u00F7', '\u2248', '\u00B0', '\u2219', '\u00B7', '\u221A',
+ '\u207F', '\u00B2', '\u25A0', '\u00A0',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 26) switch(ch)
+ {
+ case 0x001B:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x0020:
+ case 0x0021:
+ case 0x0022:
+ case 0x0023:
+ case 0x0024:
+ case 0x0025:
+ case 0x0026:
+ case 0x0027:
+ case 0x0028:
+ case 0x0029:
+ case 0x002A:
+ case 0x002B:
+ case 0x002C:
+ case 0x002D:
+ case 0x002E:
+ case 0x002F:
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ case 0x003A:
+ case 0x003B:
+ case 0x003C:
+ case 0x003D:
+ case 0x003E:
+ case 0x003F:
+ case 0x0040:
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ case 0x005B:
+ case 0x005C:
+ case 0x005D:
+ case 0x005E:
+ case 0x005F:
+ case 0x0060:
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ case 0x007B:
+ case 0x007C:
+ case 0x007D:
+ case 0x007E:
+ break;
+ case 0x001A: ch = 0x7F; break;
+ case 0x001C: ch = 0x1A; break;
+ case 0x007F: ch = 0x1C; break;
+ case 0x00A0: ch = 0xFF; break;
+ case 0x00A1: ch = 0xAD; break;
+ case 0x00A2: ch = 0x9B; break;
+ case 0x00A3: ch = 0x9C; break;
+ case 0x00A5: ch = 0x9D; break;
+ case 0x00A7: ch = 0x15; break;
+ case 0x00AA: ch = 0xA6; break;
+ case 0x00AB: ch = 0xAE; break;
+ case 0x00AC: ch = 0xAA; break;
+ case 0x00B0: ch = 0xF8; break;
+ case 0x00B1: ch = 0xF1; break;
+ case 0x00B2: ch = 0xFD; break;
+ case 0x00B6: ch = 0x14; break;
+ case 0x00B7: ch = 0xFA; break;
+ case 0x00BA: ch = 0xA7; break;
+ case 0x00BB: ch = 0xAF; break;
+ case 0x00BC: ch = 0xAC; break;
+ case 0x00BD: ch = 0xAB; break;
+ case 0x00BF: ch = 0xA8; break;
+ case 0x00D1: ch = 0xA5; break;
+ case 0x00DF: ch = 0xE1; break;
+ case 0x00E1: ch = 0xA0; break;
+ case 0x00ED: ch = 0xA1; break;
+ case 0x00F1: ch = 0xA4; break;
+ case 0x00F3: ch = 0xA2; break;
+ case 0x00F7: ch = 0xF6; break;
+ case 0x00FA: ch = 0xA3; break;
+ case 0x0192: ch = 0x9F; break;
+ case 0x0393: ch = 0xE2; break;
+ case 0x0398: ch = 0xE9; break;
+ case 0x03A3: ch = 0xE4; break;
+ case 0x03A6: ch = 0xE8; break;
+ case 0x03A9: ch = 0xEA; break;
+ case 0x03B1: ch = 0xE0; break;
+ case 0x03B4: ch = 0xEB; break;
+ case 0x03B5: ch = 0xEE; break;
+ case 0x03BC: ch = 0xE6; break;
+ case 0x03C0: ch = 0xE3; break;
+ case 0x03C3: ch = 0xE5; break;
+ case 0x03C4: ch = 0xE7; break;
+ case 0x03C6: ch = 0xED; break;
+ case 0x05D0:
+ case 0x05D1:
+ case 0x05D2:
+ case 0x05D3:
+ case 0x05D4:
+ case 0x05D5:
+ case 0x05D6:
+ case 0x05D7:
+ case 0x05D8:
+ case 0x05D9:
+ case 0x05DA:
+ case 0x05DB:
+ case 0x05DC:
+ case 0x05DD:
+ case 0x05DE:
+ case 0x05DF:
+ case 0x05E0:
+ case 0x05E1:
+ case 0x05E2:
+ case 0x05E3:
+ case 0x05E4:
+ case 0x05E5:
+ case 0x05E6:
+ case 0x05E7:
+ case 0x05E8:
+ case 0x05E9:
+ case 0x05EA:
+ ch -= 0x0550;
+ break;
+ case 0x2022: ch = 0x07; break;
+ case 0x203C: ch = 0x13; break;
+ case 0x207F: ch = 0xFC; break;
+ case 0x20A7: ch = 0x9E; break;
+ case 0x2190: ch = 0x1B; break;
+ case 0x2191: ch = 0x18; break;
+ case 0x2192: ch = 0x1A; break;
+ case 0x2193: ch = 0x19; break;
+ case 0x2194: ch = 0x1D; break;
+ case 0x2195: ch = 0x12; break;
+ case 0x21A8: ch = 0x17; break;
+ case 0x2219: ch = 0xF9; break;
+ case 0x221A: ch = 0xFB; break;
+ case 0x221E: ch = 0xEC; break;
+ case 0x221F: ch = 0x1C; break;
+ case 0x2229: ch = 0xEF; break;
+ case 0x2248: ch = 0xF7; break;
+ case 0x2261: ch = 0xF0; break;
+ case 0x2264: ch = 0xF3; break;
+ case 0x2265: ch = 0xF2; break;
+ case 0x2302: ch = 0x7F; break;
+ case 0x2310: ch = 0xA9; break;
+ case 0x2320: ch = 0xF4; break;
+ case 0x2321: ch = 0xF5; break;
+ case 0x2500: ch = 0xC4; break;
+ case 0x2502: ch = 0xB3; break;
+ case 0x250C: ch = 0xDA; break;
+ case 0x2510: ch = 0xBF; break;
+ case 0x2514: ch = 0xC0; break;
+ case 0x2518: ch = 0xD9; break;
+ case 0x251C: ch = 0xC3; break;
+ case 0x2524: ch = 0xB4; break;
+ case 0x252C: ch = 0xC2; break;
+ case 0x2534: ch = 0xC1; break;
+ case 0x253C: ch = 0xC5; break;
+ case 0x2550: ch = 0xCD; break;
+ case 0x2551: ch = 0xBA; break;
+ case 0x2552: ch = 0xD5; break;
+ case 0x2553: ch = 0xD6; break;
+ case 0x2554: ch = 0xC9; break;
+ case 0x2555: ch = 0xB8; break;
+ case 0x2556: ch = 0xB7; break;
+ case 0x2557: ch = 0xBB; break;
+ case 0x2558: ch = 0xD4; break;
+ case 0x2559: ch = 0xD3; break;
+ case 0x255A: ch = 0xC8; break;
+ case 0x255B: ch = 0xBE; break;
+ case 0x255C: ch = 0xBD; break;
+ case 0x255D: ch = 0xBC; break;
+ case 0x255E: ch = 0xC6; break;
+ case 0x255F: ch = 0xC7; break;
+ case 0x2560: ch = 0xCC; break;
+ case 0x2561: ch = 0xB5; break;
+ case 0x2562: ch = 0xB6; break;
+ case 0x2563: ch = 0xB9; break;
+ case 0x2564: ch = 0xD1; break;
+ case 0x2565: ch = 0xD2; break;
+ case 0x2566: ch = 0xCB; break;
+ case 0x2567: ch = 0xCF; break;
+ case 0x2568: ch = 0xD0; break;
+ case 0x2569: ch = 0xCA; break;
+ case 0x256A: ch = 0xD8; break;
+ case 0x256B: ch = 0xD7; break;
+ case 0x256C: ch = 0xCE; break;
+ case 0x2580: ch = 0xDF; break;
+ case 0x2584: ch = 0xDC; break;
+ case 0x2588: ch = 0xDB; break;
+ case 0x258C: ch = 0xDD; break;
+ case 0x2590: ch = 0xDE; break;
+ case 0x2591: ch = 0xB0; break;
+ case 0x2592: ch = 0xB1; break;
+ case 0x2593: ch = 0xB2; break;
+ case 0x25A0: ch = 0xFE; break;
+ case 0x25AC: ch = 0x16; break;
+ case 0x25B2: ch = 0x1E; break;
+ case 0x25BA: ch = 0x10; break;
+ case 0x25BC: ch = 0x1F; break;
+ case 0x25C4: ch = 0x11; break;
+ case 0x25CB: ch = 0x09; break;
+ case 0x25D8: ch = 0x08; break;
+ case 0x25D9: ch = 0x0A; break;
+ case 0x263A: ch = 0x01; break;
+ case 0x263B: ch = 0x02; break;
+ case 0x263C: ch = 0x0F; break;
+ case 0x2640: ch = 0x0C; break;
+ case 0x2642: ch = 0x0B; break;
+ case 0x2660: ch = 0x06; break;
+ case 0x2663: ch = 0x05; break;
+ case 0x2665: ch = 0x03; break;
+ case 0x2666: ch = 0x04; break;
+ case 0x266A: ch = 0x0D; break;
+ case 0x266B: ch = 0x0E; break;
+ case 0xFFE8: ch = 0xB3; break;
+ case 0xFFE9: ch = 0x1B; break;
+ case 0xFFEA: ch = 0x18; break;
+ case 0xFFEB: ch = 0x1A; break;
+ case 0xFFEC: ch = 0x19; break;
+ case 0xFFED: ch = 0xFE; break;
+ case 0xFFEE: ch = 0x09; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 26) switch(ch)
+ {
+ case 0x001B:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x0020:
+ case 0x0021:
+ case 0x0022:
+ case 0x0023:
+ case 0x0024:
+ case 0x0025:
+ case 0x0026:
+ case 0x0027:
+ case 0x0028:
+ case 0x0029:
+ case 0x002A:
+ case 0x002B:
+ case 0x002C:
+ case 0x002D:
+ case 0x002E:
+ case 0x002F:
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ case 0x003A:
+ case 0x003B:
+ case 0x003C:
+ case 0x003D:
+ case 0x003E:
+ case 0x003F:
+ case 0x0040:
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ case 0x005B:
+ case 0x005C:
+ case 0x005D:
+ case 0x005E:
+ case 0x005F:
+ case 0x0060:
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ case 0x007B:
+ case 0x007C:
+ case 0x007D:
+ case 0x007E:
+ break;
+ case 0x001A: ch = 0x7F; break;
+ case 0x001C: ch = 0x1A; break;
+ case 0x007F: ch = 0x1C; break;
+ case 0x00A0: ch = 0xFF; break;
+ case 0x00A1: ch = 0xAD; break;
+ case 0x00A2: ch = 0x9B; break;
+ case 0x00A3: ch = 0x9C; break;
+ case 0x00A5: ch = 0x9D; break;
+ case 0x00A7: ch = 0x15; break;
+ case 0x00AA: ch = 0xA6; break;
+ case 0x00AB: ch = 0xAE; break;
+ case 0x00AC: ch = 0xAA; break;
+ case 0x00B0: ch = 0xF8; break;
+ case 0x00B1: ch = 0xF1; break;
+ case 0x00B2: ch = 0xFD; break;
+ case 0x00B6: ch = 0x14; break;
+ case 0x00B7: ch = 0xFA; break;
+ case 0x00BA: ch = 0xA7; break;
+ case 0x00BB: ch = 0xAF; break;
+ case 0x00BC: ch = 0xAC; break;
+ case 0x00BD: ch = 0xAB; break;
+ case 0x00BF: ch = 0xA8; break;
+ case 0x00D1: ch = 0xA5; break;
+ case 0x00DF: ch = 0xE1; break;
+ case 0x00E1: ch = 0xA0; break;
+ case 0x00ED: ch = 0xA1; break;
+ case 0x00F1: ch = 0xA4; break;
+ case 0x00F3: ch = 0xA2; break;
+ case 0x00F7: ch = 0xF6; break;
+ case 0x00FA: ch = 0xA3; break;
+ case 0x0192: ch = 0x9F; break;
+ case 0x0393: ch = 0xE2; break;
+ case 0x0398: ch = 0xE9; break;
+ case 0x03A3: ch = 0xE4; break;
+ case 0x03A6: ch = 0xE8; break;
+ case 0x03A9: ch = 0xEA; break;
+ case 0x03B1: ch = 0xE0; break;
+ case 0x03B4: ch = 0xEB; break;
+ case 0x03B5: ch = 0xEE; break;
+ case 0x03BC: ch = 0xE6; break;
+ case 0x03C0: ch = 0xE3; break;
+ case 0x03C3: ch = 0xE5; break;
+ case 0x03C4: ch = 0xE7; break;
+ case 0x03C6: ch = 0xED; break;
+ case 0x05D0:
+ case 0x05D1:
+ case 0x05D2:
+ case 0x05D3:
+ case 0x05D4:
+ case 0x05D5:
+ case 0x05D6:
+ case 0x05D7:
+ case 0x05D8:
+ case 0x05D9:
+ case 0x05DA:
+ case 0x05DB:
+ case 0x05DC:
+ case 0x05DD:
+ case 0x05DE:
+ case 0x05DF:
+ case 0x05E0:
+ case 0x05E1:
+ case 0x05E2:
+ case 0x05E3:
+ case 0x05E4:
+ case 0x05E5:
+ case 0x05E6:
+ case 0x05E7:
+ case 0x05E8:
+ case 0x05E9:
+ case 0x05EA:
+ ch -= 0x0550;
+ break;
+ case 0x2022: ch = 0x07; break;
+ case 0x203C: ch = 0x13; break;
+ case 0x207F: ch = 0xFC; break;
+ case 0x20A7: ch = 0x9E; break;
+ case 0x2190: ch = 0x1B; break;
+ case 0x2191: ch = 0x18; break;
+ case 0x2192: ch = 0x1A; break;
+ case 0x2193: ch = 0x19; break;
+ case 0x2194: ch = 0x1D; break;
+ case 0x2195: ch = 0x12; break;
+ case 0x21A8: ch = 0x17; break;
+ case 0x2219: ch = 0xF9; break;
+ case 0x221A: ch = 0xFB; break;
+ case 0x221E: ch = 0xEC; break;
+ case 0x221F: ch = 0x1C; break;
+ case 0x2229: ch = 0xEF; break;
+ case 0x2248: ch = 0xF7; break;
+ case 0x2261: ch = 0xF0; break;
+ case 0x2264: ch = 0xF3; break;
+ case 0x2265: ch = 0xF2; break;
+ case 0x2302: ch = 0x7F; break;
+ case 0x2310: ch = 0xA9; break;
+ case 0x2320: ch = 0xF4; break;
+ case 0x2321: ch = 0xF5; break;
+ case 0x2500: ch = 0xC4; break;
+ case 0x2502: ch = 0xB3; break;
+ case 0x250C: ch = 0xDA; break;
+ case 0x2510: ch = 0xBF; break;
+ case 0x2514: ch = 0xC0; break;
+ case 0x2518: ch = 0xD9; break;
+ case 0x251C: ch = 0xC3; break;
+ case 0x2524: ch = 0xB4; break;
+ case 0x252C: ch = 0xC2; break;
+ case 0x2534: ch = 0xC1; break;
+ case 0x253C: ch = 0xC5; break;
+ case 0x2550: ch = 0xCD; break;
+ case 0x2551: ch = 0xBA; break;
+ case 0x2552: ch = 0xD5; break;
+ case 0x2553: ch = 0xD6; break;
+ case 0x2554: ch = 0xC9; break;
+ case 0x2555: ch = 0xB8; break;
+ case 0x2556: ch = 0xB7; break;
+ case 0x2557: ch = 0xBB; break;
+ case 0x2558: ch = 0xD4; break;
+ case 0x2559: ch = 0xD3; break;
+ case 0x255A: ch = 0xC8; break;
+ case 0x255B: ch = 0xBE; break;
+ case 0x255C: ch = 0xBD; break;
+ case 0x255D: ch = 0xBC; break;
+ case 0x255E: ch = 0xC6; break;
+ case 0x255F: ch = 0xC7; break;
+ case 0x2560: ch = 0xCC; break;
+ case 0x2561: ch = 0xB5; break;
+ case 0x2562: ch = 0xB6; break;
+ case 0x2563: ch = 0xB9; break;
+ case 0x2564: ch = 0xD1; break;
+ case 0x2565: ch = 0xD2; break;
+ case 0x2566: ch = 0xCB; break;
+ case 0x2567: ch = 0xCF; break;
+ case 0x2568: ch = 0xD0; break;
+ case 0x2569: ch = 0xCA; break;
+ case 0x256A: ch = 0xD8; break;
+ case 0x256B: ch = 0xD7; break;
+ case 0x256C: ch = 0xCE; break;
+ case 0x2580: ch = 0xDF; break;
+ case 0x2584: ch = 0xDC; break;
+ case 0x2588: ch = 0xDB; break;
+ case 0x258C: ch = 0xDD; break;
+ case 0x2590: ch = 0xDE; break;
+ case 0x2591: ch = 0xB0; break;
+ case 0x2592: ch = 0xB1; break;
+ case 0x2593: ch = 0xB2; break;
+ case 0x25A0: ch = 0xFE; break;
+ case 0x25AC: ch = 0x16; break;
+ case 0x25B2: ch = 0x1E; break;
+ case 0x25BA: ch = 0x10; break;
+ case 0x25BC: ch = 0x1F; break;
+ case 0x25C4: ch = 0x11; break;
+ case 0x25CB: ch = 0x09; break;
+ case 0x25D8: ch = 0x08; break;
+ case 0x25D9: ch = 0x0A; break;
+ case 0x263A: ch = 0x01; break;
+ case 0x263B: ch = 0x02; break;
+ case 0x263C: ch = 0x0F; break;
+ case 0x2640: ch = 0x0C; break;
+ case 0x2642: ch = 0x0B; break;
+ case 0x2660: ch = 0x06; break;
+ case 0x2663: ch = 0x05; break;
+ case 0x2665: ch = 0x03; break;
+ case 0x2666: ch = 0x04; break;
+ case 0x266A: ch = 0x0D; break;
+ case 0x266B: ch = 0x0E; break;
+ case 0xFFE8: ch = 0xB3; break;
+ case 0xFFE9: ch = 0x1B; break;
+ case 0xFFEA: ch = 0x18; break;
+ case 0xFFEB: ch = 0x1A; break;
+ case 0xFFEC: ch = 0x19; break;
+ case 0xFFED: ch = 0xFE; break;
+ case 0xFFEE: ch = 0x09; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP862
+
+public class ENCibm862 : CP862
+{
+ public ENCibm862() : base() {}
+
+}; // class ENCibm862
+
+}; // namespace I18N.Rare
diff --git a/mcs/class/I18N/Rare/CP864.cs b/mcs/class/I18N/Rare/CP864.cs
new file mode 100644
index 00000000000..0ad86426477
--- /dev/null
+++ b/mcs/class/I18N/Rare/CP864.cs
@@ -0,0 +1,861 @@
+/*
+ * CP864.cs - Arabic (DOS) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-864.ucm".
+
+namespace I18N.Rare
+{
+
+using System;
+using I18N.Common;
+
+public class CP864 : ByteEncoding
+{
+ public CP864()
+ : base(864, ToChars, "Arabic (DOS)",
+ "ibm864", "ibm864", "ibm864",
+ false, false, false, false, 1256)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
+ '\u0006', '\u0007', '\u0008', '\u0009', '\u000A', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
+ '\u0018', '\u0019', '\u001C', '\u001B', '\u007F', '\u001D',
+ '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
+ '\u0024', '\u0025', '\u0026', '\u0027', '\u0028', '\u0029',
+ '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
+ '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
+ '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
+ '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
+ '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
+ '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
+ '\u005A', '\u005B', '\u005C', '\u005D', '\u005E', '\u005F',
+ '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
+ '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
+ '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
+ '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
+ '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
+ '\u007E', '\u001A', '\u00B0', '\u00B7', '\u2219', '\u221A',
+ '\u2592', '\u2500', '\u2502', '\u253C', '\u2524', '\u252C',
+ '\u251C', '\u2534', '\u2510', '\u250C', '\u2514', '\u2518',
+ '\u03B2', '\u221E', '\u03C6', '\u00B1', '\u00BD', '\u00BC',
+ '\u2248', '\u00AB', '\u00BB', '\uFEF7', '\uFEF8', '\u003F',
+ '\u003F', '\uFEFB', '\uFEFC', '\u200B', '\u00A0', '\u00AD',
+ '\uFE82', '\u00A3', '\u00A4', '\uFE84', '\u003F', '\u003F',
+ '\uFE8E', '\uFE8F', '\uFE95', '\uFE99', '\u060C', '\uFE9D',
+ '\uFEA1', '\uFEA5', '\u0660', '\u0661', '\u0662', '\u0663',
+ '\u0664', '\u0665', '\u0666', '\u0667', '\u0668', '\u0669',
+ '\uFED1', '\u061B', '\uFEB1', '\uFEB5', '\uFEB9', '\u061F',
+ '\u00A2', '\uFE80', '\uFE81', '\uFE83', '\uFE85', '\uFECA',
+ '\uFE8B', '\uFE8D', '\uFE91', '\uFE93', '\uFE97', '\uFE9B',
+ '\uFE9F', '\uFEA3', '\uFEA7', '\uFEA9', '\uFEAB', '\uFEAD',
+ '\uFEAF', '\uFEB3', '\uFEB7', '\uFEBB', '\uFEBF', '\uFEC3',
+ '\uFEC7', '\uFECB', '\uFECF', '\u00A6', '\u00AC', '\u00F7',
+ '\u00D7', '\uFEC9', '\u0640', '\uFED3', '\uFED7', '\uFEDB',
+ '\uFEDF', '\uFEE3', '\uFEE7', '\uFEEB', '\uFEED', '\uFEEF',
+ '\uFEF3', '\uFEBD', '\uFECC', '\uFECE', '\uFECD', '\uFEE1',
+ '\uFE7D', '\uFE7C', '\uFEE5', '\uFEE9', '\uFEEC', '\uFEF0',
+ '\uFEF2', '\uFED0', '\uFED5', '\uFEF5', '\uFEF6', '\uFEDD',
+ '\uFED9', '\uFEF1', '\u25A0', '\u003F',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 26) switch(ch)
+ {
+ case 0x001B:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x0020:
+ case 0x0021:
+ case 0x0022:
+ case 0x0023:
+ case 0x0024:
+ case 0x0025:
+ case 0x0026:
+ case 0x0027:
+ case 0x0028:
+ case 0x0029:
+ case 0x002A:
+ case 0x002B:
+ case 0x002C:
+ case 0x002D:
+ case 0x002E:
+ case 0x002F:
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ case 0x003A:
+ case 0x003B:
+ case 0x003C:
+ case 0x003D:
+ case 0x003E:
+ case 0x003F:
+ case 0x0040:
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ case 0x005B:
+ case 0x005C:
+ case 0x005D:
+ case 0x005E:
+ case 0x005F:
+ case 0x0060:
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ case 0x007B:
+ case 0x007C:
+ case 0x007D:
+ case 0x007E:
+ case 0x00A0:
+ case 0x00A3:
+ case 0x00A4:
+ break;
+ case 0x001A: ch = 0x7F; break;
+ case 0x001C: ch = 0x1A; break;
+ case 0x007F: ch = 0x1C; break;
+ case 0x00A2: ch = 0xC0; break;
+ case 0x00A6: ch = 0xDB; break;
+ case 0x00A7: ch = 0x15; break;
+ case 0x00AB: ch = 0x97; break;
+ case 0x00AC: ch = 0xDC; break;
+ case 0x00AD: ch = 0xA1; break;
+ case 0x00B0: ch = 0x80; break;
+ case 0x00B1: ch = 0x93; break;
+ case 0x00B6: ch = 0x14; break;
+ case 0x00B7: ch = 0x81; break;
+ case 0x00BB: ch = 0x98; break;
+ case 0x00BC: ch = 0x95; break;
+ case 0x00BD: ch = 0x94; break;
+ case 0x00D7: ch = 0xDE; break;
+ case 0x00F7: ch = 0xDD; break;
+ case 0x03B2: ch = 0x90; break;
+ case 0x03C6: ch = 0x92; break;
+ case 0x060C: ch = 0xAC; break;
+ case 0x061B: ch = 0xBB; break;
+ case 0x061F: ch = 0xBF; break;
+ case 0x0621:
+ case 0x0622:
+ case 0x0623:
+ case 0x0624:
+ ch -= 0x0560;
+ break;
+ case 0x0626:
+ case 0x0627:
+ case 0x0628:
+ case 0x0629:
+ case 0x062A:
+ case 0x062B:
+ case 0x062C:
+ case 0x062D:
+ case 0x062E:
+ case 0x062F:
+ case 0x0630:
+ case 0x0631:
+ case 0x0632:
+ case 0x0633:
+ case 0x0634:
+ case 0x0635:
+ case 0x0636:
+ case 0x0637:
+ case 0x0638:
+ case 0x0639:
+ case 0x063A:
+ ch -= 0x0560;
+ break;
+ case 0x0640:
+ case 0x0641:
+ case 0x0642:
+ case 0x0643:
+ case 0x0644:
+ case 0x0645:
+ case 0x0646:
+ case 0x0647:
+ case 0x0648:
+ case 0x0649:
+ ch -= 0x0560;
+ break;
+ case 0x064A: ch = 0xFD; break;
+ case 0x0651: ch = 0xF1; break;
+ case 0x0660:
+ case 0x0661:
+ case 0x0662:
+ case 0x0663:
+ case 0x0664:
+ case 0x0665:
+ case 0x0666:
+ case 0x0667:
+ case 0x0668:
+ case 0x0669:
+ ch -= 0x05B0;
+ break;
+ case 0x066A: ch = 0x25; break;
+ case 0x066B: ch = 0x2C; break;
+ case 0x066C: ch = 0x2E; break;
+ case 0x066D: ch = 0x2A; break;
+ case 0x200B: ch = 0x9F; break;
+ case 0x203C: ch = 0x13; break;
+ case 0x2190: ch = 0x1B; break;
+ case 0x2191: ch = 0x18; break;
+ case 0x2192: ch = 0x1A; break;
+ case 0x2193: ch = 0x19; break;
+ case 0x2194: ch = 0x1D; break;
+ case 0x2195: ch = 0x12; break;
+ case 0x21A8: ch = 0x17; break;
+ case 0x2219: ch = 0x82; break;
+ case 0x221A: ch = 0x83; break;
+ case 0x221E: ch = 0x91; break;
+ case 0x221F: ch = 0x1C; break;
+ case 0x2248: ch = 0x96; break;
+ case 0x2302: ch = 0x7F; break;
+ case 0x2500: ch = 0x85; break;
+ case 0x2502: ch = 0x86; break;
+ case 0x250C: ch = 0x8D; break;
+ case 0x2510: ch = 0x8C; break;
+ case 0x2514: ch = 0x8E; break;
+ case 0x2518: ch = 0x8F; break;
+ case 0x251C: ch = 0x8A; break;
+ case 0x2524: ch = 0x88; break;
+ case 0x252C: ch = 0x89; break;
+ case 0x2534: ch = 0x8B; break;
+ case 0x253C: ch = 0x87; break;
+ case 0x2550: ch = 0x05; break;
+ case 0x2551: ch = 0x06; break;
+ case 0x2554: ch = 0x0D; break;
+ case 0x2557: ch = 0x0C; break;
+ case 0x255A: ch = 0x0E; break;
+ case 0x255D: ch = 0x0F; break;
+ case 0x2560: ch = 0x0A; break;
+ case 0x2563: ch = 0x08; break;
+ case 0x2566: ch = 0x09; break;
+ case 0x2569: ch = 0x0B; break;
+ case 0x256C: ch = 0x07; break;
+ case 0x2592: ch = 0x84; break;
+ case 0x25A0: ch = 0xFE; break;
+ case 0x25AC: ch = 0x16; break;
+ case 0x25B2: ch = 0x1E; break;
+ case 0x25BA: ch = 0x10; break;
+ case 0x25BC: ch = 0x1F; break;
+ case 0x25C4: ch = 0x11; break;
+ case 0x263A: ch = 0x01; break;
+ case 0x263C: ch = 0x04; break;
+ case 0x266A: ch = 0x02; break;
+ case 0x266C: ch = 0x03; break;
+ case 0xFE7C: ch = 0xF1; break;
+ case 0xFE7D: ch = 0xF0; break;
+ case 0xFE80: ch = 0xC1; break;
+ case 0xFE81: ch = 0xC2; break;
+ case 0xFE82: ch = 0xA2; break;
+ case 0xFE83: ch = 0xC3; break;
+ case 0xFE84: ch = 0xA5; break;
+ case 0xFE85: ch = 0xC4; break;
+ case 0xFE86: ch = 0xC4; break;
+ case 0xFE8B: ch = 0xC6; break;
+ case 0xFE8C: ch = 0xC6; break;
+ case 0xFE8D: ch = 0xC7; break;
+ case 0xFE8E: ch = 0xA8; break;
+ case 0xFE8F: ch = 0xA9; break;
+ case 0xFE90: ch = 0xA9; break;
+ case 0xFE91: ch = 0xC8; break;
+ case 0xFE92: ch = 0xC8; break;
+ case 0xFE93: ch = 0xC9; break;
+ case 0xFE94: ch = 0xC9; break;
+ case 0xFE95: ch = 0xAA; break;
+ case 0xFE96: ch = 0xAA; break;
+ case 0xFE97: ch = 0xCA; break;
+ case 0xFE98: ch = 0xCA; break;
+ case 0xFE99: ch = 0xAB; break;
+ case 0xFE9A: ch = 0xAB; break;
+ case 0xFE9B: ch = 0xCB; break;
+ case 0xFE9C: ch = 0xCB; break;
+ case 0xFE9D: ch = 0xAD; break;
+ case 0xFE9E: ch = 0xAD; break;
+ case 0xFE9F: ch = 0xCC; break;
+ case 0xFEA0: ch = 0xCC; break;
+ case 0xFEA1: ch = 0xAE; break;
+ case 0xFEA2: ch = 0xAE; break;
+ case 0xFEA3: ch = 0xCD; break;
+ case 0xFEA4: ch = 0xCD; break;
+ case 0xFEA5: ch = 0xAF; break;
+ case 0xFEA6: ch = 0xAF; break;
+ case 0xFEA7: ch = 0xCE; break;
+ case 0xFEA8: ch = 0xCE; break;
+ case 0xFEA9: ch = 0xCF; break;
+ case 0xFEAA: ch = 0xCF; break;
+ case 0xFEAB: ch = 0xD0; break;
+ case 0xFEAC: ch = 0xD0; break;
+ case 0xFEAD: ch = 0xD1; break;
+ case 0xFEAE: ch = 0xD1; break;
+ case 0xFEAF: ch = 0xD2; break;
+ case 0xFEB0: ch = 0xD2; break;
+ case 0xFEB1: ch = 0xBC; break;
+ case 0xFEB2: ch = 0xBC; break;
+ case 0xFEB3: ch = 0xD3; break;
+ case 0xFEB4: ch = 0xD3; break;
+ case 0xFEB5: ch = 0xBD; break;
+ case 0xFEB6: ch = 0xBD; break;
+ case 0xFEB7: ch = 0xD4; break;
+ case 0xFEB8: ch = 0xD4; break;
+ case 0xFEB9: ch = 0xBE; break;
+ case 0xFEBA: ch = 0xBE; break;
+ case 0xFEBB: ch = 0xD5; break;
+ case 0xFEBC: ch = 0xD5; break;
+ case 0xFEBD: ch = 0xEB; break;
+ case 0xFEBE: ch = 0xEB; break;
+ case 0xFEBF: ch = 0xD6; break;
+ case 0xFEC0: ch = 0xD6; break;
+ case 0xFEC1: ch = 0xD7; break;
+ case 0xFEC2: ch = 0xD7; break;
+ case 0xFEC3: ch = 0xD7; break;
+ case 0xFEC4: ch = 0xD7; break;
+ case 0xFEC5: ch = 0xD8; break;
+ case 0xFEC6: ch = 0xD8; break;
+ case 0xFEC7: ch = 0xD8; break;
+ case 0xFEC8: ch = 0xD8; break;
+ case 0xFEC9: ch = 0xDF; break;
+ case 0xFECA: ch = 0xC5; break;
+ case 0xFECB: ch = 0xD9; break;
+ case 0xFECC: ch = 0xEC; break;
+ case 0xFECD: ch = 0xEE; break;
+ case 0xFECE: ch = 0xED; break;
+ case 0xFECF: ch = 0xDA; break;
+ case 0xFED0: ch = 0xF7; break;
+ case 0xFED1: ch = 0xBA; break;
+ case 0xFED2: ch = 0xBA; break;
+ case 0xFED3: ch = 0xE1; break;
+ case 0xFED4: ch = 0xE1; break;
+ case 0xFED5: ch = 0xF8; break;
+ case 0xFED6: ch = 0xF8; break;
+ case 0xFED7: ch = 0xE2; break;
+ case 0xFED8: ch = 0xE2; break;
+ case 0xFED9: ch = 0xFC; break;
+ case 0xFEDA: ch = 0xFC; break;
+ case 0xFEDB: ch = 0xE3; break;
+ case 0xFEDC: ch = 0xE3; break;
+ case 0xFEDD: ch = 0xFB; break;
+ case 0xFEDE: ch = 0xFB; break;
+ case 0xFEDF: ch = 0xE4; break;
+ case 0xFEE0: ch = 0xE4; break;
+ case 0xFEE1: ch = 0xEF; break;
+ case 0xFEE2: ch = 0xEF; break;
+ case 0xFEE3: ch = 0xE5; break;
+ case 0xFEE4: ch = 0xE5; break;
+ case 0xFEE5: ch = 0xF2; break;
+ case 0xFEE6: ch = 0xF2; break;
+ case 0xFEE7: ch = 0xE6; break;
+ case 0xFEE8: ch = 0xE6; break;
+ case 0xFEE9: ch = 0xF3; break;
+ case 0xFEEA: ch = 0xF3; break;
+ case 0xFEEB: ch = 0xE7; break;
+ case 0xFEEC: ch = 0xF4; break;
+ case 0xFEED: ch = 0xE8; break;
+ case 0xFEEE: ch = 0xE8; break;
+ case 0xFEEF: ch = 0xE9; break;
+ case 0xFEF0: ch = 0xF5; break;
+ case 0xFEF1: ch = 0xFD; break;
+ case 0xFEF2: ch = 0xF6; break;
+ case 0xFEF3: ch = 0xEA; break;
+ case 0xFEF4: ch = 0xEA; break;
+ case 0xFEF5: ch = 0xF9; break;
+ case 0xFEF6: ch = 0xFA; break;
+ case 0xFEF7: ch = 0x99; break;
+ case 0xFEF8: ch = 0x9A; break;
+ case 0xFEFB: ch = 0x9D; break;
+ case 0xFEFC: ch = 0x9E; break;
+ case 0xFFE8: ch = 0x86; break;
+ case 0xFFE9: ch = 0x1B; break;
+ case 0xFFEA: ch = 0x18; break;
+ case 0xFFEB: ch = 0x1A; break;
+ case 0xFFEC: ch = 0x19; break;
+ case 0xFFED: ch = 0xFE; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 26) switch(ch)
+ {
+ case 0x001B:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x0020:
+ case 0x0021:
+ case 0x0022:
+ case 0x0023:
+ case 0x0024:
+ case 0x0025:
+ case 0x0026:
+ case 0x0027:
+ case 0x0028:
+ case 0x0029:
+ case 0x002A:
+ case 0x002B:
+ case 0x002C:
+ case 0x002D:
+ case 0x002E:
+ case 0x002F:
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ case 0x003A:
+ case 0x003B:
+ case 0x003C:
+ case 0x003D:
+ case 0x003E:
+ case 0x003F:
+ case 0x0040:
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ case 0x005B:
+ case 0x005C:
+ case 0x005D:
+ case 0x005E:
+ case 0x005F:
+ case 0x0060:
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ case 0x007B:
+ case 0x007C:
+ case 0x007D:
+ case 0x007E:
+ case 0x00A0:
+ case 0x00A3:
+ case 0x00A4:
+ break;
+ case 0x001A: ch = 0x7F; break;
+ case 0x001C: ch = 0x1A; break;
+ case 0x007F: ch = 0x1C; break;
+ case 0x00A2: ch = 0xC0; break;
+ case 0x00A6: ch = 0xDB; break;
+ case 0x00A7: ch = 0x15; break;
+ case 0x00AB: ch = 0x97; break;
+ case 0x00AC: ch = 0xDC; break;
+ case 0x00AD: ch = 0xA1; break;
+ case 0x00B0: ch = 0x80; break;
+ case 0x00B1: ch = 0x93; break;
+ case 0x00B6: ch = 0x14; break;
+ case 0x00B7: ch = 0x81; break;
+ case 0x00BB: ch = 0x98; break;
+ case 0x00BC: ch = 0x95; break;
+ case 0x00BD: ch = 0x94; break;
+ case 0x00D7: ch = 0xDE; break;
+ case 0x00F7: ch = 0xDD; break;
+ case 0x03B2: ch = 0x90; break;
+ case 0x03C6: ch = 0x92; break;
+ case 0x060C: ch = 0xAC; break;
+ case 0x061B: ch = 0xBB; break;
+ case 0x061F: ch = 0xBF; break;
+ case 0x0621:
+ case 0x0622:
+ case 0x0623:
+ case 0x0624:
+ ch -= 0x0560;
+ break;
+ case 0x0626:
+ case 0x0627:
+ case 0x0628:
+ case 0x0629:
+ case 0x062A:
+ case 0x062B:
+ case 0x062C:
+ case 0x062D:
+ case 0x062E:
+ case 0x062F:
+ case 0x0630:
+ case 0x0631:
+ case 0x0632:
+ case 0x0633:
+ case 0x0634:
+ case 0x0635:
+ case 0x0636:
+ case 0x0637:
+ case 0x0638:
+ case 0x0639:
+ case 0x063A:
+ ch -= 0x0560;
+ break;
+ case 0x0640:
+ case 0x0641:
+ case 0x0642:
+ case 0x0643:
+ case 0x0644:
+ case 0x0645:
+ case 0x0646:
+ case 0x0647:
+ case 0x0648:
+ case 0x0649:
+ ch -= 0x0560;
+ break;
+ case 0x064A: ch = 0xFD; break;
+ case 0x0651: ch = 0xF1; break;
+ case 0x0660:
+ case 0x0661:
+ case 0x0662:
+ case 0x0663:
+ case 0x0664:
+ case 0x0665:
+ case 0x0666:
+ case 0x0667:
+ case 0x0668:
+ case 0x0669:
+ ch -= 0x05B0;
+ break;
+ case 0x066A: ch = 0x25; break;
+ case 0x066B: ch = 0x2C; break;
+ case 0x066C: ch = 0x2E; break;
+ case 0x066D: ch = 0x2A; break;
+ case 0x200B: ch = 0x9F; break;
+ case 0x203C: ch = 0x13; break;
+ case 0x2190: ch = 0x1B; break;
+ case 0x2191: ch = 0x18; break;
+ case 0x2192: ch = 0x1A; break;
+ case 0x2193: ch = 0x19; break;
+ case 0x2194: ch = 0x1D; break;
+ case 0x2195: ch = 0x12; break;
+ case 0x21A8: ch = 0x17; break;
+ case 0x2219: ch = 0x82; break;
+ case 0x221A: ch = 0x83; break;
+ case 0x221E: ch = 0x91; break;
+ case 0x221F: ch = 0x1C; break;
+ case 0x2248: ch = 0x96; break;
+ case 0x2302: ch = 0x7F; break;
+ case 0x2500: ch = 0x85; break;
+ case 0x2502: ch = 0x86; break;
+ case 0x250C: ch = 0x8D; break;
+ case 0x2510: ch = 0x8C; break;
+ case 0x2514: ch = 0x8E; break;
+ case 0x2518: ch = 0x8F; break;
+ case 0x251C: ch = 0x8A; break;
+ case 0x2524: ch = 0x88; break;
+ case 0x252C: ch = 0x89; break;
+ case 0x2534: ch = 0x8B; break;
+ case 0x253C: ch = 0x87; break;
+ case 0x2550: ch = 0x05; break;
+ case 0x2551: ch = 0x06; break;
+ case 0x2554: ch = 0x0D; break;
+ case 0x2557: ch = 0x0C; break;
+ case 0x255A: ch = 0x0E; break;
+ case 0x255D: ch = 0x0F; break;
+ case 0x2560: ch = 0x0A; break;
+ case 0x2563: ch = 0x08; break;
+ case 0x2566: ch = 0x09; break;
+ case 0x2569: ch = 0x0B; break;
+ case 0x256C: ch = 0x07; break;
+ case 0x2592: ch = 0x84; break;
+ case 0x25A0: ch = 0xFE; break;
+ case 0x25AC: ch = 0x16; break;
+ case 0x25B2: ch = 0x1E; break;
+ case 0x25BA: ch = 0x10; break;
+ case 0x25BC: ch = 0x1F; break;
+ case 0x25C4: ch = 0x11; break;
+ case 0x263A: ch = 0x01; break;
+ case 0x263C: ch = 0x04; break;
+ case 0x266A: ch = 0x02; break;
+ case 0x266C: ch = 0x03; break;
+ case 0xFE7C: ch = 0xF1; break;
+ case 0xFE7D: ch = 0xF0; break;
+ case 0xFE80: ch = 0xC1; break;
+ case 0xFE81: ch = 0xC2; break;
+ case 0xFE82: ch = 0xA2; break;
+ case 0xFE83: ch = 0xC3; break;
+ case 0xFE84: ch = 0xA5; break;
+ case 0xFE85: ch = 0xC4; break;
+ case 0xFE86: ch = 0xC4; break;
+ case 0xFE8B: ch = 0xC6; break;
+ case 0xFE8C: ch = 0xC6; break;
+ case 0xFE8D: ch = 0xC7; break;
+ case 0xFE8E: ch = 0xA8; break;
+ case 0xFE8F: ch = 0xA9; break;
+ case 0xFE90: ch = 0xA9; break;
+ case 0xFE91: ch = 0xC8; break;
+ case 0xFE92: ch = 0xC8; break;
+ case 0xFE93: ch = 0xC9; break;
+ case 0xFE94: ch = 0xC9; break;
+ case 0xFE95: ch = 0xAA; break;
+ case 0xFE96: ch = 0xAA; break;
+ case 0xFE97: ch = 0xCA; break;
+ case 0xFE98: ch = 0xCA; break;
+ case 0xFE99: ch = 0xAB; break;
+ case 0xFE9A: ch = 0xAB; break;
+ case 0xFE9B: ch = 0xCB; break;
+ case 0xFE9C: ch = 0xCB; break;
+ case 0xFE9D: ch = 0xAD; break;
+ case 0xFE9E: ch = 0xAD; break;
+ case 0xFE9F: ch = 0xCC; break;
+ case 0xFEA0: ch = 0xCC; break;
+ case 0xFEA1: ch = 0xAE; break;
+ case 0xFEA2: ch = 0xAE; break;
+ case 0xFEA3: ch = 0xCD; break;
+ case 0xFEA4: ch = 0xCD; break;
+ case 0xFEA5: ch = 0xAF; break;
+ case 0xFEA6: ch = 0xAF; break;
+ case 0xFEA7: ch = 0xCE; break;
+ case 0xFEA8: ch = 0xCE; break;
+ case 0xFEA9: ch = 0xCF; break;
+ case 0xFEAA: ch = 0xCF; break;
+ case 0xFEAB: ch = 0xD0; break;
+ case 0xFEAC: ch = 0xD0; break;
+ case 0xFEAD: ch = 0xD1; break;
+ case 0xFEAE: ch = 0xD1; break;
+ case 0xFEAF: ch = 0xD2; break;
+ case 0xFEB0: ch = 0xD2; break;
+ case 0xFEB1: ch = 0xBC; break;
+ case 0xFEB2: ch = 0xBC; break;
+ case 0xFEB3: ch = 0xD3; break;
+ case 0xFEB4: ch = 0xD3; break;
+ case 0xFEB5: ch = 0xBD; break;
+ case 0xFEB6: ch = 0xBD; break;
+ case 0xFEB7: ch = 0xD4; break;
+ case 0xFEB8: ch = 0xD4; break;
+ case 0xFEB9: ch = 0xBE; break;
+ case 0xFEBA: ch = 0xBE; break;
+ case 0xFEBB: ch = 0xD5; break;
+ case 0xFEBC: ch = 0xD5; break;
+ case 0xFEBD: ch = 0xEB; break;
+ case 0xFEBE: ch = 0xEB; break;
+ case 0xFEBF: ch = 0xD6; break;
+ case 0xFEC0: ch = 0xD6; break;
+ case 0xFEC1: ch = 0xD7; break;
+ case 0xFEC2: ch = 0xD7; break;
+ case 0xFEC3: ch = 0xD7; break;
+ case 0xFEC4: ch = 0xD7; break;
+ case 0xFEC5: ch = 0xD8; break;
+ case 0xFEC6: ch = 0xD8; break;
+ case 0xFEC7: ch = 0xD8; break;
+ case 0xFEC8: ch = 0xD8; break;
+ case 0xFEC9: ch = 0xDF; break;
+ case 0xFECA: ch = 0xC5; break;
+ case 0xFECB: ch = 0xD9; break;
+ case 0xFECC: ch = 0xEC; break;
+ case 0xFECD: ch = 0xEE; break;
+ case 0xFECE: ch = 0xED; break;
+ case 0xFECF: ch = 0xDA; break;
+ case 0xFED0: ch = 0xF7; break;
+ case 0xFED1: ch = 0xBA; break;
+ case 0xFED2: ch = 0xBA; break;
+ case 0xFED3: ch = 0xE1; break;
+ case 0xFED4: ch = 0xE1; break;
+ case 0xFED5: ch = 0xF8; break;
+ case 0xFED6: ch = 0xF8; break;
+ case 0xFED7: ch = 0xE2; break;
+ case 0xFED8: ch = 0xE2; break;
+ case 0xFED9: ch = 0xFC; break;
+ case 0xFEDA: ch = 0xFC; break;
+ case 0xFEDB: ch = 0xE3; break;
+ case 0xFEDC: ch = 0xE3; break;
+ case 0xFEDD: ch = 0xFB; break;
+ case 0xFEDE: ch = 0xFB; break;
+ case 0xFEDF: ch = 0xE4; break;
+ case 0xFEE0: ch = 0xE4; break;
+ case 0xFEE1: ch = 0xEF; break;
+ case 0xFEE2: ch = 0xEF; break;
+ case 0xFEE3: ch = 0xE5; break;
+ case 0xFEE4: ch = 0xE5; break;
+ case 0xFEE5: ch = 0xF2; break;
+ case 0xFEE6: ch = 0xF2; break;
+ case 0xFEE7: ch = 0xE6; break;
+ case 0xFEE8: ch = 0xE6; break;
+ case 0xFEE9: ch = 0xF3; break;
+ case 0xFEEA: ch = 0xF3; break;
+ case 0xFEEB: ch = 0xE7; break;
+ case 0xFEEC: ch = 0xF4; break;
+ case 0xFEED: ch = 0xE8; break;
+ case 0xFEEE: ch = 0xE8; break;
+ case 0xFEEF: ch = 0xE9; break;
+ case 0xFEF0: ch = 0xF5; break;
+ case 0xFEF1: ch = 0xFD; break;
+ case 0xFEF2: ch = 0xF6; break;
+ case 0xFEF3: ch = 0xEA; break;
+ case 0xFEF4: ch = 0xEA; break;
+ case 0xFEF5: ch = 0xF9; break;
+ case 0xFEF6: ch = 0xFA; break;
+ case 0xFEF7: ch = 0x99; break;
+ case 0xFEF8: ch = 0x9A; break;
+ case 0xFEFB: ch = 0x9D; break;
+ case 0xFEFC: ch = 0x9E; break;
+ case 0xFFE8: ch = 0x86; break;
+ case 0xFFE9: ch = 0x1B; break;
+ case 0xFFEA: ch = 0x18; break;
+ case 0xFFEB: ch = 0x1A; break;
+ case 0xFFEC: ch = 0x19; break;
+ case 0xFFED: ch = 0xFE; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP864
+
+public class ENCibm864 : CP864
+{
+ public ENCibm864() : base() {}
+
+}; // class ENCibm864
+
+}; // namespace I18N.Rare
diff --git a/mcs/class/I18N/Rare/CP866.cs b/mcs/class/I18N/Rare/CP866.cs
new file mode 100644
index 00000000000..a379477bc23
--- /dev/null
+++ b/mcs/class/I18N/Rare/CP866.cs
@@ -0,0 +1,689 @@
+/*
+ * CP866.cs - Russian (DOS) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-866.ucm".
+
+namespace I18N.Rare
+{
+
+using System;
+using I18N.Common;
+
+public class CP866 : ByteEncoding
+{
+ public CP866()
+ : base(866, ToChars, "Russian (DOS)",
+ "ibm866", "ibm866", "ibm866",
+ false, false, false, false, 1251)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
+ '\u0006', '\u0007', '\u0008', '\u0009', '\u000A', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
+ '\u0018', '\u0019', '\u001C', '\u001B', '\u007F', '\u001D',
+ '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
+ '\u0024', '\u0025', '\u0026', '\u0027', '\u0028', '\u0029',
+ '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
+ '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
+ '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
+ '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
+ '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
+ '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
+ '\u005A', '\u005B', '\u005C', '\u005D', '\u005E', '\u005F',
+ '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
+ '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
+ '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
+ '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
+ '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
+ '\u007E', '\u001A', '\u0410', '\u0411', '\u0412', '\u0413',
+ '\u0414', '\u0415', '\u0416', '\u0417', '\u0418', '\u0419',
+ '\u041A', '\u041B', '\u041C', '\u041D', '\u041E', '\u041F',
+ '\u0420', '\u0421', '\u0422', '\u0423', '\u0424', '\u0425',
+ '\u0426', '\u0427', '\u0428', '\u0429', '\u042A', '\u042B',
+ '\u042C', '\u042D', '\u042E', '\u042F', '\u0430', '\u0431',
+ '\u0432', '\u0433', '\u0434', '\u0435', '\u0436', '\u0437',
+ '\u0438', '\u0439', '\u043A', '\u043B', '\u043C', '\u043D',
+ '\u043E', '\u043F', '\u2591', '\u2592', '\u2593', '\u2502',
+ '\u2524', '\u2561', '\u2562', '\u2556', '\u2555', '\u2563',
+ '\u2551', '\u2557', '\u255D', '\u255C', '\u255B', '\u2510',
+ '\u2514', '\u2534', '\u252C', '\u251C', '\u2500', '\u253C',
+ '\u255E', '\u255F', '\u255A', '\u2554', '\u2569', '\u2566',
+ '\u2560', '\u2550', '\u256C', '\u2567', '\u2568', '\u2564',
+ '\u2565', '\u2559', '\u2558', '\u2552', '\u2553', '\u256B',
+ '\u256A', '\u2518', '\u250C', '\u2588', '\u2584', '\u258C',
+ '\u2590', '\u2580', '\u0440', '\u0441', '\u0442', '\u0443',
+ '\u0444', '\u0445', '\u0446', '\u0447', '\u0448', '\u0449',
+ '\u044A', '\u044B', '\u044C', '\u044D', '\u044E', '\u044F',
+ '\u0401', '\u0451', '\u0404', '\u0454', '\u0407', '\u0457',
+ '\u040E', '\u045E', '\u00B0', '\u2219', '\u00B7', '\u221A',
+ '\u2116', '\u00A4', '\u25A0', '\u00A0',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 26) switch(ch)
+ {
+ case 0x001B:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x0020:
+ case 0x0021:
+ case 0x0022:
+ case 0x0023:
+ case 0x0024:
+ case 0x0025:
+ case 0x0026:
+ case 0x0027:
+ case 0x0028:
+ case 0x0029:
+ case 0x002A:
+ case 0x002B:
+ case 0x002C:
+ case 0x002D:
+ case 0x002E:
+ case 0x002F:
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ case 0x003A:
+ case 0x003B:
+ case 0x003C:
+ case 0x003D:
+ case 0x003E:
+ case 0x003F:
+ case 0x0040:
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ case 0x005B:
+ case 0x005C:
+ case 0x005D:
+ case 0x005E:
+ case 0x005F:
+ case 0x0060:
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ case 0x007B:
+ case 0x007C:
+ case 0x007D:
+ case 0x007E:
+ break;
+ case 0x001A: ch = 0x7F; break;
+ case 0x001C: ch = 0x1A; break;
+ case 0x007F: ch = 0x1C; break;
+ case 0x00A0: ch = 0xFF; break;
+ case 0x00A4: ch = 0xFD; break;
+ case 0x00A7: ch = 0x15; break;
+ case 0x00B0: ch = 0xF8; break;
+ case 0x00B6: ch = 0x14; break;
+ case 0x00B7: ch = 0xFA; break;
+ case 0x0401: ch = 0xF0; break;
+ case 0x0404: ch = 0xF2; break;
+ case 0x0407: ch = 0xF4; break;
+ case 0x040E: ch = 0xF6; break;
+ case 0x0410:
+ case 0x0411:
+ case 0x0412:
+ case 0x0413:
+ case 0x0414:
+ case 0x0415:
+ case 0x0416:
+ case 0x0417:
+ case 0x0418:
+ case 0x0419:
+ case 0x041A:
+ case 0x041B:
+ case 0x041C:
+ case 0x041D:
+ case 0x041E:
+ case 0x041F:
+ case 0x0420:
+ case 0x0421:
+ case 0x0422:
+ case 0x0423:
+ case 0x0424:
+ case 0x0425:
+ case 0x0426:
+ case 0x0427:
+ case 0x0428:
+ case 0x0429:
+ case 0x042A:
+ case 0x042B:
+ case 0x042C:
+ case 0x042D:
+ case 0x042E:
+ case 0x042F:
+ case 0x0430:
+ case 0x0431:
+ case 0x0432:
+ case 0x0433:
+ case 0x0434:
+ case 0x0435:
+ case 0x0436:
+ case 0x0437:
+ case 0x0438:
+ case 0x0439:
+ case 0x043A:
+ case 0x043B:
+ case 0x043C:
+ case 0x043D:
+ case 0x043E:
+ case 0x043F:
+ ch -= 0x0390;
+ break;
+ case 0x0440:
+ case 0x0441:
+ case 0x0442:
+ case 0x0443:
+ case 0x0444:
+ case 0x0445:
+ case 0x0446:
+ case 0x0447:
+ case 0x0448:
+ case 0x0449:
+ case 0x044A:
+ case 0x044B:
+ case 0x044C:
+ case 0x044D:
+ case 0x044E:
+ case 0x044F:
+ ch -= 0x0360;
+ break;
+ case 0x0451: ch = 0xF1; break;
+ case 0x0454: ch = 0xF3; break;
+ case 0x0457: ch = 0xF5; break;
+ case 0x045E: ch = 0xF7; break;
+ case 0x2022: ch = 0x07; break;
+ case 0x203C: ch = 0x13; break;
+ case 0x2116: ch = 0xFC; break;
+ case 0x2190: ch = 0x1B; break;
+ case 0x2191: ch = 0x18; break;
+ case 0x2192: ch = 0x1A; break;
+ case 0x2193: ch = 0x19; break;
+ case 0x2194: ch = 0x1D; break;
+ case 0x2195: ch = 0x12; break;
+ case 0x21A8: ch = 0x17; break;
+ case 0x2219: ch = 0xF9; break;
+ case 0x221A: ch = 0xFB; break;
+ case 0x221F: ch = 0x1C; break;
+ case 0x2302: ch = 0x7F; break;
+ case 0x2500: ch = 0xC4; break;
+ case 0x2502: ch = 0xB3; break;
+ case 0x250C: ch = 0xDA; break;
+ case 0x2510: ch = 0xBF; break;
+ case 0x2514: ch = 0xC0; break;
+ case 0x2518: ch = 0xD9; break;
+ case 0x251C: ch = 0xC3; break;
+ case 0x2524: ch = 0xB4; break;
+ case 0x252C: ch = 0xC2; break;
+ case 0x2534: ch = 0xC1; break;
+ case 0x253C: ch = 0xC5; break;
+ case 0x2550: ch = 0xCD; break;
+ case 0x2551: ch = 0xBA; break;
+ case 0x2552: ch = 0xD5; break;
+ case 0x2553: ch = 0xD6; break;
+ case 0x2554: ch = 0xC9; break;
+ case 0x2555: ch = 0xB8; break;
+ case 0x2556: ch = 0xB7; break;
+ case 0x2557: ch = 0xBB; break;
+ case 0x2558: ch = 0xD4; break;
+ case 0x2559: ch = 0xD3; break;
+ case 0x255A: ch = 0xC8; break;
+ case 0x255B: ch = 0xBE; break;
+ case 0x255C: ch = 0xBD; break;
+ case 0x255D: ch = 0xBC; break;
+ case 0x255E: ch = 0xC6; break;
+ case 0x255F: ch = 0xC7; break;
+ case 0x2560: ch = 0xCC; break;
+ case 0x2561: ch = 0xB5; break;
+ case 0x2562: ch = 0xB6; break;
+ case 0x2563: ch = 0xB9; break;
+ case 0x2564: ch = 0xD1; break;
+ case 0x2565: ch = 0xD2; break;
+ case 0x2566: ch = 0xCB; break;
+ case 0x2567: ch = 0xCF; break;
+ case 0x2568: ch = 0xD0; break;
+ case 0x2569: ch = 0xCA; break;
+ case 0x256A: ch = 0xD8; break;
+ case 0x256B: ch = 0xD7; break;
+ case 0x256C: ch = 0xCE; break;
+ case 0x2580: ch = 0xDF; break;
+ case 0x2584: ch = 0xDC; break;
+ case 0x2588: ch = 0xDB; break;
+ case 0x258C: ch = 0xDD; break;
+ case 0x2590: ch = 0xDE; break;
+ case 0x2591: ch = 0xB0; break;
+ case 0x2592: ch = 0xB1; break;
+ case 0x2593: ch = 0xB2; break;
+ case 0x25A0: ch = 0xFE; break;
+ case 0x25AC: ch = 0x16; break;
+ case 0x25B2: ch = 0x1E; break;
+ case 0x25BA: ch = 0x10; break;
+ case 0x25BC: ch = 0x1F; break;
+ case 0x25C4: ch = 0x11; break;
+ case 0x25CB: ch = 0x09; break;
+ case 0x25D8: ch = 0x08; break;
+ case 0x25D9: ch = 0x0A; break;
+ case 0x263A: ch = 0x01; break;
+ case 0x263B: ch = 0x02; break;
+ case 0x263C: ch = 0x0F; break;
+ case 0x2640: ch = 0x0C; break;
+ case 0x2642: ch = 0x0B; break;
+ case 0x2660: ch = 0x06; break;
+ case 0x2663: ch = 0x05; break;
+ case 0x2665: ch = 0x03; break;
+ case 0x2666: ch = 0x04; break;
+ case 0x266A: ch = 0x0D; break;
+ case 0x266B: ch = 0x0E; break;
+ case 0xFFE8: ch = 0xB3; break;
+ case 0xFFE9: ch = 0x1B; break;
+ case 0xFFEA: ch = 0x18; break;
+ case 0xFFEB: ch = 0x1A; break;
+ case 0xFFEC: ch = 0x19; break;
+ case 0xFFED: ch = 0xFE; break;
+ case 0xFFEE: ch = 0x09; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 26) switch(ch)
+ {
+ case 0x001B:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x0020:
+ case 0x0021:
+ case 0x0022:
+ case 0x0023:
+ case 0x0024:
+ case 0x0025:
+ case 0x0026:
+ case 0x0027:
+ case 0x0028:
+ case 0x0029:
+ case 0x002A:
+ case 0x002B:
+ case 0x002C:
+ case 0x002D:
+ case 0x002E:
+ case 0x002F:
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ case 0x003A:
+ case 0x003B:
+ case 0x003C:
+ case 0x003D:
+ case 0x003E:
+ case 0x003F:
+ case 0x0040:
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ case 0x005B:
+ case 0x005C:
+ case 0x005D:
+ case 0x005E:
+ case 0x005F:
+ case 0x0060:
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ case 0x007B:
+ case 0x007C:
+ case 0x007D:
+ case 0x007E:
+ break;
+ case 0x001A: ch = 0x7F; break;
+ case 0x001C: ch = 0x1A; break;
+ case 0x007F: ch = 0x1C; break;
+ case 0x00A0: ch = 0xFF; break;
+ case 0x00A4: ch = 0xFD; break;
+ case 0x00A7: ch = 0x15; break;
+ case 0x00B0: ch = 0xF8; break;
+ case 0x00B6: ch = 0x14; break;
+ case 0x00B7: ch = 0xFA; break;
+ case 0x0401: ch = 0xF0; break;
+ case 0x0404: ch = 0xF2; break;
+ case 0x0407: ch = 0xF4; break;
+ case 0x040E: ch = 0xF6; break;
+ case 0x0410:
+ case 0x0411:
+ case 0x0412:
+ case 0x0413:
+ case 0x0414:
+ case 0x0415:
+ case 0x0416:
+ case 0x0417:
+ case 0x0418:
+ case 0x0419:
+ case 0x041A:
+ case 0x041B:
+ case 0x041C:
+ case 0x041D:
+ case 0x041E:
+ case 0x041F:
+ case 0x0420:
+ case 0x0421:
+ case 0x0422:
+ case 0x0423:
+ case 0x0424:
+ case 0x0425:
+ case 0x0426:
+ case 0x0427:
+ case 0x0428:
+ case 0x0429:
+ case 0x042A:
+ case 0x042B:
+ case 0x042C:
+ case 0x042D:
+ case 0x042E:
+ case 0x042F:
+ case 0x0430:
+ case 0x0431:
+ case 0x0432:
+ case 0x0433:
+ case 0x0434:
+ case 0x0435:
+ case 0x0436:
+ case 0x0437:
+ case 0x0438:
+ case 0x0439:
+ case 0x043A:
+ case 0x043B:
+ case 0x043C:
+ case 0x043D:
+ case 0x043E:
+ case 0x043F:
+ ch -= 0x0390;
+ break;
+ case 0x0440:
+ case 0x0441:
+ case 0x0442:
+ case 0x0443:
+ case 0x0444:
+ case 0x0445:
+ case 0x0446:
+ case 0x0447:
+ case 0x0448:
+ case 0x0449:
+ case 0x044A:
+ case 0x044B:
+ case 0x044C:
+ case 0x044D:
+ case 0x044E:
+ case 0x044F:
+ ch -= 0x0360;
+ break;
+ case 0x0451: ch = 0xF1; break;
+ case 0x0454: ch = 0xF3; break;
+ case 0x0457: ch = 0xF5; break;
+ case 0x045E: ch = 0xF7; break;
+ case 0x2022: ch = 0x07; break;
+ case 0x203C: ch = 0x13; break;
+ case 0x2116: ch = 0xFC; break;
+ case 0x2190: ch = 0x1B; break;
+ case 0x2191: ch = 0x18; break;
+ case 0x2192: ch = 0x1A; break;
+ case 0x2193: ch = 0x19; break;
+ case 0x2194: ch = 0x1D; break;
+ case 0x2195: ch = 0x12; break;
+ case 0x21A8: ch = 0x17; break;
+ case 0x2219: ch = 0xF9; break;
+ case 0x221A: ch = 0xFB; break;
+ case 0x221F: ch = 0x1C; break;
+ case 0x2302: ch = 0x7F; break;
+ case 0x2500: ch = 0xC4; break;
+ case 0x2502: ch = 0xB3; break;
+ case 0x250C: ch = 0xDA; break;
+ case 0x2510: ch = 0xBF; break;
+ case 0x2514: ch = 0xC0; break;
+ case 0x2518: ch = 0xD9; break;
+ case 0x251C: ch = 0xC3; break;
+ case 0x2524: ch = 0xB4; break;
+ case 0x252C: ch = 0xC2; break;
+ case 0x2534: ch = 0xC1; break;
+ case 0x253C: ch = 0xC5; break;
+ case 0x2550: ch = 0xCD; break;
+ case 0x2551: ch = 0xBA; break;
+ case 0x2552: ch = 0xD5; break;
+ case 0x2553: ch = 0xD6; break;
+ case 0x2554: ch = 0xC9; break;
+ case 0x2555: ch = 0xB8; break;
+ case 0x2556: ch = 0xB7; break;
+ case 0x2557: ch = 0xBB; break;
+ case 0x2558: ch = 0xD4; break;
+ case 0x2559: ch = 0xD3; break;
+ case 0x255A: ch = 0xC8; break;
+ case 0x255B: ch = 0xBE; break;
+ case 0x255C: ch = 0xBD; break;
+ case 0x255D: ch = 0xBC; break;
+ case 0x255E: ch = 0xC6; break;
+ case 0x255F: ch = 0xC7; break;
+ case 0x2560: ch = 0xCC; break;
+ case 0x2561: ch = 0xB5; break;
+ case 0x2562: ch = 0xB6; break;
+ case 0x2563: ch = 0xB9; break;
+ case 0x2564: ch = 0xD1; break;
+ case 0x2565: ch = 0xD2; break;
+ case 0x2566: ch = 0xCB; break;
+ case 0x2567: ch = 0xCF; break;
+ case 0x2568: ch = 0xD0; break;
+ case 0x2569: ch = 0xCA; break;
+ case 0x256A: ch = 0xD8; break;
+ case 0x256B: ch = 0xD7; break;
+ case 0x256C: ch = 0xCE; break;
+ case 0x2580: ch = 0xDF; break;
+ case 0x2584: ch = 0xDC; break;
+ case 0x2588: ch = 0xDB; break;
+ case 0x258C: ch = 0xDD; break;
+ case 0x2590: ch = 0xDE; break;
+ case 0x2591: ch = 0xB0; break;
+ case 0x2592: ch = 0xB1; break;
+ case 0x2593: ch = 0xB2; break;
+ case 0x25A0: ch = 0xFE; break;
+ case 0x25AC: ch = 0x16; break;
+ case 0x25B2: ch = 0x1E; break;
+ case 0x25BA: ch = 0x10; break;
+ case 0x25BC: ch = 0x1F; break;
+ case 0x25C4: ch = 0x11; break;
+ case 0x25CB: ch = 0x09; break;
+ case 0x25D8: ch = 0x08; break;
+ case 0x25D9: ch = 0x0A; break;
+ case 0x263A: ch = 0x01; break;
+ case 0x263B: ch = 0x02; break;
+ case 0x263C: ch = 0x0F; break;
+ case 0x2640: ch = 0x0C; break;
+ case 0x2642: ch = 0x0B; break;
+ case 0x2660: ch = 0x06; break;
+ case 0x2663: ch = 0x05; break;
+ case 0x2665: ch = 0x03; break;
+ case 0x2666: ch = 0x04; break;
+ case 0x266A: ch = 0x0D; break;
+ case 0x266B: ch = 0x0E; break;
+ case 0xFFE8: ch = 0xB3; break;
+ case 0xFFE9: ch = 0x1B; break;
+ case 0xFFEA: ch = 0x18; break;
+ case 0xFFEB: ch = 0x1A; break;
+ case 0xFFEC: ch = 0x19; break;
+ case 0xFFED: ch = 0xFE; break;
+ case 0xFFEE: ch = 0x09; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP866
+
+public class ENCibm866 : CP866
+{
+ public ENCibm866() : base() {}
+
+}; // class ENCibm866
+
+}; // namespace I18N.Rare
diff --git a/mcs/class/I18N/Rare/CP869.cs b/mcs/class/I18N/Rare/CP869.cs
new file mode 100644
index 00000000000..443da7c1250
--- /dev/null
+++ b/mcs/class/I18N/Rare/CP869.cs
@@ -0,0 +1,681 @@
+/*
+ * CP869.cs - Greek (DOS) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-869.ucm".
+
+namespace I18N.Rare
+{
+
+using System;
+using I18N.Common;
+
+public class CP869 : ByteEncoding
+{
+ public CP869()
+ : base(869, ToChars, "Greek (DOS)",
+ "ibm869", "ibm869", "ibm869",
+ false, false, false, false, 1253)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
+ '\u0006', '\u0007', '\u0008', '\u0009', '\u000A', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
+ '\u0018', '\u0019', '\u001C', '\u001B', '\u007F', '\u001D',
+ '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
+ '\u0024', '\u0025', '\u0026', '\u0027', '\u0028', '\u0029',
+ '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
+ '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
+ '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
+ '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
+ '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
+ '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
+ '\u005A', '\u005B', '\u005C', '\u005D', '\u005E', '\u005F',
+ '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
+ '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
+ '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
+ '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
+ '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
+ '\u007E', '\u001A', '\u003F', '\u003F', '\u003F', '\u003F',
+ '\u003F', '\u003F', '\u0386', '\u003F', '\u0387', '\u00AC',
+ '\u00A6', '\u2018', '\u2019', '\u0388', '\u2015', '\u0389',
+ '\u038A', '\u03AA', '\u038C', '\u003F', '\u003F', '\u038E',
+ '\u03AB', '\u00A9', '\u038F', '\u00B2', '\u00B3', '\u03AC',
+ '\u00A3', '\u03AD', '\u03AE', '\u03AF', '\u03CA', '\u0390',
+ '\u03CC', '\u03CD', '\u0391', '\u0392', '\u0393', '\u0394',
+ '\u0395', '\u0396', '\u0397', '\u00BD', '\u0398', '\u0399',
+ '\u00AB', '\u00BB', '\u2591', '\u2592', '\u2593', '\u2502',
+ '\u2524', '\u039A', '\u039B', '\u039C', '\u039D', '\u2563',
+ '\u2551', '\u2557', '\u255D', '\u039E', '\u039F', '\u2510',
+ '\u2514', '\u2534', '\u252C', '\u251C', '\u2500', '\u253C',
+ '\u03A0', '\u03A1', '\u255A', '\u2554', '\u2569', '\u2566',
+ '\u2560', '\u2550', '\u256C', '\u03A3', '\u03A4', '\u03A5',
+ '\u03A6', '\u03A7', '\u03A8', '\u03A9', '\u03B1', '\u03B2',
+ '\u03B3', '\u2518', '\u250C', '\u2588', '\u2584', '\u03B4',
+ '\u03B5', '\u2580', '\u03B6', '\u03B7', '\u03B8', '\u03B9',
+ '\u03BA', '\u03BB', '\u03BC', '\u03BD', '\u03BE', '\u03BF',
+ '\u03C0', '\u03C1', '\u03C3', '\u03C2', '\u03C4', '\u00B4',
+ '\u00AD', '\u00B1', '\u03C5', '\u03C6', '\u03C7', '\u00A7',
+ '\u03C8', '\u0385', '\u00B0', '\u00A8', '\u03C9', '\u03CB',
+ '\u03B0', '\u03CE', '\u25A0', '\u00A0',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 26) switch(ch)
+ {
+ case 0x001B:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x0020:
+ case 0x0021:
+ case 0x0022:
+ case 0x0023:
+ case 0x0024:
+ case 0x0025:
+ case 0x0026:
+ case 0x0027:
+ case 0x0028:
+ case 0x0029:
+ case 0x002A:
+ case 0x002B:
+ case 0x002C:
+ case 0x002D:
+ case 0x002E:
+ case 0x002F:
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ case 0x003A:
+ case 0x003B:
+ case 0x003C:
+ case 0x003D:
+ case 0x003E:
+ case 0x003F:
+ case 0x0040:
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ case 0x005B:
+ case 0x005C:
+ case 0x005D:
+ case 0x005E:
+ case 0x005F:
+ case 0x0060:
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ case 0x007B:
+ case 0x007C:
+ case 0x007D:
+ case 0x007E:
+ break;
+ case 0x001A: ch = 0x7F; break;
+ case 0x001C: ch = 0x1A; break;
+ case 0x007F: ch = 0x1C; break;
+ case 0x00A0: ch = 0xFF; break;
+ case 0x00A3: ch = 0x9C; break;
+ case 0x00A6: ch = 0x8A; break;
+ case 0x00A7: ch = 0xF5; break;
+ case 0x00A8: ch = 0xF9; break;
+ case 0x00A9: ch = 0x97; break;
+ case 0x00AB: ch = 0xAE; break;
+ case 0x00AC: ch = 0x89; break;
+ case 0x00AD: ch = 0xF0; break;
+ case 0x00B0: ch = 0xF8; break;
+ case 0x00B1: ch = 0xF1; break;
+ case 0x00B2: ch = 0x99; break;
+ case 0x00B3: ch = 0x9A; break;
+ case 0x00B4: ch = 0xEF; break;
+ case 0x00B6: ch = 0x14; break;
+ case 0x00B7: ch = 0x88; break;
+ case 0x00BB: ch = 0xAF; break;
+ case 0x00BD: ch = 0xAB; break;
+ case 0x0385: ch = 0xF7; break;
+ case 0x0386: ch = 0x86; break;
+ case 0x0387: ch = 0x88; break;
+ case 0x0388: ch = 0x8D; break;
+ case 0x0389: ch = 0x8F; break;
+ case 0x038A: ch = 0x90; break;
+ case 0x038C: ch = 0x92; break;
+ case 0x038E: ch = 0x95; break;
+ case 0x038F: ch = 0x98; break;
+ case 0x0390: ch = 0xA1; break;
+ case 0x0391:
+ case 0x0392:
+ case 0x0393:
+ case 0x0394:
+ case 0x0395:
+ case 0x0396:
+ case 0x0397:
+ ch -= 0x02ED;
+ break;
+ case 0x0398: ch = 0xAC; break;
+ case 0x0399: ch = 0xAD; break;
+ case 0x039A:
+ case 0x039B:
+ case 0x039C:
+ case 0x039D:
+ ch -= 0x02E5;
+ break;
+ case 0x039E: ch = 0xBD; break;
+ case 0x039F: ch = 0xBE; break;
+ case 0x03A0: ch = 0xC6; break;
+ case 0x03A1: ch = 0xC7; break;
+ case 0x03A3:
+ case 0x03A4:
+ case 0x03A5:
+ case 0x03A6:
+ case 0x03A7:
+ case 0x03A8:
+ case 0x03A9:
+ ch -= 0x02D4;
+ break;
+ case 0x03AA: ch = 0x91; break;
+ case 0x03AB: ch = 0x96; break;
+ case 0x03AC: ch = 0x9B; break;
+ case 0x03AD: ch = 0x9D; break;
+ case 0x03AE: ch = 0x9E; break;
+ case 0x03AF: ch = 0x9F; break;
+ case 0x03B0: ch = 0xFC; break;
+ case 0x03B1: ch = 0xD6; break;
+ case 0x03B2: ch = 0xD7; break;
+ case 0x03B3: ch = 0xD8; break;
+ case 0x03B4: ch = 0xDD; break;
+ case 0x03B5: ch = 0xDE; break;
+ case 0x03B6:
+ case 0x03B7:
+ case 0x03B8:
+ case 0x03B9:
+ case 0x03BA:
+ case 0x03BB:
+ case 0x03BC:
+ case 0x03BD:
+ case 0x03BE:
+ case 0x03BF:
+ case 0x03C0:
+ case 0x03C1:
+ ch -= 0x02D6;
+ break;
+ case 0x03C2: ch = 0xED; break;
+ case 0x03C3: ch = 0xEC; break;
+ case 0x03C4: ch = 0xEE; break;
+ case 0x03C5: ch = 0xF2; break;
+ case 0x03C6: ch = 0xF3; break;
+ case 0x03C7: ch = 0xF4; break;
+ case 0x03C8: ch = 0xF6; break;
+ case 0x03C9: ch = 0xFA; break;
+ case 0x03CA: ch = 0xA0; break;
+ case 0x03CB: ch = 0xFB; break;
+ case 0x03CC: ch = 0xA2; break;
+ case 0x03CD: ch = 0xA3; break;
+ case 0x03CE: ch = 0xFD; break;
+ case 0x03D5: ch = 0xF3; break;
+ case 0x2015: ch = 0x8E; break;
+ case 0x2018: ch = 0x8B; break;
+ case 0x2019: ch = 0x8C; break;
+ case 0x2022: ch = 0x07; break;
+ case 0x203C: ch = 0x13; break;
+ case 0x2190: ch = 0x1B; break;
+ case 0x2191: ch = 0x18; break;
+ case 0x2192: ch = 0x1A; break;
+ case 0x2193: ch = 0x19; break;
+ case 0x2194: ch = 0x1D; break;
+ case 0x2195: ch = 0x12; break;
+ case 0x21A8: ch = 0x17; break;
+ case 0x221F: ch = 0x1C; break;
+ case 0x2302: ch = 0x7F; break;
+ case 0x2500: ch = 0xC4; break;
+ case 0x2502: ch = 0xB3; break;
+ case 0x250C: ch = 0xDA; break;
+ case 0x2510: ch = 0xBF; break;
+ case 0x2514: ch = 0xC0; break;
+ case 0x2518: ch = 0xD9; break;
+ case 0x251C: ch = 0xC3; break;
+ case 0x2524: ch = 0xB4; break;
+ case 0x252C: ch = 0xC2; break;
+ case 0x2534: ch = 0xC1; break;
+ case 0x253C: ch = 0xC5; break;
+ case 0x2550: ch = 0xCD; break;
+ case 0x2551: ch = 0xBA; break;
+ case 0x2554: ch = 0xC9; break;
+ case 0x2557: ch = 0xBB; break;
+ case 0x255A: ch = 0xC8; break;
+ case 0x255D: ch = 0xBC; break;
+ case 0x2560: ch = 0xCC; break;
+ case 0x2563: ch = 0xB9; break;
+ case 0x2566: ch = 0xCB; break;
+ case 0x2569: ch = 0xCA; break;
+ case 0x256C: ch = 0xCE; break;
+ case 0x2580: ch = 0xDF; break;
+ case 0x2584: ch = 0xDC; break;
+ case 0x2588: ch = 0xDB; break;
+ case 0x2591: ch = 0xB0; break;
+ case 0x2592: ch = 0xB1; break;
+ case 0x2593: ch = 0xB2; break;
+ case 0x25A0: ch = 0xFE; break;
+ case 0x25AC: ch = 0x16; break;
+ case 0x25B2: ch = 0x1E; break;
+ case 0x25BA: ch = 0x10; break;
+ case 0x25BC: ch = 0x1F; break;
+ case 0x25C4: ch = 0x11; break;
+ case 0x25CB: ch = 0x09; break;
+ case 0x25D8: ch = 0x08; break;
+ case 0x25D9: ch = 0x0A; break;
+ case 0x263A: ch = 0x01; break;
+ case 0x263B: ch = 0x02; break;
+ case 0x263C: ch = 0x0F; break;
+ case 0x2640: ch = 0x0C; break;
+ case 0x2642: ch = 0x0B; break;
+ case 0x2660: ch = 0x06; break;
+ case 0x2663: ch = 0x05; break;
+ case 0x2665: ch = 0x03; break;
+ case 0x2666: ch = 0x04; break;
+ case 0x266A: ch = 0x0D; break;
+ case 0x266B: ch = 0x0E; break;
+ case 0xFFE8: ch = 0xB3; break;
+ case 0xFFE9: ch = 0x1B; break;
+ case 0xFFEA: ch = 0x18; break;
+ case 0xFFEB: ch = 0x1A; break;
+ case 0xFFEC: ch = 0x19; break;
+ case 0xFFED: ch = 0xFE; break;
+ case 0xFFEE: ch = 0x09; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 26) switch(ch)
+ {
+ case 0x001B:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x0020:
+ case 0x0021:
+ case 0x0022:
+ case 0x0023:
+ case 0x0024:
+ case 0x0025:
+ case 0x0026:
+ case 0x0027:
+ case 0x0028:
+ case 0x0029:
+ case 0x002A:
+ case 0x002B:
+ case 0x002C:
+ case 0x002D:
+ case 0x002E:
+ case 0x002F:
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ case 0x003A:
+ case 0x003B:
+ case 0x003C:
+ case 0x003D:
+ case 0x003E:
+ case 0x003F:
+ case 0x0040:
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ case 0x005B:
+ case 0x005C:
+ case 0x005D:
+ case 0x005E:
+ case 0x005F:
+ case 0x0060:
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ case 0x007B:
+ case 0x007C:
+ case 0x007D:
+ case 0x007E:
+ break;
+ case 0x001A: ch = 0x7F; break;
+ case 0x001C: ch = 0x1A; break;
+ case 0x007F: ch = 0x1C; break;
+ case 0x00A0: ch = 0xFF; break;
+ case 0x00A3: ch = 0x9C; break;
+ case 0x00A6: ch = 0x8A; break;
+ case 0x00A7: ch = 0xF5; break;
+ case 0x00A8: ch = 0xF9; break;
+ case 0x00A9: ch = 0x97; break;
+ case 0x00AB: ch = 0xAE; break;
+ case 0x00AC: ch = 0x89; break;
+ case 0x00AD: ch = 0xF0; break;
+ case 0x00B0: ch = 0xF8; break;
+ case 0x00B1: ch = 0xF1; break;
+ case 0x00B2: ch = 0x99; break;
+ case 0x00B3: ch = 0x9A; break;
+ case 0x00B4: ch = 0xEF; break;
+ case 0x00B6: ch = 0x14; break;
+ case 0x00B7: ch = 0x88; break;
+ case 0x00BB: ch = 0xAF; break;
+ case 0x00BD: ch = 0xAB; break;
+ case 0x0385: ch = 0xF7; break;
+ case 0x0386: ch = 0x86; break;
+ case 0x0387: ch = 0x88; break;
+ case 0x0388: ch = 0x8D; break;
+ case 0x0389: ch = 0x8F; break;
+ case 0x038A: ch = 0x90; break;
+ case 0x038C: ch = 0x92; break;
+ case 0x038E: ch = 0x95; break;
+ case 0x038F: ch = 0x98; break;
+ case 0x0390: ch = 0xA1; break;
+ case 0x0391:
+ case 0x0392:
+ case 0x0393:
+ case 0x0394:
+ case 0x0395:
+ case 0x0396:
+ case 0x0397:
+ ch -= 0x02ED;
+ break;
+ case 0x0398: ch = 0xAC; break;
+ case 0x0399: ch = 0xAD; break;
+ case 0x039A:
+ case 0x039B:
+ case 0x039C:
+ case 0x039D:
+ ch -= 0x02E5;
+ break;
+ case 0x039E: ch = 0xBD; break;
+ case 0x039F: ch = 0xBE; break;
+ case 0x03A0: ch = 0xC6; break;
+ case 0x03A1: ch = 0xC7; break;
+ case 0x03A3:
+ case 0x03A4:
+ case 0x03A5:
+ case 0x03A6:
+ case 0x03A7:
+ case 0x03A8:
+ case 0x03A9:
+ ch -= 0x02D4;
+ break;
+ case 0x03AA: ch = 0x91; break;
+ case 0x03AB: ch = 0x96; break;
+ case 0x03AC: ch = 0x9B; break;
+ case 0x03AD: ch = 0x9D; break;
+ case 0x03AE: ch = 0x9E; break;
+ case 0x03AF: ch = 0x9F; break;
+ case 0x03B0: ch = 0xFC; break;
+ case 0x03B1: ch = 0xD6; break;
+ case 0x03B2: ch = 0xD7; break;
+ case 0x03B3: ch = 0xD8; break;
+ case 0x03B4: ch = 0xDD; break;
+ case 0x03B5: ch = 0xDE; break;
+ case 0x03B6:
+ case 0x03B7:
+ case 0x03B8:
+ case 0x03B9:
+ case 0x03BA:
+ case 0x03BB:
+ case 0x03BC:
+ case 0x03BD:
+ case 0x03BE:
+ case 0x03BF:
+ case 0x03C0:
+ case 0x03C1:
+ ch -= 0x02D6;
+ break;
+ case 0x03C2: ch = 0xED; break;
+ case 0x03C3: ch = 0xEC; break;
+ case 0x03C4: ch = 0xEE; break;
+ case 0x03C5: ch = 0xF2; break;
+ case 0x03C6: ch = 0xF3; break;
+ case 0x03C7: ch = 0xF4; break;
+ case 0x03C8: ch = 0xF6; break;
+ case 0x03C9: ch = 0xFA; break;
+ case 0x03CA: ch = 0xA0; break;
+ case 0x03CB: ch = 0xFB; break;
+ case 0x03CC: ch = 0xA2; break;
+ case 0x03CD: ch = 0xA3; break;
+ case 0x03CE: ch = 0xFD; break;
+ case 0x03D5: ch = 0xF3; break;
+ case 0x2015: ch = 0x8E; break;
+ case 0x2018: ch = 0x8B; break;
+ case 0x2019: ch = 0x8C; break;
+ case 0x2022: ch = 0x07; break;
+ case 0x203C: ch = 0x13; break;
+ case 0x2190: ch = 0x1B; break;
+ case 0x2191: ch = 0x18; break;
+ case 0x2192: ch = 0x1A; break;
+ case 0x2193: ch = 0x19; break;
+ case 0x2194: ch = 0x1D; break;
+ case 0x2195: ch = 0x12; break;
+ case 0x21A8: ch = 0x17; break;
+ case 0x221F: ch = 0x1C; break;
+ case 0x2302: ch = 0x7F; break;
+ case 0x2500: ch = 0xC4; break;
+ case 0x2502: ch = 0xB3; break;
+ case 0x250C: ch = 0xDA; break;
+ case 0x2510: ch = 0xBF; break;
+ case 0x2514: ch = 0xC0; break;
+ case 0x2518: ch = 0xD9; break;
+ case 0x251C: ch = 0xC3; break;
+ case 0x2524: ch = 0xB4; break;
+ case 0x252C: ch = 0xC2; break;
+ case 0x2534: ch = 0xC1; break;
+ case 0x253C: ch = 0xC5; break;
+ case 0x2550: ch = 0xCD; break;
+ case 0x2551: ch = 0xBA; break;
+ case 0x2554: ch = 0xC9; break;
+ case 0x2557: ch = 0xBB; break;
+ case 0x255A: ch = 0xC8; break;
+ case 0x255D: ch = 0xBC; break;
+ case 0x2560: ch = 0xCC; break;
+ case 0x2563: ch = 0xB9; break;
+ case 0x2566: ch = 0xCB; break;
+ case 0x2569: ch = 0xCA; break;
+ case 0x256C: ch = 0xCE; break;
+ case 0x2580: ch = 0xDF; break;
+ case 0x2584: ch = 0xDC; break;
+ case 0x2588: ch = 0xDB; break;
+ case 0x2591: ch = 0xB0; break;
+ case 0x2592: ch = 0xB1; break;
+ case 0x2593: ch = 0xB2; break;
+ case 0x25A0: ch = 0xFE; break;
+ case 0x25AC: ch = 0x16; break;
+ case 0x25B2: ch = 0x1E; break;
+ case 0x25BA: ch = 0x10; break;
+ case 0x25BC: ch = 0x1F; break;
+ case 0x25C4: ch = 0x11; break;
+ case 0x25CB: ch = 0x09; break;
+ case 0x25D8: ch = 0x08; break;
+ case 0x25D9: ch = 0x0A; break;
+ case 0x263A: ch = 0x01; break;
+ case 0x263B: ch = 0x02; break;
+ case 0x263C: ch = 0x0F; break;
+ case 0x2640: ch = 0x0C; break;
+ case 0x2642: ch = 0x0B; break;
+ case 0x2660: ch = 0x06; break;
+ case 0x2663: ch = 0x05; break;
+ case 0x2665: ch = 0x03; break;
+ case 0x2666: ch = 0x04; break;
+ case 0x266A: ch = 0x0D; break;
+ case 0x266B: ch = 0x0E; break;
+ case 0xFFE8: ch = 0xB3; break;
+ case 0xFFE9: ch = 0x1B; break;
+ case 0xFFEA: ch = 0x18; break;
+ case 0xFFEB: ch = 0x1A; break;
+ case 0xFFEC: ch = 0x19; break;
+ case 0xFFED: ch = 0xFE; break;
+ case 0xFFEE: ch = 0x09; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP869
+
+public class ENCibm869 : CP869
+{
+ public ENCibm869() : base() {}
+
+}; // class ENCibm869
+
+}; // namespace I18N.Rare
diff --git a/mcs/class/I18N/Rare/CP870.cs b/mcs/class/I18N/Rare/CP870.cs
new file mode 100644
index 00000000000..2bd8a401db4
--- /dev/null
+++ b/mcs/class/I18N/Rare/CP870.cs
@@ -0,0 +1,895 @@
+/*
+ * CP870.cs - IBM EBCDIC (Latin 2) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-870.ucm".
+
+namespace I18N.Rare
+{
+
+using System;
+using I18N.Common;
+
+public class CP870 : ByteEncoding
+{
+ public CP870()
+ : base(870, ToChars, "IBM EBCDIC (Latin 2)",
+ "ibm870", "ibm870", "ibm870",
+ false, false, false, false, 1250)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u009C', '\u0009',
+ '\u0086', '\u007F', '\u0097', '\u008D', '\u008E', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u009D', '\u0085', '\u0008', '\u0087',
+ '\u0018', '\u0019', '\u0092', '\u008F', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0080', '\u0081', '\u0082', '\u0083',
+ '\u0084', '\u000A', '\u0017', '\u001B', '\u0088', '\u0089',
+ '\u008A', '\u008B', '\u008C', '\u0005', '\u0006', '\u0007',
+ '\u0090', '\u0091', '\u0016', '\u0093', '\u0094', '\u0095',
+ '\u0096', '\u0004', '\u0098', '\u0099', '\u009A', '\u009B',
+ '\u0014', '\u0015', '\u009E', '\u001A', '\u0020', '\u00A0',
+ '\u00E2', '\u00E4', '\u0163', '\u00E1', '\u0103', '\u010D',
+ '\u00E7', '\u0107', '\u005B', '\u002E', '\u003C', '\u0028',
+ '\u002B', '\u0021', '\u0026', '\u00E9', '\u0119', '\u00EB',
+ '\u016F', '\u00ED', '\u00EE', '\u013E', '\u013A', '\u00DF',
+ '\u005D', '\u0024', '\u002A', '\u0029', '\u003B', '\u005E',
+ '\u002D', '\u002F', '\u00C2', '\u00C4', '\u02DD', '\u00C1',
+ '\u0102', '\u010C', '\u00C7', '\u0106', '\u007C', '\u002C',
+ '\u0025', '\u005F', '\u003E', '\u003F', '\u02C7', '\u00C9',
+ '\u0118', '\u00CB', '\u016E', '\u00CD', '\u00CE', '\u013D',
+ '\u0139', '\u0060', '\u003A', '\u0023', '\u0040', '\u0027',
+ '\u003D', '\u0022', '\u02D8', '\u0061', '\u0062', '\u0063',
+ '\u0064', '\u0065', '\u0066', '\u0067', '\u0068', '\u0069',
+ '\u015B', '\u0148', '\u0111', '\u00FD', '\u0159', '\u015F',
+ '\u00B0', '\u006A', '\u006B', '\u006C', '\u006D', '\u006E',
+ '\u006F', '\u0070', '\u0071', '\u0072', '\u0142', '\u0144',
+ '\u0161', '\u00B8', '\u02DB', '\u00A4', '\u0105', '\u007E',
+ '\u0073', '\u0074', '\u0075', '\u0076', '\u0077', '\u0078',
+ '\u0079', '\u007A', '\u015A', '\u0147', '\u0110', '\u00DD',
+ '\u0158', '\u015E', '\u02D9', '\u0104', '\u017C', '\u0162',
+ '\u017B', '\u00A7', '\u017E', '\u017A', '\u017D', '\u0179',
+ '\u0141', '\u0143', '\u0160', '\u00A8', '\u00B4', '\u00D7',
+ '\u007B', '\u0041', '\u0042', '\u0043', '\u0044', '\u0045',
+ '\u0046', '\u0047', '\u0048', '\u0049', '\u00AD', '\u00F4',
+ '\u00F6', '\u0155', '\u00F3', '\u0151', '\u007D', '\u004A',
+ '\u004B', '\u004C', '\u004D', '\u004E', '\u004F', '\u0050',
+ '\u0051', '\u0052', '\u011A', '\u0171', '\u00FC', '\u0165',
+ '\u00FA', '\u011B', '\u005C', '\u00F7', '\u0053', '\u0054',
+ '\u0055', '\u0056', '\u0057', '\u0058', '\u0059', '\u005A',
+ '\u010F', '\u00D4', '\u00D6', '\u0154', '\u00D3', '\u0150',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u010E', '\u0170',
+ '\u00DC', '\u0164', '\u00DA', '\u009F',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x4F; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0x7B; break;
+ case 0x0024: ch = 0x5B; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0x7C; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0x4A; break;
+ case 0x005C: ch = 0xE0; break;
+ case 0x005D: ch = 0x5A; break;
+ case 0x005E: ch = 0x5F; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0x79; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0xC0; break;
+ case 0x007C: ch = 0x6A; break;
+ case 0x007D: ch = 0xD0; break;
+ case 0x007E: ch = 0xA1; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A4: ch = 0x9F; break;
+ case 0x00A7: ch = 0xB5; break;
+ case 0x00A8: ch = 0xBD; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00B0: ch = 0x90; break;
+ case 0x00B4: ch = 0xBE; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00C1: ch = 0x65; break;
+ case 0x00C2: ch = 0x62; break;
+ case 0x00C4: ch = 0x63; break;
+ case 0x00C7: ch = 0x68; break;
+ case 0x00C9: ch = 0x71; break;
+ case 0x00CB: ch = 0x73; break;
+ case 0x00CD: ch = 0x75; break;
+ case 0x00CE: ch = 0x76; break;
+ case 0x00D0: ch = 0xAC; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEB; break;
+ case 0x00D6: ch = 0xEC; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00DA: ch = 0xFE; break;
+ case 0x00DC: ch = 0xFC; break;
+ case 0x00DD: ch = 0xAD; break;
+ case 0x00DF: ch = 0x59; break;
+ case 0x00E1: ch = 0x45; break;
+ case 0x00E2: ch = 0x42; break;
+ case 0x00E4: ch = 0x43; break;
+ case 0x00E7: ch = 0x48; break;
+ case 0x00E9: ch = 0x51; break;
+ case 0x00EB: ch = 0x53; break;
+ case 0x00ED: ch = 0x55; break;
+ case 0x00EE: ch = 0x56; break;
+ case 0x00F3: ch = 0xCE; break;
+ case 0x00F4: ch = 0xCB; break;
+ case 0x00F6: ch = 0xCC; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x00FA: ch = 0xDE; break;
+ case 0x00FC: ch = 0xDC; break;
+ case 0x00FD: ch = 0x8D; break;
+ case 0x0102: ch = 0x66; break;
+ case 0x0103: ch = 0x46; break;
+ case 0x0104: ch = 0xB1; break;
+ case 0x0105: ch = 0xA0; break;
+ case 0x0106: ch = 0x69; break;
+ case 0x0107: ch = 0x49; break;
+ case 0x010C: ch = 0x67; break;
+ case 0x010D: ch = 0x47; break;
+ case 0x010E: ch = 0xFA; break;
+ case 0x010F: ch = 0xEA; break;
+ case 0x0110: ch = 0xAC; break;
+ case 0x0111: ch = 0x8C; break;
+ case 0x0118: ch = 0x72; break;
+ case 0x0119: ch = 0x52; break;
+ case 0x011A: ch = 0xDA; break;
+ case 0x011B: ch = 0xDF; break;
+ case 0x0139: ch = 0x78; break;
+ case 0x013A: ch = 0x58; break;
+ case 0x013D: ch = 0x77; break;
+ case 0x013E: ch = 0x57; break;
+ case 0x0141: ch = 0xBA; break;
+ case 0x0142: ch = 0x9A; break;
+ case 0x0143: ch = 0xBB; break;
+ case 0x0144: ch = 0x9B; break;
+ case 0x0147: ch = 0xAB; break;
+ case 0x0148: ch = 0x8B; break;
+ case 0x0150: ch = 0xEF; break;
+ case 0x0151: ch = 0xCF; break;
+ case 0x0154: ch = 0xED; break;
+ case 0x0155: ch = 0xCD; break;
+ case 0x0158: ch = 0xAE; break;
+ case 0x0159: ch = 0x8E; break;
+ case 0x015A: ch = 0xAA; break;
+ case 0x015B: ch = 0x8A; break;
+ case 0x015E: ch = 0xAF; break;
+ case 0x015F: ch = 0x8F; break;
+ case 0x0160: ch = 0xBC; break;
+ case 0x0161: ch = 0x9C; break;
+ case 0x0162: ch = 0xB3; break;
+ case 0x0163: ch = 0x44; break;
+ case 0x0164: ch = 0xFD; break;
+ case 0x0165: ch = 0xDD; break;
+ case 0x016E: ch = 0x74; break;
+ case 0x016F: ch = 0x54; break;
+ case 0x0170: ch = 0xFB; break;
+ case 0x0171: ch = 0xDB; break;
+ case 0x0179: ch = 0xB9; break;
+ case 0x017A: ch = 0xB7; break;
+ case 0x017B: ch = 0xB4; break;
+ case 0x017C: ch = 0xB2; break;
+ case 0x017D: ch = 0xB8; break;
+ case 0x017E: ch = 0xB6; break;
+ case 0x02C7: ch = 0x70; break;
+ case 0x02D8: ch = 0x80; break;
+ case 0x02D9: ch = 0xB0; break;
+ case 0x02DB: ch = 0x9E; break;
+ case 0x02DD: ch = 0x64; break;
+ case 0xFF01: ch = 0x4F; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0x7B; break;
+ case 0xFF04: ch = 0x5B; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0x7C; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0x4A; break;
+ case 0xFF3C: ch = 0xE0; break;
+ case 0xFF3D: ch = 0x5A; break;
+ case 0xFF3E: ch = 0x5F; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0x79; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0xC0; break;
+ case 0xFF5C: ch = 0x6A; break;
+ case 0xFF5D: ch = 0xD0; break;
+ case 0xFF5E: ch = 0xA1; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x4F; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0x7B; break;
+ case 0x0024: ch = 0x5B; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0x7C; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0x4A; break;
+ case 0x005C: ch = 0xE0; break;
+ case 0x005D: ch = 0x5A; break;
+ case 0x005E: ch = 0x5F; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0x79; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0xC0; break;
+ case 0x007C: ch = 0x6A; break;
+ case 0x007D: ch = 0xD0; break;
+ case 0x007E: ch = 0xA1; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x41; break;
+ case 0x00A4: ch = 0x9F; break;
+ case 0x00A7: ch = 0xB5; break;
+ case 0x00A8: ch = 0xBD; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00B0: ch = 0x90; break;
+ case 0x00B4: ch = 0xBE; break;
+ case 0x00B8: ch = 0x9D; break;
+ case 0x00C1: ch = 0x65; break;
+ case 0x00C2: ch = 0x62; break;
+ case 0x00C4: ch = 0x63; break;
+ case 0x00C7: ch = 0x68; break;
+ case 0x00C9: ch = 0x71; break;
+ case 0x00CB: ch = 0x73; break;
+ case 0x00CD: ch = 0x75; break;
+ case 0x00CE: ch = 0x76; break;
+ case 0x00D0: ch = 0xAC; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEB; break;
+ case 0x00D6: ch = 0xEC; break;
+ case 0x00D7: ch = 0xBF; break;
+ case 0x00DA: ch = 0xFE; break;
+ case 0x00DC: ch = 0xFC; break;
+ case 0x00DD: ch = 0xAD; break;
+ case 0x00DF: ch = 0x59; break;
+ case 0x00E1: ch = 0x45; break;
+ case 0x00E2: ch = 0x42; break;
+ case 0x00E4: ch = 0x43; break;
+ case 0x00E7: ch = 0x48; break;
+ case 0x00E9: ch = 0x51; break;
+ case 0x00EB: ch = 0x53; break;
+ case 0x00ED: ch = 0x55; break;
+ case 0x00EE: ch = 0x56; break;
+ case 0x00F3: ch = 0xCE; break;
+ case 0x00F4: ch = 0xCB; break;
+ case 0x00F6: ch = 0xCC; break;
+ case 0x00F7: ch = 0xE1; break;
+ case 0x00FA: ch = 0xDE; break;
+ case 0x00FC: ch = 0xDC; break;
+ case 0x00FD: ch = 0x8D; break;
+ case 0x0102: ch = 0x66; break;
+ case 0x0103: ch = 0x46; break;
+ case 0x0104: ch = 0xB1; break;
+ case 0x0105: ch = 0xA0; break;
+ case 0x0106: ch = 0x69; break;
+ case 0x0107: ch = 0x49; break;
+ case 0x010C: ch = 0x67; break;
+ case 0x010D: ch = 0x47; break;
+ case 0x010E: ch = 0xFA; break;
+ case 0x010F: ch = 0xEA; break;
+ case 0x0110: ch = 0xAC; break;
+ case 0x0111: ch = 0x8C; break;
+ case 0x0118: ch = 0x72; break;
+ case 0x0119: ch = 0x52; break;
+ case 0x011A: ch = 0xDA; break;
+ case 0x011B: ch = 0xDF; break;
+ case 0x0139: ch = 0x78; break;
+ case 0x013A: ch = 0x58; break;
+ case 0x013D: ch = 0x77; break;
+ case 0x013E: ch = 0x57; break;
+ case 0x0141: ch = 0xBA; break;
+ case 0x0142: ch = 0x9A; break;
+ case 0x0143: ch = 0xBB; break;
+ case 0x0144: ch = 0x9B; break;
+ case 0x0147: ch = 0xAB; break;
+ case 0x0148: ch = 0x8B; break;
+ case 0x0150: ch = 0xEF; break;
+ case 0x0151: ch = 0xCF; break;
+ case 0x0154: ch = 0xED; break;
+ case 0x0155: ch = 0xCD; break;
+ case 0x0158: ch = 0xAE; break;
+ case 0x0159: ch = 0x8E; break;
+ case 0x015A: ch = 0xAA; break;
+ case 0x015B: ch = 0x8A; break;
+ case 0x015E: ch = 0xAF; break;
+ case 0x015F: ch = 0x8F; break;
+ case 0x0160: ch = 0xBC; break;
+ case 0x0161: ch = 0x9C; break;
+ case 0x0162: ch = 0xB3; break;
+ case 0x0163: ch = 0x44; break;
+ case 0x0164: ch = 0xFD; break;
+ case 0x0165: ch = 0xDD; break;
+ case 0x016E: ch = 0x74; break;
+ case 0x016F: ch = 0x54; break;
+ case 0x0170: ch = 0xFB; break;
+ case 0x0171: ch = 0xDB; break;
+ case 0x0179: ch = 0xB9; break;
+ case 0x017A: ch = 0xB7; break;
+ case 0x017B: ch = 0xB4; break;
+ case 0x017C: ch = 0xB2; break;
+ case 0x017D: ch = 0xB8; break;
+ case 0x017E: ch = 0xB6; break;
+ case 0x02C7: ch = 0x70; break;
+ case 0x02D8: ch = 0x80; break;
+ case 0x02D9: ch = 0xB0; break;
+ case 0x02DB: ch = 0x9E; break;
+ case 0x02DD: ch = 0x64; break;
+ case 0xFF01: ch = 0x4F; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0x7B; break;
+ case 0xFF04: ch = 0x5B; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0x7C; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0x4A; break;
+ case 0xFF3C: ch = 0xE0; break;
+ case 0xFF3D: ch = 0x5A; break;
+ case 0xFF3E: ch = 0x5F; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0x79; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0xC0; break;
+ case 0xFF5C: ch = 0x6A; break;
+ case 0xFF5D: ch = 0xD0; break;
+ case 0xFF5E: ch = 0xA1; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP870
+
+public class ENCibm870 : CP870
+{
+ public ENCibm870() : base() {}
+
+}; // class ENCibm870
+
+}; // namespace I18N.Rare
diff --git a/mcs/class/I18N/Rare/CP875.cs b/mcs/class/I18N/Rare/CP875.cs
new file mode 100644
index 00000000000..7b3d7b64045
--- /dev/null
+++ b/mcs/class/I18N/Rare/CP875.cs
@@ -0,0 +1,913 @@
+/*
+ * CP875.cs - IBM EBCDIC (Greek) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-875.ucm".
+
+namespace I18N.Rare
+{
+
+using System;
+using I18N.Common;
+
+public class CP875 : ByteEncoding
+{
+ public CP875()
+ : base(875, ToChars, "IBM EBCDIC (Greek)",
+ "ibm875", "ibm875", "ibm875",
+ false, false, false, false, 1253)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u009C', '\u0009',
+ '\u0086', '\u007F', '\u0097', '\u008D', '\u008E', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u009D', '\u0085', '\u0008', '\u0087',
+ '\u0018', '\u0019', '\u0092', '\u008F', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0080', '\u0081', '\u0082', '\u0083',
+ '\u0084', '\u000A', '\u0017', '\u001B', '\u0088', '\u0089',
+ '\u008A', '\u008B', '\u008C', '\u0005', '\u0006', '\u0007',
+ '\u0090', '\u0091', '\u0016', '\u0093', '\u0094', '\u0095',
+ '\u0096', '\u0004', '\u0098', '\u0099', '\u009A', '\u009B',
+ '\u0014', '\u0015', '\u009E', '\u001A', '\u0020', '\u0391',
+ '\u0392', '\u0393', '\u0394', '\u0395', '\u0396', '\u0397',
+ '\u0398', '\u0399', '\u005B', '\u002E', '\u003C', '\u0028',
+ '\u002B', '\u0021', '\u0026', '\u039A', '\u039B', '\u039C',
+ '\u039D', '\u039E', '\u039F', '\u03A0', '\u03A1', '\u03A3',
+ '\u005D', '\u0024', '\u002A', '\u0029', '\u003B', '\u005E',
+ '\u002D', '\u002F', '\u03A4', '\u03A5', '\u03A6', '\u03A7',
+ '\u03A8', '\u03A9', '\u03AA', '\u03AB', '\u007C', '\u002C',
+ '\u0025', '\u005F', '\u003E', '\u003F', '\u00A8', '\u0386',
+ '\u0388', '\u0389', '\u00A0', '\u038A', '\u038C', '\u038E',
+ '\u038F', '\u0060', '\u003A', '\u0023', '\u0040', '\u0027',
+ '\u003D', '\u0022', '\u0385', '\u0061', '\u0062', '\u0063',
+ '\u0064', '\u0065', '\u0066', '\u0067', '\u0068', '\u0069',
+ '\u03B1', '\u03B2', '\u03B3', '\u03B4', '\u03B5', '\u03B6',
+ '\u00B0', '\u006A', '\u006B', '\u006C', '\u006D', '\u006E',
+ '\u006F', '\u0070', '\u0071', '\u0072', '\u03B7', '\u03B8',
+ '\u03B9', '\u03BA', '\u03BB', '\u03BC', '\u00B4', '\u007E',
+ '\u0073', '\u0074', '\u0075', '\u0076', '\u0077', '\u0078',
+ '\u0079', '\u007A', '\u03BD', '\u03BE', '\u03BF', '\u03C0',
+ '\u03C1', '\u03C3', '\u00A3', '\u03AC', '\u03AD', '\u03AE',
+ '\u03CA', '\u03AF', '\u03CC', '\u03CD', '\u03CB', '\u03CE',
+ '\u03C2', '\u03C4', '\u03C5', '\u03C6', '\u03C7', '\u03C8',
+ '\u007B', '\u0041', '\u0042', '\u0043', '\u0044', '\u0045',
+ '\u0046', '\u0047', '\u0048', '\u0049', '\u00AD', '\u03C9',
+ '\u0390', '\u03B0', '\u2018', '\u2015', '\u007D', '\u004A',
+ '\u004B', '\u004C', '\u004D', '\u004E', '\u004F', '\u0050',
+ '\u0051', '\u0052', '\u00B1', '\u00BD', '\u003F', '\u0387',
+ '\u2019', '\u00A6', '\u005C', '\u003F', '\u0053', '\u0054',
+ '\u0055', '\u0056', '\u0057', '\u0058', '\u0059', '\u005A',
+ '\u00B2', '\u00A7', '\u003F', '\u003F', '\u00AB', '\u00AC',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u00B3', '\u00A9',
+ '\u003F', '\u003F', '\u00BB', '\u009F',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x4F; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0x7B; break;
+ case 0x0024: ch = 0x5B; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0x7C; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0x4A; break;
+ case 0x005C: ch = 0xE0; break;
+ case 0x005D: ch = 0x5A; break;
+ case 0x005E: ch = 0x5F; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0x79; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0xC0; break;
+ case 0x007C: ch = 0x6A; break;
+ case 0x007D: ch = 0xD0; break;
+ case 0x007E: ch = 0xA1; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x74; break;
+ case 0x00A3: ch = 0xB0; break;
+ case 0x00A6: ch = 0xDF; break;
+ case 0x00A7: ch = 0xEB; break;
+ case 0x00A8: ch = 0x70; break;
+ case 0x00A9: ch = 0xFB; break;
+ case 0x00AB: ch = 0xEE; break;
+ case 0x00AC: ch = 0xEF; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00B0: ch = 0x90; break;
+ case 0x00B1: ch = 0xDA; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xA0; break;
+ case 0x00B7: ch = 0xDD; break;
+ case 0x00BB: ch = 0xFE; break;
+ case 0x00BD: ch = 0xDB; break;
+ case 0x0385: ch = 0x80; break;
+ case 0x0386: ch = 0x71; break;
+ case 0x0387: ch = 0xDD; break;
+ case 0x0388: ch = 0x72; break;
+ case 0x0389: ch = 0x73; break;
+ case 0x038A: ch = 0x75; break;
+ case 0x038C: ch = 0x76; break;
+ case 0x038E: ch = 0x77; break;
+ case 0x038F: ch = 0x78; break;
+ case 0x0390: ch = 0xCC; break;
+ case 0x0391:
+ case 0x0392:
+ case 0x0393:
+ case 0x0394:
+ case 0x0395:
+ case 0x0396:
+ case 0x0397:
+ case 0x0398:
+ case 0x0399:
+ ch -= 0x0350;
+ break;
+ case 0x039A:
+ case 0x039B:
+ case 0x039C:
+ case 0x039D:
+ case 0x039E:
+ case 0x039F:
+ case 0x03A0:
+ case 0x03A1:
+ ch -= 0x0349;
+ break;
+ case 0x03A3: ch = 0x59; break;
+ case 0x03A4:
+ case 0x03A5:
+ case 0x03A6:
+ case 0x03A7:
+ case 0x03A8:
+ case 0x03A9:
+ case 0x03AA:
+ case 0x03AB:
+ ch -= 0x0342;
+ break;
+ case 0x03AC: ch = 0xB1; break;
+ case 0x03AD: ch = 0xB2; break;
+ case 0x03AE: ch = 0xB3; break;
+ case 0x03AF: ch = 0xB5; break;
+ case 0x03B0: ch = 0xCD; break;
+ case 0x03B1:
+ case 0x03B2:
+ case 0x03B3:
+ case 0x03B4:
+ case 0x03B5:
+ case 0x03B6:
+ ch -= 0x0327;
+ break;
+ case 0x03B7:
+ case 0x03B8:
+ case 0x03B9:
+ case 0x03BA:
+ case 0x03BB:
+ case 0x03BC:
+ ch -= 0x031D;
+ break;
+ case 0x03BD:
+ case 0x03BE:
+ case 0x03BF:
+ case 0x03C0:
+ case 0x03C1:
+ ch -= 0x0313;
+ break;
+ case 0x03C2: ch = 0xBA; break;
+ case 0x03C3: ch = 0xAF; break;
+ case 0x03C4:
+ case 0x03C5:
+ case 0x03C6:
+ case 0x03C7:
+ case 0x03C8:
+ ch -= 0x0309;
+ break;
+ case 0x03C9: ch = 0xCB; break;
+ case 0x03CA: ch = 0xB4; break;
+ case 0x03CB: ch = 0xB8; break;
+ case 0x03CC: ch = 0xB6; break;
+ case 0x03CD: ch = 0xB7; break;
+ case 0x03CE: ch = 0xB9; break;
+ case 0x03D5: ch = 0xBD; break;
+ case 0x2015: ch = 0xCF; break;
+ case 0x2018: ch = 0xCE; break;
+ case 0x2019: ch = 0xDE; break;
+ case 0xFF01: ch = 0x4F; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0x7B; break;
+ case 0xFF04: ch = 0x5B; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0x7C; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0x4A; break;
+ case 0xFF3C: ch = 0xE0; break;
+ case 0xFF3D: ch = 0x5A; break;
+ case 0xFF3E: ch = 0x5F; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0x79; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0xC0; break;
+ case 0xFF5C: ch = 0x6A; break;
+ case 0xFF5D: ch = 0xD0; break;
+ case 0xFF5E: ch = 0xA1; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 4) switch(ch)
+ {
+ case 0x000B:
+ case 0x000C:
+ case 0x000D:
+ case 0x000E:
+ case 0x000F:
+ case 0x0010:
+ case 0x0011:
+ case 0x0012:
+ case 0x0013:
+ case 0x0018:
+ case 0x0019:
+ case 0x001C:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ break;
+ case 0x0004: ch = 0x37; break;
+ case 0x0005: ch = 0x2D; break;
+ case 0x0006: ch = 0x2E; break;
+ case 0x0007: ch = 0x2F; break;
+ case 0x0008: ch = 0x16; break;
+ case 0x0009: ch = 0x05; break;
+ case 0x000A: ch = 0x25; break;
+ case 0x0014: ch = 0x3C; break;
+ case 0x0015: ch = 0x3D; break;
+ case 0x0016: ch = 0x32; break;
+ case 0x0017: ch = 0x26; break;
+ case 0x001A: ch = 0x3F; break;
+ case 0x001B: ch = 0x27; break;
+ case 0x0020: ch = 0x40; break;
+ case 0x0021: ch = 0x4F; break;
+ case 0x0022: ch = 0x7F; break;
+ case 0x0023: ch = 0x7B; break;
+ case 0x0024: ch = 0x5B; break;
+ case 0x0025: ch = 0x6C; break;
+ case 0x0026: ch = 0x50; break;
+ case 0x0027: ch = 0x7D; break;
+ case 0x0028: ch = 0x4D; break;
+ case 0x0029: ch = 0x5D; break;
+ case 0x002A: ch = 0x5C; break;
+ case 0x002B: ch = 0x4E; break;
+ case 0x002C: ch = 0x6B; break;
+ case 0x002D: ch = 0x60; break;
+ case 0x002E: ch = 0x4B; break;
+ case 0x002F: ch = 0x61; break;
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ ch += 0x00C0;
+ break;
+ case 0x003A: ch = 0x7A; break;
+ case 0x003B: ch = 0x5E; break;
+ case 0x003C: ch = 0x4C; break;
+ case 0x003D: ch = 0x7E; break;
+ case 0x003E: ch = 0x6E; break;
+ case 0x003F: ch = 0x6F; break;
+ case 0x0040: ch = 0x7C; break;
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ ch += 0x0080;
+ break;
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ ch += 0x0087;
+ break;
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ ch += 0x008F;
+ break;
+ case 0x005B: ch = 0x4A; break;
+ case 0x005C: ch = 0xE0; break;
+ case 0x005D: ch = 0x5A; break;
+ case 0x005E: ch = 0x5F; break;
+ case 0x005F: ch = 0x6D; break;
+ case 0x0060: ch = 0x79; break;
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ ch += 0x0020;
+ break;
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ ch += 0x0027;
+ break;
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ ch += 0x002F;
+ break;
+ case 0x007B: ch = 0xC0; break;
+ case 0x007C: ch = 0x6A; break;
+ case 0x007D: ch = 0xD0; break;
+ case 0x007E: ch = 0xA1; break;
+ case 0x007F: ch = 0x07; break;
+ case 0x0080:
+ case 0x0081:
+ case 0x0082:
+ case 0x0083:
+ case 0x0084:
+ ch -= 0x0060;
+ break;
+ case 0x0085: ch = 0x15; break;
+ case 0x0086: ch = 0x06; break;
+ case 0x0087: ch = 0x17; break;
+ case 0x0088:
+ case 0x0089:
+ case 0x008A:
+ case 0x008B:
+ case 0x008C:
+ ch -= 0x0060;
+ break;
+ case 0x008D: ch = 0x09; break;
+ case 0x008E: ch = 0x0A; break;
+ case 0x008F: ch = 0x1B; break;
+ case 0x0090: ch = 0x30; break;
+ case 0x0091: ch = 0x31; break;
+ case 0x0092: ch = 0x1A; break;
+ case 0x0093:
+ case 0x0094:
+ case 0x0095:
+ case 0x0096:
+ ch -= 0x0060;
+ break;
+ case 0x0097: ch = 0x08; break;
+ case 0x0098:
+ case 0x0099:
+ case 0x009A:
+ case 0x009B:
+ ch -= 0x0060;
+ break;
+ case 0x009C: ch = 0x04; break;
+ case 0x009D: ch = 0x14; break;
+ case 0x009E: ch = 0x3E; break;
+ case 0x009F: ch = 0xFF; break;
+ case 0x00A0: ch = 0x74; break;
+ case 0x00A3: ch = 0xB0; break;
+ case 0x00A6: ch = 0xDF; break;
+ case 0x00A7: ch = 0xEB; break;
+ case 0x00A8: ch = 0x70; break;
+ case 0x00A9: ch = 0xFB; break;
+ case 0x00AB: ch = 0xEE; break;
+ case 0x00AC: ch = 0xEF; break;
+ case 0x00AD: ch = 0xCA; break;
+ case 0x00B0: ch = 0x90; break;
+ case 0x00B1: ch = 0xDA; break;
+ case 0x00B2: ch = 0xEA; break;
+ case 0x00B3: ch = 0xFA; break;
+ case 0x00B4: ch = 0xA0; break;
+ case 0x00B7: ch = 0xDD; break;
+ case 0x00BB: ch = 0xFE; break;
+ case 0x00BD: ch = 0xDB; break;
+ case 0x0385: ch = 0x80; break;
+ case 0x0386: ch = 0x71; break;
+ case 0x0387: ch = 0xDD; break;
+ case 0x0388: ch = 0x72; break;
+ case 0x0389: ch = 0x73; break;
+ case 0x038A: ch = 0x75; break;
+ case 0x038C: ch = 0x76; break;
+ case 0x038E: ch = 0x77; break;
+ case 0x038F: ch = 0x78; break;
+ case 0x0390: ch = 0xCC; break;
+ case 0x0391:
+ case 0x0392:
+ case 0x0393:
+ case 0x0394:
+ case 0x0395:
+ case 0x0396:
+ case 0x0397:
+ case 0x0398:
+ case 0x0399:
+ ch -= 0x0350;
+ break;
+ case 0x039A:
+ case 0x039B:
+ case 0x039C:
+ case 0x039D:
+ case 0x039E:
+ case 0x039F:
+ case 0x03A0:
+ case 0x03A1:
+ ch -= 0x0349;
+ break;
+ case 0x03A3: ch = 0x59; break;
+ case 0x03A4:
+ case 0x03A5:
+ case 0x03A6:
+ case 0x03A7:
+ case 0x03A8:
+ case 0x03A9:
+ case 0x03AA:
+ case 0x03AB:
+ ch -= 0x0342;
+ break;
+ case 0x03AC: ch = 0xB1; break;
+ case 0x03AD: ch = 0xB2; break;
+ case 0x03AE: ch = 0xB3; break;
+ case 0x03AF: ch = 0xB5; break;
+ case 0x03B0: ch = 0xCD; break;
+ case 0x03B1:
+ case 0x03B2:
+ case 0x03B3:
+ case 0x03B4:
+ case 0x03B5:
+ case 0x03B6:
+ ch -= 0x0327;
+ break;
+ case 0x03B7:
+ case 0x03B8:
+ case 0x03B9:
+ case 0x03BA:
+ case 0x03BB:
+ case 0x03BC:
+ ch -= 0x031D;
+ break;
+ case 0x03BD:
+ case 0x03BE:
+ case 0x03BF:
+ case 0x03C0:
+ case 0x03C1:
+ ch -= 0x0313;
+ break;
+ case 0x03C2: ch = 0xBA; break;
+ case 0x03C3: ch = 0xAF; break;
+ case 0x03C4:
+ case 0x03C5:
+ case 0x03C6:
+ case 0x03C7:
+ case 0x03C8:
+ ch -= 0x0309;
+ break;
+ case 0x03C9: ch = 0xCB; break;
+ case 0x03CA: ch = 0xB4; break;
+ case 0x03CB: ch = 0xB8; break;
+ case 0x03CC: ch = 0xB6; break;
+ case 0x03CD: ch = 0xB7; break;
+ case 0x03CE: ch = 0xB9; break;
+ case 0x03D5: ch = 0xBD; break;
+ case 0x2015: ch = 0xCF; break;
+ case 0x2018: ch = 0xCE; break;
+ case 0x2019: ch = 0xDE; break;
+ case 0xFF01: ch = 0x4F; break;
+ case 0xFF02: ch = 0x7F; break;
+ case 0xFF03: ch = 0x7B; break;
+ case 0xFF04: ch = 0x5B; break;
+ case 0xFF05: ch = 0x6C; break;
+ case 0xFF06: ch = 0x50; break;
+ case 0xFF07: ch = 0x7D; break;
+ case 0xFF08: ch = 0x4D; break;
+ case 0xFF09: ch = 0x5D; break;
+ case 0xFF0A: ch = 0x5C; break;
+ case 0xFF0B: ch = 0x4E; break;
+ case 0xFF0C: ch = 0x6B; break;
+ case 0xFF0D: ch = 0x60; break;
+ case 0xFF0E: ch = 0x4B; break;
+ case 0xFF0F: ch = 0x61; break;
+ case 0xFF10:
+ case 0xFF11:
+ case 0xFF12:
+ case 0xFF13:
+ case 0xFF14:
+ case 0xFF15:
+ case 0xFF16:
+ case 0xFF17:
+ case 0xFF18:
+ case 0xFF19:
+ ch -= 0xFE20;
+ break;
+ case 0xFF1A: ch = 0x7A; break;
+ case 0xFF1B: ch = 0x5E; break;
+ case 0xFF1C: ch = 0x4C; break;
+ case 0xFF1D: ch = 0x7E; break;
+ case 0xFF1E: ch = 0x6E; break;
+ case 0xFF1F: ch = 0x6F; break;
+ case 0xFF20: ch = 0x7C; break;
+ case 0xFF21:
+ case 0xFF22:
+ case 0xFF23:
+ case 0xFF24:
+ case 0xFF25:
+ case 0xFF26:
+ case 0xFF27:
+ case 0xFF28:
+ case 0xFF29:
+ ch -= 0xFE60;
+ break;
+ case 0xFF2A:
+ case 0xFF2B:
+ case 0xFF2C:
+ case 0xFF2D:
+ case 0xFF2E:
+ case 0xFF2F:
+ case 0xFF30:
+ case 0xFF31:
+ case 0xFF32:
+ ch -= 0xFE59;
+ break;
+ case 0xFF33:
+ case 0xFF34:
+ case 0xFF35:
+ case 0xFF36:
+ case 0xFF37:
+ case 0xFF38:
+ case 0xFF39:
+ case 0xFF3A:
+ ch -= 0xFE51;
+ break;
+ case 0xFF3B: ch = 0x4A; break;
+ case 0xFF3C: ch = 0xE0; break;
+ case 0xFF3D: ch = 0x5A; break;
+ case 0xFF3E: ch = 0x5F; break;
+ case 0xFF3F: ch = 0x6D; break;
+ case 0xFF40: ch = 0x79; break;
+ case 0xFF41:
+ case 0xFF42:
+ case 0xFF43:
+ case 0xFF44:
+ case 0xFF45:
+ case 0xFF46:
+ case 0xFF47:
+ case 0xFF48:
+ case 0xFF49:
+ ch -= 0xFEC0;
+ break;
+ case 0xFF4A:
+ case 0xFF4B:
+ case 0xFF4C:
+ case 0xFF4D:
+ case 0xFF4E:
+ case 0xFF4F:
+ case 0xFF50:
+ case 0xFF51:
+ case 0xFF52:
+ ch -= 0xFEB9;
+ break;
+ case 0xFF53:
+ case 0xFF54:
+ case 0xFF55:
+ case 0xFF56:
+ case 0xFF57:
+ case 0xFF58:
+ case 0xFF59:
+ case 0xFF5A:
+ ch -= 0xFEB1;
+ break;
+ case 0xFF5B: ch = 0xC0; break;
+ case 0xFF5C: ch = 0x6A; break;
+ case 0xFF5D: ch = 0xD0; break;
+ case 0xFF5E: ch = 0xA1; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP875
+
+public class ENCibm875 : CP875
+{
+ public ENCibm875() : base() {}
+
+}; // class ENCibm875
+
+}; // namespace I18N.Rare
diff --git a/mcs/class/I18N/Rare/ibm-1025.ucm b/mcs/class/I18N/Rare/ibm-1025.ucm
new file mode 100644
index 00000000000..8119517f647
--- /dev/null
+++ b/mcs/class/I18N/Rare/ibm-1025.ucm
@@ -0,0 +1,371 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1995-2001, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created by rptp2ucm (compiled on Feb 23 2001)
+# from source files 34B00401.RPMAP100 and 040134B0.TPMAP100
+#
+<code_set_name> "ibm-1025_P100-2000"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x3F
+<icu:charsetFamily> "EBCDIC"
+<icu:alias> "ibm-1025_STD"
+
+CHARMAP
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x37 |0
+<U0005> \x2D |0
+<U0006> \x2E |0
+<U0007> \x2F |0
+<U0008> \x16 |0
+<U0009> \x05 |0
+<U000A> \x25 |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x3C |0
+<U0015> \x3D |0
+<U0016> \x32 |0
+<U0017> \x26 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x3F |0
+<U001B> \x27 |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x40 |0
+<U0021> \x4F |0
+<U0022> \x7F |0
+<U0023> \x7B |0
+<U0024> \x5B |0
+<U0025> \x6C |0
+<U0026> \x50 |0
+<U0027> \x7D |0
+<U0028> \x4D |0
+<U0029> \x5D |0
+<U002A> \x5C |0
+<U002B> \x4E |0
+<U002C> \x6B |0
+<U002D> \x60 |0
+<U002E> \x4B |0
+<U002F> \x61 |0
+<U0030> \xF0 |0
+<U0031> \xF1 |0
+<U0032> \xF2 |0
+<U0033> \xF3 |0
+<U0034> \xF4 |0
+<U0035> \xF5 |0
+<U0036> \xF6 |0
+<U0037> \xF7 |0
+<U0038> \xF8 |0
+<U0039> \xF9 |0
+<U003A> \x7A |0
+<U003B> \x5E |0
+<U003C> \x4C |0
+<U003D> \x7E |0
+<U003E> \x6E |0
+<U003F> \x6F |0
+<U0040> \x7C |0
+<U0041> \xC1 |0
+<U0042> \xC2 |0
+<U0043> \xC3 |0
+<U0044> \xC4 |0
+<U0045> \xC5 |0
+<U0046> \xC6 |0
+<U0047> \xC7 |0
+<U0048> \xC8 |0
+<U0049> \xC9 |0
+<U004A> \xD1 |0
+<U004B> \xD2 |0
+<U004C> \xD3 |0
+<U004D> \xD4 |0
+<U004E> \xD5 |0
+<U004F> \xD6 |0
+<U0050> \xD7 |0
+<U0051> \xD8 |0
+<U0052> \xD9 |0
+<U0053> \xE2 |0
+<U0054> \xE3 |0
+<U0055> \xE4 |0
+<U0056> \xE5 |0
+<U0057> \xE6 |0
+<U0058> \xE7 |0
+<U0059> \xE8 |0
+<U005A> \xE9 |0
+<U005B> \x4A |0
+<U005C> \xE0 |0
+<U005D> \x5A |0
+<U005E> \x5F |0
+<U005F> \x6D |0
+<U0060> \x79 |0
+<U0061> \x81 |0
+<U0062> \x82 |0
+<U0063> \x83 |0
+<U0064> \x84 |0
+<U0065> \x85 |0
+<U0066> \x86 |0
+<U0067> \x87 |0
+<U0068> \x88 |0
+<U0069> \x89 |0
+<U006A> \x91 |0
+<U006B> \x92 |0
+<U006C> \x93 |0
+<U006D> \x94 |0
+<U006E> \x95 |0
+<U006F> \x96 |0
+<U0070> \x97 |0
+<U0071> \x98 |0
+<U0072> \x99 |0
+<U0073> \xA2 |0
+<U0074> \xA3 |0
+<U0075> \xA4 |0
+<U0076> \xA5 |0
+<U0077> \xA6 |0
+<U0078> \xA7 |0
+<U0079> \xA8 |0
+<U007A> \xA9 |0
+<U007B> \xC0 |0
+<U007C> \x6A |0
+<U007D> \xD0 |0
+<U007E> \xA1 |0
+<U007F> \x07 |0
+<U0080> \x20 |0
+<U0081> \x21 |0
+<U0082> \x22 |0
+<U0083> \x23 |0
+<U0084> \x24 |0
+<U0085> \x15 |0
+<U0086> \x06 |0
+<U0087> \x17 |0
+<U0088> \x28 |0
+<U0089> \x29 |0
+<U008A> \x2A |0
+<U008B> \x2B |0
+<U008C> \x2C |0
+<U008D> \x09 |0
+<U008E> \x0A |0
+<U008F> \x1B |0
+<U0090> \x30 |0
+<U0091> \x31 |0
+<U0092> \x1A |0
+<U0093> \x33 |0
+<U0094> \x34 |0
+<U0095> \x35 |0
+<U0096> \x36 |0
+<U0097> \x08 |0
+<U0098> \x38 |0
+<U0099> \x39 |0
+<U009A> \x3A |0
+<U009B> \x3B |0
+<U009C> \x04 |0
+<U009D> \x14 |0
+<U009E> \x3E |0
+<U009F> \xFF |0
+<U00A0> \x41 |0
+<U00A7> \xE1 |0
+<U00AD> \x73 |0
+<U0401> \x63 |0
+<U0402> \x59 |0
+<U0403> \x62 |0
+<U0404> \x64 |0
+<U0405> \x65 |0
+<U0406> \x66 |0
+<U0407> \x67 |0
+<U0408> \x68 |0
+<U0409> \x69 |0
+<U040A> \x70 |0
+<U040B> \x71 |0
+<U040C> \x72 |0
+<U040E> \x74 |0
+<U040F> \x75 |0
+<U0410> \xB9 |0
+<U0411> \xBA |0
+<U0412> \xED |0
+<U0413> \xBF |0
+<U0414> \xBC |0
+<U0415> \xBD |0
+<U0416> \xEC |0
+<U0417> \xFA |0
+<U0418> \xCB |0
+<U0419> \xCC |0
+<U041A> \xCD |0
+<U041B> \xCE |0
+<U041C> \xCF |0
+<U041D> \xDA |0
+<U041E> \xDB |0
+<U041F> \xDC |0
+<U0420> \xDE |0
+<U0421> \xDF |0
+<U0422> \xEA |0
+<U0423> \xEB |0
+<U0424> \xBE |0
+<U0425> \xCA |0
+<U0426> \xBB |0
+<U0427> \xFE |0
+<U0428> \xFB |0
+<U0429> \xFD |0
+<U042A> \x57 |0
+<U042B> \xEF |0
+<U042C> \xEE |0
+<U042D> \xFC |0
+<U042E> \xB8 |0
+<U042F> \xDD |0
+<U0430> \x77 |0
+<U0431> \x78 |0
+<U0432> \xAF |0
+<U0433> \x8D |0
+<U0434> \x8A |0
+<U0435> \x8B |0
+<U0436> \xAE |0
+<U0437> \xB2 |0
+<U0438> \x8F |0
+<U0439> \x90 |0
+<U043A> \x9A |0
+<U043B> \x9B |0
+<U043C> \x9C |0
+<U043D> \x9D |0
+<U043E> \x9E |0
+<U043F> \x9F |0
+<U0440> \xAA |0
+<U0441> \xAB |0
+<U0442> \xAC |0
+<U0443> \xAD |0
+<U0444> \x8C |0
+<U0445> \x8E |0
+<U0446> \x80 |0
+<U0447> \xB6 |0
+<U0448> \xB3 |0
+<U0449> \xB5 |0
+<U044A> \xB7 |0
+<U044B> \xB1 |0
+<U044C> \xB0 |0
+<U044D> \xB4 |0
+<U044E> \x76 |0
+<U044F> \xA0 |0
+<U0451> \x44 |0
+<U0452> \x42 |0
+<U0453> \x43 |0
+<U0454> \x45 |0
+<U0455> \x46 |0
+<U0456> \x47 |0
+<U0457> \x48 |0
+<U0458> \x49 |0
+<U0459> \x51 |0
+<U045A> \x52 |0
+<U045B> \x53 |0
+<U045C> \x54 |0
+<U045E> \x55 |0
+<U045F> \x56 |0
+<U2116> \x58 |0
+<UFF01> \x4F |1
+<UFF02> \x7F |1
+<UFF03> \x7B |1
+<UFF04> \x5B |1
+<UFF05> \x6C |1
+<UFF06> \x50 |1
+<UFF07> \x7D |1
+<UFF08> \x4D |1
+<UFF09> \x5D |1
+<UFF0A> \x5C |1
+<UFF0B> \x4E |1
+<UFF0C> \x6B |1
+<UFF0D> \x60 |1
+<UFF0E> \x4B |1
+<UFF0F> \x61 |1
+<UFF10> \xF0 |1
+<UFF11> \xF1 |1
+<UFF12> \xF2 |1
+<UFF13> \xF3 |1
+<UFF14> \xF4 |1
+<UFF15> \xF5 |1
+<UFF16> \xF6 |1
+<UFF17> \xF7 |1
+<UFF18> \xF8 |1
+<UFF19> \xF9 |1
+<UFF1A> \x7A |1
+<UFF1B> \x5E |1
+<UFF1C> \x4C |1
+<UFF1D> \x7E |1
+<UFF1E> \x6E |1
+<UFF1F> \x6F |1
+<UFF20> \x7C |1
+<UFF21> \xC1 |1
+<UFF22> \xC2 |1
+<UFF23> \xC3 |1
+<UFF24> \xC4 |1
+<UFF25> \xC5 |1
+<UFF26> \xC6 |1
+<UFF27> \xC7 |1
+<UFF28> \xC8 |1
+<UFF29> \xC9 |1
+<UFF2A> \xD1 |1
+<UFF2B> \xD2 |1
+<UFF2C> \xD3 |1
+<UFF2D> \xD4 |1
+<UFF2E> \xD5 |1
+<UFF2F> \xD6 |1
+<UFF30> \xD7 |1
+<UFF31> \xD8 |1
+<UFF32> \xD9 |1
+<UFF33> \xE2 |1
+<UFF34> \xE3 |1
+<UFF35> \xE4 |1
+<UFF36> \xE5 |1
+<UFF37> \xE6 |1
+<UFF38> \xE7 |1
+<UFF39> \xE8 |1
+<UFF3A> \xE9 |1
+<UFF3B> \x4A |1
+<UFF3C> \xE0 |1
+<UFF3D> \x5A |1
+<UFF3E> \x5F |1
+<UFF3F> \x6D |1
+<UFF40> \x79 |1
+<UFF41> \x81 |1
+<UFF42> \x82 |1
+<UFF43> \x83 |1
+<UFF44> \x84 |1
+<UFF45> \x85 |1
+<UFF46> \x86 |1
+<UFF47> \x87 |1
+<UFF48> \x88 |1
+<UFF49> \x89 |1
+<UFF4A> \x91 |1
+<UFF4B> \x92 |1
+<UFF4C> \x93 |1
+<UFF4D> \x94 |1
+<UFF4E> \x95 |1
+<UFF4F> \x96 |1
+<UFF50> \x97 |1
+<UFF51> \x98 |1
+<UFF52> \x99 |1
+<UFF53> \xA2 |1
+<UFF54> \xA3 |1
+<UFF55> \xA4 |1
+<UFF56> \xA5 |1
+<UFF57> \xA6 |1
+<UFF58> \xA7 |1
+<UFF59> \xA8 |1
+<UFF5A> \xA9 |1
+<UFF5B> \xC0 |1
+<UFF5C> \x6A |1
+<UFF5D> \xD0 |1
+<UFF5E> \xA1 |1
+END CHARMAP
diff --git a/mcs/class/I18N/Rare/ibm-1026.ucm b/mcs/class/I18N/Rare/ibm-1026.ucm
new file mode 100644
index 00000000000..d496f0b09c7
--- /dev/null
+++ b/mcs/class/I18N/Rare/ibm-1026.ucm
@@ -0,0 +1,372 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1995-2001, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created by rptp2ucm (compiled on Feb 23 2001)
+# from source files 34B00402.RPMAP100 and 040234B0.TPMAP100
+#
+<code_set_name> "ibm-1026_P100-2000"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x3F
+<icu:charsetFamily> "EBCDIC"
+<icu:alias> "ibm-1026_STD"
+
+CHARMAP
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x37 |0
+<U0005> \x2D |0
+<U0006> \x2E |0
+<U0007> \x2F |0
+<U0008> \x16 |0
+<U0009> \x05 |0
+<U000A> \x25 |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x3C |0
+<U0015> \x3D |0
+<U0016> \x32 |0
+<U0017> \x26 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x3F |0
+<U001B> \x27 |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x40 |0
+<U0021> \x4F |0
+<U0022> \xFC |0
+<U0023> \xEC |0
+<U0024> \xAD |0
+<U0025> \x6C |0
+<U0026> \x50 |0
+<U0027> \x7D |0
+<U0028> \x4D |0
+<U0029> \x5D |0
+<U002A> \x5C |0
+<U002B> \x4E |0
+<U002C> \x6B |0
+<U002D> \x60 |0
+<U002E> \x4B |0
+<U002F> \x61 |0
+<U0030> \xF0 |0
+<U0031> \xF1 |0
+<U0032> \xF2 |0
+<U0033> \xF3 |0
+<U0034> \xF4 |0
+<U0035> \xF5 |0
+<U0036> \xF6 |0
+<U0037> \xF7 |0
+<U0038> \xF8 |0
+<U0039> \xF9 |0
+<U003A> \x7A |0
+<U003B> \x5E |0
+<U003C> \x4C |0
+<U003D> \x7E |0
+<U003E> \x6E |0
+<U003F> \x6F |0
+<U0040> \xAE |0
+<U0041> \xC1 |0
+<U0042> \xC2 |0
+<U0043> \xC3 |0
+<U0044> \xC4 |0
+<U0045> \xC5 |0
+<U0046> \xC6 |0
+<U0047> \xC7 |0
+<U0048> \xC8 |0
+<U0049> \xC9 |0
+<U004A> \xD1 |0
+<U004B> \xD2 |0
+<U004C> \xD3 |0
+<U004D> \xD4 |0
+<U004E> \xD5 |0
+<U004F> \xD6 |0
+<U0050> \xD7 |0
+<U0051> \xD8 |0
+<U0052> \xD9 |0
+<U0053> \xE2 |0
+<U0054> \xE3 |0
+<U0055> \xE4 |0
+<U0056> \xE5 |0
+<U0057> \xE6 |0
+<U0058> \xE7 |0
+<U0059> \xE8 |0
+<U005A> \xE9 |0
+<U005B> \x68 |0
+<U005C> \xDC |0
+<U005D> \xAC |0
+<U005E> \x5F |0
+<U005F> \x6D |0
+<U0060> \x8D |0
+<U0061> \x81 |0
+<U0062> \x82 |0
+<U0063> \x83 |0
+<U0064> \x84 |0
+<U0065> \x85 |0
+<U0066> \x86 |0
+<U0067> \x87 |0
+<U0068> \x88 |0
+<U0069> \x89 |0
+<U006A> \x91 |0
+<U006B> \x92 |0
+<U006C> \x93 |0
+<U006D> \x94 |0
+<U006E> \x95 |0
+<U006F> \x96 |0
+<U0070> \x97 |0
+<U0071> \x98 |0
+<U0072> \x99 |0
+<U0073> \xA2 |0
+<U0074> \xA3 |0
+<U0075> \xA4 |0
+<U0076> \xA5 |0
+<U0077> \xA6 |0
+<U0078> \xA7 |0
+<U0079> \xA8 |0
+<U007A> \xA9 |0
+<U007B> \x48 |0
+<U007C> \xBB |0
+<U007D> \x8C |0
+<U007E> \xCC |0
+<U007F> \x07 |0
+<U0080> \x20 |0
+<U0081> \x21 |0
+<U0082> \x22 |0
+<U0083> \x23 |0
+<U0084> \x24 |0
+<U0085> \x15 |0
+<U0086> \x06 |0
+<U0087> \x17 |0
+<U0088> \x28 |0
+<U0089> \x29 |0
+<U008A> \x2A |0
+<U008B> \x2B |0
+<U008C> \x2C |0
+<U008D> \x09 |0
+<U008E> \x0A |0
+<U008F> \x1B |0
+<U0090> \x30 |0
+<U0091> \x31 |0
+<U0092> \x1A |0
+<U0093> \x33 |0
+<U0094> \x34 |0
+<U0095> \x35 |0
+<U0096> \x36 |0
+<U0097> \x08 |0
+<U0098> \x38 |0
+<U0099> \x39 |0
+<U009A> \x3A |0
+<U009B> \x3B |0
+<U009C> \x04 |0
+<U009D> \x14 |0
+<U009E> \x3E |0
+<U009F> \xFF |0
+<U00A0> \x41 |0
+<U00A1> \xAA |0
+<U00A2> \xB0 |0
+<U00A3> \xB1 |0
+<U00A4> \x9F |0
+<U00A5> \xB2 |0
+<U00A6> \x8E |0
+<U00A7> \xB5 |0
+<U00A8> \xBD |0
+<U00A9> \xB4 |0
+<U00AA> \x9A |0
+<U00AB> \x8A |0
+<U00AC> \xBA |0
+<U00AD> \xCA |0
+<U00AE> \xAF |0
+<U00AF> \xBC |0
+<U00B0> \x90 |0
+<U00B1> \x8F |0
+<U00B2> \xEA |0
+<U00B3> \xFA |0
+<U00B4> \xBE |0
+<U00B5> \xA0 |0
+<U00B6> \xB6 |0
+<U00B7> \xB3 |0
+<U00B8> \x9D |0
+<U00B9> \xDA |0
+<U00BA> \x9B |0
+<U00BB> \x8B |0
+<U00BC> \xB7 |0
+<U00BD> \xB8 |0
+<U00BE> \xB9 |0
+<U00BF> \xAB |0
+<U00C0> \x64 |0
+<U00C1> \x65 |0
+<U00C2> \x62 |0
+<U00C3> \x66 |0
+<U00C4> \x63 |0
+<U00C5> \x67 |0
+<U00C6> \x9E |0
+<U00C7> \x4A |0
+<U00C8> \x74 |0
+<U00C9> \x71 |0
+<U00CA> \x72 |0
+<U00CB> \x73 |0
+<U00CC> \x78 |0
+<U00CD> \x75 |0
+<U00CE> \x76 |0
+<U00CF> \x77 |0
+<U00D1> \x69 |0
+<U00D2> \xED |0
+<U00D3> \xEE |0
+<U00D4> \xEB |0
+<U00D5> \xEF |0
+<U00D6> \x7B |0
+<U00D7> \xBF |0
+<U00D8> \x80 |0
+<U00D9> \xFD |0
+<U00DA> \xFE |0
+<U00DB> \xFB |0
+<U00DC> \x7F |0
+<U00DF> \x59 |0
+<U00E0> \x44 |0
+<U00E1> \x45 |0
+<U00E2> \x42 |0
+<U00E3> \x46 |0
+<U00E4> \x43 |0
+<U00E5> \x47 |0
+<U00E6> \x9C |0
+<U00E7> \xC0 |0
+<U00E8> \x54 |0
+<U00E9> \x51 |0
+<U00EA> \x52 |0
+<U00EB> \x53 |0
+<U00EC> \x58 |0
+<U00ED> \x55 |0
+<U00EE> \x56 |0
+<U00EF> \x57 |0
+<U00F1> \x49 |0
+<U00F2> \xCD |0
+<U00F3> \xCE |0
+<U00F4> \xCB |0
+<U00F5> \xCF |0
+<U00F6> \xA1 |0
+<U00F7> \xE1 |0
+<U00F8> \x70 |0
+<U00F9> \xDD |0
+<U00FA> \xDE |0
+<U00FB> \xDB |0
+<U00FC> \xE0 |0
+<U00FF> \xDF |0
+<U011E> \x5A |0
+<U011F> \xD0 |0
+<U0130> \x5B |0
+<U0131> \x79 |0
+<U015E> \x7C |0
+<U015F> \x6A |0
+<U203E> \xBC |1
+<UFF01> \x4F |1
+<UFF02> \xFC |1
+<UFF03> \xEC |1
+<UFF04> \xAD |1
+<UFF05> \x6C |1
+<UFF06> \x50 |1
+<UFF07> \x7D |1
+<UFF08> \x4D |1
+<UFF09> \x5D |1
+<UFF0A> \x5C |1
+<UFF0B> \x4E |1
+<UFF0C> \x6B |1
+<UFF0D> \x60 |1
+<UFF0E> \x4B |1
+<UFF0F> \x61 |1
+<UFF10> \xF0 |1
+<UFF11> \xF1 |1
+<UFF12> \xF2 |1
+<UFF13> \xF3 |1
+<UFF14> \xF4 |1
+<UFF15> \xF5 |1
+<UFF16> \xF6 |1
+<UFF17> \xF7 |1
+<UFF18> \xF8 |1
+<UFF19> \xF9 |1
+<UFF1A> \x7A |1
+<UFF1B> \x5E |1
+<UFF1C> \x4C |1
+<UFF1D> \x7E |1
+<UFF1E> \x6E |1
+<UFF1F> \x6F |1
+<UFF20> \xAE |1
+<UFF21> \xC1 |1
+<UFF22> \xC2 |1
+<UFF23> \xC3 |1
+<UFF24> \xC4 |1
+<UFF25> \xC5 |1
+<UFF26> \xC6 |1
+<UFF27> \xC7 |1
+<UFF28> \xC8 |1
+<UFF29> \xC9 |1
+<UFF2A> \xD1 |1
+<UFF2B> \xD2 |1
+<UFF2C> \xD3 |1
+<UFF2D> \xD4 |1
+<UFF2E> \xD5 |1
+<UFF2F> \xD6 |1
+<UFF30> \xD7 |1
+<UFF31> \xD8 |1
+<UFF32> \xD9 |1
+<UFF33> \xE2 |1
+<UFF34> \xE3 |1
+<UFF35> \xE4 |1
+<UFF36> \xE5 |1
+<UFF37> \xE6 |1
+<UFF38> \xE7 |1
+<UFF39> \xE8 |1
+<UFF3A> \xE9 |1
+<UFF3B> \x68 |1
+<UFF3C> \xDC |1
+<UFF3D> \xAC |1
+<UFF3E> \x5F |1
+<UFF3F> \x6D |1
+<UFF40> \x8D |1
+<UFF41> \x81 |1
+<UFF42> \x82 |1
+<UFF43> \x83 |1
+<UFF44> \x84 |1
+<UFF45> \x85 |1
+<UFF46> \x86 |1
+<UFF47> \x87 |1
+<UFF48> \x88 |1
+<UFF49> \x89 |1
+<UFF4A> \x91 |1
+<UFF4B> \x92 |1
+<UFF4C> \x93 |1
+<UFF4D> \x94 |1
+<UFF4E> \x95 |1
+<UFF4F> \x96 |1
+<UFF50> \x97 |1
+<UFF51> \x98 |1
+<UFF52> \x99 |1
+<UFF53> \xA2 |1
+<UFF54> \xA3 |1
+<UFF55> \xA4 |1
+<UFF56> \xA5 |1
+<UFF57> \xA6 |1
+<UFF58> \xA7 |1
+<UFF59> \xA8 |1
+<UFF5A> \xA9 |1
+<UFF5B> \x48 |1
+<UFF5C> \xBB |1
+<UFF5D> \x8C |1
+<UFF5E> \xCC |1
+END CHARMAP
diff --git a/mcs/class/I18N/Rare/ibm-1047.ucm b/mcs/class/I18N/Rare/ibm-1047.ucm
new file mode 100644
index 00000000000..6a71dff1f8d
--- /dev/null
+++ b/mcs/class/I18N/Rare/ibm-1047.ucm
@@ -0,0 +1,378 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1995-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Fri Nov 10 13:07:47 2000
+#
+# File created by dtcocm version 3.00
+# from source files 34B00417.RPMAP100 and 041734B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-1047"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x3F
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-1047
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x37 |0
+<U0005> \x2D |0
+<U0006> \x2E |0
+<U0007> \x2F |0
+<U0008> \x16 |0
+<U0009> \x05 |0
+<U000A> \x25 |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x3C |0
+<U0015> \x3D |0
+<U0016> \x32 |0
+<U0017> \x26 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x3F |0
+<U001B> \x27 |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x40 |0
+<U0021> \x5A |0
+<U0022> \x7F |0
+<U0023> \x7B |0
+<U0024> \x5B |0
+<U0025> \x6C |0
+<U0026> \x50 |0
+<U0027> \x7D |0
+<U0028> \x4D |0
+<U0029> \x5D |0
+<U002A> \x5C |0
+<U002B> \x4E |0
+<U002C> \x6B |0
+<U002D> \x60 |0
+<U002E> \x4B |0
+<U002F> \x61 |0
+<U0030> \xF0 |0
+<U0031> \xF1 |0
+<U0032> \xF2 |0
+<U0033> \xF3 |0
+<U0034> \xF4 |0
+<U0035> \xF5 |0
+<U0036> \xF6 |0
+<U0037> \xF7 |0
+<U0038> \xF8 |0
+<U0039> \xF9 |0
+<U003A> \x7A |0
+<U003B> \x5E |0
+<U003C> \x4C |0
+<U003D> \x7E |0
+<U003E> \x6E |0
+<U003F> \x6F |0
+<U0040> \x7C |0
+<U0041> \xC1 |0
+<U0042> \xC2 |0
+<U0043> \xC3 |0
+<U0044> \xC4 |0
+<U0045> \xC5 |0
+<U0046> \xC6 |0
+<U0047> \xC7 |0
+<U0048> \xC8 |0
+<U0049> \xC9 |0
+<U004A> \xD1 |0
+<U004B> \xD2 |0
+<U004C> \xD3 |0
+<U004D> \xD4 |0
+<U004E> \xD5 |0
+<U004F> \xD6 |0
+<U0050> \xD7 |0
+<U0051> \xD8 |0
+<U0052> \xD9 |0
+<U0053> \xE2 |0
+<U0054> \xE3 |0
+<U0055> \xE4 |0
+<U0056> \xE5 |0
+<U0057> \xE6 |0
+<U0058> \xE7 |0
+<U0059> \xE8 |0
+<U005A> \xE9 |0
+<U005B> \xAD |0
+<U005C> \xE0 |0
+<U005D> \xBD |0
+<U005E> \x5F |0
+<U005F> \x6D |0
+<U0060> \x79 |0
+<U0061> \x81 |0
+<U0062> \x82 |0
+<U0063> \x83 |0
+<U0064> \x84 |0
+<U0065> \x85 |0
+<U0066> \x86 |0
+<U0067> \x87 |0
+<U0068> \x88 |0
+<U0069> \x89 |0
+<U006A> \x91 |0
+<U006B> \x92 |0
+<U006C> \x93 |0
+<U006D> \x94 |0
+<U006E> \x95 |0
+<U006F> \x96 |0
+<U0070> \x97 |0
+<U0071> \x98 |0
+<U0072> \x99 |0
+<U0073> \xA2 |0
+<U0074> \xA3 |0
+<U0075> \xA4 |0
+<U0076> \xA5 |0
+<U0077> \xA6 |0
+<U0078> \xA7 |0
+<U0079> \xA8 |0
+<U007A> \xA9 |0
+<U007B> \xC0 |0
+<U007C> \x4F |0
+<U007D> \xD0 |0
+<U007E> \xA1 |0
+<U007F> \x07 |0
+<U0080> \x20 |0
+<U0081> \x21 |0
+<U0082> \x22 |0
+<U0083> \x23 |0
+<U0084> \x24 |0
+<U0085> \x15 |0
+<U0086> \x06 |0
+<U0087> \x17 |0
+<U0088> \x28 |0
+<U0089> \x29 |0
+<U008A> \x2A |0
+<U008B> \x2B |0
+<U008C> \x2C |0
+<U008D> \x09 |0
+<U008E> \x0A |0
+<U008F> \x1B |0
+<U0090> \x30 |0
+<U0091> \x31 |0
+<U0092> \x1A |0
+<U0093> \x33 |0
+<U0094> \x34 |0
+<U0095> \x35 |0
+<U0096> \x36 |0
+<U0097> \x08 |0
+<U0098> \x38 |0
+<U0099> \x39 |0
+<U009A> \x3A |0
+<U009B> \x3B |0
+<U009C> \x04 |0
+<U009D> \x14 |0
+<U009E> \x3E |0
+<U009F> \xFF |0
+<U00A0> \x41 |0
+<U00A1> \xAA |0
+<U00A2> \x4A |0
+<U00A3> \xB1 |0
+<U00A4> \x9F |0
+<U00A5> \xB2 |0
+<U00A6> \x6A |0
+<U00A7> \xB5 |0
+<U00A8> \xBB |0
+<U00A9> \xB4 |0
+<U00AA> \x9A |0
+<U00AB> \x8A |0
+<U00AC> \xB0 |0
+<U00AD> \xCA |0
+<U00AE> \xAF |0
+<U00AF> \xBC |0
+<U00B0> \x90 |0
+<U00B1> \x8F |0
+<U00B2> \xEA |0
+<U00B3> \xFA |0
+<U00B4> \xBE |0
+<U00B5> \xA0 |0
+<U00B6> \xB6 |0
+<U00B7> \xB3 |0
+<U00B8> \x9D |0
+<U00B9> \xDA |0
+<U00BA> \x9B |0
+<U00BB> \x8B |0
+<U00BC> \xB7 |0
+<U00BD> \xB8 |0
+<U00BE> \xB9 |0
+<U00BF> \xAB |0
+<U00C0> \x64 |0
+<U00C1> \x65 |0
+<U00C2> \x62 |0
+<U00C3> \x66 |0
+<U00C4> \x63 |0
+<U00C5> \x67 |0
+<U00C6> \x9E |0
+<U00C7> \x68 |0
+<U00C8> \x74 |0
+<U00C9> \x71 |0
+<U00CA> \x72 |0
+<U00CB> \x73 |0
+<U00CC> \x78 |0
+<U00CD> \x75 |0
+<U00CE> \x76 |0
+<U00CF> \x77 |0
+<U00D0> \xAC |0
+<U00D1> \x69 |0
+<U00D2> \xED |0
+<U00D3> \xEE |0
+<U00D4> \xEB |0
+<U00D5> \xEF |0
+<U00D6> \xEC |0
+<U00D7> \xBF |0
+<U00D8> \x80 |0
+<U00D9> \xFD |0
+<U00DA> \xFE |0
+<U00DB> \xFB |0
+<U00DC> \xFC |0
+<U00DD> \xBA |0
+<U00DE> \xAE |0
+<U00DF> \x59 |0
+<U00E0> \x44 |0
+<U00E1> \x45 |0
+<U00E2> \x42 |0
+<U00E3> \x46 |0
+<U00E4> \x43 |0
+<U00E5> \x47 |0
+<U00E6> \x9C |0
+<U00E7> \x48 |0
+<U00E8> \x54 |0
+<U00E9> \x51 |0
+<U00EA> \x52 |0
+<U00EB> \x53 |0
+<U00EC> \x58 |0
+<U00ED> \x55 |0
+<U00EE> \x56 |0
+<U00EF> \x57 |0
+<U00F0> \x8C |0
+<U00F1> \x49 |0
+<U00F2> \xCD |0
+<U00F3> \xCE |0
+<U00F4> \xCB |0
+<U00F5> \xCF |0
+<U00F6> \xCC |0
+<U00F7> \xE1 |0
+<U00F8> \x70 |0
+<U00F9> \xDD |0
+<U00FA> \xDE |0
+<U00FB> \xDB |0
+<U00FC> \xDC |0
+<U00FD> \x8D |0
+<U00FE> \x8E |0
+<U00FF> \xDF |0
+<U203E> \xBC |1
+<UFF01> \x5A |1
+<UFF02> \x7F |1
+<UFF03> \x7B |1
+<UFF04> \x5B |1
+<UFF05> \x6C |1
+<UFF06> \x50 |1
+<UFF07> \x7D |1
+<UFF08> \x4D |1
+<UFF09> \x5D |1
+<UFF0A> \x5C |1
+<UFF0B> \x4E |1
+<UFF0C> \x6B |1
+<UFF0D> \x60 |1
+<UFF0E> \x4B |1
+<UFF0F> \x61 |1
+<UFF10> \xF0 |1
+<UFF11> \xF1 |1
+<UFF12> \xF2 |1
+<UFF13> \xF3 |1
+<UFF14> \xF4 |1
+<UFF15> \xF5 |1
+<UFF16> \xF6 |1
+<UFF17> \xF7 |1
+<UFF18> \xF8 |1
+<UFF19> \xF9 |1
+<UFF1A> \x7A |1
+<UFF1B> \x5E |1
+<UFF1C> \x4C |1
+<UFF1D> \x7E |1
+<UFF1E> \x6E |1
+<UFF1F> \x6F |1
+<UFF20> \x7C |1
+<UFF21> \xC1 |1
+<UFF22> \xC2 |1
+<UFF23> \xC3 |1
+<UFF24> \xC4 |1
+<UFF25> \xC5 |1
+<UFF26> \xC6 |1
+<UFF27> \xC7 |1
+<UFF28> \xC8 |1
+<UFF29> \xC9 |1
+<UFF2A> \xD1 |1
+<UFF2B> \xD2 |1
+<UFF2C> \xD3 |1
+<UFF2D> \xD4 |1
+<UFF2E> \xD5 |1
+<UFF2F> \xD6 |1
+<UFF30> \xD7 |1
+<UFF31> \xD8 |1
+<UFF32> \xD9 |1
+<UFF33> \xE2 |1
+<UFF34> \xE3 |1
+<UFF35> \xE4 |1
+<UFF36> \xE5 |1
+<UFF37> \xE6 |1
+<UFF38> \xE7 |1
+<UFF39> \xE8 |1
+<UFF3A> \xE9 |1
+<UFF3B> \xAD |1
+<UFF3C> \xE0 |1
+<UFF3D> \xBD |1
+<UFF3E> \x5F |1
+<UFF3F> \x6D |1
+<UFF40> \x79 |1
+<UFF41> \x81 |1
+<UFF42> \x82 |1
+<UFF43> \x83 |1
+<UFF44> \x84 |1
+<UFF45> \x85 |1
+<UFF46> \x86 |1
+<UFF47> \x87 |1
+<UFF48> \x88 |1
+<UFF49> \x89 |1
+<UFF4A> \x91 |1
+<UFF4B> \x92 |1
+<UFF4C> \x93 |1
+<UFF4D> \x94 |1
+<UFF4E> \x95 |1
+<UFF4F> \x96 |1
+<UFF50> \x97 |1
+<UFF51> \x98 |1
+<UFF52> \x99 |1
+<UFF53> \xA2 |1
+<UFF54> \xA3 |1
+<UFF55> \xA4 |1
+<UFF56> \xA5 |1
+<UFF57> \xA6 |1
+<UFF58> \xA7 |1
+<UFF59> \xA8 |1
+<UFF5A> \xA9 |1
+<UFF5B> \xC0 |1
+<UFF5C> \x4F |1
+<UFF5D> \xD0 |1
+<UFF5E> \xA1 |1
+END CHARMAP
diff --git a/mcs/class/I18N/Rare/ibm-1089.ucm b/mcs/class/I18N/Rare/ibm-1089.ucm
new file mode 100644
index 00000000000..3356cdfa543
--- /dev/null
+++ b/mcs/class/I18N/Rare/ibm-1089.ucm
@@ -0,0 +1,477 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1995-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Fri Nov 10 13:07:47 2000
+#
+# File created by dtcocm version 3.00
+# from source files 34B00441.RPMAP100 and 044134B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-1089"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x1A
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-1089
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x1A |0
+<U001B> \x1B |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x7F |0
+<U0080> \x80 |0
+<U0081> \x81 |0
+<U0082> \x82 |0
+<U0083> \x83 |0
+<U0084> \x84 |0
+<U0085> \x85 |0
+<U0086> \x86 |0
+<U0087> \x87 |0
+<U0088> \x88 |0
+<U0089> \x89 |0
+<U008A> \x8A |0
+<U008B> \x8B |0
+<U008C> \x8C |0
+<U008D> \x8D |0
+<U008E> \x8E |0
+<U008F> \x8F |0
+<U0090> \x90 |0
+<U0091> \x91 |0
+<U0092> \x92 |0
+<U0093> \x93 |0
+<U0094> \x94 |0
+<U0095> \x95 |0
+<U0096> \x96 |0
+<U0097> \x97 |0
+<U0098> \x98 |0
+<U0099> \x99 |0
+<U009A> \x9A |0
+<U009B> \x9B |0
+<U009C> \x9C |0
+<U009D> \x9D |0
+<U009E> \x9E |0
+<U009F> \x9F |0
+<U00A0> \xA0 |0
+<U00A4> \xA4 |0
+<U00AD> \xAD |0
+<U060C> \xAC |0
+<U061B> \xBB |0
+<U061F> \xBF |0
+<U0621> \xC1 |0
+<U0622> \xC2 |0
+<U0623> \xC3 |0
+<U0624> \xC4 |0
+<U0625> \xC5 |0
+<U0626> \xC6 |0
+<U0627> \xC7 |0
+<U0628> \xC8 |0
+<U0629> \xC9 |0
+<U062A> \xCA |0
+<U062B> \xCB |0
+<U062C> \xCC |0
+<U062D> \xCD |0
+<U062E> \xCE |0
+<U062F> \xCF |0
+<U0630> \xD0 |0
+<U0631> \xD1 |0
+<U0632> \xD2 |0
+<U0633> \xD3 |0
+<U0634> \xD4 |0
+<U0635> \xD5 |0
+<U0636> \xD6 |0
+<U0637> \xD7 |0
+<U0638> \xD8 |0
+<U0639> \xD9 |0
+<U063A> \xDA |0
+<U0640> \xE0 |0
+<U0641> \xE1 |0
+<U0642> \xE2 |0
+<U0643> \xE3 |0
+<U0644> \xE4 |0
+<U0645> \xE5 |0
+<U0646> \xE6 |0
+<U0647> \xE7 |0
+<U0648> \xE8 |0
+<U0649> \xE9 |0
+<U064A> \xEA |0
+<U064B> \xEB |0
+<U064C> \xEC |0
+<U064D> \xED |0
+<U064E> \xEE |0
+<U064F> \xEF |0
+<U0650> \xF0 |0
+<U0651> \xF1 |0
+<U0652> \xF2 |0
+<U0660> \x30 |1
+<U0661> \x31 |1
+<U0662> \x32 |1
+<U0663> \x33 |1
+<U0664> \x34 |1
+<U0665> \x35 |1
+<U0666> \x36 |1
+<U0667> \x37 |1
+<U0668> \x38 |1
+<U0669> \x39 |1
+<U066A> \x25 |1
+<U066B> \x2C |1
+<U066C> \x2E |1
+<U066D> \x2A |1
+<UFE70> \xEB |1
+<UFE71> \xEB |1
+<UFE72> \xEC |1
+<UFE74> \xED |1
+<UFE76> \xEE |1
+<UFE77> \xEE |1
+<UFE78> \xEF |1
+<UFE79> \xEF |1
+<UFE7A> \xF0 |1
+<UFE7B> \xF0 |1
+<UFE7C> \xF1 |1
+<UFE7D> \xF1 |1
+<UFE7E> \xF2 |1
+<UFE7F> \xF2 |1
+<UFE80> \xC1 |1
+<UFE81> \xC2 |1
+<UFE82> \xC2 |1
+<UFE83> \xC3 |1
+<UFE84> \xC3 |1
+<UFE85> \xC4 |1
+<UFE86> \xC4 |1
+<UFE87> \xC5 |1
+<UFE88> \xC5 |1
+<UFE89> \xC6 |1
+<UFE8A> \xC6 |1
+<UFE8B> \xC6 |1
+<UFE8C> \xC6 |1
+<UFE8D> \xC7 |1
+<UFE8E> \xC7 |1
+<UFE8F> \xC8 |1
+<UFE90> \xC8 |1
+<UFE91> \xC8 |1
+<UFE92> \xC8 |1
+<UFE93> \xC9 |1
+<UFE94> \xC9 |1
+<UFE95> \xCA |1
+<UFE96> \xCA |1
+<UFE97> \xCA |1
+<UFE98> \xCA |1
+<UFE99> \xCB |1
+<UFE9A> \xCB |1
+<UFE9B> \xCB |1
+<UFE9C> \xCB |1
+<UFE9D> \xCC |1
+<UFE9E> \xCC |1
+<UFE9F> \xCC |1
+<UFEA0> \xCC |1
+<UFEA1> \xCD |1
+<UFEA2> \xCD |1
+<UFEA3> \xCD |1
+<UFEA4> \xCD |1
+<UFEA5> \xCE |1
+<UFEA6> \xCE |1
+<UFEA7> \xCE |1
+<UFEA8> \xCE |1
+<UFEA9> \xCF |1
+<UFEAA> \xCF |1
+<UFEAB> \xD0 |1
+<UFEAC> \xD0 |1
+<UFEAD> \xD1 |1
+<UFEAE> \xD1 |1
+<UFEAF> \xD2 |1
+<UFEB0> \xD2 |1
+<UFEB1> \xD3 |1
+<UFEB2> \xD3 |1
+<UFEB3> \xD3 |1
+<UFEB4> \xD3 |1
+<UFEB5> \xD4 |1
+<UFEB6> \xD4 |1
+<UFEB7> \xD4 |1
+<UFEB8> \xD4 |1
+<UFEB9> \xD5 |1
+<UFEBA> \xD5 |1
+<UFEBB> \xD5 |1
+<UFEBC> \xD5 |1
+<UFEBD> \xD6 |1
+<UFEBE> \xD6 |1
+<UFEBF> \xD6 |1
+<UFEC0> \xD6 |1
+<UFEC1> \xD7 |1
+<UFEC2> \xD7 |1
+<UFEC3> \xD7 |1
+<UFEC4> \xD7 |1
+<UFEC5> \xD8 |1
+<UFEC6> \xD8 |1
+<UFEC7> \xD8 |1
+<UFEC8> \xD8 |1
+<UFEC9> \xD9 |1
+<UFECA> \xD9 |1
+<UFECB> \xD9 |1
+<UFECC> \xD9 |1
+<UFECD> \xDA |1
+<UFECE> \xDA |1
+<UFECF> \xDA |1
+<UFED0> \xDA |1
+<UFED1> \xE1 |1
+<UFED2> \xE1 |1
+<UFED3> \xE1 |1
+<UFED4> \xE1 |1
+<UFED5> \xE2 |1
+<UFED6> \xE2 |1
+<UFED7> \xE2 |1
+<UFED8> \xE2 |1
+<UFED9> \xE3 |1
+<UFEDA> \xE3 |1
+<UFEDB> \xE3 |1
+<UFEDC> \xE3 |1
+<UFEDD> \xE4 |1
+<UFEDE> \xE4 |1
+<UFEDF> \xE4 |1
+<UFEE0> \xE4 |1
+<UFEE1> \xE5 |1
+<UFEE2> \xE5 |1
+<UFEE3> \xE5 |1
+<UFEE4> \xE5 |1
+<UFEE5> \xE6 |1
+<UFEE6> \xE6 |1
+<UFEE7> \xE6 |1
+<UFEE8> \xE6 |1
+<UFEE9> \xE7 |1
+<UFEEA> \xE7 |1
+<UFEEB> \xE7 |1
+<UFEEC> \xE7 |1
+<UFEED> \xE8 |1
+<UFEEE> \xE8 |1
+<UFEEF> \xE9 |1
+<UFEF0> \xE9 |1
+<UFEF1> \xEA |1
+<UFEF2> \xEA |1
+<UFEF3> \xEA |1
+<UFEF4> \xEA |1
+<UFF01> \x21 |1
+<UFF02> \x22 |1
+<UFF03> \x23 |1
+<UFF04> \x24 |1
+<UFF05> \x25 |1
+<UFF06> \x26 |1
+<UFF07> \x27 |1
+<UFF08> \x28 |1
+<UFF09> \x29 |1
+<UFF0A> \x2A |1
+<UFF0B> \x2B |1
+<UFF0C> \x2C |1
+<UFF0D> \x2D |1
+<UFF0E> \x2E |1
+<UFF0F> \x2F |1
+<UFF10> \x30 |1
+<UFF11> \x31 |1
+<UFF12> \x32 |1
+<UFF13> \x33 |1
+<UFF14> \x34 |1
+<UFF15> \x35 |1
+<UFF16> \x36 |1
+<UFF17> \x37 |1
+<UFF18> \x38 |1
+<UFF19> \x39 |1
+<UFF1A> \x3A |1
+<UFF1B> \x3B |1
+<UFF1C> \x3C |1
+<UFF1D> \x3D |1
+<UFF1E> \x3E |1
+<UFF1F> \x3F |1
+<UFF20> \x40 |1
+<UFF21> \x41 |1
+<UFF22> \x42 |1
+<UFF23> \x43 |1
+<UFF24> \x44 |1
+<UFF25> \x45 |1
+<UFF26> \x46 |1
+<UFF27> \x47 |1
+<UFF28> \x48 |1
+<UFF29> \x49 |1
+<UFF2A> \x4A |1
+<UFF2B> \x4B |1
+<UFF2C> \x4C |1
+<UFF2D> \x4D |1
+<UFF2E> \x4E |1
+<UFF2F> \x4F |1
+<UFF30> \x50 |1
+<UFF31> \x51 |1
+<UFF32> \x52 |1
+<UFF33> \x53 |1
+<UFF34> \x54 |1
+<UFF35> \x55 |1
+<UFF36> \x56 |1
+<UFF37> \x57 |1
+<UFF38> \x58 |1
+<UFF39> \x59 |1
+<UFF3A> \x5A |1
+<UFF3B> \x5B |1
+<UFF3C> \x5C |1
+<UFF3D> \x5D |1
+<UFF3E> \x5E |1
+<UFF3F> \x5F |1
+<UFF40> \x60 |1
+<UFF41> \x61 |1
+<UFF42> \x62 |1
+<UFF43> \x63 |1
+<UFF44> \x64 |1
+<UFF45> \x65 |1
+<UFF46> \x66 |1
+<UFF47> \x67 |1
+<UFF48> \x68 |1
+<UFF49> \x69 |1
+<UFF4A> \x6A |1
+<UFF4B> \x6B |1
+<UFF4C> \x6C |1
+<UFF4D> \x6D |1
+<UFF4E> \x6E |1
+<UFF4F> \x6F |1
+<UFF50> \x70 |1
+<UFF51> \x71 |1
+<UFF52> \x72 |1
+<UFF53> \x73 |1
+<UFF54> \x74 |1
+<UFF55> \x75 |1
+<UFF56> \x76 |1
+<UFF57> \x77 |1
+<UFF58> \x78 |1
+<UFF59> \x79 |1
+<UFF5A> \x7A |1
+<UFF5B> \x7B |1
+<UFF5C> \x7C |1
+<UFF5D> \x7D |1
+<UFF5E> \x7E |1
+END CHARMAP
diff --git a/mcs/class/I18N/Rare/ibm-1140.ucm b/mcs/class/I18N/Rare/ibm-1140.ucm
new file mode 100644
index 00000000000..973f69dced4
--- /dev/null
+++ b/mcs/class/I18N/Rare/ibm-1140.ucm
@@ -0,0 +1,378 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1997-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Fri Nov 10 13:07:47 2000
+#
+# File created by dtcocm version 3.00
+# from source files 44B00474.RPMAP100 and 047444B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-1140"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x3F
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-1140
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x37 |0
+<U0005> \x2D |0
+<U0006> \x2E |0
+<U0007> \x2F |0
+<U0008> \x16 |0
+<U0009> \x05 |0
+<U000A> \x25 |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x3C |0
+<U0015> \x3D |0
+<U0016> \x32 |0
+<U0017> \x26 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x3F |0
+<U001B> \x27 |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x40 |0
+<U0021> \x5A |0
+<U0022> \x7F |0
+<U0023> \x7B |0
+<U0024> \x5B |0
+<U0025> \x6C |0
+<U0026> \x50 |0
+<U0027> \x7D |0
+<U0028> \x4D |0
+<U0029> \x5D |0
+<U002A> \x5C |0
+<U002B> \x4E |0
+<U002C> \x6B |0
+<U002D> \x60 |0
+<U002E> \x4B |0
+<U002F> \x61 |0
+<U0030> \xF0 |0
+<U0031> \xF1 |0
+<U0032> \xF2 |0
+<U0033> \xF3 |0
+<U0034> \xF4 |0
+<U0035> \xF5 |0
+<U0036> \xF6 |0
+<U0037> \xF7 |0
+<U0038> \xF8 |0
+<U0039> \xF9 |0
+<U003A> \x7A |0
+<U003B> \x5E |0
+<U003C> \x4C |0
+<U003D> \x7E |0
+<U003E> \x6E |0
+<U003F> \x6F |0
+<U0040> \x7C |0
+<U0041> \xC1 |0
+<U0042> \xC2 |0
+<U0043> \xC3 |0
+<U0044> \xC4 |0
+<U0045> \xC5 |0
+<U0046> \xC6 |0
+<U0047> \xC7 |0
+<U0048> \xC8 |0
+<U0049> \xC9 |0
+<U004A> \xD1 |0
+<U004B> \xD2 |0
+<U004C> \xD3 |0
+<U004D> \xD4 |0
+<U004E> \xD5 |0
+<U004F> \xD6 |0
+<U0050> \xD7 |0
+<U0051> \xD8 |0
+<U0052> \xD9 |0
+<U0053> \xE2 |0
+<U0054> \xE3 |0
+<U0055> \xE4 |0
+<U0056> \xE5 |0
+<U0057> \xE6 |0
+<U0058> \xE7 |0
+<U0059> \xE8 |0
+<U005A> \xE9 |0
+<U005B> \xBA |0
+<U005C> \xE0 |0
+<U005D> \xBB |0
+<U005E> \xB0 |0
+<U005F> \x6D |0
+<U0060> \x79 |0
+<U0061> \x81 |0
+<U0062> \x82 |0
+<U0063> \x83 |0
+<U0064> \x84 |0
+<U0065> \x85 |0
+<U0066> \x86 |0
+<U0067> \x87 |0
+<U0068> \x88 |0
+<U0069> \x89 |0
+<U006A> \x91 |0
+<U006B> \x92 |0
+<U006C> \x93 |0
+<U006D> \x94 |0
+<U006E> \x95 |0
+<U006F> \x96 |0
+<U0070> \x97 |0
+<U0071> \x98 |0
+<U0072> \x99 |0
+<U0073> \xA2 |0
+<U0074> \xA3 |0
+<U0075> \xA4 |0
+<U0076> \xA5 |0
+<U0077> \xA6 |0
+<U0078> \xA7 |0
+<U0079> \xA8 |0
+<U007A> \xA9 |0
+<U007B> \xC0 |0
+<U007C> \x4F |0
+<U007D> \xD0 |0
+<U007E> \xA1 |0
+<U007F> \x07 |0
+<U0080> \x20 |0
+<U0081> \x21 |0
+<U0082> \x22 |0
+<U0083> \x23 |0
+<U0084> \x24 |0
+<U0085> \x15 |0
+<U0086> \x06 |0
+<U0087> \x17 |0
+<U0088> \x28 |0
+<U0089> \x29 |0
+<U008A> \x2A |0
+<U008B> \x2B |0
+<U008C> \x2C |0
+<U008D> \x09 |0
+<U008E> \x0A |0
+<U008F> \x1B |0
+<U0090> \x30 |0
+<U0091> \x31 |0
+<U0092> \x1A |0
+<U0093> \x33 |0
+<U0094> \x34 |0
+<U0095> \x35 |0
+<U0096> \x36 |0
+<U0097> \x08 |0
+<U0098> \x38 |0
+<U0099> \x39 |0
+<U009A> \x3A |0
+<U009B> \x3B |0
+<U009C> \x04 |0
+<U009D> \x14 |0
+<U009E> \x3E |0
+<U009F> \xFF |0
+<U00A0> \x41 |0
+<U00A1> \xAA |0
+<U00A2> \x4A |0
+<U00A3> \xB1 |0
+<U00A5> \xB2 |0
+<U00A6> \x6A |0
+<U00A7> \xB5 |0
+<U00A8> \xBD |0
+<U00A9> \xB4 |0
+<U00AA> \x9A |0
+<U00AB> \x8A |0
+<U00AC> \x5F |0
+<U00AD> \xCA |0
+<U00AE> \xAF |0
+<U00AF> \xBC |0
+<U00B0> \x90 |0
+<U00B1> \x8F |0
+<U00B2> \xEA |0
+<U00B3> \xFA |0
+<U00B4> \xBE |0
+<U00B5> \xA0 |0
+<U00B6> \xB6 |0
+<U00B7> \xB3 |0
+<U00B8> \x9D |0
+<U00B9> \xDA |0
+<U00BA> \x9B |0
+<U00BB> \x8B |0
+<U00BC> \xB7 |0
+<U00BD> \xB8 |0
+<U00BE> \xB9 |0
+<U00BF> \xAB |0
+<U00C0> \x64 |0
+<U00C1> \x65 |0
+<U00C2> \x62 |0
+<U00C3> \x66 |0
+<U00C4> \x63 |0
+<U00C5> \x67 |0
+<U00C6> \x9E |0
+<U00C7> \x68 |0
+<U00C8> \x74 |0
+<U00C9> \x71 |0
+<U00CA> \x72 |0
+<U00CB> \x73 |0
+<U00CC> \x78 |0
+<U00CD> \x75 |0
+<U00CE> \x76 |0
+<U00CF> \x77 |0
+<U00D0> \xAC |0
+<U00D1> \x69 |0
+<U00D2> \xED |0
+<U00D3> \xEE |0
+<U00D4> \xEB |0
+<U00D5> \xEF |0
+<U00D6> \xEC |0
+<U00D7> \xBF |0
+<U00D8> \x80 |0
+<U00D9> \xFD |0
+<U00DA> \xFE |0
+<U00DB> \xFB |0
+<U00DC> \xFC |0
+<U00DD> \xAD |0
+<U00DE> \xAE |0
+<U00DF> \x59 |0
+<U00E0> \x44 |0
+<U00E1> \x45 |0
+<U00E2> \x42 |0
+<U00E3> \x46 |0
+<U00E4> \x43 |0
+<U00E5> \x47 |0
+<U00E6> \x9C |0
+<U00E7> \x48 |0
+<U00E8> \x54 |0
+<U00E9> \x51 |0
+<U00EA> \x52 |0
+<U00EB> \x53 |0
+<U00EC> \x58 |0
+<U00ED> \x55 |0
+<U00EE> \x56 |0
+<U00EF> \x57 |0
+<U00F0> \x8C |0
+<U00F1> \x49 |0
+<U00F2> \xCD |0
+<U00F3> \xCE |0
+<U00F4> \xCB |0
+<U00F5> \xCF |0
+<U00F6> \xCC |0
+<U00F7> \xE1 |0
+<U00F8> \x70 |0
+<U00F9> \xDD |0
+<U00FA> \xDE |0
+<U00FB> \xDB |0
+<U00FC> \xDC |0
+<U00FD> \x8D |0
+<U00FE> \x8E |0
+<U00FF> \xDF |0
+<U203E> \xBC |1
+<U20AC> \x9F |0
+<UFF01> \x5A |1
+<UFF02> \x7F |1
+<UFF03> \x7B |1
+<UFF04> \x5B |1
+<UFF05> \x6C |1
+<UFF06> \x50 |1
+<UFF07> \x7D |1
+<UFF08> \x4D |1
+<UFF09> \x5D |1
+<UFF0A> \x5C |1
+<UFF0B> \x4E |1
+<UFF0C> \x6B |1
+<UFF0D> \x60 |1
+<UFF0E> \x4B |1
+<UFF0F> \x61 |1
+<UFF10> \xF0 |1
+<UFF11> \xF1 |1
+<UFF12> \xF2 |1
+<UFF13> \xF3 |1
+<UFF14> \xF4 |1
+<UFF15> \xF5 |1
+<UFF16> \xF6 |1
+<UFF17> \xF7 |1
+<UFF18> \xF8 |1
+<UFF19> \xF9 |1
+<UFF1A> \x7A |1
+<UFF1B> \x5E |1
+<UFF1C> \x4C |1
+<UFF1D> \x7E |1
+<UFF1E> \x6E |1
+<UFF1F> \x6F |1
+<UFF20> \x7C |1
+<UFF21> \xC1 |1
+<UFF22> \xC2 |1
+<UFF23> \xC3 |1
+<UFF24> \xC4 |1
+<UFF25> \xC5 |1
+<UFF26> \xC6 |1
+<UFF27> \xC7 |1
+<UFF28> \xC8 |1
+<UFF29> \xC9 |1
+<UFF2A> \xD1 |1
+<UFF2B> \xD2 |1
+<UFF2C> \xD3 |1
+<UFF2D> \xD4 |1
+<UFF2E> \xD5 |1
+<UFF2F> \xD6 |1
+<UFF30> \xD7 |1
+<UFF31> \xD8 |1
+<UFF32> \xD9 |1
+<UFF33> \xE2 |1
+<UFF34> \xE3 |1
+<UFF35> \xE4 |1
+<UFF36> \xE5 |1
+<UFF37> \xE6 |1
+<UFF38> \xE7 |1
+<UFF39> \xE8 |1
+<UFF3A> \xE9 |1
+<UFF3B> \xBA |1
+<UFF3C> \xE0 |1
+<UFF3D> \xBB |1
+<UFF3E> \xB0 |1
+<UFF3F> \x6D |1
+<UFF40> \x79 |1
+<UFF41> \x81 |1
+<UFF42> \x82 |1
+<UFF43> \x83 |1
+<UFF44> \x84 |1
+<UFF45> \x85 |1
+<UFF46> \x86 |1
+<UFF47> \x87 |1
+<UFF48> \x88 |1
+<UFF49> \x89 |1
+<UFF4A> \x91 |1
+<UFF4B> \x92 |1
+<UFF4C> \x93 |1
+<UFF4D> \x94 |1
+<UFF4E> \x95 |1
+<UFF4F> \x96 |1
+<UFF50> \x97 |1
+<UFF51> \x98 |1
+<UFF52> \x99 |1
+<UFF53> \xA2 |1
+<UFF54> \xA3 |1
+<UFF55> \xA4 |1
+<UFF56> \xA5 |1
+<UFF57> \xA6 |1
+<UFF58> \xA7 |1
+<UFF59> \xA8 |1
+<UFF5A> \xA9 |1
+<UFF5B> \xC0 |1
+<UFF5C> \x4F |1
+<UFF5D> \xD0 |1
+<UFF5E> \xA1 |1
+END CHARMAP
diff --git a/mcs/class/I18N/Rare/ibm-1141.ucm b/mcs/class/I18N/Rare/ibm-1141.ucm
new file mode 100644
index 00000000000..9672405a6cc
--- /dev/null
+++ b/mcs/class/I18N/Rare/ibm-1141.ucm
@@ -0,0 +1,378 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1997-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Fri Nov 10 13:07:47 2000
+#
+# File created by dtcocm version 3.00
+# from source files 44B00475.RPMAP100 and 047544B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-1141"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x3F
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-1141
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x37 |0
+<U0005> \x2D |0
+<U0006> \x2E |0
+<U0007> \x2F |0
+<U0008> \x16 |0
+<U0009> \x05 |0
+<U000A> \x25 |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x3C |0
+<U0015> \x3D |0
+<U0016> \x32 |0
+<U0017> \x26 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x3F |0
+<U001B> \x27 |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x40 |0
+<U0021> \x4F |0
+<U0022> \x7F |0
+<U0023> \x7B |0
+<U0024> \x5B |0
+<U0025> \x6C |0
+<U0026> \x50 |0
+<U0027> \x7D |0
+<U0028> \x4D |0
+<U0029> \x5D |0
+<U002A> \x5C |0
+<U002B> \x4E |0
+<U002C> \x6B |0
+<U002D> \x60 |0
+<U002E> \x4B |0
+<U002F> \x61 |0
+<U0030> \xF0 |0
+<U0031> \xF1 |0
+<U0032> \xF2 |0
+<U0033> \xF3 |0
+<U0034> \xF4 |0
+<U0035> \xF5 |0
+<U0036> \xF6 |0
+<U0037> \xF7 |0
+<U0038> \xF8 |0
+<U0039> \xF9 |0
+<U003A> \x7A |0
+<U003B> \x5E |0
+<U003C> \x4C |0
+<U003D> \x7E |0
+<U003E> \x6E |0
+<U003F> \x6F |0
+<U0040> \xB5 |0
+<U0041> \xC1 |0
+<U0042> \xC2 |0
+<U0043> \xC3 |0
+<U0044> \xC4 |0
+<U0045> \xC5 |0
+<U0046> \xC6 |0
+<U0047> \xC7 |0
+<U0048> \xC8 |0
+<U0049> \xC9 |0
+<U004A> \xD1 |0
+<U004B> \xD2 |0
+<U004C> \xD3 |0
+<U004D> \xD4 |0
+<U004E> \xD5 |0
+<U004F> \xD6 |0
+<U0050> \xD7 |0
+<U0051> \xD8 |0
+<U0052> \xD9 |0
+<U0053> \xE2 |0
+<U0054> \xE3 |0
+<U0055> \xE4 |0
+<U0056> \xE5 |0
+<U0057> \xE6 |0
+<U0058> \xE7 |0
+<U0059> \xE8 |0
+<U005A> \xE9 |0
+<U005B> \x63 |0
+<U005C> \xEC |0
+<U005D> \xFC |0
+<U005E> \x5F |0
+<U005F> \x6D |0
+<U0060> \x79 |0
+<U0061> \x81 |0
+<U0062> \x82 |0
+<U0063> \x83 |0
+<U0064> \x84 |0
+<U0065> \x85 |0
+<U0066> \x86 |0
+<U0067> \x87 |0
+<U0068> \x88 |0
+<U0069> \x89 |0
+<U006A> \x91 |0
+<U006B> \x92 |0
+<U006C> \x93 |0
+<U006D> \x94 |0
+<U006E> \x95 |0
+<U006F> \x96 |0
+<U0070> \x97 |0
+<U0071> \x98 |0
+<U0072> \x99 |0
+<U0073> \xA2 |0
+<U0074> \xA3 |0
+<U0075> \xA4 |0
+<U0076> \xA5 |0
+<U0077> \xA6 |0
+<U0078> \xA7 |0
+<U0079> \xA8 |0
+<U007A> \xA9 |0
+<U007B> \x43 |0
+<U007C> \xBB |0
+<U007D> \xDC |0
+<U007E> \x59 |0
+<U007F> \x07 |0
+<U0080> \x20 |0
+<U0081> \x21 |0
+<U0082> \x22 |0
+<U0083> \x23 |0
+<U0084> \x24 |0
+<U0085> \x15 |0
+<U0086> \x06 |0
+<U0087> \x17 |0
+<U0088> \x28 |0
+<U0089> \x29 |0
+<U008A> \x2A |0
+<U008B> \x2B |0
+<U008C> \x2C |0
+<U008D> \x09 |0
+<U008E> \x0A |0
+<U008F> \x1B |0
+<U0090> \x30 |0
+<U0091> \x31 |0
+<U0092> \x1A |0
+<U0093> \x33 |0
+<U0094> \x34 |0
+<U0095> \x35 |0
+<U0096> \x36 |0
+<U0097> \x08 |0
+<U0098> \x38 |0
+<U0099> \x39 |0
+<U009A> \x3A |0
+<U009B> \x3B |0
+<U009C> \x04 |0
+<U009D> \x14 |0
+<U009E> \x3E |0
+<U009F> \xFF |0
+<U00A0> \x41 |0
+<U00A1> \xAA |0
+<U00A2> \xB0 |0
+<U00A3> \xB1 |0
+<U00A5> \xB2 |0
+<U00A6> \xCC |0
+<U00A7> \x7C |0
+<U00A8> \xBD |0
+<U00A9> \xB4 |0
+<U00AA> \x9A |0
+<U00AB> \x8A |0
+<U00AC> \xBA |0
+<U00AD> \xCA |0
+<U00AE> \xAF |0
+<U00AF> \xBC |0
+<U00B0> \x90 |0
+<U00B1> \x8F |0
+<U00B2> \xEA |0
+<U00B3> \xFA |0
+<U00B4> \xBE |0
+<U00B5> \xA0 |0
+<U00B6> \xB6 |0
+<U00B7> \xB3 |0
+<U00B8> \x9D |0
+<U00B9> \xDA |0
+<U00BA> \x9B |0
+<U00BB> \x8B |0
+<U00BC> \xB7 |0
+<U00BD> \xB8 |0
+<U00BE> \xB9 |0
+<U00BF> \xAB |0
+<U00C0> \x64 |0
+<U00C1> \x65 |0
+<U00C2> \x62 |0
+<U00C3> \x66 |0
+<U00C4> \x4A |0
+<U00C5> \x67 |0
+<U00C6> \x9E |0
+<U00C7> \x68 |0
+<U00C8> \x74 |0
+<U00C9> \x71 |0
+<U00CA> \x72 |0
+<U00CB> \x73 |0
+<U00CC> \x78 |0
+<U00CD> \x75 |0
+<U00CE> \x76 |0
+<U00CF> \x77 |0
+<U00D0> \xAC |0
+<U00D1> \x69 |0
+<U00D2> \xED |0
+<U00D3> \xEE |0
+<U00D4> \xEB |0
+<U00D5> \xEF |0
+<U00D6> \xE0 |0
+<U00D7> \xBF |0
+<U00D8> \x80 |0
+<U00D9> \xFD |0
+<U00DA> \xFE |0
+<U00DB> \xFB |0
+<U00DC> \x5A |0
+<U00DD> \xAD |0
+<U00DE> \xAE |0
+<U00DF> \xA1 |0
+<U00E0> \x44 |0
+<U00E1> \x45 |0
+<U00E2> \x42 |0
+<U00E3> \x46 |0
+<U00E4> \xC0 |0
+<U00E5> \x47 |0
+<U00E6> \x9C |0
+<U00E7> \x48 |0
+<U00E8> \x54 |0
+<U00E9> \x51 |0
+<U00EA> \x52 |0
+<U00EB> \x53 |0
+<U00EC> \x58 |0
+<U00ED> \x55 |0
+<U00EE> \x56 |0
+<U00EF> \x57 |0
+<U00F0> \x8C |0
+<U00F1> \x49 |0
+<U00F2> \xCD |0
+<U00F3> \xCE |0
+<U00F4> \xCB |0
+<U00F5> \xCF |0
+<U00F6> \x6A |0
+<U00F7> \xE1 |0
+<U00F8> \x70 |0
+<U00F9> \xDD |0
+<U00FA> \xDE |0
+<U00FB> \xDB |0
+<U00FC> \xD0 |0
+<U00FD> \x8D |0
+<U00FE> \x8E |0
+<U00FF> \xDF |0
+<U203E> \xBC |1
+<U20AC> \x9F |0
+<UFF01> \x4F |1
+<UFF02> \x7F |1
+<UFF03> \x7B |1
+<UFF04> \x5B |1
+<UFF05> \x6C |1
+<UFF06> \x50 |1
+<UFF07> \x7D |1
+<UFF08> \x4D |1
+<UFF09> \x5D |1
+<UFF0A> \x5C |1
+<UFF0B> \x4E |1
+<UFF0C> \x6B |1
+<UFF0D> \x60 |1
+<UFF0E> \x4B |1
+<UFF0F> \x61 |1
+<UFF10> \xF0 |1
+<UFF11> \xF1 |1
+<UFF12> \xF2 |1
+<UFF13> \xF3 |1
+<UFF14> \xF4 |1
+<UFF15> \xF5 |1
+<UFF16> \xF6 |1
+<UFF17> \xF7 |1
+<UFF18> \xF8 |1
+<UFF19> \xF9 |1
+<UFF1A> \x7A |1
+<UFF1B> \x5E |1
+<UFF1C> \x4C |1
+<UFF1D> \x7E |1
+<UFF1E> \x6E |1
+<UFF1F> \x6F |1
+<UFF20> \xB5 |1
+<UFF21> \xC1 |1
+<UFF22> \xC2 |1
+<UFF23> \xC3 |1
+<UFF24> \xC4 |1
+<UFF25> \xC5 |1
+<UFF26> \xC6 |1
+<UFF27> \xC7 |1
+<UFF28> \xC8 |1
+<UFF29> \xC9 |1
+<UFF2A> \xD1 |1
+<UFF2B> \xD2 |1
+<UFF2C> \xD3 |1
+<UFF2D> \xD4 |1
+<UFF2E> \xD5 |1
+<UFF2F> \xD6 |1
+<UFF30> \xD7 |1
+<UFF31> \xD8 |1
+<UFF32> \xD9 |1
+<UFF33> \xE2 |1
+<UFF34> \xE3 |1
+<UFF35> \xE4 |1
+<UFF36> \xE5 |1
+<UFF37> \xE6 |1
+<UFF38> \xE7 |1
+<UFF39> \xE8 |1
+<UFF3A> \xE9 |1
+<UFF3B> \x63 |1
+<UFF3C> \xEC |1
+<UFF3D> \xFC |1
+<UFF3E> \x5F |1
+<UFF3F> \x6D |1
+<UFF40> \x79 |1
+<UFF41> \x81 |1
+<UFF42> \x82 |1
+<UFF43> \x83 |1
+<UFF44> \x84 |1
+<UFF45> \x85 |1
+<UFF46> \x86 |1
+<UFF47> \x87 |1
+<UFF48> \x88 |1
+<UFF49> \x89 |1
+<UFF4A> \x91 |1
+<UFF4B> \x92 |1
+<UFF4C> \x93 |1
+<UFF4D> \x94 |1
+<UFF4E> \x95 |1
+<UFF4F> \x96 |1
+<UFF50> \x97 |1
+<UFF51> \x98 |1
+<UFF52> \x99 |1
+<UFF53> \xA2 |1
+<UFF54> \xA3 |1
+<UFF55> \xA4 |1
+<UFF56> \xA5 |1
+<UFF57> \xA6 |1
+<UFF58> \xA7 |1
+<UFF59> \xA8 |1
+<UFF5A> \xA9 |1
+<UFF5B> \x43 |1
+<UFF5C> \xBB |1
+<UFF5D> \xDC |1
+<UFF5E> \x59 |1
+END CHARMAP
diff --git a/mcs/class/I18N/Rare/ibm-1142.ucm b/mcs/class/I18N/Rare/ibm-1142.ucm
new file mode 100644
index 00000000000..577090426d8
--- /dev/null
+++ b/mcs/class/I18N/Rare/ibm-1142.ucm
@@ -0,0 +1,378 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1997-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Fri Nov 10 13:07:48 2000
+#
+# File created by dtcocm version 3.00
+# from source files 44B00476.RPMAP100 and 047644B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-1142"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x3F
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-1142
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x37 |0
+<U0005> \x2D |0
+<U0006> \x2E |0
+<U0007> \x2F |0
+<U0008> \x16 |0
+<U0009> \x05 |0
+<U000A> \x25 |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x3C |0
+<U0015> \x3D |0
+<U0016> \x32 |0
+<U0017> \x26 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x3F |0
+<U001B> \x27 |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x40 |0
+<U0021> \x4F |0
+<U0022> \x7F |0
+<U0023> \x4A |0
+<U0024> \x67 |0
+<U0025> \x6C |0
+<U0026> \x50 |0
+<U0027> \x7D |0
+<U0028> \x4D |0
+<U0029> \x5D |0
+<U002A> \x5C |0
+<U002B> \x4E |0
+<U002C> \x6B |0
+<U002D> \x60 |0
+<U002E> \x4B |0
+<U002F> \x61 |0
+<U0030> \xF0 |0
+<U0031> \xF1 |0
+<U0032> \xF2 |0
+<U0033> \xF3 |0
+<U0034> \xF4 |0
+<U0035> \xF5 |0
+<U0036> \xF6 |0
+<U0037> \xF7 |0
+<U0038> \xF8 |0
+<U0039> \xF9 |0
+<U003A> \x7A |0
+<U003B> \x5E |0
+<U003C> \x4C |0
+<U003D> \x7E |0
+<U003E> \x6E |0
+<U003F> \x6F |0
+<U0040> \x80 |0
+<U0041> \xC1 |0
+<U0042> \xC2 |0
+<U0043> \xC3 |0
+<U0044> \xC4 |0
+<U0045> \xC5 |0
+<U0046> \xC6 |0
+<U0047> \xC7 |0
+<U0048> \xC8 |0
+<U0049> \xC9 |0
+<U004A> \xD1 |0
+<U004B> \xD2 |0
+<U004C> \xD3 |0
+<U004D> \xD4 |0
+<U004E> \xD5 |0
+<U004F> \xD6 |0
+<U0050> \xD7 |0
+<U0051> \xD8 |0
+<U0052> \xD9 |0
+<U0053> \xE2 |0
+<U0054> \xE3 |0
+<U0055> \xE4 |0
+<U0056> \xE5 |0
+<U0057> \xE6 |0
+<U0058> \xE7 |0
+<U0059> \xE8 |0
+<U005A> \xE9 |0
+<U005B> \x9E |0
+<U005C> \xE0 |0
+<U005D> \x9F |0
+<U005E> \x5F |0
+<U005F> \x6D |0
+<U0060> \x79 |0
+<U0061> \x81 |0
+<U0062> \x82 |0
+<U0063> \x83 |0
+<U0064> \x84 |0
+<U0065> \x85 |0
+<U0066> \x86 |0
+<U0067> \x87 |0
+<U0068> \x88 |0
+<U0069> \x89 |0
+<U006A> \x91 |0
+<U006B> \x92 |0
+<U006C> \x93 |0
+<U006D> \x94 |0
+<U006E> \x95 |0
+<U006F> \x96 |0
+<U0070> \x97 |0
+<U0071> \x98 |0
+<U0072> \x99 |0
+<U0073> \xA2 |0
+<U0074> \xA3 |0
+<U0075> \xA4 |0
+<U0076> \xA5 |0
+<U0077> \xA6 |0
+<U0078> \xA7 |0
+<U0079> \xA8 |0
+<U007A> \xA9 |0
+<U007B> \x9C |0
+<U007C> \xBB |0
+<U007D> \x47 |0
+<U007E> \xDC |0
+<U007F> \x07 |0
+<U0080> \x20 |0
+<U0081> \x21 |0
+<U0082> \x22 |0
+<U0083> \x23 |0
+<U0084> \x24 |0
+<U0085> \x15 |0
+<U0086> \x06 |0
+<U0087> \x17 |0
+<U0088> \x28 |0
+<U0089> \x29 |0
+<U008A> \x2A |0
+<U008B> \x2B |0
+<U008C> \x2C |0
+<U008D> \x09 |0
+<U008E> \x0A |0
+<U008F> \x1B |0
+<U0090> \x30 |0
+<U0091> \x31 |0
+<U0092> \x1A |0
+<U0093> \x33 |0
+<U0094> \x34 |0
+<U0095> \x35 |0
+<U0096> \x36 |0
+<U0097> \x08 |0
+<U0098> \x38 |0
+<U0099> \x39 |0
+<U009A> \x3A |0
+<U009B> \x3B |0
+<U009C> \x04 |0
+<U009D> \x14 |0
+<U009E> \x3E |0
+<U009F> \xFF |0
+<U00A0> \x41 |0
+<U00A1> \xAA |0
+<U00A2> \xB0 |0
+<U00A3> \xB1 |0
+<U00A5> \xB2 |0
+<U00A6> \x70 |0
+<U00A7> \xB5 |0
+<U00A8> \xBD |0
+<U00A9> \xB4 |0
+<U00AA> \x9A |0
+<U00AB> \x8A |0
+<U00AC> \xBA |0
+<U00AD> \xCA |0
+<U00AE> \xAF |0
+<U00AF> \xBC |0
+<U00B0> \x90 |0
+<U00B1> \x8F |0
+<U00B2> \xEA |0
+<U00B3> \xFA |0
+<U00B4> \xBE |0
+<U00B5> \xA0 |0
+<U00B6> \xB6 |0
+<U00B7> \xB3 |0
+<U00B8> \x9D |0
+<U00B9> \xDA |0
+<U00BA> \x9B |0
+<U00BB> \x8B |0
+<U00BC> \xB7 |0
+<U00BD> \xB8 |0
+<U00BE> \xB9 |0
+<U00BF> \xAB |0
+<U00C0> \x64 |0
+<U00C1> \x65 |0
+<U00C2> \x62 |0
+<U00C3> \x66 |0
+<U00C4> \x63 |0
+<U00C5> \x5B |0
+<U00C6> \x7B |0
+<U00C7> \x68 |0
+<U00C8> \x74 |0
+<U00C9> \x71 |0
+<U00CA> \x72 |0
+<U00CB> \x73 |0
+<U00CC> \x78 |0
+<U00CD> \x75 |0
+<U00CE> \x76 |0
+<U00CF> \x77 |0
+<U00D0> \xAC |0
+<U00D1> \x69 |0
+<U00D2> \xED |0
+<U00D3> \xEE |0
+<U00D4> \xEB |0
+<U00D5> \xEF |0
+<U00D6> \xEC |0
+<U00D7> \xBF |0
+<U00D8> \x7C |0
+<U00D9> \xFD |0
+<U00DA> \xFE |0
+<U00DB> \xFB |0
+<U00DC> \xFC |0
+<U00DD> \xAD |0
+<U00DE> \xAE |0
+<U00DF> \x59 |0
+<U00E0> \x44 |0
+<U00E1> \x45 |0
+<U00E2> \x42 |0
+<U00E3> \x46 |0
+<U00E4> \x43 |0
+<U00E5> \xD0 |0
+<U00E6> \xC0 |0
+<U00E7> \x48 |0
+<U00E8> \x54 |0
+<U00E9> \x51 |0
+<U00EA> \x52 |0
+<U00EB> \x53 |0
+<U00EC> \x58 |0
+<U00ED> \x55 |0
+<U00EE> \x56 |0
+<U00EF> \x57 |0
+<U00F0> \x8C |0
+<U00F1> \x49 |0
+<U00F2> \xCD |0
+<U00F3> \xCE |0
+<U00F4> \xCB |0
+<U00F5> \xCF |0
+<U00F6> \xCC |0
+<U00F7> \xE1 |0
+<U00F8> \x6A |0
+<U00F9> \xDD |0
+<U00FA> \xDE |0
+<U00FB> \xDB |0
+<U00FC> \xA1 |0
+<U00FD> \x8D |0
+<U00FE> \x8E |0
+<U00FF> \xDF |0
+<U203E> \xBC |1
+<U20AC> \x5A |0
+<UFF01> \x4F |1
+<UFF02> \x7F |1
+<UFF03> \x4A |1
+<UFF04> \x67 |1
+<UFF05> \x6C |1
+<UFF06> \x50 |1
+<UFF07> \x7D |1
+<UFF08> \x4D |1
+<UFF09> \x5D |1
+<UFF0A> \x5C |1
+<UFF0B> \x4E |1
+<UFF0C> \x6B |1
+<UFF0D> \x60 |1
+<UFF0E> \x4B |1
+<UFF0F> \x61 |1
+<UFF10> \xF0 |1
+<UFF11> \xF1 |1
+<UFF12> \xF2 |1
+<UFF13> \xF3 |1
+<UFF14> \xF4 |1
+<UFF15> \xF5 |1
+<UFF16> \xF6 |1
+<UFF17> \xF7 |1
+<UFF18> \xF8 |1
+<UFF19> \xF9 |1
+<UFF1A> \x7A |1
+<UFF1B> \x5E |1
+<UFF1C> \x4C |1
+<UFF1D> \x7E |1
+<UFF1E> \x6E |1
+<UFF1F> \x6F |1
+<UFF20> \x80 |1
+<UFF21> \xC1 |1
+<UFF22> \xC2 |1
+<UFF23> \xC3 |1
+<UFF24> \xC4 |1
+<UFF25> \xC5 |1
+<UFF26> \xC6 |1
+<UFF27> \xC7 |1
+<UFF28> \xC8 |1
+<UFF29> \xC9 |1
+<UFF2A> \xD1 |1
+<UFF2B> \xD2 |1
+<UFF2C> \xD3 |1
+<UFF2D> \xD4 |1
+<UFF2E> \xD5 |1
+<UFF2F> \xD6 |1
+<UFF30> \xD7 |1
+<UFF31> \xD8 |1
+<UFF32> \xD9 |1
+<UFF33> \xE2 |1
+<UFF34> \xE3 |1
+<UFF35> \xE4 |1
+<UFF36> \xE5 |1
+<UFF37> \xE6 |1
+<UFF38> \xE7 |1
+<UFF39> \xE8 |1
+<UFF3A> \xE9 |1
+<UFF3B> \x9E |1
+<UFF3C> \xE0 |1
+<UFF3D> \x9F |1
+<UFF3E> \x5F |1
+<UFF3F> \x6D |1
+<UFF40> \x79 |1
+<UFF41> \x81 |1
+<UFF42> \x82 |1
+<UFF43> \x83 |1
+<UFF44> \x84 |1
+<UFF45> \x85 |1
+<UFF46> \x86 |1
+<UFF47> \x87 |1
+<UFF48> \x88 |1
+<UFF49> \x89 |1
+<UFF4A> \x91 |1
+<UFF4B> \x92 |1
+<UFF4C> \x93 |1
+<UFF4D> \x94 |1
+<UFF4E> \x95 |1
+<UFF4F> \x96 |1
+<UFF50> \x97 |1
+<UFF51> \x98 |1
+<UFF52> \x99 |1
+<UFF53> \xA2 |1
+<UFF54> \xA3 |1
+<UFF55> \xA4 |1
+<UFF56> \xA5 |1
+<UFF57> \xA6 |1
+<UFF58> \xA7 |1
+<UFF59> \xA8 |1
+<UFF5A> \xA9 |1
+<UFF5B> \x9C |1
+<UFF5C> \xBB |1
+<UFF5D> \x47 |1
+<UFF5E> \xDC |1
+END CHARMAP
diff --git a/mcs/class/I18N/Rare/ibm-1143.ucm b/mcs/class/I18N/Rare/ibm-1143.ucm
new file mode 100644
index 00000000000..8df99644ba2
--- /dev/null
+++ b/mcs/class/I18N/Rare/ibm-1143.ucm
@@ -0,0 +1,378 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1997-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Fri Nov 10 13:07:48 2000
+#
+# File created by dtcocm version 3.00
+# from source files 44B00477.RPMAP100 and 047744B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-1143"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x3F
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-1143
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x37 |0
+<U0005> \x2D |0
+<U0006> \x2E |0
+<U0007> \x2F |0
+<U0008> \x16 |0
+<U0009> \x05 |0
+<U000A> \x25 |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x3C |0
+<U0015> \x3D |0
+<U0016> \x32 |0
+<U0017> \x26 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x3F |0
+<U001B> \x27 |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x40 |0
+<U0021> \x4F |0
+<U0022> \x7F |0
+<U0023> \x63 |0
+<U0024> \x67 |0
+<U0025> \x6C |0
+<U0026> \x50 |0
+<U0027> \x7D |0
+<U0028> \x4D |0
+<U0029> \x5D |0
+<U002A> \x5C |0
+<U002B> \x4E |0
+<U002C> \x6B |0
+<U002D> \x60 |0
+<U002E> \x4B |0
+<U002F> \x61 |0
+<U0030> \xF0 |0
+<U0031> \xF1 |0
+<U0032> \xF2 |0
+<U0033> \xF3 |0
+<U0034> \xF4 |0
+<U0035> \xF5 |0
+<U0036> \xF6 |0
+<U0037> \xF7 |0
+<U0038> \xF8 |0
+<U0039> \xF9 |0
+<U003A> \x7A |0
+<U003B> \x5E |0
+<U003C> \x4C |0
+<U003D> \x7E |0
+<U003E> \x6E |0
+<U003F> \x6F |0
+<U0040> \xEC |0
+<U0041> \xC1 |0
+<U0042> \xC2 |0
+<U0043> \xC3 |0
+<U0044> \xC4 |0
+<U0045> \xC5 |0
+<U0046> \xC6 |0
+<U0047> \xC7 |0
+<U0048> \xC8 |0
+<U0049> \xC9 |0
+<U004A> \xD1 |0
+<U004B> \xD2 |0
+<U004C> \xD3 |0
+<U004D> \xD4 |0
+<U004E> \xD5 |0
+<U004F> \xD6 |0
+<U0050> \xD7 |0
+<U0051> \xD8 |0
+<U0052> \xD9 |0
+<U0053> \xE2 |0
+<U0054> \xE3 |0
+<U0055> \xE4 |0
+<U0056> \xE5 |0
+<U0057> \xE6 |0
+<U0058> \xE7 |0
+<U0059> \xE8 |0
+<U005A> \xE9 |0
+<U005B> \xB5 |0
+<U005C> \x71 |0
+<U005D> \x9F |0
+<U005E> \x5F |0
+<U005F> \x6D |0
+<U0060> \x51 |0
+<U0061> \x81 |0
+<U0062> \x82 |0
+<U0063> \x83 |0
+<U0064> \x84 |0
+<U0065> \x85 |0
+<U0066> \x86 |0
+<U0067> \x87 |0
+<U0068> \x88 |0
+<U0069> \x89 |0
+<U006A> \x91 |0
+<U006B> \x92 |0
+<U006C> \x93 |0
+<U006D> \x94 |0
+<U006E> \x95 |0
+<U006F> \x96 |0
+<U0070> \x97 |0
+<U0071> \x98 |0
+<U0072> \x99 |0
+<U0073> \xA2 |0
+<U0074> \xA3 |0
+<U0075> \xA4 |0
+<U0076> \xA5 |0
+<U0077> \xA6 |0
+<U0078> \xA7 |0
+<U0079> \xA8 |0
+<U007A> \xA9 |0
+<U007B> \x43 |0
+<U007C> \xBB |0
+<U007D> \x47 |0
+<U007E> \xDC |0
+<U007F> \x07 |0
+<U0080> \x20 |0
+<U0081> \x21 |0
+<U0082> \x22 |0
+<U0083> \x23 |0
+<U0084> \x24 |0
+<U0085> \x15 |0
+<U0086> \x06 |0
+<U0087> \x17 |0
+<U0088> \x28 |0
+<U0089> \x29 |0
+<U008A> \x2A |0
+<U008B> \x2B |0
+<U008C> \x2C |0
+<U008D> \x09 |0
+<U008E> \x0A |0
+<U008F> \x1B |0
+<U0090> \x30 |0
+<U0091> \x31 |0
+<U0092> \x1A |0
+<U0093> \x33 |0
+<U0094> \x34 |0
+<U0095> \x35 |0
+<U0096> \x36 |0
+<U0097> \x08 |0
+<U0098> \x38 |0
+<U0099> \x39 |0
+<U009A> \x3A |0
+<U009B> \x3B |0
+<U009C> \x04 |0
+<U009D> \x14 |0
+<U009E> \x3E |0
+<U009F> \xFF |0
+<U00A0> \x41 |0
+<U00A1> \xAA |0
+<U00A2> \xB0 |0
+<U00A3> \xB1 |0
+<U00A5> \xB2 |0
+<U00A6> \xCC |0
+<U00A7> \x4A |0
+<U00A8> \xBD |0
+<U00A9> \xB4 |0
+<U00AA> \x9A |0
+<U00AB> \x8A |0
+<U00AC> \xBA |0
+<U00AD> \xCA |0
+<U00AE> \xAF |0
+<U00AF> \xBC |0
+<U00B0> \x90 |0
+<U00B1> \x8F |0
+<U00B2> \xEA |0
+<U00B3> \xFA |0
+<U00B4> \xBE |0
+<U00B5> \xA0 |0
+<U00B6> \xB6 |0
+<U00B7> \xB3 |0
+<U00B8> \x9D |0
+<U00B9> \xDA |0
+<U00BA> \x9B |0
+<U00BB> \x8B |0
+<U00BC> \xB7 |0
+<U00BD> \xB8 |0
+<U00BE> \xB9 |0
+<U00BF> \xAB |0
+<U00C0> \x64 |0
+<U00C1> \x65 |0
+<U00C2> \x62 |0
+<U00C3> \x66 |0
+<U00C4> \x7B |0
+<U00C5> \x5B |0
+<U00C6> \x9E |0
+<U00C7> \x68 |0
+<U00C8> \x74 |0
+<U00C9> \xE0 |0
+<U00CA> \x72 |0
+<U00CB> \x73 |0
+<U00CC> \x78 |0
+<U00CD> \x75 |0
+<U00CE> \x76 |0
+<U00CF> \x77 |0
+<U00D0> \xAC |0
+<U00D1> \x69 |0
+<U00D2> \xED |0
+<U00D3> \xEE |0
+<U00D4> \xEB |0
+<U00D5> \xEF |0
+<U00D6> \x7C |0
+<U00D7> \xBF |0
+<U00D8> \x80 |0
+<U00D9> \xFD |0
+<U00DA> \xFE |0
+<U00DB> \xFB |0
+<U00DC> \xFC |0
+<U00DD> \xAD |0
+<U00DE> \xAE |0
+<U00DF> \x59 |0
+<U00E0> \x44 |0
+<U00E1> \x45 |0
+<U00E2> \x42 |0
+<U00E3> \x46 |0
+<U00E4> \xC0 |0
+<U00E5> \xD0 |0
+<U00E6> \x9C |0
+<U00E7> \x48 |0
+<U00E8> \x54 |0
+<U00E9> \x79 |0
+<U00EA> \x52 |0
+<U00EB> \x53 |0
+<U00EC> \x58 |0
+<U00ED> \x55 |0
+<U00EE> \x56 |0
+<U00EF> \x57 |0
+<U00F0> \x8C |0
+<U00F1> \x49 |0
+<U00F2> \xCD |0
+<U00F3> \xCE |0
+<U00F4> \xCB |0
+<U00F5> \xCF |0
+<U00F6> \x6A |0
+<U00F7> \xE1 |0
+<U00F8> \x70 |0
+<U00F9> \xDD |0
+<U00FA> \xDE |0
+<U00FB> \xDB |0
+<U00FC> \xA1 |0
+<U00FD> \x8D |0
+<U00FE> \x8E |0
+<U00FF> \xDF |0
+<U203E> \xBC |1
+<U20AC> \x5A |0
+<UFF01> \x4F |1
+<UFF02> \x7F |1
+<UFF03> \x63 |1
+<UFF04> \x67 |1
+<UFF05> \x6C |1
+<UFF06> \x50 |1
+<UFF07> \x7D |1
+<UFF08> \x4D |1
+<UFF09> \x5D |1
+<UFF0A> \x5C |1
+<UFF0B> \x4E |1
+<UFF0C> \x6B |1
+<UFF0D> \x60 |1
+<UFF0E> \x4B |1
+<UFF0F> \x61 |1
+<UFF10> \xF0 |1
+<UFF11> \xF1 |1
+<UFF12> \xF2 |1
+<UFF13> \xF3 |1
+<UFF14> \xF4 |1
+<UFF15> \xF5 |1
+<UFF16> \xF6 |1
+<UFF17> \xF7 |1
+<UFF18> \xF8 |1
+<UFF19> \xF9 |1
+<UFF1A> \x7A |1
+<UFF1B> \x5E |1
+<UFF1C> \x4C |1
+<UFF1D> \x7E |1
+<UFF1E> \x6E |1
+<UFF1F> \x6F |1
+<UFF20> \xEC |1
+<UFF21> \xC1 |1
+<UFF22> \xC2 |1
+<UFF23> \xC3 |1
+<UFF24> \xC4 |1
+<UFF25> \xC5 |1
+<UFF26> \xC6 |1
+<UFF27> \xC7 |1
+<UFF28> \xC8 |1
+<UFF29> \xC9 |1
+<UFF2A> \xD1 |1
+<UFF2B> \xD2 |1
+<UFF2C> \xD3 |1
+<UFF2D> \xD4 |1
+<UFF2E> \xD5 |1
+<UFF2F> \xD6 |1
+<UFF30> \xD7 |1
+<UFF31> \xD8 |1
+<UFF32> \xD9 |1
+<UFF33> \xE2 |1
+<UFF34> \xE3 |1
+<UFF35> \xE4 |1
+<UFF36> \xE5 |1
+<UFF37> \xE6 |1
+<UFF38> \xE7 |1
+<UFF39> \xE8 |1
+<UFF3A> \xE9 |1
+<UFF3B> \xB5 |1
+<UFF3C> \x71 |1
+<UFF3D> \x9F |1
+<UFF3E> \x5F |1
+<UFF3F> \x6D |1
+<UFF40> \x51 |1
+<UFF41> \x81 |1
+<UFF42> \x82 |1
+<UFF43> \x83 |1
+<UFF44> \x84 |1
+<UFF45> \x85 |1
+<UFF46> \x86 |1
+<UFF47> \x87 |1
+<UFF48> \x88 |1
+<UFF49> \x89 |1
+<UFF4A> \x91 |1
+<UFF4B> \x92 |1
+<UFF4C> \x93 |1
+<UFF4D> \x94 |1
+<UFF4E> \x95 |1
+<UFF4F> \x96 |1
+<UFF50> \x97 |1
+<UFF51> \x98 |1
+<UFF52> \x99 |1
+<UFF53> \xA2 |1
+<UFF54> \xA3 |1
+<UFF55> \xA4 |1
+<UFF56> \xA5 |1
+<UFF57> \xA6 |1
+<UFF58> \xA7 |1
+<UFF59> \xA8 |1
+<UFF5A> \xA9 |1
+<UFF5B> \x43 |1
+<UFF5C> \xBB |1
+<UFF5D> \x47 |1
+<UFF5E> \xDC |1
+END CHARMAP
diff --git a/mcs/class/I18N/Rare/ibm-1144.ucm b/mcs/class/I18N/Rare/ibm-1144.ucm
new file mode 100644
index 00000000000..4660f61c8c4
--- /dev/null
+++ b/mcs/class/I18N/Rare/ibm-1144.ucm
@@ -0,0 +1,378 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1997-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Fri Nov 10 13:07:48 2000
+#
+# File created by dtcocm version 3.00
+# from source files 44B00478.RPMAP100 and 047844B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-1144"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x3F
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-1144
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x37 |0
+<U0005> \x2D |0
+<U0006> \x2E |0
+<U0007> \x2F |0
+<U0008> \x16 |0
+<U0009> \x05 |0
+<U000A> \x25 |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x3C |0
+<U0015> \x3D |0
+<U0016> \x32 |0
+<U0017> \x26 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x3F |0
+<U001B> \x27 |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x40 |0
+<U0021> \x4F |0
+<U0022> \x7F |0
+<U0023> \xB1 |0
+<U0024> \x5B |0
+<U0025> \x6C |0
+<U0026> \x50 |0
+<U0027> \x7D |0
+<U0028> \x4D |0
+<U0029> \x5D |0
+<U002A> \x5C |0
+<U002B> \x4E |0
+<U002C> \x6B |0
+<U002D> \x60 |0
+<U002E> \x4B |0
+<U002F> \x61 |0
+<U0030> \xF0 |0
+<U0031> \xF1 |0
+<U0032> \xF2 |0
+<U0033> \xF3 |0
+<U0034> \xF4 |0
+<U0035> \xF5 |0
+<U0036> \xF6 |0
+<U0037> \xF7 |0
+<U0038> \xF8 |0
+<U0039> \xF9 |0
+<U003A> \x7A |0
+<U003B> \x5E |0
+<U003C> \x4C |0
+<U003D> \x7E |0
+<U003E> \x6E |0
+<U003F> \x6F |0
+<U0040> \xB5 |0
+<U0041> \xC1 |0
+<U0042> \xC2 |0
+<U0043> \xC3 |0
+<U0044> \xC4 |0
+<U0045> \xC5 |0
+<U0046> \xC6 |0
+<U0047> \xC7 |0
+<U0048> \xC8 |0
+<U0049> \xC9 |0
+<U004A> \xD1 |0
+<U004B> \xD2 |0
+<U004C> \xD3 |0
+<U004D> \xD4 |0
+<U004E> \xD5 |0
+<U004F> \xD6 |0
+<U0050> \xD7 |0
+<U0051> \xD8 |0
+<U0052> \xD9 |0
+<U0053> \xE2 |0
+<U0054> \xE3 |0
+<U0055> \xE4 |0
+<U0056> \xE5 |0
+<U0057> \xE6 |0
+<U0058> \xE7 |0
+<U0059> \xE8 |0
+<U005A> \xE9 |0
+<U005B> \x90 |0
+<U005C> \x48 |0
+<U005D> \x51 |0
+<U005E> \x5F |0
+<U005F> \x6D |0
+<U0060> \xDD |0
+<U0061> \x81 |0
+<U0062> \x82 |0
+<U0063> \x83 |0
+<U0064> \x84 |0
+<U0065> \x85 |0
+<U0066> \x86 |0
+<U0067> \x87 |0
+<U0068> \x88 |0
+<U0069> \x89 |0
+<U006A> \x91 |0
+<U006B> \x92 |0
+<U006C> \x93 |0
+<U006D> \x94 |0
+<U006E> \x95 |0
+<U006F> \x96 |0
+<U0070> \x97 |0
+<U0071> \x98 |0
+<U0072> \x99 |0
+<U0073> \xA2 |0
+<U0074> \xA3 |0
+<U0075> \xA4 |0
+<U0076> \xA5 |0
+<U0077> \xA6 |0
+<U0078> \xA7 |0
+<U0079> \xA8 |0
+<U007A> \xA9 |0
+<U007B> \x44 |0
+<U007C> \xBB |0
+<U007D> \x54 |0
+<U007E> \x58 |0
+<U007F> \x07 |0
+<U0080> \x20 |0
+<U0081> \x21 |0
+<U0082> \x22 |0
+<U0083> \x23 |0
+<U0084> \x24 |0
+<U0085> \x15 |0
+<U0086> \x06 |0
+<U0087> \x17 |0
+<U0088> \x28 |0
+<U0089> \x29 |0
+<U008A> \x2A |0
+<U008B> \x2B |0
+<U008C> \x2C |0
+<U008D> \x09 |0
+<U008E> \x0A |0
+<U008F> \x1B |0
+<U0090> \x30 |0
+<U0091> \x31 |0
+<U0092> \x1A |0
+<U0093> \x33 |0
+<U0094> \x34 |0
+<U0095> \x35 |0
+<U0096> \x36 |0
+<U0097> \x08 |0
+<U0098> \x38 |0
+<U0099> \x39 |0
+<U009A> \x3A |0
+<U009B> \x3B |0
+<U009C> \x04 |0
+<U009D> \x14 |0
+<U009E> \x3E |0
+<U009F> \xFF |0
+<U00A0> \x41 |0
+<U00A1> \xAA |0
+<U00A2> \xB0 |0
+<U00A3> \x7B |0
+<U00A5> \xB2 |0
+<U00A6> \xCD |0
+<U00A7> \x7C |0
+<U00A8> \xBD |0
+<U00A9> \xB4 |0
+<U00AA> \x9A |0
+<U00AB> \x8A |0
+<U00AC> \xBA |0
+<U00AD> \xCA |0
+<U00AE> \xAF |0
+<U00AF> \xBC |0
+<U00B0> \x4A |0
+<U00B1> \x8F |0
+<U00B2> \xEA |0
+<U00B3> \xFA |0
+<U00B4> \xBE |0
+<U00B5> \xA0 |0
+<U00B6> \xB6 |0
+<U00B7> \xB3 |0
+<U00B8> \x9D |0
+<U00B9> \xDA |0
+<U00BA> \x9B |0
+<U00BB> \x8B |0
+<U00BC> \xB7 |0
+<U00BD> \xB8 |0
+<U00BE> \xB9 |0
+<U00BF> \xAB |0
+<U00C0> \x64 |0
+<U00C1> \x65 |0
+<U00C2> \x62 |0
+<U00C3> \x66 |0
+<U00C4> \x63 |0
+<U00C5> \x67 |0
+<U00C6> \x9E |0
+<U00C7> \x68 |0
+<U00C8> \x74 |0
+<U00C9> \x71 |0
+<U00CA> \x72 |0
+<U00CB> \x73 |0
+<U00CC> \x78 |0
+<U00CD> \x75 |0
+<U00CE> \x76 |0
+<U00CF> \x77 |0
+<U00D0> \xAC |0
+<U00D1> \x69 |0
+<U00D2> \xED |0
+<U00D3> \xEE |0
+<U00D4> \xEB |0
+<U00D5> \xEF |0
+<U00D6> \xEC |0
+<U00D7> \xBF |0
+<U00D8> \x80 |0
+<U00D9> \xFD |0
+<U00DA> \xFE |0
+<U00DB> \xFB |0
+<U00DC> \xFC |0
+<U00DD> \xAD |0
+<U00DE> \xAE |0
+<U00DF> \x59 |0
+<U00E0> \xC0 |0
+<U00E1> \x45 |0
+<U00E2> \x42 |0
+<U00E3> \x46 |0
+<U00E4> \x43 |0
+<U00E5> \x47 |0
+<U00E6> \x9C |0
+<U00E7> \xE0 |0
+<U00E8> \xD0 |0
+<U00E9> \x5A |0
+<U00EA> \x52 |0
+<U00EB> \x53 |0
+<U00EC> \xA1 |0
+<U00ED> \x55 |0
+<U00EE> \x56 |0
+<U00EF> \x57 |0
+<U00F0> \x8C |0
+<U00F1> \x49 |0
+<U00F2> \x6A |0
+<U00F3> \xCE |0
+<U00F4> \xCB |0
+<U00F5> \xCF |0
+<U00F6> \xCC |0
+<U00F7> \xE1 |0
+<U00F8> \x70 |0
+<U00F9> \x79 |0
+<U00FA> \xDE |0
+<U00FB> \xDB |0
+<U00FC> \xDC |0
+<U00FD> \x8D |0
+<U00FE> \x8E |0
+<U00FF> \xDF |0
+<U203E> \xBC |1
+<U20AC> \x9F |0
+<UFF01> \x4F |1
+<UFF02> \x7F |1
+<UFF03> \xB1 |1
+<UFF04> \x5B |1
+<UFF05> \x6C |1
+<UFF06> \x50 |1
+<UFF07> \x7D |1
+<UFF08> \x4D |1
+<UFF09> \x5D |1
+<UFF0A> \x5C |1
+<UFF0B> \x4E |1
+<UFF0C> \x6B |1
+<UFF0D> \x60 |1
+<UFF0E> \x4B |1
+<UFF0F> \x61 |1
+<UFF10> \xF0 |1
+<UFF11> \xF1 |1
+<UFF12> \xF2 |1
+<UFF13> \xF3 |1
+<UFF14> \xF4 |1
+<UFF15> \xF5 |1
+<UFF16> \xF6 |1
+<UFF17> \xF7 |1
+<UFF18> \xF8 |1
+<UFF19> \xF9 |1
+<UFF1A> \x7A |1
+<UFF1B> \x5E |1
+<UFF1C> \x4C |1
+<UFF1D> \x7E |1
+<UFF1E> \x6E |1
+<UFF1F> \x6F |1
+<UFF20> \xB5 |1
+<UFF21> \xC1 |1
+<UFF22> \xC2 |1
+<UFF23> \xC3 |1
+<UFF24> \xC4 |1
+<UFF25> \xC5 |1
+<UFF26> \xC6 |1
+<UFF27> \xC7 |1
+<UFF28> \xC8 |1
+<UFF29> \xC9 |1
+<UFF2A> \xD1 |1
+<UFF2B> \xD2 |1
+<UFF2C> \xD3 |1
+<UFF2D> \xD4 |1
+<UFF2E> \xD5 |1
+<UFF2F> \xD6 |1
+<UFF30> \xD7 |1
+<UFF31> \xD8 |1
+<UFF32> \xD9 |1
+<UFF33> \xE2 |1
+<UFF34> \xE3 |1
+<UFF35> \xE4 |1
+<UFF36> \xE5 |1
+<UFF37> \xE6 |1
+<UFF38> \xE7 |1
+<UFF39> \xE8 |1
+<UFF3A> \xE9 |1
+<UFF3B> \x90 |1
+<UFF3C> \x48 |1
+<UFF3D> \x51 |1
+<UFF3E> \x5F |1
+<UFF3F> \x6D |1
+<UFF40> \xDD |1
+<UFF41> \x81 |1
+<UFF42> \x82 |1
+<UFF43> \x83 |1
+<UFF44> \x84 |1
+<UFF45> \x85 |1
+<UFF46> \x86 |1
+<UFF47> \x87 |1
+<UFF48> \x88 |1
+<UFF49> \x89 |1
+<UFF4A> \x91 |1
+<UFF4B> \x92 |1
+<UFF4C> \x93 |1
+<UFF4D> \x94 |1
+<UFF4E> \x95 |1
+<UFF4F> \x96 |1
+<UFF50> \x97 |1
+<UFF51> \x98 |1
+<UFF52> \x99 |1
+<UFF53> \xA2 |1
+<UFF54> \xA3 |1
+<UFF55> \xA4 |1
+<UFF56> \xA5 |1
+<UFF57> \xA6 |1
+<UFF58> \xA7 |1
+<UFF59> \xA8 |1
+<UFF5A> \xA9 |1
+<UFF5B> \x44 |1
+<UFF5C> \xBB |1
+<UFF5D> \x54 |1
+<UFF5E> \x58 |1
+END CHARMAP
diff --git a/mcs/class/I18N/Rare/ibm-1145.ucm b/mcs/class/I18N/Rare/ibm-1145.ucm
new file mode 100644
index 00000000000..7f60efe219b
--- /dev/null
+++ b/mcs/class/I18N/Rare/ibm-1145.ucm
@@ -0,0 +1,378 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1997-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Fri Nov 10 13:07:48 2000
+#
+# File created by dtcocm version 3.00
+# from source files 44B00479.RPMAP100 and 047944B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-1145"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x3F
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-1145
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x37 |0
+<U0005> \x2D |0
+<U0006> \x2E |0
+<U0007> \x2F |0
+<U0008> \x16 |0
+<U0009> \x05 |0
+<U000A> \x25 |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x3C |0
+<U0015> \x3D |0
+<U0016> \x32 |0
+<U0017> \x26 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x3F |0
+<U001B> \x27 |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x40 |0
+<U0021> \xBB |0
+<U0022> \x7F |0
+<U0023> \x69 |0
+<U0024> \x5B |0
+<U0025> \x6C |0
+<U0026> \x50 |0
+<U0027> \x7D |0
+<U0028> \x4D |0
+<U0029> \x5D |0
+<U002A> \x5C |0
+<U002B> \x4E |0
+<U002C> \x6B |0
+<U002D> \x60 |0
+<U002E> \x4B |0
+<U002F> \x61 |0
+<U0030> \xF0 |0
+<U0031> \xF1 |0
+<U0032> \xF2 |0
+<U0033> \xF3 |0
+<U0034> \xF4 |0
+<U0035> \xF5 |0
+<U0036> \xF6 |0
+<U0037> \xF7 |0
+<U0038> \xF8 |0
+<U0039> \xF9 |0
+<U003A> \x7A |0
+<U003B> \x5E |0
+<U003C> \x4C |0
+<U003D> \x7E |0
+<U003E> \x6E |0
+<U003F> \x6F |0
+<U0040> \x7C |0
+<U0041> \xC1 |0
+<U0042> \xC2 |0
+<U0043> \xC3 |0
+<U0044> \xC4 |0
+<U0045> \xC5 |0
+<U0046> \xC6 |0
+<U0047> \xC7 |0
+<U0048> \xC8 |0
+<U0049> \xC9 |0
+<U004A> \xD1 |0
+<U004B> \xD2 |0
+<U004C> \xD3 |0
+<U004D> \xD4 |0
+<U004E> \xD5 |0
+<U004F> \xD6 |0
+<U0050> \xD7 |0
+<U0051> \xD8 |0
+<U0052> \xD9 |0
+<U0053> \xE2 |0
+<U0054> \xE3 |0
+<U0055> \xE4 |0
+<U0056> \xE5 |0
+<U0057> \xE6 |0
+<U0058> \xE7 |0
+<U0059> \xE8 |0
+<U005A> \xE9 |0
+<U005B> \x4A |0
+<U005C> \xE0 |0
+<U005D> \x5A |0
+<U005E> \xBA |0
+<U005F> \x6D |0
+<U0060> \x79 |0
+<U0061> \x81 |0
+<U0062> \x82 |0
+<U0063> \x83 |0
+<U0064> \x84 |0
+<U0065> \x85 |0
+<U0066> \x86 |0
+<U0067> \x87 |0
+<U0068> \x88 |0
+<U0069> \x89 |0
+<U006A> \x91 |0
+<U006B> \x92 |0
+<U006C> \x93 |0
+<U006D> \x94 |0
+<U006E> \x95 |0
+<U006F> \x96 |0
+<U0070> \x97 |0
+<U0071> \x98 |0
+<U0072> \x99 |0
+<U0073> \xA2 |0
+<U0074> \xA3 |0
+<U0075> \xA4 |0
+<U0076> \xA5 |0
+<U0077> \xA6 |0
+<U0078> \xA7 |0
+<U0079> \xA8 |0
+<U007A> \xA9 |0
+<U007B> \xC0 |0
+<U007C> \x4F |0
+<U007D> \xD0 |0
+<U007E> \xBD |0
+<U007F> \x07 |0
+<U0080> \x20 |0
+<U0081> \x21 |0
+<U0082> \x22 |0
+<U0083> \x23 |0
+<U0084> \x24 |0
+<U0085> \x15 |0
+<U0086> \x06 |0
+<U0087> \x17 |0
+<U0088> \x28 |0
+<U0089> \x29 |0
+<U008A> \x2A |0
+<U008B> \x2B |0
+<U008C> \x2C |0
+<U008D> \x09 |0
+<U008E> \x0A |0
+<U008F> \x1B |0
+<U0090> \x30 |0
+<U0091> \x31 |0
+<U0092> \x1A |0
+<U0093> \x33 |0
+<U0094> \x34 |0
+<U0095> \x35 |0
+<U0096> \x36 |0
+<U0097> \x08 |0
+<U0098> \x38 |0
+<U0099> \x39 |0
+<U009A> \x3A |0
+<U009B> \x3B |0
+<U009C> \x04 |0
+<U009D> \x14 |0
+<U009E> \x3E |0
+<U009F> \xFF |0
+<U00A0> \x41 |0
+<U00A1> \xAA |0
+<U00A2> \xB0 |0
+<U00A3> \xB1 |0
+<U00A5> \xB2 |0
+<U00A6> \x49 |0
+<U00A7> \xB5 |0
+<U00A8> \xA1 |0
+<U00A9> \xB4 |0
+<U00AA> \x9A |0
+<U00AB> \x8A |0
+<U00AC> \x5F |0
+<U00AD> \xCA |0
+<U00AE> \xAF |0
+<U00AF> \xBC |0
+<U00B0> \x90 |0
+<U00B1> \x8F |0
+<U00B2> \xEA |0
+<U00B3> \xFA |0
+<U00B4> \xBE |0
+<U00B5> \xA0 |0
+<U00B6> \xB6 |0
+<U00B7> \xB3 |0
+<U00B8> \x9D |0
+<U00B9> \xDA |0
+<U00BA> \x9B |0
+<U00BB> \x8B |0
+<U00BC> \xB7 |0
+<U00BD> \xB8 |0
+<U00BE> \xB9 |0
+<U00BF> \xAB |0
+<U00C0> \x64 |0
+<U00C1> \x65 |0
+<U00C2> \x62 |0
+<U00C3> \x66 |0
+<U00C4> \x63 |0
+<U00C5> \x67 |0
+<U00C6> \x9E |0
+<U00C7> \x68 |0
+<U00C8> \x74 |0
+<U00C9> \x71 |0
+<U00CA> \x72 |0
+<U00CB> \x73 |0
+<U00CC> \x78 |0
+<U00CD> \x75 |0
+<U00CE> \x76 |0
+<U00CF> \x77 |0
+<U00D0> \xAC |0
+<U00D1> \x7B |0
+<U00D2> \xED |0
+<U00D3> \xEE |0
+<U00D4> \xEB |0
+<U00D5> \xEF |0
+<U00D6> \xEC |0
+<U00D7> \xBF |0
+<U00D8> \x80 |0
+<U00D9> \xFD |0
+<U00DA> \xFE |0
+<U00DB> \xFB |0
+<U00DC> \xFC |0
+<U00DD> \xAD |0
+<U00DE> \xAE |0
+<U00DF> \x59 |0
+<U00E0> \x44 |0
+<U00E1> \x45 |0
+<U00E2> \x42 |0
+<U00E3> \x46 |0
+<U00E4> \x43 |0
+<U00E5> \x47 |0
+<U00E6> \x9C |0
+<U00E7> \x48 |0
+<U00E8> \x54 |0
+<U00E9> \x51 |0
+<U00EA> \x52 |0
+<U00EB> \x53 |0
+<U00EC> \x58 |0
+<U00ED> \x55 |0
+<U00EE> \x56 |0
+<U00EF> \x57 |0
+<U00F0> \x8C |0
+<U00F1> \x6A |0
+<U00F2> \xCD |0
+<U00F3> \xCE |0
+<U00F4> \xCB |0
+<U00F5> \xCF |0
+<U00F6> \xCC |0
+<U00F7> \xE1 |0
+<U00F8> \x70 |0
+<U00F9> \xDD |0
+<U00FA> \xDE |0
+<U00FB> \xDB |0
+<U00FC> \xDC |0
+<U00FD> \x8D |0
+<U00FE> \x8E |0
+<U00FF> \xDF |0
+<U203E> \xBC |1
+<U20AC> \x9F |0
+<UFF01> \xBB |1
+<UFF02> \x7F |1
+<UFF03> \x69 |1
+<UFF04> \x5B |1
+<UFF05> \x6C |1
+<UFF06> \x50 |1
+<UFF07> \x7D |1
+<UFF08> \x4D |1
+<UFF09> \x5D |1
+<UFF0A> \x5C |1
+<UFF0B> \x4E |1
+<UFF0C> \x6B |1
+<UFF0D> \x60 |1
+<UFF0E> \x4B |1
+<UFF0F> \x61 |1
+<UFF10> \xF0 |1
+<UFF11> \xF1 |1
+<UFF12> \xF2 |1
+<UFF13> \xF3 |1
+<UFF14> \xF4 |1
+<UFF15> \xF5 |1
+<UFF16> \xF6 |1
+<UFF17> \xF7 |1
+<UFF18> \xF8 |1
+<UFF19> \xF9 |1
+<UFF1A> \x7A |1
+<UFF1B> \x5E |1
+<UFF1C> \x4C |1
+<UFF1D> \x7E |1
+<UFF1E> \x6E |1
+<UFF1F> \x6F |1
+<UFF20> \x7C |1
+<UFF21> \xC1 |1
+<UFF22> \xC2 |1
+<UFF23> \xC3 |1
+<UFF24> \xC4 |1
+<UFF25> \xC5 |1
+<UFF26> \xC6 |1
+<UFF27> \xC7 |1
+<UFF28> \xC8 |1
+<UFF29> \xC9 |1
+<UFF2A> \xD1 |1
+<UFF2B> \xD2 |1
+<UFF2C> \xD3 |1
+<UFF2D> \xD4 |1
+<UFF2E> \xD5 |1
+<UFF2F> \xD6 |1
+<UFF30> \xD7 |1
+<UFF31> \xD8 |1
+<UFF32> \xD9 |1
+<UFF33> \xE2 |1
+<UFF34> \xE3 |1
+<UFF35> \xE4 |1
+<UFF36> \xE5 |1
+<UFF37> \xE6 |1
+<UFF38> \xE7 |1
+<UFF39> \xE8 |1
+<UFF3A> \xE9 |1
+<UFF3B> \x4A |1
+<UFF3C> \xE0 |1
+<UFF3D> \x5A |1
+<UFF3E> \xBA |1
+<UFF3F> \x6D |1
+<UFF40> \x79 |1
+<UFF41> \x81 |1
+<UFF42> \x82 |1
+<UFF43> \x83 |1
+<UFF44> \x84 |1
+<UFF45> \x85 |1
+<UFF46> \x86 |1
+<UFF47> \x87 |1
+<UFF48> \x88 |1
+<UFF49> \x89 |1
+<UFF4A> \x91 |1
+<UFF4B> \x92 |1
+<UFF4C> \x93 |1
+<UFF4D> \x94 |1
+<UFF4E> \x95 |1
+<UFF4F> \x96 |1
+<UFF50> \x97 |1
+<UFF51> \x98 |1
+<UFF52> \x99 |1
+<UFF53> \xA2 |1
+<UFF54> \xA3 |1
+<UFF55> \xA4 |1
+<UFF56> \xA5 |1
+<UFF57> \xA6 |1
+<UFF58> \xA7 |1
+<UFF59> \xA8 |1
+<UFF5A> \xA9 |1
+<UFF5B> \xC0 |1
+<UFF5C> \x4F |1
+<UFF5D> \xD0 |1
+<UFF5E> \xBD |1
+END CHARMAP
diff --git a/mcs/class/I18N/Rare/ibm-1146.ucm b/mcs/class/I18N/Rare/ibm-1146.ucm
new file mode 100644
index 00000000000..5129f581810
--- /dev/null
+++ b/mcs/class/I18N/Rare/ibm-1146.ucm
@@ -0,0 +1,378 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1997-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Fri Nov 10 13:07:48 2000
+#
+# File created by dtcocm version 3.00
+# from source files 44B0047A.RPMAP100 and 047A44B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-1146"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x3F
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-1146
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x37 |0
+<U0005> \x2D |0
+<U0006> \x2E |0
+<U0007> \x2F |0
+<U0008> \x16 |0
+<U0009> \x05 |0
+<U000A> \x25 |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x3C |0
+<U0015> \x3D |0
+<U0016> \x32 |0
+<U0017> \x26 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x3F |0
+<U001B> \x27 |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x40 |0
+<U0021> \x5A |0
+<U0022> \x7F |0
+<U0023> \x7B |0
+<U0024> \x4A |0
+<U0025> \x6C |0
+<U0026> \x50 |0
+<U0027> \x7D |0
+<U0028> \x4D |0
+<U0029> \x5D |0
+<U002A> \x5C |0
+<U002B> \x4E |0
+<U002C> \x6B |0
+<U002D> \x60 |0
+<U002E> \x4B |0
+<U002F> \x61 |0
+<U0030> \xF0 |0
+<U0031> \xF1 |0
+<U0032> \xF2 |0
+<U0033> \xF3 |0
+<U0034> \xF4 |0
+<U0035> \xF5 |0
+<U0036> \xF6 |0
+<U0037> \xF7 |0
+<U0038> \xF8 |0
+<U0039> \xF9 |0
+<U003A> \x7A |0
+<U003B> \x5E |0
+<U003C> \x4C |0
+<U003D> \x7E |0
+<U003E> \x6E |0
+<U003F> \x6F |0
+<U0040> \x7C |0
+<U0041> \xC1 |0
+<U0042> \xC2 |0
+<U0043> \xC3 |0
+<U0044> \xC4 |0
+<U0045> \xC5 |0
+<U0046> \xC6 |0
+<U0047> \xC7 |0
+<U0048> \xC8 |0
+<U0049> \xC9 |0
+<U004A> \xD1 |0
+<U004B> \xD2 |0
+<U004C> \xD3 |0
+<U004D> \xD4 |0
+<U004E> \xD5 |0
+<U004F> \xD6 |0
+<U0050> \xD7 |0
+<U0051> \xD8 |0
+<U0052> \xD9 |0
+<U0053> \xE2 |0
+<U0054> \xE3 |0
+<U0055> \xE4 |0
+<U0056> \xE5 |0
+<U0057> \xE6 |0
+<U0058> \xE7 |0
+<U0059> \xE8 |0
+<U005A> \xE9 |0
+<U005B> \xB1 |0
+<U005C> \xE0 |0
+<U005D> \xBB |0
+<U005E> \xBA |0
+<U005F> \x6D |0
+<U0060> \x79 |0
+<U0061> \x81 |0
+<U0062> \x82 |0
+<U0063> \x83 |0
+<U0064> \x84 |0
+<U0065> \x85 |0
+<U0066> \x86 |0
+<U0067> \x87 |0
+<U0068> \x88 |0
+<U0069> \x89 |0
+<U006A> \x91 |0
+<U006B> \x92 |0
+<U006C> \x93 |0
+<U006D> \x94 |0
+<U006E> \x95 |0
+<U006F> \x96 |0
+<U0070> \x97 |0
+<U0071> \x98 |0
+<U0072> \x99 |0
+<U0073> \xA2 |0
+<U0074> \xA3 |0
+<U0075> \xA4 |0
+<U0076> \xA5 |0
+<U0077> \xA6 |0
+<U0078> \xA7 |0
+<U0079> \xA8 |0
+<U007A> \xA9 |0
+<U007B> \xC0 |0
+<U007C> \x4F |0
+<U007D> \xD0 |0
+<U007E> \xBC |0
+<U007F> \x07 |0
+<U0080> \x20 |0
+<U0081> \x21 |0
+<U0082> \x22 |0
+<U0083> \x23 |0
+<U0084> \x24 |0
+<U0085> \x15 |0
+<U0086> \x06 |0
+<U0087> \x17 |0
+<U0088> \x28 |0
+<U0089> \x29 |0
+<U008A> \x2A |0
+<U008B> \x2B |0
+<U008C> \x2C |0
+<U008D> \x09 |0
+<U008E> \x0A |0
+<U008F> \x1B |0
+<U0090> \x30 |0
+<U0091> \x31 |0
+<U0092> \x1A |0
+<U0093> \x33 |0
+<U0094> \x34 |0
+<U0095> \x35 |0
+<U0096> \x36 |0
+<U0097> \x08 |0
+<U0098> \x38 |0
+<U0099> \x39 |0
+<U009A> \x3A |0
+<U009B> \x3B |0
+<U009C> \x04 |0
+<U009D> \x14 |0
+<U009E> \x3E |0
+<U009F> \xFF |0
+<U00A0> \x41 |0
+<U00A1> \xAA |0
+<U00A2> \xB0 |0
+<U00A3> \x5B |0
+<U00A5> \xB2 |0
+<U00A6> \x6A |0
+<U00A7> \xB5 |0
+<U00A8> \xBD |0
+<U00A9> \xB4 |0
+<U00AA> \x9A |0
+<U00AB> \x8A |0
+<U00AC> \x5F |0
+<U00AD> \xCA |0
+<U00AE> \xAF |0
+<U00AF> \xA1 |0
+<U00B0> \x90 |0
+<U00B1> \x8F |0
+<U00B2> \xEA |0
+<U00B3> \xFA |0
+<U00B4> \xBE |0
+<U00B5> \xA0 |0
+<U00B6> \xB6 |0
+<U00B7> \xB3 |0
+<U00B8> \x9D |0
+<U00B9> \xDA |0
+<U00BA> \x9B |0
+<U00BB> \x8B |0
+<U00BC> \xB7 |0
+<U00BD> \xB8 |0
+<U00BE> \xB9 |0
+<U00BF> \xAB |0
+<U00C0> \x64 |0
+<U00C1> \x65 |0
+<U00C2> \x62 |0
+<U00C3> \x66 |0
+<U00C4> \x63 |0
+<U00C5> \x67 |0
+<U00C6> \x9E |0
+<U00C7> \x68 |0
+<U00C8> \x74 |0
+<U00C9> \x71 |0
+<U00CA> \x72 |0
+<U00CB> \x73 |0
+<U00CC> \x78 |0
+<U00CD> \x75 |0
+<U00CE> \x76 |0
+<U00CF> \x77 |0
+<U00D0> \xAC |0
+<U00D1> \x69 |0
+<U00D2> \xED |0
+<U00D3> \xEE |0
+<U00D4> \xEB |0
+<U00D5> \xEF |0
+<U00D6> \xEC |0
+<U00D7> \xBF |0
+<U00D8> \x80 |0
+<U00D9> \xFD |0
+<U00DA> \xFE |0
+<U00DB> \xFB |0
+<U00DC> \xFC |0
+<U00DD> \xAD |0
+<U00DE> \xAE |0
+<U00DF> \x59 |0
+<U00E0> \x44 |0
+<U00E1> \x45 |0
+<U00E2> \x42 |0
+<U00E3> \x46 |0
+<U00E4> \x43 |0
+<U00E5> \x47 |0
+<U00E6> \x9C |0
+<U00E7> \x48 |0
+<U00E8> \x54 |0
+<U00E9> \x51 |0
+<U00EA> \x52 |0
+<U00EB> \x53 |0
+<U00EC> \x58 |0
+<U00ED> \x55 |0
+<U00EE> \x56 |0
+<U00EF> \x57 |0
+<U00F0> \x8C |0
+<U00F1> \x49 |0
+<U00F2> \xCD |0
+<U00F3> \xCE |0
+<U00F4> \xCB |0
+<U00F5> \xCF |0
+<U00F6> \xCC |0
+<U00F7> \xE1 |0
+<U00F8> \x70 |0
+<U00F9> \xDD |0
+<U00FA> \xDE |0
+<U00FB> \xDB |0
+<U00FC> \xDC |0
+<U00FD> \x8D |0
+<U00FE> \x8E |0
+<U00FF> \xDF |0
+<U203E> \xA1 |1
+<U20AC> \x9F |0
+<UFF01> \x5A |1
+<UFF02> \x7F |1
+<UFF03> \x7B |1
+<UFF04> \x4A |1
+<UFF05> \x6C |1
+<UFF06> \x50 |1
+<UFF07> \x7D |1
+<UFF08> \x4D |1
+<UFF09> \x5D |1
+<UFF0A> \x5C |1
+<UFF0B> \x4E |1
+<UFF0C> \x6B |1
+<UFF0D> \x60 |1
+<UFF0E> \x4B |1
+<UFF0F> \x61 |1
+<UFF10> \xF0 |1
+<UFF11> \xF1 |1
+<UFF12> \xF2 |1
+<UFF13> \xF3 |1
+<UFF14> \xF4 |1
+<UFF15> \xF5 |1
+<UFF16> \xF6 |1
+<UFF17> \xF7 |1
+<UFF18> \xF8 |1
+<UFF19> \xF9 |1
+<UFF1A> \x7A |1
+<UFF1B> \x5E |1
+<UFF1C> \x4C |1
+<UFF1D> \x7E |1
+<UFF1E> \x6E |1
+<UFF1F> \x6F |1
+<UFF20> \x7C |1
+<UFF21> \xC1 |1
+<UFF22> \xC2 |1
+<UFF23> \xC3 |1
+<UFF24> \xC4 |1
+<UFF25> \xC5 |1
+<UFF26> \xC6 |1
+<UFF27> \xC7 |1
+<UFF28> \xC8 |1
+<UFF29> \xC9 |1
+<UFF2A> \xD1 |1
+<UFF2B> \xD2 |1
+<UFF2C> \xD3 |1
+<UFF2D> \xD4 |1
+<UFF2E> \xD5 |1
+<UFF2F> \xD6 |1
+<UFF30> \xD7 |1
+<UFF31> \xD8 |1
+<UFF32> \xD9 |1
+<UFF33> \xE2 |1
+<UFF34> \xE3 |1
+<UFF35> \xE4 |1
+<UFF36> \xE5 |1
+<UFF37> \xE6 |1
+<UFF38> \xE7 |1
+<UFF39> \xE8 |1
+<UFF3A> \xE9 |1
+<UFF3B> \xB1 |1
+<UFF3C> \xE0 |1
+<UFF3D> \xBB |1
+<UFF3E> \xBA |1
+<UFF3F> \x6D |1
+<UFF40> \x79 |1
+<UFF41> \x81 |1
+<UFF42> \x82 |1
+<UFF43> \x83 |1
+<UFF44> \x84 |1
+<UFF45> \x85 |1
+<UFF46> \x86 |1
+<UFF47> \x87 |1
+<UFF48> \x88 |1
+<UFF49> \x89 |1
+<UFF4A> \x91 |1
+<UFF4B> \x92 |1
+<UFF4C> \x93 |1
+<UFF4D> \x94 |1
+<UFF4E> \x95 |1
+<UFF4F> \x96 |1
+<UFF50> \x97 |1
+<UFF51> \x98 |1
+<UFF52> \x99 |1
+<UFF53> \xA2 |1
+<UFF54> \xA3 |1
+<UFF55> \xA4 |1
+<UFF56> \xA5 |1
+<UFF57> \xA6 |1
+<UFF58> \xA7 |1
+<UFF59> \xA8 |1
+<UFF5A> \xA9 |1
+<UFF5B> \xC0 |1
+<UFF5C> \x4F |1
+<UFF5D> \xD0 |1
+<UFF5E> \xBC |1
+END CHARMAP
diff --git a/mcs/class/I18N/Rare/ibm-1147.ucm b/mcs/class/I18N/Rare/ibm-1147.ucm
new file mode 100644
index 00000000000..f4d62bcb64d
--- /dev/null
+++ b/mcs/class/I18N/Rare/ibm-1147.ucm
@@ -0,0 +1,378 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1997-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Fri Nov 10 13:07:48 2000
+#
+# File created by dtcocm version 3.00
+# from source files 44B0047B.RPMAP100 and 047B44B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-1147"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x3F
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-1147
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x37 |0
+<U0005> \x2D |0
+<U0006> \x2E |0
+<U0007> \x2F |0
+<U0008> \x16 |0
+<U0009> \x05 |0
+<U000A> \x25 |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x3C |0
+<U0015> \x3D |0
+<U0016> \x32 |0
+<U0017> \x26 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x3F |0
+<U001B> \x27 |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x40 |0
+<U0021> \x4F |0
+<U0022> \x7F |0
+<U0023> \xB1 |0
+<U0024> \x5B |0
+<U0025> \x6C |0
+<U0026> \x50 |0
+<U0027> \x7D |0
+<U0028> \x4D |0
+<U0029> \x5D |0
+<U002A> \x5C |0
+<U002B> \x4E |0
+<U002C> \x6B |0
+<U002D> \x60 |0
+<U002E> \x4B |0
+<U002F> \x61 |0
+<U0030> \xF0 |0
+<U0031> \xF1 |0
+<U0032> \xF2 |0
+<U0033> \xF3 |0
+<U0034> \xF4 |0
+<U0035> \xF5 |0
+<U0036> \xF6 |0
+<U0037> \xF7 |0
+<U0038> \xF8 |0
+<U0039> \xF9 |0
+<U003A> \x7A |0
+<U003B> \x5E |0
+<U003C> \x4C |0
+<U003D> \x7E |0
+<U003E> \x6E |0
+<U003F> \x6F |0
+<U0040> \x44 |0
+<U0041> \xC1 |0
+<U0042> \xC2 |0
+<U0043> \xC3 |0
+<U0044> \xC4 |0
+<U0045> \xC5 |0
+<U0046> \xC6 |0
+<U0047> \xC7 |0
+<U0048> \xC8 |0
+<U0049> \xC9 |0
+<U004A> \xD1 |0
+<U004B> \xD2 |0
+<U004C> \xD3 |0
+<U004D> \xD4 |0
+<U004E> \xD5 |0
+<U004F> \xD6 |0
+<U0050> \xD7 |0
+<U0051> \xD8 |0
+<U0052> \xD9 |0
+<U0053> \xE2 |0
+<U0054> \xE3 |0
+<U0055> \xE4 |0
+<U0056> \xE5 |0
+<U0057> \xE6 |0
+<U0058> \xE7 |0
+<U0059> \xE8 |0
+<U005A> \xE9 |0
+<U005B> \x90 |0
+<U005C> \x48 |0
+<U005D> \xB5 |0
+<U005E> \x5F |0
+<U005F> \x6D |0
+<U0060> \xA0 |0
+<U0061> \x81 |0
+<U0062> \x82 |0
+<U0063> \x83 |0
+<U0064> \x84 |0
+<U0065> \x85 |0
+<U0066> \x86 |0
+<U0067> \x87 |0
+<U0068> \x88 |0
+<U0069> \x89 |0
+<U006A> \x91 |0
+<U006B> \x92 |0
+<U006C> \x93 |0
+<U006D> \x94 |0
+<U006E> \x95 |0
+<U006F> \x96 |0
+<U0070> \x97 |0
+<U0071> \x98 |0
+<U0072> \x99 |0
+<U0073> \xA2 |0
+<U0074> \xA3 |0
+<U0075> \xA4 |0
+<U0076> \xA5 |0
+<U0077> \xA6 |0
+<U0078> \xA7 |0
+<U0079> \xA8 |0
+<U007A> \xA9 |0
+<U007B> \x51 |0
+<U007C> \xBB |0
+<U007D> \x54 |0
+<U007E> \xBD |0
+<U007F> \x07 |0
+<U0080> \x20 |0
+<U0081> \x21 |0
+<U0082> \x22 |0
+<U0083> \x23 |0
+<U0084> \x24 |0
+<U0085> \x15 |0
+<U0086> \x06 |0
+<U0087> \x17 |0
+<U0088> \x28 |0
+<U0089> \x29 |0
+<U008A> \x2A |0
+<U008B> \x2B |0
+<U008C> \x2C |0
+<U008D> \x09 |0
+<U008E> \x0A |0
+<U008F> \x1B |0
+<U0090> \x30 |0
+<U0091> \x31 |0
+<U0092> \x1A |0
+<U0093> \x33 |0
+<U0094> \x34 |0
+<U0095> \x35 |0
+<U0096> \x36 |0
+<U0097> \x08 |0
+<U0098> \x38 |0
+<U0099> \x39 |0
+<U009A> \x3A |0
+<U009B> \x3B |0
+<U009C> \x04 |0
+<U009D> \x14 |0
+<U009E> \x3E |0
+<U009F> \xFF |0
+<U00A0> \x41 |0
+<U00A1> \xAA |0
+<U00A2> \xB0 |0
+<U00A3> \x7B |0
+<U00A5> \xB2 |0
+<U00A6> \xDD |0
+<U00A7> \x5A |0
+<U00A8> \xA1 |0
+<U00A9> \xB4 |0
+<U00AA> \x9A |0
+<U00AB> \x8A |0
+<U00AC> \xBA |0
+<U00AD> \xCA |0
+<U00AE> \xAF |0
+<U00AF> \xBC |0
+<U00B0> \x4A |0
+<U00B1> \x8F |0
+<U00B2> \xEA |0
+<U00B3> \xFA |0
+<U00B4> \xBE |0
+<U00B5> \x79 |0
+<U00B6> \xB6 |0
+<U00B7> \xB3 |0
+<U00B8> \x9D |0
+<U00B9> \xDA |0
+<U00BA> \x9B |0
+<U00BB> \x8B |0
+<U00BC> \xB7 |0
+<U00BD> \xB8 |0
+<U00BE> \xB9 |0
+<U00BF> \xAB |0
+<U00C0> \x64 |0
+<U00C1> \x65 |0
+<U00C2> \x62 |0
+<U00C3> \x66 |0
+<U00C4> \x63 |0
+<U00C5> \x67 |0
+<U00C6> \x9E |0
+<U00C7> \x68 |0
+<U00C8> \x74 |0
+<U00C9> \x71 |0
+<U00CA> \x72 |0
+<U00CB> \x73 |0
+<U00CC> \x78 |0
+<U00CD> \x75 |0
+<U00CE> \x76 |0
+<U00CF> \x77 |0
+<U00D0> \xAC |0
+<U00D1> \x69 |0
+<U00D2> \xED |0
+<U00D3> \xEE |0
+<U00D4> \xEB |0
+<U00D5> \xEF |0
+<U00D6> \xEC |0
+<U00D7> \xBF |0
+<U00D8> \x80 |0
+<U00D9> \xFD |0
+<U00DA> \xFE |0
+<U00DB> \xFB |0
+<U00DC> \xFC |0
+<U00DD> \xAD |0
+<U00DE> \xAE |0
+<U00DF> \x59 |0
+<U00E0> \x7C |0
+<U00E1> \x45 |0
+<U00E2> \x42 |0
+<U00E3> \x46 |0
+<U00E4> \x43 |0
+<U00E5> \x47 |0
+<U00E6> \x9C |0
+<U00E7> \xE0 |0
+<U00E8> \xD0 |0
+<U00E9> \xC0 |0
+<U00EA> \x52 |0
+<U00EB> \x53 |0
+<U00EC> \x58 |0
+<U00ED> \x55 |0
+<U00EE> \x56 |0
+<U00EF> \x57 |0
+<U00F0> \x8C |0
+<U00F1> \x49 |0
+<U00F2> \xCD |0
+<U00F3> \xCE |0
+<U00F4> \xCB |0
+<U00F5> \xCF |0
+<U00F6> \xCC |0
+<U00F7> \xE1 |0
+<U00F8> \x70 |0
+<U00F9> \x6A |0
+<U00FA> \xDE |0
+<U00FB> \xDB |0
+<U00FC> \xDC |0
+<U00FD> \x8D |0
+<U00FE> \x8E |0
+<U00FF> \xDF |0
+<U203E> \xBC |1
+<U20AC> \x9F |0
+<UFF01> \x4F |1
+<UFF02> \x7F |1
+<UFF03> \xB1 |1
+<UFF04> \x5B |1
+<UFF05> \x6C |1
+<UFF06> \x50 |1
+<UFF07> \x7D |1
+<UFF08> \x4D |1
+<UFF09> \x5D |1
+<UFF0A> \x5C |1
+<UFF0B> \x4E |1
+<UFF0C> \x6B |1
+<UFF0D> \x60 |1
+<UFF0E> \x4B |1
+<UFF0F> \x61 |1
+<UFF10> \xF0 |1
+<UFF11> \xF1 |1
+<UFF12> \xF2 |1
+<UFF13> \xF3 |1
+<UFF14> \xF4 |1
+<UFF15> \xF5 |1
+<UFF16> \xF6 |1
+<UFF17> \xF7 |1
+<UFF18> \xF8 |1
+<UFF19> \xF9 |1
+<UFF1A> \x7A |1
+<UFF1B> \x5E |1
+<UFF1C> \x4C |1
+<UFF1D> \x7E |1
+<UFF1E> \x6E |1
+<UFF1F> \x6F |1
+<UFF20> \x44 |1
+<UFF21> \xC1 |1
+<UFF22> \xC2 |1
+<UFF23> \xC3 |1
+<UFF24> \xC4 |1
+<UFF25> \xC5 |1
+<UFF26> \xC6 |1
+<UFF27> \xC7 |1
+<UFF28> \xC8 |1
+<UFF29> \xC9 |1
+<UFF2A> \xD1 |1
+<UFF2B> \xD2 |1
+<UFF2C> \xD3 |1
+<UFF2D> \xD4 |1
+<UFF2E> \xD5 |1
+<UFF2F> \xD6 |1
+<UFF30> \xD7 |1
+<UFF31> \xD8 |1
+<UFF32> \xD9 |1
+<UFF33> \xE2 |1
+<UFF34> \xE3 |1
+<UFF35> \xE4 |1
+<UFF36> \xE5 |1
+<UFF37> \xE6 |1
+<UFF38> \xE7 |1
+<UFF39> \xE8 |1
+<UFF3A> \xE9 |1
+<UFF3B> \x90 |1
+<UFF3C> \x48 |1
+<UFF3D> \xB5 |1
+<UFF3E> \x5F |1
+<UFF3F> \x6D |1
+<UFF40> \xA0 |1
+<UFF41> \x81 |1
+<UFF42> \x82 |1
+<UFF43> \x83 |1
+<UFF44> \x84 |1
+<UFF45> \x85 |1
+<UFF46> \x86 |1
+<UFF47> \x87 |1
+<UFF48> \x88 |1
+<UFF49> \x89 |1
+<UFF4A> \x91 |1
+<UFF4B> \x92 |1
+<UFF4C> \x93 |1
+<UFF4D> \x94 |1
+<UFF4E> \x95 |1
+<UFF4F> \x96 |1
+<UFF50> \x97 |1
+<UFF51> \x98 |1
+<UFF52> \x99 |1
+<UFF53> \xA2 |1
+<UFF54> \xA3 |1
+<UFF55> \xA4 |1
+<UFF56> \xA5 |1
+<UFF57> \xA6 |1
+<UFF58> \xA7 |1
+<UFF59> \xA8 |1
+<UFF5A> \xA9 |1
+<UFF5B> \x51 |1
+<UFF5C> \xBB |1
+<UFF5D> \x54 |1
+<UFF5E> \xBD |1
+END CHARMAP
diff --git a/mcs/class/I18N/Rare/ibm-1148.ucm b/mcs/class/I18N/Rare/ibm-1148.ucm
new file mode 100644
index 00000000000..1fe5a681571
--- /dev/null
+++ b/mcs/class/I18N/Rare/ibm-1148.ucm
@@ -0,0 +1,378 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1997-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Fri Nov 10 13:07:48 2000
+#
+# File created by dtcocm version 3.00
+# from source files 44B0047C.RPMAP100 and 047C44B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-1148"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x3F
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-1148
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x37 |0
+<U0005> \x2D |0
+<U0006> \x2E |0
+<U0007> \x2F |0
+<U0008> \x16 |0
+<U0009> \x05 |0
+<U000A> \x25 |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x3C |0
+<U0015> \x3D |0
+<U0016> \x32 |0
+<U0017> \x26 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x3F |0
+<U001B> \x27 |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x40 |0
+<U0021> \x4F |0
+<U0022> \x7F |0
+<U0023> \x7B |0
+<U0024> \x5B |0
+<U0025> \x6C |0
+<U0026> \x50 |0
+<U0027> \x7D |0
+<U0028> \x4D |0
+<U0029> \x5D |0
+<U002A> \x5C |0
+<U002B> \x4E |0
+<U002C> \x6B |0
+<U002D> \x60 |0
+<U002E> \x4B |0
+<U002F> \x61 |0
+<U0030> \xF0 |0
+<U0031> \xF1 |0
+<U0032> \xF2 |0
+<U0033> \xF3 |0
+<U0034> \xF4 |0
+<U0035> \xF5 |0
+<U0036> \xF6 |0
+<U0037> \xF7 |0
+<U0038> \xF8 |0
+<U0039> \xF9 |0
+<U003A> \x7A |0
+<U003B> \x5E |0
+<U003C> \x4C |0
+<U003D> \x7E |0
+<U003E> \x6E |0
+<U003F> \x6F |0
+<U0040> \x7C |0
+<U0041> \xC1 |0
+<U0042> \xC2 |0
+<U0043> \xC3 |0
+<U0044> \xC4 |0
+<U0045> \xC5 |0
+<U0046> \xC6 |0
+<U0047> \xC7 |0
+<U0048> \xC8 |0
+<U0049> \xC9 |0
+<U004A> \xD1 |0
+<U004B> \xD2 |0
+<U004C> \xD3 |0
+<U004D> \xD4 |0
+<U004E> \xD5 |0
+<U004F> \xD6 |0
+<U0050> \xD7 |0
+<U0051> \xD8 |0
+<U0052> \xD9 |0
+<U0053> \xE2 |0
+<U0054> \xE3 |0
+<U0055> \xE4 |0
+<U0056> \xE5 |0
+<U0057> \xE6 |0
+<U0058> \xE7 |0
+<U0059> \xE8 |0
+<U005A> \xE9 |0
+<U005B> \x4A |0
+<U005C> \xE0 |0
+<U005D> \x5A |0
+<U005E> \x5F |0
+<U005F> \x6D |0
+<U0060> \x79 |0
+<U0061> \x81 |0
+<U0062> \x82 |0
+<U0063> \x83 |0
+<U0064> \x84 |0
+<U0065> \x85 |0
+<U0066> \x86 |0
+<U0067> \x87 |0
+<U0068> \x88 |0
+<U0069> \x89 |0
+<U006A> \x91 |0
+<U006B> \x92 |0
+<U006C> \x93 |0
+<U006D> \x94 |0
+<U006E> \x95 |0
+<U006F> \x96 |0
+<U0070> \x97 |0
+<U0071> \x98 |0
+<U0072> \x99 |0
+<U0073> \xA2 |0
+<U0074> \xA3 |0
+<U0075> \xA4 |0
+<U0076> \xA5 |0
+<U0077> \xA6 |0
+<U0078> \xA7 |0
+<U0079> \xA8 |0
+<U007A> \xA9 |0
+<U007B> \xC0 |0
+<U007C> \xBB |0
+<U007D> \xD0 |0
+<U007E> \xA1 |0
+<U007F> \x07 |0
+<U0080> \x20 |0
+<U0081> \x21 |0
+<U0082> \x22 |0
+<U0083> \x23 |0
+<U0084> \x24 |0
+<U0085> \x15 |0
+<U0086> \x06 |0
+<U0087> \x17 |0
+<U0088> \x28 |0
+<U0089> \x29 |0
+<U008A> \x2A |0
+<U008B> \x2B |0
+<U008C> \x2C |0
+<U008D> \x09 |0
+<U008E> \x0A |0
+<U008F> \x1B |0
+<U0090> \x30 |0
+<U0091> \x31 |0
+<U0092> \x1A |0
+<U0093> \x33 |0
+<U0094> \x34 |0
+<U0095> \x35 |0
+<U0096> \x36 |0
+<U0097> \x08 |0
+<U0098> \x38 |0
+<U0099> \x39 |0
+<U009A> \x3A |0
+<U009B> \x3B |0
+<U009C> \x04 |0
+<U009D> \x14 |0
+<U009E> \x3E |0
+<U009F> \xFF |0
+<U00A0> \x41 |0
+<U00A1> \xAA |0
+<U00A2> \xB0 |0
+<U00A3> \xB1 |0
+<U00A5> \xB2 |0
+<U00A6> \x6A |0
+<U00A7> \xB5 |0
+<U00A8> \xBD |0
+<U00A9> \xB4 |0
+<U00AA> \x9A |0
+<U00AB> \x8A |0
+<U00AC> \xBA |0
+<U00AD> \xCA |0
+<U00AE> \xAF |0
+<U00AF> \xBC |0
+<U00B0> \x90 |0
+<U00B1> \x8F |0
+<U00B2> \xEA |0
+<U00B3> \xFA |0
+<U00B4> \xBE |0
+<U00B5> \xA0 |0
+<U00B6> \xB6 |0
+<U00B7> \xB3 |0
+<U00B8> \x9D |0
+<U00B9> \xDA |0
+<U00BA> \x9B |0
+<U00BB> \x8B |0
+<U00BC> \xB7 |0
+<U00BD> \xB8 |0
+<U00BE> \xB9 |0
+<U00BF> \xAB |0
+<U00C0> \x64 |0
+<U00C1> \x65 |0
+<U00C2> \x62 |0
+<U00C3> \x66 |0
+<U00C4> \x63 |0
+<U00C5> \x67 |0
+<U00C6> \x9E |0
+<U00C7> \x68 |0
+<U00C8> \x74 |0
+<U00C9> \x71 |0
+<U00CA> \x72 |0
+<U00CB> \x73 |0
+<U00CC> \x78 |0
+<U00CD> \x75 |0
+<U00CE> \x76 |0
+<U00CF> \x77 |0
+<U00D0> \xAC |0
+<U00D1> \x69 |0
+<U00D2> \xED |0
+<U00D3> \xEE |0
+<U00D4> \xEB |0
+<U00D5> \xEF |0
+<U00D6> \xEC |0
+<U00D7> \xBF |0
+<U00D8> \x80 |0
+<U00D9> \xFD |0
+<U00DA> \xFE |0
+<U00DB> \xFB |0
+<U00DC> \xFC |0
+<U00DD> \xAD |0
+<U00DE> \xAE |0
+<U00DF> \x59 |0
+<U00E0> \x44 |0
+<U00E1> \x45 |0
+<U00E2> \x42 |0
+<U00E3> \x46 |0
+<U00E4> \x43 |0
+<U00E5> \x47 |0
+<U00E6> \x9C |0
+<U00E7> \x48 |0
+<U00E8> \x54 |0
+<U00E9> \x51 |0
+<U00EA> \x52 |0
+<U00EB> \x53 |0
+<U00EC> \x58 |0
+<U00ED> \x55 |0
+<U00EE> \x56 |0
+<U00EF> \x57 |0
+<U00F0> \x8C |0
+<U00F1> \x49 |0
+<U00F2> \xCD |0
+<U00F3> \xCE |0
+<U00F4> \xCB |0
+<U00F5> \xCF |0
+<U00F6> \xCC |0
+<U00F7> \xE1 |0
+<U00F8> \x70 |0
+<U00F9> \xDD |0
+<U00FA> \xDE |0
+<U00FB> \xDB |0
+<U00FC> \xDC |0
+<U00FD> \x8D |0
+<U00FE> \x8E |0
+<U00FF> \xDF |0
+<U203E> \xBC |1
+<U20AC> \x9F |0
+<UFF01> \x4F |1
+<UFF02> \x7F |1
+<UFF03> \x7B |1
+<UFF04> \x5B |1
+<UFF05> \x6C |1
+<UFF06> \x50 |1
+<UFF07> \x7D |1
+<UFF08> \x4D |1
+<UFF09> \x5D |1
+<UFF0A> \x5C |1
+<UFF0B> \x4E |1
+<UFF0C> \x6B |1
+<UFF0D> \x60 |1
+<UFF0E> \x4B |1
+<UFF0F> \x61 |1
+<UFF10> \xF0 |1
+<UFF11> \xF1 |1
+<UFF12> \xF2 |1
+<UFF13> \xF3 |1
+<UFF14> \xF4 |1
+<UFF15> \xF5 |1
+<UFF16> \xF6 |1
+<UFF17> \xF7 |1
+<UFF18> \xF8 |1
+<UFF19> \xF9 |1
+<UFF1A> \x7A |1
+<UFF1B> \x5E |1
+<UFF1C> \x4C |1
+<UFF1D> \x7E |1
+<UFF1E> \x6E |1
+<UFF1F> \x6F |1
+<UFF20> \x7C |1
+<UFF21> \xC1 |1
+<UFF22> \xC2 |1
+<UFF23> \xC3 |1
+<UFF24> \xC4 |1
+<UFF25> \xC5 |1
+<UFF26> \xC6 |1
+<UFF27> \xC7 |1
+<UFF28> \xC8 |1
+<UFF29> \xC9 |1
+<UFF2A> \xD1 |1
+<UFF2B> \xD2 |1
+<UFF2C> \xD3 |1
+<UFF2D> \xD4 |1
+<UFF2E> \xD5 |1
+<UFF2F> \xD6 |1
+<UFF30> \xD7 |1
+<UFF31> \xD8 |1
+<UFF32> \xD9 |1
+<UFF33> \xE2 |1
+<UFF34> \xE3 |1
+<UFF35> \xE4 |1
+<UFF36> \xE5 |1
+<UFF37> \xE6 |1
+<UFF38> \xE7 |1
+<UFF39> \xE8 |1
+<UFF3A> \xE9 |1
+<UFF3B> \x4A |1
+<UFF3C> \xE0 |1
+<UFF3D> \x5A |1
+<UFF3E> \x5F |1
+<UFF3F> \x6D |1
+<UFF40> \x79 |1
+<UFF41> \x81 |1
+<UFF42> \x82 |1
+<UFF43> \x83 |1
+<UFF44> \x84 |1
+<UFF45> \x85 |1
+<UFF46> \x86 |1
+<UFF47> \x87 |1
+<UFF48> \x88 |1
+<UFF49> \x89 |1
+<UFF4A> \x91 |1
+<UFF4B> \x92 |1
+<UFF4C> \x93 |1
+<UFF4D> \x94 |1
+<UFF4E> \x95 |1
+<UFF4F> \x96 |1
+<UFF50> \x97 |1
+<UFF51> \x98 |1
+<UFF52> \x99 |1
+<UFF53> \xA2 |1
+<UFF54> \xA3 |1
+<UFF55> \xA4 |1
+<UFF56> \xA5 |1
+<UFF57> \xA6 |1
+<UFF58> \xA7 |1
+<UFF59> \xA8 |1
+<UFF5A> \xA9 |1
+<UFF5B> \xC0 |1
+<UFF5C> \xBB |1
+<UFF5D> \xD0 |1
+<UFF5E> \xA1 |1
+END CHARMAP
diff --git a/mcs/class/I18N/Rare/ibm-1149.ucm b/mcs/class/I18N/Rare/ibm-1149.ucm
new file mode 100644
index 00000000000..e97050d2bcb
--- /dev/null
+++ b/mcs/class/I18N/Rare/ibm-1149.ucm
@@ -0,0 +1,378 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1997-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Fri Nov 10 13:07:48 2000
+#
+# File created by dtcocm version 3.00
+# from source files 44B0047D.RPMAP100 and 047D44B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-1149"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x3F
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-1149
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x37 |0
+<U0005> \x2D |0
+<U0006> \x2E |0
+<U0007> \x2F |0
+<U0008> \x16 |0
+<U0009> \x05 |0
+<U000A> \x25 |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x3C |0
+<U0015> \x3D |0
+<U0016> \x32 |0
+<U0017> \x26 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x3F |0
+<U001B> \x27 |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x40 |0
+<U0021> \x4F |0
+<U0022> \x7F |0
+<U0023> \x7B |0
+<U0024> \x5B |0
+<U0025> \x6C |0
+<U0026> \x50 |0
+<U0027> \x7D |0
+<U0028> \x4D |0
+<U0029> \x5D |0
+<U002A> \x5C |0
+<U002B> \x4E |0
+<U002C> \x6B |0
+<U002D> \x60 |0
+<U002E> \x4B |0
+<U002F> \x61 |0
+<U0030> \xF0 |0
+<U0031> \xF1 |0
+<U0032> \xF2 |0
+<U0033> \xF3 |0
+<U0034> \xF4 |0
+<U0035> \xF5 |0
+<U0036> \xF6 |0
+<U0037> \xF7 |0
+<U0038> \xF8 |0
+<U0039> \xF9 |0
+<U003A> \x7A |0
+<U003B> \x5E |0
+<U003C> \x4C |0
+<U003D> \x7E |0
+<U003E> \x6E |0
+<U003F> \x6F |0
+<U0040> \xAC |0
+<U0041> \xC1 |0
+<U0042> \xC2 |0
+<U0043> \xC3 |0
+<U0044> \xC4 |0
+<U0045> \xC5 |0
+<U0046> \xC6 |0
+<U0047> \xC7 |0
+<U0048> \xC8 |0
+<U0049> \xC9 |0
+<U004A> \xD1 |0
+<U004B> \xD2 |0
+<U004C> \xD3 |0
+<U004D> \xD4 |0
+<U004E> \xD5 |0
+<U004F> \xD6 |0
+<U0050> \xD7 |0
+<U0051> \xD8 |0
+<U0052> \xD9 |0
+<U0053> \xE2 |0
+<U0054> \xE3 |0
+<U0055> \xE4 |0
+<U0056> \xE5 |0
+<U0057> \xE6 |0
+<U0058> \xE7 |0
+<U0059> \xE8 |0
+<U005A> \xE9 |0
+<U005B> \xAE |0
+<U005C> \xBE |0
+<U005D> \x9E |0
+<U005E> \xEC |0
+<U005F> \x6D |0
+<U0060> \x8C |0
+<U0061> \x81 |0
+<U0062> \x82 |0
+<U0063> \x83 |0
+<U0064> \x84 |0
+<U0065> \x85 |0
+<U0066> \x86 |0
+<U0067> \x87 |0
+<U0068> \x88 |0
+<U0069> \x89 |0
+<U006A> \x91 |0
+<U006B> \x92 |0
+<U006C> \x93 |0
+<U006D> \x94 |0
+<U006E> \x95 |0
+<U006F> \x96 |0
+<U0070> \x97 |0
+<U0071> \x98 |0
+<U0072> \x99 |0
+<U0073> \xA2 |0
+<U0074> \xA3 |0
+<U0075> \xA4 |0
+<U0076> \xA5 |0
+<U0077> \xA6 |0
+<U0078> \xA7 |0
+<U0079> \xA8 |0
+<U007A> \xA9 |0
+<U007B> \x8E |0
+<U007C> \xBB |0
+<U007D> \x9C |0
+<U007E> \xCC |0
+<U007F> \x07 |0
+<U0080> \x20 |0
+<U0081> \x21 |0
+<U0082> \x22 |0
+<U0083> \x23 |0
+<U0084> \x24 |0
+<U0085> \x15 |0
+<U0086> \x06 |0
+<U0087> \x17 |0
+<U0088> \x28 |0
+<U0089> \x29 |0
+<U008A> \x2A |0
+<U008B> \x2B |0
+<U008C> \x2C |0
+<U008D> \x09 |0
+<U008E> \x0A |0
+<U008F> \x1B |0
+<U0090> \x30 |0
+<U0091> \x31 |0
+<U0092> \x1A |0
+<U0093> \x33 |0
+<U0094> \x34 |0
+<U0095> \x35 |0
+<U0096> \x36 |0
+<U0097> \x08 |0
+<U0098> \x38 |0
+<U0099> \x39 |0
+<U009A> \x3A |0
+<U009B> \x3B |0
+<U009C> \x04 |0
+<U009D> \x14 |0
+<U009E> \x3E |0
+<U009F> \xFF |0
+<U00A0> \x41 |0
+<U00A1> \xAA |0
+<U00A2> \xB0 |0
+<U00A3> \xB1 |0
+<U00A5> \xB2 |0
+<U00A6> \x6A |0
+<U00A7> \xB5 |0
+<U00A8> \xBD |0
+<U00A9> \xB4 |0
+<U00AA> \x9A |0
+<U00AB> \x8A |0
+<U00AC> \xBA |0
+<U00AD> \xCA |0
+<U00AE> \xAF |0
+<U00AF> \xBC |0
+<U00B0> \x90 |0
+<U00B1> \x8F |0
+<U00B2> \xEA |0
+<U00B3> \xFA |0
+<U00B4> \xE0 |0
+<U00B5> \xA0 |0
+<U00B6> \xB6 |0
+<U00B7> \xB3 |0
+<U00B8> \x9D |0
+<U00B9> \xDA |0
+<U00BA> \x9B |0
+<U00BB> \x8B |0
+<U00BC> \xB7 |0
+<U00BD> \xB8 |0
+<U00BE> \xB9 |0
+<U00BF> \xAB |0
+<U00C0> \x64 |0
+<U00C1> \x65 |0
+<U00C2> \x62 |0
+<U00C3> \x66 |0
+<U00C4> \x63 |0
+<U00C5> \x67 |0
+<U00C6> \x5A |0
+<U00C7> \x68 |0
+<U00C8> \x74 |0
+<U00C9> \x71 |0
+<U00CA> \x72 |0
+<U00CB> \x73 |0
+<U00CC> \x78 |0
+<U00CD> \x75 |0
+<U00CE> \x76 |0
+<U00CF> \x77 |0
+<U00D0> \x7C |0
+<U00D1> \x69 |0
+<U00D2> \xED |0
+<U00D3> \xEE |0
+<U00D4> \xEB |0
+<U00D5> \xEF |0
+<U00D6> \x5F |0
+<U00D7> \xBF |0
+<U00D8> \x80 |0
+<U00D9> \xFD |0
+<U00DA> \xFE |0
+<U00DB> \xFB |0
+<U00DC> \xFC |0
+<U00DD> \xAD |0
+<U00DE> \x4A |0
+<U00DF> \x59 |0
+<U00E0> \x44 |0
+<U00E1> \x45 |0
+<U00E2> \x42 |0
+<U00E3> \x46 |0
+<U00E4> \x43 |0
+<U00E5> \x47 |0
+<U00E6> \xD0 |0
+<U00E7> \x48 |0
+<U00E8> \x54 |0
+<U00E9> \x51 |0
+<U00EA> \x52 |0
+<U00EB> \x53 |0
+<U00EC> \x58 |0
+<U00ED> \x55 |0
+<U00EE> \x56 |0
+<U00EF> \x57 |0
+<U00F0> \x79 |0
+<U00F1> \x49 |0
+<U00F2> \xCD |0
+<U00F3> \xCE |0
+<U00F4> \xCB |0
+<U00F5> \xCF |0
+<U00F6> \xA1 |0
+<U00F7> \xE1 |0
+<U00F8> \x70 |0
+<U00F9> \xDD |0
+<U00FA> \xDE |0
+<U00FB> \xDB |0
+<U00FC> \xDC |0
+<U00FD> \x8D |0
+<U00FE> \xC0 |0
+<U00FF> \xDF |0
+<U203E> \xBC |1
+<U20AC> \x9F |0
+<UFF01> \x4F |1
+<UFF02> \x7F |1
+<UFF03> \x7B |1
+<UFF04> \x5B |1
+<UFF05> \x6C |1
+<UFF06> \x50 |1
+<UFF07> \x7D |1
+<UFF08> \x4D |1
+<UFF09> \x5D |1
+<UFF0A> \x5C |1
+<UFF0B> \x4E |1
+<UFF0C> \x6B |1
+<UFF0D> \x60 |1
+<UFF0E> \x4B |1
+<UFF0F> \x61 |1
+<UFF10> \xF0 |1
+<UFF11> \xF1 |1
+<UFF12> \xF2 |1
+<UFF13> \xF3 |1
+<UFF14> \xF4 |1
+<UFF15> \xF5 |1
+<UFF16> \xF6 |1
+<UFF17> \xF7 |1
+<UFF18> \xF8 |1
+<UFF19> \xF9 |1
+<UFF1A> \x7A |1
+<UFF1B> \x5E |1
+<UFF1C> \x4C |1
+<UFF1D> \x7E |1
+<UFF1E> \x6E |1
+<UFF1F> \x6F |1
+<UFF20> \xAC |1
+<UFF21> \xC1 |1
+<UFF22> \xC2 |1
+<UFF23> \xC3 |1
+<UFF24> \xC4 |1
+<UFF25> \xC5 |1
+<UFF26> \xC6 |1
+<UFF27> \xC7 |1
+<UFF28> \xC8 |1
+<UFF29> \xC9 |1
+<UFF2A> \xD1 |1
+<UFF2B> \xD2 |1
+<UFF2C> \xD3 |1
+<UFF2D> \xD4 |1
+<UFF2E> \xD5 |1
+<UFF2F> \xD6 |1
+<UFF30> \xD7 |1
+<UFF31> \xD8 |1
+<UFF32> \xD9 |1
+<UFF33> \xE2 |1
+<UFF34> \xE3 |1
+<UFF35> \xE4 |1
+<UFF36> \xE5 |1
+<UFF37> \xE6 |1
+<UFF38> \xE7 |1
+<UFF39> \xE8 |1
+<UFF3A> \xE9 |1
+<UFF3B> \xAE |1
+<UFF3C> \xBE |1
+<UFF3D> \x9E |1
+<UFF3E> \xEC |1
+<UFF3F> \x6D |1
+<UFF40> \x8C |1
+<UFF41> \x81 |1
+<UFF42> \x82 |1
+<UFF43> \x83 |1
+<UFF44> \x84 |1
+<UFF45> \x85 |1
+<UFF46> \x86 |1
+<UFF47> \x87 |1
+<UFF48> \x88 |1
+<UFF49> \x89 |1
+<UFF4A> \x91 |1
+<UFF4B> \x92 |1
+<UFF4C> \x93 |1
+<UFF4D> \x94 |1
+<UFF4E> \x95 |1
+<UFF4F> \x96 |1
+<UFF50> \x97 |1
+<UFF51> \x98 |1
+<UFF52> \x99 |1
+<UFF53> \xA2 |1
+<UFF54> \xA3 |1
+<UFF55> \xA4 |1
+<UFF56> \xA5 |1
+<UFF57> \xA6 |1
+<UFF58> \xA7 |1
+<UFF59> \xA8 |1
+<UFF5A> \xA9 |1
+<UFF5B> \x8E |1
+<UFF5C> \xBB |1
+<UFF5D> \x9C |1
+<UFF5E> \xCC |1
+END CHARMAP
diff --git a/mcs/class/I18N/Rare/ibm-273.ucm b/mcs/class/I18N/Rare/ibm-273.ucm
new file mode 100644
index 00000000000..b986677d373
--- /dev/null
+++ b/mcs/class/I18N/Rare/ibm-273.ucm
@@ -0,0 +1,379 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1995-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Mon Nov 13 08:50:41 2000
+#
+# File created by dtcocm version 3.00
+# from source files 34B00111.RPMAP100 and 011134B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-273"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x3F
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-273
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x37 |0
+<U0005> \x2D |0
+<U0006> \x2E |0
+<U0007> \x2F |0
+<U0008> \x16 |0
+<U0009> \x05 |0
+<U000A> \x25 |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x3C |0
+<U0015> \x3D |0
+<U0016> \x32 |0
+<U0017> \x26 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x3F |0
+<U001B> \x27 |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x40 |0
+<U0021> \x4F |0
+<U0022> \x7F |0
+<U0023> \x7B |0
+<U0024> \x5B |0
+<U0025> \x6C |0
+<U0026> \x50 |0
+<U0027> \x7D |0
+<U0028> \x4D |0
+<U0029> \x5D |0
+<U002A> \x5C |0
+<U002B> \x4E |0
+<U002C> \x6B |0
+<U002D> \x60 |0
+<U002E> \x4B |0
+<U002F> \x61 |0
+<U0030> \xF0 |0
+<U0031> \xF1 |0
+<U0032> \xF2 |0
+<U0033> \xF3 |0
+<U0034> \xF4 |0
+<U0035> \xF5 |0
+<U0036> \xF6 |0
+<U0037> \xF7 |0
+<U0038> \xF8 |0
+<U0039> \xF9 |0
+<U003A> \x7A |0
+<U003B> \x5E |0
+<U003C> \x4C |0
+<U003D> \x7E |0
+<U003E> \x6E |0
+<U003F> \x6F |0
+<U0040> \xB5 |0
+<U0041> \xC1 |0
+<U0042> \xC2 |0
+<U0043> \xC3 |0
+<U0044> \xC4 |0
+<U0045> \xC5 |0
+<U0046> \xC6 |0
+<U0047> \xC7 |0
+<U0048> \xC8 |0
+<U0049> \xC9 |0
+<U004A> \xD1 |0
+<U004B> \xD2 |0
+<U004C> \xD3 |0
+<U004D> \xD4 |0
+<U004E> \xD5 |0
+<U004F> \xD6 |0
+<U0050> \xD7 |0
+<U0051> \xD8 |0
+<U0052> \xD9 |0
+<U0053> \xE2 |0
+<U0054> \xE3 |0
+<U0055> \xE4 |0
+<U0056> \xE5 |0
+<U0057> \xE6 |0
+<U0058> \xE7 |0
+<U0059> \xE8 |0
+<U005A> \xE9 |0
+<U005B> \x63 |0
+<U005C> \xEC |0
+<U005D> \xFC |0
+<U005E> \x5F |0
+<U005F> \x6D |0
+<U0060> \x79 |0
+<U0061> \x81 |0
+<U0062> \x82 |0
+<U0063> \x83 |0
+<U0064> \x84 |0
+<U0065> \x85 |0
+<U0066> \x86 |0
+<U0067> \x87 |0
+<U0068> \x88 |0
+<U0069> \x89 |0
+<U006A> \x91 |0
+<U006B> \x92 |0
+<U006C> \x93 |0
+<U006D> \x94 |0
+<U006E> \x95 |0
+<U006F> \x96 |0
+<U0070> \x97 |0
+<U0071> \x98 |0
+<U0072> \x99 |0
+<U0073> \xA2 |0
+<U0074> \xA3 |0
+<U0075> \xA4 |0
+<U0076> \xA5 |0
+<U0077> \xA6 |0
+<U0078> \xA7 |0
+<U0079> \xA8 |0
+<U007A> \xA9 |0
+<U007B> \x43 |0
+<U007C> \xBB |0
+<U007D> \xDC |0
+<U007E> \x59 |0
+<U007F> \x07 |0
+<U0080> \x20 |0
+<U0081> \x21 |0
+<U0082> \x22 |0
+<U0083> \x23 |0
+<U0084> \x24 |0
+<U0085> \x15 |0
+<U0086> \x06 |0
+<U0087> \x17 |0
+<U0088> \x28 |0
+<U0089> \x29 |0
+<U008A> \x2A |0
+<U008B> \x2B |0
+<U008C> \x2C |0
+<U008D> \x09 |0
+<U008E> \x0A |0
+<U008F> \x1B |0
+<U0090> \x30 |0
+<U0091> \x31 |0
+<U0092> \x1A |0
+<U0093> \x33 |0
+<U0094> \x34 |0
+<U0095> \x35 |0
+<U0096> \x36 |0
+<U0097> \x08 |0
+<U0098> \x38 |0
+<U0099> \x39 |0
+<U009A> \x3A |0
+<U009B> \x3B |0
+<U009C> \x04 |0
+<U009D> \x14 |0
+<U009E> \x3E |0
+<U009F> \xFF |0
+<U00A0> \x41 |0
+<U00A1> \xAA |0
+<U00A2> \xB0 |0
+<U00A3> \xB1 |0
+<U00A4> \x9F |0
+<U00A5> \xB2 |0
+<U00A6> \xCC |0
+<U00A7> \x7C |0
+<U00A8> \xBD |0
+<U00A9> \xB4 |0
+<U00AA> \x9A |0
+<U00AB> \x8A |0
+<U00AC> \xBA |0
+<U00AD> \xCA |0
+<U00AE> \xAF |0
+<U00AF> \xBC |0
+<U00B0> \x90 |0
+<U00B1> \x8F |0
+<U00B2> \xEA |0
+<U00B3> \xFA |0
+<U00B4> \xBE |0
+<U00B5> \xA0 |0
+<U00B6> \xB6 |0
+<U00B7> \xB3 |0
+<U00B8> \x9D |0
+<U00B9> \xDA |0
+<U00BA> \x9B |0
+<U00BB> \x8B |0
+<U00BC> \xB7 |0
+<U00BD> \xB8 |0
+<U00BE> \xB9 |0
+<U00BF> \xAB |0
+<U00C0> \x64 |0
+<U00C1> \x65 |0
+<U00C2> \x62 |0
+<U00C3> \x66 |0
+<U00C4> \x4A |0
+<U00C5> \x67 |0
+<U00C6> \x9E |0
+<U00C7> \x68 |0
+<U00C8> \x74 |0
+<U00C9> \x71 |0
+<U00CA> \x72 |0
+<U00CB> \x73 |0
+<U00CC> \x78 |0
+<U00CD> \x75 |0
+<U00CE> \x76 |0
+<U00CF> \x77 |0
+<U00D0> \xAC |0
+<U00D1> \x69 |0
+<U00D2> \xED |0
+<U00D3> \xEE |0
+<U00D4> \xEB |0
+<U00D5> \xEF |0
+<U00D6> \xE0 |0
+<U00D7> \xBF |0
+<U00D8> \x80 |0
+<U00D9> \xFD |0
+<U00DA> \xFE |0
+<U00DB> \xFB |0
+<U00DC> \x5A |0
+<U00DD> \xAD |0
+<U00DE> \xAE |0
+<U00DF> \xA1 |0
+<U00E0> \x44 |0
+<U00E1> \x45 |0
+<U00E2> \x42 |0
+<U00E3> \x46 |0
+<U00E4> \xC0 |0
+<U00E5> \x47 |0
+<U00E6> \x9C |0
+<U00E7> \x48 |0
+<U00E8> \x54 |0
+<U00E9> \x51 |0
+<U00EA> \x52 |0
+<U00EB> \x53 |0
+<U00EC> \x58 |0
+<U00ED> \x55 |0
+<U00EE> \x56 |0
+<U00EF> \x57 |0
+<U00F0> \x8C |0
+<U00F1> \x49 |0
+<U00F2> \xCD |0
+<U00F3> \xCE |0
+<U00F4> \xCB |0
+<U00F5> \xCF |0
+<U00F6> \x6A |0
+<U00F7> \xE1 |0
+<U00F8> \x70 |0
+<U00F9> \xDD |0
+<U00FA> \xDE |0
+<U00FB> \xDB |0
+<U00FC> \xD0 |0
+<U00FD> \x8D |0
+<U00FE> \x8E |0
+<U00FF> \xDF |0
+<U0110> \xAC |1
+<U203E> \xBC |1
+<UFF01> \x4F |1
+<UFF02> \x7F |1
+<UFF03> \x7B |1
+<UFF04> \x5B |1
+<UFF05> \x6C |1
+<UFF06> \x50 |1
+<UFF07> \x7D |1
+<UFF08> \x4D |1
+<UFF09> \x5D |1
+<UFF0A> \x5C |1
+<UFF0B> \x4E |1
+<UFF0C> \x6B |1
+<UFF0D> \x60 |1
+<UFF0E> \x4B |1
+<UFF0F> \x61 |1
+<UFF10> \xF0 |1
+<UFF11> \xF1 |1
+<UFF12> \xF2 |1
+<UFF13> \xF3 |1
+<UFF14> \xF4 |1
+<UFF15> \xF5 |1
+<UFF16> \xF6 |1
+<UFF17> \xF7 |1
+<UFF18> \xF8 |1
+<UFF19> \xF9 |1
+<UFF1A> \x7A |1
+<UFF1B> \x5E |1
+<UFF1C> \x4C |1
+<UFF1D> \x7E |1
+<UFF1E> \x6E |1
+<UFF1F> \x6F |1
+<UFF20> \xB5 |1
+<UFF21> \xC1 |1
+<UFF22> \xC2 |1
+<UFF23> \xC3 |1
+<UFF24> \xC4 |1
+<UFF25> \xC5 |1
+<UFF26> \xC6 |1
+<UFF27> \xC7 |1
+<UFF28> \xC8 |1
+<UFF29> \xC9 |1
+<UFF2A> \xD1 |1
+<UFF2B> \xD2 |1
+<UFF2C> \xD3 |1
+<UFF2D> \xD4 |1
+<UFF2E> \xD5 |1
+<UFF2F> \xD6 |1
+<UFF30> \xD7 |1
+<UFF31> \xD8 |1
+<UFF32> \xD9 |1
+<UFF33> \xE2 |1
+<UFF34> \xE3 |1
+<UFF35> \xE4 |1
+<UFF36> \xE5 |1
+<UFF37> \xE6 |1
+<UFF38> \xE7 |1
+<UFF39> \xE8 |1
+<UFF3A> \xE9 |1
+<UFF3B> \x63 |1
+<UFF3C> \xEC |1
+<UFF3D> \xFC |1
+<UFF3E> \x5F |1
+<UFF3F> \x6D |1
+<UFF40> \x79 |1
+<UFF41> \x81 |1
+<UFF42> \x82 |1
+<UFF43> \x83 |1
+<UFF44> \x84 |1
+<UFF45> \x85 |1
+<UFF46> \x86 |1
+<UFF47> \x87 |1
+<UFF48> \x88 |1
+<UFF49> \x89 |1
+<UFF4A> \x91 |1
+<UFF4B> \x92 |1
+<UFF4C> \x93 |1
+<UFF4D> \x94 |1
+<UFF4E> \x95 |1
+<UFF4F> \x96 |1
+<UFF50> \x97 |1
+<UFF51> \x98 |1
+<UFF52> \x99 |1
+<UFF53> \xA2 |1
+<UFF54> \xA3 |1
+<UFF55> \xA4 |1
+<UFF56> \xA5 |1
+<UFF57> \xA6 |1
+<UFF58> \xA7 |1
+<UFF59> \xA8 |1
+<UFF5A> \xA9 |1
+<UFF5B> \x43 |1
+<UFF5C> \xBB |1
+<UFF5D> \xDC |1
+<UFF5E> \x59 |1
+END CHARMAP
diff --git a/mcs/class/I18N/Rare/ibm-277.ucm b/mcs/class/I18N/Rare/ibm-277.ucm
new file mode 100644
index 00000000000..7ed1d844af2
--- /dev/null
+++ b/mcs/class/I18N/Rare/ibm-277.ucm
@@ -0,0 +1,379 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1995-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Mon Nov 13 08:50:41 2000
+#
+# File created by dtcocm version 3.00
+# from source files 34B00115.RPMAP100 and 011534B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-277"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x3F
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-277
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x37 |0
+<U0005> \x2D |0
+<U0006> \x2E |0
+<U0007> \x2F |0
+<U0008> \x16 |0
+<U0009> \x05 |0
+<U000A> \x25 |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x3C |0
+<U0015> \x3D |0
+<U0016> \x32 |0
+<U0017> \x26 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x3F |0
+<U001B> \x27 |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x40 |0
+<U0021> \x4F |0
+<U0022> \x7F |0
+<U0023> \x4A |0
+<U0024> \x67 |0
+<U0025> \x6C |0
+<U0026> \x50 |0
+<U0027> \x7D |0
+<U0028> \x4D |0
+<U0029> \x5D |0
+<U002A> \x5C |0
+<U002B> \x4E |0
+<U002C> \x6B |0
+<U002D> \x60 |0
+<U002E> \x4B |0
+<U002F> \x61 |0
+<U0030> \xF0 |0
+<U0031> \xF1 |0
+<U0032> \xF2 |0
+<U0033> \xF3 |0
+<U0034> \xF4 |0
+<U0035> \xF5 |0
+<U0036> \xF6 |0
+<U0037> \xF7 |0
+<U0038> \xF8 |0
+<U0039> \xF9 |0
+<U003A> \x7A |0
+<U003B> \x5E |0
+<U003C> \x4C |0
+<U003D> \x7E |0
+<U003E> \x6E |0
+<U003F> \x6F |0
+<U0040> \x80 |0
+<U0041> \xC1 |0
+<U0042> \xC2 |0
+<U0043> \xC3 |0
+<U0044> \xC4 |0
+<U0045> \xC5 |0
+<U0046> \xC6 |0
+<U0047> \xC7 |0
+<U0048> \xC8 |0
+<U0049> \xC9 |0
+<U004A> \xD1 |0
+<U004B> \xD2 |0
+<U004C> \xD3 |0
+<U004D> \xD4 |0
+<U004E> \xD5 |0
+<U004F> \xD6 |0
+<U0050> \xD7 |0
+<U0051> \xD8 |0
+<U0052> \xD9 |0
+<U0053> \xE2 |0
+<U0054> \xE3 |0
+<U0055> \xE4 |0
+<U0056> \xE5 |0
+<U0057> \xE6 |0
+<U0058> \xE7 |0
+<U0059> \xE8 |0
+<U005A> \xE9 |0
+<U005B> \x9E |0
+<U005C> \xE0 |0
+<U005D> \x9F |0
+<U005E> \x5F |0
+<U005F> \x6D |0
+<U0060> \x79 |0
+<U0061> \x81 |0
+<U0062> \x82 |0
+<U0063> \x83 |0
+<U0064> \x84 |0
+<U0065> \x85 |0
+<U0066> \x86 |0
+<U0067> \x87 |0
+<U0068> \x88 |0
+<U0069> \x89 |0
+<U006A> \x91 |0
+<U006B> \x92 |0
+<U006C> \x93 |0
+<U006D> \x94 |0
+<U006E> \x95 |0
+<U006F> \x96 |0
+<U0070> \x97 |0
+<U0071> \x98 |0
+<U0072> \x99 |0
+<U0073> \xA2 |0
+<U0074> \xA3 |0
+<U0075> \xA4 |0
+<U0076> \xA5 |0
+<U0077> \xA6 |0
+<U0078> \xA7 |0
+<U0079> \xA8 |0
+<U007A> \xA9 |0
+<U007B> \x9C |0
+<U007C> \xBB |0
+<U007D> \x47 |0
+<U007E> \xDC |0
+<U007F> \x07 |0
+<U0080> \x20 |0
+<U0081> \x21 |0
+<U0082> \x22 |0
+<U0083> \x23 |0
+<U0084> \x24 |0
+<U0085> \x15 |0
+<U0086> \x06 |0
+<U0087> \x17 |0
+<U0088> \x28 |0
+<U0089> \x29 |0
+<U008A> \x2A |0
+<U008B> \x2B |0
+<U008C> \x2C |0
+<U008D> \x09 |0
+<U008E> \x0A |0
+<U008F> \x1B |0
+<U0090> \x30 |0
+<U0091> \x31 |0
+<U0092> \x1A |0
+<U0093> \x33 |0
+<U0094> \x34 |0
+<U0095> \x35 |0
+<U0096> \x36 |0
+<U0097> \x08 |0
+<U0098> \x38 |0
+<U0099> \x39 |0
+<U009A> \x3A |0
+<U009B> \x3B |0
+<U009C> \x04 |0
+<U009D> \x14 |0
+<U009E> \x3E |0
+<U009F> \xFF |0
+<U00A0> \x41 |0
+<U00A1> \xAA |0
+<U00A2> \xB0 |0
+<U00A3> \xB1 |0
+<U00A4> \x5A |0
+<U00A5> \xB2 |0
+<U00A6> \x70 |0
+<U00A7> \xB5 |0
+<U00A8> \xBD |0
+<U00A9> \xB4 |0
+<U00AA> \x9A |0
+<U00AB> \x8A |0
+<U00AC> \xBA |0
+<U00AD> \xCA |0
+<U00AE> \xAF |0
+<U00AF> \xBC |0
+<U00B0> \x90 |0
+<U00B1> \x8F |0
+<U00B2> \xEA |0
+<U00B3> \xFA |0
+<U00B4> \xBE |0
+<U00B5> \xA0 |0
+<U00B6> \xB6 |0
+<U00B7> \xB3 |0
+<U00B8> \x9D |0
+<U00B9> \xDA |0
+<U00BA> \x9B |0
+<U00BB> \x8B |0
+<U00BC> \xB7 |0
+<U00BD> \xB8 |0
+<U00BE> \xB9 |0
+<U00BF> \xAB |0
+<U00C0> \x64 |0
+<U00C1> \x65 |0
+<U00C2> \x62 |0
+<U00C3> \x66 |0
+<U00C4> \x63 |0
+<U00C5> \x5B |0
+<U00C6> \x7B |0
+<U00C7> \x68 |0
+<U00C8> \x74 |0
+<U00C9> \x71 |0
+<U00CA> \x72 |0
+<U00CB> \x73 |0
+<U00CC> \x78 |0
+<U00CD> \x75 |0
+<U00CE> \x76 |0
+<U00CF> \x77 |0
+<U00D0> \xAC |0
+<U00D1> \x69 |0
+<U00D2> \xED |0
+<U00D3> \xEE |0
+<U00D4> \xEB |0
+<U00D5> \xEF |0
+<U00D6> \xEC |0
+<U00D7> \xBF |0
+<U00D8> \x7C |0
+<U00D9> \xFD |0
+<U00DA> \xFE |0
+<U00DB> \xFB |0
+<U00DC> \xFC |0
+<U00DD> \xAD |0
+<U00DE> \xAE |0
+<U00DF> \x59 |0
+<U00E0> \x44 |0
+<U00E1> \x45 |0
+<U00E2> \x42 |0
+<U00E3> \x46 |0
+<U00E4> \x43 |0
+<U00E5> \xD0 |0
+<U00E6> \xC0 |0
+<U00E7> \x48 |0
+<U00E8> \x54 |0
+<U00E9> \x51 |0
+<U00EA> \x52 |0
+<U00EB> \x53 |0
+<U00EC> \x58 |0
+<U00ED> \x55 |0
+<U00EE> \x56 |0
+<U00EF> \x57 |0
+<U00F0> \x8C |0
+<U00F1> \x49 |0
+<U00F2> \xCD |0
+<U00F3> \xCE |0
+<U00F4> \xCB |0
+<U00F5> \xCF |0
+<U00F6> \xCC |0
+<U00F7> \xE1 |0
+<U00F8> \x6A |0
+<U00F9> \xDD |0
+<U00FA> \xDE |0
+<U00FB> \xDB |0
+<U00FC> \xA1 |0
+<U00FD> \x8D |0
+<U00FE> \x8E |0
+<U00FF> \xDF |0
+<U0110> \xAC |1
+<U203E> \xBC |1
+<UFF01> \x4F |1
+<UFF02> \x7F |1
+<UFF03> \x4A |1
+<UFF04> \x67 |1
+<UFF05> \x6C |1
+<UFF06> \x50 |1
+<UFF07> \x7D |1
+<UFF08> \x4D |1
+<UFF09> \x5D |1
+<UFF0A> \x5C |1
+<UFF0B> \x4E |1
+<UFF0C> \x6B |1
+<UFF0D> \x60 |1
+<UFF0E> \x4B |1
+<UFF0F> \x61 |1
+<UFF10> \xF0 |1
+<UFF11> \xF1 |1
+<UFF12> \xF2 |1
+<UFF13> \xF3 |1
+<UFF14> \xF4 |1
+<UFF15> \xF5 |1
+<UFF16> \xF6 |1
+<UFF17> \xF7 |1
+<UFF18> \xF8 |1
+<UFF19> \xF9 |1
+<UFF1A> \x7A |1
+<UFF1B> \x5E |1
+<UFF1C> \x4C |1
+<UFF1D> \x7E |1
+<UFF1E> \x6E |1
+<UFF1F> \x6F |1
+<UFF20> \x80 |1
+<UFF21> \xC1 |1
+<UFF22> \xC2 |1
+<UFF23> \xC3 |1
+<UFF24> \xC4 |1
+<UFF25> \xC5 |1
+<UFF26> \xC6 |1
+<UFF27> \xC7 |1
+<UFF28> \xC8 |1
+<UFF29> \xC9 |1
+<UFF2A> \xD1 |1
+<UFF2B> \xD2 |1
+<UFF2C> \xD3 |1
+<UFF2D> \xD4 |1
+<UFF2E> \xD5 |1
+<UFF2F> \xD6 |1
+<UFF30> \xD7 |1
+<UFF31> \xD8 |1
+<UFF32> \xD9 |1
+<UFF33> \xE2 |1
+<UFF34> \xE3 |1
+<UFF35> \xE4 |1
+<UFF36> \xE5 |1
+<UFF37> \xE6 |1
+<UFF38> \xE7 |1
+<UFF39> \xE8 |1
+<UFF3A> \xE9 |1
+<UFF3B> \x9E |1
+<UFF3C> \xE0 |1
+<UFF3D> \x9F |1
+<UFF3E> \x5F |1
+<UFF3F> \x6D |1
+<UFF40> \x79 |1
+<UFF41> \x81 |1
+<UFF42> \x82 |1
+<UFF43> \x83 |1
+<UFF44> \x84 |1
+<UFF45> \x85 |1
+<UFF46> \x86 |1
+<UFF47> \x87 |1
+<UFF48> \x88 |1
+<UFF49> \x89 |1
+<UFF4A> \x91 |1
+<UFF4B> \x92 |1
+<UFF4C> \x93 |1
+<UFF4D> \x94 |1
+<UFF4E> \x95 |1
+<UFF4F> \x96 |1
+<UFF50> \x97 |1
+<UFF51> \x98 |1
+<UFF52> \x99 |1
+<UFF53> \xA2 |1
+<UFF54> \xA3 |1
+<UFF55> \xA4 |1
+<UFF56> \xA5 |1
+<UFF57> \xA6 |1
+<UFF58> \xA7 |1
+<UFF59> \xA8 |1
+<UFF5A> \xA9 |1
+<UFF5B> \x9C |1
+<UFF5C> \xBB |1
+<UFF5D> \x47 |1
+<UFF5E> \xDC |1
+END CHARMAP
diff --git a/mcs/class/I18N/Rare/ibm-278.ucm b/mcs/class/I18N/Rare/ibm-278.ucm
new file mode 100644
index 00000000000..068f0a3f2f0
--- /dev/null
+++ b/mcs/class/I18N/Rare/ibm-278.ucm
@@ -0,0 +1,379 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1995-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Mon Nov 13 08:50:41 2000
+#
+# File created by dtcocm version 3.00
+# from source files 34B00116.RPMAP100 and 011634B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-278"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x3F
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-278
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x37 |0
+<U0005> \x2D |0
+<U0006> \x2E |0
+<U0007> \x2F |0
+<U0008> \x16 |0
+<U0009> \x05 |0
+<U000A> \x25 |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x3C |0
+<U0015> \x3D |0
+<U0016> \x32 |0
+<U0017> \x26 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x3F |0
+<U001B> \x27 |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x40 |0
+<U0021> \x4F |0
+<U0022> \x7F |0
+<U0023> \x63 |0
+<U0024> \x67 |0
+<U0025> \x6C |0
+<U0026> \x50 |0
+<U0027> \x7D |0
+<U0028> \x4D |0
+<U0029> \x5D |0
+<U002A> \x5C |0
+<U002B> \x4E |0
+<U002C> \x6B |0
+<U002D> \x60 |0
+<U002E> \x4B |0
+<U002F> \x61 |0
+<U0030> \xF0 |0
+<U0031> \xF1 |0
+<U0032> \xF2 |0
+<U0033> \xF3 |0
+<U0034> \xF4 |0
+<U0035> \xF5 |0
+<U0036> \xF6 |0
+<U0037> \xF7 |0
+<U0038> \xF8 |0
+<U0039> \xF9 |0
+<U003A> \x7A |0
+<U003B> \x5E |0
+<U003C> \x4C |0
+<U003D> \x7E |0
+<U003E> \x6E |0
+<U003F> \x6F |0
+<U0040> \xEC |0
+<U0041> \xC1 |0
+<U0042> \xC2 |0
+<U0043> \xC3 |0
+<U0044> \xC4 |0
+<U0045> \xC5 |0
+<U0046> \xC6 |0
+<U0047> \xC7 |0
+<U0048> \xC8 |0
+<U0049> \xC9 |0
+<U004A> \xD1 |0
+<U004B> \xD2 |0
+<U004C> \xD3 |0
+<U004D> \xD4 |0
+<U004E> \xD5 |0
+<U004F> \xD6 |0
+<U0050> \xD7 |0
+<U0051> \xD8 |0
+<U0052> \xD9 |0
+<U0053> \xE2 |0
+<U0054> \xE3 |0
+<U0055> \xE4 |0
+<U0056> \xE5 |0
+<U0057> \xE6 |0
+<U0058> \xE7 |0
+<U0059> \xE8 |0
+<U005A> \xE9 |0
+<U005B> \xB5 |0
+<U005C> \x71 |0
+<U005D> \x9F |0
+<U005E> \x5F |0
+<U005F> \x6D |0
+<U0060> \x51 |0
+<U0061> \x81 |0
+<U0062> \x82 |0
+<U0063> \x83 |0
+<U0064> \x84 |0
+<U0065> \x85 |0
+<U0066> \x86 |0
+<U0067> \x87 |0
+<U0068> \x88 |0
+<U0069> \x89 |0
+<U006A> \x91 |0
+<U006B> \x92 |0
+<U006C> \x93 |0
+<U006D> \x94 |0
+<U006E> \x95 |0
+<U006F> \x96 |0
+<U0070> \x97 |0
+<U0071> \x98 |0
+<U0072> \x99 |0
+<U0073> \xA2 |0
+<U0074> \xA3 |0
+<U0075> \xA4 |0
+<U0076> \xA5 |0
+<U0077> \xA6 |0
+<U0078> \xA7 |0
+<U0079> \xA8 |0
+<U007A> \xA9 |0
+<U007B> \x43 |0
+<U007C> \xBB |0
+<U007D> \x47 |0
+<U007E> \xDC |0
+<U007F> \x07 |0
+<U0080> \x20 |0
+<U0081> \x21 |0
+<U0082> \x22 |0
+<U0083> \x23 |0
+<U0084> \x24 |0
+<U0085> \x15 |0
+<U0086> \x06 |0
+<U0087> \x17 |0
+<U0088> \x28 |0
+<U0089> \x29 |0
+<U008A> \x2A |0
+<U008B> \x2B |0
+<U008C> \x2C |0
+<U008D> \x09 |0
+<U008E> \x0A |0
+<U008F> \x1B |0
+<U0090> \x30 |0
+<U0091> \x31 |0
+<U0092> \x1A |0
+<U0093> \x33 |0
+<U0094> \x34 |0
+<U0095> \x35 |0
+<U0096> \x36 |0
+<U0097> \x08 |0
+<U0098> \x38 |0
+<U0099> \x39 |0
+<U009A> \x3A |0
+<U009B> \x3B |0
+<U009C> \x04 |0
+<U009D> \x14 |0
+<U009E> \x3E |0
+<U009F> \xFF |0
+<U00A0> \x41 |0
+<U00A1> \xAA |0
+<U00A2> \xB0 |0
+<U00A3> \xB1 |0
+<U00A4> \x5A |0
+<U00A5> \xB2 |0
+<U00A6> \xCC |0
+<U00A7> \x4A |0
+<U00A8> \xBD |0
+<U00A9> \xB4 |0
+<U00AA> \x9A |0
+<U00AB> \x8A |0
+<U00AC> \xBA |0
+<U00AD> \xCA |0
+<U00AE> \xAF |0
+<U00AF> \xBC |0
+<U00B0> \x90 |0
+<U00B1> \x8F |0
+<U00B2> \xEA |0
+<U00B3> \xFA |0
+<U00B4> \xBE |0
+<U00B5> \xA0 |0
+<U00B6> \xB6 |0
+<U00B7> \xB3 |0
+<U00B8> \x9D |0
+<U00B9> \xDA |0
+<U00BA> \x9B |0
+<U00BB> \x8B |0
+<U00BC> \xB7 |0
+<U00BD> \xB8 |0
+<U00BE> \xB9 |0
+<U00BF> \xAB |0
+<U00C0> \x64 |0
+<U00C1> \x65 |0
+<U00C2> \x62 |0
+<U00C3> \x66 |0
+<U00C4> \x7B |0
+<U00C5> \x5B |0
+<U00C6> \x9E |0
+<U00C7> \x68 |0
+<U00C8> \x74 |0
+<U00C9> \xE0 |0
+<U00CA> \x72 |0
+<U00CB> \x73 |0
+<U00CC> \x78 |0
+<U00CD> \x75 |0
+<U00CE> \x76 |0
+<U00CF> \x77 |0
+<U00D0> \xAC |0
+<U00D1> \x69 |0
+<U00D2> \xED |0
+<U00D3> \xEE |0
+<U00D4> \xEB |0
+<U00D5> \xEF |0
+<U00D6> \x7C |0
+<U00D7> \xBF |0
+<U00D8> \x80 |0
+<U00D9> \xFD |0
+<U00DA> \xFE |0
+<U00DB> \xFB |0
+<U00DC> \xFC |0
+<U00DD> \xAD |0
+<U00DE> \xAE |0
+<U00DF> \x59 |0
+<U00E0> \x44 |0
+<U00E1> \x45 |0
+<U00E2> \x42 |0
+<U00E3> \x46 |0
+<U00E4> \xC0 |0
+<U00E5> \xD0 |0
+<U00E6> \x9C |0
+<U00E7> \x48 |0
+<U00E8> \x54 |0
+<U00E9> \x79 |0
+<U00EA> \x52 |0
+<U00EB> \x53 |0
+<U00EC> \x58 |0
+<U00ED> \x55 |0
+<U00EE> \x56 |0
+<U00EF> \x57 |0
+<U00F0> \x8C |0
+<U00F1> \x49 |0
+<U00F2> \xCD |0
+<U00F3> \xCE |0
+<U00F4> \xCB |0
+<U00F5> \xCF |0
+<U00F6> \x6A |0
+<U00F7> \xE1 |0
+<U00F8> \x70 |0
+<U00F9> \xDD |0
+<U00FA> \xDE |0
+<U00FB> \xDB |0
+<U00FC> \xA1 |0
+<U00FD> \x8D |0
+<U00FE> \x8E |0
+<U00FF> \xDF |0
+<U0110> \xAC |1
+<U203E> \xBC |1
+<UFF01> \x4F |1
+<UFF02> \x7F |1
+<UFF03> \x63 |1
+<UFF04> \x67 |1
+<UFF05> \x6C |1
+<UFF06> \x50 |1
+<UFF07> \x7D |1
+<UFF08> \x4D |1
+<UFF09> \x5D |1
+<UFF0A> \x5C |1
+<UFF0B> \x4E |1
+<UFF0C> \x6B |1
+<UFF0D> \x60 |1
+<UFF0E> \x4B |1
+<UFF0F> \x61 |1
+<UFF10> \xF0 |1
+<UFF11> \xF1 |1
+<UFF12> \xF2 |1
+<UFF13> \xF3 |1
+<UFF14> \xF4 |1
+<UFF15> \xF5 |1
+<UFF16> \xF6 |1
+<UFF17> \xF7 |1
+<UFF18> \xF8 |1
+<UFF19> \xF9 |1
+<UFF1A> \x7A |1
+<UFF1B> \x5E |1
+<UFF1C> \x4C |1
+<UFF1D> \x7E |1
+<UFF1E> \x6E |1
+<UFF1F> \x6F |1
+<UFF20> \xEC |1
+<UFF21> \xC1 |1
+<UFF22> \xC2 |1
+<UFF23> \xC3 |1
+<UFF24> \xC4 |1
+<UFF25> \xC5 |1
+<UFF26> \xC6 |1
+<UFF27> \xC7 |1
+<UFF28> \xC8 |1
+<UFF29> \xC9 |1
+<UFF2A> \xD1 |1
+<UFF2B> \xD2 |1
+<UFF2C> \xD3 |1
+<UFF2D> \xD4 |1
+<UFF2E> \xD5 |1
+<UFF2F> \xD6 |1
+<UFF30> \xD7 |1
+<UFF31> \xD8 |1
+<UFF32> \xD9 |1
+<UFF33> \xE2 |1
+<UFF34> \xE3 |1
+<UFF35> \xE4 |1
+<UFF36> \xE5 |1
+<UFF37> \xE6 |1
+<UFF38> \xE7 |1
+<UFF39> \xE8 |1
+<UFF3A> \xE9 |1
+<UFF3B> \xB5 |1
+<UFF3C> \x71 |1
+<UFF3D> \x9F |1
+<UFF3E> \x5F |1
+<UFF3F> \x6D |1
+<UFF40> \x51 |1
+<UFF41> \x81 |1
+<UFF42> \x82 |1
+<UFF43> \x83 |1
+<UFF44> \x84 |1
+<UFF45> \x85 |1
+<UFF46> \x86 |1
+<UFF47> \x87 |1
+<UFF48> \x88 |1
+<UFF49> \x89 |1
+<UFF4A> \x91 |1
+<UFF4B> \x92 |1
+<UFF4C> \x93 |1
+<UFF4D> \x94 |1
+<UFF4E> \x95 |1
+<UFF4F> \x96 |1
+<UFF50> \x97 |1
+<UFF51> \x98 |1
+<UFF52> \x99 |1
+<UFF53> \xA2 |1
+<UFF54> \xA3 |1
+<UFF55> \xA4 |1
+<UFF56> \xA5 |1
+<UFF57> \xA6 |1
+<UFF58> \xA7 |1
+<UFF59> \xA8 |1
+<UFF5A> \xA9 |1
+<UFF5B> \x43 |1
+<UFF5C> \xBB |1
+<UFF5D> \x47 |1
+<UFF5E> \xDC |1
+END CHARMAP
diff --git a/mcs/class/I18N/Rare/ibm-280.ucm b/mcs/class/I18N/Rare/ibm-280.ucm
new file mode 100644
index 00000000000..e050f2a558c
--- /dev/null
+++ b/mcs/class/I18N/Rare/ibm-280.ucm
@@ -0,0 +1,379 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1995-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Mon Nov 13 08:50:41 2000
+#
+# File created by dtcocm version 3.00
+# from source files 34B00118.RPMAP100 and 011834B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-280"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x3F
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-280
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x37 |0
+<U0005> \x2D |0
+<U0006> \x2E |0
+<U0007> \x2F |0
+<U0008> \x16 |0
+<U0009> \x05 |0
+<U000A> \x25 |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x3C |0
+<U0015> \x3D |0
+<U0016> \x32 |0
+<U0017> \x26 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x3F |0
+<U001B> \x27 |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x40 |0
+<U0021> \x4F |0
+<U0022> \x7F |0
+<U0023> \xB1 |0
+<U0024> \x5B |0
+<U0025> \x6C |0
+<U0026> \x50 |0
+<U0027> \x7D |0
+<U0028> \x4D |0
+<U0029> \x5D |0
+<U002A> \x5C |0
+<U002B> \x4E |0
+<U002C> \x6B |0
+<U002D> \x60 |0
+<U002E> \x4B |0
+<U002F> \x61 |0
+<U0030> \xF0 |0
+<U0031> \xF1 |0
+<U0032> \xF2 |0
+<U0033> \xF3 |0
+<U0034> \xF4 |0
+<U0035> \xF5 |0
+<U0036> \xF6 |0
+<U0037> \xF7 |0
+<U0038> \xF8 |0
+<U0039> \xF9 |0
+<U003A> \x7A |0
+<U003B> \x5E |0
+<U003C> \x4C |0
+<U003D> \x7E |0
+<U003E> \x6E |0
+<U003F> \x6F |0
+<U0040> \xB5 |0
+<U0041> \xC1 |0
+<U0042> \xC2 |0
+<U0043> \xC3 |0
+<U0044> \xC4 |0
+<U0045> \xC5 |0
+<U0046> \xC6 |0
+<U0047> \xC7 |0
+<U0048> \xC8 |0
+<U0049> \xC9 |0
+<U004A> \xD1 |0
+<U004B> \xD2 |0
+<U004C> \xD3 |0
+<U004D> \xD4 |0
+<U004E> \xD5 |0
+<U004F> \xD6 |0
+<U0050> \xD7 |0
+<U0051> \xD8 |0
+<U0052> \xD9 |0
+<U0053> \xE2 |0
+<U0054> \xE3 |0
+<U0055> \xE4 |0
+<U0056> \xE5 |0
+<U0057> \xE6 |0
+<U0058> \xE7 |0
+<U0059> \xE8 |0
+<U005A> \xE9 |0
+<U005B> \x90 |0
+<U005C> \x48 |0
+<U005D> \x51 |0
+<U005E> \x5F |0
+<U005F> \x6D |0
+<U0060> \xDD |0
+<U0061> \x81 |0
+<U0062> \x82 |0
+<U0063> \x83 |0
+<U0064> \x84 |0
+<U0065> \x85 |0
+<U0066> \x86 |0
+<U0067> \x87 |0
+<U0068> \x88 |0
+<U0069> \x89 |0
+<U006A> \x91 |0
+<U006B> \x92 |0
+<U006C> \x93 |0
+<U006D> \x94 |0
+<U006E> \x95 |0
+<U006F> \x96 |0
+<U0070> \x97 |0
+<U0071> \x98 |0
+<U0072> \x99 |0
+<U0073> \xA2 |0
+<U0074> \xA3 |0
+<U0075> \xA4 |0
+<U0076> \xA5 |0
+<U0077> \xA6 |0
+<U0078> \xA7 |0
+<U0079> \xA8 |0
+<U007A> \xA9 |0
+<U007B> \x44 |0
+<U007C> \xBB |0
+<U007D> \x54 |0
+<U007E> \x58 |0
+<U007F> \x07 |0
+<U0080> \x20 |0
+<U0081> \x21 |0
+<U0082> \x22 |0
+<U0083> \x23 |0
+<U0084> \x24 |0
+<U0085> \x15 |0
+<U0086> \x06 |0
+<U0087> \x17 |0
+<U0088> \x28 |0
+<U0089> \x29 |0
+<U008A> \x2A |0
+<U008B> \x2B |0
+<U008C> \x2C |0
+<U008D> \x09 |0
+<U008E> \x0A |0
+<U008F> \x1B |0
+<U0090> \x30 |0
+<U0091> \x31 |0
+<U0092> \x1A |0
+<U0093> \x33 |0
+<U0094> \x34 |0
+<U0095> \x35 |0
+<U0096> \x36 |0
+<U0097> \x08 |0
+<U0098> \x38 |0
+<U0099> \x39 |0
+<U009A> \x3A |0
+<U009B> \x3B |0
+<U009C> \x04 |0
+<U009D> \x14 |0
+<U009E> \x3E |0
+<U009F> \xFF |0
+<U00A0> \x41 |0
+<U00A1> \xAA |0
+<U00A2> \xB0 |0
+<U00A3> \x7B |0
+<U00A4> \x9F |0
+<U00A5> \xB2 |0
+<U00A6> \xCD |0
+<U00A7> \x7C |0
+<U00A8> \xBD |0
+<U00A9> \xB4 |0
+<U00AA> \x9A |0
+<U00AB> \x8A |0
+<U00AC> \xBA |0
+<U00AD> \xCA |0
+<U00AE> \xAF |0
+<U00AF> \xBC |0
+<U00B0> \x4A |0
+<U00B1> \x8F |0
+<U00B2> \xEA |0
+<U00B3> \xFA |0
+<U00B4> \xBE |0
+<U00B5> \xA0 |0
+<U00B6> \xB6 |0
+<U00B7> \xB3 |0
+<U00B8> \x9D |0
+<U00B9> \xDA |0
+<U00BA> \x9B |0
+<U00BB> \x8B |0
+<U00BC> \xB7 |0
+<U00BD> \xB8 |0
+<U00BE> \xB9 |0
+<U00BF> \xAB |0
+<U00C0> \x64 |0
+<U00C1> \x65 |0
+<U00C2> \x62 |0
+<U00C3> \x66 |0
+<U00C4> \x63 |0
+<U00C5> \x67 |0
+<U00C6> \x9E |0
+<U00C7> \x68 |0
+<U00C8> \x74 |0
+<U00C9> \x71 |0
+<U00CA> \x72 |0
+<U00CB> \x73 |0
+<U00CC> \x78 |0
+<U00CD> \x75 |0
+<U00CE> \x76 |0
+<U00CF> \x77 |0
+<U00D0> \xAC |0
+<U00D1> \x69 |0
+<U00D2> \xED |0
+<U00D3> \xEE |0
+<U00D4> \xEB |0
+<U00D5> \xEF |0
+<U00D6> \xEC |0
+<U00D7> \xBF |0
+<U00D8> \x80 |0
+<U00D9> \xFD |0
+<U00DA> \xFE |0
+<U00DB> \xFB |0
+<U00DC> \xFC |0
+<U00DD> \xAD |0
+<U00DE> \xAE |0
+<U00DF> \x59 |0
+<U00E0> \xC0 |0
+<U00E1> \x45 |0
+<U00E2> \x42 |0
+<U00E3> \x46 |0
+<U00E4> \x43 |0
+<U00E5> \x47 |0
+<U00E6> \x9C |0
+<U00E7> \xE0 |0
+<U00E8> \xD0 |0
+<U00E9> \x5A |0
+<U00EA> \x52 |0
+<U00EB> \x53 |0
+<U00EC> \xA1 |0
+<U00ED> \x55 |0
+<U00EE> \x56 |0
+<U00EF> \x57 |0
+<U00F0> \x8C |0
+<U00F1> \x49 |0
+<U00F2> \x6A |0
+<U00F3> \xCE |0
+<U00F4> \xCB |0
+<U00F5> \xCF |0
+<U00F6> \xCC |0
+<U00F7> \xE1 |0
+<U00F8> \x70 |0
+<U00F9> \x79 |0
+<U00FA> \xDE |0
+<U00FB> \xDB |0
+<U00FC> \xDC |0
+<U00FD> \x8D |0
+<U00FE> \x8E |0
+<U00FF> \xDF |0
+<U0110> \xAC |1
+<U203E> \xBC |1
+<UFF01> \x4F |1
+<UFF02> \x7F |1
+<UFF03> \xB1 |1
+<UFF04> \x5B |1
+<UFF05> \x6C |1
+<UFF06> \x50 |1
+<UFF07> \x7D |1
+<UFF08> \x4D |1
+<UFF09> \x5D |1
+<UFF0A> \x5C |1
+<UFF0B> \x4E |1
+<UFF0C> \x6B |1
+<UFF0D> \x60 |1
+<UFF0E> \x4B |1
+<UFF0F> \x61 |1
+<UFF10> \xF0 |1
+<UFF11> \xF1 |1
+<UFF12> \xF2 |1
+<UFF13> \xF3 |1
+<UFF14> \xF4 |1
+<UFF15> \xF5 |1
+<UFF16> \xF6 |1
+<UFF17> \xF7 |1
+<UFF18> \xF8 |1
+<UFF19> \xF9 |1
+<UFF1A> \x7A |1
+<UFF1B> \x5E |1
+<UFF1C> \x4C |1
+<UFF1D> \x7E |1
+<UFF1E> \x6E |1
+<UFF1F> \x6F |1
+<UFF20> \xB5 |1
+<UFF21> \xC1 |1
+<UFF22> \xC2 |1
+<UFF23> \xC3 |1
+<UFF24> \xC4 |1
+<UFF25> \xC5 |1
+<UFF26> \xC6 |1
+<UFF27> \xC7 |1
+<UFF28> \xC8 |1
+<UFF29> \xC9 |1
+<UFF2A> \xD1 |1
+<UFF2B> \xD2 |1
+<UFF2C> \xD3 |1
+<UFF2D> \xD4 |1
+<UFF2E> \xD5 |1
+<UFF2F> \xD6 |1
+<UFF30> \xD7 |1
+<UFF31> \xD8 |1
+<UFF32> \xD9 |1
+<UFF33> \xE2 |1
+<UFF34> \xE3 |1
+<UFF35> \xE4 |1
+<UFF36> \xE5 |1
+<UFF37> \xE6 |1
+<UFF38> \xE7 |1
+<UFF39> \xE8 |1
+<UFF3A> \xE9 |1
+<UFF3B> \x90 |1
+<UFF3C> \x48 |1
+<UFF3D> \x51 |1
+<UFF3E> \x5F |1
+<UFF3F> \x6D |1
+<UFF40> \xDD |1
+<UFF41> \x81 |1
+<UFF42> \x82 |1
+<UFF43> \x83 |1
+<UFF44> \x84 |1
+<UFF45> \x85 |1
+<UFF46> \x86 |1
+<UFF47> \x87 |1
+<UFF48> \x88 |1
+<UFF49> \x89 |1
+<UFF4A> \x91 |1
+<UFF4B> \x92 |1
+<UFF4C> \x93 |1
+<UFF4D> \x94 |1
+<UFF4E> \x95 |1
+<UFF4F> \x96 |1
+<UFF50> \x97 |1
+<UFF51> \x98 |1
+<UFF52> \x99 |1
+<UFF53> \xA2 |1
+<UFF54> \xA3 |1
+<UFF55> \xA4 |1
+<UFF56> \xA5 |1
+<UFF57> \xA6 |1
+<UFF58> \xA7 |1
+<UFF59> \xA8 |1
+<UFF5A> \xA9 |1
+<UFF5B> \x44 |1
+<UFF5C> \xBB |1
+<UFF5D> \x54 |1
+<UFF5E> \x58 |1
+END CHARMAP
diff --git a/mcs/class/I18N/Rare/ibm-284.ucm b/mcs/class/I18N/Rare/ibm-284.ucm
new file mode 100644
index 00000000000..8dcc9642409
--- /dev/null
+++ b/mcs/class/I18N/Rare/ibm-284.ucm
@@ -0,0 +1,379 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1995-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Mon Nov 13 08:50:41 2000
+#
+# File created by dtcocm version 3.00
+# from source files 34B0011C.RPMAP100 and 011C34B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-284"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x3F
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-284
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x37 |0
+<U0005> \x2D |0
+<U0006> \x2E |0
+<U0007> \x2F |0
+<U0008> \x16 |0
+<U0009> \x05 |0
+<U000A> \x25 |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x3C |0
+<U0015> \x3D |0
+<U0016> \x32 |0
+<U0017> \x26 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x3F |0
+<U001B> \x27 |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x40 |0
+<U0021> \xBB |0
+<U0022> \x7F |0
+<U0023> \x69 |0
+<U0024> \x5B |0
+<U0025> \x6C |0
+<U0026> \x50 |0
+<U0027> \x7D |0
+<U0028> \x4D |0
+<U0029> \x5D |0
+<U002A> \x5C |0
+<U002B> \x4E |0
+<U002C> \x6B |0
+<U002D> \x60 |0
+<U002E> \x4B |0
+<U002F> \x61 |0
+<U0030> \xF0 |0
+<U0031> \xF1 |0
+<U0032> \xF2 |0
+<U0033> \xF3 |0
+<U0034> \xF4 |0
+<U0035> \xF5 |0
+<U0036> \xF6 |0
+<U0037> \xF7 |0
+<U0038> \xF8 |0
+<U0039> \xF9 |0
+<U003A> \x7A |0
+<U003B> \x5E |0
+<U003C> \x4C |0
+<U003D> \x7E |0
+<U003E> \x6E |0
+<U003F> \x6F |0
+<U0040> \x7C |0
+<U0041> \xC1 |0
+<U0042> \xC2 |0
+<U0043> \xC3 |0
+<U0044> \xC4 |0
+<U0045> \xC5 |0
+<U0046> \xC6 |0
+<U0047> \xC7 |0
+<U0048> \xC8 |0
+<U0049> \xC9 |0
+<U004A> \xD1 |0
+<U004B> \xD2 |0
+<U004C> \xD3 |0
+<U004D> \xD4 |0
+<U004E> \xD5 |0
+<U004F> \xD6 |0
+<U0050> \xD7 |0
+<U0051> \xD8 |0
+<U0052> \xD9 |0
+<U0053> \xE2 |0
+<U0054> \xE3 |0
+<U0055> \xE4 |0
+<U0056> \xE5 |0
+<U0057> \xE6 |0
+<U0058> \xE7 |0
+<U0059> \xE8 |0
+<U005A> \xE9 |0
+<U005B> \x4A |0
+<U005C> \xE0 |0
+<U005D> \x5A |0
+<U005E> \xBA |0
+<U005F> \x6D |0
+<U0060> \x79 |0
+<U0061> \x81 |0
+<U0062> \x82 |0
+<U0063> \x83 |0
+<U0064> \x84 |0
+<U0065> \x85 |0
+<U0066> \x86 |0
+<U0067> \x87 |0
+<U0068> \x88 |0
+<U0069> \x89 |0
+<U006A> \x91 |0
+<U006B> \x92 |0
+<U006C> \x93 |0
+<U006D> \x94 |0
+<U006E> \x95 |0
+<U006F> \x96 |0
+<U0070> \x97 |0
+<U0071> \x98 |0
+<U0072> \x99 |0
+<U0073> \xA2 |0
+<U0074> \xA3 |0
+<U0075> \xA4 |0
+<U0076> \xA5 |0
+<U0077> \xA6 |0
+<U0078> \xA7 |0
+<U0079> \xA8 |0
+<U007A> \xA9 |0
+<U007B> \xC0 |0
+<U007C> \x4F |0
+<U007D> \xD0 |0
+<U007E> \xBD |0
+<U007F> \x07 |0
+<U0080> \x20 |0
+<U0081> \x21 |0
+<U0082> \x22 |0
+<U0083> \x23 |0
+<U0084> \x24 |0
+<U0085> \x15 |0
+<U0086> \x06 |0
+<U0087> \x17 |0
+<U0088> \x28 |0
+<U0089> \x29 |0
+<U008A> \x2A |0
+<U008B> \x2B |0
+<U008C> \x2C |0
+<U008D> \x09 |0
+<U008E> \x0A |0
+<U008F> \x1B |0
+<U0090> \x30 |0
+<U0091> \x31 |0
+<U0092> \x1A |0
+<U0093> \x33 |0
+<U0094> \x34 |0
+<U0095> \x35 |0
+<U0096> \x36 |0
+<U0097> \x08 |0
+<U0098> \x38 |0
+<U0099> \x39 |0
+<U009A> \x3A |0
+<U009B> \x3B |0
+<U009C> \x04 |0
+<U009D> \x14 |0
+<U009E> \x3E |0
+<U009F> \xFF |0
+<U00A0> \x41 |0
+<U00A1> \xAA |0
+<U00A2> \xB0 |0
+<U00A3> \xB1 |0
+<U00A4> \x9F |0
+<U00A5> \xB2 |0
+<U00A6> \x49 |0
+<U00A7> \xB5 |0
+<U00A8> \xA1 |0
+<U00A9> \xB4 |0
+<U00AA> \x9A |0
+<U00AB> \x8A |0
+<U00AC> \x5F |0
+<U00AD> \xCA |0
+<U00AE> \xAF |0
+<U00AF> \xBC |0
+<U00B0> \x90 |0
+<U00B1> \x8F |0
+<U00B2> \xEA |0
+<U00B3> \xFA |0
+<U00B4> \xBE |0
+<U00B5> \xA0 |0
+<U00B6> \xB6 |0
+<U00B7> \xB3 |0
+<U00B8> \x9D |0
+<U00B9> \xDA |0
+<U00BA> \x9B |0
+<U00BB> \x8B |0
+<U00BC> \xB7 |0
+<U00BD> \xB8 |0
+<U00BE> \xB9 |0
+<U00BF> \xAB |0
+<U00C0> \x64 |0
+<U00C1> \x65 |0
+<U00C2> \x62 |0
+<U00C3> \x66 |0
+<U00C4> \x63 |0
+<U00C5> \x67 |0
+<U00C6> \x9E |0
+<U00C7> \x68 |0
+<U00C8> \x74 |0
+<U00C9> \x71 |0
+<U00CA> \x72 |0
+<U00CB> \x73 |0
+<U00CC> \x78 |0
+<U00CD> \x75 |0
+<U00CE> \x76 |0
+<U00CF> \x77 |0
+<U00D0> \xAC |0
+<U00D1> \x7B |0
+<U00D2> \xED |0
+<U00D3> \xEE |0
+<U00D4> \xEB |0
+<U00D5> \xEF |0
+<U00D6> \xEC |0
+<U00D7> \xBF |0
+<U00D8> \x80 |0
+<U00D9> \xFD |0
+<U00DA> \xFE |0
+<U00DB> \xFB |0
+<U00DC> \xFC |0
+<U00DD> \xAD |0
+<U00DE> \xAE |0
+<U00DF> \x59 |0
+<U00E0> \x44 |0
+<U00E1> \x45 |0
+<U00E2> \x42 |0
+<U00E3> \x46 |0
+<U00E4> \x43 |0
+<U00E5> \x47 |0
+<U00E6> \x9C |0
+<U00E7> \x48 |0
+<U00E8> \x54 |0
+<U00E9> \x51 |0
+<U00EA> \x52 |0
+<U00EB> \x53 |0
+<U00EC> \x58 |0
+<U00ED> \x55 |0
+<U00EE> \x56 |0
+<U00EF> \x57 |0
+<U00F0> \x8C |0
+<U00F1> \x6A |0
+<U00F2> \xCD |0
+<U00F3> \xCE |0
+<U00F4> \xCB |0
+<U00F5> \xCF |0
+<U00F6> \xCC |0
+<U00F7> \xE1 |0
+<U00F8> \x70 |0
+<U00F9> \xDD |0
+<U00FA> \xDE |0
+<U00FB> \xDB |0
+<U00FC> \xDC |0
+<U00FD> \x8D |0
+<U00FE> \x8E |0
+<U00FF> \xDF |0
+<U0110> \xAC |1
+<U203E> \xBC |1
+<UFF01> \xBB |1
+<UFF02> \x7F |1
+<UFF03> \x69 |1
+<UFF04> \x5B |1
+<UFF05> \x6C |1
+<UFF06> \x50 |1
+<UFF07> \x7D |1
+<UFF08> \x4D |1
+<UFF09> \x5D |1
+<UFF0A> \x5C |1
+<UFF0B> \x4E |1
+<UFF0C> \x6B |1
+<UFF0D> \x60 |1
+<UFF0E> \x4B |1
+<UFF0F> \x61 |1
+<UFF10> \xF0 |1
+<UFF11> \xF1 |1
+<UFF12> \xF2 |1
+<UFF13> \xF3 |1
+<UFF14> \xF4 |1
+<UFF15> \xF5 |1
+<UFF16> \xF6 |1
+<UFF17> \xF7 |1
+<UFF18> \xF8 |1
+<UFF19> \xF9 |1
+<UFF1A> \x7A |1
+<UFF1B> \x5E |1
+<UFF1C> \x4C |1
+<UFF1D> \x7E |1
+<UFF1E> \x6E |1
+<UFF1F> \x6F |1
+<UFF20> \x7C |1
+<UFF21> \xC1 |1
+<UFF22> \xC2 |1
+<UFF23> \xC3 |1
+<UFF24> \xC4 |1
+<UFF25> \xC5 |1
+<UFF26> \xC6 |1
+<UFF27> \xC7 |1
+<UFF28> \xC8 |1
+<UFF29> \xC9 |1
+<UFF2A> \xD1 |1
+<UFF2B> \xD2 |1
+<UFF2C> \xD3 |1
+<UFF2D> \xD4 |1
+<UFF2E> \xD5 |1
+<UFF2F> \xD6 |1
+<UFF30> \xD7 |1
+<UFF31> \xD8 |1
+<UFF32> \xD9 |1
+<UFF33> \xE2 |1
+<UFF34> \xE3 |1
+<UFF35> \xE4 |1
+<UFF36> \xE5 |1
+<UFF37> \xE6 |1
+<UFF38> \xE7 |1
+<UFF39> \xE8 |1
+<UFF3A> \xE9 |1
+<UFF3B> \x4A |1
+<UFF3C> \xE0 |1
+<UFF3D> \x5A |1
+<UFF3E> \xBA |1
+<UFF3F> \x6D |1
+<UFF40> \x79 |1
+<UFF41> \x81 |1
+<UFF42> \x82 |1
+<UFF43> \x83 |1
+<UFF44> \x84 |1
+<UFF45> \x85 |1
+<UFF46> \x86 |1
+<UFF47> \x87 |1
+<UFF48> \x88 |1
+<UFF49> \x89 |1
+<UFF4A> \x91 |1
+<UFF4B> \x92 |1
+<UFF4C> \x93 |1
+<UFF4D> \x94 |1
+<UFF4E> \x95 |1
+<UFF4F> \x96 |1
+<UFF50> \x97 |1
+<UFF51> \x98 |1
+<UFF52> \x99 |1
+<UFF53> \xA2 |1
+<UFF54> \xA3 |1
+<UFF55> \xA4 |1
+<UFF56> \xA5 |1
+<UFF57> \xA6 |1
+<UFF58> \xA7 |1
+<UFF59> \xA8 |1
+<UFF5A> \xA9 |1
+<UFF5B> \xC0 |1
+<UFF5C> \x4F |1
+<UFF5D> \xD0 |1
+<UFF5E> \xBD |1
+END CHARMAP
diff --git a/mcs/class/I18N/Rare/ibm-285.ucm b/mcs/class/I18N/Rare/ibm-285.ucm
new file mode 100644
index 00000000000..bb74537766e
--- /dev/null
+++ b/mcs/class/I18N/Rare/ibm-285.ucm
@@ -0,0 +1,379 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1995-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Mon Nov 13 08:50:41 2000
+#
+# File created by dtcocm version 3.00
+# from source files 34B0011D.RPMAP100 and 011D34B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-285"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x3F
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-285
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x37 |0
+<U0005> \x2D |0
+<U0006> \x2E |0
+<U0007> \x2F |0
+<U0008> \x16 |0
+<U0009> \x05 |0
+<U000A> \x25 |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x3C |0
+<U0015> \x3D |0
+<U0016> \x32 |0
+<U0017> \x26 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x3F |0
+<U001B> \x27 |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x40 |0
+<U0021> \x5A |0
+<U0022> \x7F |0
+<U0023> \x7B |0
+<U0024> \x4A |0
+<U0025> \x6C |0
+<U0026> \x50 |0
+<U0027> \x7D |0
+<U0028> \x4D |0
+<U0029> \x5D |0
+<U002A> \x5C |0
+<U002B> \x4E |0
+<U002C> \x6B |0
+<U002D> \x60 |0
+<U002E> \x4B |0
+<U002F> \x61 |0
+<U0030> \xF0 |0
+<U0031> \xF1 |0
+<U0032> \xF2 |0
+<U0033> \xF3 |0
+<U0034> \xF4 |0
+<U0035> \xF5 |0
+<U0036> \xF6 |0
+<U0037> \xF7 |0
+<U0038> \xF8 |0
+<U0039> \xF9 |0
+<U003A> \x7A |0
+<U003B> \x5E |0
+<U003C> \x4C |0
+<U003D> \x7E |0
+<U003E> \x6E |0
+<U003F> \x6F |0
+<U0040> \x7C |0
+<U0041> \xC1 |0
+<U0042> \xC2 |0
+<U0043> \xC3 |0
+<U0044> \xC4 |0
+<U0045> \xC5 |0
+<U0046> \xC6 |0
+<U0047> \xC7 |0
+<U0048> \xC8 |0
+<U0049> \xC9 |0
+<U004A> \xD1 |0
+<U004B> \xD2 |0
+<U004C> \xD3 |0
+<U004D> \xD4 |0
+<U004E> \xD5 |0
+<U004F> \xD6 |0
+<U0050> \xD7 |0
+<U0051> \xD8 |0
+<U0052> \xD9 |0
+<U0053> \xE2 |0
+<U0054> \xE3 |0
+<U0055> \xE4 |0
+<U0056> \xE5 |0
+<U0057> \xE6 |0
+<U0058> \xE7 |0
+<U0059> \xE8 |0
+<U005A> \xE9 |0
+<U005B> \xB1 |0
+<U005C> \xE0 |0
+<U005D> \xBB |0
+<U005E> \xBA |0
+<U005F> \x6D |0
+<U0060> \x79 |0
+<U0061> \x81 |0
+<U0062> \x82 |0
+<U0063> \x83 |0
+<U0064> \x84 |0
+<U0065> \x85 |0
+<U0066> \x86 |0
+<U0067> \x87 |0
+<U0068> \x88 |0
+<U0069> \x89 |0
+<U006A> \x91 |0
+<U006B> \x92 |0
+<U006C> \x93 |0
+<U006D> \x94 |0
+<U006E> \x95 |0
+<U006F> \x96 |0
+<U0070> \x97 |0
+<U0071> \x98 |0
+<U0072> \x99 |0
+<U0073> \xA2 |0
+<U0074> \xA3 |0
+<U0075> \xA4 |0
+<U0076> \xA5 |0
+<U0077> \xA6 |0
+<U0078> \xA7 |0
+<U0079> \xA8 |0
+<U007A> \xA9 |0
+<U007B> \xC0 |0
+<U007C> \x4F |0
+<U007D> \xD0 |0
+<U007E> \xBC |0
+<U007F> \x07 |0
+<U0080> \x20 |0
+<U0081> \x21 |0
+<U0082> \x22 |0
+<U0083> \x23 |0
+<U0084> \x24 |0
+<U0085> \x15 |0
+<U0086> \x06 |0
+<U0087> \x17 |0
+<U0088> \x28 |0
+<U0089> \x29 |0
+<U008A> \x2A |0
+<U008B> \x2B |0
+<U008C> \x2C |0
+<U008D> \x09 |0
+<U008E> \x0A |0
+<U008F> \x1B |0
+<U0090> \x30 |0
+<U0091> \x31 |0
+<U0092> \x1A |0
+<U0093> \x33 |0
+<U0094> \x34 |0
+<U0095> \x35 |0
+<U0096> \x36 |0
+<U0097> \x08 |0
+<U0098> \x38 |0
+<U0099> \x39 |0
+<U009A> \x3A |0
+<U009B> \x3B |0
+<U009C> \x04 |0
+<U009D> \x14 |0
+<U009E> \x3E |0
+<U009F> \xFF |0
+<U00A0> \x41 |0
+<U00A1> \xAA |0
+<U00A2> \xB0 |0
+<U00A3> \x5B |0
+<U00A4> \x9F |0
+<U00A5> \xB2 |0
+<U00A6> \x6A |0
+<U00A7> \xB5 |0
+<U00A8> \xBD |0
+<U00A9> \xB4 |0
+<U00AA> \x9A |0
+<U00AB> \x8A |0
+<U00AC> \x5F |0
+<U00AD> \xCA |0
+<U00AE> \xAF |0
+<U00AF> \xA1 |0
+<U00B0> \x90 |0
+<U00B1> \x8F |0
+<U00B2> \xEA |0
+<U00B3> \xFA |0
+<U00B4> \xBE |0
+<U00B5> \xA0 |0
+<U00B6> \xB6 |0
+<U00B7> \xB3 |0
+<U00B8> \x9D |0
+<U00B9> \xDA |0
+<U00BA> \x9B |0
+<U00BB> \x8B |0
+<U00BC> \xB7 |0
+<U00BD> \xB8 |0
+<U00BE> \xB9 |0
+<U00BF> \xAB |0
+<U00C0> \x64 |0
+<U00C1> \x65 |0
+<U00C2> \x62 |0
+<U00C3> \x66 |0
+<U00C4> \x63 |0
+<U00C5> \x67 |0
+<U00C6> \x9E |0
+<U00C7> \x68 |0
+<U00C8> \x74 |0
+<U00C9> \x71 |0
+<U00CA> \x72 |0
+<U00CB> \x73 |0
+<U00CC> \x78 |0
+<U00CD> \x75 |0
+<U00CE> \x76 |0
+<U00CF> \x77 |0
+<U00D0> \xAC |0
+<U00D1> \x69 |0
+<U00D2> \xED |0
+<U00D3> \xEE |0
+<U00D4> \xEB |0
+<U00D5> \xEF |0
+<U00D6> \xEC |0
+<U00D7> \xBF |0
+<U00D8> \x80 |0
+<U00D9> \xFD |0
+<U00DA> \xFE |0
+<U00DB> \xFB |0
+<U00DC> \xFC |0
+<U00DD> \xAD |0
+<U00DE> \xAE |0
+<U00DF> \x59 |0
+<U00E0> \x44 |0
+<U00E1> \x45 |0
+<U00E2> \x42 |0
+<U00E3> \x46 |0
+<U00E4> \x43 |0
+<U00E5> \x47 |0
+<U00E6> \x9C |0
+<U00E7> \x48 |0
+<U00E8> \x54 |0
+<U00E9> \x51 |0
+<U00EA> \x52 |0
+<U00EB> \x53 |0
+<U00EC> \x58 |0
+<U00ED> \x55 |0
+<U00EE> \x56 |0
+<U00EF> \x57 |0
+<U00F0> \x8C |0
+<U00F1> \x49 |0
+<U00F2> \xCD |0
+<U00F3> \xCE |0
+<U00F4> \xCB |0
+<U00F5> \xCF |0
+<U00F6> \xCC |0
+<U00F7> \xE1 |0
+<U00F8> \x70 |0
+<U00F9> \xDD |0
+<U00FA> \xDE |0
+<U00FB> \xDB |0
+<U00FC> \xDC |0
+<U00FD> \x8D |0
+<U00FE> \x8E |0
+<U00FF> \xDF |0
+<U0110> \xAC |1
+<U203E> \xA1 |1
+<UFF01> \x5A |1
+<UFF02> \x7F |1
+<UFF03> \x7B |1
+<UFF04> \x4A |1
+<UFF05> \x6C |1
+<UFF06> \x50 |1
+<UFF07> \x7D |1
+<UFF08> \x4D |1
+<UFF09> \x5D |1
+<UFF0A> \x5C |1
+<UFF0B> \x4E |1
+<UFF0C> \x6B |1
+<UFF0D> \x60 |1
+<UFF0E> \x4B |1
+<UFF0F> \x61 |1
+<UFF10> \xF0 |1
+<UFF11> \xF1 |1
+<UFF12> \xF2 |1
+<UFF13> \xF3 |1
+<UFF14> \xF4 |1
+<UFF15> \xF5 |1
+<UFF16> \xF6 |1
+<UFF17> \xF7 |1
+<UFF18> \xF8 |1
+<UFF19> \xF9 |1
+<UFF1A> \x7A |1
+<UFF1B> \x5E |1
+<UFF1C> \x4C |1
+<UFF1D> \x7E |1
+<UFF1E> \x6E |1
+<UFF1F> \x6F |1
+<UFF20> \x7C |1
+<UFF21> \xC1 |1
+<UFF22> \xC2 |1
+<UFF23> \xC3 |1
+<UFF24> \xC4 |1
+<UFF25> \xC5 |1
+<UFF26> \xC6 |1
+<UFF27> \xC7 |1
+<UFF28> \xC8 |1
+<UFF29> \xC9 |1
+<UFF2A> \xD1 |1
+<UFF2B> \xD2 |1
+<UFF2C> \xD3 |1
+<UFF2D> \xD4 |1
+<UFF2E> \xD5 |1
+<UFF2F> \xD6 |1
+<UFF30> \xD7 |1
+<UFF31> \xD8 |1
+<UFF32> \xD9 |1
+<UFF33> \xE2 |1
+<UFF34> \xE3 |1
+<UFF35> \xE4 |1
+<UFF36> \xE5 |1
+<UFF37> \xE6 |1
+<UFF38> \xE7 |1
+<UFF39> \xE8 |1
+<UFF3A> \xE9 |1
+<UFF3B> \xB1 |1
+<UFF3C> \xE0 |1
+<UFF3D> \xBB |1
+<UFF3E> \xBA |1
+<UFF3F> \x6D |1
+<UFF40> \x79 |1
+<UFF41> \x81 |1
+<UFF42> \x82 |1
+<UFF43> \x83 |1
+<UFF44> \x84 |1
+<UFF45> \x85 |1
+<UFF46> \x86 |1
+<UFF47> \x87 |1
+<UFF48> \x88 |1
+<UFF49> \x89 |1
+<UFF4A> \x91 |1
+<UFF4B> \x92 |1
+<UFF4C> \x93 |1
+<UFF4D> \x94 |1
+<UFF4E> \x95 |1
+<UFF4F> \x96 |1
+<UFF50> \x97 |1
+<UFF51> \x98 |1
+<UFF52> \x99 |1
+<UFF53> \xA2 |1
+<UFF54> \xA3 |1
+<UFF55> \xA4 |1
+<UFF56> \xA5 |1
+<UFF57> \xA6 |1
+<UFF58> \xA7 |1
+<UFF59> \xA8 |1
+<UFF5A> \xA9 |1
+<UFF5B> \xC0 |1
+<UFF5C> \x4F |1
+<UFF5D> \xD0 |1
+<UFF5E> \xBC |1
+END CHARMAP
diff --git a/mcs/class/I18N/Rare/ibm-290.ucm b/mcs/class/I18N/Rare/ibm-290.ucm
new file mode 100644
index 00000000000..eb661591191
--- /dev/null
+++ b/mcs/class/I18N/Rare/ibm-290.ucm
@@ -0,0 +1,349 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1995-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Mon Nov 13 08:50:41 2000
+#
+# File created by dtcocm version 3.00
+# from source files 34B00122.RPMAP100 and 012234B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-290"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x3F
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-290
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x37 |0
+<U0005> \x2D |0
+<U0006> \x2E |0
+<U0007> \x2F |0
+<U0008> \x16 |0
+<U0009> \x05 |0
+<U000A> \x25 |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x3C |0
+<U0015> \x3D |0
+<U0016> \x32 |0
+<U0017> \x26 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x3F |0
+<U001B> \x27 |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x40 |0
+<U0021> \x5A |0
+<U0022> \x7F |0
+<U0023> \x7B |0
+<U0024> \xE0 |0
+<U0025> \x6C |0
+<U0026> \x50 |0
+<U0027> \x7D |0
+<U0028> \x4D |0
+<U0029> \x5D |0
+<U002A> \x5C |0
+<U002B> \x4E |0
+<U002C> \x6B |0
+<U002D> \x60 |0
+<U002E> \x4B |0
+<U002F> \x61 |0
+<U0030> \xF0 |0
+<U0031> \xF1 |0
+<U0032> \xF2 |0
+<U0033> \xF3 |0
+<U0034> \xF4 |0
+<U0035> \xF5 |0
+<U0036> \xF6 |0
+<U0037> \xF7 |0
+<U0038> \xF8 |0
+<U0039> \xF9 |0
+<U003A> \x7A |0
+<U003B> \x5E |0
+<U003C> \x4C |0
+<U003D> \x7E |0
+<U003E> \x6E |0
+<U003F> \x6F |0
+<U0040> \x7C |0
+<U0041> \xC1 |0
+<U0042> \xC2 |0
+<U0043> \xC3 |0
+<U0044> \xC4 |0
+<U0045> \xC5 |0
+<U0046> \xC6 |0
+<U0047> \xC7 |0
+<U0048> \xC8 |0
+<U0049> \xC9 |0
+<U004A> \xD1 |0
+<U004B> \xD2 |0
+<U004C> \xD3 |0
+<U004D> \xD4 |0
+<U004E> \xD5 |0
+<U004F> \xD6 |0
+<U0050> \xD7 |0
+<U0051> \xD8 |0
+<U0052> \xD9 |0
+<U0053> \xE2 |0
+<U0054> \xE3 |0
+<U0055> \xE4 |0
+<U0056> \xE5 |0
+<U0057> \xE6 |0
+<U0058> \xE7 |0
+<U0059> \xE8 |0
+<U005A> \xE9 |0
+<U005B> \x70 |0
+<U005C> \xB2 |0
+<U005D> \x80 |0
+<U005E> \xB0 |0
+<U005F> \x6D |0
+<U0060> \x79 |0
+<U0061> \x62 |0
+<U0062> \x63 |0
+<U0063> \x64 |0
+<U0064> \x65 |0
+<U0065> \x66 |0
+<U0066> \x67 |0
+<U0067> \x68 |0
+<U0068> \x69 |0
+<U0069> \x71 |0
+<U006A> \x72 |0
+<U006B> \x73 |0
+<U006C> \x74 |0
+<U006D> \x75 |0
+<U006E> \x76 |0
+<U006F> \x77 |0
+<U0070> \x78 |0
+<U0071> \x8B |0
+<U0072> \x9B |0
+<U0073> \xAB |0
+<U0074> \xB3 |0
+<U0075> \xB4 |0
+<U0076> \xB5 |0
+<U0077> \xB6 |0
+<U0078> \xB7 |0
+<U0079> \xB8 |0
+<U007A> \xB9 |0
+<U007B> \xC0 |0
+<U007C> \x4F |0
+<U007D> \xD0 |0
+<U007E> \xA0 |0
+<U007F> \x07 |0
+<U0080> \x20 |0
+<U0081> \x21 |0
+<U0082> \x22 |0
+<U0083> \x23 |0
+<U0084> \x24 |0
+<U0085> \x15 |0
+<U0086> \x06 |0
+<U0087> \x17 |0
+<U0088> \x28 |0
+<U0089> \x29 |0
+<U008A> \x2A |0
+<U008B> \x2B |0
+<U008C> \x2C |0
+<U008D> \x09 |0
+<U008E> \x0A |0
+<U008F> \x1B |0
+<U0090> \x30 |0
+<U0091> \x31 |0
+<U0092> \x1A |0
+<U0093> \x33 |0
+<U0094> \x34 |0
+<U0095> \x35 |0
+<U0096> \x36 |0
+<U0097> \x08 |0
+<U0098> \x38 |0
+<U0099> \x39 |0
+<U009A> \x3A |0
+<U009B> \x3B |0
+<U009C> \x04 |0
+<U009D> \x14 |0
+<U009E> \x3E |0
+<U009F> \xFF |0
+<U00A2> \xB1 |0
+<U00A3> \x4A |0
+<U00A5> \x5B |0
+<U00AC> \x5F |0
+<U203E> \xA1 |0
+<UFF01> \x5A |1
+<UFF02> \x7F |1
+<UFF03> \x7B |1
+<UFF04> \xE0 |1
+<UFF05> \x6C |1
+<UFF06> \x50 |1
+<UFF07> \x7D |1
+<UFF08> \x4D |1
+<UFF09> \x5D |1
+<UFF0A> \x5C |1
+<UFF0B> \x4E |1
+<UFF0C> \x6B |1
+<UFF0D> \x60 |1
+<UFF0E> \x4B |1
+<UFF0F> \x61 |1
+<UFF10> \xF0 |1
+<UFF11> \xF1 |1
+<UFF12> \xF2 |1
+<UFF13> \xF3 |1
+<UFF14> \xF4 |1
+<UFF15> \xF5 |1
+<UFF16> \xF6 |1
+<UFF17> \xF7 |1
+<UFF18> \xF8 |1
+<UFF19> \xF9 |1
+<UFF1A> \x7A |1
+<UFF1B> \x5E |1
+<UFF1C> \x4C |1
+<UFF1D> \x7E |1
+<UFF1E> \x6E |1
+<UFF1F> \x6F |1
+<UFF20> \x7C |1
+<UFF21> \xC1 |1
+<UFF22> \xC2 |1
+<UFF23> \xC3 |1
+<UFF24> \xC4 |1
+<UFF25> \xC5 |1
+<UFF26> \xC6 |1
+<UFF27> \xC7 |1
+<UFF28> \xC8 |1
+<UFF29> \xC9 |1
+<UFF2A> \xD1 |1
+<UFF2B> \xD2 |1
+<UFF2C> \xD3 |1
+<UFF2D> \xD4 |1
+<UFF2E> \xD5 |1
+<UFF2F> \xD6 |1
+<UFF30> \xD7 |1
+<UFF31> \xD8 |1
+<UFF32> \xD9 |1
+<UFF33> \xE2 |1
+<UFF34> \xE3 |1
+<UFF35> \xE4 |1
+<UFF36> \xE5 |1
+<UFF37> \xE6 |1
+<UFF38> \xE7 |1
+<UFF39> \xE8 |1
+<UFF3A> \xE9 |1
+<UFF3B> \x70 |1
+<UFF3C> \xB2 |1
+<UFF3D> \x80 |1
+<UFF3E> \xB0 |1
+<UFF3F> \x6D |1
+<UFF40> \x79 |1
+<UFF41> \x62 |1
+<UFF42> \x63 |1
+<UFF43> \x64 |1
+<UFF44> \x65 |1
+<UFF45> \x66 |1
+<UFF46> \x67 |1
+<UFF47> \x68 |1
+<UFF48> \x69 |1
+<UFF49> \x71 |1
+<UFF4A> \x72 |1
+<UFF4B> \x73 |1
+<UFF4C> \x74 |1
+<UFF4D> \x75 |1
+<UFF4E> \x76 |1
+<UFF4F> \x77 |1
+<UFF50> \x78 |1
+<UFF51> \x8B |1
+<UFF52> \x9B |1
+<UFF53> \xAB |1
+<UFF54> \xB3 |1
+<UFF55> \xB4 |1
+<UFF56> \xB5 |1
+<UFF57> \xB6 |1
+<UFF58> \xB7 |1
+<UFF59> \xB8 |1
+<UFF5A> \xB9 |1
+<UFF5B> \xC0 |1
+<UFF5C> \x4F |1
+<UFF5D> \xD0 |1
+<UFF5E> \xA0 |1
+<UFF61> \x41 |0
+<UFF62> \x42 |0
+<UFF63> \x43 |0
+<UFF64> \x44 |0
+<UFF65> \x45 |0
+<UFF66> \x46 |0
+<UFF67> \x47 |0
+<UFF68> \x48 |0
+<UFF69> \x49 |0
+<UFF6A> \x51 |0
+<UFF6B> \x52 |0
+<UFF6C> \x53 |0
+<UFF6D> \x54 |0
+<UFF6E> \x55 |0
+<UFF6F> \x56 |0
+<UFF70> \x58 |0
+<UFF71> \x81 |0
+<UFF72> \x82 |0
+<UFF73> \x83 |0
+<UFF74> \x84 |0
+<UFF75> \x85 |0
+<UFF76> \x86 |0
+<UFF77> \x87 |0
+<UFF78> \x88 |0
+<UFF79> \x89 |0
+<UFF7A> \x8A |0
+<UFF7B> \x8C |0
+<UFF7C> \x8D |0
+<UFF7D> \x8E |0
+<UFF7E> \x8F |0
+<UFF7F> \x90 |0
+<UFF80> \x91 |0
+<UFF81> \x92 |0
+<UFF82> \x93 |0
+<UFF83> \x94 |0
+<UFF84> \x95 |0
+<UFF85> \x96 |0
+<UFF86> \x97 |0
+<UFF87> \x98 |0
+<UFF88> \x99 |0
+<UFF89> \x9A |0
+<UFF8A> \x9D |0
+<UFF8B> \x9E |0
+<UFF8C> \x9F |0
+<UFF8D> \xA2 |0
+<UFF8E> \xA3 |0
+<UFF8F> \xA4 |0
+<UFF90> \xA5 |0
+<UFF91> \xA6 |0
+<UFF92> \xA7 |0
+<UFF93> \xA8 |0
+<UFF94> \xA9 |0
+<UFF95> \xAA |0
+<UFF96> \xAC |0
+<UFF97> \xAD |0
+<UFF98> \xAE |0
+<UFF99> \xAF |0
+<UFF9A> \xBA |0
+<UFF9B> \xBB |0
+<UFF9C> \xBC |0
+<UFF9D> \xBD |0
+<UFF9E> \xBE |0
+<UFF9F> \xBF |0
+END CHARMAP
diff --git a/mcs/class/I18N/Rare/ibm-297.ucm b/mcs/class/I18N/Rare/ibm-297.ucm
new file mode 100644
index 00000000000..f627d5ce517
--- /dev/null
+++ b/mcs/class/I18N/Rare/ibm-297.ucm
@@ -0,0 +1,379 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1995-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Mon Nov 13 08:50:41 2000
+#
+# File created by dtcocm version 3.00
+# from source files 34B00129.RPMAP100 and 012934B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-297"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x3F
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-297
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x37 |0
+<U0005> \x2D |0
+<U0006> \x2E |0
+<U0007> \x2F |0
+<U0008> \x16 |0
+<U0009> \x05 |0
+<U000A> \x25 |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x3C |0
+<U0015> \x3D |0
+<U0016> \x32 |0
+<U0017> \x26 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x3F |0
+<U001B> \x27 |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x40 |0
+<U0021> \x4F |0
+<U0022> \x7F |0
+<U0023> \xB1 |0
+<U0024> \x5B |0
+<U0025> \x6C |0
+<U0026> \x50 |0
+<U0027> \x7D |0
+<U0028> \x4D |0
+<U0029> \x5D |0
+<U002A> \x5C |0
+<U002B> \x4E |0
+<U002C> \x6B |0
+<U002D> \x60 |0
+<U002E> \x4B |0
+<U002F> \x61 |0
+<U0030> \xF0 |0
+<U0031> \xF1 |0
+<U0032> \xF2 |0
+<U0033> \xF3 |0
+<U0034> \xF4 |0
+<U0035> \xF5 |0
+<U0036> \xF6 |0
+<U0037> \xF7 |0
+<U0038> \xF8 |0
+<U0039> \xF9 |0
+<U003A> \x7A |0
+<U003B> \x5E |0
+<U003C> \x4C |0
+<U003D> \x7E |0
+<U003E> \x6E |0
+<U003F> \x6F |0
+<U0040> \x44 |0
+<U0041> \xC1 |0
+<U0042> \xC2 |0
+<U0043> \xC3 |0
+<U0044> \xC4 |0
+<U0045> \xC5 |0
+<U0046> \xC6 |0
+<U0047> \xC7 |0
+<U0048> \xC8 |0
+<U0049> \xC9 |0
+<U004A> \xD1 |0
+<U004B> \xD2 |0
+<U004C> \xD3 |0
+<U004D> \xD4 |0
+<U004E> \xD5 |0
+<U004F> \xD6 |0
+<U0050> \xD7 |0
+<U0051> \xD8 |0
+<U0052> \xD9 |0
+<U0053> \xE2 |0
+<U0054> \xE3 |0
+<U0055> \xE4 |0
+<U0056> \xE5 |0
+<U0057> \xE6 |0
+<U0058> \xE7 |0
+<U0059> \xE8 |0
+<U005A> \xE9 |0
+<U005B> \x90 |0
+<U005C> \x48 |0
+<U005D> \xB5 |0
+<U005E> \x5F |0
+<U005F> \x6D |0
+<U0060> \xA0 |0
+<U0061> \x81 |0
+<U0062> \x82 |0
+<U0063> \x83 |0
+<U0064> \x84 |0
+<U0065> \x85 |0
+<U0066> \x86 |0
+<U0067> \x87 |0
+<U0068> \x88 |0
+<U0069> \x89 |0
+<U006A> \x91 |0
+<U006B> \x92 |0
+<U006C> \x93 |0
+<U006D> \x94 |0
+<U006E> \x95 |0
+<U006F> \x96 |0
+<U0070> \x97 |0
+<U0071> \x98 |0
+<U0072> \x99 |0
+<U0073> \xA2 |0
+<U0074> \xA3 |0
+<U0075> \xA4 |0
+<U0076> \xA5 |0
+<U0077> \xA6 |0
+<U0078> \xA7 |0
+<U0079> \xA8 |0
+<U007A> \xA9 |0
+<U007B> \x51 |0
+<U007C> \xBB |0
+<U007D> \x54 |0
+<U007E> \xBD |0
+<U007F> \x07 |0
+<U0080> \x20 |0
+<U0081> \x21 |0
+<U0082> \x22 |0
+<U0083> \x23 |0
+<U0084> \x24 |0
+<U0085> \x15 |0
+<U0086> \x06 |0
+<U0087> \x17 |0
+<U0088> \x28 |0
+<U0089> \x29 |0
+<U008A> \x2A |0
+<U008B> \x2B |0
+<U008C> \x2C |0
+<U008D> \x09 |0
+<U008E> \x0A |0
+<U008F> \x1B |0
+<U0090> \x30 |0
+<U0091> \x31 |0
+<U0092> \x1A |0
+<U0093> \x33 |0
+<U0094> \x34 |0
+<U0095> \x35 |0
+<U0096> \x36 |0
+<U0097> \x08 |0
+<U0098> \x38 |0
+<U0099> \x39 |0
+<U009A> \x3A |0
+<U009B> \x3B |0
+<U009C> \x04 |0
+<U009D> \x14 |0
+<U009E> \x3E |0
+<U009F> \xFF |0
+<U00A0> \x41 |0
+<U00A1> \xAA |0
+<U00A2> \xB0 |0
+<U00A3> \x7B |0
+<U00A4> \x9F |0
+<U00A5> \xB2 |0
+<U00A6> \xDD |0
+<U00A7> \x5A |0
+<U00A8> \xA1 |0
+<U00A9> \xB4 |0
+<U00AA> \x9A |0
+<U00AB> \x8A |0
+<U00AC> \xBA |0
+<U00AD> \xCA |0
+<U00AE> \xAF |0
+<U00AF> \xBC |0
+<U00B0> \x4A |0
+<U00B1> \x8F |0
+<U00B2> \xEA |0
+<U00B3> \xFA |0
+<U00B4> \xBE |0
+<U00B5> \x79 |0
+<U00B6> \xB6 |0
+<U00B7> \xB3 |0
+<U00B8> \x9D |0
+<U00B9> \xDA |0
+<U00BA> \x9B |0
+<U00BB> \x8B |0
+<U00BC> \xB7 |0
+<U00BD> \xB8 |0
+<U00BE> \xB9 |0
+<U00BF> \xAB |0
+<U00C0> \x64 |0
+<U00C1> \x65 |0
+<U00C2> \x62 |0
+<U00C3> \x66 |0
+<U00C4> \x63 |0
+<U00C5> \x67 |0
+<U00C6> \x9E |0
+<U00C7> \x68 |0
+<U00C8> \x74 |0
+<U00C9> \x71 |0
+<U00CA> \x72 |0
+<U00CB> \x73 |0
+<U00CC> \x78 |0
+<U00CD> \x75 |0
+<U00CE> \x76 |0
+<U00CF> \x77 |0
+<U00D0> \xAC |0
+<U00D1> \x69 |0
+<U00D2> \xED |0
+<U00D3> \xEE |0
+<U00D4> \xEB |0
+<U00D5> \xEF |0
+<U00D6> \xEC |0
+<U00D7> \xBF |0
+<U00D8> \x80 |0
+<U00D9> \xFD |0
+<U00DA> \xFE |0
+<U00DB> \xFB |0
+<U00DC> \xFC |0
+<U00DD> \xAD |0
+<U00DE> \xAE |0
+<U00DF> \x59 |0
+<U00E0> \x7C |0
+<U00E1> \x45 |0
+<U00E2> \x42 |0
+<U00E3> \x46 |0
+<U00E4> \x43 |0
+<U00E5> \x47 |0
+<U00E6> \x9C |0
+<U00E7> \xE0 |0
+<U00E8> \xD0 |0
+<U00E9> \xC0 |0
+<U00EA> \x52 |0
+<U00EB> \x53 |0
+<U00EC> \x58 |0
+<U00ED> \x55 |0
+<U00EE> \x56 |0
+<U00EF> \x57 |0
+<U00F0> \x8C |0
+<U00F1> \x49 |0
+<U00F2> \xCD |0
+<U00F3> \xCE |0
+<U00F4> \xCB |0
+<U00F5> \xCF |0
+<U00F6> \xCC |0
+<U00F7> \xE1 |0
+<U00F8> \x70 |0
+<U00F9> \x6A |0
+<U00FA> \xDE |0
+<U00FB> \xDB |0
+<U00FC> \xDC |0
+<U00FD> \x8D |0
+<U00FE> \x8E |0
+<U00FF> \xDF |0
+<U0110> \xAC |1
+<U203E> \xBC |1
+<UFF01> \x4F |1
+<UFF02> \x7F |1
+<UFF03> \xB1 |1
+<UFF04> \x5B |1
+<UFF05> \x6C |1
+<UFF06> \x50 |1
+<UFF07> \x7D |1
+<UFF08> \x4D |1
+<UFF09> \x5D |1
+<UFF0A> \x5C |1
+<UFF0B> \x4E |1
+<UFF0C> \x6B |1
+<UFF0D> \x60 |1
+<UFF0E> \x4B |1
+<UFF0F> \x61 |1
+<UFF10> \xF0 |1
+<UFF11> \xF1 |1
+<UFF12> \xF2 |1
+<UFF13> \xF3 |1
+<UFF14> \xF4 |1
+<UFF15> \xF5 |1
+<UFF16> \xF6 |1
+<UFF17> \xF7 |1
+<UFF18> \xF8 |1
+<UFF19> \xF9 |1
+<UFF1A> \x7A |1
+<UFF1B> \x5E |1
+<UFF1C> \x4C |1
+<UFF1D> \x7E |1
+<UFF1E> \x6E |1
+<UFF1F> \x6F |1
+<UFF20> \x44 |1
+<UFF21> \xC1 |1
+<UFF22> \xC2 |1
+<UFF23> \xC3 |1
+<UFF24> \xC4 |1
+<UFF25> \xC5 |1
+<UFF26> \xC6 |1
+<UFF27> \xC7 |1
+<UFF28> \xC8 |1
+<UFF29> \xC9 |1
+<UFF2A> \xD1 |1
+<UFF2B> \xD2 |1
+<UFF2C> \xD3 |1
+<UFF2D> \xD4 |1
+<UFF2E> \xD5 |1
+<UFF2F> \xD6 |1
+<UFF30> \xD7 |1
+<UFF31> \xD8 |1
+<UFF32> \xD9 |1
+<UFF33> \xE2 |1
+<UFF34> \xE3 |1
+<UFF35> \xE4 |1
+<UFF36> \xE5 |1
+<UFF37> \xE6 |1
+<UFF38> \xE7 |1
+<UFF39> \xE8 |1
+<UFF3A> \xE9 |1
+<UFF3B> \x90 |1
+<UFF3C> \x48 |1
+<UFF3D> \xB5 |1
+<UFF3E> \x5F |1
+<UFF3F> \x6D |1
+<UFF40> \xA0 |1
+<UFF41> \x81 |1
+<UFF42> \x82 |1
+<UFF43> \x83 |1
+<UFF44> \x84 |1
+<UFF45> \x85 |1
+<UFF46> \x86 |1
+<UFF47> \x87 |1
+<UFF48> \x88 |1
+<UFF49> \x89 |1
+<UFF4A> \x91 |1
+<UFF4B> \x92 |1
+<UFF4C> \x93 |1
+<UFF4D> \x94 |1
+<UFF4E> \x95 |1
+<UFF4F> \x96 |1
+<UFF50> \x97 |1
+<UFF51> \x98 |1
+<UFF52> \x99 |1
+<UFF53> \xA2 |1
+<UFF54> \xA3 |1
+<UFF55> \xA4 |1
+<UFF56> \xA5 |1
+<UFF57> \xA6 |1
+<UFF58> \xA7 |1
+<UFF59> \xA8 |1
+<UFF5A> \xA9 |1
+<UFF5B> \x51 |1
+<UFF5C> \xBB |1
+<UFF5D> \x54 |1
+<UFF5E> \xBD |1
+END CHARMAP
diff --git a/mcs/class/I18N/Rare/ibm-37.ucm b/mcs/class/I18N/Rare/ibm-37.ucm
new file mode 100644
index 00000000000..070f03e81f3
--- /dev/null
+++ b/mcs/class/I18N/Rare/ibm-37.ucm
@@ -0,0 +1,379 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1995-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Mon Nov 13 08:50:41 2000
+#
+# File created by dtcocm version 3.00
+# from source files 34B00025.RPMAP100 and 002534B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-37"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x3F
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-37
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x37 |0
+<U0005> \x2D |0
+<U0006> \x2E |0
+<U0007> \x2F |0
+<U0008> \x16 |0
+<U0009> \x05 |0
+<U000A> \x25 |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x3C |0
+<U0015> \x3D |0
+<U0016> \x32 |0
+<U0017> \x26 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x3F |0
+<U001B> \x27 |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x40 |0
+<U0021> \x5A |0
+<U0022> \x7F |0
+<U0023> \x7B |0
+<U0024> \x5B |0
+<U0025> \x6C |0
+<U0026> \x50 |0
+<U0027> \x7D |0
+<U0028> \x4D |0
+<U0029> \x5D |0
+<U002A> \x5C |0
+<U002B> \x4E |0
+<U002C> \x6B |0
+<U002D> \x60 |0
+<U002E> \x4B |0
+<U002F> \x61 |0
+<U0030> \xF0 |0
+<U0031> \xF1 |0
+<U0032> \xF2 |0
+<U0033> \xF3 |0
+<U0034> \xF4 |0
+<U0035> \xF5 |0
+<U0036> \xF6 |0
+<U0037> \xF7 |0
+<U0038> \xF8 |0
+<U0039> \xF9 |0
+<U003A> \x7A |0
+<U003B> \x5E |0
+<U003C> \x4C |0
+<U003D> \x7E |0
+<U003E> \x6E |0
+<U003F> \x6F |0
+<U0040> \x7C |0
+<U0041> \xC1 |0
+<U0042> \xC2 |0
+<U0043> \xC3 |0
+<U0044> \xC4 |0
+<U0045> \xC5 |0
+<U0046> \xC6 |0
+<U0047> \xC7 |0
+<U0048> \xC8 |0
+<U0049> \xC9 |0
+<U004A> \xD1 |0
+<U004B> \xD2 |0
+<U004C> \xD3 |0
+<U004D> \xD4 |0
+<U004E> \xD5 |0
+<U004F> \xD6 |0
+<U0050> \xD7 |0
+<U0051> \xD8 |0
+<U0052> \xD9 |0
+<U0053> \xE2 |0
+<U0054> \xE3 |0
+<U0055> \xE4 |0
+<U0056> \xE5 |0
+<U0057> \xE6 |0
+<U0058> \xE7 |0
+<U0059> \xE8 |0
+<U005A> \xE9 |0
+<U005B> \xBA |0
+<U005C> \xE0 |0
+<U005D> \xBB |0
+<U005E> \xB0 |0
+<U005F> \x6D |0
+<U0060> \x79 |0
+<U0061> \x81 |0
+<U0062> \x82 |0
+<U0063> \x83 |0
+<U0064> \x84 |0
+<U0065> \x85 |0
+<U0066> \x86 |0
+<U0067> \x87 |0
+<U0068> \x88 |0
+<U0069> \x89 |0
+<U006A> \x91 |0
+<U006B> \x92 |0
+<U006C> \x93 |0
+<U006D> \x94 |0
+<U006E> \x95 |0
+<U006F> \x96 |0
+<U0070> \x97 |0
+<U0071> \x98 |0
+<U0072> \x99 |0
+<U0073> \xA2 |0
+<U0074> \xA3 |0
+<U0075> \xA4 |0
+<U0076> \xA5 |0
+<U0077> \xA6 |0
+<U0078> \xA7 |0
+<U0079> \xA8 |0
+<U007A> \xA9 |0
+<U007B> \xC0 |0
+<U007C> \x4F |0
+<U007D> \xD0 |0
+<U007E> \xA1 |0
+<U007F> \x07 |0
+<U0080> \x20 |0
+<U0081> \x21 |0
+<U0082> \x22 |0
+<U0083> \x23 |0
+<U0084> \x24 |0
+<U0085> \x15 |0
+<U0086> \x06 |0
+<U0087> \x17 |0
+<U0088> \x28 |0
+<U0089> \x29 |0
+<U008A> \x2A |0
+<U008B> \x2B |0
+<U008C> \x2C |0
+<U008D> \x09 |0
+<U008E> \x0A |0
+<U008F> \x1B |0
+<U0090> \x30 |0
+<U0091> \x31 |0
+<U0092> \x1A |0
+<U0093> \x33 |0
+<U0094> \x34 |0
+<U0095> \x35 |0
+<U0096> \x36 |0
+<U0097> \x08 |0
+<U0098> \x38 |0
+<U0099> \x39 |0
+<U009A> \x3A |0
+<U009B> \x3B |0
+<U009C> \x04 |0
+<U009D> \x14 |0
+<U009E> \x3E |0
+<U009F> \xFF |0
+<U00A0> \x41 |0
+<U00A1> \xAA |0
+<U00A2> \x4A |0
+<U00A3> \xB1 |0
+<U00A4> \x9F |0
+<U00A5> \xB2 |0
+<U00A6> \x6A |0
+<U00A7> \xB5 |0
+<U00A8> \xBD |0
+<U00A9> \xB4 |0
+<U00AA> \x9A |0
+<U00AB> \x8A |0
+<U00AC> \x5F |0
+<U00AD> \xCA |0
+<U00AE> \xAF |0
+<U00AF> \xBC |0
+<U00B0> \x90 |0
+<U00B1> \x8F |0
+<U00B2> \xEA |0
+<U00B3> \xFA |0
+<U00B4> \xBE |0
+<U00B5> \xA0 |0
+<U00B6> \xB6 |0
+<U00B7> \xB3 |0
+<U00B8> \x9D |0
+<U00B9> \xDA |0
+<U00BA> \x9B |0
+<U00BB> \x8B |0
+<U00BC> \xB7 |0
+<U00BD> \xB8 |0
+<U00BE> \xB9 |0
+<U00BF> \xAB |0
+<U00C0> \x64 |0
+<U00C1> \x65 |0
+<U00C2> \x62 |0
+<U00C3> \x66 |0
+<U00C4> \x63 |0
+<U00C5> \x67 |0
+<U00C6> \x9E |0
+<U00C7> \x68 |0
+<U00C8> \x74 |0
+<U00C9> \x71 |0
+<U00CA> \x72 |0
+<U00CB> \x73 |0
+<U00CC> \x78 |0
+<U00CD> \x75 |0
+<U00CE> \x76 |0
+<U00CF> \x77 |0
+<U00D0> \xAC |0
+<U00D1> \x69 |0
+<U00D2> \xED |0
+<U00D3> \xEE |0
+<U00D4> \xEB |0
+<U00D5> \xEF |0
+<U00D6> \xEC |0
+<U00D7> \xBF |0
+<U00D8> \x80 |0
+<U00D9> \xFD |0
+<U00DA> \xFE |0
+<U00DB> \xFB |0
+<U00DC> \xFC |0
+<U00DD> \xAD |0
+<U00DE> \xAE |0
+<U00DF> \x59 |0
+<U00E0> \x44 |0
+<U00E1> \x45 |0
+<U00E2> \x42 |0
+<U00E3> \x46 |0
+<U00E4> \x43 |0
+<U00E5> \x47 |0
+<U00E6> \x9C |0
+<U00E7> \x48 |0
+<U00E8> \x54 |0
+<U00E9> \x51 |0
+<U00EA> \x52 |0
+<U00EB> \x53 |0
+<U00EC> \x58 |0
+<U00ED> \x55 |0
+<U00EE> \x56 |0
+<U00EF> \x57 |0
+<U00F0> \x8C |0
+<U00F1> \x49 |0
+<U00F2> \xCD |0
+<U00F3> \xCE |0
+<U00F4> \xCB |0
+<U00F5> \xCF |0
+<U00F6> \xCC |0
+<U00F7> \xE1 |0
+<U00F8> \x70 |0
+<U00F9> \xDD |0
+<U00FA> \xDE |0
+<U00FB> \xDB |0
+<U00FC> \xDC |0
+<U00FD> \x8D |0
+<U00FE> \x8E |0
+<U00FF> \xDF |0
+<U0110> \xAC |1
+<U203E> \xBC |1
+<UFF01> \x5A |1
+<UFF02> \x7F |1
+<UFF03> \x7B |1
+<UFF04> \x5B |1
+<UFF05> \x6C |1
+<UFF06> \x50 |1
+<UFF07> \x7D |1
+<UFF08> \x4D |1
+<UFF09> \x5D |1
+<UFF0A> \x5C |1
+<UFF0B> \x4E |1
+<UFF0C> \x6B |1
+<UFF0D> \x60 |1
+<UFF0E> \x4B |1
+<UFF0F> \x61 |1
+<UFF10> \xF0 |1
+<UFF11> \xF1 |1
+<UFF12> \xF2 |1
+<UFF13> \xF3 |1
+<UFF14> \xF4 |1
+<UFF15> \xF5 |1
+<UFF16> \xF6 |1
+<UFF17> \xF7 |1
+<UFF18> \xF8 |1
+<UFF19> \xF9 |1
+<UFF1A> \x7A |1
+<UFF1B> \x5E |1
+<UFF1C> \x4C |1
+<UFF1D> \x7E |1
+<UFF1E> \x6E |1
+<UFF1F> \x6F |1
+<UFF20> \x7C |1
+<UFF21> \xC1 |1
+<UFF22> \xC2 |1
+<UFF23> \xC3 |1
+<UFF24> \xC4 |1
+<UFF25> \xC5 |1
+<UFF26> \xC6 |1
+<UFF27> \xC7 |1
+<UFF28> \xC8 |1
+<UFF29> \xC9 |1
+<UFF2A> \xD1 |1
+<UFF2B> \xD2 |1
+<UFF2C> \xD3 |1
+<UFF2D> \xD4 |1
+<UFF2E> \xD5 |1
+<UFF2F> \xD6 |1
+<UFF30> \xD7 |1
+<UFF31> \xD8 |1
+<UFF32> \xD9 |1
+<UFF33> \xE2 |1
+<UFF34> \xE3 |1
+<UFF35> \xE4 |1
+<UFF36> \xE5 |1
+<UFF37> \xE6 |1
+<UFF38> \xE7 |1
+<UFF39> \xE8 |1
+<UFF3A> \xE9 |1
+<UFF3B> \xBA |1
+<UFF3C> \xE0 |1
+<UFF3D> \xBB |1
+<UFF3E> \xB0 |1
+<UFF3F> \x6D |1
+<UFF40> \x79 |1
+<UFF41> \x81 |1
+<UFF42> \x82 |1
+<UFF43> \x83 |1
+<UFF44> \x84 |1
+<UFF45> \x85 |1
+<UFF46> \x86 |1
+<UFF47> \x87 |1
+<UFF48> \x88 |1
+<UFF49> \x89 |1
+<UFF4A> \x91 |1
+<UFF4B> \x92 |1
+<UFF4C> \x93 |1
+<UFF4D> \x94 |1
+<UFF4E> \x95 |1
+<UFF4F> \x96 |1
+<UFF50> \x97 |1
+<UFF51> \x98 |1
+<UFF52> \x99 |1
+<UFF53> \xA2 |1
+<UFF54> \xA3 |1
+<UFF55> \xA4 |1
+<UFF56> \xA5 |1
+<UFF57> \xA6 |1
+<UFF58> \xA7 |1
+<UFF59> \xA8 |1
+<UFF5A> \xA9 |1
+<UFF5B> \xC0 |1
+<UFF5C> \x4F |1
+<UFF5D> \xD0 |1
+<UFF5E> \xA1 |1
+END CHARMAP
diff --git a/mcs/class/I18N/Rare/ibm-420.ucm b/mcs/class/I18N/Rare/ibm-420.ucm
new file mode 100644
index 00000000000..33b947902ba
--- /dev/null
+++ b/mcs/class/I18N/Rare/ibm-420.ucm
@@ -0,0 +1,453 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1995-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Thu Nov 9 17:44:49 2000
+#
+# File created by dtcocm version 3.00
+# from source files 34B001A4.RXMAP110 and 01A434B0.TXMAP110
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-420"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x3F
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-420
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x37 |0
+<U0005> \x2D |0
+<U0006> \x2E |0
+<U0007> \x2F |0
+<U0008> \x16 |0
+<U0009> \x05 |0
+<U000A> \x25 |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x3C |0
+<U0015> \x3D |0
+<U0016> \x32 |0
+<U0017> \x26 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x3F |0
+<U001B> \x27 |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x40 |0
+<U0021> \x5A |0
+<U0022> \x7F |0
+<U0023> \x7B |0
+<U0024> \x5B |0
+<U0025> \x6C |0
+<U0026> \x50 |0
+<U0027> \x7D |0
+<U0028> \x4D |0
+<U0029> \x5D |0
+<U002A> \x5C |0
+<U002B> \x4E |0
+<U002C> \x6B |0
+<U002D> \x60 |0
+<U002E> \x4B |0
+<U002F> \x61 |0
+<U0030> \xF0 |0
+<U0031> \xF1 |0
+<U0032> \xF2 |0
+<U0033> \xF3 |0
+<U0034> \xF4 |0
+<U0035> \xF5 |0
+<U0036> \xF6 |0
+<U0037> \xF7 |0
+<U0038> \xF8 |0
+<U0039> \xF9 |0
+<U003A> \x7A |0
+<U003B> \x5E |0
+<U003C> \x4C |0
+<U003D> \x7E |0
+<U003E> \x6E |0
+<U003F> \x6F |0
+<U0040> \x7C |0
+<U0041> \xC1 |0
+<U0042> \xC2 |0
+<U0043> \xC3 |0
+<U0044> \xC4 |0
+<U0045> \xC5 |0
+<U0046> \xC6 |0
+<U0047> \xC7 |0
+<U0048> \xC8 |0
+<U0049> \xC9 |0
+<U004A> \xD1 |0
+<U004B> \xD2 |0
+<U004C> \xD3 |0
+<U004D> \xD4 |0
+<U004E> \xD5 |0
+<U004F> \xD6 |0
+<U0050> \xD7 |0
+<U0051> \xD8 |0
+<U0052> \xD9 |0
+<U0053> \xE2 |0
+<U0054> \xE3 |0
+<U0055> \xE4 |0
+<U0056> \xE5 |0
+<U0057> \xE6 |0
+<U0058> \xE7 |0
+<U0059> \xE8 |0
+<U005A> \xE9 |0
+<U005F> \x6D |0
+<U0061> \x81 |0
+<U0062> \x82 |0
+<U0063> \x83 |0
+<U0064> \x84 |0
+<U0065> \x85 |0
+<U0066> \x86 |0
+<U0067> \x87 |0
+<U0068> \x88 |0
+<U0069> \x89 |0
+<U006A> \x91 |0
+<U006B> \x92 |0
+<U006C> \x93 |0
+<U006D> \x94 |0
+<U006E> \x95 |0
+<U006F> \x96 |0
+<U0070> \x97 |0
+<U0071> \x98 |0
+<U0072> \x99 |0
+<U0073> \xA2 |0
+<U0074> \xA3 |0
+<U0075> \xA4 |0
+<U0076> \xA5 |0
+<U0077> \xA6 |0
+<U0078> \xA7 |0
+<U0079> \xA8 |0
+<U007A> \xA9 |0
+<U007C> \x4F |0
+<U007F> \x07 |0
+<U0080> \x20 |0
+<U0081> \x21 |0
+<U0082> \x22 |0
+<U0083> \x23 |0
+<U0084> \x24 |0
+<U0085> \x15 |0
+<U0086> \x06 |0
+<U0087> \x17 |0
+<U0088> \x28 |0
+<U0089> \x29 |0
+<U008A> \x2A |0
+<U008B> \x2B |0
+<U008C> \x2C |0
+<U008D> \x09 |0
+<U008E> \x0A |0
+<U008F> \x1B |0
+<U0090> \x30 |0
+<U0091> \x31 |0
+<U0092> \x1A |0
+<U0093> \x33 |0
+<U0094> \x34 |0
+<U0095> \x35 |0
+<U0096> \x36 |0
+<U0097> \x08 |0
+<U0098> \x38 |0
+<U0099> \x39 |0
+<U009A> \x3A |0
+<U009B> \x3B |0
+<U009C> \x04 |0
+<U009D> \x14 |0
+<U009E> \x3E |0
+<U009F> \xFF |0
+<U00A0> \x41 |0
+<U00A2> \x4A |0
+<U00A6> \x6A |0
+<U00AC> \x5F |0
+<U00AD> \xCA |0
+<U00D7> \xE0 |0
+<U00F7> \xA1 |0
+<U060C> \x79 |0
+<U061B> \xC0 |0
+<U061F> \xD0 |0
+<U0621> \x46 |0
+<U0622> \x47 |0
+<U0623> \x49 |0
+<U0624> \x52 |0
+<U0625> \x56 |1
+<U0626> \x55 |0
+<U0627> \x56 |0
+<U0628> \x58 |0
+<U0629> \x62 |0
+<U062A> \x63 |0
+<U062B> \x65 |0
+<U062C> \x67 |0
+<U062D> \x69 |0
+<U062E> \x71 |0
+<U062F> \x73 |0
+<U0630> \x74 |0
+<U0631> \x75 |0
+<U0632> \x76 |0
+<U0633> \x77 |0
+<U0634> \x80 |0
+<U0635> \x8B |0
+<U0636> \x8D |0
+<U0637> \x8F |0
+<U0638> \x90 |0
+<U0639> \x9A |0
+<U063A> \x9E |0
+<U0640> \x44 |0
+<U0641> \xAB |0
+<U0642> \xAD |0
+<U0643> \xAF |0
+<U0644> \xB1 |0
+<U0645> \xBB |0
+<U0646> \xBD |0
+<U0647> \xBF |0
+<U0648> \xCF |0
+<U0649> \xDA |0
+<U064A> \xDC |0
+<U0651> \x42 |0
+<U0660> \xDF |0
+<U0661> \xEA |0
+<U0662> \xEB |0
+<U0663> \xED |0
+<U0664> \xEE |0
+<U0665> \xEF |0
+<U0666> \xFB |0
+<U0667> \xFC |0
+<U0668> \xFD |0
+<U0669> \xFE |0
+<U066A> \x6C |1
+<U066B> \x6B |1
+<U066C> \x4B |1
+<U066D> \x5C |1
+<U200B> \x45 |0
+<UFE7C> \x42 |1
+<UFE7D> \x43 |0
+<UFE80> \x46 |1
+<UFE81> \x47 |1
+<UFE82> \x48 |0
+<UFE83> \x49 |1
+<UFE84> \x51 |0
+<UFE85> \x52 |1
+<UFE86> \x52 |1
+<UFE87> \x56 |1
+<UFE88> \x57 |1
+<UFE8B> \x55 |1
+<UFE8C> \x55 |1
+<UFE8D> \x56 |1
+<UFE8E> \x57 |0
+<UFE8F> \x58 |1
+<UFE90> \x58 |1
+<UFE91> \x59 |0
+<UFE92> \x59 |1
+<UFE93> \x62 |1
+<UFE94> \x62 |1
+<UFE95> \x63 |1
+<UFE96> \x63 |1
+<UFE97> \x64 |0
+<UFE98> \x64 |1
+<UFE99> \x65 |1
+<UFE9A> \x65 |1
+<UFE9B> \x66 |0
+<UFE9C> \x66 |1
+<UFE9D> \x67 |1
+<UFE9E> \x67 |1
+<UFE9F> \x68 |0
+<UFEA0> \x68 |1
+<UFEA1> \x69 |1
+<UFEA2> \x69 |1
+<UFEA3> \x70 |0
+<UFEA4> \x70 |1
+<UFEA5> \x71 |1
+<UFEA6> \x71 |1
+<UFEA7> \x72 |0
+<UFEA8> \x72 |1
+<UFEA9> \x73 |1
+<UFEAA> \x73 |1
+<UFEAB> \x74 |1
+<UFEAC> \x74 |1
+<UFEAD> \x75 |1
+<UFEAE> \x75 |1
+<UFEAF> \x76 |1
+<UFEB0> \x76 |1
+<UFEB1> \x77 |1
+<UFEB2> \x77 |1
+<UFEB3> \x78 |0
+<UFEB4> \x78 |1
+<UFEB5> \x80 |1
+<UFEB6> \x80 |1
+<UFEB7> \x8A |0
+<UFEB8> \x8A |1
+<UFEB9> \x8B |1
+<UFEBA> \x8B |1
+<UFEBB> \x8C |0
+<UFEBC> \x8C |1
+<UFEBD> \x8D |1
+<UFEBE> \x8D |1
+<UFEBF> \x8E |0
+<UFEC0> \x8E |1
+<UFEC1> \x8F |1
+<UFEC2> \x8F |1
+<UFEC3> \x8F |1
+<UFEC4> \x8F |1
+<UFEC5> \x90 |1
+<UFEC6> \x90 |1
+<UFEC7> \x90 |1
+<UFEC8> \x90 |1
+<UFEC9> \x9A |1
+<UFECA> \x9B |0
+<UFECB> \x9C |0
+<UFECC> \x9D |0
+<UFECD> \x9E |1
+<UFECE> \x9F |0
+<UFECF> \xA0 |0
+<UFED0> \xAA |0
+<UFED1> \xAB |1
+<UFED2> \xAB |1
+<UFED3> \xAC |0
+<UFED4> \xAC |1
+<UFED5> \xAD |1
+<UFED6> \xAD |1
+<UFED7> \xAE |0
+<UFED8> \xAE |1
+<UFED9> \xAF |1
+<UFEDA> \xAF |1
+<UFEDB> \xB0 |0
+<UFEDC> \xB0 |1
+<UFEDD> \xB1 |1
+<UFEDE> \xB1 |1
+<UFEDF> \xBA |0
+<UFEE0> \xBA |1
+<UFEE1> \xBB |1
+<UFEE2> \xBB |1
+<UFEE3> \xBC |0
+<UFEE4> \xBC |1
+<UFEE5> \xBD |1
+<UFEE6> \xBD |1
+<UFEE7> \xBE |0
+<UFEE8> \xBE |1
+<UFEE9> \xBF |1
+<UFEEA> \xBF |1
+<UFEEB> \xCB |0
+<UFEEC> \xCD |0
+<UFEED> \xCF |1
+<UFEEE> \xCF |1
+<UFEEF> \xDA |1
+<UFEF0> \xDB |0
+<UFEF1> \xDC |1
+<UFEF2> \xDD |0
+<UFEF3> \xDE |0
+<UFEF4> \xDE |1
+<UFEF5> \xB2 |0
+<UFEF6> \xB3 |0
+<UFEF7> \xB4 |0
+<UFEF8> \xB5 |0
+<UFEF9> \xB8 |1
+<UFEFA> \xB9 |1
+<UFEFB> \xB8 |0
+<UFEFC> \xB9 |0
+<UFF01> \x5A |1
+<UFF02> \x7F |1
+<UFF03> \x7B |1
+<UFF04> \x5B |1
+<UFF05> \x6C |1
+<UFF06> \x50 |1
+<UFF07> \x7D |1
+<UFF08> \x4D |1
+<UFF09> \x5D |1
+<UFF0A> \x5C |1
+<UFF0B> \x4E |1
+<UFF0C> \x6B |1
+<UFF0D> \x60 |1
+<UFF0E> \x4B |1
+<UFF0F> \x61 |1
+<UFF10> \xF0 |1
+<UFF11> \xF1 |1
+<UFF12> \xF2 |1
+<UFF13> \xF3 |1
+<UFF14> \xF4 |1
+<UFF15> \xF5 |1
+<UFF16> \xF6 |1
+<UFF17> \xF7 |1
+<UFF18> \xF8 |1
+<UFF19> \xF9 |1
+<UFF1A> \x7A |1
+<UFF1B> \x5E |1
+<UFF1C> \x4C |1
+<UFF1D> \x7E |1
+<UFF1E> \x6E |1
+<UFF1F> \x6F |1
+<UFF20> \x7C |1
+<UFF21> \xC1 |1
+<UFF22> \xC2 |1
+<UFF23> \xC3 |1
+<UFF24> \xC4 |1
+<UFF25> \xC5 |1
+<UFF26> \xC6 |1
+<UFF27> \xC7 |1
+<UFF28> \xC8 |1
+<UFF29> \xC9 |1
+<UFF2A> \xD1 |1
+<UFF2B> \xD2 |1
+<UFF2C> \xD3 |1
+<UFF2D> \xD4 |1
+<UFF2E> \xD5 |1
+<UFF2F> \xD6 |1
+<UFF30> \xD7 |1
+<UFF31> \xD8 |1
+<UFF32> \xD9 |1
+<UFF33> \xE2 |1
+<UFF34> \xE3 |1
+<UFF35> \xE4 |1
+<UFF36> \xE5 |1
+<UFF37> \xE6 |1
+<UFF38> \xE7 |1
+<UFF39> \xE8 |1
+<UFF3A> \xE9 |1
+<UFF3F> \x6D |1
+<UFF41> \x81 |1
+<UFF42> \x82 |1
+<UFF43> \x83 |1
+<UFF44> \x84 |1
+<UFF45> \x85 |1
+<UFF46> \x86 |1
+<UFF47> \x87 |1
+<UFF48> \x88 |1
+<UFF49> \x89 |1
+<UFF4A> \x91 |1
+<UFF4B> \x92 |1
+<UFF4C> \x93 |1
+<UFF4D> \x94 |1
+<UFF4E> \x95 |1
+<UFF4F> \x96 |1
+<UFF50> \x97 |1
+<UFF51> \x98 |1
+<UFF52> \x99 |1
+<UFF53> \xA2 |1
+<UFF54> \xA3 |1
+<UFF55> \xA4 |1
+<UFF56> \xA5 |1
+<UFF57> \xA6 |1
+<UFF58> \xA7 |1
+<UFF59> \xA8 |1
+<UFF5A> \xA9 |1
+<UFF5C> \x4F |1
+END CHARMAP
diff --git a/mcs/class/I18N/Rare/ibm-424.ucm b/mcs/class/I18N/Rare/ibm-424.ucm
new file mode 100644
index 00000000000..a024e217070
--- /dev/null
+++ b/mcs/class/I18N/Rare/ibm-424.ucm
@@ -0,0 +1,339 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1998-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Mon Nov 13 08:50:42 2000
+#
+# File created by dtcocm version 3.00
+# from source files 34B001A8.RPMAP100 and 01A834B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-424"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x3F
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-424
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x37 |0
+<U0005> \x2D |0
+<U0006> \x2E |0
+<U0007> \x2F |0
+<U0008> \x16 |0
+<U0009> \x05 |0
+<U000A> \x25 |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x3C |0
+<U0015> \x3D |0
+<U0016> \x32 |0
+<U0017> \x26 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x3F |0
+<U001B> \x27 |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x40 |0
+<U0021> \x5A |0
+<U0022> \x7F |0
+<U0023> \x7B |0
+<U0024> \x5B |0
+<U0025> \x6C |0
+<U0026> \x50 |0
+<U0027> \x7D |0
+<U0028> \x4D |0
+<U0029> \x5D |0
+<U002A> \x5C |0
+<U002B> \x4E |0
+<U002C> \x6B |0
+<U002D> \x60 |0
+<U002E> \x4B |0
+<U002F> \x61 |0
+<U0030> \xF0 |0
+<U0031> \xF1 |0
+<U0032> \xF2 |0
+<U0033> \xF3 |0
+<U0034> \xF4 |0
+<U0035> \xF5 |0
+<U0036> \xF6 |0
+<U0037> \xF7 |0
+<U0038> \xF8 |0
+<U0039> \xF9 |0
+<U003A> \x7A |0
+<U003B> \x5E |0
+<U003C> \x4C |0
+<U003D> \x7E |0
+<U003E> \x6E |0
+<U003F> \x6F |0
+<U0040> \x7C |0
+<U0041> \xC1 |0
+<U0042> \xC2 |0
+<U0043> \xC3 |0
+<U0044> \xC4 |0
+<U0045> \xC5 |0
+<U0046> \xC6 |0
+<U0047> \xC7 |0
+<U0048> \xC8 |0
+<U0049> \xC9 |0
+<U004A> \xD1 |0
+<U004B> \xD2 |0
+<U004C> \xD3 |0
+<U004D> \xD4 |0
+<U004E> \xD5 |0
+<U004F> \xD6 |0
+<U0050> \xD7 |0
+<U0051> \xD8 |0
+<U0052> \xD9 |0
+<U0053> \xE2 |0
+<U0054> \xE3 |0
+<U0055> \xE4 |0
+<U0056> \xE5 |0
+<U0057> \xE6 |0
+<U0058> \xE7 |0
+<U0059> \xE8 |0
+<U005A> \xE9 |0
+<U005B> \xBA |0
+<U005C> \xE0 |0
+<U005D> \xBB |0
+<U005E> \xB0 |0
+<U005F> \x6D |0
+<U0060> \x79 |0
+<U0061> \x81 |0
+<U0062> \x82 |0
+<U0063> \x83 |0
+<U0064> \x84 |0
+<U0065> \x85 |0
+<U0066> \x86 |0
+<U0067> \x87 |0
+<U0068> \x88 |0
+<U0069> \x89 |0
+<U006A> \x91 |0
+<U006B> \x92 |0
+<U006C> \x93 |0
+<U006D> \x94 |0
+<U006E> \x95 |0
+<U006F> \x96 |0
+<U0070> \x97 |0
+<U0071> \x98 |0
+<U0072> \x99 |0
+<U0073> \xA2 |0
+<U0074> \xA3 |0
+<U0075> \xA4 |0
+<U0076> \xA5 |0
+<U0077> \xA6 |0
+<U0078> \xA7 |0
+<U0079> \xA8 |0
+<U007A> \xA9 |0
+<U007B> \xC0 |0
+<U007C> \x4F |0
+<U007D> \xD0 |0
+<U007E> \xA1 |0
+<U007F> \x07 |0
+<U0080> \x20 |0
+<U0081> \x21 |0
+<U0082> \x22 |0
+<U0083> \x23 |0
+<U0084> \x24 |0
+<U0085> \x15 |0
+<U0086> \x06 |0
+<U0087> \x17 |0
+<U0088> \x28 |0
+<U0089> \x29 |0
+<U008A> \x2A |0
+<U008B> \x2B |0
+<U008C> \x2C |0
+<U008D> \x09 |0
+<U008E> \x0A |0
+<U008F> \x1B |0
+<U0090> \x30 |0
+<U0091> \x31 |0
+<U0092> \x1A |0
+<U0093> \x33 |0
+<U0094> \x34 |0
+<U0095> \x35 |0
+<U0096> \x36 |0
+<U0097> \x08 |0
+<U0098> \x38 |0
+<U0099> \x39 |0
+<U009A> \x3A |0
+<U009B> \x3B |0
+<U009C> \x04 |0
+<U009D> \x14 |0
+<U009E> \x3E |0
+<U009F> \xFF |0
+<U00A0> \x74 |0
+<U00A2> \x4A |0
+<U00A3> \xB1 |0
+<U00A4> \x9F |0
+<U00A5> \xB2 |0
+<U00A6> \x6A |0
+<U00A7> \xB5 |0
+<U00A8> \xBD |0
+<U00A9> \xB4 |0
+<U00AB> \x8A |0
+<U00AC> \x5F |0
+<U00AD> \xCA |0
+<U00AE> \xAF |0
+<U00B0> \x90 |0
+<U00B1> \x8F |0
+<U00B2> \xEA |0
+<U00B3> \xFA |0
+<U00B4> \xBE |0
+<U00B5> \xA0 |0
+<U00B6> \xB6 |0
+<U00B8> \x9D |0
+<U00B9> \xDA |0
+<U00BB> \x8B |0
+<U00BC> \xB7 |0
+<U00BD> \xB8 |0
+<U00BE> \xB9 |0
+<U00D7> \xBF |0
+<U00F7> \xE1 |0
+<U05D0> \x41 |0
+<U05D1> \x42 |0
+<U05D2> \x43 |0
+<U05D3> \x44 |0
+<U05D4> \x45 |0
+<U05D5> \x46 |0
+<U05D6> \x47 |0
+<U05D7> \x48 |0
+<U05D8> \x49 |0
+<U05D9> \x51 |0
+<U05DA> \x52 |0
+<U05DB> \x53 |0
+<U05DC> \x54 |0
+<U05DD> \x55 |0
+<U05DE> \x56 |0
+<U05DF> \x57 |0
+<U05E0> \x58 |0
+<U05E1> \x59 |0
+<U05E2> \x62 |0
+<U05E3> \x63 |0
+<U05E4> \x64 |0
+<U05E5> \x65 |0
+<U05E6> \x66 |0
+<U05E7> \x67 |0
+<U05E8> \x68 |0
+<U05E9> \x69 |0
+<U05EA> \x71 |0
+<U2017> \x78 |0
+<U2022> \xB3 |0
+<U203E> \xBC |0
+<UFF01> \x5A |1
+<UFF02> \x7F |1
+<UFF03> \x7B |1
+<UFF04> \x5B |1
+<UFF05> \x6C |1
+<UFF06> \x50 |1
+<UFF07> \x7D |1
+<UFF08> \x4D |1
+<UFF09> \x5D |1
+<UFF0A> \x5C |1
+<UFF0B> \x4E |1
+<UFF0C> \x6B |1
+<UFF0D> \x60 |1
+<UFF0E> \x4B |1
+<UFF0F> \x61 |1
+<UFF10> \xF0 |1
+<UFF11> \xF1 |1
+<UFF12> \xF2 |1
+<UFF13> \xF3 |1
+<UFF14> \xF4 |1
+<UFF15> \xF5 |1
+<UFF16> \xF6 |1
+<UFF17> \xF7 |1
+<UFF18> \xF8 |1
+<UFF19> \xF9 |1
+<UFF1A> \x7A |1
+<UFF1B> \x5E |1
+<UFF1C> \x4C |1
+<UFF1D> \x7E |1
+<UFF1E> \x6E |1
+<UFF1F> \x6F |1
+<UFF20> \x7C |1
+<UFF21> \xC1 |1
+<UFF22> \xC2 |1
+<UFF23> \xC3 |1
+<UFF24> \xC4 |1
+<UFF25> \xC5 |1
+<UFF26> \xC6 |1
+<UFF27> \xC7 |1
+<UFF28> \xC8 |1
+<UFF29> \xC9 |1
+<UFF2A> \xD1 |1
+<UFF2B> \xD2 |1
+<UFF2C> \xD3 |1
+<UFF2D> \xD4 |1
+<UFF2E> \xD5 |1
+<UFF2F> \xD6 |1
+<UFF30> \xD7 |1
+<UFF31> \xD8 |1
+<UFF32> \xD9 |1
+<UFF33> \xE2 |1
+<UFF34> \xE3 |1
+<UFF35> \xE4 |1
+<UFF36> \xE5 |1
+<UFF37> \xE6 |1
+<UFF38> \xE7 |1
+<UFF39> \xE8 |1
+<UFF3A> \xE9 |1
+<UFF3B> \xBA |1
+<UFF3C> \xE0 |1
+<UFF3D> \xBB |1
+<UFF3E> \xB0 |1
+<UFF3F> \x6D |1
+<UFF40> \x79 |1
+<UFF41> \x81 |1
+<UFF42> \x82 |1
+<UFF43> \x83 |1
+<UFF44> \x84 |1
+<UFF45> \x85 |1
+<UFF46> \x86 |1
+<UFF47> \x87 |1
+<UFF48> \x88 |1
+<UFF49> \x89 |1
+<UFF4A> \x91 |1
+<UFF4B> \x92 |1
+<UFF4C> \x93 |1
+<UFF4D> \x94 |1
+<UFF4E> \x95 |1
+<UFF4F> \x96 |1
+<UFF50> \x97 |1
+<UFF51> \x98 |1
+<UFF52> \x99 |1
+<UFF53> \xA2 |1
+<UFF54> \xA3 |1
+<UFF55> \xA4 |1
+<UFF56> \xA5 |1
+<UFF57> \xA6 |1
+<UFF58> \xA7 |1
+<UFF59> \xA8 |1
+<UFF5A> \xA9 |1
+<UFF5B> \xC0 |1
+<UFF5C> \x4F |1
+<UFF5D> \xD0 |1
+<UFF5E> \xA1 |1
+END CHARMAP
diff --git a/mcs/class/I18N/Rare/ibm-500.ucm b/mcs/class/I18N/Rare/ibm-500.ucm
new file mode 100644
index 00000000000..ef11ec7c2d9
--- /dev/null
+++ b/mcs/class/I18N/Rare/ibm-500.ucm
@@ -0,0 +1,379 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1995-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Mon Nov 13 08:50:42 2000
+#
+# File created by dtcocm version 3.00
+# from source files 34B001F4.RPMAP100 and 01F434B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-500"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x3F
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-500
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x37 |0
+<U0005> \x2D |0
+<U0006> \x2E |0
+<U0007> \x2F |0
+<U0008> \x16 |0
+<U0009> \x05 |0
+<U000A> \x25 |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x3C |0
+<U0015> \x3D |0
+<U0016> \x32 |0
+<U0017> \x26 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x3F |0
+<U001B> \x27 |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x40 |0
+<U0021> \x4F |0
+<U0022> \x7F |0
+<U0023> \x7B |0
+<U0024> \x5B |0
+<U0025> \x6C |0
+<U0026> \x50 |0
+<U0027> \x7D |0
+<U0028> \x4D |0
+<U0029> \x5D |0
+<U002A> \x5C |0
+<U002B> \x4E |0
+<U002C> \x6B |0
+<U002D> \x60 |0
+<U002E> \x4B |0
+<U002F> \x61 |0
+<U0030> \xF0 |0
+<U0031> \xF1 |0
+<U0032> \xF2 |0
+<U0033> \xF3 |0
+<U0034> \xF4 |0
+<U0035> \xF5 |0
+<U0036> \xF6 |0
+<U0037> \xF7 |0
+<U0038> \xF8 |0
+<U0039> \xF9 |0
+<U003A> \x7A |0
+<U003B> \x5E |0
+<U003C> \x4C |0
+<U003D> \x7E |0
+<U003E> \x6E |0
+<U003F> \x6F |0
+<U0040> \x7C |0
+<U0041> \xC1 |0
+<U0042> \xC2 |0
+<U0043> \xC3 |0
+<U0044> \xC4 |0
+<U0045> \xC5 |0
+<U0046> \xC6 |0
+<U0047> \xC7 |0
+<U0048> \xC8 |0
+<U0049> \xC9 |0
+<U004A> \xD1 |0
+<U004B> \xD2 |0
+<U004C> \xD3 |0
+<U004D> \xD4 |0
+<U004E> \xD5 |0
+<U004F> \xD6 |0
+<U0050> \xD7 |0
+<U0051> \xD8 |0
+<U0052> \xD9 |0
+<U0053> \xE2 |0
+<U0054> \xE3 |0
+<U0055> \xE4 |0
+<U0056> \xE5 |0
+<U0057> \xE6 |0
+<U0058> \xE7 |0
+<U0059> \xE8 |0
+<U005A> \xE9 |0
+<U005B> \x4A |0
+<U005C> \xE0 |0
+<U005D> \x5A |0
+<U005E> \x5F |0
+<U005F> \x6D |0
+<U0060> \x79 |0
+<U0061> \x81 |0
+<U0062> \x82 |0
+<U0063> \x83 |0
+<U0064> \x84 |0
+<U0065> \x85 |0
+<U0066> \x86 |0
+<U0067> \x87 |0
+<U0068> \x88 |0
+<U0069> \x89 |0
+<U006A> \x91 |0
+<U006B> \x92 |0
+<U006C> \x93 |0
+<U006D> \x94 |0
+<U006E> \x95 |0
+<U006F> \x96 |0
+<U0070> \x97 |0
+<U0071> \x98 |0
+<U0072> \x99 |0
+<U0073> \xA2 |0
+<U0074> \xA3 |0
+<U0075> \xA4 |0
+<U0076> \xA5 |0
+<U0077> \xA6 |0
+<U0078> \xA7 |0
+<U0079> \xA8 |0
+<U007A> \xA9 |0
+<U007B> \xC0 |0
+<U007C> \xBB |0
+<U007D> \xD0 |0
+<U007E> \xA1 |0
+<U007F> \x07 |0
+<U0080> \x20 |0
+<U0081> \x21 |0
+<U0082> \x22 |0
+<U0083> \x23 |0
+<U0084> \x24 |0
+<U0085> \x15 |0
+<U0086> \x06 |0
+<U0087> \x17 |0
+<U0088> \x28 |0
+<U0089> \x29 |0
+<U008A> \x2A |0
+<U008B> \x2B |0
+<U008C> \x2C |0
+<U008D> \x09 |0
+<U008E> \x0A |0
+<U008F> \x1B |0
+<U0090> \x30 |0
+<U0091> \x31 |0
+<U0092> \x1A |0
+<U0093> \x33 |0
+<U0094> \x34 |0
+<U0095> \x35 |0
+<U0096> \x36 |0
+<U0097> \x08 |0
+<U0098> \x38 |0
+<U0099> \x39 |0
+<U009A> \x3A |0
+<U009B> \x3B |0
+<U009C> \x04 |0
+<U009D> \x14 |0
+<U009E> \x3E |0
+<U009F> \xFF |0
+<U00A0> \x41 |0
+<U00A1> \xAA |0
+<U00A2> \xB0 |0
+<U00A3> \xB1 |0
+<U00A4> \x9F |0
+<U00A5> \xB2 |0
+<U00A6> \x6A |0
+<U00A7> \xB5 |0
+<U00A8> \xBD |0
+<U00A9> \xB4 |0
+<U00AA> \x9A |0
+<U00AB> \x8A |0
+<U00AC> \xBA |0
+<U00AD> \xCA |0
+<U00AE> \xAF |0
+<U00AF> \xBC |0
+<U00B0> \x90 |0
+<U00B1> \x8F |0
+<U00B2> \xEA |0
+<U00B3> \xFA |0
+<U00B4> \xBE |0
+<U00B5> \xA0 |0
+<U00B6> \xB6 |0
+<U00B7> \xB3 |0
+<U00B8> \x9D |0
+<U00B9> \xDA |0
+<U00BA> \x9B |0
+<U00BB> \x8B |0
+<U00BC> \xB7 |0
+<U00BD> \xB8 |0
+<U00BE> \xB9 |0
+<U00BF> \xAB |0
+<U00C0> \x64 |0
+<U00C1> \x65 |0
+<U00C2> \x62 |0
+<U00C3> \x66 |0
+<U00C4> \x63 |0
+<U00C5> \x67 |0
+<U00C6> \x9E |0
+<U00C7> \x68 |0
+<U00C8> \x74 |0
+<U00C9> \x71 |0
+<U00CA> \x72 |0
+<U00CB> \x73 |0
+<U00CC> \x78 |0
+<U00CD> \x75 |0
+<U00CE> \x76 |0
+<U00CF> \x77 |0
+<U00D0> \xAC |0
+<U00D1> \x69 |0
+<U00D2> \xED |0
+<U00D3> \xEE |0
+<U00D4> \xEB |0
+<U00D5> \xEF |0
+<U00D6> \xEC |0
+<U00D7> \xBF |0
+<U00D8> \x80 |0
+<U00D9> \xFD |0
+<U00DA> \xFE |0
+<U00DB> \xFB |0
+<U00DC> \xFC |0
+<U00DD> \xAD |0
+<U00DE> \xAE |0
+<U00DF> \x59 |0
+<U00E0> \x44 |0
+<U00E1> \x45 |0
+<U00E2> \x42 |0
+<U00E3> \x46 |0
+<U00E4> \x43 |0
+<U00E5> \x47 |0
+<U00E6> \x9C |0
+<U00E7> \x48 |0
+<U00E8> \x54 |0
+<U00E9> \x51 |0
+<U00EA> \x52 |0
+<U00EB> \x53 |0
+<U00EC> \x58 |0
+<U00ED> \x55 |0
+<U00EE> \x56 |0
+<U00EF> \x57 |0
+<U00F0> \x8C |0
+<U00F1> \x49 |0
+<U00F2> \xCD |0
+<U00F3> \xCE |0
+<U00F4> \xCB |0
+<U00F5> \xCF |0
+<U00F6> \xCC |0
+<U00F7> \xE1 |0
+<U00F8> \x70 |0
+<U00F9> \xDD |0
+<U00FA> \xDE |0
+<U00FB> \xDB |0
+<U00FC> \xDC |0
+<U00FD> \x8D |0
+<U00FE> \x8E |0
+<U00FF> \xDF |0
+<U0110> \xAC |1
+<U203E> \xBC |1
+<UFF01> \x4F |1
+<UFF02> \x7F |1
+<UFF03> \x7B |1
+<UFF04> \x5B |1
+<UFF05> \x6C |1
+<UFF06> \x50 |1
+<UFF07> \x7D |1
+<UFF08> \x4D |1
+<UFF09> \x5D |1
+<UFF0A> \x5C |1
+<UFF0B> \x4E |1
+<UFF0C> \x6B |1
+<UFF0D> \x60 |1
+<UFF0E> \x4B |1
+<UFF0F> \x61 |1
+<UFF10> \xF0 |1
+<UFF11> \xF1 |1
+<UFF12> \xF2 |1
+<UFF13> \xF3 |1
+<UFF14> \xF4 |1
+<UFF15> \xF5 |1
+<UFF16> \xF6 |1
+<UFF17> \xF7 |1
+<UFF18> \xF8 |1
+<UFF19> \xF9 |1
+<UFF1A> \x7A |1
+<UFF1B> \x5E |1
+<UFF1C> \x4C |1
+<UFF1D> \x7E |1
+<UFF1E> \x6E |1
+<UFF1F> \x6F |1
+<UFF20> \x7C |1
+<UFF21> \xC1 |1
+<UFF22> \xC2 |1
+<UFF23> \xC3 |1
+<UFF24> \xC4 |1
+<UFF25> \xC5 |1
+<UFF26> \xC6 |1
+<UFF27> \xC7 |1
+<UFF28> \xC8 |1
+<UFF29> \xC9 |1
+<UFF2A> \xD1 |1
+<UFF2B> \xD2 |1
+<UFF2C> \xD3 |1
+<UFF2D> \xD4 |1
+<UFF2E> \xD5 |1
+<UFF2F> \xD6 |1
+<UFF30> \xD7 |1
+<UFF31> \xD8 |1
+<UFF32> \xD9 |1
+<UFF33> \xE2 |1
+<UFF34> \xE3 |1
+<UFF35> \xE4 |1
+<UFF36> \xE5 |1
+<UFF37> \xE6 |1
+<UFF38> \xE7 |1
+<UFF39> \xE8 |1
+<UFF3A> \xE9 |1
+<UFF3B> \x4A |1
+<UFF3C> \xE0 |1
+<UFF3D> \x5A |1
+<UFF3E> \x5F |1
+<UFF3F> \x6D |1
+<UFF40> \x79 |1
+<UFF41> \x81 |1
+<UFF42> \x82 |1
+<UFF43> \x83 |1
+<UFF44> \x84 |1
+<UFF45> \x85 |1
+<UFF46> \x86 |1
+<UFF47> \x87 |1
+<UFF48> \x88 |1
+<UFF49> \x89 |1
+<UFF4A> \x91 |1
+<UFF4B> \x92 |1
+<UFF4C> \x93 |1
+<UFF4D> \x94 |1
+<UFF4E> \x95 |1
+<UFF4F> \x96 |1
+<UFF50> \x97 |1
+<UFF51> \x98 |1
+<UFF52> \x99 |1
+<UFF53> \xA2 |1
+<UFF54> \xA3 |1
+<UFF55> \xA4 |1
+<UFF56> \xA5 |1
+<UFF57> \xA6 |1
+<UFF58> \xA7 |1
+<UFF59> \xA8 |1
+<UFF5A> \xA9 |1
+<UFF5B> \xC0 |1
+<UFF5C> \xBB |1
+<UFF5D> \xD0 |1
+<UFF5E> \xA1 |1
+END CHARMAP
diff --git a/mcs/class/I18N/Rare/ibm-852.ucm b/mcs/class/I18N/Rare/ibm-852.ucm
new file mode 100644
index 00000000000..5e45addb083
--- /dev/null
+++ b/mcs/class/I18N/Rare/ibm-852.ucm
@@ -0,0 +1,415 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1995-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Mon Nov 13 08:50:42 2000
+#
+# File created by dtcocm version 3.00
+# from source files 34B00354.RPMAP100 and 035434B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-852"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x7F
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-852
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x7F |0
+<U001B> \x1B |0
+<U001C> \x1A |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x1C |0
+<U00A0> \xFF |0
+<U00A4> \xCF |0
+<U00A7> \xF5 |0
+<U00A8> \xF9 |0
+<U00AB> \xAE |0
+<U00AD> \xF0 |0
+<U00B0> \xF8 |0
+<U00B4> \xEF |0
+<U00B6> \x14 |1
+<U00B8> \xF7 |0
+<U00BB> \xAF |0
+<U00C1> \xB5 |0
+<U00C2> \xB6 |0
+<U00C4> \x8E |0
+<U00C7> \x80 |0
+<U00C9> \x90 |0
+<U00CB> \xD3 |0
+<U00CD> \xD6 |0
+<U00CE> \xD7 |0
+<U00D0> \xD1 |1
+<U00D3> \xE0 |0
+<U00D4> \xE2 |0
+<U00D6> \x99 |0
+<U00D7> \x9E |0
+<U00DA> \xE9 |0
+<U00DC> \x9A |0
+<U00DD> \xED |0
+<U00DF> \xE1 |0
+<U00E1> \xA0 |0
+<U00E2> \x83 |0
+<U00E4> \x84 |0
+<U00E7> \x87 |0
+<U00E9> \x82 |0
+<U00EB> \x89 |0
+<U00ED> \xA1 |0
+<U00EE> \x8C |0
+<U00F3> \xA2 |0
+<U00F4> \x93 |0
+<U00F6> \x94 |0
+<U00F7> \xF6 |0
+<U00FA> \xA3 |0
+<U00FC> \x81 |0
+<U00FD> \xEC |0
+<U0102> \xC6 |0
+<U0103> \xC7 |0
+<U0104> \xA4 |0
+<U0105> \xA5 |0
+<U0106> \x8F |0
+<U0107> \x86 |0
+<U010C> \xAC |0
+<U010D> \x9F |0
+<U010E> \xD2 |0
+<U010F> \xD4 |0
+<U0110> \xD1 |0
+<U0111> \xD0 |0
+<U0118> \xA8 |0
+<U0119> \xA9 |0
+<U011A> \xB7 |0
+<U011B> \xD8 |0
+<U0139> \x91 |0
+<U013A> \x92 |0
+<U013D> \x95 |0
+<U013E> \x96 |0
+<U0141> \x9D |0
+<U0142> \x88 |0
+<U0143> \xE3 |0
+<U0144> \xE4 |0
+<U0147> \xD5 |0
+<U0148> \xE5 |0
+<U0150> \x8A |0
+<U0151> \x8B |0
+<U0154> \xE8 |0
+<U0155> \xEA |0
+<U0158> \xFC |0
+<U0159> \xFD |0
+<U015A> \x97 |0
+<U015B> \x98 |0
+<U015E> \xB8 |0
+<U015F> \xAD |0
+<U0160> \xE6 |0
+<U0161> \xE7 |0
+<U0162> \xDD |0
+<U0163> \xEE |0
+<U0164> \x9B |0
+<U0165> \x9C |0
+<U016E> \xDE |0
+<U016F> \x85 |0
+<U0170> \xEB |0
+<U0171> \xFB |0
+<U0179> \x8D |0
+<U017A> \xAB |0
+<U017B> \xBD |0
+<U017C> \xBE |0
+<U017D> \xA6 |0
+<U017E> \xA7 |0
+<U02C7> \xF3 |0
+<U02D8> \xF4 |0
+<U02D9> \xFA |0
+<U02DB> \xF2 |0
+<U02DD> \xF1 |0
+<U2022> \x07 |1
+<U203C> \x13 |1
+<U2190> \x1B |1
+<U2191> \x18 |1
+<U2192> \x1A |1
+<U2193> \x19 |1
+<U2194> \x1D |1
+<U2195> \x12 |1
+<U21A8> \x17 |1
+<U221F> \x1C |1
+<U2302> \x7F |2
+<U2500> \xC4 |0
+<U2502> \xB3 |0
+<U250C> \xDA |0
+<U2510> \xBF |0
+<U2514> \xC0 |0
+<U2518> \xD9 |0
+<U251C> \xC3 |0
+<U2524> \xB4 |0
+<U252C> \xC2 |0
+<U2534> \xC1 |0
+<U253C> \xC5 |0
+<U2550> \xCD |0
+<U2551> \xBA |0
+<U2554> \xC9 |0
+<U2557> \xBB |0
+<U255A> \xC8 |0
+<U255D> \xBC |0
+<U2560> \xCC |0
+<U2563> \xB9 |0
+<U2566> \xCB |0
+<U2569> \xCA |0
+<U256C> \xCE |0
+<U2580> \xDF |0
+<U2584> \xDC |0
+<U2588> \xDB |0
+<U2591> \xB0 |0
+<U2592> \xB1 |0
+<U2593> \xB2 |0
+<U25A0> \xFE |0
+<U25AC> \x16 |1
+<U25B2> \x1E |1
+<U25BA> \x10 |1
+<U25BC> \x1F |1
+<U25C4> \x11 |1
+<U25CB> \x09 |1
+<U25D8> \x08 |1
+<U25D9> \x0A |1
+<U263A> \x01 |1
+<U263B> \x02 |1
+<U263C> \x0F |1
+<U2640> \x0C |1
+<U2642> \x0B |1
+<U2660> \x06 |1
+<U2663> \x05 |1
+<U2665> \x03 |1
+<U2666> \x04 |1
+<U266A> \x0D |1
+<U266C> \x0E |1
+<UFF01> \x21 |1
+<UFF02> \x22 |1
+<UFF03> \x23 |1
+<UFF04> \x24 |1
+<UFF05> \x25 |1
+<UFF06> \x26 |1
+<UFF07> \x27 |1
+<UFF08> \x28 |1
+<UFF09> \x29 |1
+<UFF0A> \x2A |1
+<UFF0B> \x2B |1
+<UFF0C> \x2C |1
+<UFF0D> \x2D |1
+<UFF0E> \x2E |1
+<UFF0F> \x2F |1
+<UFF10> \x30 |1
+<UFF11> \x31 |1
+<UFF12> \x32 |1
+<UFF13> \x33 |1
+<UFF14> \x34 |1
+<UFF15> \x35 |1
+<UFF16> \x36 |1
+<UFF17> \x37 |1
+<UFF18> \x38 |1
+<UFF19> \x39 |1
+<UFF1A> \x3A |1
+<UFF1B> \x3B |1
+<UFF1C> \x3C |1
+<UFF1D> \x3D |1
+<UFF1E> \x3E |1
+<UFF1F> \x3F |1
+<UFF20> \x40 |1
+<UFF21> \x41 |1
+<UFF22> \x42 |1
+<UFF23> \x43 |1
+<UFF24> \x44 |1
+<UFF25> \x45 |1
+<UFF26> \x46 |1
+<UFF27> \x47 |1
+<UFF28> \x48 |1
+<UFF29> \x49 |1
+<UFF2A> \x4A |1
+<UFF2B> \x4B |1
+<UFF2C> \x4C |1
+<UFF2D> \x4D |1
+<UFF2E> \x4E |1
+<UFF2F> \x4F |1
+<UFF30> \x50 |1
+<UFF31> \x51 |1
+<UFF32> \x52 |1
+<UFF33> \x53 |1
+<UFF34> \x54 |1
+<UFF35> \x55 |1
+<UFF36> \x56 |1
+<UFF37> \x57 |1
+<UFF38> \x58 |1
+<UFF39> \x59 |1
+<UFF3A> \x5A |1
+<UFF3B> \x5B |1
+<UFF3C> \x5C |1
+<UFF3D> \x5D |1
+<UFF3E> \x5E |1
+<UFF3F> \x5F |1
+<UFF40> \x60 |1
+<UFF41> \x61 |1
+<UFF42> \x62 |1
+<UFF43> \x63 |1
+<UFF44> \x64 |1
+<UFF45> \x65 |1
+<UFF46> \x66 |1
+<UFF47> \x67 |1
+<UFF48> \x68 |1
+<UFF49> \x69 |1
+<UFF4A> \x6A |1
+<UFF4B> \x6B |1
+<UFF4C> \x6C |1
+<UFF4D> \x6D |1
+<UFF4E> \x6E |1
+<UFF4F> \x6F |1
+<UFF50> \x70 |1
+<UFF51> \x71 |1
+<UFF52> \x72 |1
+<UFF53> \x73 |1
+<UFF54> \x74 |1
+<UFF55> \x75 |1
+<UFF56> \x76 |1
+<UFF57> \x77 |1
+<UFF58> \x78 |1
+<UFF59> \x79 |1
+<UFF5A> \x7A |1
+<UFF5B> \x7B |1
+<UFF5C> \x7C |1
+<UFF5D> \x7D |1
+<UFF5E> \x7E |1
+<UFFE8> \xB3 |1
+<UFFE9> \x1B |1
+<UFFEA> \x18 |1
+<UFFEB> \x1A |1
+<UFFEC> \x19 |1
+<UFFED> \xFE |1
+<UFFEE> \x09 |1
+END CHARMAP
diff --git a/mcs/class/I18N/Rare/ibm-855.ucm b/mcs/class/I18N/Rare/ibm-855.ucm
new file mode 100644
index 00000000000..bc80b19fb31
--- /dev/null
+++ b/mcs/class/I18N/Rare/ibm-855.ucm
@@ -0,0 +1,415 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1995-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Mon Nov 13 08:50:42 2000
+#
+# File created by dtcocm version 3.00
+# from source files 34B00357.RPMAP100 and 035734B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-855"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x7F
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-855
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x7F |0
+<U001B> \x1B |0
+<U001C> \x1A |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x1C |0
+<U00A0> \xFF |0
+<U00A4> \xCF |0
+<U00A7> \xFD |0
+<U00AB> \xAE |0
+<U00AD> \xF0 |0
+<U00B6> \x14 |1
+<U00BB> \xAF |0
+<U0401> \x85 |0
+<U0402> \x81 |0
+<U0403> \x83 |0
+<U0404> \x87 |0
+<U0405> \x89 |0
+<U0406> \x8B |0
+<U0407> \x8D |0
+<U0408> \x8F |0
+<U0409> \x91 |0
+<U040A> \x93 |0
+<U040B> \x95 |0
+<U040C> \x97 |0
+<U040E> \x99 |0
+<U040F> \x9B |0
+<U0410> \xA1 |0
+<U0411> \xA3 |0
+<U0412> \xEC |0
+<U0413> \xAD |0
+<U0414> \xA7 |0
+<U0415> \xA9 |0
+<U0416> \xEA |0
+<U0417> \xF4 |0
+<U0418> \xB8 |0
+<U0419> \xBE |0
+<U041A> \xC7 |0
+<U041B> \xD1 |0
+<U041C> \xD3 |0
+<U041D> \xD5 |0
+<U041E> \xD7 |0
+<U041F> \xDD |0
+<U0420> \xE2 |0
+<U0421> \xE4 |0
+<U0422> \xE6 |0
+<U0423> \xE8 |0
+<U0424> \xAB |0
+<U0425> \xB6 |0
+<U0426> \xA5 |0
+<U0427> \xFC |0
+<U0428> \xF6 |0
+<U0429> \xFA |0
+<U042A> \x9F |0
+<U042B> \xF2 |0
+<U042C> \xEE |0
+<U042D> \xF8 |0
+<U042E> \x9D |0
+<U042F> \xE0 |0
+<U0430> \xA0 |0
+<U0431> \xA2 |0
+<U0432> \xEB |0
+<U0433> \xAC |0
+<U0434> \xA6 |0
+<U0435> \xA8 |0
+<U0436> \xE9 |0
+<U0437> \xF3 |0
+<U0438> \xB7 |0
+<U0439> \xBD |0
+<U043A> \xC6 |0
+<U043B> \xD0 |0
+<U043C> \xD2 |0
+<U043D> \xD4 |0
+<U043E> \xD6 |0
+<U043F> \xD8 |0
+<U0440> \xE1 |0
+<U0441> \xE3 |0
+<U0442> \xE5 |0
+<U0443> \xE7 |0
+<U0444> \xAA |0
+<U0445> \xB5 |0
+<U0446> \xA4 |0
+<U0447> \xFB |0
+<U0448> \xF5 |0
+<U0449> \xF9 |0
+<U044A> \x9E |0
+<U044B> \xF1 |0
+<U044C> \xED |0
+<U044D> \xF7 |0
+<U044E> \x9C |0
+<U044F> \xDE |0
+<U0451> \x84 |0
+<U0452> \x80 |0
+<U0453> \x82 |0
+<U0454> \x86 |0
+<U0455> \x88 |0
+<U0456> \x8A |0
+<U0457> \x8C |0
+<U0458> \x8E |0
+<U0459> \x90 |0
+<U045A> \x92 |0
+<U045B> \x94 |0
+<U045C> \x96 |0
+<U045E> \x98 |0
+<U045F> \x9A |0
+<U2022> \x07 |1
+<U203C> \x13 |1
+<U2116> \xEF |0
+<U2190> \x1B |1
+<U2191> \x18 |1
+<U2192> \x1A |1
+<U2193> \x19 |1
+<U2194> \x1D |1
+<U2195> \x12 |1
+<U21A8> \x17 |1
+<U221F> \x1C |1
+<U2302> \x7F |2
+<U2500> \xC4 |0
+<U2502> \xB3 |0
+<U250C> \xDA |0
+<U2510> \xBF |0
+<U2514> \xC0 |0
+<U2518> \xD9 |0
+<U251C> \xC3 |0
+<U2524> \xB4 |0
+<U252C> \xC2 |0
+<U2534> \xC1 |0
+<U253C> \xC5 |0
+<U2550> \xCD |0
+<U2551> \xBA |0
+<U2554> \xC9 |0
+<U2557> \xBB |0
+<U255A> \xC8 |0
+<U255D> \xBC |0
+<U2560> \xCC |0
+<U2563> \xB9 |0
+<U2566> \xCB |0
+<U2569> \xCA |0
+<U256C> \xCE |0
+<U2580> \xDF |0
+<U2584> \xDC |0
+<U2588> \xDB |0
+<U2591> \xB0 |0
+<U2592> \xB1 |0
+<U2593> \xB2 |0
+<U25A0> \xFE |0
+<U25AC> \x16 |1
+<U25B2> \x1E |1
+<U25BA> \x10 |1
+<U25BC> \x1F |1
+<U25C4> \x11 |1
+<U25CB> \x09 |1
+<U25D8> \x08 |1
+<U25D9> \x0A |1
+<U263A> \x01 |1
+<U263B> \x02 |1
+<U263C> \x0F |1
+<U2640> \x0C |1
+<U2642> \x0B |1
+<U2660> \x06 |1
+<U2663> \x05 |1
+<U2665> \x03 |1
+<U2666> \x04 |1
+<U266A> \x0D |1
+<U266B> \x0E |1
+<UFF01> \x21 |1
+<UFF02> \x22 |1
+<UFF03> \x23 |1
+<UFF04> \x24 |1
+<UFF05> \x25 |1
+<UFF06> \x26 |1
+<UFF07> \x27 |1
+<UFF08> \x28 |1
+<UFF09> \x29 |1
+<UFF0A> \x2A |1
+<UFF0B> \x2B |1
+<UFF0C> \x2C |1
+<UFF0D> \x2D |1
+<UFF0E> \x2E |1
+<UFF0F> \x2F |1
+<UFF10> \x30 |1
+<UFF11> \x31 |1
+<UFF12> \x32 |1
+<UFF13> \x33 |1
+<UFF14> \x34 |1
+<UFF15> \x35 |1
+<UFF16> \x36 |1
+<UFF17> \x37 |1
+<UFF18> \x38 |1
+<UFF19> \x39 |1
+<UFF1A> \x3A |1
+<UFF1B> \x3B |1
+<UFF1C> \x3C |1
+<UFF1D> \x3D |1
+<UFF1E> \x3E |1
+<UFF1F> \x3F |1
+<UFF20> \x40 |1
+<UFF21> \x41 |1
+<UFF22> \x42 |1
+<UFF23> \x43 |1
+<UFF24> \x44 |1
+<UFF25> \x45 |1
+<UFF26> \x46 |1
+<UFF27> \x47 |1
+<UFF28> \x48 |1
+<UFF29> \x49 |1
+<UFF2A> \x4A |1
+<UFF2B> \x4B |1
+<UFF2C> \x4C |1
+<UFF2D> \x4D |1
+<UFF2E> \x4E |1
+<UFF2F> \x4F |1
+<UFF30> \x50 |1
+<UFF31> \x51 |1
+<UFF32> \x52 |1
+<UFF33> \x53 |1
+<UFF34> \x54 |1
+<UFF35> \x55 |1
+<UFF36> \x56 |1
+<UFF37> \x57 |1
+<UFF38> \x58 |1
+<UFF39> \x59 |1
+<UFF3A> \x5A |1
+<UFF3B> \x5B |1
+<UFF3C> \x5C |1
+<UFF3D> \x5D |1
+<UFF3E> \x5E |1
+<UFF3F> \x5F |1
+<UFF40> \x60 |1
+<UFF41> \x61 |1
+<UFF42> \x62 |1
+<UFF43> \x63 |1
+<UFF44> \x64 |1
+<UFF45> \x65 |1
+<UFF46> \x66 |1
+<UFF47> \x67 |1
+<UFF48> \x68 |1
+<UFF49> \x69 |1
+<UFF4A> \x6A |1
+<UFF4B> \x6B |1
+<UFF4C> \x6C |1
+<UFF4D> \x6D |1
+<UFF4E> \x6E |1
+<UFF4F> \x6F |1
+<UFF50> \x70 |1
+<UFF51> \x71 |1
+<UFF52> \x72 |1
+<UFF53> \x73 |1
+<UFF54> \x74 |1
+<UFF55> \x75 |1
+<UFF56> \x76 |1
+<UFF57> \x77 |1
+<UFF58> \x78 |1
+<UFF59> \x79 |1
+<UFF5A> \x7A |1
+<UFF5B> \x7B |1
+<UFF5C> \x7C |1
+<UFF5D> \x7D |1
+<UFF5E> \x7E |1
+<UFFE8> \xB3 |1
+<UFFE9> \x1B |1
+<UFFEA> \x18 |1
+<UFFEB> \x1A |1
+<UFFEC> \x19 |1
+<UFFED> \xFE |1
+<UFFEE> \x09 |1
+END CHARMAP
diff --git a/mcs/class/I18N/Rare/ibm-857.ucm b/mcs/class/I18N/Rare/ibm-857.ucm
new file mode 100644
index 00000000000..9d07db99bc8
--- /dev/null
+++ b/mcs/class/I18N/Rare/ibm-857.ucm
@@ -0,0 +1,412 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1995-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Mon Nov 13 08:50:43 2000
+#
+# File created by dtcocm version 3.00
+# from source files 34B00359.RPMAP100 and 035934B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-857"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x7F
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-857
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x7F |0
+<U001B> \x1B |0
+<U001C> \x1A |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x1C |0
+<U00A0> \xFF |0
+<U00A1> \xAD |0
+<U00A2> \xBD |0
+<U00A3> \x9C |0
+<U00A4> \xCF |0
+<U00A5> \xBE |0
+<U00A6> \xDD |0
+<U00A7> \xF5 |0
+<U00A8> \xF9 |0
+<U00A9> \xB8 |0
+<U00AA> \xD1 |0
+<U00AB> \xAE |0
+<U00AC> \xAA |0
+<U00AD> \xF0 |0
+<U00AE> \xA9 |0
+<U00AF> \xEE |0
+<U00B0> \xF8 |0
+<U00B1> \xF1 |0
+<U00B2> \xFD |0
+<U00B3> \xFC |0
+<U00B4> \xEF |0
+<U00B5> \xE6 |0
+<U00B6> \xF4 |0
+<U00B7> \xFA |0
+<U00B8> \xF7 |0
+<U00B9> \xFB |0
+<U00BA> \xD0 |0
+<U00BB> \xAF |0
+<U00BC> \xAC |0
+<U00BD> \xAB |0
+<U00BE> \xF3 |0
+<U00BF> \xA8 |0
+<U00C0> \xB7 |0
+<U00C1> \xB5 |0
+<U00C2> \xB6 |0
+<U00C3> \xC7 |0
+<U00C4> \x8E |0
+<U00C5> \x8F |0
+<U00C6> \x92 |0
+<U00C7> \x80 |0
+<U00C8> \xD4 |0
+<U00C9> \x90 |0
+<U00CA> \xD2 |0
+<U00CB> \xD3 |0
+<U00CC> \xDE |0
+<U00CD> \xD6 |0
+<U00CE> \xD7 |0
+<U00CF> \xD8 |0
+<U00D1> \xA5 |0
+<U00D2> \xE3 |0
+<U00D3> \xE0 |0
+<U00D4> \xE2 |0
+<U00D5> \xE5 |0
+<U00D6> \x99 |0
+<U00D7> \xE8 |0
+<U00D8> \x9D |0
+<U00D9> \xEB |0
+<U00DA> \xE9 |0
+<U00DB> \xEA |0
+<U00DC> \x9A |0
+<U00DF> \xE1 |0
+<U00E0> \x85 |0
+<U00E1> \xA0 |0
+<U00E2> \x83 |0
+<U00E3> \xC6 |0
+<U00E4> \x84 |0
+<U00E5> \x86 |0
+<U00E6> \x91 |0
+<U00E7> \x87 |0
+<U00E8> \x8A |0
+<U00E9> \x82 |0
+<U00EA> \x88 |0
+<U00EB> \x89 |0
+<U00EC> \xEC |0
+<U00ED> \xA1 |0
+<U00EE> \x8C |0
+<U00EF> \x8B |0
+<U00F1> \xA4 |0
+<U00F2> \x95 |0
+<U00F3> \xA2 |0
+<U00F4> \x93 |0
+<U00F5> \xE4 |0
+<U00F6> \x94 |0
+<U00F7> \xF6 |0
+<U00F8> \x9B |0
+<U00F9> \x97 |0
+<U00FA> \xA3 |0
+<U00FB> \x96 |0
+<U00FC> \x81 |0
+<U00FF> \xED |0
+<U011E> \xA6 |0
+<U011F> \xA7 |0
+<U0130> \x98 |0
+<U0131> \x8D |0
+<U015E> \x9E |0
+<U015F> \x9F |0
+<U2022> \x07 |1
+<U203C> \x13 |1
+<U203E> \xEE |1
+<U2190> \x1B |1
+<U2191> \x18 |1
+<U2192> \x1A |1
+<U2193> \x19 |1
+<U2194> \x1D |1
+<U2195> \x12 |1
+<U21A8> \x17 |1
+<U221F> \x1C |1
+<U2302> \x7F |2
+<U2500> \xC4 |0
+<U2502> \xB3 |0
+<U250C> \xDA |0
+<U2510> \xBF |0
+<U2514> \xC0 |0
+<U2518> \xD9 |0
+<U251C> \xC3 |0
+<U2524> \xB4 |0
+<U252C> \xC2 |0
+<U2534> \xC1 |0
+<U253C> \xC5 |0
+<U2550> \xCD |0
+<U2551> \xBA |0
+<U2554> \xC9 |0
+<U2557> \xBB |0
+<U255A> \xC8 |0
+<U255D> \xBC |0
+<U2560> \xCC |0
+<U2563> \xB9 |0
+<U2566> \xCB |0
+<U2569> \xCA |0
+<U256C> \xCE |0
+<U2580> \xDF |0
+<U2584> \xDC |0
+<U2588> \xDB |0
+<U2591> \xB0 |0
+<U2592> \xB1 |0
+<U2593> \xB2 |0
+<U25A0> \xFE |0
+<U25AC> \x16 |1
+<U25B2> \x1E |1
+<U25BA> \x10 |1
+<U25BC> \x1F |1
+<U25C4> \x11 |1
+<U25CB> \x09 |1
+<U25D8> \x08 |1
+<U25D9> \x0A |1
+<U263A> \x01 |1
+<U263B> \x02 |1
+<U263C> \x0F |1
+<U2640> \x0C |1
+<U2642> \x0B |1
+<U2660> \x06 |1
+<U2663> \x05 |1
+<U2665> \x03 |1
+<U2666> \x04 |1
+<U266A> \x0D |1
+<U266B> \x0E |1
+<UFF01> \x21 |1
+<UFF02> \x22 |1
+<UFF03> \x23 |1
+<UFF04> \x24 |1
+<UFF05> \x25 |1
+<UFF06> \x26 |1
+<UFF07> \x27 |1
+<UFF08> \x28 |1
+<UFF09> \x29 |1
+<UFF0A> \x2A |1
+<UFF0B> \x2B |1
+<UFF0C> \x2C |1
+<UFF0D> \x2D |1
+<UFF0E> \x2E |1
+<UFF0F> \x2F |1
+<UFF10> \x30 |1
+<UFF11> \x31 |1
+<UFF12> \x32 |1
+<UFF13> \x33 |1
+<UFF14> \x34 |1
+<UFF15> \x35 |1
+<UFF16> \x36 |1
+<UFF17> \x37 |1
+<UFF18> \x38 |1
+<UFF19> \x39 |1
+<UFF1A> \x3A |1
+<UFF1B> \x3B |1
+<UFF1C> \x3C |1
+<UFF1D> \x3D |1
+<UFF1E> \x3E |1
+<UFF1F> \x3F |1
+<UFF20> \x40 |1
+<UFF21> \x41 |1
+<UFF22> \x42 |1
+<UFF23> \x43 |1
+<UFF24> \x44 |1
+<UFF25> \x45 |1
+<UFF26> \x46 |1
+<UFF27> \x47 |1
+<UFF28> \x48 |1
+<UFF29> \x49 |1
+<UFF2A> \x4A |1
+<UFF2B> \x4B |1
+<UFF2C> \x4C |1
+<UFF2D> \x4D |1
+<UFF2E> \x4E |1
+<UFF2F> \x4F |1
+<UFF30> \x50 |1
+<UFF31> \x51 |1
+<UFF32> \x52 |1
+<UFF33> \x53 |1
+<UFF34> \x54 |1
+<UFF35> \x55 |1
+<UFF36> \x56 |1
+<UFF37> \x57 |1
+<UFF38> \x58 |1
+<UFF39> \x59 |1
+<UFF3A> \x5A |1
+<UFF3B> \x5B |1
+<UFF3C> \x5C |1
+<UFF3D> \x5D |1
+<UFF3E> \x5E |1
+<UFF3F> \x5F |1
+<UFF40> \x60 |1
+<UFF41> \x61 |1
+<UFF42> \x62 |1
+<UFF43> \x63 |1
+<UFF44> \x64 |1
+<UFF45> \x65 |1
+<UFF46> \x66 |1
+<UFF47> \x67 |1
+<UFF48> \x68 |1
+<UFF49> \x69 |1
+<UFF4A> \x6A |1
+<UFF4B> \x6B |1
+<UFF4C> \x6C |1
+<UFF4D> \x6D |1
+<UFF4E> \x6E |1
+<UFF4F> \x6F |1
+<UFF50> \x70 |1
+<UFF51> \x71 |1
+<UFF52> \x72 |1
+<UFF53> \x73 |1
+<UFF54> \x74 |1
+<UFF55> \x75 |1
+<UFF56> \x76 |1
+<UFF57> \x77 |1
+<UFF58> \x78 |1
+<UFF59> \x79 |1
+<UFF5A> \x7A |1
+<UFF5B> \x7B |1
+<UFF5C> \x7C |1
+<UFF5D> \x7D |1
+<UFF5E> \x7E |1
+<UFFE8> \xB3 |1
+<UFFE9> \x1B |1
+<UFFEA> \x18 |1
+<UFFEB> \x1A |1
+<UFFEC> \x19 |1
+<UFFED> \xFE |1
+<UFFEE> \x09 |1
+END CHARMAP
diff --git a/mcs/class/I18N/Rare/ibm-858.ucm b/mcs/class/I18N/Rare/ibm-858.ucm
new file mode 100644
index 00000000000..29da17cfb98
--- /dev/null
+++ b/mcs/class/I18N/Rare/ibm-858.ucm
@@ -0,0 +1,415 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1997-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Mon Nov 13 08:50:43 2000
+#
+# File created by dtcocm version 3.00
+# from source files 44B0035A.RPMAP100 and 035A44B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-858"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x7F
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-858
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x7F |0
+<U001B> \x1B |0
+<U001C> \x1A |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x1C |0
+<U00A0> \xFF |0
+<U00A1> \xAD |0
+<U00A2> \xBD |0
+<U00A3> \x9C |0
+<U00A4> \xCF |0
+<U00A5> \xBE |0
+<U00A6> \xDD |0
+<U00A7> \xF5 |0
+<U00A8> \xF9 |0
+<U00A9> \xB8 |0
+<U00AA> \xA6 |0
+<U00AB> \xAE |0
+<U00AC> \xAA |0
+<U00AD> \xF0 |0
+<U00AE> \xA9 |0
+<U00AF> \xEE |0
+<U00B0> \xF8 |0
+<U00B1> \xF1 |0
+<U00B2> \xFD |0
+<U00B3> \xFC |0
+<U00B4> \xEF |0
+<U00B5> \xE6 |0
+<U00B6> \xF4 |0
+<U00B7> \xFA |0
+<U00B8> \xF7 |0
+<U00B9> \xFB |0
+<U00BA> \xA7 |0
+<U00BB> \xAF |0
+<U00BC> \xAC |0
+<U00BD> \xAB |0
+<U00BE> \xF3 |0
+<U00BF> \xA8 |0
+<U00C0> \xB7 |0
+<U00C1> \xB5 |0
+<U00C2> \xB6 |0
+<U00C3> \xC7 |0
+<U00C4> \x8E |0
+<U00C5> \x8F |0
+<U00C6> \x92 |0
+<U00C7> \x80 |0
+<U00C8> \xD4 |0
+<U00C9> \x90 |0
+<U00CA> \xD2 |0
+<U00CB> \xD3 |0
+<U00CC> \xDE |0
+<U00CD> \xD6 |0
+<U00CE> \xD7 |0
+<U00CF> \xD8 |0
+<U00D0> \xD1 |0
+<U00D1> \xA5 |0
+<U00D2> \xE3 |0
+<U00D3> \xE0 |0
+<U00D4> \xE2 |0
+<U00D5> \xE5 |0
+<U00D6> \x99 |0
+<U00D7> \x9E |0
+<U00D8> \x9D |0
+<U00D9> \xEB |0
+<U00DA> \xE9 |0
+<U00DB> \xEA |0
+<U00DC> \x9A |0
+<U00DD> \xED |0
+<U00DE> \xE8 |0
+<U00DF> \xE1 |0
+<U00E0> \x85 |0
+<U00E1> \xA0 |0
+<U00E2> \x83 |0
+<U00E3> \xC6 |0
+<U00E4> \x84 |0
+<U00E5> \x86 |0
+<U00E6> \x91 |0
+<U00E7> \x87 |0
+<U00E8> \x8A |0
+<U00E9> \x82 |0
+<U00EA> \x88 |0
+<U00EB> \x89 |0
+<U00EC> \x8D |0
+<U00ED> \xA1 |0
+<U00EE> \x8C |0
+<U00EF> \x8B |0
+<U00F0> \xD0 |0
+<U00F1> \xA4 |0
+<U00F2> \x95 |0
+<U00F3> \xA2 |0
+<U00F4> \x93 |0
+<U00F5> \xE4 |0
+<U00F6> \x94 |0
+<U00F7> \xF6 |0
+<U00F8> \x9B |0
+<U00F9> \x97 |0
+<U00FA> \xA3 |0
+<U00FB> \x96 |0
+<U00FC> \x81 |0
+<U00FD> \xEC |0
+<U00FE> \xE7 |0
+<U00FF> \x98 |0
+<U0192> \x9F |0
+<U2017> \xF2 |0
+<U2022> \x07 |1
+<U203C> \x13 |1
+<U203E> \xEE |1
+<U20AC> \xD5 |0
+<U2190> \x1B |1
+<U2191> \x18 |1
+<U2192> \x1A |1
+<U2193> \x19 |1
+<U2194> \x1D |1
+<U2195> \x12 |1
+<U21A8> \x17 |1
+<U221F> \x1C |1
+<U2302> \x7F |2
+<U2500> \xC4 |0
+<U2502> \xB3 |0
+<U250C> \xDA |0
+<U2510> \xBF |0
+<U2514> \xC0 |0
+<U2518> \xD9 |0
+<U251C> \xC3 |0
+<U2524> \xB4 |0
+<U252C> \xC2 |0
+<U2534> \xC1 |0
+<U253C> \xC5 |0
+<U2550> \xCD |0
+<U2551> \xBA |0
+<U2554> \xC9 |0
+<U2557> \xBB |0
+<U255A> \xC8 |0
+<U255D> \xBC |0
+<U2560> \xCC |0
+<U2563> \xB9 |0
+<U2566> \xCB |0
+<U2569> \xCA |0
+<U256C> \xCE |0
+<U2580> \xDF |0
+<U2584> \xDC |0
+<U2588> \xDB |0
+<U2591> \xB0 |0
+<U2592> \xB1 |0
+<U2593> \xB2 |0
+<U25A0> \xFE |0
+<U25AC> \x16 |1
+<U25B2> \x1E |1
+<U25BA> \x10 |1
+<U25BC> \x1F |1
+<U25C4> \x11 |1
+<U25CB> \x09 |1
+<U25D8> \x08 |1
+<U25D9> \x0A |1
+<U263A> \x01 |1
+<U263B> \x02 |1
+<U263C> \x0F |1
+<U2640> \x0C |1
+<U2642> \x0B |1
+<U2660> \x06 |1
+<U2663> \x05 |1
+<U2665> \x03 |1
+<U2666> \x04 |1
+<U266A> \x0D |1
+<U266C> \x0E |1
+<UFF01> \x21 |1
+<UFF02> \x22 |1
+<UFF03> \x23 |1
+<UFF04> \x24 |1
+<UFF05> \x25 |1
+<UFF06> \x26 |1
+<UFF07> \x27 |1
+<UFF08> \x28 |1
+<UFF09> \x29 |1
+<UFF0A> \x2A |1
+<UFF0B> \x2B |1
+<UFF0C> \x2C |1
+<UFF0D> \x2D |1
+<UFF0E> \x2E |1
+<UFF0F> \x2F |1
+<UFF10> \x30 |1
+<UFF11> \x31 |1
+<UFF12> \x32 |1
+<UFF13> \x33 |1
+<UFF14> \x34 |1
+<UFF15> \x35 |1
+<UFF16> \x36 |1
+<UFF17> \x37 |1
+<UFF18> \x38 |1
+<UFF19> \x39 |1
+<UFF1A> \x3A |1
+<UFF1B> \x3B |1
+<UFF1C> \x3C |1
+<UFF1D> \x3D |1
+<UFF1E> \x3E |1
+<UFF1F> \x3F |1
+<UFF20> \x40 |1
+<UFF21> \x41 |1
+<UFF22> \x42 |1
+<UFF23> \x43 |1
+<UFF24> \x44 |1
+<UFF25> \x45 |1
+<UFF26> \x46 |1
+<UFF27> \x47 |1
+<UFF28> \x48 |1
+<UFF29> \x49 |1
+<UFF2A> \x4A |1
+<UFF2B> \x4B |1
+<UFF2C> \x4C |1
+<UFF2D> \x4D |1
+<UFF2E> \x4E |1
+<UFF2F> \x4F |1
+<UFF30> \x50 |1
+<UFF31> \x51 |1
+<UFF32> \x52 |1
+<UFF33> \x53 |1
+<UFF34> \x54 |1
+<UFF35> \x55 |1
+<UFF36> \x56 |1
+<UFF37> \x57 |1
+<UFF38> \x58 |1
+<UFF39> \x59 |1
+<UFF3A> \x5A |1
+<UFF3B> \x5B |1
+<UFF3C> \x5C |1
+<UFF3D> \x5D |1
+<UFF3E> \x5E |1
+<UFF3F> \x5F |1
+<UFF40> \x60 |1
+<UFF41> \x61 |1
+<UFF42> \x62 |1
+<UFF43> \x63 |1
+<UFF44> \x64 |1
+<UFF45> \x65 |1
+<UFF46> \x66 |1
+<UFF47> \x67 |1
+<UFF48> \x68 |1
+<UFF49> \x69 |1
+<UFF4A> \x6A |1
+<UFF4B> \x6B |1
+<UFF4C> \x6C |1
+<UFF4D> \x6D |1
+<UFF4E> \x6E |1
+<UFF4F> \x6F |1
+<UFF50> \x70 |1
+<UFF51> \x71 |1
+<UFF52> \x72 |1
+<UFF53> \x73 |1
+<UFF54> \x74 |1
+<UFF55> \x75 |1
+<UFF56> \x76 |1
+<UFF57> \x77 |1
+<UFF58> \x78 |1
+<UFF59> \x79 |1
+<UFF5A> \x7A |1
+<UFF5B> \x7B |1
+<UFF5C> \x7C |1
+<UFF5D> \x7D |1
+<UFF5E> \x7E |1
+<UFFE8> \xB3 |1
+<UFFE9> \x1B |1
+<UFFEA> \x18 |1
+<UFFEB> \x1A |1
+<UFFEC> \x19 |1
+<UFFED> \xFE |1
+<UFFEE> \x09 |1
+END CHARMAP
diff --git a/mcs/class/I18N/Rare/ibm-862.ucm b/mcs/class/I18N/Rare/ibm-862.ucm
new file mode 100644
index 00000000000..33592b0ff47
--- /dev/null
+++ b/mcs/class/I18N/Rare/ibm-862.ucm
@@ -0,0 +1,416 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1995-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Mon Nov 13 08:50:43 2000
+#
+# File created by dtcocm version 3.00
+# from source files 34B0035E.RPMAP100 and 035E34B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-862"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x7F
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-862
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x7F |0
+<U001B> \x1B |0
+<U001C> \x1A |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x1C |0
+<U00A0> \xFF |0
+<U00A1> \xAD |0
+<U00A2> \x9B |0
+<U00A3> \x9C |0
+<U00A5> \x9D |0
+<U00A7> \x15 |1
+<U00AA> \xA6 |0
+<U00AB> \xAE |0
+<U00AC> \xAA |0
+<U00B0> \xF8 |0
+<U00B1> \xF1 |0
+<U00B2> \xFD |0
+<U00B6> \x14 |1
+<U00B7> \xFA |0
+<U00BA> \xA7 |0
+<U00BB> \xAF |0
+<U00BC> \xAC |0
+<U00BD> \xAB |0
+<U00BF> \xA8 |0
+<U00D1> \xA5 |0
+<U00DF> \xE1 |0
+<U00E1> \xA0 |0
+<U00ED> \xA1 |0
+<U00F1> \xA4 |0
+<U00F3> \xA2 |0
+<U00F7> \xF6 |0
+<U00FA> \xA3 |0
+<U0192> \x9F |0
+<U0393> \xE2 |0
+<U0398> \xE9 |0
+<U03A3> \xE4 |0
+<U03A6> \xE8 |0
+<U03A9> \xEA |0
+<U03B1> \xE0 |0
+<U03B4> \xEB |0
+<U03B5> \xEE |0
+<U03BC> \xE6 |0
+<U03C0> \xE3 |0
+<U03C3> \xE5 |0
+<U03C4> \xE7 |0
+<U03C6> \xED |0
+<U05D0> \x80 |0
+<U05D1> \x81 |0
+<U05D2> \x82 |0
+<U05D3> \x83 |0
+<U05D4> \x84 |0
+<U05D5> \x85 |0
+<U05D6> \x86 |0
+<U05D7> \x87 |0
+<U05D8> \x88 |0
+<U05D9> \x89 |0
+<U05DA> \x8A |0
+<U05DB> \x8B |0
+<U05DC> \x8C |0
+<U05DD> \x8D |0
+<U05DE> \x8E |0
+<U05DF> \x8F |0
+<U05E0> \x90 |0
+<U05E1> \x91 |0
+<U05E2> \x92 |0
+<U05E3> \x93 |0
+<U05E4> \x94 |0
+<U05E5> \x95 |0
+<U05E6> \x96 |0
+<U05E7> \x97 |0
+<U05E8> \x98 |0
+<U05E9> \x99 |0
+<U05EA> \x9A |0
+<U2022> \x07 |1
+<U203C> \x13 |1
+<U207F> \xFC |0
+<U20A7> \x9E |0
+<U2190> \x1B |1
+<U2191> \x18 |1
+<U2192> \x1A |1
+<U2193> \x19 |1
+<U2194> \x1D |1
+<U2195> \x12 |1
+<U21A8> \x17 |1
+<U2219> \xF9 |0
+<U221A> \xFB |0
+<U221E> \xEC |0
+<U221F> \x1C |1
+<U2229> \xEF |0
+<U2248> \xF7 |0
+<U2261> \xF0 |0
+<U2264> \xF3 |0
+<U2265> \xF2 |0
+<U2302> \x7F |2
+<U2310> \xA9 |0
+<U2320> \xF4 |0
+<U2321> \xF5 |0
+<U2500> \xC4 |0
+<U2502> \xB3 |0
+<U250C> \xDA |0
+<U2510> \xBF |0
+<U2514> \xC0 |0
+<U2518> \xD9 |0
+<U251C> \xC3 |0
+<U2524> \xB4 |0
+<U252C> \xC2 |0
+<U2534> \xC1 |0
+<U253C> \xC5 |0
+<U2550> \xCD |0
+<U2551> \xBA |0
+<U2552> \xD5 |0
+<U2553> \xD6 |0
+<U2554> \xC9 |0
+<U2555> \xB8 |0
+<U2556> \xB7 |0
+<U2557> \xBB |0
+<U2558> \xD4 |0
+<U2559> \xD3 |0
+<U255A> \xC8 |0
+<U255B> \xBE |0
+<U255C> \xBD |0
+<U255D> \xBC |0
+<U255E> \xC6 |0
+<U255F> \xC7 |0
+<U2560> \xCC |0
+<U2561> \xB5 |0
+<U2562> \xB6 |0
+<U2563> \xB9 |0
+<U2564> \xD1 |0
+<U2565> \xD2 |0
+<U2566> \xCB |0
+<U2567> \xCF |0
+<U2568> \xD0 |0
+<U2569> \xCA |0
+<U256A> \xD8 |0
+<U256B> \xD7 |0
+<U256C> \xCE |0
+<U2580> \xDF |0
+<U2584> \xDC |0
+<U2588> \xDB |0
+<U258C> \xDD |0
+<U2590> \xDE |0
+<U2591> \xB0 |0
+<U2592> \xB1 |0
+<U2593> \xB2 |0
+<U25A0> \xFE |0
+<U25AC> \x16 |1
+<U25B2> \x1E |1
+<U25BA> \x10 |1
+<U25BC> \x1F |1
+<U25C4> \x11 |1
+<U25CB> \x09 |1
+<U25D8> \x08 |1
+<U25D9> \x0A |1
+<U263A> \x01 |1
+<U263B> \x02 |1
+<U263C> \x0F |1
+<U2640> \x0C |1
+<U2642> \x0B |1
+<U2660> \x06 |1
+<U2663> \x05 |1
+<U2665> \x03 |1
+<U2666> \x04 |1
+<U266A> \x0D |1
+<U266B> \x0E |1
+<UFF01> \x21 |1
+<UFF02> \x22 |1
+<UFF03> \x23 |1
+<UFF04> \x24 |1
+<UFF05> \x25 |1
+<UFF06> \x26 |1
+<UFF07> \x27 |1
+<UFF08> \x28 |1
+<UFF09> \x29 |1
+<UFF0A> \x2A |1
+<UFF0B> \x2B |1
+<UFF0C> \x2C |1
+<UFF0D> \x2D |1
+<UFF0E> \x2E |1
+<UFF0F> \x2F |1
+<UFF10> \x30 |1
+<UFF11> \x31 |1
+<UFF12> \x32 |1
+<UFF13> \x33 |1
+<UFF14> \x34 |1
+<UFF15> \x35 |1
+<UFF16> \x36 |1
+<UFF17> \x37 |1
+<UFF18> \x38 |1
+<UFF19> \x39 |1
+<UFF1A> \x3A |1
+<UFF1B> \x3B |1
+<UFF1C> \x3C |1
+<UFF1D> \x3D |1
+<UFF1E> \x3E |1
+<UFF1F> \x3F |1
+<UFF20> \x40 |1
+<UFF21> \x41 |1
+<UFF22> \x42 |1
+<UFF23> \x43 |1
+<UFF24> \x44 |1
+<UFF25> \x45 |1
+<UFF26> \x46 |1
+<UFF27> \x47 |1
+<UFF28> \x48 |1
+<UFF29> \x49 |1
+<UFF2A> \x4A |1
+<UFF2B> \x4B |1
+<UFF2C> \x4C |1
+<UFF2D> \x4D |1
+<UFF2E> \x4E |1
+<UFF2F> \x4F |1
+<UFF30> \x50 |1
+<UFF31> \x51 |1
+<UFF32> \x52 |1
+<UFF33> \x53 |1
+<UFF34> \x54 |1
+<UFF35> \x55 |1
+<UFF36> \x56 |1
+<UFF37> \x57 |1
+<UFF38> \x58 |1
+<UFF39> \x59 |1
+<UFF3A> \x5A |1
+<UFF3B> \x5B |1
+<UFF3C> \x5C |1
+<UFF3D> \x5D |1
+<UFF3E> \x5E |1
+<UFF3F> \x5F |1
+<UFF40> \x60 |1
+<UFF41> \x61 |1
+<UFF42> \x62 |1
+<UFF43> \x63 |1
+<UFF44> \x64 |1
+<UFF45> \x65 |1
+<UFF46> \x66 |1
+<UFF47> \x67 |1
+<UFF48> \x68 |1
+<UFF49> \x69 |1
+<UFF4A> \x6A |1
+<UFF4B> \x6B |1
+<UFF4C> \x6C |1
+<UFF4D> \x6D |1
+<UFF4E> \x6E |1
+<UFF4F> \x6F |1
+<UFF50> \x70 |1
+<UFF51> \x71 |1
+<UFF52> \x72 |1
+<UFF53> \x73 |1
+<UFF54> \x74 |1
+<UFF55> \x75 |1
+<UFF56> \x76 |1
+<UFF57> \x77 |1
+<UFF58> \x78 |1
+<UFF59> \x79 |1
+<UFF5A> \x7A |1
+<UFF5B> \x7B |1
+<UFF5C> \x7C |1
+<UFF5D> \x7D |1
+<UFF5E> \x7E |1
+<UFFE8> \xB3 |1
+<UFFE9> \x1B |1
+<UFFEA> \x18 |1
+<UFFEB> \x1A |1
+<UFFEC> \x19 |1
+<UFFED> \xFE |1
+<UFFEE> \x09 |1
+END CHARMAP
diff --git a/mcs/class/I18N/Rare/ibm-864.ucm b/mcs/class/I18N/Rare/ibm-864.ucm
new file mode 100644
index 00000000000..3128d1c227d
--- /dev/null
+++ b/mcs/class/I18N/Rare/ibm-864.ucm
@@ -0,0 +1,498 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1995-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Thu Nov 9 17:44:50 2000
+#
+# File created by dtcocm version 3.00
+# from source files 34B00360.RXMAP110 and 036034B0.TXMAP110
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-864"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x7F
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-864
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x7F |0
+<U001B> \x1B |0
+<U001C> \x1A |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x1C |0
+<U00A0> \xA0 |0
+<U00A2> \xC0 |0
+<U00A3> \xA3 |0
+<U00A4> \xA4 |0
+<U00A6> \xDB |0
+<U00A7> \x15 |1
+<U00AB> \x97 |0
+<U00AC> \xDC |0
+<U00AD> \xA1 |0
+<U00B0> \x80 |0
+<U00B1> \x93 |0
+<U00B6> \x14 |1
+<U00B7> \x81 |0
+<U00BB> \x98 |0
+<U00BC> \x95 |0
+<U00BD> \x94 |0
+<U00D7> \xDE |0
+<U00F7> \xDD |0
+<U03B2> \x90 |0
+<U03C6> \x92 |0
+<U060C> \xAC |0
+<U061B> \xBB |0
+<U061F> \xBF |0
+<U0621> \xC1 |1
+<U0622> \xC2 |1
+<U0623> \xC3 |1
+<U0624> \xC4 |1
+<U0626> \xC6 |1
+<U0627> \xC7 |1
+<U0628> \xC8 |1
+<U0629> \xC9 |1
+<U062A> \xCA |1
+<U062B> \xCB |1
+<U062C> \xCC |1
+<U062D> \xCD |1
+<U062E> \xCE |1
+<U062F> \xCF |1
+<U0630> \xD0 |1
+<U0631> \xD1 |1
+<U0632> \xD2 |1
+<U0633> \xD3 |1
+<U0634> \xD4 |1
+<U0635> \xD5 |1
+<U0636> \xD6 |1
+<U0637> \xD7 |1
+<U0638> \xD8 |1
+<U0639> \xD9 |1
+<U063A> \xDA |1
+<U0640> \xE0 |0
+<U0641> \xE1 |1
+<U0642> \xE2 |1
+<U0643> \xE3 |1
+<U0644> \xE4 |1
+<U0645> \xE5 |1
+<U0646> \xE6 |1
+<U0647> \xE7 |1
+<U0648> \xE8 |1
+<U0649> \xE9 |1
+<U064A> \xFD |1
+<U0651> \xF1 |1
+<U0660> \xB0 |0
+<U0661> \xB1 |0
+<U0662> \xB2 |0
+<U0663> \xB3 |0
+<U0664> \xB4 |0
+<U0665> \xB5 |0
+<U0666> \xB6 |0
+<U0667> \xB7 |0
+<U0668> \xB8 |0
+<U0669> \xB9 |0
+<U066A> \x25 |1
+<U066B> \x2C |1
+<U066C> \x2E |1
+<U066D> \x2A |1
+<U200B> \x9F |0
+<U203C> \x13 |1
+<U2190> \x1B |1
+<U2191> \x18 |1
+<U2192> \x1A |1
+<U2193> \x19 |1
+<U2194> \x1D |1
+<U2195> \x12 |1
+<U21A8> \x17 |1
+<U2219> \x82 |0
+<U221A> \x83 |0
+<U221E> \x91 |0
+<U221F> \x1C |1
+<U2248> \x96 |0
+<U2302> \x7F |2
+<U2500> \x85 |0
+<U2502> \x86 |0
+<U250C> \x8D |0
+<U2510> \x8C |0
+<U2514> \x8E |0
+<U2518> \x8F |0
+<U251C> \x8A |0
+<U2524> \x88 |0
+<U252C> \x89 |0
+<U2534> \x8B |0
+<U253C> \x87 |0
+<U2550> \x05 |1
+<U2551> \x06 |1
+<U2554> \x0D |1
+<U2557> \x0C |1
+<U255A> \x0E |1
+<U255D> \x0F |1
+<U2560> \x0A |1
+<U2563> \x08 |1
+<U2566> \x09 |1
+<U2569> \x0B |1
+<U256C> \x07 |1
+<U2592> \x84 |0
+<U25A0> \xFE |0
+<U25AC> \x16 |1
+<U25B2> \x1E |1
+<U25BA> \x10 |1
+<U25BC> \x1F |1
+<U25C4> \x11 |1
+<U263A> \x01 |1
+<U263C> \x04 |1
+<U266A> \x02 |1
+<U266C> \x03 |1
+<UFE7C> \xF1 |0
+<UFE7D> \xF0 |0
+<UFE80> \xC1 |0
+<UFE81> \xC2 |0
+<UFE82> \xA2 |0
+<UFE83> \xC3 |0
+<UFE84> \xA5 |0
+<UFE85> \xC4 |0
+<UFE86> \xC4 |1
+<UFE8B> \xC6 |0
+<UFE8C> \xC6 |1
+<UFE8D> \xC7 |0
+<UFE8E> \xA8 |0
+<UFE8F> \xA9 |0
+<UFE90> \xA9 |1
+<UFE91> \xC8 |0
+<UFE92> \xC8 |1
+<UFE93> \xC9 |0
+<UFE94> \xC9 |1
+<UFE95> \xAA |0
+<UFE96> \xAA |1
+<UFE97> \xCA |0
+<UFE98> \xCA |1
+<UFE99> \xAB |0
+<UFE9A> \xAB |1
+<UFE9B> \xCB |0
+<UFE9C> \xCB |1
+<UFE9D> \xAD |0
+<UFE9E> \xAD |1
+<UFE9F> \xCC |0
+<UFEA0> \xCC |1
+<UFEA1> \xAE |0
+<UFEA2> \xAE |1
+<UFEA3> \xCD |0
+<UFEA4> \xCD |1
+<UFEA5> \xAF |0
+<UFEA6> \xAF |1
+<UFEA7> \xCE |0
+<UFEA8> \xCE |1
+<UFEA9> \xCF |0
+<UFEAA> \xCF |1
+<UFEAB> \xD0 |0
+<UFEAC> \xD0 |1
+<UFEAD> \xD1 |0
+<UFEAE> \xD1 |1
+<UFEAF> \xD2 |0
+<UFEB0> \xD2 |1
+<UFEB1> \xBC |0
+<UFEB2> \xBC |1
+<UFEB3> \xD3 |0
+<UFEB4> \xD3 |1
+<UFEB5> \xBD |0
+<UFEB6> \xBD |1
+<UFEB7> \xD4 |0
+<UFEB8> \xD4 |1
+<UFEB9> \xBE |0
+<UFEBA> \xBE |1
+<UFEBB> \xD5 |0
+<UFEBC> \xD5 |1
+<UFEBD> \xEB |0
+<UFEBE> \xEB |1
+<UFEBF> \xD6 |0
+<UFEC0> \xD6 |1
+<UFEC1> \xD7 |1
+<UFEC2> \xD7 |1
+<UFEC3> \xD7 |0
+<UFEC4> \xD7 |1
+<UFEC5> \xD8 |1
+<UFEC6> \xD8 |1
+<UFEC7> \xD8 |0
+<UFEC8> \xD8 |1
+<UFEC9> \xDF |0
+<UFECA> \xC5 |0
+<UFECB> \xD9 |0
+<UFECC> \xEC |0
+<UFECD> \xEE |0
+<UFECE> \xED |0
+<UFECF> \xDA |0
+<UFED0> \xF7 |0
+<UFED1> \xBA |0
+<UFED2> \xBA |1
+<UFED3> \xE1 |0
+<UFED4> \xE1 |1
+<UFED5> \xF8 |0
+<UFED6> \xF8 |1
+<UFED7> \xE2 |0
+<UFED8> \xE2 |1
+<UFED9> \xFC |0
+<UFEDA> \xFC |1
+<UFEDB> \xE3 |0
+<UFEDC> \xE3 |1
+<UFEDD> \xFB |0
+<UFEDE> \xFB |1
+<UFEDF> \xE4 |0
+<UFEE0> \xE4 |1
+<UFEE1> \xEF |0
+<UFEE2> \xEF |1
+<UFEE3> \xE5 |0
+<UFEE4> \xE5 |1
+<UFEE5> \xF2 |0
+<UFEE6> \xF2 |1
+<UFEE7> \xE6 |0
+<UFEE8> \xE6 |1
+<UFEE9> \xF3 |0
+<UFEEA> \xF3 |1
+<UFEEB> \xE7 |0
+<UFEEC> \xF4 |0
+<UFEED> \xE8 |0
+<UFEEE> \xE8 |1
+<UFEEF> \xE9 |0
+<UFEF0> \xF5 |0
+<UFEF1> \xFD |0
+<UFEF2> \xF6 |0
+<UFEF3> \xEA |0
+<UFEF4> \xEA |1
+<UFEF5> \xF9 |0
+<UFEF6> \xFA |0
+<UFEF7> \x99 |0
+<UFEF8> \x9A |0
+<UFEFB> \x9D |0
+<UFEFC> \x9E |0
+<UFF01> \x21 |1
+<UFF02> \x22 |1
+<UFF03> \x23 |1
+<UFF04> \x24 |1
+<UFF05> \x25 |1
+<UFF06> \x26 |1
+<UFF07> \x27 |1
+<UFF08> \x28 |1
+<UFF09> \x29 |1
+<UFF0A> \x2A |1
+<UFF0B> \x2B |1
+<UFF0C> \x2C |1
+<UFF0D> \x2D |1
+<UFF0E> \x2E |1
+<UFF0F> \x2F |1
+<UFF10> \x30 |1
+<UFF11> \x31 |1
+<UFF12> \x32 |1
+<UFF13> \x33 |1
+<UFF14> \x34 |1
+<UFF15> \x35 |1
+<UFF16> \x36 |1
+<UFF17> \x37 |1
+<UFF18> \x38 |1
+<UFF19> \x39 |1
+<UFF1A> \x3A |1
+<UFF1B> \x3B |1
+<UFF1C> \x3C |1
+<UFF1D> \x3D |1
+<UFF1E> \x3E |1
+<UFF1F> \x3F |1
+<UFF20> \x40 |1
+<UFF21> \x41 |1
+<UFF22> \x42 |1
+<UFF23> \x43 |1
+<UFF24> \x44 |1
+<UFF25> \x45 |1
+<UFF26> \x46 |1
+<UFF27> \x47 |1
+<UFF28> \x48 |1
+<UFF29> \x49 |1
+<UFF2A> \x4A |1
+<UFF2B> \x4B |1
+<UFF2C> \x4C |1
+<UFF2D> \x4D |1
+<UFF2E> \x4E |1
+<UFF2F> \x4F |1
+<UFF30> \x50 |1
+<UFF31> \x51 |1
+<UFF32> \x52 |1
+<UFF33> \x53 |1
+<UFF34> \x54 |1
+<UFF35> \x55 |1
+<UFF36> \x56 |1
+<UFF37> \x57 |1
+<UFF38> \x58 |1
+<UFF39> \x59 |1
+<UFF3A> \x5A |1
+<UFF3B> \x5B |1
+<UFF3C> \x5C |1
+<UFF3D> \x5D |1
+<UFF3E> \x5E |1
+<UFF3F> \x5F |1
+<UFF40> \x60 |1
+<UFF41> \x61 |1
+<UFF42> \x62 |1
+<UFF43> \x63 |1
+<UFF44> \x64 |1
+<UFF45> \x65 |1
+<UFF46> \x66 |1
+<UFF47> \x67 |1
+<UFF48> \x68 |1
+<UFF49> \x69 |1
+<UFF4A> \x6A |1
+<UFF4B> \x6B |1
+<UFF4C> \x6C |1
+<UFF4D> \x6D |1
+<UFF4E> \x6E |1
+<UFF4F> \x6F |1
+<UFF50> \x70 |1
+<UFF51> \x71 |1
+<UFF52> \x72 |1
+<UFF53> \x73 |1
+<UFF54> \x74 |1
+<UFF55> \x75 |1
+<UFF56> \x76 |1
+<UFF57> \x77 |1
+<UFF58> \x78 |1
+<UFF59> \x79 |1
+<UFF5A> \x7A |1
+<UFF5B> \x7B |1
+<UFF5C> \x7C |1
+<UFF5D> \x7D |1
+<UFF5E> \x7E |1
+<UFFE8> \x86 |1
+<UFFE9> \x1B |1
+<UFFEA> \x18 |1
+<UFFEB> \x1A |1
+<UFFEC> \x19 |1
+<UFFED> \xFE |1
+END CHARMAP
diff --git a/mcs/class/I18N/Rare/ibm-866.ucm b/mcs/class/I18N/Rare/ibm-866.ucm
new file mode 100644
index 00000000000..f8c434d4b84
--- /dev/null
+++ b/mcs/class/I18N/Rare/ibm-866.ucm
@@ -0,0 +1,416 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1995-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Mon Nov 13 09:28:03 2000
+#
+# File created by dtcocm version 3.00
+# from source files 34B00362.RPMAP100 and 036234B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-866"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x7F
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-866
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x7F |0
+<U001B> \x1B |0
+<U001C> \x1A |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x1C |0
+<U00A0> \xFF |0
+<U00A4> \xFD |0
+<U00A7> \x15 |1
+<U00B0> \xF8 |0
+<U00B6> \x14 |1
+<U00B7> \xFA |0
+<U0401> \xF0 |0
+<U0404> \xF2 |0
+<U0407> \xF4 |0
+<U040E> \xF6 |0
+<U0410> \x80 |0
+<U0411> \x81 |0
+<U0412> \x82 |0
+<U0413> \x83 |0
+<U0414> \x84 |0
+<U0415> \x85 |0
+<U0416> \x86 |0
+<U0417> \x87 |0
+<U0418> \x88 |0
+<U0419> \x89 |0
+<U041A> \x8A |0
+<U041B> \x8B |0
+<U041C> \x8C |0
+<U041D> \x8D |0
+<U041E> \x8E |0
+<U041F> \x8F |0
+<U0420> \x90 |0
+<U0421> \x91 |0
+<U0422> \x92 |0
+<U0423> \x93 |0
+<U0424> \x94 |0
+<U0425> \x95 |0
+<U0426> \x96 |0
+<U0427> \x97 |0
+<U0428> \x98 |0
+<U0429> \x99 |0
+<U042A> \x9A |0
+<U042B> \x9B |0
+<U042C> \x9C |0
+<U042D> \x9D |0
+<U042E> \x9E |0
+<U042F> \x9F |0
+<U0430> \xA0 |0
+<U0431> \xA1 |0
+<U0432> \xA2 |0
+<U0433> \xA3 |0
+<U0434> \xA4 |0
+<U0435> \xA5 |0
+<U0436> \xA6 |0
+<U0437> \xA7 |0
+<U0438> \xA8 |0
+<U0439> \xA9 |0
+<U043A> \xAA |0
+<U043B> \xAB |0
+<U043C> \xAC |0
+<U043D> \xAD |0
+<U043E> \xAE |0
+<U043F> \xAF |0
+<U0440> \xE0 |0
+<U0441> \xE1 |0
+<U0442> \xE2 |0
+<U0443> \xE3 |0
+<U0444> \xE4 |0
+<U0445> \xE5 |0
+<U0446> \xE6 |0
+<U0447> \xE7 |0
+<U0448> \xE8 |0
+<U0449> \xE9 |0
+<U044A> \xEA |0
+<U044B> \xEB |0
+<U044C> \xEC |0
+<U044D> \xED |0
+<U044E> \xEE |0
+<U044F> \xEF |0
+<U0451> \xF1 |0
+<U0454> \xF3 |0
+<U0457> \xF5 |0
+<U045E> \xF7 |0
+<U2022> \x07 |1
+<U203C> \x13 |1
+<U2116> \xFC |0
+<U2190> \x1B |1
+<U2191> \x18 |1
+<U2192> \x1A |1
+<U2193> \x19 |1
+<U2194> \x1D |1
+<U2195> \x12 |1
+<U21A8> \x17 |1
+<U2219> \xF9 |0
+<U221A> \xFB |0
+<U221F> \x1C |1
+<U2302> \x7F |2
+<U2500> \xC4 |0
+<U2502> \xB3 |0
+<U250C> \xDA |0
+<U2510> \xBF |0
+<U2514> \xC0 |0
+<U2518> \xD9 |0
+<U251C> \xC3 |0
+<U2524> \xB4 |0
+<U252C> \xC2 |0
+<U2534> \xC1 |0
+<U253C> \xC5 |0
+<U2550> \xCD |0
+<U2551> \xBA |0
+<U2552> \xD5 |0
+<U2553> \xD6 |0
+<U2554> \xC9 |0
+<U2555> \xB8 |0
+<U2556> \xB7 |0
+<U2557> \xBB |0
+<U2558> \xD4 |0
+<U2559> \xD3 |0
+<U255A> \xC8 |0
+<U255B> \xBE |0
+<U255C> \xBD |0
+<U255D> \xBC |0
+<U255E> \xC6 |0
+<U255F> \xC7 |0
+<U2560> \xCC |0
+<U2561> \xB5 |0
+<U2562> \xB6 |0
+<U2563> \xB9 |0
+<U2564> \xD1 |0
+<U2565> \xD2 |0
+<U2566> \xCB |0
+<U2567> \xCF |0
+<U2568> \xD0 |0
+<U2569> \xCA |0
+<U256A> \xD8 |0
+<U256B> \xD7 |0
+<U256C> \xCE |0
+<U2580> \xDF |0
+<U2584> \xDC |0
+<U2588> \xDB |0
+<U258C> \xDD |0
+<U2590> \xDE |0
+<U2591> \xB0 |0
+<U2592> \xB1 |0
+<U2593> \xB2 |0
+<U25A0> \xFE |0
+<U25AC> \x16 |1
+<U25B2> \x1E |1
+<U25BA> \x10 |1
+<U25BC> \x1F |1
+<U25C4> \x11 |1
+<U25CB> \x09 |1
+<U25D8> \x08 |1
+<U25D9> \x0A |1
+<U263A> \x01 |1
+<U263B> \x02 |1
+<U263C> \x0F |1
+<U2640> \x0C |1
+<U2642> \x0B |1
+<U2660> \x06 |1
+<U2663> \x05 |1
+<U2665> \x03 |1
+<U2666> \x04 |1
+<U266A> \x0D |1
+<U266B> \x0E |1
+<UFF01> \x21 |1
+<UFF02> \x22 |1
+<UFF03> \x23 |1
+<UFF04> \x24 |1
+<UFF05> \x25 |1
+<UFF06> \x26 |1
+<UFF07> \x27 |1
+<UFF08> \x28 |1
+<UFF09> \x29 |1
+<UFF0A> \x2A |1
+<UFF0B> \x2B |1
+<UFF0C> \x2C |1
+<UFF0D> \x2D |1
+<UFF0E> \x2E |1
+<UFF0F> \x2F |1
+<UFF10> \x30 |1
+<UFF11> \x31 |1
+<UFF12> \x32 |1
+<UFF13> \x33 |1
+<UFF14> \x34 |1
+<UFF15> \x35 |1
+<UFF16> \x36 |1
+<UFF17> \x37 |1
+<UFF18> \x38 |1
+<UFF19> \x39 |1
+<UFF1A> \x3A |1
+<UFF1B> \x3B |1
+<UFF1C> \x3C |1
+<UFF1D> \x3D |1
+<UFF1E> \x3E |1
+<UFF1F> \x3F |1
+<UFF20> \x40 |1
+<UFF21> \x41 |1
+<UFF22> \x42 |1
+<UFF23> \x43 |1
+<UFF24> \x44 |1
+<UFF25> \x45 |1
+<UFF26> \x46 |1
+<UFF27> \x47 |1
+<UFF28> \x48 |1
+<UFF29> \x49 |1
+<UFF2A> \x4A |1
+<UFF2B> \x4B |1
+<UFF2C> \x4C |1
+<UFF2D> \x4D |1
+<UFF2E> \x4E |1
+<UFF2F> \x4F |1
+<UFF30> \x50 |1
+<UFF31> \x51 |1
+<UFF32> \x52 |1
+<UFF33> \x53 |1
+<UFF34> \x54 |1
+<UFF35> \x55 |1
+<UFF36> \x56 |1
+<UFF37> \x57 |1
+<UFF38> \x58 |1
+<UFF39> \x59 |1
+<UFF3A> \x5A |1
+<UFF3B> \x5B |1
+<UFF3C> \x5C |1
+<UFF3D> \x5D |1
+<UFF3E> \x5E |1
+<UFF3F> \x5F |1
+<UFF40> \x60 |1
+<UFF41> \x61 |1
+<UFF42> \x62 |1
+<UFF43> \x63 |1
+<UFF44> \x64 |1
+<UFF45> \x65 |1
+<UFF46> \x66 |1
+<UFF47> \x67 |1
+<UFF48> \x68 |1
+<UFF49> \x69 |1
+<UFF4A> \x6A |1
+<UFF4B> \x6B |1
+<UFF4C> \x6C |1
+<UFF4D> \x6D |1
+<UFF4E> \x6E |1
+<UFF4F> \x6F |1
+<UFF50> \x70 |1
+<UFF51> \x71 |1
+<UFF52> \x72 |1
+<UFF53> \x73 |1
+<UFF54> \x74 |1
+<UFF55> \x75 |1
+<UFF56> \x76 |1
+<UFF57> \x77 |1
+<UFF58> \x78 |1
+<UFF59> \x79 |1
+<UFF5A> \x7A |1
+<UFF5B> \x7B |1
+<UFF5C> \x7C |1
+<UFF5D> \x7D |1
+<UFF5E> \x7E |1
+<UFFE8> \xB3 |1
+<UFFE9> \x1B |1
+<UFFEA> \x18 |1
+<UFFEB> \x1A |1
+<UFFEC> \x19 |1
+<UFFED> \xFE |1
+<UFFEE> \x09 |1
+END CHARMAP
diff --git a/mcs/class/I18N/Rare/ibm-869.ucm b/mcs/class/I18N/Rare/ibm-869.ucm
new file mode 100644
index 00000000000..33eb1d8555f
--- /dev/null
+++ b/mcs/class/I18N/Rare/ibm-869.ucm
@@ -0,0 +1,408 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1995-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Mon Nov 13 09:28:03 2000
+#
+# File created by dtcocm version 3.00
+# from source files 34B00365.RPMAP100 and 036534B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-869"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x7F
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-869
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x7F |0
+<U001B> \x1B |0
+<U001C> \x1A |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x1C |0
+<U00A0> \xFF |0
+<U00A3> \x9C |0
+<U00A6> \x8A |0
+<U00A7> \xF5 |0
+<U00A8> \xF9 |0
+<U00A9> \x97 |0
+<U00AB> \xAE |0
+<U00AC> \x89 |0
+<U00AD> \xF0 |0
+<U00B0> \xF8 |0
+<U00B1> \xF1 |0
+<U00B2> \x99 |0
+<U00B3> \x9A |0
+<U00B4> \xEF |0
+<U00B6> \x14 |1
+<U00B7> \x88 |1
+<U00BB> \xAF |0
+<U00BD> \xAB |0
+<U0385> \xF7 |0
+<U0386> \x86 |0
+<U0387> \x88 |0
+<U0388> \x8D |0
+<U0389> \x8F |0
+<U038A> \x90 |0
+<U038C> \x92 |0
+<U038E> \x95 |0
+<U038F> \x98 |0
+<U0390> \xA1 |0
+<U0391> \xA4 |0
+<U0392> \xA5 |0
+<U0393> \xA6 |0
+<U0394> \xA7 |0
+<U0395> \xA8 |0
+<U0396> \xA9 |0
+<U0397> \xAA |0
+<U0398> \xAC |0
+<U0399> \xAD |0
+<U039A> \xB5 |0
+<U039B> \xB6 |0
+<U039C> \xB7 |0
+<U039D> \xB8 |0
+<U039E> \xBD |0
+<U039F> \xBE |0
+<U03A0> \xC6 |0
+<U03A1> \xC7 |0
+<U03A3> \xCF |0
+<U03A4> \xD0 |0
+<U03A5> \xD1 |0
+<U03A6> \xD2 |0
+<U03A7> \xD3 |0
+<U03A8> \xD4 |0
+<U03A9> \xD5 |0
+<U03AA> \x91 |0
+<U03AB> \x96 |0
+<U03AC> \x9B |0
+<U03AD> \x9D |0
+<U03AE> \x9E |0
+<U03AF> \x9F |0
+<U03B0> \xFC |0
+<U03B1> \xD6 |0
+<U03B2> \xD7 |0
+<U03B3> \xD8 |0
+<U03B4> \xDD |0
+<U03B5> \xDE |0
+<U03B6> \xE0 |0
+<U03B7> \xE1 |0
+<U03B8> \xE2 |0
+<U03B9> \xE3 |0
+<U03BA> \xE4 |0
+<U03BB> \xE5 |0
+<U03BC> \xE6 |0
+<U03BD> \xE7 |0
+<U03BE> \xE8 |0
+<U03BF> \xE9 |0
+<U03C0> \xEA |0
+<U03C1> \xEB |0
+<U03C2> \xED |0
+<U03C3> \xEC |0
+<U03C4> \xEE |0
+<U03C5> \xF2 |0
+<U03C6> \xF3 |0
+<U03C7> \xF4 |0
+<U03C8> \xF6 |0
+<U03C9> \xFA |0
+<U03CA> \xA0 |0
+<U03CB> \xFB |0
+<U03CC> \xA2 |0
+<U03CD> \xA3 |0
+<U03CE> \xFD |0
+<U03D5> \xF3 |1
+<U2015> \x8E |0
+<U2018> \x8B |0
+<U2019> \x8C |0
+<U2022> \x07 |1
+<U203C> \x13 |1
+<U2190> \x1B |1
+<U2191> \x18 |1
+<U2192> \x1A |1
+<U2193> \x19 |1
+<U2194> \x1D |1
+<U2195> \x12 |1
+<U21A8> \x17 |1
+<U221F> \x1C |1
+<U2302> \x7F |2
+<U2500> \xC4 |0
+<U2502> \xB3 |0
+<U250C> \xDA |0
+<U2510> \xBF |0
+<U2514> \xC0 |0
+<U2518> \xD9 |0
+<U251C> \xC3 |0
+<U2524> \xB4 |0
+<U252C> \xC2 |0
+<U2534> \xC1 |0
+<U253C> \xC5 |0
+<U2550> \xCD |0
+<U2551> \xBA |0
+<U2554> \xC9 |0
+<U2557> \xBB |0
+<U255A> \xC8 |0
+<U255D> \xBC |0
+<U2560> \xCC |0
+<U2563> \xB9 |0
+<U2566> \xCB |0
+<U2569> \xCA |0
+<U256C> \xCE |0
+<U2580> \xDF |0
+<U2584> \xDC |0
+<U2588> \xDB |0
+<U2591> \xB0 |0
+<U2592> \xB1 |0
+<U2593> \xB2 |0
+<U25A0> \xFE |0
+<U25AC> \x16 |1
+<U25B2> \x1E |1
+<U25BA> \x10 |1
+<U25BC> \x1F |1
+<U25C4> \x11 |1
+<U25CB> \x09 |1
+<U25D8> \x08 |1
+<U25D9> \x0A |1
+<U263A> \x01 |1
+<U263B> \x02 |1
+<U263C> \x0F |1
+<U2640> \x0C |1
+<U2642> \x0B |1
+<U2660> \x06 |1
+<U2663> \x05 |1
+<U2665> \x03 |1
+<U2666> \x04 |1
+<U266A> \x0D |1
+<U266B> \x0E |1
+<UFF01> \x21 |1
+<UFF02> \x22 |1
+<UFF03> \x23 |1
+<UFF04> \x24 |1
+<UFF05> \x25 |1
+<UFF06> \x26 |1
+<UFF07> \x27 |1
+<UFF08> \x28 |1
+<UFF09> \x29 |1
+<UFF0A> \x2A |1
+<UFF0B> \x2B |1
+<UFF0C> \x2C |1
+<UFF0D> \x2D |1
+<UFF0E> \x2E |1
+<UFF0F> \x2F |1
+<UFF10> \x30 |1
+<UFF11> \x31 |1
+<UFF12> \x32 |1
+<UFF13> \x33 |1
+<UFF14> \x34 |1
+<UFF15> \x35 |1
+<UFF16> \x36 |1
+<UFF17> \x37 |1
+<UFF18> \x38 |1
+<UFF19> \x39 |1
+<UFF1A> \x3A |1
+<UFF1B> \x3B |1
+<UFF1C> \x3C |1
+<UFF1D> \x3D |1
+<UFF1E> \x3E |1
+<UFF1F> \x3F |1
+<UFF20> \x40 |1
+<UFF21> \x41 |1
+<UFF22> \x42 |1
+<UFF23> \x43 |1
+<UFF24> \x44 |1
+<UFF25> \x45 |1
+<UFF26> \x46 |1
+<UFF27> \x47 |1
+<UFF28> \x48 |1
+<UFF29> \x49 |1
+<UFF2A> \x4A |1
+<UFF2B> \x4B |1
+<UFF2C> \x4C |1
+<UFF2D> \x4D |1
+<UFF2E> \x4E |1
+<UFF2F> \x4F |1
+<UFF30> \x50 |1
+<UFF31> \x51 |1
+<UFF32> \x52 |1
+<UFF33> \x53 |1
+<UFF34> \x54 |1
+<UFF35> \x55 |1
+<UFF36> \x56 |1
+<UFF37> \x57 |1
+<UFF38> \x58 |1
+<UFF39> \x59 |1
+<UFF3A> \x5A |1
+<UFF3B> \x5B |1
+<UFF3C> \x5C |1
+<UFF3D> \x5D |1
+<UFF3E> \x5E |1
+<UFF3F> \x5F |1
+<UFF40> \x60 |1
+<UFF41> \x61 |1
+<UFF42> \x62 |1
+<UFF43> \x63 |1
+<UFF44> \x64 |1
+<UFF45> \x65 |1
+<UFF46> \x66 |1
+<UFF47> \x67 |1
+<UFF48> \x68 |1
+<UFF49> \x69 |1
+<UFF4A> \x6A |1
+<UFF4B> \x6B |1
+<UFF4C> \x6C |1
+<UFF4D> \x6D |1
+<UFF4E> \x6E |1
+<UFF4F> \x6F |1
+<UFF50> \x70 |1
+<UFF51> \x71 |1
+<UFF52> \x72 |1
+<UFF53> \x73 |1
+<UFF54> \x74 |1
+<UFF55> \x75 |1
+<UFF56> \x76 |1
+<UFF57> \x77 |1
+<UFF58> \x78 |1
+<UFF59> \x79 |1
+<UFF5A> \x7A |1
+<UFF5B> \x7B |1
+<UFF5C> \x7C |1
+<UFF5D> \x7D |1
+<UFF5E> \x7E |1
+<UFFE8> \xB3 |1
+<UFFE9> \x1B |1
+<UFFEA> \x18 |1
+<UFFEB> \x1A |1
+<UFFEC> \x19 |1
+<UFFED> \xFE |1
+<UFFEE> \x09 |1
+END CHARMAP
diff --git a/mcs/class/I18N/Rare/ibm-870.ucm b/mcs/class/I18N/Rare/ibm-870.ucm
new file mode 100644
index 00000000000..53d0fce869e
--- /dev/null
+++ b/mcs/class/I18N/Rare/ibm-870.ucm
@@ -0,0 +1,372 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1995-2001, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created by rptp2ucm (compiled on Feb 23 2001)
+# from source files 34B00366.RPMAP100 and 036634B0.TPMAP100
+#
+<code_set_name> "ibm-870_P100-2000"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x3F
+<icu:charsetFamily> "EBCDIC"
+<icu:alias> "ibm-870_STD"
+
+CHARMAP
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x37 |0
+<U0005> \x2D |0
+<U0006> \x2E |0
+<U0007> \x2F |0
+<U0008> \x16 |0
+<U0009> \x05 |0
+<U000A> \x25 |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x3C |0
+<U0015> \x3D |0
+<U0016> \x32 |0
+<U0017> \x26 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x3F |0
+<U001B> \x27 |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x40 |0
+<U0021> \x4F |0
+<U0022> \x7F |0
+<U0023> \x7B |0
+<U0024> \x5B |0
+<U0025> \x6C |0
+<U0026> \x50 |0
+<U0027> \x7D |0
+<U0028> \x4D |0
+<U0029> \x5D |0
+<U002A> \x5C |0
+<U002B> \x4E |0
+<U002C> \x6B |0
+<U002D> \x60 |0
+<U002E> \x4B |0
+<U002F> \x61 |0
+<U0030> \xF0 |0
+<U0031> \xF1 |0
+<U0032> \xF2 |0
+<U0033> \xF3 |0
+<U0034> \xF4 |0
+<U0035> \xF5 |0
+<U0036> \xF6 |0
+<U0037> \xF7 |0
+<U0038> \xF8 |0
+<U0039> \xF9 |0
+<U003A> \x7A |0
+<U003B> \x5E |0
+<U003C> \x4C |0
+<U003D> \x7E |0
+<U003E> \x6E |0
+<U003F> \x6F |0
+<U0040> \x7C |0
+<U0041> \xC1 |0
+<U0042> \xC2 |0
+<U0043> \xC3 |0
+<U0044> \xC4 |0
+<U0045> \xC5 |0
+<U0046> \xC6 |0
+<U0047> \xC7 |0
+<U0048> \xC8 |0
+<U0049> \xC9 |0
+<U004A> \xD1 |0
+<U004B> \xD2 |0
+<U004C> \xD3 |0
+<U004D> \xD4 |0
+<U004E> \xD5 |0
+<U004F> \xD6 |0
+<U0050> \xD7 |0
+<U0051> \xD8 |0
+<U0052> \xD9 |0
+<U0053> \xE2 |0
+<U0054> \xE3 |0
+<U0055> \xE4 |0
+<U0056> \xE5 |0
+<U0057> \xE6 |0
+<U0058> \xE7 |0
+<U0059> \xE8 |0
+<U005A> \xE9 |0
+<U005B> \x4A |0
+<U005C> \xE0 |0
+<U005D> \x5A |0
+<U005E> \x5F |0
+<U005F> \x6D |0
+<U0060> \x79 |0
+<U0061> \x81 |0
+<U0062> \x82 |0
+<U0063> \x83 |0
+<U0064> \x84 |0
+<U0065> \x85 |0
+<U0066> \x86 |0
+<U0067> \x87 |0
+<U0068> \x88 |0
+<U0069> \x89 |0
+<U006A> \x91 |0
+<U006B> \x92 |0
+<U006C> \x93 |0
+<U006D> \x94 |0
+<U006E> \x95 |0
+<U006F> \x96 |0
+<U0070> \x97 |0
+<U0071> \x98 |0
+<U0072> \x99 |0
+<U0073> \xA2 |0
+<U0074> \xA3 |0
+<U0075> \xA4 |0
+<U0076> \xA5 |0
+<U0077> \xA6 |0
+<U0078> \xA7 |0
+<U0079> \xA8 |0
+<U007A> \xA9 |0
+<U007B> \xC0 |0
+<U007C> \x6A |0
+<U007D> \xD0 |0
+<U007E> \xA1 |0
+<U007F> \x07 |0
+<U0080> \x20 |0
+<U0081> \x21 |0
+<U0082> \x22 |0
+<U0083> \x23 |0
+<U0084> \x24 |0
+<U0085> \x15 |0
+<U0086> \x06 |0
+<U0087> \x17 |0
+<U0088> \x28 |0
+<U0089> \x29 |0
+<U008A> \x2A |0
+<U008B> \x2B |0
+<U008C> \x2C |0
+<U008D> \x09 |0
+<U008E> \x0A |0
+<U008F> \x1B |0
+<U0090> \x30 |0
+<U0091> \x31 |0
+<U0092> \x1A |0
+<U0093> \x33 |0
+<U0094> \x34 |0
+<U0095> \x35 |0
+<U0096> \x36 |0
+<U0097> \x08 |0
+<U0098> \x38 |0
+<U0099> \x39 |0
+<U009A> \x3A |0
+<U009B> \x3B |0
+<U009C> \x04 |0
+<U009D> \x14 |0
+<U009E> \x3E |0
+<U009F> \xFF |0
+<U00A0> \x41 |0
+<U00A4> \x9F |0
+<U00A7> \xB5 |0
+<U00A8> \xBD |0
+<U00AD> \xCA |0
+<U00B0> \x90 |0
+<U00B4> \xBE |0
+<U00B8> \x9D |0
+<U00C1> \x65 |0
+<U00C2> \x62 |0
+<U00C4> \x63 |0
+<U00C7> \x68 |0
+<U00C9> \x71 |0
+<U00CB> \x73 |0
+<U00CD> \x75 |0
+<U00CE> \x76 |0
+<U00D0> \xAC |1
+<U00D3> \xEE |0
+<U00D4> \xEB |0
+<U00D6> \xEC |0
+<U00D7> \xBF |0
+<U00DA> \xFE |0
+<U00DC> \xFC |0
+<U00DD> \xAD |0
+<U00DF> \x59 |0
+<U00E1> \x45 |0
+<U00E2> \x42 |0
+<U00E4> \x43 |0
+<U00E7> \x48 |0
+<U00E9> \x51 |0
+<U00EB> \x53 |0
+<U00ED> \x55 |0
+<U00EE> \x56 |0
+<U00F3> \xCE |0
+<U00F4> \xCB |0
+<U00F6> \xCC |0
+<U00F7> \xE1 |0
+<U00FA> \xDE |0
+<U00FC> \xDC |0
+<U00FD> \x8D |0
+<U0102> \x66 |0
+<U0103> \x46 |0
+<U0104> \xB1 |0
+<U0105> \xA0 |0
+<U0106> \x69 |0
+<U0107> \x49 |0
+<U010C> \x67 |0
+<U010D> \x47 |0
+<U010E> \xFA |0
+<U010F> \xEA |0
+<U0110> \xAC |0
+<U0111> \x8C |0
+<U0118> \x72 |0
+<U0119> \x52 |0
+<U011A> \xDA |0
+<U011B> \xDF |0
+<U0139> \x78 |0
+<U013A> \x58 |0
+<U013D> \x77 |0
+<U013E> \x57 |0
+<U0141> \xBA |0
+<U0142> \x9A |0
+<U0143> \xBB |0
+<U0144> \x9B |0
+<U0147> \xAB |0
+<U0148> \x8B |0
+<U0150> \xEF |0
+<U0151> \xCF |0
+<U0154> \xED |0
+<U0155> \xCD |0
+<U0158> \xAE |0
+<U0159> \x8E |0
+<U015A> \xAA |0
+<U015B> \x8A |0
+<U015E> \xAF |0
+<U015F> \x8F |0
+<U0160> \xBC |0
+<U0161> \x9C |0
+<U0162> \xB3 |0
+<U0163> \x44 |0
+<U0164> \xFD |0
+<U0165> \xDD |0
+<U016E> \x74 |0
+<U016F> \x54 |0
+<U0170> \xFB |0
+<U0171> \xDB |0
+<U0179> \xB9 |0
+<U017A> \xB7 |0
+<U017B> \xB4 |0
+<U017C> \xB2 |0
+<U017D> \xB8 |0
+<U017E> \xB6 |0
+<U02C7> \x70 |0
+<U02D8> \x80 |0
+<U02D9> \xB0 |0
+<U02DB> \x9E |0
+<U02DD> \x64 |0
+<UFF01> \x4F |1
+<UFF02> \x7F |1
+<UFF03> \x7B |1
+<UFF04> \x5B |1
+<UFF05> \x6C |1
+<UFF06> \x50 |1
+<UFF07> \x7D |1
+<UFF08> \x4D |1
+<UFF09> \x5D |1
+<UFF0A> \x5C |1
+<UFF0B> \x4E |1
+<UFF0C> \x6B |1
+<UFF0D> \x60 |1
+<UFF0E> \x4B |1
+<UFF0F> \x61 |1
+<UFF10> \xF0 |1
+<UFF11> \xF1 |1
+<UFF12> \xF2 |1
+<UFF13> \xF3 |1
+<UFF14> \xF4 |1
+<UFF15> \xF5 |1
+<UFF16> \xF6 |1
+<UFF17> \xF7 |1
+<UFF18> \xF8 |1
+<UFF19> \xF9 |1
+<UFF1A> \x7A |1
+<UFF1B> \x5E |1
+<UFF1C> \x4C |1
+<UFF1D> \x7E |1
+<UFF1E> \x6E |1
+<UFF1F> \x6F |1
+<UFF20> \x7C |1
+<UFF21> \xC1 |1
+<UFF22> \xC2 |1
+<UFF23> \xC3 |1
+<UFF24> \xC4 |1
+<UFF25> \xC5 |1
+<UFF26> \xC6 |1
+<UFF27> \xC7 |1
+<UFF28> \xC8 |1
+<UFF29> \xC9 |1
+<UFF2A> \xD1 |1
+<UFF2B> \xD2 |1
+<UFF2C> \xD3 |1
+<UFF2D> \xD4 |1
+<UFF2E> \xD5 |1
+<UFF2F> \xD6 |1
+<UFF30> \xD7 |1
+<UFF31> \xD8 |1
+<UFF32> \xD9 |1
+<UFF33> \xE2 |1
+<UFF34> \xE3 |1
+<UFF35> \xE4 |1
+<UFF36> \xE5 |1
+<UFF37> \xE6 |1
+<UFF38> \xE7 |1
+<UFF39> \xE8 |1
+<UFF3A> \xE9 |1
+<UFF3B> \x4A |1
+<UFF3C> \xE0 |1
+<UFF3D> \x5A |1
+<UFF3E> \x5F |1
+<UFF3F> \x6D |1
+<UFF40> \x79 |1
+<UFF41> \x81 |1
+<UFF42> \x82 |1
+<UFF43> \x83 |1
+<UFF44> \x84 |1
+<UFF45> \x85 |1
+<UFF46> \x86 |1
+<UFF47> \x87 |1
+<UFF48> \x88 |1
+<UFF49> \x89 |1
+<UFF4A> \x91 |1
+<UFF4B> \x92 |1
+<UFF4C> \x93 |1
+<UFF4D> \x94 |1
+<UFF4E> \x95 |1
+<UFF4F> \x96 |1
+<UFF50> \x97 |1
+<UFF51> \x98 |1
+<UFF52> \x99 |1
+<UFF53> \xA2 |1
+<UFF54> \xA3 |1
+<UFF55> \xA4 |1
+<UFF56> \xA5 |1
+<UFF57> \xA6 |1
+<UFF58> \xA7 |1
+<UFF59> \xA8 |1
+<UFF5A> \xA9 |1
+<UFF5B> \xC0 |1
+<UFF5C> \x6A |1
+<UFF5D> \xD0 |1
+<UFF5E> \xA1 |1
+END CHARMAP
diff --git a/mcs/class/I18N/Rare/ibm-871.ucm b/mcs/class/I18N/Rare/ibm-871.ucm
new file mode 100644
index 00000000000..728990ee788
--- /dev/null
+++ b/mcs/class/I18N/Rare/ibm-871.ucm
@@ -0,0 +1,379 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1995-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Mon Nov 13 09:28:03 2000
+#
+# File created by dtcocm version 3.00
+# from source files 34B00367.RPMAP100 and 036734B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-871"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x3F
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-871
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x37 |0
+<U0005> \x2D |0
+<U0006> \x2E |0
+<U0007> \x2F |0
+<U0008> \x16 |0
+<U0009> \x05 |0
+<U000A> \x25 |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x3C |0
+<U0015> \x3D |0
+<U0016> \x32 |0
+<U0017> \x26 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x3F |0
+<U001B> \x27 |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x40 |0
+<U0021> \x4F |0
+<U0022> \x7F |0
+<U0023> \x7B |0
+<U0024> \x5B |0
+<U0025> \x6C |0
+<U0026> \x50 |0
+<U0027> \x7D |0
+<U0028> \x4D |0
+<U0029> \x5D |0
+<U002A> \x5C |0
+<U002B> \x4E |0
+<U002C> \x6B |0
+<U002D> \x60 |0
+<U002E> \x4B |0
+<U002F> \x61 |0
+<U0030> \xF0 |0
+<U0031> \xF1 |0
+<U0032> \xF2 |0
+<U0033> \xF3 |0
+<U0034> \xF4 |0
+<U0035> \xF5 |0
+<U0036> \xF6 |0
+<U0037> \xF7 |0
+<U0038> \xF8 |0
+<U0039> \xF9 |0
+<U003A> \x7A |0
+<U003B> \x5E |0
+<U003C> \x4C |0
+<U003D> \x7E |0
+<U003E> \x6E |0
+<U003F> \x6F |0
+<U0040> \xAC |0
+<U0041> \xC1 |0
+<U0042> \xC2 |0
+<U0043> \xC3 |0
+<U0044> \xC4 |0
+<U0045> \xC5 |0
+<U0046> \xC6 |0
+<U0047> \xC7 |0
+<U0048> \xC8 |0
+<U0049> \xC9 |0
+<U004A> \xD1 |0
+<U004B> \xD2 |0
+<U004C> \xD3 |0
+<U004D> \xD4 |0
+<U004E> \xD5 |0
+<U004F> \xD6 |0
+<U0050> \xD7 |0
+<U0051> \xD8 |0
+<U0052> \xD9 |0
+<U0053> \xE2 |0
+<U0054> \xE3 |0
+<U0055> \xE4 |0
+<U0056> \xE5 |0
+<U0057> \xE6 |0
+<U0058> \xE7 |0
+<U0059> \xE8 |0
+<U005A> \xE9 |0
+<U005B> \xAE |0
+<U005C> \xBE |0
+<U005D> \x9E |0
+<U005E> \xEC |0
+<U005F> \x6D |0
+<U0060> \x8C |0
+<U0061> \x81 |0
+<U0062> \x82 |0
+<U0063> \x83 |0
+<U0064> \x84 |0
+<U0065> \x85 |0
+<U0066> \x86 |0
+<U0067> \x87 |0
+<U0068> \x88 |0
+<U0069> \x89 |0
+<U006A> \x91 |0
+<U006B> \x92 |0
+<U006C> \x93 |0
+<U006D> \x94 |0
+<U006E> \x95 |0
+<U006F> \x96 |0
+<U0070> \x97 |0
+<U0071> \x98 |0
+<U0072> \x99 |0
+<U0073> \xA2 |0
+<U0074> \xA3 |0
+<U0075> \xA4 |0
+<U0076> \xA5 |0
+<U0077> \xA6 |0
+<U0078> \xA7 |0
+<U0079> \xA8 |0
+<U007A> \xA9 |0
+<U007B> \x8E |0
+<U007C> \xBB |0
+<U007D> \x9C |0
+<U007E> \xCC |0
+<U007F> \x07 |0
+<U0080> \x20 |0
+<U0081> \x21 |0
+<U0082> \x22 |0
+<U0083> \x23 |0
+<U0084> \x24 |0
+<U0085> \x15 |0
+<U0086> \x06 |0
+<U0087> \x17 |0
+<U0088> \x28 |0
+<U0089> \x29 |0
+<U008A> \x2A |0
+<U008B> \x2B |0
+<U008C> \x2C |0
+<U008D> \x09 |0
+<U008E> \x0A |0
+<U008F> \x1B |0
+<U0090> \x30 |0
+<U0091> \x31 |0
+<U0092> \x1A |0
+<U0093> \x33 |0
+<U0094> \x34 |0
+<U0095> \x35 |0
+<U0096> \x36 |0
+<U0097> \x08 |0
+<U0098> \x38 |0
+<U0099> \x39 |0
+<U009A> \x3A |0
+<U009B> \x3B |0
+<U009C> \x04 |0
+<U009D> \x14 |0
+<U009E> \x3E |0
+<U009F> \xFF |0
+<U00A0> \x41 |0
+<U00A1> \xAA |0
+<U00A2> \xB0 |0
+<U00A3> \xB1 |0
+<U00A4> \x9F |0
+<U00A5> \xB2 |0
+<U00A6> \x6A |0
+<U00A7> \xB5 |0
+<U00A8> \xBD |0
+<U00A9> \xB4 |0
+<U00AA> \x9A |0
+<U00AB> \x8A |0
+<U00AC> \xBA |0
+<U00AD> \xCA |0
+<U00AE> \xAF |0
+<U00AF> \xBC |0
+<U00B0> \x90 |0
+<U00B1> \x8F |0
+<U00B2> \xEA |0
+<U00B3> \xFA |0
+<U00B4> \xE0 |0
+<U00B5> \xA0 |0
+<U00B6> \xB6 |0
+<U00B7> \xB3 |0
+<U00B8> \x9D |0
+<U00B9> \xDA |0
+<U00BA> \x9B |0
+<U00BB> \x8B |0
+<U00BC> \xB7 |0
+<U00BD> \xB8 |0
+<U00BE> \xB9 |0
+<U00BF> \xAB |0
+<U00C0> \x64 |0
+<U00C1> \x65 |0
+<U00C2> \x62 |0
+<U00C3> \x66 |0
+<U00C4> \x63 |0
+<U00C5> \x67 |0
+<U00C6> \x5A |0
+<U00C7> \x68 |0
+<U00C8> \x74 |0
+<U00C9> \x71 |0
+<U00CA> \x72 |0
+<U00CB> \x73 |0
+<U00CC> \x78 |0
+<U00CD> \x75 |0
+<U00CE> \x76 |0
+<U00CF> \x77 |0
+<U00D0> \x7C |0
+<U00D1> \x69 |0
+<U00D2> \xED |0
+<U00D3> \xEE |0
+<U00D4> \xEB |0
+<U00D5> \xEF |0
+<U00D6> \x5F |0
+<U00D7> \xBF |0
+<U00D8> \x80 |0
+<U00D9> \xFD |0
+<U00DA> \xFE |0
+<U00DB> \xFB |0
+<U00DC> \xFC |0
+<U00DD> \xAD |0
+<U00DE> \x4A |0
+<U00DF> \x59 |0
+<U00E0> \x44 |0
+<U00E1> \x45 |0
+<U00E2> \x42 |0
+<U00E3> \x46 |0
+<U00E4> \x43 |0
+<U00E5> \x47 |0
+<U00E6> \xD0 |0
+<U00E7> \x48 |0
+<U00E8> \x54 |0
+<U00E9> \x51 |0
+<U00EA> \x52 |0
+<U00EB> \x53 |0
+<U00EC> \x58 |0
+<U00ED> \x55 |0
+<U00EE> \x56 |0
+<U00EF> \x57 |0
+<U00F0> \x79 |0
+<U00F1> \x49 |0
+<U00F2> \xCD |0
+<U00F3> \xCE |0
+<U00F4> \xCB |0
+<U00F5> \xCF |0
+<U00F6> \xA1 |0
+<U00F7> \xE1 |0
+<U00F8> \x70 |0
+<U00F9> \xDD |0
+<U00FA> \xDE |0
+<U00FB> \xDB |0
+<U00FC> \xDC |0
+<U00FD> \x8D |0
+<U00FE> \xC0 |0
+<U00FF> \xDF |0
+<U0110> \x7C |1
+<U203E> \xBC |1
+<UFF01> \x4F |1
+<UFF02> \x7F |1
+<UFF03> \x7B |1
+<UFF04> \x5B |1
+<UFF05> \x6C |1
+<UFF06> \x50 |1
+<UFF07> \x7D |1
+<UFF08> \x4D |1
+<UFF09> \x5D |1
+<UFF0A> \x5C |1
+<UFF0B> \x4E |1
+<UFF0C> \x6B |1
+<UFF0D> \x60 |1
+<UFF0E> \x4B |1
+<UFF0F> \x61 |1
+<UFF10> \xF0 |1
+<UFF11> \xF1 |1
+<UFF12> \xF2 |1
+<UFF13> \xF3 |1
+<UFF14> \xF4 |1
+<UFF15> \xF5 |1
+<UFF16> \xF6 |1
+<UFF17> \xF7 |1
+<UFF18> \xF8 |1
+<UFF19> \xF9 |1
+<UFF1A> \x7A |1
+<UFF1B> \x5E |1
+<UFF1C> \x4C |1
+<UFF1D> \x7E |1
+<UFF1E> \x6E |1
+<UFF1F> \x6F |1
+<UFF20> \xAC |1
+<UFF21> \xC1 |1
+<UFF22> \xC2 |1
+<UFF23> \xC3 |1
+<UFF24> \xC4 |1
+<UFF25> \xC5 |1
+<UFF26> \xC6 |1
+<UFF27> \xC7 |1
+<UFF28> \xC8 |1
+<UFF29> \xC9 |1
+<UFF2A> \xD1 |1
+<UFF2B> \xD2 |1
+<UFF2C> \xD3 |1
+<UFF2D> \xD4 |1
+<UFF2E> \xD5 |1
+<UFF2F> \xD6 |1
+<UFF30> \xD7 |1
+<UFF31> \xD8 |1
+<UFF32> \xD9 |1
+<UFF33> \xE2 |1
+<UFF34> \xE3 |1
+<UFF35> \xE4 |1
+<UFF36> \xE5 |1
+<UFF37> \xE6 |1
+<UFF38> \xE7 |1
+<UFF39> \xE8 |1
+<UFF3A> \xE9 |1
+<UFF3B> \xAE |1
+<UFF3C> \xBE |1
+<UFF3D> \x9E |1
+<UFF3E> \xEC |1
+<UFF3F> \x6D |1
+<UFF40> \x8C |1
+<UFF41> \x81 |1
+<UFF42> \x82 |1
+<UFF43> \x83 |1
+<UFF44> \x84 |1
+<UFF45> \x85 |1
+<UFF46> \x86 |1
+<UFF47> \x87 |1
+<UFF48> \x88 |1
+<UFF49> \x89 |1
+<UFF4A> \x91 |1
+<UFF4B> \x92 |1
+<UFF4C> \x93 |1
+<UFF4D> \x94 |1
+<UFF4E> \x95 |1
+<UFF4F> \x96 |1
+<UFF50> \x97 |1
+<UFF51> \x98 |1
+<UFF52> \x99 |1
+<UFF53> \xA2 |1
+<UFF54> \xA3 |1
+<UFF55> \xA4 |1
+<UFF56> \xA5 |1
+<UFF57> \xA6 |1
+<UFF58> \xA7 |1
+<UFF59> \xA8 |1
+<UFF5A> \xA9 |1
+<UFF5B> \x8E |1
+<UFF5C> \xBB |1
+<UFF5D> \x9C |1
+<UFF5E> \xCC |1
+END CHARMAP
diff --git a/mcs/class/I18N/Rare/ibm-875.ucm b/mcs/class/I18N/Rare/ibm-875.ucm
new file mode 100644
index 00000000000..b9ec20a5a59
--- /dev/null
+++ b/mcs/class/I18N/Rare/ibm-875.ucm
@@ -0,0 +1,367 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1995-2001, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created by rptp2ucm (compiled on Feb 23 2001)
+# from source files 34B0036B.RPMAP100 and 036B34B0.TPMAP100
+#
+<code_set_name> "ibm-875_P100-2000"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x3F
+<icu:charsetFamily> "EBCDIC"
+<icu:alias> "ibm-875_STD"
+
+CHARMAP
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x37 |0
+<U0005> \x2D |0
+<U0006> \x2E |0
+<U0007> \x2F |0
+<U0008> \x16 |0
+<U0009> \x05 |0
+<U000A> \x25 |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x3C |0
+<U0015> \x3D |0
+<U0016> \x32 |0
+<U0017> \x26 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x3F |0
+<U001B> \x27 |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x40 |0
+<U0021> \x4F |0
+<U0022> \x7F |0
+<U0023> \x7B |0
+<U0024> \x5B |0
+<U0025> \x6C |0
+<U0026> \x50 |0
+<U0027> \x7D |0
+<U0028> \x4D |0
+<U0029> \x5D |0
+<U002A> \x5C |0
+<U002B> \x4E |0
+<U002C> \x6B |0
+<U002D> \x60 |0
+<U002E> \x4B |0
+<U002F> \x61 |0
+<U0030> \xF0 |0
+<U0031> \xF1 |0
+<U0032> \xF2 |0
+<U0033> \xF3 |0
+<U0034> \xF4 |0
+<U0035> \xF5 |0
+<U0036> \xF6 |0
+<U0037> \xF7 |0
+<U0038> \xF8 |0
+<U0039> \xF9 |0
+<U003A> \x7A |0
+<U003B> \x5E |0
+<U003C> \x4C |0
+<U003D> \x7E |0
+<U003E> \x6E |0
+<U003F> \x6F |0
+<U0040> \x7C |0
+<U0041> \xC1 |0
+<U0042> \xC2 |0
+<U0043> \xC3 |0
+<U0044> \xC4 |0
+<U0045> \xC5 |0
+<U0046> \xC6 |0
+<U0047> \xC7 |0
+<U0048> \xC8 |0
+<U0049> \xC9 |0
+<U004A> \xD1 |0
+<U004B> \xD2 |0
+<U004C> \xD3 |0
+<U004D> \xD4 |0
+<U004E> \xD5 |0
+<U004F> \xD6 |0
+<U0050> \xD7 |0
+<U0051> \xD8 |0
+<U0052> \xD9 |0
+<U0053> \xE2 |0
+<U0054> \xE3 |0
+<U0055> \xE4 |0
+<U0056> \xE5 |0
+<U0057> \xE6 |0
+<U0058> \xE7 |0
+<U0059> \xE8 |0
+<U005A> \xE9 |0
+<U005B> \x4A |0
+<U005C> \xE0 |0
+<U005D> \x5A |0
+<U005E> \x5F |0
+<U005F> \x6D |0
+<U0060> \x79 |0
+<U0061> \x81 |0
+<U0062> \x82 |0
+<U0063> \x83 |0
+<U0064> \x84 |0
+<U0065> \x85 |0
+<U0066> \x86 |0
+<U0067> \x87 |0
+<U0068> \x88 |0
+<U0069> \x89 |0
+<U006A> \x91 |0
+<U006B> \x92 |0
+<U006C> \x93 |0
+<U006D> \x94 |0
+<U006E> \x95 |0
+<U006F> \x96 |0
+<U0070> \x97 |0
+<U0071> \x98 |0
+<U0072> \x99 |0
+<U0073> \xA2 |0
+<U0074> \xA3 |0
+<U0075> \xA4 |0
+<U0076> \xA5 |0
+<U0077> \xA6 |0
+<U0078> \xA7 |0
+<U0079> \xA8 |0
+<U007A> \xA9 |0
+<U007B> \xC0 |0
+<U007C> \x6A |0
+<U007D> \xD0 |0
+<U007E> \xA1 |0
+<U007F> \x07 |0
+<U0080> \x20 |0
+<U0081> \x21 |0
+<U0082> \x22 |0
+<U0083> \x23 |0
+<U0084> \x24 |0
+<U0085> \x15 |0
+<U0086> \x06 |0
+<U0087> \x17 |0
+<U0088> \x28 |0
+<U0089> \x29 |0
+<U008A> \x2A |0
+<U008B> \x2B |0
+<U008C> \x2C |0
+<U008D> \x09 |0
+<U008E> \x0A |0
+<U008F> \x1B |0
+<U0090> \x30 |0
+<U0091> \x31 |0
+<U0092> \x1A |0
+<U0093> \x33 |0
+<U0094> \x34 |0
+<U0095> \x35 |0
+<U0096> \x36 |0
+<U0097> \x08 |0
+<U0098> \x38 |0
+<U0099> \x39 |0
+<U009A> \x3A |0
+<U009B> \x3B |0
+<U009C> \x04 |0
+<U009D> \x14 |0
+<U009E> \x3E |0
+<U009F> \xFF |0
+<U00A0> \x74 |0
+<U00A3> \xB0 |0
+<U00A6> \xDF |0
+<U00A7> \xEB |0
+<U00A8> \x70 |0
+<U00A9> \xFB |0
+<U00AB> \xEE |0
+<U00AC> \xEF |0
+<U00AD> \xCA |0
+<U00B0> \x90 |0
+<U00B1> \xDA |0
+<U00B2> \xEA |0
+<U00B3> \xFA |0
+<U00B4> \xA0 |0
+<U00B7> \xDD |1
+<U00BB> \xFE |0
+<U00BD> \xDB |0
+<U0385> \x80 |0
+<U0386> \x71 |0
+<U0387> \xDD |0
+<U0388> \x72 |0
+<U0389> \x73 |0
+<U038A> \x75 |0
+<U038C> \x76 |0
+<U038E> \x77 |0
+<U038F> \x78 |0
+<U0390> \xCC |0
+<U0391> \x41 |0
+<U0392> \x42 |0
+<U0393> \x43 |0
+<U0394> \x44 |0
+<U0395> \x45 |0
+<U0396> \x46 |0
+<U0397> \x47 |0
+<U0398> \x48 |0
+<U0399> \x49 |0
+<U039A> \x51 |0
+<U039B> \x52 |0
+<U039C> \x53 |0
+<U039D> \x54 |0
+<U039E> \x55 |0
+<U039F> \x56 |0
+<U03A0> \x57 |0
+<U03A1> \x58 |0
+<U03A3> \x59 |0
+<U03A4> \x62 |0
+<U03A5> \x63 |0
+<U03A6> \x64 |0
+<U03A7> \x65 |0
+<U03A8> \x66 |0
+<U03A9> \x67 |0
+<U03AA> \x68 |0
+<U03AB> \x69 |0
+<U03AC> \xB1 |0
+<U03AD> \xB2 |0
+<U03AE> \xB3 |0
+<U03AF> \xB5 |0
+<U03B0> \xCD |0
+<U03B1> \x8A |0
+<U03B2> \x8B |0
+<U03B3> \x8C |0
+<U03B4> \x8D |0
+<U03B5> \x8E |0
+<U03B6> \x8F |0
+<U03B7> \x9A |0
+<U03B8> \x9B |0
+<U03B9> \x9C |0
+<U03BA> \x9D |0
+<U03BB> \x9E |0
+<U03BC> \x9F |0
+<U03BD> \xAA |0
+<U03BE> \xAB |0
+<U03BF> \xAC |0
+<U03C0> \xAD |0
+<U03C1> \xAE |0
+<U03C2> \xBA |0
+<U03C3> \xAF |0
+<U03C4> \xBB |0
+<U03C5> \xBC |0
+<U03C6> \xBD |0
+<U03C7> \xBE |0
+<U03C8> \xBF |0
+<U03C9> \xCB |0
+<U03CA> \xB4 |0
+<U03CB> \xB8 |0
+<U03CC> \xB6 |0
+<U03CD> \xB7 |0
+<U03CE> \xB9 |0
+<U03D5> \xBD |1
+<U2015> \xCF |0
+<U2018> \xCE |0
+<U2019> \xDE |0
+<UFF01> \x4F |1
+<UFF02> \x7F |1
+<UFF03> \x7B |1
+<UFF04> \x5B |1
+<UFF05> \x6C |1
+<UFF06> \x50 |1
+<UFF07> \x7D |1
+<UFF08> \x4D |1
+<UFF09> \x5D |1
+<UFF0A> \x5C |1
+<UFF0B> \x4E |1
+<UFF0C> \x6B |1
+<UFF0D> \x60 |1
+<UFF0E> \x4B |1
+<UFF0F> \x61 |1
+<UFF10> \xF0 |1
+<UFF11> \xF1 |1
+<UFF12> \xF2 |1
+<UFF13> \xF3 |1
+<UFF14> \xF4 |1
+<UFF15> \xF5 |1
+<UFF16> \xF6 |1
+<UFF17> \xF7 |1
+<UFF18> \xF8 |1
+<UFF19> \xF9 |1
+<UFF1A> \x7A |1
+<UFF1B> \x5E |1
+<UFF1C> \x4C |1
+<UFF1D> \x7E |1
+<UFF1E> \x6E |1
+<UFF1F> \x6F |1
+<UFF20> \x7C |1
+<UFF21> \xC1 |1
+<UFF22> \xC2 |1
+<UFF23> \xC3 |1
+<UFF24> \xC4 |1
+<UFF25> \xC5 |1
+<UFF26> \xC6 |1
+<UFF27> \xC7 |1
+<UFF28> \xC8 |1
+<UFF29> \xC9 |1
+<UFF2A> \xD1 |1
+<UFF2B> \xD2 |1
+<UFF2C> \xD3 |1
+<UFF2D> \xD4 |1
+<UFF2E> \xD5 |1
+<UFF2F> \xD6 |1
+<UFF30> \xD7 |1
+<UFF31> \xD8 |1
+<UFF32> \xD9 |1
+<UFF33> \xE2 |1
+<UFF34> \xE3 |1
+<UFF35> \xE4 |1
+<UFF36> \xE5 |1
+<UFF37> \xE6 |1
+<UFF38> \xE7 |1
+<UFF39> \xE8 |1
+<UFF3A> \xE9 |1
+<UFF3B> \x4A |1
+<UFF3C> \xE0 |1
+<UFF3D> \x5A |1
+<UFF3E> \x5F |1
+<UFF3F> \x6D |1
+<UFF40> \x79 |1
+<UFF41> \x81 |1
+<UFF42> \x82 |1
+<UFF43> \x83 |1
+<UFF44> \x84 |1
+<UFF45> \x85 |1
+<UFF46> \x86 |1
+<UFF47> \x87 |1
+<UFF48> \x88 |1
+<UFF49> \x89 |1
+<UFF4A> \x91 |1
+<UFF4B> \x92 |1
+<UFF4C> \x93 |1
+<UFF4D> \x94 |1
+<UFF4E> \x95 |1
+<UFF4F> \x96 |1
+<UFF50> \x97 |1
+<UFF51> \x98 |1
+<UFF52> \x99 |1
+<UFF53> \xA2 |1
+<UFF54> \xA3 |1
+<UFF55> \xA4 |1
+<UFF56> \xA5 |1
+<UFF57> \xA6 |1
+<UFF58> \xA7 |1
+<UFF59> \xA8 |1
+<UFF5A> \xA9 |1
+<UFF5B> \xC0 |1
+<UFF5C> \x6A |1
+<UFF5D> \xD0 |1
+<UFF5E> \xA1 |1
+END CHARMAP
diff --git a/mcs/class/I18N/Rare/list.unix b/mcs/class/I18N/Rare/list.unix
new file mode 100755
index 00000000000..90b9ffa89ca
--- /dev/null
+++ b/mcs/class/I18N/Rare/list.unix
@@ -0,0 +1,37 @@
+CP866.cs
+CP1026.cs
+CP869.cs
+CP870.cs
+CP875.cs
+CP1047.cs
+CP1140.cs
+CP1141.cs
+CP1142.cs
+CP1143.cs
+CP1144.cs
+CP1145.cs
+CP1146.cs
+CP1147.cs
+CP1148.cs
+CP1149.cs
+CP20273.cs
+CP20277.cs
+CP20278.cs
+CP20280.cs
+CP20284.cs
+CP20285.cs
+CP20290.cs
+CP20297.cs
+CP20420.cs
+CP20424.cs
+CP20871.cs
+CP21025.cs
+CP37.cs
+CP500.cs
+CP708.cs
+CP852.cs
+CP855.cs
+CP857.cs
+CP858.cs
+CP862.cs
+CP864.cs
diff --git a/mcs/class/I18N/Rare/makefile.gnu b/mcs/class/I18N/Rare/makefile.gnu
new file mode 100755
index 00000000000..15aa6124dd3
--- /dev/null
+++ b/mcs/class/I18N/Rare/makefile.gnu
@@ -0,0 +1,13 @@
+topdir = ../../..
+
+LIBRARY = $(topdir)/class/lib/I18N.Rare.dll
+
+LIB_LIST = list.unix
+LIB_FLAGS = -r corlib -r mscorlib -r I18N
+
+SOURCES_INCLUDE=*.cs
+SOURCES_EXCLUDE=
+
+export MONO_PATH_PREFIX = $(topdir)/class/lib:
+
+include $(topdir)/class/library.make
diff --git a/mcs/class/I18N/West/.cvsignore b/mcs/class/I18N/West/.cvsignore
new file mode 100644
index 00000000000..0c2ee6906fa
--- /dev/null
+++ b/mcs/class/I18N/West/.cvsignore
@@ -0,0 +1,4 @@
+list
+.makefrag
+.response
+library-deps.stamp
diff --git a/mcs/class/I18N/West/CP10000.cs b/mcs/class/I18N/West/CP10000.cs
new file mode 100644
index 00000000000..3cd1c00b203
--- /dev/null
+++ b/mcs/class/I18N/West/CP10000.cs
@@ -0,0 +1,405 @@
+/*
+ * CP10000.cs - Western European (Mac) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-1275.ucm".
+
+namespace I18N.West
+{
+
+using System;
+using I18N.Common;
+
+public class CP10000 : ByteEncoding
+{
+ public CP10000()
+ : base(10000, ToChars, "Western European (Mac)",
+ "macintosh", "macintosh", "macintosh",
+ false, false, false, false, 1252)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
+ '\u0006', '\u0007', '\u0008', '\u0009', '\u000A', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
+ '\u0018', '\u0019', '\u001A', '\u001B', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
+ '\u0024', '\u0025', '\u0026', '\u0027', '\u0028', '\u0029',
+ '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
+ '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
+ '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
+ '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
+ '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
+ '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
+ '\u005A', '\u005B', '\u005C', '\u005D', '\u005E', '\u005F',
+ '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
+ '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
+ '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
+ '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
+ '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
+ '\u007E', '\u007F', '\u00C4', '\u00C5', '\u00C7', '\u00C9',
+ '\u00D1', '\u00D6', '\u00DC', '\u00E1', '\u00E0', '\u00E2',
+ '\u00E4', '\u00E3', '\u00E5', '\u00E7', '\u00E9', '\u00E8',
+ '\u00EA', '\u00EB', '\u00ED', '\u00EC', '\u00EE', '\u00EF',
+ '\u00F1', '\u00F3', '\u00F2', '\u00F4', '\u00F6', '\u00F5',
+ '\u00FA', '\u00F9', '\u00FB', '\u00FC', '\u2020', '\u00B0',
+ '\u00A2', '\u00A3', '\u00A7', '\u2022', '\u00B6', '\u00DF',
+ '\u00AE', '\u00A9', '\u2122', '\u00B4', '\u00A8', '\u2260',
+ '\u00C6', '\u00D8', '\u221E', '\u00B1', '\u2264', '\u2265',
+ '\u00A5', '\u00B5', '\u2202', '\u2211', '\u220F', '\u03C0',
+ '\u222B', '\u00AA', '\u00BA', '\u2126', '\u00E6', '\u00F8',
+ '\u00BF', '\u00A1', '\u00AC', '\u221A', '\u0192', '\u2248',
+ '\u2206', '\u00AB', '\u00BB', '\u2026', '\u00A0', '\u00C0',
+ '\u00C3', '\u00D5', '\u0152', '\u0153', '\u2013', '\u2014',
+ '\u201C', '\u201D', '\u2018', '\u2019', '\u00F7', '\u25CA',
+ '\u00FF', '\u0178', '\u2044', '\u00A4', '\u2039', '\u203A',
+ '\uFB01', '\uFB02', '\u2021', '\u00B7', '\u201A', '\u201E',
+ '\u2030', '\u00C2', '\u00CA', '\u00C1', '\u00CB', '\u00C8',
+ '\u00CD', '\u00CE', '\u00CF', '\u00CC', '\u00D3', '\u00D4',
+ '\uF8FF', '\u00D2', '\u00DA', '\u00DB', '\u00D9', '\u0131',
+ '\u02C6', '\u02DC', '\u00AF', '\u02D8', '\u02D9', '\u02DA',
+ '\u00B8', '\u02DD', '\u02DB', '\u02C7',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 128) switch(ch)
+ {
+ case 0x00A2:
+ case 0x00A3:
+ case 0x00A9:
+ case 0x00B1:
+ case 0x00B5:
+ break;
+ case 0x00A0: ch = 0xCA; break;
+ case 0x00A1: ch = 0xC1; break;
+ case 0x00A4: ch = 0xDB; break;
+ case 0x00A5: ch = 0xB4; break;
+ case 0x00A7: ch = 0xA4; break;
+ case 0x00A8: ch = 0xAC; break;
+ case 0x00AA: ch = 0xBB; break;
+ case 0x00AB: ch = 0xC7; break;
+ case 0x00AC: ch = 0xC2; break;
+ case 0x00AE: ch = 0xA8; break;
+ case 0x00AF: ch = 0xF8; break;
+ case 0x00B0: ch = 0xA1; break;
+ case 0x00B4: ch = 0xAB; break;
+ case 0x00B6: ch = 0xA6; break;
+ case 0x00B7: ch = 0xE1; break;
+ case 0x00B8: ch = 0xFC; break;
+ case 0x00BA: ch = 0xBC; break;
+ case 0x00BB: ch = 0xC8; break;
+ case 0x00BF: ch = 0xC0; break;
+ case 0x00C0: ch = 0xCB; break;
+ case 0x00C1: ch = 0xE7; break;
+ case 0x00C2: ch = 0xE5; break;
+ case 0x00C3: ch = 0xCC; break;
+ case 0x00C4: ch = 0x80; break;
+ case 0x00C5: ch = 0x81; break;
+ case 0x00C6: ch = 0xAE; break;
+ case 0x00C7: ch = 0x82; break;
+ case 0x00C8: ch = 0xE9; break;
+ case 0x00C9: ch = 0x83; break;
+ case 0x00CA: ch = 0xE6; break;
+ case 0x00CB: ch = 0xE8; break;
+ case 0x00CC: ch = 0xED; break;
+ case 0x00CD: ch = 0xEA; break;
+ case 0x00CE: ch = 0xEB; break;
+ case 0x00CF: ch = 0xEC; break;
+ case 0x00D1: ch = 0x84; break;
+ case 0x00D2: ch = 0xF1; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEF; break;
+ case 0x00D5: ch = 0xCD; break;
+ case 0x00D6: ch = 0x85; break;
+ case 0x00D8: ch = 0xAF; break;
+ case 0x00D9: ch = 0xF4; break;
+ case 0x00DA: ch = 0xF2; break;
+ case 0x00DB: ch = 0xF3; break;
+ case 0x00DC: ch = 0x86; break;
+ case 0x00DF: ch = 0xA7; break;
+ case 0x00E0: ch = 0x88; break;
+ case 0x00E1: ch = 0x87; break;
+ case 0x00E2: ch = 0x89; break;
+ case 0x00E3: ch = 0x8B; break;
+ case 0x00E4: ch = 0x8A; break;
+ case 0x00E5: ch = 0x8C; break;
+ case 0x00E6: ch = 0xBE; break;
+ case 0x00E7: ch = 0x8D; break;
+ case 0x00E8: ch = 0x8F; break;
+ case 0x00E9: ch = 0x8E; break;
+ case 0x00EA: ch = 0x90; break;
+ case 0x00EB: ch = 0x91; break;
+ case 0x00EC: ch = 0x93; break;
+ case 0x00ED: ch = 0x92; break;
+ case 0x00EE: ch = 0x94; break;
+ case 0x00EF: ch = 0x95; break;
+ case 0x00F1: ch = 0x96; break;
+ case 0x00F2: ch = 0x98; break;
+ case 0x00F3: ch = 0x97; break;
+ case 0x00F4: ch = 0x99; break;
+ case 0x00F5: ch = 0x9B; break;
+ case 0x00F6: ch = 0x9A; break;
+ case 0x00F7: ch = 0xD6; break;
+ case 0x00F8: ch = 0xBF; break;
+ case 0x00F9: ch = 0x9D; break;
+ case 0x00FA: ch = 0x9C; break;
+ case 0x00FB: ch = 0x9E; break;
+ case 0x00FC: ch = 0x9F; break;
+ case 0x00FF: ch = 0xD8; break;
+ case 0x0131: ch = 0xF5; break;
+ case 0x0152: ch = 0xCE; break;
+ case 0x0153: ch = 0xCF; break;
+ case 0x0178: ch = 0xD9; break;
+ case 0x0192: ch = 0xC4; break;
+ case 0x02C6: ch = 0xF6; break;
+ case 0x02C7: ch = 0xFF; break;
+ case 0x02D8: ch = 0xF9; break;
+ case 0x02D9: ch = 0xFA; break;
+ case 0x02DA: ch = 0xFB; break;
+ case 0x02DB: ch = 0xFE; break;
+ case 0x02DC: ch = 0xF7; break;
+ case 0x02DD: ch = 0xFD; break;
+ case 0x03C0: ch = 0xB9; break;
+ case 0x2013: ch = 0xD0; break;
+ case 0x2014: ch = 0xD1; break;
+ case 0x2018: ch = 0xD4; break;
+ case 0x2019: ch = 0xD5; break;
+ case 0x201A: ch = 0xE2; break;
+ case 0x201C: ch = 0xD2; break;
+ case 0x201D: ch = 0xD3; break;
+ case 0x201E: ch = 0xE3; break;
+ case 0x2020: ch = 0xA0; break;
+ case 0x2021: ch = 0xE0; break;
+ case 0x2022: ch = 0xA5; break;
+ case 0x2026: ch = 0xC9; break;
+ case 0x2030: ch = 0xE4; break;
+ case 0x2039: ch = 0xDC; break;
+ case 0x203A: ch = 0xDD; break;
+ case 0x2044: ch = 0xDA; break;
+ case 0x2122: ch = 0xAA; break;
+ case 0x2126: ch = 0xBD; break;
+ case 0x2202: ch = 0xB6; break;
+ case 0x2206: ch = 0xC6; break;
+ case 0x220F: ch = 0xB8; break;
+ case 0x2211: ch = 0xB7; break;
+ case 0x221A: ch = 0xC3; break;
+ case 0x221E: ch = 0xB0; break;
+ case 0x222B: ch = 0xBA; break;
+ case 0x2248: ch = 0xC5; break;
+ case 0x2260: ch = 0xAD; break;
+ case 0x2264: ch = 0xB2; break;
+ case 0x2265: ch = 0xB3; break;
+ case 0x2318: ch = 0x11; break;
+ case 0x25CA: ch = 0xD7; break;
+ case 0x2666: ch = 0x13; break;
+ case 0x2713: ch = 0x12; break;
+ case 0xF8FF: ch = 0xF0; break;
+ case 0xFB01: ch = 0xDE; break;
+ case 0xFB02: ch = 0xDF; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 128) switch(ch)
+ {
+ case 0x00A2:
+ case 0x00A3:
+ case 0x00A9:
+ case 0x00B1:
+ case 0x00B5:
+ break;
+ case 0x00A0: ch = 0xCA; break;
+ case 0x00A1: ch = 0xC1; break;
+ case 0x00A4: ch = 0xDB; break;
+ case 0x00A5: ch = 0xB4; break;
+ case 0x00A7: ch = 0xA4; break;
+ case 0x00A8: ch = 0xAC; break;
+ case 0x00AA: ch = 0xBB; break;
+ case 0x00AB: ch = 0xC7; break;
+ case 0x00AC: ch = 0xC2; break;
+ case 0x00AE: ch = 0xA8; break;
+ case 0x00AF: ch = 0xF8; break;
+ case 0x00B0: ch = 0xA1; break;
+ case 0x00B4: ch = 0xAB; break;
+ case 0x00B6: ch = 0xA6; break;
+ case 0x00B7: ch = 0xE1; break;
+ case 0x00B8: ch = 0xFC; break;
+ case 0x00BA: ch = 0xBC; break;
+ case 0x00BB: ch = 0xC8; break;
+ case 0x00BF: ch = 0xC0; break;
+ case 0x00C0: ch = 0xCB; break;
+ case 0x00C1: ch = 0xE7; break;
+ case 0x00C2: ch = 0xE5; break;
+ case 0x00C3: ch = 0xCC; break;
+ case 0x00C4: ch = 0x80; break;
+ case 0x00C5: ch = 0x81; break;
+ case 0x00C6: ch = 0xAE; break;
+ case 0x00C7: ch = 0x82; break;
+ case 0x00C8: ch = 0xE9; break;
+ case 0x00C9: ch = 0x83; break;
+ case 0x00CA: ch = 0xE6; break;
+ case 0x00CB: ch = 0xE8; break;
+ case 0x00CC: ch = 0xED; break;
+ case 0x00CD: ch = 0xEA; break;
+ case 0x00CE: ch = 0xEB; break;
+ case 0x00CF: ch = 0xEC; break;
+ case 0x00D1: ch = 0x84; break;
+ case 0x00D2: ch = 0xF1; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEF; break;
+ case 0x00D5: ch = 0xCD; break;
+ case 0x00D6: ch = 0x85; break;
+ case 0x00D8: ch = 0xAF; break;
+ case 0x00D9: ch = 0xF4; break;
+ case 0x00DA: ch = 0xF2; break;
+ case 0x00DB: ch = 0xF3; break;
+ case 0x00DC: ch = 0x86; break;
+ case 0x00DF: ch = 0xA7; break;
+ case 0x00E0: ch = 0x88; break;
+ case 0x00E1: ch = 0x87; break;
+ case 0x00E2: ch = 0x89; break;
+ case 0x00E3: ch = 0x8B; break;
+ case 0x00E4: ch = 0x8A; break;
+ case 0x00E5: ch = 0x8C; break;
+ case 0x00E6: ch = 0xBE; break;
+ case 0x00E7: ch = 0x8D; break;
+ case 0x00E8: ch = 0x8F; break;
+ case 0x00E9: ch = 0x8E; break;
+ case 0x00EA: ch = 0x90; break;
+ case 0x00EB: ch = 0x91; break;
+ case 0x00EC: ch = 0x93; break;
+ case 0x00ED: ch = 0x92; break;
+ case 0x00EE: ch = 0x94; break;
+ case 0x00EF: ch = 0x95; break;
+ case 0x00F1: ch = 0x96; break;
+ case 0x00F2: ch = 0x98; break;
+ case 0x00F3: ch = 0x97; break;
+ case 0x00F4: ch = 0x99; break;
+ case 0x00F5: ch = 0x9B; break;
+ case 0x00F6: ch = 0x9A; break;
+ case 0x00F7: ch = 0xD6; break;
+ case 0x00F8: ch = 0xBF; break;
+ case 0x00F9: ch = 0x9D; break;
+ case 0x00FA: ch = 0x9C; break;
+ case 0x00FB: ch = 0x9E; break;
+ case 0x00FC: ch = 0x9F; break;
+ case 0x00FF: ch = 0xD8; break;
+ case 0x0131: ch = 0xF5; break;
+ case 0x0152: ch = 0xCE; break;
+ case 0x0153: ch = 0xCF; break;
+ case 0x0178: ch = 0xD9; break;
+ case 0x0192: ch = 0xC4; break;
+ case 0x02C6: ch = 0xF6; break;
+ case 0x02C7: ch = 0xFF; break;
+ case 0x02D8: ch = 0xF9; break;
+ case 0x02D9: ch = 0xFA; break;
+ case 0x02DA: ch = 0xFB; break;
+ case 0x02DB: ch = 0xFE; break;
+ case 0x02DC: ch = 0xF7; break;
+ case 0x02DD: ch = 0xFD; break;
+ case 0x03C0: ch = 0xB9; break;
+ case 0x2013: ch = 0xD0; break;
+ case 0x2014: ch = 0xD1; break;
+ case 0x2018: ch = 0xD4; break;
+ case 0x2019: ch = 0xD5; break;
+ case 0x201A: ch = 0xE2; break;
+ case 0x201C: ch = 0xD2; break;
+ case 0x201D: ch = 0xD3; break;
+ case 0x201E: ch = 0xE3; break;
+ case 0x2020: ch = 0xA0; break;
+ case 0x2021: ch = 0xE0; break;
+ case 0x2022: ch = 0xA5; break;
+ case 0x2026: ch = 0xC9; break;
+ case 0x2030: ch = 0xE4; break;
+ case 0x2039: ch = 0xDC; break;
+ case 0x203A: ch = 0xDD; break;
+ case 0x2044: ch = 0xDA; break;
+ case 0x2122: ch = 0xAA; break;
+ case 0x2126: ch = 0xBD; break;
+ case 0x2202: ch = 0xB6; break;
+ case 0x2206: ch = 0xC6; break;
+ case 0x220F: ch = 0xB8; break;
+ case 0x2211: ch = 0xB7; break;
+ case 0x221A: ch = 0xC3; break;
+ case 0x221E: ch = 0xB0; break;
+ case 0x222B: ch = 0xBA; break;
+ case 0x2248: ch = 0xC5; break;
+ case 0x2260: ch = 0xAD; break;
+ case 0x2264: ch = 0xB2; break;
+ case 0x2265: ch = 0xB3; break;
+ case 0x2318: ch = 0x11; break;
+ case 0x25CA: ch = 0xD7; break;
+ case 0x2666: ch = 0x13; break;
+ case 0x2713: ch = 0x12; break;
+ case 0xF8FF: ch = 0xF0; break;
+ case 0xFB01: ch = 0xDE; break;
+ case 0xFB02: ch = 0xDF; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP10000
+
+public class ENCmacintosh : CP10000
+{
+ public ENCmacintosh() : base() {}
+
+}; // class ENCmacintosh
+
+}; // namespace I18N.West
diff --git a/mcs/class/I18N/West/CP10079.cs b/mcs/class/I18N/West/CP10079.cs
new file mode 100644
index 00000000000..3c2d04e67d5
--- /dev/null
+++ b/mcs/class/I18N/West/CP10079.cs
@@ -0,0 +1,381 @@
+/*
+ * CP10079.cs - Icelandic (Mac) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "mac-is.ucm".
+
+namespace I18N.West
+{
+
+using System;
+using I18N.Common;
+
+public class CP10079 : ByteEncoding
+{
+ public CP10079()
+ : base(10079, ToChars, "Icelandic (Mac)",
+ "x-mac-icelandic", "x-mac-icelandic", "x-mac-icelandic",
+ false, false, false, false, 1252)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
+ '\u0006', '\u0007', '\u0008', '\u0009', '\u000A', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
+ '\u0018', '\u0019', '\u001A', '\u001B', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
+ '\u0024', '\u0025', '\u0026', '\u0027', '\u0028', '\u0029',
+ '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
+ '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
+ '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
+ '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
+ '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
+ '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
+ '\u005A', '\u005B', '\u005C', '\u005D', '\u005E', '\u005F',
+ '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
+ '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
+ '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
+ '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
+ '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
+ '\u007E', '\u007F', '\u00C4', '\u00C5', '\u00C7', '\u00C9',
+ '\u00D1', '\u00D6', '\u00DC', '\u00E1', '\u00E0', '\u00E2',
+ '\u00E4', '\u00E3', '\u00E5', '\u00E7', '\u00E9', '\u00E8',
+ '\u00EA', '\u00EB', '\u00ED', '\u00EC', '\u00EE', '\u00EF',
+ '\u00F1', '\u00F3', '\u00F2', '\u00F4', '\u00F6', '\u00F5',
+ '\u00FA', '\u00F9', '\u00FB', '\u00FC', '\u2020', '\u00B0',
+ '\u00A2', '\u00A3', '\u00A7', '\u2022', '\u00B6', '\u00DF',
+ '\u00AE', '\u00A9', '\u2122', '\u00B4', '\u00A8', '\u2260',
+ '\u00C6', '\u00D8', '\u221E', '\u00B1', '\u2264', '\u2265',
+ '\u00A5', '\u00B5', '\u2202', '\u2211', '\u220F', '\u03C0',
+ '\u222B', '\u00AA', '\u00BA', '\u03A9', '\u00E6', '\u00F8',
+ '\u00BF', '\u00A1', '\u00AC', '\u221A', '\u0192', '\u2248',
+ '\u0394', '\u00AB', '\u00BB', '\u2026', '\u00A0', '\u00C0',
+ '\u00C3', '\u00D5', '\u0152', '\u0153', '\u2014', '\u2013',
+ '\u201C', '\u201D', '\u2018', '\u2019', '\u00F7', '\u25C6',
+ '\u00FF', '\u0178', '\u2044', '\u00A4', '\u0110', '\u0111',
+ '\u00DE', '\u00FE', '\u2021', '\u00B7', '\u201A', '\u201E',
+ '\u2030', '\u00C2', '\u00CA', '\u00C1', '\u00CB', '\u00C8',
+ '\u00CD', '\u00CE', '\u00CF', '\u00CC', '\u00D3', '\u00D4',
+ '\uE01E', '\u00D2', '\u00DA', '\u00DB', '\u00D9', '\u0131',
+ '\u003F', '\u003F', '\u00AF', '\u02D8', '\u02D9', '\u02DA',
+ '\u00B8', '\u02DD', '\u02DB', '\u02C7',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 128) switch(ch)
+ {
+ case 0x00A2:
+ case 0x00A3:
+ case 0x00A9:
+ case 0x00B1:
+ case 0x00B5:
+ case 0x00DE:
+ break;
+ case 0x00A0: ch = 0xCA; break;
+ case 0x00A1: ch = 0xC1; break;
+ case 0x00A4: ch = 0xDB; break;
+ case 0x00A5: ch = 0xB4; break;
+ case 0x00A7: ch = 0xA4; break;
+ case 0x00A8: ch = 0xAC; break;
+ case 0x00AA: ch = 0xBB; break;
+ case 0x00AB: ch = 0xC7; break;
+ case 0x00AC: ch = 0xC2; break;
+ case 0x00AE: ch = 0xA8; break;
+ case 0x00AF: ch = 0xF8; break;
+ case 0x00B0: ch = 0xA1; break;
+ case 0x00B4: ch = 0xAB; break;
+ case 0x00B6: ch = 0xA6; break;
+ case 0x00B7: ch = 0xE1; break;
+ case 0x00B8: ch = 0xFC; break;
+ case 0x00BA: ch = 0xBC; break;
+ case 0x00BB: ch = 0xC8; break;
+ case 0x00BF: ch = 0xC0; break;
+ case 0x00C0: ch = 0xCB; break;
+ case 0x00C1: ch = 0xE7; break;
+ case 0x00C2: ch = 0xE5; break;
+ case 0x00C3: ch = 0xCC; break;
+ case 0x00C4: ch = 0x80; break;
+ case 0x00C5: ch = 0x81; break;
+ case 0x00C6: ch = 0xAE; break;
+ case 0x00C7: ch = 0x82; break;
+ case 0x00C8: ch = 0xE9; break;
+ case 0x00C9: ch = 0x83; break;
+ case 0x00CA: ch = 0xE6; break;
+ case 0x00CB: ch = 0xE8; break;
+ case 0x00CC: ch = 0xED; break;
+ case 0x00CD: ch = 0xEA; break;
+ case 0x00CE: ch = 0xEB; break;
+ case 0x00CF: ch = 0xEC; break;
+ case 0x00D1: ch = 0x84; break;
+ case 0x00D2: ch = 0xF1; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEF; break;
+ case 0x00D5: ch = 0xCD; break;
+ case 0x00D6: ch = 0x85; break;
+ case 0x00D8: ch = 0xAF; break;
+ case 0x00D9: ch = 0xF4; break;
+ case 0x00DA: ch = 0xF2; break;
+ case 0x00DB: ch = 0xF3; break;
+ case 0x00DC: ch = 0x86; break;
+ case 0x00DF: ch = 0xA7; break;
+ case 0x00E0: ch = 0x88; break;
+ case 0x00E1: ch = 0x87; break;
+ case 0x00E2: ch = 0x89; break;
+ case 0x00E3: ch = 0x8B; break;
+ case 0x00E4: ch = 0x8A; break;
+ case 0x00E5: ch = 0x8C; break;
+ case 0x00E6: ch = 0xBE; break;
+ case 0x00E7: ch = 0x8D; break;
+ case 0x00E8: ch = 0x8F; break;
+ case 0x00E9: ch = 0x8E; break;
+ case 0x00EA: ch = 0x90; break;
+ case 0x00EB: ch = 0x91; break;
+ case 0x00EC: ch = 0x93; break;
+ case 0x00ED: ch = 0x92; break;
+ case 0x00EE: ch = 0x94; break;
+ case 0x00EF: ch = 0x95; break;
+ case 0x00F1: ch = 0x96; break;
+ case 0x00F2: ch = 0x98; break;
+ case 0x00F3: ch = 0x97; break;
+ case 0x00F4: ch = 0x99; break;
+ case 0x00F5: ch = 0x9B; break;
+ case 0x00F6: ch = 0x9A; break;
+ case 0x00F7: ch = 0xD6; break;
+ case 0x00F8: ch = 0xBF; break;
+ case 0x00F9: ch = 0x9D; break;
+ case 0x00FA: ch = 0x9C; break;
+ case 0x00FB: ch = 0x9E; break;
+ case 0x00FC: ch = 0x9F; break;
+ case 0x00FE: ch = 0xDF; break;
+ case 0x00FF: ch = 0xD8; break;
+ case 0x0110: ch = 0xDC; break;
+ case 0x0111: ch = 0xDD; break;
+ case 0x0131: ch = 0xF5; break;
+ case 0x0152: ch = 0xCE; break;
+ case 0x0153: ch = 0xCF; break;
+ case 0x0178: ch = 0xD9; break;
+ case 0x0192: ch = 0xC4; break;
+ case 0x02C7: ch = 0xFF; break;
+ case 0x02D8: ch = 0xF9; break;
+ case 0x02D9: ch = 0xFA; break;
+ case 0x02DA: ch = 0xFB; break;
+ case 0x02DB: ch = 0xFE; break;
+ case 0x02DD: ch = 0xFD; break;
+ case 0x0394: ch = 0xC6; break;
+ case 0x03A9: ch = 0xBD; break;
+ case 0x03C0: ch = 0xB9; break;
+ case 0x2013: ch = 0xD1; break;
+ case 0x2014: ch = 0xD0; break;
+ case 0x2018: ch = 0xD4; break;
+ case 0x2019: ch = 0xD5; break;
+ case 0x201A: ch = 0xE2; break;
+ case 0x201C: ch = 0xD2; break;
+ case 0x201D: ch = 0xD3; break;
+ case 0x201E: ch = 0xE3; break;
+ case 0x2020: ch = 0xA0; break;
+ case 0x2021: ch = 0xE0; break;
+ case 0x2022: ch = 0xA5; break;
+ case 0x2026: ch = 0xC9; break;
+ case 0x2030: ch = 0xE4; break;
+ case 0x2044: ch = 0xDA; break;
+ case 0x2122: ch = 0xAA; break;
+ case 0x2202: ch = 0xB6; break;
+ case 0x220F: ch = 0xB8; break;
+ case 0x2211: ch = 0xB7; break;
+ case 0x221A: ch = 0xC3; break;
+ case 0x221E: ch = 0xB0; break;
+ case 0x222B: ch = 0xBA; break;
+ case 0x2248: ch = 0xC5; break;
+ case 0x2260: ch = 0xAD; break;
+ case 0x2264: ch = 0xB2; break;
+ case 0x2265: ch = 0xB3; break;
+ case 0x25C6: ch = 0xD7; break;
+ case 0xE01E: ch = 0xF0; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 128) switch(ch)
+ {
+ case 0x00A2:
+ case 0x00A3:
+ case 0x00A9:
+ case 0x00B1:
+ case 0x00B5:
+ case 0x00DE:
+ break;
+ case 0x00A0: ch = 0xCA; break;
+ case 0x00A1: ch = 0xC1; break;
+ case 0x00A4: ch = 0xDB; break;
+ case 0x00A5: ch = 0xB4; break;
+ case 0x00A7: ch = 0xA4; break;
+ case 0x00A8: ch = 0xAC; break;
+ case 0x00AA: ch = 0xBB; break;
+ case 0x00AB: ch = 0xC7; break;
+ case 0x00AC: ch = 0xC2; break;
+ case 0x00AE: ch = 0xA8; break;
+ case 0x00AF: ch = 0xF8; break;
+ case 0x00B0: ch = 0xA1; break;
+ case 0x00B4: ch = 0xAB; break;
+ case 0x00B6: ch = 0xA6; break;
+ case 0x00B7: ch = 0xE1; break;
+ case 0x00B8: ch = 0xFC; break;
+ case 0x00BA: ch = 0xBC; break;
+ case 0x00BB: ch = 0xC8; break;
+ case 0x00BF: ch = 0xC0; break;
+ case 0x00C0: ch = 0xCB; break;
+ case 0x00C1: ch = 0xE7; break;
+ case 0x00C2: ch = 0xE5; break;
+ case 0x00C3: ch = 0xCC; break;
+ case 0x00C4: ch = 0x80; break;
+ case 0x00C5: ch = 0x81; break;
+ case 0x00C6: ch = 0xAE; break;
+ case 0x00C7: ch = 0x82; break;
+ case 0x00C8: ch = 0xE9; break;
+ case 0x00C9: ch = 0x83; break;
+ case 0x00CA: ch = 0xE6; break;
+ case 0x00CB: ch = 0xE8; break;
+ case 0x00CC: ch = 0xED; break;
+ case 0x00CD: ch = 0xEA; break;
+ case 0x00CE: ch = 0xEB; break;
+ case 0x00CF: ch = 0xEC; break;
+ case 0x00D1: ch = 0x84; break;
+ case 0x00D2: ch = 0xF1; break;
+ case 0x00D3: ch = 0xEE; break;
+ case 0x00D4: ch = 0xEF; break;
+ case 0x00D5: ch = 0xCD; break;
+ case 0x00D6: ch = 0x85; break;
+ case 0x00D8: ch = 0xAF; break;
+ case 0x00D9: ch = 0xF4; break;
+ case 0x00DA: ch = 0xF2; break;
+ case 0x00DB: ch = 0xF3; break;
+ case 0x00DC: ch = 0x86; break;
+ case 0x00DF: ch = 0xA7; break;
+ case 0x00E0: ch = 0x88; break;
+ case 0x00E1: ch = 0x87; break;
+ case 0x00E2: ch = 0x89; break;
+ case 0x00E3: ch = 0x8B; break;
+ case 0x00E4: ch = 0x8A; break;
+ case 0x00E5: ch = 0x8C; break;
+ case 0x00E6: ch = 0xBE; break;
+ case 0x00E7: ch = 0x8D; break;
+ case 0x00E8: ch = 0x8F; break;
+ case 0x00E9: ch = 0x8E; break;
+ case 0x00EA: ch = 0x90; break;
+ case 0x00EB: ch = 0x91; break;
+ case 0x00EC: ch = 0x93; break;
+ case 0x00ED: ch = 0x92; break;
+ case 0x00EE: ch = 0x94; break;
+ case 0x00EF: ch = 0x95; break;
+ case 0x00F1: ch = 0x96; break;
+ case 0x00F2: ch = 0x98; break;
+ case 0x00F3: ch = 0x97; break;
+ case 0x00F4: ch = 0x99; break;
+ case 0x00F5: ch = 0x9B; break;
+ case 0x00F6: ch = 0x9A; break;
+ case 0x00F7: ch = 0xD6; break;
+ case 0x00F8: ch = 0xBF; break;
+ case 0x00F9: ch = 0x9D; break;
+ case 0x00FA: ch = 0x9C; break;
+ case 0x00FB: ch = 0x9E; break;
+ case 0x00FC: ch = 0x9F; break;
+ case 0x00FE: ch = 0xDF; break;
+ case 0x00FF: ch = 0xD8; break;
+ case 0x0110: ch = 0xDC; break;
+ case 0x0111: ch = 0xDD; break;
+ case 0x0131: ch = 0xF5; break;
+ case 0x0152: ch = 0xCE; break;
+ case 0x0153: ch = 0xCF; break;
+ case 0x0178: ch = 0xD9; break;
+ case 0x0192: ch = 0xC4; break;
+ case 0x02C7: ch = 0xFF; break;
+ case 0x02D8: ch = 0xF9; break;
+ case 0x02D9: ch = 0xFA; break;
+ case 0x02DA: ch = 0xFB; break;
+ case 0x02DB: ch = 0xFE; break;
+ case 0x02DD: ch = 0xFD; break;
+ case 0x0394: ch = 0xC6; break;
+ case 0x03A9: ch = 0xBD; break;
+ case 0x03C0: ch = 0xB9; break;
+ case 0x2013: ch = 0xD1; break;
+ case 0x2014: ch = 0xD0; break;
+ case 0x2018: ch = 0xD4; break;
+ case 0x2019: ch = 0xD5; break;
+ case 0x201A: ch = 0xE2; break;
+ case 0x201C: ch = 0xD2; break;
+ case 0x201D: ch = 0xD3; break;
+ case 0x201E: ch = 0xE3; break;
+ case 0x2020: ch = 0xA0; break;
+ case 0x2021: ch = 0xE0; break;
+ case 0x2022: ch = 0xA5; break;
+ case 0x2026: ch = 0xC9; break;
+ case 0x2030: ch = 0xE4; break;
+ case 0x2044: ch = 0xDA; break;
+ case 0x2122: ch = 0xAA; break;
+ case 0x2202: ch = 0xB6; break;
+ case 0x220F: ch = 0xB8; break;
+ case 0x2211: ch = 0xB7; break;
+ case 0x221A: ch = 0xC3; break;
+ case 0x221E: ch = 0xB0; break;
+ case 0x222B: ch = 0xBA; break;
+ case 0x2248: ch = 0xC5; break;
+ case 0x2260: ch = 0xAD; break;
+ case 0x2264: ch = 0xB2; break;
+ case 0x2265: ch = 0xB3; break;
+ case 0x25C6: ch = 0xD7; break;
+ case 0xE01E: ch = 0xF0; break;
+ default: ch = 0x3F; break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP10079
+
+public class ENCx_mac_icelandic : CP10079
+{
+ public ENCx_mac_icelandic() : base() {}
+
+}; // class ENCx_mac_icelandic
+
+}; // namespace I18N.West
diff --git a/mcs/class/I18N/West/CP1250.cs b/mcs/class/I18N/West/CP1250.cs
new file mode 100644
index 00000000000..1cdd1d56f4b
--- /dev/null
+++ b/mcs/class/I18N/West/CP1250.cs
@@ -0,0 +1,399 @@
+/*
+ * CP1250.cs - Central European (Windows) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-5346.ucm".
+
+namespace I18N.West
+{
+
+using System;
+using I18N.Common;
+
+public class CP1250 : ByteEncoding
+{
+ public CP1250()
+ : base(1250, ToChars, "Central European (Windows)",
+ "iso-8859-2", "windows-1250", "windows-1250",
+ true, true, true, true, 1250)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
+ '\u0006', '\u0007', '\u0008', '\u0009', '\u000A', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
+ '\u0018', '\u0019', '\u001A', '\u001B', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
+ '\u0024', '\u0025', '\u0026', '\u0027', '\u0028', '\u0029',
+ '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
+ '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
+ '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
+ '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
+ '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
+ '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
+ '\u005A', '\u005B', '\u005C', '\u005D', '\u005E', '\u005F',
+ '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
+ '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
+ '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
+ '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
+ '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
+ '\u007E', '\u007F', '\u20AC', '\u0081', '\u201A', '\u0083',
+ '\u201E', '\u2026', '\u2020', '\u2021', '\u0088', '\u2030',
+ '\u0160', '\u2039', '\u015A', '\u0164', '\u017D', '\u0179',
+ '\u0090', '\u2018', '\u2019', '\u201C', '\u201D', '\u2022',
+ '\u2013', '\u2014', '\u0098', '\u2122', '\u0161', '\u203A',
+ '\u015B', '\u0165', '\u017E', '\u017A', '\u00A0', '\u02C7',
+ '\u02D8', '\u0141', '\u00A4', '\u0104', '\u00A6', '\u00A7',
+ '\u00A8', '\u00A9', '\u015E', '\u00AB', '\u00AC', '\u00AD',
+ '\u00AE', '\u017B', '\u00B0', '\u00B1', '\u02DB', '\u0142',
+ '\u00B4', '\u00B5', '\u00B6', '\u00B7', '\u00B8', '\u0105',
+ '\u015F', '\u00BB', '\u013D', '\u02DD', '\u013E', '\u017C',
+ '\u0154', '\u00C1', '\u00C2', '\u0102', '\u00C4', '\u0139',
+ '\u0106', '\u00C7', '\u010C', '\u00C9', '\u0118', '\u00CB',
+ '\u011A', '\u00CD', '\u00CE', '\u010E', '\u0110', '\u0143',
+ '\u0147', '\u00D3', '\u00D4', '\u0150', '\u00D6', '\u00D7',
+ '\u0158', '\u016E', '\u00DA', '\u0170', '\u00DC', '\u00DD',
+ '\u0162', '\u00DF', '\u0155', '\u00E1', '\u00E2', '\u0103',
+ '\u00E4', '\u013A', '\u0107', '\u00E7', '\u010D', '\u00E9',
+ '\u0119', '\u00EB', '\u011B', '\u00ED', '\u00EE', '\u010F',
+ '\u0111', '\u0144', '\u0148', '\u00F3', '\u00F4', '\u0151',
+ '\u00F6', '\u00F7', '\u0159', '\u016F', '\u00FA', '\u0171',
+ '\u00FC', '\u00FD', '\u0163', '\u02D9',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 128) switch(ch)
+ {
+ case 0x0081:
+ case 0x0083:
+ case 0x0088:
+ case 0x0090:
+ case 0x0098:
+ case 0x00A0:
+ case 0x00A4:
+ case 0x00A6:
+ case 0x00A7:
+ case 0x00A8:
+ case 0x00A9:
+ case 0x00AB:
+ case 0x00AC:
+ case 0x00AD:
+ case 0x00AE:
+ case 0x00B0:
+ case 0x00B1:
+ case 0x00B4:
+ case 0x00B5:
+ case 0x00B6:
+ case 0x00B7:
+ case 0x00B8:
+ case 0x00BB:
+ case 0x00C1:
+ case 0x00C2:
+ case 0x00C4:
+ case 0x00C7:
+ case 0x00C9:
+ case 0x00CB:
+ case 0x00CD:
+ case 0x00CE:
+ case 0x00D3:
+ case 0x00D4:
+ case 0x00D6:
+ case 0x00D7:
+ case 0x00DA:
+ case 0x00DC:
+ case 0x00DD:
+ case 0x00DF:
+ case 0x00E1:
+ case 0x00E2:
+ case 0x00E4:
+ case 0x00E7:
+ case 0x00E9:
+ case 0x00EB:
+ case 0x00ED:
+ case 0x00EE:
+ case 0x00F3:
+ case 0x00F4:
+ case 0x00F6:
+ case 0x00F7:
+ case 0x00FA:
+ case 0x00FC:
+ case 0x00FD:
+ break;
+ case 0x0102: ch = 0xC3; break;
+ case 0x0103: ch = 0xE3; break;
+ case 0x0104: ch = 0xA5; break;
+ case 0x0105: ch = 0xB9; break;
+ case 0x0106: ch = 0xC6; break;
+ case 0x0107: ch = 0xE6; break;
+ case 0x010C: ch = 0xC8; break;
+ case 0x010D: ch = 0xE8; break;
+ case 0x010E: ch = 0xCF; break;
+ case 0x010F: ch = 0xEF; break;
+ case 0x0110: ch = 0xD0; break;
+ case 0x0111: ch = 0xF0; break;
+ case 0x0118: ch = 0xCA; break;
+ case 0x0119: ch = 0xEA; break;
+ case 0x011A: ch = 0xCC; break;
+ case 0x011B: ch = 0xEC; break;
+ case 0x0139: ch = 0xC5; break;
+ case 0x013A: ch = 0xE5; break;
+ case 0x013D: ch = 0xBC; break;
+ case 0x013E: ch = 0xBE; break;
+ case 0x0141: ch = 0xA3; break;
+ case 0x0142: ch = 0xB3; break;
+ case 0x0143: ch = 0xD1; break;
+ case 0x0144: ch = 0xF1; break;
+ case 0x0147: ch = 0xD2; break;
+ case 0x0148: ch = 0xF2; break;
+ case 0x0150: ch = 0xD5; break;
+ case 0x0151: ch = 0xF5; break;
+ case 0x0154: ch = 0xC0; break;
+ case 0x0155: ch = 0xE0; break;
+ case 0x0158: ch = 0xD8; break;
+ case 0x0159: ch = 0xF8; break;
+ case 0x015A: ch = 0x8C; break;
+ case 0x015B: ch = 0x9C; break;
+ case 0x015E: ch = 0xAA; break;
+ case 0x015F: ch = 0xBA; break;
+ case 0x0160: ch = 0x8A; break;
+ case 0x0161: ch = 0x9A; break;
+ case 0x0162: ch = 0xDE; break;
+ case 0x0163: ch = 0xFE; break;
+ case 0x0164: ch = 0x8D; break;
+ case 0x0165: ch = 0x9D; break;
+ case 0x016E: ch = 0xD9; break;
+ case 0x016F: ch = 0xF9; break;
+ case 0x0170: ch = 0xDB; break;
+ case 0x0171: ch = 0xFB; break;
+ case 0x0179: ch = 0x8F; break;
+ case 0x017A: ch = 0x9F; break;
+ case 0x017B: ch = 0xAF; break;
+ case 0x017C: ch = 0xBF; break;
+ case 0x017D: ch = 0x8E; break;
+ case 0x017E: ch = 0x9E; break;
+ case 0x02C7: ch = 0xA1; break;
+ case 0x02D8: ch = 0xA2; break;
+ case 0x02D9: ch = 0xFF; break;
+ case 0x02DB: ch = 0xB2; break;
+ case 0x02DD: ch = 0xBD; break;
+ case 0x2013: ch = 0x96; break;
+ case 0x2014: ch = 0x97; break;
+ case 0x2018: ch = 0x91; break;
+ case 0x2019: ch = 0x92; break;
+ case 0x201A: ch = 0x82; break;
+ case 0x201C: ch = 0x93; break;
+ case 0x201D: ch = 0x94; break;
+ case 0x201E: ch = 0x84; break;
+ case 0x2020: ch = 0x86; break;
+ case 0x2021: ch = 0x87; break;
+ case 0x2022: ch = 0x95; break;
+ case 0x2026: ch = 0x85; break;
+ case 0x2030: ch = 0x89; break;
+ case 0x2039: ch = 0x8B; break;
+ case 0x203A: ch = 0x9B; break;
+ case 0x20AC: ch = 0x80; break;
+ case 0x2122: ch = 0x99; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 128) switch(ch)
+ {
+ case 0x0081:
+ case 0x0083:
+ case 0x0088:
+ case 0x0090:
+ case 0x0098:
+ case 0x00A0:
+ case 0x00A4:
+ case 0x00A6:
+ case 0x00A7:
+ case 0x00A8:
+ case 0x00A9:
+ case 0x00AB:
+ case 0x00AC:
+ case 0x00AD:
+ case 0x00AE:
+ case 0x00B0:
+ case 0x00B1:
+ case 0x00B4:
+ case 0x00B5:
+ case 0x00B6:
+ case 0x00B7:
+ case 0x00B8:
+ case 0x00BB:
+ case 0x00C1:
+ case 0x00C2:
+ case 0x00C4:
+ case 0x00C7:
+ case 0x00C9:
+ case 0x00CB:
+ case 0x00CD:
+ case 0x00CE:
+ case 0x00D3:
+ case 0x00D4:
+ case 0x00D6:
+ case 0x00D7:
+ case 0x00DA:
+ case 0x00DC:
+ case 0x00DD:
+ case 0x00DF:
+ case 0x00E1:
+ case 0x00E2:
+ case 0x00E4:
+ case 0x00E7:
+ case 0x00E9:
+ case 0x00EB:
+ case 0x00ED:
+ case 0x00EE:
+ case 0x00F3:
+ case 0x00F4:
+ case 0x00F6:
+ case 0x00F7:
+ case 0x00FA:
+ case 0x00FC:
+ case 0x00FD:
+ break;
+ case 0x0102: ch = 0xC3; break;
+ case 0x0103: ch = 0xE3; break;
+ case 0x0104: ch = 0xA5; break;
+ case 0x0105: ch = 0xB9; break;
+ case 0x0106: ch = 0xC6; break;
+ case 0x0107: ch = 0xE6; break;
+ case 0x010C: ch = 0xC8; break;
+ case 0x010D: ch = 0xE8; break;
+ case 0x010E: ch = 0xCF; break;
+ case 0x010F: ch = 0xEF; break;
+ case 0x0110: ch = 0xD0; break;
+ case 0x0111: ch = 0xF0; break;
+ case 0x0118: ch = 0xCA; break;
+ case 0x0119: ch = 0xEA; break;
+ case 0x011A: ch = 0xCC; break;
+ case 0x011B: ch = 0xEC; break;
+ case 0x0139: ch = 0xC5; break;
+ case 0x013A: ch = 0xE5; break;
+ case 0x013D: ch = 0xBC; break;
+ case 0x013E: ch = 0xBE; break;
+ case 0x0141: ch = 0xA3; break;
+ case 0x0142: ch = 0xB3; break;
+ case 0x0143: ch = 0xD1; break;
+ case 0x0144: ch = 0xF1; break;
+ case 0x0147: ch = 0xD2; break;
+ case 0x0148: ch = 0xF2; break;
+ case 0x0150: ch = 0xD5; break;
+ case 0x0151: ch = 0xF5; break;
+ case 0x0154: ch = 0xC0; break;
+ case 0x0155: ch = 0xE0; break;
+ case 0x0158: ch = 0xD8; break;
+ case 0x0159: ch = 0xF8; break;
+ case 0x015A: ch = 0x8C; break;
+ case 0x015B: ch = 0x9C; break;
+ case 0x015E: ch = 0xAA; break;
+ case 0x015F: ch = 0xBA; break;
+ case 0x0160: ch = 0x8A; break;
+ case 0x0161: ch = 0x9A; break;
+ case 0x0162: ch = 0xDE; break;
+ case 0x0163: ch = 0xFE; break;
+ case 0x0164: ch = 0x8D; break;
+ case 0x0165: ch = 0x9D; break;
+ case 0x016E: ch = 0xD9; break;
+ case 0x016F: ch = 0xF9; break;
+ case 0x0170: ch = 0xDB; break;
+ case 0x0171: ch = 0xFB; break;
+ case 0x0179: ch = 0x8F; break;
+ case 0x017A: ch = 0x9F; break;
+ case 0x017B: ch = 0xAF; break;
+ case 0x017C: ch = 0xBF; break;
+ case 0x017D: ch = 0x8E; break;
+ case 0x017E: ch = 0x9E; break;
+ case 0x02C7: ch = 0xA1; break;
+ case 0x02D8: ch = 0xA2; break;
+ case 0x02D9: ch = 0xFF; break;
+ case 0x02DB: ch = 0xB2; break;
+ case 0x02DD: ch = 0xBD; break;
+ case 0x2013: ch = 0x96; break;
+ case 0x2014: ch = 0x97; break;
+ case 0x2018: ch = 0x91; break;
+ case 0x2019: ch = 0x92; break;
+ case 0x201A: ch = 0x82; break;
+ case 0x201C: ch = 0x93; break;
+ case 0x201D: ch = 0x94; break;
+ case 0x201E: ch = 0x84; break;
+ case 0x2020: ch = 0x86; break;
+ case 0x2021: ch = 0x87; break;
+ case 0x2022: ch = 0x95; break;
+ case 0x2026: ch = 0x85; break;
+ case 0x2030: ch = 0x89; break;
+ case 0x2039: ch = 0x8B; break;
+ case 0x203A: ch = 0x9B; break;
+ case 0x20AC: ch = 0x80; break;
+ case 0x2122: ch = 0x99; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP1250
+
+public class ENCwindows_1250 : CP1250
+{
+ public ENCwindows_1250() : base() {}
+
+}; // class ENCwindows_1250
+
+}; // namespace I18N.West
diff --git a/mcs/class/I18N/West/CP1252.cs b/mcs/class/I18N/West/CP1252.cs
new file mode 100644
index 00000000000..291ef914bf4
--- /dev/null
+++ b/mcs/class/I18N/West/CP1252.cs
@@ -0,0 +1,399 @@
+/*
+ * CP1252.cs - Western European (Windows) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-5348.ucm".
+
+namespace I18N.West
+{
+
+using System;
+using I18N.Common;
+
+public class CP1252 : ByteEncoding
+{
+ public CP1252()
+ : base(1252, ToChars, "Western European (Windows)",
+ "iso-8859-1", "Windows-1252", "Windows-1252",
+ true, true, true, true, 1252)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
+ '\u0006', '\u0007', '\u0008', '\u0009', '\u000A', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
+ '\u0018', '\u0019', '\u001A', '\u001B', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
+ '\u0024', '\u0025', '\u0026', '\u0027', '\u0028', '\u0029',
+ '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
+ '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
+ '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
+ '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
+ '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
+ '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
+ '\u005A', '\u005B', '\u005C', '\u005D', '\u005E', '\u005F',
+ '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
+ '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
+ '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
+ '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
+ '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
+ '\u007E', '\u007F', '\u20AC', '\u0081', '\u201A', '\u0192',
+ '\u201E', '\u2026', '\u2020', '\u2021', '\u02C6', '\u2030',
+ '\u0160', '\u2039', '\u0152', '\u008D', '\u017D', '\u008F',
+ '\u0090', '\u2018', '\u2019', '\u201C', '\u201D', '\u2022',
+ '\u2013', '\u2014', '\u02DC', '\u2122', '\u0161', '\u203A',
+ '\u0153', '\u009D', '\u017E', '\u0178', '\u00A0', '\u00A1',
+ '\u00A2', '\u00A3', '\u00A4', '\u00A5', '\u00A6', '\u00A7',
+ '\u00A8', '\u00A9', '\u00AA', '\u00AB', '\u00AC', '\u00AD',
+ '\u00AE', '\u00AF', '\u00B0', '\u00B1', '\u00B2', '\u00B3',
+ '\u00B4', '\u00B5', '\u00B6', '\u00B7', '\u00B8', '\u00B9',
+ '\u00BA', '\u00BB', '\u00BC', '\u00BD', '\u00BE', '\u00BF',
+ '\u00C0', '\u00C1', '\u00C2', '\u00C3', '\u00C4', '\u00C5',
+ '\u00C6', '\u00C7', '\u00C8', '\u00C9', '\u00CA', '\u00CB',
+ '\u00CC', '\u00CD', '\u00CE', '\u00CF', '\u00D0', '\u00D1',
+ '\u00D2', '\u00D3', '\u00D4', '\u00D5', '\u00D6', '\u00D7',
+ '\u00D8', '\u00D9', '\u00DA', '\u00DB', '\u00DC', '\u00DD',
+ '\u00DE', '\u00DF', '\u00E0', '\u00E1', '\u00E2', '\u00E3',
+ '\u00E4', '\u00E5', '\u00E6', '\u00E7', '\u00E8', '\u00E9',
+ '\u00EA', '\u00EB', '\u00EC', '\u00ED', '\u00EE', '\u00EF',
+ '\u00F0', '\u00F1', '\u00F2', '\u00F3', '\u00F4', '\u00F5',
+ '\u00F6', '\u00F7', '\u00F8', '\u00F9', '\u00FA', '\u00FB',
+ '\u00FC', '\u00FD', '\u00FE', '\u00FF',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 128) switch(ch)
+ {
+ case 0x0081:
+ case 0x008D:
+ case 0x008F:
+ case 0x0090:
+ case 0x009D:
+ case 0x00A0:
+ case 0x00A1:
+ case 0x00A2:
+ case 0x00A3:
+ case 0x00A4:
+ case 0x00A5:
+ case 0x00A6:
+ case 0x00A7:
+ case 0x00A8:
+ case 0x00A9:
+ case 0x00AA:
+ case 0x00AB:
+ case 0x00AC:
+ case 0x00AD:
+ case 0x00AE:
+ case 0x00AF:
+ case 0x00B0:
+ case 0x00B1:
+ case 0x00B2:
+ case 0x00B3:
+ case 0x00B4:
+ case 0x00B5:
+ case 0x00B6:
+ case 0x00B7:
+ case 0x00B8:
+ case 0x00B9:
+ case 0x00BA:
+ case 0x00BB:
+ case 0x00BC:
+ case 0x00BD:
+ case 0x00BE:
+ case 0x00BF:
+ case 0x00C0:
+ case 0x00C1:
+ case 0x00C2:
+ case 0x00C3:
+ case 0x00C4:
+ case 0x00C5:
+ case 0x00C6:
+ case 0x00C7:
+ case 0x00C8:
+ case 0x00C9:
+ case 0x00CA:
+ case 0x00CB:
+ case 0x00CC:
+ case 0x00CD:
+ case 0x00CE:
+ case 0x00CF:
+ case 0x00D0:
+ case 0x00D1:
+ case 0x00D2:
+ case 0x00D3:
+ case 0x00D4:
+ case 0x00D5:
+ case 0x00D6:
+ case 0x00D7:
+ case 0x00D8:
+ case 0x00D9:
+ case 0x00DA:
+ case 0x00DB:
+ case 0x00DC:
+ case 0x00DD:
+ case 0x00DE:
+ case 0x00DF:
+ case 0x00E0:
+ case 0x00E1:
+ case 0x00E2:
+ case 0x00E3:
+ case 0x00E4:
+ case 0x00E5:
+ case 0x00E6:
+ case 0x00E7:
+ case 0x00E8:
+ case 0x00E9:
+ case 0x00EA:
+ case 0x00EB:
+ case 0x00EC:
+ case 0x00ED:
+ case 0x00EE:
+ case 0x00EF:
+ case 0x00F0:
+ case 0x00F1:
+ case 0x00F2:
+ case 0x00F3:
+ case 0x00F4:
+ case 0x00F5:
+ case 0x00F6:
+ case 0x00F7:
+ case 0x00F8:
+ case 0x00F9:
+ case 0x00FA:
+ case 0x00FB:
+ case 0x00FC:
+ case 0x00FD:
+ case 0x00FE:
+ case 0x00FF:
+ break;
+ case 0x0152: ch = 0x8C; break;
+ case 0x0153: ch = 0x9C; break;
+ case 0x0160: ch = 0x8A; break;
+ case 0x0161: ch = 0x9A; break;
+ case 0x0178: ch = 0x9F; break;
+ case 0x017D: ch = 0x8E; break;
+ case 0x017E: ch = 0x9E; break;
+ case 0x0192: ch = 0x83; break;
+ case 0x02C6: ch = 0x88; break;
+ case 0x02DC: ch = 0x98; break;
+ case 0x2013: ch = 0x96; break;
+ case 0x2014: ch = 0x97; break;
+ case 0x2018: ch = 0x91; break;
+ case 0x2019: ch = 0x92; break;
+ case 0x201A: ch = 0x82; break;
+ case 0x201C: ch = 0x93; break;
+ case 0x201D: ch = 0x94; break;
+ case 0x201E: ch = 0x84; break;
+ case 0x2020: ch = 0x86; break;
+ case 0x2021: ch = 0x87; break;
+ case 0x2022: ch = 0x95; break;
+ case 0x2026: ch = 0x85; break;
+ case 0x2030: ch = 0x89; break;
+ case 0x2039: ch = 0x8B; break;
+ case 0x203A: ch = 0x9B; break;
+ case 0x20AC: ch = 0x80; break;
+ case 0x2122: ch = 0x99; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 128) switch(ch)
+ {
+ case 0x0081:
+ case 0x008D:
+ case 0x008F:
+ case 0x0090:
+ case 0x009D:
+ case 0x00A0:
+ case 0x00A1:
+ case 0x00A2:
+ case 0x00A3:
+ case 0x00A4:
+ case 0x00A5:
+ case 0x00A6:
+ case 0x00A7:
+ case 0x00A8:
+ case 0x00A9:
+ case 0x00AA:
+ case 0x00AB:
+ case 0x00AC:
+ case 0x00AD:
+ case 0x00AE:
+ case 0x00AF:
+ case 0x00B0:
+ case 0x00B1:
+ case 0x00B2:
+ case 0x00B3:
+ case 0x00B4:
+ case 0x00B5:
+ case 0x00B6:
+ case 0x00B7:
+ case 0x00B8:
+ case 0x00B9:
+ case 0x00BA:
+ case 0x00BB:
+ case 0x00BC:
+ case 0x00BD:
+ case 0x00BE:
+ case 0x00BF:
+ case 0x00C0:
+ case 0x00C1:
+ case 0x00C2:
+ case 0x00C3:
+ case 0x00C4:
+ case 0x00C5:
+ case 0x00C6:
+ case 0x00C7:
+ case 0x00C8:
+ case 0x00C9:
+ case 0x00CA:
+ case 0x00CB:
+ case 0x00CC:
+ case 0x00CD:
+ case 0x00CE:
+ case 0x00CF:
+ case 0x00D0:
+ case 0x00D1:
+ case 0x00D2:
+ case 0x00D3:
+ case 0x00D4:
+ case 0x00D5:
+ case 0x00D6:
+ case 0x00D7:
+ case 0x00D8:
+ case 0x00D9:
+ case 0x00DA:
+ case 0x00DB:
+ case 0x00DC:
+ case 0x00DD:
+ case 0x00DE:
+ case 0x00DF:
+ case 0x00E0:
+ case 0x00E1:
+ case 0x00E2:
+ case 0x00E3:
+ case 0x00E4:
+ case 0x00E5:
+ case 0x00E6:
+ case 0x00E7:
+ case 0x00E8:
+ case 0x00E9:
+ case 0x00EA:
+ case 0x00EB:
+ case 0x00EC:
+ case 0x00ED:
+ case 0x00EE:
+ case 0x00EF:
+ case 0x00F0:
+ case 0x00F1:
+ case 0x00F2:
+ case 0x00F3:
+ case 0x00F4:
+ case 0x00F5:
+ case 0x00F6:
+ case 0x00F7:
+ case 0x00F8:
+ case 0x00F9:
+ case 0x00FA:
+ case 0x00FB:
+ case 0x00FC:
+ case 0x00FD:
+ case 0x00FE:
+ case 0x00FF:
+ break;
+ case 0x0152: ch = 0x8C; break;
+ case 0x0153: ch = 0x9C; break;
+ case 0x0160: ch = 0x8A; break;
+ case 0x0161: ch = 0x9A; break;
+ case 0x0178: ch = 0x9F; break;
+ case 0x017D: ch = 0x8E; break;
+ case 0x017E: ch = 0x9E; break;
+ case 0x0192: ch = 0x83; break;
+ case 0x02C6: ch = 0x88; break;
+ case 0x02DC: ch = 0x98; break;
+ case 0x2013: ch = 0x96; break;
+ case 0x2014: ch = 0x97; break;
+ case 0x2018: ch = 0x91; break;
+ case 0x2019: ch = 0x92; break;
+ case 0x201A: ch = 0x82; break;
+ case 0x201C: ch = 0x93; break;
+ case 0x201D: ch = 0x94; break;
+ case 0x201E: ch = 0x84; break;
+ case 0x2020: ch = 0x86; break;
+ case 0x2021: ch = 0x87; break;
+ case 0x2022: ch = 0x95; break;
+ case 0x2026: ch = 0x85; break;
+ case 0x2030: ch = 0x89; break;
+ case 0x2039: ch = 0x8B; break;
+ case 0x203A: ch = 0x9B; break;
+ case 0x20AC: ch = 0x80; break;
+ case 0x2122: ch = 0x99; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP1252
+
+public class ENCwindows_1252 : CP1252
+{
+ public ENCwindows_1252() : base() {}
+
+}; // class ENCwindows_1252
+
+}; // namespace I18N.West
diff --git a/mcs/class/I18N/West/CP1253.cs b/mcs/class/I18N/West/CP1253.cs
new file mode 100644
index 00000000000..70a1d1c0c06
--- /dev/null
+++ b/mcs/class/I18N/West/CP1253.cs
@@ -0,0 +1,405 @@
+/*
+ * CP1253.cs - Greek (Windows) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-5349.ucm".
+
+namespace I18N.West
+{
+
+using System;
+using I18N.Common;
+
+public class CP1253 : ByteEncoding
+{
+ public CP1253()
+ : base(1253, ToChars, "Greek (Windows)",
+ "iso-8859-7", "windows-1253", "windows-1253",
+ true, true, true, true, 1253)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
+ '\u0006', '\u0007', '\u0008', '\u0009', '\u000A', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
+ '\u0018', '\u0019', '\u001A', '\u001B', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
+ '\u0024', '\u0025', '\u0026', '\u0027', '\u0028', '\u0029',
+ '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
+ '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
+ '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
+ '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
+ '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
+ '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
+ '\u005A', '\u005B', '\u005C', '\u005D', '\u005E', '\u005F',
+ '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
+ '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
+ '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
+ '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
+ '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
+ '\u007E', '\u007F', '\u20AC', '\u0081', '\u201A', '\u0192',
+ '\u201E', '\u2026', '\u2020', '\u2021', '\u0088', '\u2030',
+ '\u008A', '\u2039', '\u008C', '\u008D', '\u008E', '\u008F',
+ '\u0090', '\u2018', '\u2019', '\u201C', '\u201D', '\u2022',
+ '\u2013', '\u2014', '\u0098', '\u2122', '\u009A', '\u203A',
+ '\u009C', '\u009D', '\u009E', '\u009F', '\u00A0', '\u0385',
+ '\u0386', '\u00A3', '\u00A4', '\u00A5', '\u00A6', '\u00A7',
+ '\u00A8', '\u00A9', '\u00AA', '\u00AB', '\u00AC', '\u00AD',
+ '\u00AE', '\u2015', '\u00B0', '\u00B1', '\u00B2', '\u00B3',
+ '\u0384', '\u00B5', '\u00B6', '\u00B7', '\u0388', '\u0389',
+ '\u038A', '\u00BB', '\u038C', '\u00BD', '\u038E', '\u038F',
+ '\u0390', '\u0391', '\u0392', '\u0393', '\u0394', '\u0395',
+ '\u0396', '\u0397', '\u0398', '\u0399', '\u039A', '\u039B',
+ '\u039C', '\u039D', '\u039E', '\u039F', '\u03A0', '\u03A1',
+ '\u003F', '\u03A3', '\u03A4', '\u03A5', '\u03A6', '\u03A7',
+ '\u03A8', '\u03A9', '\u03AA', '\u03AB', '\u03AC', '\u03AD',
+ '\u03AE', '\u03AF', '\u03B0', '\u03B1', '\u03B2', '\u03B3',
+ '\u03B4', '\u03B5', '\u03B6', '\u03B7', '\u03B8', '\u03B9',
+ '\u03BA', '\u03BB', '\u03BC', '\u03BD', '\u03BE', '\u03BF',
+ '\u03C0', '\u03C1', '\u03C2', '\u03C3', '\u03C4', '\u03C5',
+ '\u03C6', '\u03C7', '\u03C8', '\u03C9', '\u03CA', '\u03CB',
+ '\u03CC', '\u03CD', '\u03CE', '\u003F',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 128) switch(ch)
+ {
+ case 0x0081:
+ case 0x0088:
+ case 0x008A:
+ case 0x008C:
+ case 0x008D:
+ case 0x008E:
+ case 0x008F:
+ case 0x0090:
+ case 0x0098:
+ case 0x009A:
+ case 0x009C:
+ case 0x009D:
+ case 0x009E:
+ case 0x009F:
+ case 0x00A0:
+ case 0x00A3:
+ case 0x00A4:
+ case 0x00A5:
+ case 0x00A6:
+ case 0x00A7:
+ case 0x00A8:
+ case 0x00A9:
+ case 0x00AA:
+ case 0x00AB:
+ case 0x00AC:
+ case 0x00AD:
+ case 0x00AE:
+ case 0x00B0:
+ case 0x00B1:
+ case 0x00B2:
+ case 0x00B3:
+ case 0x00B5:
+ case 0x00B6:
+ case 0x00B7:
+ case 0x00BB:
+ case 0x00BD:
+ break;
+ case 0x0192: ch = 0x83; break;
+ case 0x0384: ch = 0xB4; break;
+ case 0x0385: ch = 0xA1; break;
+ case 0x0386: ch = 0xA2; break;
+ case 0x0388: ch = 0xB8; break;
+ case 0x0389: ch = 0xB9; break;
+ case 0x038A: ch = 0xBA; break;
+ case 0x038C: ch = 0xBC; break;
+ case 0x038E:
+ case 0x038F:
+ case 0x0390:
+ case 0x0391:
+ case 0x0392:
+ case 0x0393:
+ case 0x0394:
+ case 0x0395:
+ case 0x0396:
+ case 0x0397:
+ case 0x0398:
+ case 0x0399:
+ case 0x039A:
+ case 0x039B:
+ case 0x039C:
+ case 0x039D:
+ case 0x039E:
+ case 0x039F:
+ case 0x03A0:
+ case 0x03A1:
+ ch -= 0x02D0;
+ break;
+ case 0x03A3:
+ case 0x03A4:
+ case 0x03A5:
+ case 0x03A6:
+ case 0x03A7:
+ case 0x03A8:
+ case 0x03A9:
+ case 0x03AA:
+ case 0x03AB:
+ case 0x03AC:
+ case 0x03AD:
+ case 0x03AE:
+ case 0x03AF:
+ case 0x03B0:
+ case 0x03B1:
+ case 0x03B2:
+ case 0x03B3:
+ case 0x03B4:
+ case 0x03B5:
+ case 0x03B6:
+ case 0x03B7:
+ case 0x03B8:
+ case 0x03B9:
+ case 0x03BA:
+ case 0x03BB:
+ case 0x03BC:
+ case 0x03BD:
+ case 0x03BE:
+ case 0x03BF:
+ case 0x03C0:
+ case 0x03C1:
+ case 0x03C2:
+ case 0x03C3:
+ case 0x03C4:
+ case 0x03C5:
+ case 0x03C6:
+ case 0x03C7:
+ case 0x03C8:
+ case 0x03C9:
+ case 0x03CA:
+ case 0x03CB:
+ case 0x03CC:
+ case 0x03CD:
+ case 0x03CE:
+ ch -= 0x02D0;
+ break;
+ case 0x03D5: ch = 0xF6; break;
+ case 0x2013: ch = 0x96; break;
+ case 0x2014: ch = 0x97; break;
+ case 0x2015: ch = 0xAF; break;
+ case 0x2018: ch = 0x91; break;
+ case 0x2019: ch = 0x92; break;
+ case 0x201A: ch = 0x82; break;
+ case 0x201C: ch = 0x93; break;
+ case 0x201D: ch = 0x94; break;
+ case 0x201E: ch = 0x84; break;
+ case 0x2020: ch = 0x86; break;
+ case 0x2021: ch = 0x87; break;
+ case 0x2022: ch = 0x95; break;
+ case 0x2026: ch = 0x85; break;
+ case 0x2030: ch = 0x89; break;
+ case 0x2039: ch = 0x8B; break;
+ case 0x203A: ch = 0x9B; break;
+ case 0x20AC: ch = 0x80; break;
+ case 0x2122: ch = 0x99; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 128) switch(ch)
+ {
+ case 0x0081:
+ case 0x0088:
+ case 0x008A:
+ case 0x008C:
+ case 0x008D:
+ case 0x008E:
+ case 0x008F:
+ case 0x0090:
+ case 0x0098:
+ case 0x009A:
+ case 0x009C:
+ case 0x009D:
+ case 0x009E:
+ case 0x009F:
+ case 0x00A0:
+ case 0x00A3:
+ case 0x00A4:
+ case 0x00A5:
+ case 0x00A6:
+ case 0x00A7:
+ case 0x00A8:
+ case 0x00A9:
+ case 0x00AA:
+ case 0x00AB:
+ case 0x00AC:
+ case 0x00AD:
+ case 0x00AE:
+ case 0x00B0:
+ case 0x00B1:
+ case 0x00B2:
+ case 0x00B3:
+ case 0x00B5:
+ case 0x00B6:
+ case 0x00B7:
+ case 0x00BB:
+ case 0x00BD:
+ break;
+ case 0x0192: ch = 0x83; break;
+ case 0x0384: ch = 0xB4; break;
+ case 0x0385: ch = 0xA1; break;
+ case 0x0386: ch = 0xA2; break;
+ case 0x0388: ch = 0xB8; break;
+ case 0x0389: ch = 0xB9; break;
+ case 0x038A: ch = 0xBA; break;
+ case 0x038C: ch = 0xBC; break;
+ case 0x038E:
+ case 0x038F:
+ case 0x0390:
+ case 0x0391:
+ case 0x0392:
+ case 0x0393:
+ case 0x0394:
+ case 0x0395:
+ case 0x0396:
+ case 0x0397:
+ case 0x0398:
+ case 0x0399:
+ case 0x039A:
+ case 0x039B:
+ case 0x039C:
+ case 0x039D:
+ case 0x039E:
+ case 0x039F:
+ case 0x03A0:
+ case 0x03A1:
+ ch -= 0x02D0;
+ break;
+ case 0x03A3:
+ case 0x03A4:
+ case 0x03A5:
+ case 0x03A6:
+ case 0x03A7:
+ case 0x03A8:
+ case 0x03A9:
+ case 0x03AA:
+ case 0x03AB:
+ case 0x03AC:
+ case 0x03AD:
+ case 0x03AE:
+ case 0x03AF:
+ case 0x03B0:
+ case 0x03B1:
+ case 0x03B2:
+ case 0x03B3:
+ case 0x03B4:
+ case 0x03B5:
+ case 0x03B6:
+ case 0x03B7:
+ case 0x03B8:
+ case 0x03B9:
+ case 0x03BA:
+ case 0x03BB:
+ case 0x03BC:
+ case 0x03BD:
+ case 0x03BE:
+ case 0x03BF:
+ case 0x03C0:
+ case 0x03C1:
+ case 0x03C2:
+ case 0x03C3:
+ case 0x03C4:
+ case 0x03C5:
+ case 0x03C6:
+ case 0x03C7:
+ case 0x03C8:
+ case 0x03C9:
+ case 0x03CA:
+ case 0x03CB:
+ case 0x03CC:
+ case 0x03CD:
+ case 0x03CE:
+ ch -= 0x02D0;
+ break;
+ case 0x03D5: ch = 0xF6; break;
+ case 0x2013: ch = 0x96; break;
+ case 0x2014: ch = 0x97; break;
+ case 0x2015: ch = 0xAF; break;
+ case 0x2018: ch = 0x91; break;
+ case 0x2019: ch = 0x92; break;
+ case 0x201A: ch = 0x82; break;
+ case 0x201C: ch = 0x93; break;
+ case 0x201D: ch = 0x94; break;
+ case 0x201E: ch = 0x84; break;
+ case 0x2020: ch = 0x86; break;
+ case 0x2021: ch = 0x87; break;
+ case 0x2022: ch = 0x95; break;
+ case 0x2026: ch = 0x85; break;
+ case 0x2030: ch = 0x89; break;
+ case 0x2039: ch = 0x8B; break;
+ case 0x203A: ch = 0x9B; break;
+ case 0x20AC: ch = 0x80; break;
+ case 0x2122: ch = 0x99; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP1253
+
+public class ENCwindows_1253 : CP1253
+{
+ public ENCwindows_1253() : base() {}
+
+}; // class ENCwindows_1253
+
+}; // namespace I18N.West
diff --git a/mcs/class/I18N/West/CP28592.cs b/mcs/class/I18N/West/CP28592.cs
new file mode 100644
index 00000000000..6acf2c6ad1c
--- /dev/null
+++ b/mcs/class/I18N/West/CP28592.cs
@@ -0,0 +1,471 @@
+/*
+ * CP28592.cs - Central European (ISO) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-912.ucm".
+
+namespace I18N.West
+{
+
+using System;
+using I18N.Common;
+
+public class CP28592 : ByteEncoding
+{
+ public CP28592()
+ : base(28592, ToChars, "Central European (ISO)",
+ "iso-8859-2", "iso-8859-2", "iso-8859-2",
+ true, true, true, true, 1250)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
+ '\u0006', '\u0007', '\u0008', '\u0009', '\u000A', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
+ '\u0018', '\u0019', '\u001A', '\u001B', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
+ '\u0024', '\u0025', '\u0026', '\u0027', '\u0028', '\u0029',
+ '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
+ '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
+ '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
+ '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
+ '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
+ '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
+ '\u005A', '\u005B', '\u005C', '\u005D', '\u005E', '\u005F',
+ '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
+ '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
+ '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
+ '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
+ '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
+ '\u007E', '\u007F', '\u0080', '\u0081', '\u0082', '\u0083',
+ '\u0084', '\u0085', '\u0086', '\u0087', '\u0088', '\u0089',
+ '\u008A', '\u008B', '\u008C', '\u008D', '\u008E', '\u008F',
+ '\u0090', '\u0091', '\u0092', '\u0093', '\u0094', '\u0095',
+ '\u0096', '\u0097', '\u0098', '\u0099', '\u009A', '\u009B',
+ '\u009C', '\u009D', '\u009E', '\u009F', '\u00A0', '\u0104',
+ '\u02D8', '\u0141', '\u00A4', '\u013D', '\u015A', '\u00A7',
+ '\u00A8', '\u0160', '\u015E', '\u0164', '\u0179', '\u00AD',
+ '\u017D', '\u017B', '\u00B0', '\u0105', '\u02DB', '\u0142',
+ '\u00B4', '\u013E', '\u015B', '\u02C7', '\u00B8', '\u0161',
+ '\u015F', '\u0165', '\u017A', '\u02DD', '\u017E', '\u017C',
+ '\u0154', '\u00C1', '\u00C2', '\u0102', '\u00C4', '\u0139',
+ '\u0106', '\u00C7', '\u010C', '\u00C9', '\u0118', '\u00CB',
+ '\u011A', '\u00CD', '\u00CE', '\u010E', '\u0110', '\u0143',
+ '\u0147', '\u00D3', '\u00D4', '\u0150', '\u00D6', '\u00D7',
+ '\u0158', '\u016E', '\u00DA', '\u0170', '\u00DC', '\u00DD',
+ '\u0162', '\u00DF', '\u0155', '\u00E1', '\u00E2', '\u0103',
+ '\u00E4', '\u013A', '\u0107', '\u00E7', '\u010D', '\u00E9',
+ '\u0119', '\u00EB', '\u011B', '\u00ED', '\u00EE', '\u010F',
+ '\u0111', '\u0144', '\u0148', '\u00F3', '\u00F4', '\u0151',
+ '\u00F6', '\u00F7', '\u0159', '\u016F', '\u00FA', '\u0171',
+ '\u00FC', '\u00FD', '\u0163', '\u02D9',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 161) switch(ch)
+ {
+ case 0x00A4:
+ case 0x00A7:
+ case 0x00A8:
+ case 0x00AD:
+ case 0x00B0:
+ case 0x00B4:
+ case 0x00B8:
+ case 0x00C1:
+ case 0x00C2:
+ case 0x00C4:
+ case 0x00C7:
+ case 0x00C9:
+ case 0x00CB:
+ case 0x00CD:
+ case 0x00CE:
+ case 0x00D0:
+ case 0x00D3:
+ case 0x00D4:
+ case 0x00D6:
+ case 0x00D7:
+ case 0x00DA:
+ case 0x00DC:
+ case 0x00DD:
+ case 0x00DF:
+ case 0x00E1:
+ case 0x00E2:
+ case 0x00E4:
+ case 0x00E7:
+ case 0x00E9:
+ case 0x00EB:
+ case 0x00ED:
+ case 0x00EE:
+ case 0x00F3:
+ case 0x00F4:
+ case 0x00F6:
+ case 0x00F7:
+ case 0x00FA:
+ case 0x00FC:
+ case 0x00FD:
+ break;
+ case 0x00A2: ch = 0x8D; break;
+ case 0x00A5: ch = 0x8E; break;
+ case 0x00A9: ch = 0x88; break;
+ case 0x00AE: ch = 0x9F; break;
+ case 0x00B6: ch = 0x14; break;
+ case 0x0102: ch = 0xC3; break;
+ case 0x0103: ch = 0xE3; break;
+ case 0x0104: ch = 0xA1; break;
+ case 0x0105: ch = 0xB1; break;
+ case 0x0106: ch = 0xC6; break;
+ case 0x0107: ch = 0xE6; break;
+ case 0x010C: ch = 0xC8; break;
+ case 0x010D: ch = 0xE8; break;
+ case 0x010E: ch = 0xCF; break;
+ case 0x010F: ch = 0xEF; break;
+ case 0x0110: ch = 0xD0; break;
+ case 0x0111: ch = 0xF0; break;
+ case 0x0118: ch = 0xCA; break;
+ case 0x0119: ch = 0xEA; break;
+ case 0x011A: ch = 0xCC; break;
+ case 0x011B: ch = 0xEC; break;
+ case 0x0139: ch = 0xC5; break;
+ case 0x013A: ch = 0xE5; break;
+ case 0x013D: ch = 0xA5; break;
+ case 0x013E: ch = 0xB5; break;
+ case 0x0141: ch = 0xA3; break;
+ case 0x0142: ch = 0xB3; break;
+ case 0x0143: ch = 0xD1; break;
+ case 0x0144: ch = 0xF1; break;
+ case 0x0147: ch = 0xD2; break;
+ case 0x0148: ch = 0xF2; break;
+ case 0x0150: ch = 0xD5; break;
+ case 0x0151: ch = 0xF5; break;
+ case 0x0154: ch = 0xC0; break;
+ case 0x0155: ch = 0xE0; break;
+ case 0x0158: ch = 0xD8; break;
+ case 0x0159: ch = 0xF8; break;
+ case 0x015A: ch = 0xA6; break;
+ case 0x015B: ch = 0xB6; break;
+ case 0x015E: ch = 0xAA; break;
+ case 0x015F: ch = 0xBA; break;
+ case 0x0160: ch = 0xA9; break;
+ case 0x0161: ch = 0xB9; break;
+ case 0x0162: ch = 0xDE; break;
+ case 0x0163: ch = 0xFE; break;
+ case 0x0164: ch = 0xAB; break;
+ case 0x0165: ch = 0xBB; break;
+ case 0x016E: ch = 0xD9; break;
+ case 0x016F: ch = 0xF9; break;
+ case 0x0170: ch = 0xDB; break;
+ case 0x0171: ch = 0xFB; break;
+ case 0x0179: ch = 0xAC; break;
+ case 0x017A: ch = 0xBC; break;
+ case 0x017B: ch = 0xAF; break;
+ case 0x017C: ch = 0xBF; break;
+ case 0x017D: ch = 0xAE; break;
+ case 0x017E: ch = 0xBE; break;
+ case 0x02C7: ch = 0xB7; break;
+ case 0x02D8: ch = 0xA2; break;
+ case 0x02D9: ch = 0xFF; break;
+ case 0x02DB: ch = 0xB2; break;
+ case 0x02DD: ch = 0xBD; break;
+ case 0x2022: ch = 0x07; break;
+ case 0x203C: ch = 0x13; break;
+ case 0x2190: ch = 0x1B; break;
+ case 0x2191: ch = 0x18; break;
+ case 0x2192: ch = 0x1A; break;
+ case 0x2193: ch = 0x19; break;
+ case 0x2194: ch = 0x1D; break;
+ case 0x2195: ch = 0x12; break;
+ case 0x21A8: ch = 0x17; break;
+ case 0x221F: ch = 0x1C; break;
+ case 0x2500: ch = 0x94; break;
+ case 0x2502: ch = 0x83; break;
+ case 0x250C: ch = 0x86; break;
+ case 0x2510: ch = 0x8F; break;
+ case 0x2514: ch = 0x90; break;
+ case 0x2518: ch = 0x85; break;
+ case 0x251C: ch = 0x93; break;
+ case 0x2524: ch = 0x84; break;
+ case 0x252C: ch = 0x92; break;
+ case 0x2534: ch = 0x91; break;
+ case 0x253C: ch = 0x95; break;
+ case 0x2550: ch = 0x9D; break;
+ case 0x2551: ch = 0x8A; break;
+ case 0x2554: ch = 0x99; break;
+ case 0x2557: ch = 0x8B; break;
+ case 0x255A: ch = 0x98; break;
+ case 0x255D: ch = 0x8C; break;
+ case 0x2560: ch = 0x9C; break;
+ case 0x2563: ch = 0x89; break;
+ case 0x2566: ch = 0x9B; break;
+ case 0x2569: ch = 0x9A; break;
+ case 0x256C: ch = 0x9E; break;
+ case 0x2580: ch = 0x97; break;
+ case 0x2584: ch = 0x96; break;
+ case 0x2588: ch = 0x87; break;
+ case 0x2591: ch = 0x80; break;
+ case 0x2592: ch = 0x81; break;
+ case 0x2593: ch = 0x82; break;
+ case 0x25AC: ch = 0x16; break;
+ case 0x25B2: ch = 0x1E; break;
+ case 0x25BA: ch = 0x10; break;
+ case 0x25BC: ch = 0x1F; break;
+ case 0x25C4: ch = 0x11; break;
+ case 0x25CB: ch = 0x09; break;
+ case 0x25D8: ch = 0x08; break;
+ case 0x25D9: ch = 0x0A; break;
+ case 0x263A: ch = 0x01; break;
+ case 0x263B: ch = 0x02; break;
+ case 0x263C: ch = 0x0F; break;
+ case 0x2640: ch = 0x0C; break;
+ case 0x2642: ch = 0x0B; break;
+ case 0x2660: ch = 0x06; break;
+ case 0x2663: ch = 0x05; break;
+ case 0x2665: ch = 0x03; break;
+ case 0x2666: ch = 0x04; break;
+ case 0x266A: ch = 0x0D; break;
+ case 0x266C: ch = 0x0E; break;
+ case 0xFFE8: ch = 0x83; break;
+ case 0xFFE9: ch = 0x1B; break;
+ case 0xFFEA: ch = 0x18; break;
+ case 0xFFEB: ch = 0x1A; break;
+ case 0xFFEC: ch = 0x19; break;
+ case 0xFFEE: ch = 0x09; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 161) switch(ch)
+ {
+ case 0x00A4:
+ case 0x00A7:
+ case 0x00A8:
+ case 0x00AD:
+ case 0x00B0:
+ case 0x00B4:
+ case 0x00B8:
+ case 0x00C1:
+ case 0x00C2:
+ case 0x00C4:
+ case 0x00C7:
+ case 0x00C9:
+ case 0x00CB:
+ case 0x00CD:
+ case 0x00CE:
+ case 0x00D0:
+ case 0x00D3:
+ case 0x00D4:
+ case 0x00D6:
+ case 0x00D7:
+ case 0x00DA:
+ case 0x00DC:
+ case 0x00DD:
+ case 0x00DF:
+ case 0x00E1:
+ case 0x00E2:
+ case 0x00E4:
+ case 0x00E7:
+ case 0x00E9:
+ case 0x00EB:
+ case 0x00ED:
+ case 0x00EE:
+ case 0x00F3:
+ case 0x00F4:
+ case 0x00F6:
+ case 0x00F7:
+ case 0x00FA:
+ case 0x00FC:
+ case 0x00FD:
+ break;
+ case 0x00A2: ch = 0x8D; break;
+ case 0x00A5: ch = 0x8E; break;
+ case 0x00A9: ch = 0x88; break;
+ case 0x00AE: ch = 0x9F; break;
+ case 0x00B6: ch = 0x14; break;
+ case 0x0102: ch = 0xC3; break;
+ case 0x0103: ch = 0xE3; break;
+ case 0x0104: ch = 0xA1; break;
+ case 0x0105: ch = 0xB1; break;
+ case 0x0106: ch = 0xC6; break;
+ case 0x0107: ch = 0xE6; break;
+ case 0x010C: ch = 0xC8; break;
+ case 0x010D: ch = 0xE8; break;
+ case 0x010E: ch = 0xCF; break;
+ case 0x010F: ch = 0xEF; break;
+ case 0x0110: ch = 0xD0; break;
+ case 0x0111: ch = 0xF0; break;
+ case 0x0118: ch = 0xCA; break;
+ case 0x0119: ch = 0xEA; break;
+ case 0x011A: ch = 0xCC; break;
+ case 0x011B: ch = 0xEC; break;
+ case 0x0139: ch = 0xC5; break;
+ case 0x013A: ch = 0xE5; break;
+ case 0x013D: ch = 0xA5; break;
+ case 0x013E: ch = 0xB5; break;
+ case 0x0141: ch = 0xA3; break;
+ case 0x0142: ch = 0xB3; break;
+ case 0x0143: ch = 0xD1; break;
+ case 0x0144: ch = 0xF1; break;
+ case 0x0147: ch = 0xD2; break;
+ case 0x0148: ch = 0xF2; break;
+ case 0x0150: ch = 0xD5; break;
+ case 0x0151: ch = 0xF5; break;
+ case 0x0154: ch = 0xC0; break;
+ case 0x0155: ch = 0xE0; break;
+ case 0x0158: ch = 0xD8; break;
+ case 0x0159: ch = 0xF8; break;
+ case 0x015A: ch = 0xA6; break;
+ case 0x015B: ch = 0xB6; break;
+ case 0x015E: ch = 0xAA; break;
+ case 0x015F: ch = 0xBA; break;
+ case 0x0160: ch = 0xA9; break;
+ case 0x0161: ch = 0xB9; break;
+ case 0x0162: ch = 0xDE; break;
+ case 0x0163: ch = 0xFE; break;
+ case 0x0164: ch = 0xAB; break;
+ case 0x0165: ch = 0xBB; break;
+ case 0x016E: ch = 0xD9; break;
+ case 0x016F: ch = 0xF9; break;
+ case 0x0170: ch = 0xDB; break;
+ case 0x0171: ch = 0xFB; break;
+ case 0x0179: ch = 0xAC; break;
+ case 0x017A: ch = 0xBC; break;
+ case 0x017B: ch = 0xAF; break;
+ case 0x017C: ch = 0xBF; break;
+ case 0x017D: ch = 0xAE; break;
+ case 0x017E: ch = 0xBE; break;
+ case 0x02C7: ch = 0xB7; break;
+ case 0x02D8: ch = 0xA2; break;
+ case 0x02D9: ch = 0xFF; break;
+ case 0x02DB: ch = 0xB2; break;
+ case 0x02DD: ch = 0xBD; break;
+ case 0x2022: ch = 0x07; break;
+ case 0x203C: ch = 0x13; break;
+ case 0x2190: ch = 0x1B; break;
+ case 0x2191: ch = 0x18; break;
+ case 0x2192: ch = 0x1A; break;
+ case 0x2193: ch = 0x19; break;
+ case 0x2194: ch = 0x1D; break;
+ case 0x2195: ch = 0x12; break;
+ case 0x21A8: ch = 0x17; break;
+ case 0x221F: ch = 0x1C; break;
+ case 0x2500: ch = 0x94; break;
+ case 0x2502: ch = 0x83; break;
+ case 0x250C: ch = 0x86; break;
+ case 0x2510: ch = 0x8F; break;
+ case 0x2514: ch = 0x90; break;
+ case 0x2518: ch = 0x85; break;
+ case 0x251C: ch = 0x93; break;
+ case 0x2524: ch = 0x84; break;
+ case 0x252C: ch = 0x92; break;
+ case 0x2534: ch = 0x91; break;
+ case 0x253C: ch = 0x95; break;
+ case 0x2550: ch = 0x9D; break;
+ case 0x2551: ch = 0x8A; break;
+ case 0x2554: ch = 0x99; break;
+ case 0x2557: ch = 0x8B; break;
+ case 0x255A: ch = 0x98; break;
+ case 0x255D: ch = 0x8C; break;
+ case 0x2560: ch = 0x9C; break;
+ case 0x2563: ch = 0x89; break;
+ case 0x2566: ch = 0x9B; break;
+ case 0x2569: ch = 0x9A; break;
+ case 0x256C: ch = 0x9E; break;
+ case 0x2580: ch = 0x97; break;
+ case 0x2584: ch = 0x96; break;
+ case 0x2588: ch = 0x87; break;
+ case 0x2591: ch = 0x80; break;
+ case 0x2592: ch = 0x81; break;
+ case 0x2593: ch = 0x82; break;
+ case 0x25AC: ch = 0x16; break;
+ case 0x25B2: ch = 0x1E; break;
+ case 0x25BA: ch = 0x10; break;
+ case 0x25BC: ch = 0x1F; break;
+ case 0x25C4: ch = 0x11; break;
+ case 0x25CB: ch = 0x09; break;
+ case 0x25D8: ch = 0x08; break;
+ case 0x25D9: ch = 0x0A; break;
+ case 0x263A: ch = 0x01; break;
+ case 0x263B: ch = 0x02; break;
+ case 0x263C: ch = 0x0F; break;
+ case 0x2640: ch = 0x0C; break;
+ case 0x2642: ch = 0x0B; break;
+ case 0x2660: ch = 0x06; break;
+ case 0x2663: ch = 0x05; break;
+ case 0x2665: ch = 0x03; break;
+ case 0x2666: ch = 0x04; break;
+ case 0x266A: ch = 0x0D; break;
+ case 0x266C: ch = 0x0E; break;
+ case 0xFFE8: ch = 0x83; break;
+ case 0xFFE9: ch = 0x1B; break;
+ case 0xFFEA: ch = 0x18; break;
+ case 0xFFEB: ch = 0x1A; break;
+ case 0xFFEC: ch = 0x19; break;
+ case 0xFFEE: ch = 0x09; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP28592
+
+public class ENCiso_8859_2 : CP28592
+{
+ public ENCiso_8859_2() : base() {}
+
+}; // class ENCiso_8859_2
+
+}; // namespace I18N.West
diff --git a/mcs/class/I18N/West/CP28593.cs b/mcs/class/I18N/West/CP28593.cs
new file mode 100644
index 00000000000..93f93e494de
--- /dev/null
+++ b/mcs/class/I18N/West/CP28593.cs
@@ -0,0 +1,319 @@
+/*
+ * CP28593.cs - Latin 3 (ISO) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-913.ucm".
+
+namespace I18N.West
+{
+
+using System;
+using I18N.Common;
+
+public class CP28593 : ByteEncoding
+{
+ public CP28593()
+ : base(28593, ToChars, "Latin 3 (ISO)",
+ "iso-8859-3", "iso-8859-3", "iso-8859-3",
+ true, true, true, true, 28593)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
+ '\u0006', '\u0007', '\u0008', '\u0009', '\u000A', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
+ '\u0018', '\u0019', '\u001A', '\u001B', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
+ '\u0024', '\u0025', '\u0026', '\u0027', '\u0028', '\u0029',
+ '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
+ '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
+ '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
+ '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
+ '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
+ '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
+ '\u005A', '\u005B', '\u005C', '\u005D', '\u005E', '\u005F',
+ '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
+ '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
+ '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
+ '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
+ '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
+ '\u007E', '\u007F', '\u0080', '\u0081', '\u0082', '\u0083',
+ '\u0084', '\u0085', '\u0086', '\u0087', '\u0088', '\u0089',
+ '\u008A', '\u008B', '\u008C', '\u008D', '\u008E', '\u008F',
+ '\u0090', '\u0091', '\u0092', '\u0093', '\u0094', '\u0095',
+ '\u0096', '\u0097', '\u0098', '\u0099', '\u009A', '\u009B',
+ '\u009C', '\u009D', '\u009E', '\u009F', '\u00A0', '\u0126',
+ '\u02D8', '\u00A3', '\u00A4', '\u003F', '\u0124', '\u00A7',
+ '\u00A8', '\u0130', '\u015E', '\u011E', '\u0134', '\u00AD',
+ '\u003F', '\u017B', '\u00B0', '\u0127', '\u00B2', '\u00B3',
+ '\u00B4', '\u00B5', '\u0125', '\u00B7', '\u00B8', '\u0131',
+ '\u015F', '\u011F', '\u0135', '\u00BD', '\u003F', '\u017C',
+ '\u00C0', '\u00C1', '\u00C2', '\u003F', '\u00C4', '\u010A',
+ '\u0108', '\u00C7', '\u00C8', '\u00C9', '\u00CA', '\u00CB',
+ '\u00CC', '\u00CD', '\u00CE', '\u00CF', '\u003F', '\u00D1',
+ '\u00D2', '\u00D3', '\u00D4', '\u0120', '\u00D6', '\u00D7',
+ '\u011C', '\u00D9', '\u00DA', '\u00DB', '\u00DC', '\u016C',
+ '\u015C', '\u00DF', '\u00E0', '\u00E1', '\u00E2', '\u003F',
+ '\u00E4', '\u010B', '\u0109', '\u00E7', '\u00E8', '\u00E9',
+ '\u00EA', '\u00EB', '\u00EC', '\u00ED', '\u00EE', '\u00EF',
+ '\u003F', '\u00F1', '\u00F2', '\u00F3', '\u00F4', '\u0121',
+ '\u00F6', '\u00F7', '\u011D', '\u00F9', '\u00FA', '\u00FB',
+ '\u00FC', '\u016D', '\u015D', '\u02D9',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 161) switch(ch)
+ {
+ case 0x00A3:
+ case 0x00A4:
+ case 0x00A7:
+ case 0x00A8:
+ case 0x00AD:
+ case 0x00B0:
+ case 0x00B2:
+ case 0x00B3:
+ case 0x00B4:
+ case 0x00B5:
+ case 0x00B7:
+ case 0x00B8:
+ case 0x00BD:
+ case 0x00C0:
+ case 0x00C1:
+ case 0x00C2:
+ case 0x00C4:
+ case 0x00C7:
+ case 0x00C8:
+ case 0x00C9:
+ case 0x00CA:
+ case 0x00CB:
+ case 0x00CC:
+ case 0x00CD:
+ case 0x00CE:
+ case 0x00CF:
+ case 0x00D1:
+ case 0x00D2:
+ case 0x00D3:
+ case 0x00D4:
+ case 0x00D6:
+ case 0x00D7:
+ case 0x00D9:
+ case 0x00DA:
+ case 0x00DB:
+ case 0x00DC:
+ case 0x00DF:
+ case 0x00E0:
+ case 0x00E1:
+ case 0x00E2:
+ case 0x00E4:
+ case 0x00E7:
+ case 0x00E8:
+ case 0x00E9:
+ case 0x00EA:
+ case 0x00EB:
+ case 0x00EC:
+ case 0x00ED:
+ case 0x00EE:
+ case 0x00EF:
+ case 0x00F1:
+ case 0x00F2:
+ case 0x00F3:
+ case 0x00F4:
+ case 0x00F6:
+ case 0x00F7:
+ case 0x00F9:
+ case 0x00FA:
+ case 0x00FB:
+ case 0x00FC:
+ break;
+ case 0x0108: ch = 0xC6; break;
+ case 0x0109: ch = 0xE6; break;
+ case 0x010A: ch = 0xC5; break;
+ case 0x010B: ch = 0xE5; break;
+ case 0x011C: ch = 0xD8; break;
+ case 0x011D: ch = 0xF8; break;
+ case 0x011E: ch = 0xAB; break;
+ case 0x011F: ch = 0xBB; break;
+ case 0x0120: ch = 0xD5; break;
+ case 0x0121: ch = 0xF5; break;
+ case 0x0124: ch = 0xA6; break;
+ case 0x0125: ch = 0xB6; break;
+ case 0x0126: ch = 0xA1; break;
+ case 0x0127: ch = 0xB1; break;
+ case 0x0130: ch = 0xA9; break;
+ case 0x0131: ch = 0xB9; break;
+ case 0x0134: ch = 0xAC; break;
+ case 0x0135: ch = 0xBC; break;
+ case 0x015C: ch = 0xDE; break;
+ case 0x015D: ch = 0xFE; break;
+ case 0x015E: ch = 0xAA; break;
+ case 0x015F: ch = 0xBA; break;
+ case 0x016C: ch = 0xDD; break;
+ case 0x016D: ch = 0xFD; break;
+ case 0x017B: ch = 0xAF; break;
+ case 0x017C: ch = 0xBF; break;
+ case 0x02D8: ch = 0xA2; break;
+ case 0x02D9: ch = 0xFF; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 161) switch(ch)
+ {
+ case 0x00A3:
+ case 0x00A4:
+ case 0x00A7:
+ case 0x00A8:
+ case 0x00AD:
+ case 0x00B0:
+ case 0x00B2:
+ case 0x00B3:
+ case 0x00B4:
+ case 0x00B5:
+ case 0x00B7:
+ case 0x00B8:
+ case 0x00BD:
+ case 0x00C0:
+ case 0x00C1:
+ case 0x00C2:
+ case 0x00C4:
+ case 0x00C7:
+ case 0x00C8:
+ case 0x00C9:
+ case 0x00CA:
+ case 0x00CB:
+ case 0x00CC:
+ case 0x00CD:
+ case 0x00CE:
+ case 0x00CF:
+ case 0x00D1:
+ case 0x00D2:
+ case 0x00D3:
+ case 0x00D4:
+ case 0x00D6:
+ case 0x00D7:
+ case 0x00D9:
+ case 0x00DA:
+ case 0x00DB:
+ case 0x00DC:
+ case 0x00DF:
+ case 0x00E0:
+ case 0x00E1:
+ case 0x00E2:
+ case 0x00E4:
+ case 0x00E7:
+ case 0x00E8:
+ case 0x00E9:
+ case 0x00EA:
+ case 0x00EB:
+ case 0x00EC:
+ case 0x00ED:
+ case 0x00EE:
+ case 0x00EF:
+ case 0x00F1:
+ case 0x00F2:
+ case 0x00F3:
+ case 0x00F4:
+ case 0x00F6:
+ case 0x00F7:
+ case 0x00F9:
+ case 0x00FA:
+ case 0x00FB:
+ case 0x00FC:
+ break;
+ case 0x0108: ch = 0xC6; break;
+ case 0x0109: ch = 0xE6; break;
+ case 0x010A: ch = 0xC5; break;
+ case 0x010B: ch = 0xE5; break;
+ case 0x011C: ch = 0xD8; break;
+ case 0x011D: ch = 0xF8; break;
+ case 0x011E: ch = 0xAB; break;
+ case 0x011F: ch = 0xBB; break;
+ case 0x0120: ch = 0xD5; break;
+ case 0x0121: ch = 0xF5; break;
+ case 0x0124: ch = 0xA6; break;
+ case 0x0125: ch = 0xB6; break;
+ case 0x0126: ch = 0xA1; break;
+ case 0x0127: ch = 0xB1; break;
+ case 0x0130: ch = 0xA9; break;
+ case 0x0131: ch = 0xB9; break;
+ case 0x0134: ch = 0xAC; break;
+ case 0x0135: ch = 0xBC; break;
+ case 0x015C: ch = 0xDE; break;
+ case 0x015D: ch = 0xFE; break;
+ case 0x015E: ch = 0xAA; break;
+ case 0x015F: ch = 0xBA; break;
+ case 0x016C: ch = 0xDD; break;
+ case 0x016D: ch = 0xFD; break;
+ case 0x017B: ch = 0xAF; break;
+ case 0x017C: ch = 0xBF; break;
+ case 0x02D8: ch = 0xA2; break;
+ case 0x02D9: ch = 0xFF; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP28593
+
+public class ENCiso_8859_3 : CP28593
+{
+ public ENCiso_8859_3() : base() {}
+
+}; // class ENCiso_8859_3
+
+}; // namespace I18N.West
diff --git a/mcs/class/I18N/West/CP28597.cs b/mcs/class/I18N/West/CP28597.cs
new file mode 100644
index 00000000000..b4a25378f03
--- /dev/null
+++ b/mcs/class/I18N/West/CP28597.cs
@@ -0,0 +1,339 @@
+/*
+ * CP28597.cs - Greek (ISO) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-4909.ucm".
+
+namespace I18N.West
+{
+
+using System;
+using I18N.Common;
+
+public class CP28597 : ByteEncoding
+{
+ public CP28597()
+ : base(28597, ToChars, "Greek (ISO)",
+ "iso-8859-7", "iso-8859-7", "iso-8859-7",
+ true, true, true, true, 1253)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
+ '\u0006', '\u0007', '\u0008', '\u0009', '\u000A', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
+ '\u0018', '\u0019', '\u001A', '\u001B', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
+ '\u0024', '\u0025', '\u0026', '\u0027', '\u0028', '\u0029',
+ '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
+ '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
+ '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
+ '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
+ '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
+ '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
+ '\u005A', '\u005B', '\u005C', '\u005D', '\u005E', '\u005F',
+ '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
+ '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
+ '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
+ '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
+ '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
+ '\u007E', '\u007F', '\u0080', '\u0081', '\u0082', '\u0083',
+ '\u0084', '\u0085', '\u0086', '\u0087', '\u0088', '\u0089',
+ '\u008A', '\u008B', '\u008C', '\u008D', '\u008E', '\u008F',
+ '\u0090', '\u0091', '\u0092', '\u0093', '\u0094', '\u0095',
+ '\u0096', '\u0097', '\u0098', '\u0099', '\u009A', '\u009B',
+ '\u009C', '\u009D', '\u009E', '\u009F', '\u00A0', '\u2018',
+ '\u2019', '\u00A3', '\u20AC', '\u003F', '\u00A6', '\u00A7',
+ '\u00A8', '\u00A9', '\u003F', '\u00AB', '\u00AC', '\u00AD',
+ '\u003F', '\u2015', '\u00B0', '\u00B1', '\u00B2', '\u00B3',
+ '\u00B4', '\u0385', '\u0386', '\u0387', '\u0388', '\u0389',
+ '\u038A', '\u00BB', '\u038C', '\u00BD', '\u038E', '\u038F',
+ '\u0390', '\u0391', '\u0392', '\u0393', '\u0394', '\u0395',
+ '\u0396', '\u0397', '\u0398', '\u0399', '\u039A', '\u039B',
+ '\u039C', '\u039D', '\u039E', '\u039F', '\u03A0', '\u03A1',
+ '\u003F', '\u03A3', '\u03A4', '\u03A5', '\u03A6', '\u03A7',
+ '\u03A8', '\u03A9', '\u03AA', '\u03AB', '\u03AC', '\u03AD',
+ '\u03AE', '\u03AF', '\u03B0', '\u03B1', '\u03B2', '\u03B3',
+ '\u03B4', '\u03B5', '\u03B6', '\u03B7', '\u03B8', '\u03B9',
+ '\u03BA', '\u03BB', '\u03BC', '\u03BD', '\u03BE', '\u03BF',
+ '\u03C0', '\u03C1', '\u03C2', '\u03C3', '\u03C4', '\u03C5',
+ '\u03C6', '\u03C7', '\u03C8', '\u03C9', '\u03CA', '\u03CB',
+ '\u03CC', '\u03CD', '\u03CE', '\u003F',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 161) switch(ch)
+ {
+ case 0x00A3:
+ case 0x00A6:
+ case 0x00A7:
+ case 0x00A8:
+ case 0x00A9:
+ case 0x00AB:
+ case 0x00AC:
+ case 0x00AD:
+ case 0x00B0:
+ case 0x00B1:
+ case 0x00B2:
+ case 0x00B3:
+ case 0x00B4:
+ case 0x00B7:
+ case 0x00BB:
+ case 0x00BD:
+ break;
+ case 0x0385:
+ case 0x0386:
+ case 0x0387:
+ case 0x0388:
+ case 0x0389:
+ case 0x038A:
+ ch -= 0x02D0;
+ break;
+ case 0x038C: ch = 0xBC; break;
+ case 0x038E:
+ case 0x038F:
+ case 0x0390:
+ case 0x0391:
+ case 0x0392:
+ case 0x0393:
+ case 0x0394:
+ case 0x0395:
+ case 0x0396:
+ case 0x0397:
+ case 0x0398:
+ case 0x0399:
+ case 0x039A:
+ case 0x039B:
+ case 0x039C:
+ case 0x039D:
+ case 0x039E:
+ case 0x039F:
+ case 0x03A0:
+ case 0x03A1:
+ ch -= 0x02D0;
+ break;
+ case 0x03A3:
+ case 0x03A4:
+ case 0x03A5:
+ case 0x03A6:
+ case 0x03A7:
+ case 0x03A8:
+ case 0x03A9:
+ case 0x03AA:
+ case 0x03AB:
+ case 0x03AC:
+ case 0x03AD:
+ case 0x03AE:
+ case 0x03AF:
+ case 0x03B0:
+ case 0x03B1:
+ case 0x03B2:
+ case 0x03B3:
+ case 0x03B4:
+ case 0x03B5:
+ case 0x03B6:
+ case 0x03B7:
+ case 0x03B8:
+ case 0x03B9:
+ case 0x03BA:
+ case 0x03BB:
+ case 0x03BC:
+ case 0x03BD:
+ case 0x03BE:
+ case 0x03BF:
+ case 0x03C0:
+ case 0x03C1:
+ case 0x03C2:
+ case 0x03C3:
+ case 0x03C4:
+ case 0x03C5:
+ case 0x03C6:
+ case 0x03C7:
+ case 0x03C8:
+ case 0x03C9:
+ case 0x03CA:
+ case 0x03CB:
+ case 0x03CC:
+ case 0x03CD:
+ case 0x03CE:
+ ch -= 0x02D0;
+ break;
+ case 0x03D5: ch = 0xF6; break;
+ case 0x2015: ch = 0xAF; break;
+ case 0x2018: ch = 0xA1; break;
+ case 0x2019: ch = 0xA2; break;
+ case 0x20AC: ch = 0xA4; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 161) switch(ch)
+ {
+ case 0x00A3:
+ case 0x00A6:
+ case 0x00A7:
+ case 0x00A8:
+ case 0x00A9:
+ case 0x00AB:
+ case 0x00AC:
+ case 0x00AD:
+ case 0x00B0:
+ case 0x00B1:
+ case 0x00B2:
+ case 0x00B3:
+ case 0x00B4:
+ case 0x00B7:
+ case 0x00BB:
+ case 0x00BD:
+ break;
+ case 0x0385:
+ case 0x0386:
+ case 0x0387:
+ case 0x0388:
+ case 0x0389:
+ case 0x038A:
+ ch -= 0x02D0;
+ break;
+ case 0x038C: ch = 0xBC; break;
+ case 0x038E:
+ case 0x038F:
+ case 0x0390:
+ case 0x0391:
+ case 0x0392:
+ case 0x0393:
+ case 0x0394:
+ case 0x0395:
+ case 0x0396:
+ case 0x0397:
+ case 0x0398:
+ case 0x0399:
+ case 0x039A:
+ case 0x039B:
+ case 0x039C:
+ case 0x039D:
+ case 0x039E:
+ case 0x039F:
+ case 0x03A0:
+ case 0x03A1:
+ ch -= 0x02D0;
+ break;
+ case 0x03A3:
+ case 0x03A4:
+ case 0x03A5:
+ case 0x03A6:
+ case 0x03A7:
+ case 0x03A8:
+ case 0x03A9:
+ case 0x03AA:
+ case 0x03AB:
+ case 0x03AC:
+ case 0x03AD:
+ case 0x03AE:
+ case 0x03AF:
+ case 0x03B0:
+ case 0x03B1:
+ case 0x03B2:
+ case 0x03B3:
+ case 0x03B4:
+ case 0x03B5:
+ case 0x03B6:
+ case 0x03B7:
+ case 0x03B8:
+ case 0x03B9:
+ case 0x03BA:
+ case 0x03BB:
+ case 0x03BC:
+ case 0x03BD:
+ case 0x03BE:
+ case 0x03BF:
+ case 0x03C0:
+ case 0x03C1:
+ case 0x03C2:
+ case 0x03C3:
+ case 0x03C4:
+ case 0x03C5:
+ case 0x03C6:
+ case 0x03C7:
+ case 0x03C8:
+ case 0x03C9:
+ case 0x03CA:
+ case 0x03CB:
+ case 0x03CC:
+ case 0x03CD:
+ case 0x03CE:
+ ch -= 0x02D0;
+ break;
+ case 0x03D5: ch = 0xF6; break;
+ case 0x2015: ch = 0xAF; break;
+ case 0x2018: ch = 0xA1; break;
+ case 0x2019: ch = 0xA2; break;
+ case 0x20AC: ch = 0xA4; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP28597
+
+public class ENCiso_8859_7 : CP28597
+{
+ public ENCiso_8859_7() : base() {}
+
+}; // class ENCiso_8859_7
+
+}; // namespace I18N.West
diff --git a/mcs/class/I18N/West/CP28605.cs b/mcs/class/I18N/West/CP28605.cs
new file mode 100644
index 00000000000..71ab3c9f01d
--- /dev/null
+++ b/mcs/class/I18N/West/CP28605.cs
@@ -0,0 +1,327 @@
+/*
+ * CP28605.cs - Latin 9 (ISO) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-923.ucm".
+
+namespace I18N.West
+{
+
+using System;
+using I18N.Common;
+
+public class CP28605 : ByteEncoding
+{
+ public CP28605()
+ : base(28605, ToChars, "Latin 9 (ISO)",
+ "iso-8859-15", "iso-8859-15", "iso-8859-15",
+ false, true, true, true, 1252)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
+ '\u0006', '\u0007', '\u0008', '\u0009', '\u000A', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
+ '\u0018', '\u0019', '\u001A', '\u001B', '\u001C', '\u001D',
+ '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
+ '\u0024', '\u0025', '\u0026', '\u0027', '\u0028', '\u0029',
+ '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
+ '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
+ '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
+ '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
+ '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
+ '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
+ '\u005A', '\u005B', '\u005C', '\u005D', '\u005E', '\u005F',
+ '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
+ '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
+ '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
+ '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
+ '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
+ '\u007E', '\u007F', '\u0080', '\u0081', '\u0082', '\u0083',
+ '\u0084', '\u0085', '\u0086', '\u0087', '\u0088', '\u0089',
+ '\u008A', '\u008B', '\u008C', '\u008D', '\u008E', '\u008F',
+ '\u0090', '\u0091', '\u0092', '\u0093', '\u0094', '\u0095',
+ '\u0096', '\u0097', '\u0098', '\u0099', '\u009A', '\u009B',
+ '\u009C', '\u009D', '\u009E', '\u009F', '\u00A0', '\u00A1',
+ '\u00A2', '\u00A3', '\u20AC', '\u00A5', '\u0160', '\u00A7',
+ '\u0161', '\u00A9', '\u00AA', '\u00AB', '\u00AC', '\u00AD',
+ '\u00AE', '\u00AF', '\u00B0', '\u00B1', '\u00B2', '\u00B3',
+ '\u017D', '\u00B5', '\u00B6', '\u00B7', '\u017E', '\u00B9',
+ '\u00BA', '\u00BB', '\u0152', '\u0153', '\u0178', '\u00BF',
+ '\u00C0', '\u00C1', '\u00C2', '\u00C3', '\u00C4', '\u00C5',
+ '\u00C6', '\u00C7', '\u00C8', '\u00C9', '\u00CA', '\u00CB',
+ '\u00CC', '\u00CD', '\u00CE', '\u00CF', '\u00D0', '\u00D1',
+ '\u00D2', '\u00D3', '\u00D4', '\u00D5', '\u00D6', '\u00D7',
+ '\u00D8', '\u00D9', '\u00DA', '\u00DB', '\u00DC', '\u00DD',
+ '\u00DE', '\u00DF', '\u00E0', '\u00E1', '\u00E2', '\u00E3',
+ '\u00E4', '\u00E5', '\u00E6', '\u00E7', '\u00E8', '\u00E9',
+ '\u00EA', '\u00EB', '\u00EC', '\u00ED', '\u00EE', '\u00EF',
+ '\u00F0', '\u00F1', '\u00F2', '\u00F3', '\u00F4', '\u00F5',
+ '\u00F6', '\u00F7', '\u00F8', '\u00F9', '\u00FA', '\u00FB',
+ '\u00FC', '\u00FD', '\u00FE', '\u00FF',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 164) switch(ch)
+ {
+ case 0x00A5:
+ case 0x00A7:
+ case 0x00A9:
+ case 0x00AA:
+ case 0x00AB:
+ case 0x00AC:
+ case 0x00AD:
+ case 0x00AE:
+ case 0x00AF:
+ case 0x00B0:
+ case 0x00B1:
+ case 0x00B2:
+ case 0x00B3:
+ case 0x00B5:
+ case 0x00B6:
+ case 0x00B7:
+ case 0x00B9:
+ case 0x00BA:
+ case 0x00BB:
+ case 0x00BF:
+ case 0x00C0:
+ case 0x00C1:
+ case 0x00C2:
+ case 0x00C3:
+ case 0x00C4:
+ case 0x00C5:
+ case 0x00C6:
+ case 0x00C7:
+ case 0x00C8:
+ case 0x00C9:
+ case 0x00CA:
+ case 0x00CB:
+ case 0x00CC:
+ case 0x00CD:
+ case 0x00CE:
+ case 0x00CF:
+ case 0x00D0:
+ case 0x00D1:
+ case 0x00D2:
+ case 0x00D3:
+ case 0x00D4:
+ case 0x00D5:
+ case 0x00D6:
+ case 0x00D7:
+ case 0x00D8:
+ case 0x00D9:
+ case 0x00DA:
+ case 0x00DB:
+ case 0x00DC:
+ case 0x00DD:
+ case 0x00DE:
+ case 0x00DF:
+ case 0x00E0:
+ case 0x00E1:
+ case 0x00E2:
+ case 0x00E3:
+ case 0x00E4:
+ case 0x00E5:
+ case 0x00E6:
+ case 0x00E7:
+ case 0x00E8:
+ case 0x00E9:
+ case 0x00EA:
+ case 0x00EB:
+ case 0x00EC:
+ case 0x00ED:
+ case 0x00EE:
+ case 0x00EF:
+ case 0x00F0:
+ case 0x00F1:
+ case 0x00F2:
+ case 0x00F3:
+ case 0x00F4:
+ case 0x00F5:
+ case 0x00F6:
+ case 0x00F7:
+ case 0x00F8:
+ case 0x00F9:
+ case 0x00FA:
+ case 0x00FB:
+ case 0x00FC:
+ case 0x00FD:
+ case 0x00FE:
+ case 0x00FF:
+ break;
+ case 0x0152: ch = 0xBC; break;
+ case 0x0153: ch = 0xBD; break;
+ case 0x0160: ch = 0xA6; break;
+ case 0x0161: ch = 0xA8; break;
+ case 0x0178: ch = 0xBE; break;
+ case 0x017D: ch = 0xB4; break;
+ case 0x017E: ch = 0xB8; break;
+ case 0x20AC: ch = 0xA4; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 164) switch(ch)
+ {
+ case 0x00A5:
+ case 0x00A7:
+ case 0x00A9:
+ case 0x00AA:
+ case 0x00AB:
+ case 0x00AC:
+ case 0x00AD:
+ case 0x00AE:
+ case 0x00AF:
+ case 0x00B0:
+ case 0x00B1:
+ case 0x00B2:
+ case 0x00B3:
+ case 0x00B5:
+ case 0x00B6:
+ case 0x00B7:
+ case 0x00B9:
+ case 0x00BA:
+ case 0x00BB:
+ case 0x00BF:
+ case 0x00C0:
+ case 0x00C1:
+ case 0x00C2:
+ case 0x00C3:
+ case 0x00C4:
+ case 0x00C5:
+ case 0x00C6:
+ case 0x00C7:
+ case 0x00C8:
+ case 0x00C9:
+ case 0x00CA:
+ case 0x00CB:
+ case 0x00CC:
+ case 0x00CD:
+ case 0x00CE:
+ case 0x00CF:
+ case 0x00D0:
+ case 0x00D1:
+ case 0x00D2:
+ case 0x00D3:
+ case 0x00D4:
+ case 0x00D5:
+ case 0x00D6:
+ case 0x00D7:
+ case 0x00D8:
+ case 0x00D9:
+ case 0x00DA:
+ case 0x00DB:
+ case 0x00DC:
+ case 0x00DD:
+ case 0x00DE:
+ case 0x00DF:
+ case 0x00E0:
+ case 0x00E1:
+ case 0x00E2:
+ case 0x00E3:
+ case 0x00E4:
+ case 0x00E5:
+ case 0x00E6:
+ case 0x00E7:
+ case 0x00E8:
+ case 0x00E9:
+ case 0x00EA:
+ case 0x00EB:
+ case 0x00EC:
+ case 0x00ED:
+ case 0x00EE:
+ case 0x00EF:
+ case 0x00F0:
+ case 0x00F1:
+ case 0x00F2:
+ case 0x00F3:
+ case 0x00F4:
+ case 0x00F5:
+ case 0x00F6:
+ case 0x00F7:
+ case 0x00F8:
+ case 0x00F9:
+ case 0x00FA:
+ case 0x00FB:
+ case 0x00FC:
+ case 0x00FD:
+ case 0x00FE:
+ case 0x00FF:
+ break;
+ case 0x0152: ch = 0xBC; break;
+ case 0x0153: ch = 0xBD; break;
+ case 0x0160: ch = 0xA6; break;
+ case 0x0161: ch = 0xA8; break;
+ case 0x0178: ch = 0xBE; break;
+ case 0x017D: ch = 0xB4; break;
+ case 0x017E: ch = 0xB8; break;
+ case 0x20AC: ch = 0xA4; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP28605
+
+public class ENCiso_8859_15 : CP28605
+{
+ public ENCiso_8859_15() : base() {}
+
+}; // class ENCiso_8859_15
+
+}; // namespace I18N.West
diff --git a/mcs/class/I18N/West/CP437.cs b/mcs/class/I18N/West/CP437.cs
new file mode 100644
index 00000000000..8a67bfd158e
--- /dev/null
+++ b/mcs/class/I18N/West/CP437.cs
@@ -0,0 +1,681 @@
+/*
+ * CP437.cs - OEM United States code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-437.ucm".
+
+namespace I18N.West
+{
+
+using System;
+using I18N.Common;
+
+public class CP437 : ByteEncoding
+{
+ public CP437()
+ : base(437, ToChars, "OEM United States",
+ "IBM437", "IBM437", "IBM437",
+ false, false, false, false, 1252)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
+ '\u0006', '\u0007', '\u0008', '\u0009', '\u000A', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
+ '\u0018', '\u0019', '\u001C', '\u001B', '\u007F', '\u001D',
+ '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
+ '\u0024', '\u0025', '\u0026', '\u0027', '\u0028', '\u0029',
+ '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
+ '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
+ '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
+ '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
+ '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
+ '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
+ '\u005A', '\u005B', '\u005C', '\u005D', '\u005E', '\u005F',
+ '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
+ '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
+ '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
+ '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
+ '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
+ '\u007E', '\u001A', '\u00C7', '\u00FC', '\u00E9', '\u00E2',
+ '\u00E4', '\u00E0', '\u00E5', '\u00E7', '\u00EA', '\u00EB',
+ '\u00E8', '\u00EF', '\u00EE', '\u00EC', '\u00C4', '\u00C5',
+ '\u00C9', '\u00E6', '\u00C6', '\u00F4', '\u00F6', '\u00F2',
+ '\u00FB', '\u00F9', '\u00FF', '\u00D6', '\u00DC', '\u00A2',
+ '\u00A3', '\u00A5', '\u20A7', '\u0192', '\u00E1', '\u00ED',
+ '\u00F3', '\u00FA', '\u00F1', '\u00D1', '\u00AA', '\u00BA',
+ '\u00BF', '\u2310', '\u00AC', '\u00BD', '\u00BC', '\u00A1',
+ '\u00AB', '\u00BB', '\u2591', '\u2592', '\u2593', '\u2502',
+ '\u2524', '\u2561', '\u2562', '\u2556', '\u2555', '\u2563',
+ '\u2551', '\u2557', '\u255D', '\u255C', '\u255B', '\u2510',
+ '\u2514', '\u2534', '\u252C', '\u251C', '\u2500', '\u253C',
+ '\u255E', '\u255F', '\u255A', '\u2554', '\u2569', '\u2566',
+ '\u2560', '\u2550', '\u256C', '\u2567', '\u2568', '\u2564',
+ '\u2565', '\u2559', '\u2558', '\u2552', '\u2553', '\u256B',
+ '\u256A', '\u2518', '\u250C', '\u2588', '\u2584', '\u258C',
+ '\u2590', '\u2580', '\u03B1', '\u00DF', '\u0393', '\u03C0',
+ '\u03A3', '\u03C3', '\u03BC', '\u03C4', '\u03A6', '\u0398',
+ '\u03A9', '\u03B4', '\u221E', '\u03C6', '\u03B5', '\u2229',
+ '\u2261', '\u00B1', '\u2265', '\u2264', '\u2320', '\u2321',
+ '\u00F7', '\u2248', '\u00B0', '\u2219', '\u00B7', '\u221A',
+ '\u207F', '\u00B2', '\u25A0', '\u00A0',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 26) switch(ch)
+ {
+ case 0x001B:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x0020:
+ case 0x0021:
+ case 0x0022:
+ case 0x0023:
+ case 0x0024:
+ case 0x0025:
+ case 0x0026:
+ case 0x0027:
+ case 0x0028:
+ case 0x0029:
+ case 0x002A:
+ case 0x002B:
+ case 0x002C:
+ case 0x002D:
+ case 0x002E:
+ case 0x002F:
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ case 0x003A:
+ case 0x003B:
+ case 0x003C:
+ case 0x003D:
+ case 0x003E:
+ case 0x003F:
+ case 0x0040:
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ case 0x005B:
+ case 0x005C:
+ case 0x005D:
+ case 0x005E:
+ case 0x005F:
+ case 0x0060:
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ case 0x007B:
+ case 0x007C:
+ case 0x007D:
+ case 0x007E:
+ break;
+ case 0x001A: ch = 0x7F; break;
+ case 0x001C: ch = 0x1A; break;
+ case 0x007F: ch = 0x1C; break;
+ case 0x00A0: ch = 0xFF; break;
+ case 0x00A1: ch = 0xAD; break;
+ case 0x00A2: ch = 0x9B; break;
+ case 0x00A3: ch = 0x9C; break;
+ case 0x00A5: ch = 0x9D; break;
+ case 0x00A7: ch = 0x15; break;
+ case 0x00AA: ch = 0xA6; break;
+ case 0x00AB: ch = 0xAE; break;
+ case 0x00AC: ch = 0xAA; break;
+ case 0x00B0: ch = 0xF8; break;
+ case 0x00B1: ch = 0xF1; break;
+ case 0x00B2: ch = 0xFD; break;
+ case 0x00B6: ch = 0x14; break;
+ case 0x00B7: ch = 0xFA; break;
+ case 0x00BA: ch = 0xA7; break;
+ case 0x00BB: ch = 0xAF; break;
+ case 0x00BC: ch = 0xAC; break;
+ case 0x00BD: ch = 0xAB; break;
+ case 0x00BF: ch = 0xA8; break;
+ case 0x00C4: ch = 0x8E; break;
+ case 0x00C5: ch = 0x8F; break;
+ case 0x00C6: ch = 0x92; break;
+ case 0x00C7: ch = 0x80; break;
+ case 0x00C9: ch = 0x90; break;
+ case 0x00D1: ch = 0xA5; break;
+ case 0x00D6: ch = 0x99; break;
+ case 0x00DC: ch = 0x9A; break;
+ case 0x00DF: ch = 0xE1; break;
+ case 0x00E0: ch = 0x85; break;
+ case 0x00E1: ch = 0xA0; break;
+ case 0x00E2: ch = 0x83; break;
+ case 0x00E4: ch = 0x84; break;
+ case 0x00E5: ch = 0x86; break;
+ case 0x00E6: ch = 0x91; break;
+ case 0x00E7: ch = 0x87; break;
+ case 0x00E8: ch = 0x8A; break;
+ case 0x00E9: ch = 0x82; break;
+ case 0x00EA: ch = 0x88; break;
+ case 0x00EB: ch = 0x89; break;
+ case 0x00EC: ch = 0x8D; break;
+ case 0x00ED: ch = 0xA1; break;
+ case 0x00EE: ch = 0x8C; break;
+ case 0x00EF: ch = 0x8B; break;
+ case 0x00F1: ch = 0xA4; break;
+ case 0x00F2: ch = 0x95; break;
+ case 0x00F3: ch = 0xA2; break;
+ case 0x00F4: ch = 0x93; break;
+ case 0x00F6: ch = 0x94; break;
+ case 0x00F7: ch = 0xF6; break;
+ case 0x00F9: ch = 0x97; break;
+ case 0x00FA: ch = 0xA3; break;
+ case 0x00FB: ch = 0x96; break;
+ case 0x00FC: ch = 0x81; break;
+ case 0x00FF: ch = 0x98; break;
+ case 0x0192: ch = 0x9F; break;
+ case 0x0393: ch = 0xE2; break;
+ case 0x0398: ch = 0xE9; break;
+ case 0x03A3: ch = 0xE4; break;
+ case 0x03A6: ch = 0xE8; break;
+ case 0x03A9: ch = 0xEA; break;
+ case 0x03B1: ch = 0xE0; break;
+ case 0x03B4: ch = 0xEB; break;
+ case 0x03B5: ch = 0xEE; break;
+ case 0x03BC: ch = 0xE6; break;
+ case 0x03C0: ch = 0xE3; break;
+ case 0x03C3: ch = 0xE5; break;
+ case 0x03C4: ch = 0xE7; break;
+ case 0x03C6: ch = 0xED; break;
+ case 0x2022: ch = 0x07; break;
+ case 0x203C: ch = 0x13; break;
+ case 0x207F: ch = 0xFC; break;
+ case 0x20A7: ch = 0x9E; break;
+ case 0x2190: ch = 0x1B; break;
+ case 0x2191: ch = 0x18; break;
+ case 0x2192: ch = 0x1A; break;
+ case 0x2193: ch = 0x19; break;
+ case 0x2194: ch = 0x1D; break;
+ case 0x2195: ch = 0x12; break;
+ case 0x21A8: ch = 0x17; break;
+ case 0x2219: ch = 0xF9; break;
+ case 0x221A: ch = 0xFB; break;
+ case 0x221E: ch = 0xEC; break;
+ case 0x221F: ch = 0x1C; break;
+ case 0x2229: ch = 0xEF; break;
+ case 0x2248: ch = 0xF7; break;
+ case 0x2261: ch = 0xF0; break;
+ case 0x2264: ch = 0xF3; break;
+ case 0x2265: ch = 0xF2; break;
+ case 0x2302: ch = 0x7F; break;
+ case 0x2310: ch = 0xA9; break;
+ case 0x2320: ch = 0xF4; break;
+ case 0x2321: ch = 0xF5; break;
+ case 0x2500: ch = 0xC4; break;
+ case 0x2502: ch = 0xB3; break;
+ case 0x250C: ch = 0xDA; break;
+ case 0x2510: ch = 0xBF; break;
+ case 0x2514: ch = 0xC0; break;
+ case 0x2518: ch = 0xD9; break;
+ case 0x251C: ch = 0xC3; break;
+ case 0x2524: ch = 0xB4; break;
+ case 0x252C: ch = 0xC2; break;
+ case 0x2534: ch = 0xC1; break;
+ case 0x253C: ch = 0xC5; break;
+ case 0x2550: ch = 0xCD; break;
+ case 0x2551: ch = 0xBA; break;
+ case 0x2552: ch = 0xD5; break;
+ case 0x2553: ch = 0xD6; break;
+ case 0x2554: ch = 0xC9; break;
+ case 0x2555: ch = 0xB8; break;
+ case 0x2556: ch = 0xB7; break;
+ case 0x2557: ch = 0xBB; break;
+ case 0x2558: ch = 0xD4; break;
+ case 0x2559: ch = 0xD3; break;
+ case 0x255A: ch = 0xC8; break;
+ case 0x255B: ch = 0xBE; break;
+ case 0x255C: ch = 0xBD; break;
+ case 0x255D: ch = 0xBC; break;
+ case 0x255E: ch = 0xC6; break;
+ case 0x255F: ch = 0xC7; break;
+ case 0x2560: ch = 0xCC; break;
+ case 0x2561: ch = 0xB5; break;
+ case 0x2562: ch = 0xB6; break;
+ case 0x2563: ch = 0xB9; break;
+ case 0x2564: ch = 0xD1; break;
+ case 0x2565: ch = 0xD2; break;
+ case 0x2566: ch = 0xCB; break;
+ case 0x2567: ch = 0xCF; break;
+ case 0x2568: ch = 0xD0; break;
+ case 0x2569: ch = 0xCA; break;
+ case 0x256A: ch = 0xD8; break;
+ case 0x256B: ch = 0xD7; break;
+ case 0x256C: ch = 0xCE; break;
+ case 0x2580: ch = 0xDF; break;
+ case 0x2584: ch = 0xDC; break;
+ case 0x2588: ch = 0xDB; break;
+ case 0x258C: ch = 0xDD; break;
+ case 0x2590: ch = 0xDE; break;
+ case 0x2591: ch = 0xB0; break;
+ case 0x2592: ch = 0xB1; break;
+ case 0x2593: ch = 0xB2; break;
+ case 0x25A0: ch = 0xFE; break;
+ case 0x25AC: ch = 0x16; break;
+ case 0x25B2: ch = 0x1E; break;
+ case 0x25BA: ch = 0x10; break;
+ case 0x25BC: ch = 0x1F; break;
+ case 0x25C4: ch = 0x11; break;
+ case 0x25CB: ch = 0x09; break;
+ case 0x25D8: ch = 0x08; break;
+ case 0x25D9: ch = 0x0A; break;
+ case 0x263A: ch = 0x01; break;
+ case 0x263B: ch = 0x02; break;
+ case 0x263C: ch = 0x0F; break;
+ case 0x2640: ch = 0x0C; break;
+ case 0x2642: ch = 0x0B; break;
+ case 0x2660: ch = 0x06; break;
+ case 0x2663: ch = 0x05; break;
+ case 0x2665: ch = 0x03; break;
+ case 0x2666: ch = 0x04; break;
+ case 0x266A: ch = 0x0D; break;
+ case 0x266B: ch = 0x0E; break;
+ case 0xFFE8: ch = 0xB3; break;
+ case 0xFFE9: ch = 0x1B; break;
+ case 0xFFEA: ch = 0x18; break;
+ case 0xFFEB: ch = 0x1A; break;
+ case 0xFFEC: ch = 0x19; break;
+ case 0xFFED: ch = 0xFE; break;
+ case 0xFFEE: ch = 0x09; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 26) switch(ch)
+ {
+ case 0x001B:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x0020:
+ case 0x0021:
+ case 0x0022:
+ case 0x0023:
+ case 0x0024:
+ case 0x0025:
+ case 0x0026:
+ case 0x0027:
+ case 0x0028:
+ case 0x0029:
+ case 0x002A:
+ case 0x002B:
+ case 0x002C:
+ case 0x002D:
+ case 0x002E:
+ case 0x002F:
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ case 0x003A:
+ case 0x003B:
+ case 0x003C:
+ case 0x003D:
+ case 0x003E:
+ case 0x003F:
+ case 0x0040:
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ case 0x005B:
+ case 0x005C:
+ case 0x005D:
+ case 0x005E:
+ case 0x005F:
+ case 0x0060:
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ case 0x007B:
+ case 0x007C:
+ case 0x007D:
+ case 0x007E:
+ break;
+ case 0x001A: ch = 0x7F; break;
+ case 0x001C: ch = 0x1A; break;
+ case 0x007F: ch = 0x1C; break;
+ case 0x00A0: ch = 0xFF; break;
+ case 0x00A1: ch = 0xAD; break;
+ case 0x00A2: ch = 0x9B; break;
+ case 0x00A3: ch = 0x9C; break;
+ case 0x00A5: ch = 0x9D; break;
+ case 0x00A7: ch = 0x15; break;
+ case 0x00AA: ch = 0xA6; break;
+ case 0x00AB: ch = 0xAE; break;
+ case 0x00AC: ch = 0xAA; break;
+ case 0x00B0: ch = 0xF8; break;
+ case 0x00B1: ch = 0xF1; break;
+ case 0x00B2: ch = 0xFD; break;
+ case 0x00B6: ch = 0x14; break;
+ case 0x00B7: ch = 0xFA; break;
+ case 0x00BA: ch = 0xA7; break;
+ case 0x00BB: ch = 0xAF; break;
+ case 0x00BC: ch = 0xAC; break;
+ case 0x00BD: ch = 0xAB; break;
+ case 0x00BF: ch = 0xA8; break;
+ case 0x00C4: ch = 0x8E; break;
+ case 0x00C5: ch = 0x8F; break;
+ case 0x00C6: ch = 0x92; break;
+ case 0x00C7: ch = 0x80; break;
+ case 0x00C9: ch = 0x90; break;
+ case 0x00D1: ch = 0xA5; break;
+ case 0x00D6: ch = 0x99; break;
+ case 0x00DC: ch = 0x9A; break;
+ case 0x00DF: ch = 0xE1; break;
+ case 0x00E0: ch = 0x85; break;
+ case 0x00E1: ch = 0xA0; break;
+ case 0x00E2: ch = 0x83; break;
+ case 0x00E4: ch = 0x84; break;
+ case 0x00E5: ch = 0x86; break;
+ case 0x00E6: ch = 0x91; break;
+ case 0x00E7: ch = 0x87; break;
+ case 0x00E8: ch = 0x8A; break;
+ case 0x00E9: ch = 0x82; break;
+ case 0x00EA: ch = 0x88; break;
+ case 0x00EB: ch = 0x89; break;
+ case 0x00EC: ch = 0x8D; break;
+ case 0x00ED: ch = 0xA1; break;
+ case 0x00EE: ch = 0x8C; break;
+ case 0x00EF: ch = 0x8B; break;
+ case 0x00F1: ch = 0xA4; break;
+ case 0x00F2: ch = 0x95; break;
+ case 0x00F3: ch = 0xA2; break;
+ case 0x00F4: ch = 0x93; break;
+ case 0x00F6: ch = 0x94; break;
+ case 0x00F7: ch = 0xF6; break;
+ case 0x00F9: ch = 0x97; break;
+ case 0x00FA: ch = 0xA3; break;
+ case 0x00FB: ch = 0x96; break;
+ case 0x00FC: ch = 0x81; break;
+ case 0x00FF: ch = 0x98; break;
+ case 0x0192: ch = 0x9F; break;
+ case 0x0393: ch = 0xE2; break;
+ case 0x0398: ch = 0xE9; break;
+ case 0x03A3: ch = 0xE4; break;
+ case 0x03A6: ch = 0xE8; break;
+ case 0x03A9: ch = 0xEA; break;
+ case 0x03B1: ch = 0xE0; break;
+ case 0x03B4: ch = 0xEB; break;
+ case 0x03B5: ch = 0xEE; break;
+ case 0x03BC: ch = 0xE6; break;
+ case 0x03C0: ch = 0xE3; break;
+ case 0x03C3: ch = 0xE5; break;
+ case 0x03C4: ch = 0xE7; break;
+ case 0x03C6: ch = 0xED; break;
+ case 0x2022: ch = 0x07; break;
+ case 0x203C: ch = 0x13; break;
+ case 0x207F: ch = 0xFC; break;
+ case 0x20A7: ch = 0x9E; break;
+ case 0x2190: ch = 0x1B; break;
+ case 0x2191: ch = 0x18; break;
+ case 0x2192: ch = 0x1A; break;
+ case 0x2193: ch = 0x19; break;
+ case 0x2194: ch = 0x1D; break;
+ case 0x2195: ch = 0x12; break;
+ case 0x21A8: ch = 0x17; break;
+ case 0x2219: ch = 0xF9; break;
+ case 0x221A: ch = 0xFB; break;
+ case 0x221E: ch = 0xEC; break;
+ case 0x221F: ch = 0x1C; break;
+ case 0x2229: ch = 0xEF; break;
+ case 0x2248: ch = 0xF7; break;
+ case 0x2261: ch = 0xF0; break;
+ case 0x2264: ch = 0xF3; break;
+ case 0x2265: ch = 0xF2; break;
+ case 0x2302: ch = 0x7F; break;
+ case 0x2310: ch = 0xA9; break;
+ case 0x2320: ch = 0xF4; break;
+ case 0x2321: ch = 0xF5; break;
+ case 0x2500: ch = 0xC4; break;
+ case 0x2502: ch = 0xB3; break;
+ case 0x250C: ch = 0xDA; break;
+ case 0x2510: ch = 0xBF; break;
+ case 0x2514: ch = 0xC0; break;
+ case 0x2518: ch = 0xD9; break;
+ case 0x251C: ch = 0xC3; break;
+ case 0x2524: ch = 0xB4; break;
+ case 0x252C: ch = 0xC2; break;
+ case 0x2534: ch = 0xC1; break;
+ case 0x253C: ch = 0xC5; break;
+ case 0x2550: ch = 0xCD; break;
+ case 0x2551: ch = 0xBA; break;
+ case 0x2552: ch = 0xD5; break;
+ case 0x2553: ch = 0xD6; break;
+ case 0x2554: ch = 0xC9; break;
+ case 0x2555: ch = 0xB8; break;
+ case 0x2556: ch = 0xB7; break;
+ case 0x2557: ch = 0xBB; break;
+ case 0x2558: ch = 0xD4; break;
+ case 0x2559: ch = 0xD3; break;
+ case 0x255A: ch = 0xC8; break;
+ case 0x255B: ch = 0xBE; break;
+ case 0x255C: ch = 0xBD; break;
+ case 0x255D: ch = 0xBC; break;
+ case 0x255E: ch = 0xC6; break;
+ case 0x255F: ch = 0xC7; break;
+ case 0x2560: ch = 0xCC; break;
+ case 0x2561: ch = 0xB5; break;
+ case 0x2562: ch = 0xB6; break;
+ case 0x2563: ch = 0xB9; break;
+ case 0x2564: ch = 0xD1; break;
+ case 0x2565: ch = 0xD2; break;
+ case 0x2566: ch = 0xCB; break;
+ case 0x2567: ch = 0xCF; break;
+ case 0x2568: ch = 0xD0; break;
+ case 0x2569: ch = 0xCA; break;
+ case 0x256A: ch = 0xD8; break;
+ case 0x256B: ch = 0xD7; break;
+ case 0x256C: ch = 0xCE; break;
+ case 0x2580: ch = 0xDF; break;
+ case 0x2584: ch = 0xDC; break;
+ case 0x2588: ch = 0xDB; break;
+ case 0x258C: ch = 0xDD; break;
+ case 0x2590: ch = 0xDE; break;
+ case 0x2591: ch = 0xB0; break;
+ case 0x2592: ch = 0xB1; break;
+ case 0x2593: ch = 0xB2; break;
+ case 0x25A0: ch = 0xFE; break;
+ case 0x25AC: ch = 0x16; break;
+ case 0x25B2: ch = 0x1E; break;
+ case 0x25BA: ch = 0x10; break;
+ case 0x25BC: ch = 0x1F; break;
+ case 0x25C4: ch = 0x11; break;
+ case 0x25CB: ch = 0x09; break;
+ case 0x25D8: ch = 0x08; break;
+ case 0x25D9: ch = 0x0A; break;
+ case 0x263A: ch = 0x01; break;
+ case 0x263B: ch = 0x02; break;
+ case 0x263C: ch = 0x0F; break;
+ case 0x2640: ch = 0x0C; break;
+ case 0x2642: ch = 0x0B; break;
+ case 0x2660: ch = 0x06; break;
+ case 0x2663: ch = 0x05; break;
+ case 0x2665: ch = 0x03; break;
+ case 0x2666: ch = 0x04; break;
+ case 0x266A: ch = 0x0D; break;
+ case 0x266B: ch = 0x0E; break;
+ case 0xFFE8: ch = 0xB3; break;
+ case 0xFFE9: ch = 0x1B; break;
+ case 0xFFEA: ch = 0x18; break;
+ case 0xFFEB: ch = 0x1A; break;
+ case 0xFFEC: ch = 0x19; break;
+ case 0xFFED: ch = 0xFE; break;
+ case 0xFFEE: ch = 0x09; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP437
+
+public class ENCibm437 : CP437
+{
+ public ENCibm437() : base() {}
+
+}; // class ENCibm437
+
+}; // namespace I18N.West
diff --git a/mcs/class/I18N/West/CP850.cs b/mcs/class/I18N/West/CP850.cs
new file mode 100644
index 00000000000..6d8f744fb00
--- /dev/null
+++ b/mcs/class/I18N/West/CP850.cs
@@ -0,0 +1,681 @@
+/*
+ * CP850.cs - Western European (DOS) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-850.ucm".
+
+namespace I18N.West
+{
+
+using System;
+using I18N.Common;
+
+public class CP850 : ByteEncoding
+{
+ public CP850()
+ : base(850, ToChars, "Western European (DOS)",
+ "ibm850", "ibm850", "ibm850",
+ false, false, false, false, 1252)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
+ '\u0006', '\u0007', '\u0008', '\u0009', '\u000A', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
+ '\u0018', '\u0019', '\u001C', '\u001B', '\u007F', '\u001D',
+ '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
+ '\u0024', '\u0025', '\u0026', '\u0027', '\u0028', '\u0029',
+ '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
+ '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
+ '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
+ '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
+ '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
+ '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
+ '\u005A', '\u005B', '\u005C', '\u005D', '\u005E', '\u005F',
+ '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
+ '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
+ '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
+ '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
+ '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
+ '\u007E', '\u001A', '\u00C7', '\u00FC', '\u00E9', '\u00E2',
+ '\u00E4', '\u00E0', '\u00E5', '\u00E7', '\u00EA', '\u00EB',
+ '\u00E8', '\u00EF', '\u00EE', '\u00EC', '\u00C4', '\u00C5',
+ '\u00C9', '\u00E6', '\u00C6', '\u00F4', '\u00F6', '\u00F2',
+ '\u00FB', '\u00F9', '\u00FF', '\u00D6', '\u00DC', '\u00F8',
+ '\u00A3', '\u00D8', '\u00D7', '\u0192', '\u00E1', '\u00ED',
+ '\u00F3', '\u00FA', '\u00F1', '\u00D1', '\u00AA', '\u00BA',
+ '\u00BF', '\u00AE', '\u00AC', '\u00BD', '\u00BC', '\u00A1',
+ '\u00AB', '\u00BB', '\u2591', '\u2592', '\u2593', '\u2502',
+ '\u2524', '\u00C1', '\u00C2', '\u00C0', '\u00A9', '\u2563',
+ '\u2551', '\u2557', '\u255D', '\u00A2', '\u00A5', '\u2510',
+ '\u2514', '\u2534', '\u252C', '\u251C', '\u2500', '\u253C',
+ '\u00E3', '\u00C3', '\u255A', '\u2554', '\u2569', '\u2566',
+ '\u2560', '\u2550', '\u256C', '\u00A4', '\u00F0', '\u00D0',
+ '\u00CA', '\u00CB', '\u00C8', '\u0131', '\u00CD', '\u00CE',
+ '\u00CF', '\u2518', '\u250C', '\u2588', '\u2584', '\u00A6',
+ '\u00CC', '\u2580', '\u00D3', '\u00DF', '\u00D4', '\u00D2',
+ '\u00F5', '\u00D5', '\u00B5', '\u00FE', '\u00DE', '\u00DA',
+ '\u00DB', '\u00D9', '\u00FD', '\u00DD', '\u00AF', '\u00B4',
+ '\u00AD', '\u00B1', '\u2017', '\u00BE', '\u00B6', '\u00A7',
+ '\u00F7', '\u00B8', '\u00B0', '\u00A8', '\u00B7', '\u00B9',
+ '\u00B3', '\u00B2', '\u25A0', '\u00A0',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 26) switch(ch)
+ {
+ case 0x001B:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x0020:
+ case 0x0021:
+ case 0x0022:
+ case 0x0023:
+ case 0x0024:
+ case 0x0025:
+ case 0x0026:
+ case 0x0027:
+ case 0x0028:
+ case 0x0029:
+ case 0x002A:
+ case 0x002B:
+ case 0x002C:
+ case 0x002D:
+ case 0x002E:
+ case 0x002F:
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ case 0x003A:
+ case 0x003B:
+ case 0x003C:
+ case 0x003D:
+ case 0x003E:
+ case 0x003F:
+ case 0x0040:
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ case 0x005B:
+ case 0x005C:
+ case 0x005D:
+ case 0x005E:
+ case 0x005F:
+ case 0x0060:
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ case 0x007B:
+ case 0x007C:
+ case 0x007D:
+ case 0x007E:
+ break;
+ case 0x001A: ch = 0x7F; break;
+ case 0x001C: ch = 0x1A; break;
+ case 0x007F: ch = 0x1C; break;
+ case 0x00A0: ch = 0xFF; break;
+ case 0x00A1: ch = 0xAD; break;
+ case 0x00A2: ch = 0xBD; break;
+ case 0x00A3: ch = 0x9C; break;
+ case 0x00A4: ch = 0xCF; break;
+ case 0x00A5: ch = 0xBE; break;
+ case 0x00A6: ch = 0xDD; break;
+ case 0x00A7: ch = 0xF5; break;
+ case 0x00A8: ch = 0xF9; break;
+ case 0x00A9: ch = 0xB8; break;
+ case 0x00AA: ch = 0xA6; break;
+ case 0x00AB: ch = 0xAE; break;
+ case 0x00AC: ch = 0xAA; break;
+ case 0x00AD: ch = 0xF0; break;
+ case 0x00AE: ch = 0xA9; break;
+ case 0x00AF: ch = 0xEE; break;
+ case 0x00B0: ch = 0xF8; break;
+ case 0x00B1: ch = 0xF1; break;
+ case 0x00B2: ch = 0xFD; break;
+ case 0x00B3: ch = 0xFC; break;
+ case 0x00B4: ch = 0xEF; break;
+ case 0x00B5: ch = 0xE6; break;
+ case 0x00B6: ch = 0xF4; break;
+ case 0x00B7: ch = 0xFA; break;
+ case 0x00B8: ch = 0xF7; break;
+ case 0x00B9: ch = 0xFB; break;
+ case 0x00BA: ch = 0xA7; break;
+ case 0x00BB: ch = 0xAF; break;
+ case 0x00BC: ch = 0xAC; break;
+ case 0x00BD: ch = 0xAB; break;
+ case 0x00BE: ch = 0xF3; break;
+ case 0x00BF: ch = 0xA8; break;
+ case 0x00C0: ch = 0xB7; break;
+ case 0x00C1: ch = 0xB5; break;
+ case 0x00C2: ch = 0xB6; break;
+ case 0x00C3: ch = 0xC7; break;
+ case 0x00C4: ch = 0x8E; break;
+ case 0x00C5: ch = 0x8F; break;
+ case 0x00C6: ch = 0x92; break;
+ case 0x00C7: ch = 0x80; break;
+ case 0x00C8: ch = 0xD4; break;
+ case 0x00C9: ch = 0x90; break;
+ case 0x00CA: ch = 0xD2; break;
+ case 0x00CB: ch = 0xD3; break;
+ case 0x00CC: ch = 0xDE; break;
+ case 0x00CD: ch = 0xD6; break;
+ case 0x00CE: ch = 0xD7; break;
+ case 0x00CF: ch = 0xD8; break;
+ case 0x00D0: ch = 0xD1; break;
+ case 0x00D1: ch = 0xA5; break;
+ case 0x00D2: ch = 0xE3; break;
+ case 0x00D3: ch = 0xE0; break;
+ case 0x00D4: ch = 0xE2; break;
+ case 0x00D5: ch = 0xE5; break;
+ case 0x00D6: ch = 0x99; break;
+ case 0x00D7: ch = 0x9E; break;
+ case 0x00D8: ch = 0x9D; break;
+ case 0x00D9: ch = 0xEB; break;
+ case 0x00DA: ch = 0xE9; break;
+ case 0x00DB: ch = 0xEA; break;
+ case 0x00DC: ch = 0x9A; break;
+ case 0x00DD: ch = 0xED; break;
+ case 0x00DE: ch = 0xE8; break;
+ case 0x00DF: ch = 0xE1; break;
+ case 0x00E0: ch = 0x85; break;
+ case 0x00E1: ch = 0xA0; break;
+ case 0x00E2: ch = 0x83; break;
+ case 0x00E3: ch = 0xC6; break;
+ case 0x00E4: ch = 0x84; break;
+ case 0x00E5: ch = 0x86; break;
+ case 0x00E6: ch = 0x91; break;
+ case 0x00E7: ch = 0x87; break;
+ case 0x00E8: ch = 0x8A; break;
+ case 0x00E9: ch = 0x82; break;
+ case 0x00EA: ch = 0x88; break;
+ case 0x00EB: ch = 0x89; break;
+ case 0x00EC: ch = 0x8D; break;
+ case 0x00ED: ch = 0xA1; break;
+ case 0x00EE: ch = 0x8C; break;
+ case 0x00EF: ch = 0x8B; break;
+ case 0x00F0: ch = 0xD0; break;
+ case 0x00F1: ch = 0xA4; break;
+ case 0x00F2: ch = 0x95; break;
+ case 0x00F3: ch = 0xA2; break;
+ case 0x00F4: ch = 0x93; break;
+ case 0x00F5: ch = 0xE4; break;
+ case 0x00F6: ch = 0x94; break;
+ case 0x00F7: ch = 0xF6; break;
+ case 0x00F8: ch = 0x9B; break;
+ case 0x00F9: ch = 0x97; break;
+ case 0x00FA: ch = 0xA3; break;
+ case 0x00FB: ch = 0x96; break;
+ case 0x00FC: ch = 0x81; break;
+ case 0x00FD: ch = 0xEC; break;
+ case 0x00FE: ch = 0xE7; break;
+ case 0x00FF: ch = 0x98; break;
+ case 0x0110: ch = 0xD1; break;
+ case 0x0131: ch = 0xD5; break;
+ case 0x0192: ch = 0x9F; break;
+ case 0x2017: ch = 0xF2; break;
+ case 0x2022: ch = 0x07; break;
+ case 0x203C: ch = 0x13; break;
+ case 0x203E: ch = 0xEE; break;
+ case 0x2190: ch = 0x1B; break;
+ case 0x2191: ch = 0x18; break;
+ case 0x2192: ch = 0x1A; break;
+ case 0x2193: ch = 0x19; break;
+ case 0x2194: ch = 0x1D; break;
+ case 0x2195: ch = 0x12; break;
+ case 0x21A8: ch = 0x17; break;
+ case 0x221F: ch = 0x1C; break;
+ case 0x2302: ch = 0x7F; break;
+ case 0x2500: ch = 0xC4; break;
+ case 0x2502: ch = 0xB3; break;
+ case 0x250C: ch = 0xDA; break;
+ case 0x2510: ch = 0xBF; break;
+ case 0x2514: ch = 0xC0; break;
+ case 0x2518: ch = 0xD9; break;
+ case 0x251C: ch = 0xC3; break;
+ case 0x2524: ch = 0xB4; break;
+ case 0x252C: ch = 0xC2; break;
+ case 0x2534: ch = 0xC1; break;
+ case 0x253C: ch = 0xC5; break;
+ case 0x2550: ch = 0xCD; break;
+ case 0x2551: ch = 0xBA; break;
+ case 0x2554: ch = 0xC9; break;
+ case 0x2557: ch = 0xBB; break;
+ case 0x255A: ch = 0xC8; break;
+ case 0x255D: ch = 0xBC; break;
+ case 0x2560: ch = 0xCC; break;
+ case 0x2563: ch = 0xB9; break;
+ case 0x2566: ch = 0xCB; break;
+ case 0x2569: ch = 0xCA; break;
+ case 0x256C: ch = 0xCE; break;
+ case 0x2580: ch = 0xDF; break;
+ case 0x2584: ch = 0xDC; break;
+ case 0x2588: ch = 0xDB; break;
+ case 0x2591: ch = 0xB0; break;
+ case 0x2592: ch = 0xB1; break;
+ case 0x2593: ch = 0xB2; break;
+ case 0x25A0: ch = 0xFE; break;
+ case 0x25AC: ch = 0x16; break;
+ case 0x25B2: ch = 0x1E; break;
+ case 0x25BA: ch = 0x10; break;
+ case 0x25BC: ch = 0x1F; break;
+ case 0x25C4: ch = 0x11; break;
+ case 0x25CB: ch = 0x09; break;
+ case 0x25D8: ch = 0x08; break;
+ case 0x25D9: ch = 0x0A; break;
+ case 0x263A: ch = 0x01; break;
+ case 0x263B: ch = 0x02; break;
+ case 0x263C: ch = 0x0F; break;
+ case 0x2640: ch = 0x0C; break;
+ case 0x2642: ch = 0x0B; break;
+ case 0x2660: ch = 0x06; break;
+ case 0x2663: ch = 0x05; break;
+ case 0x2665: ch = 0x03; break;
+ case 0x2666: ch = 0x04; break;
+ case 0x266A: ch = 0x0D; break;
+ case 0x266C: ch = 0x0E; break;
+ case 0xFFE8: ch = 0xB3; break;
+ case 0xFFE9: ch = 0x1B; break;
+ case 0xFFEA: ch = 0x18; break;
+ case 0xFFEB: ch = 0x1A; break;
+ case 0xFFEC: ch = 0x19; break;
+ case 0xFFED: ch = 0xFE; break;
+ case 0xFFEE: ch = 0x09; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 26) switch(ch)
+ {
+ case 0x001B:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x0020:
+ case 0x0021:
+ case 0x0022:
+ case 0x0023:
+ case 0x0024:
+ case 0x0025:
+ case 0x0026:
+ case 0x0027:
+ case 0x0028:
+ case 0x0029:
+ case 0x002A:
+ case 0x002B:
+ case 0x002C:
+ case 0x002D:
+ case 0x002E:
+ case 0x002F:
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ case 0x003A:
+ case 0x003B:
+ case 0x003C:
+ case 0x003D:
+ case 0x003E:
+ case 0x003F:
+ case 0x0040:
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ case 0x005B:
+ case 0x005C:
+ case 0x005D:
+ case 0x005E:
+ case 0x005F:
+ case 0x0060:
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ case 0x007B:
+ case 0x007C:
+ case 0x007D:
+ case 0x007E:
+ break;
+ case 0x001A: ch = 0x7F; break;
+ case 0x001C: ch = 0x1A; break;
+ case 0x007F: ch = 0x1C; break;
+ case 0x00A0: ch = 0xFF; break;
+ case 0x00A1: ch = 0xAD; break;
+ case 0x00A2: ch = 0xBD; break;
+ case 0x00A3: ch = 0x9C; break;
+ case 0x00A4: ch = 0xCF; break;
+ case 0x00A5: ch = 0xBE; break;
+ case 0x00A6: ch = 0xDD; break;
+ case 0x00A7: ch = 0xF5; break;
+ case 0x00A8: ch = 0xF9; break;
+ case 0x00A9: ch = 0xB8; break;
+ case 0x00AA: ch = 0xA6; break;
+ case 0x00AB: ch = 0xAE; break;
+ case 0x00AC: ch = 0xAA; break;
+ case 0x00AD: ch = 0xF0; break;
+ case 0x00AE: ch = 0xA9; break;
+ case 0x00AF: ch = 0xEE; break;
+ case 0x00B0: ch = 0xF8; break;
+ case 0x00B1: ch = 0xF1; break;
+ case 0x00B2: ch = 0xFD; break;
+ case 0x00B3: ch = 0xFC; break;
+ case 0x00B4: ch = 0xEF; break;
+ case 0x00B5: ch = 0xE6; break;
+ case 0x00B6: ch = 0xF4; break;
+ case 0x00B7: ch = 0xFA; break;
+ case 0x00B8: ch = 0xF7; break;
+ case 0x00B9: ch = 0xFB; break;
+ case 0x00BA: ch = 0xA7; break;
+ case 0x00BB: ch = 0xAF; break;
+ case 0x00BC: ch = 0xAC; break;
+ case 0x00BD: ch = 0xAB; break;
+ case 0x00BE: ch = 0xF3; break;
+ case 0x00BF: ch = 0xA8; break;
+ case 0x00C0: ch = 0xB7; break;
+ case 0x00C1: ch = 0xB5; break;
+ case 0x00C2: ch = 0xB6; break;
+ case 0x00C3: ch = 0xC7; break;
+ case 0x00C4: ch = 0x8E; break;
+ case 0x00C5: ch = 0x8F; break;
+ case 0x00C6: ch = 0x92; break;
+ case 0x00C7: ch = 0x80; break;
+ case 0x00C8: ch = 0xD4; break;
+ case 0x00C9: ch = 0x90; break;
+ case 0x00CA: ch = 0xD2; break;
+ case 0x00CB: ch = 0xD3; break;
+ case 0x00CC: ch = 0xDE; break;
+ case 0x00CD: ch = 0xD6; break;
+ case 0x00CE: ch = 0xD7; break;
+ case 0x00CF: ch = 0xD8; break;
+ case 0x00D0: ch = 0xD1; break;
+ case 0x00D1: ch = 0xA5; break;
+ case 0x00D2: ch = 0xE3; break;
+ case 0x00D3: ch = 0xE0; break;
+ case 0x00D4: ch = 0xE2; break;
+ case 0x00D5: ch = 0xE5; break;
+ case 0x00D6: ch = 0x99; break;
+ case 0x00D7: ch = 0x9E; break;
+ case 0x00D8: ch = 0x9D; break;
+ case 0x00D9: ch = 0xEB; break;
+ case 0x00DA: ch = 0xE9; break;
+ case 0x00DB: ch = 0xEA; break;
+ case 0x00DC: ch = 0x9A; break;
+ case 0x00DD: ch = 0xED; break;
+ case 0x00DE: ch = 0xE8; break;
+ case 0x00DF: ch = 0xE1; break;
+ case 0x00E0: ch = 0x85; break;
+ case 0x00E1: ch = 0xA0; break;
+ case 0x00E2: ch = 0x83; break;
+ case 0x00E3: ch = 0xC6; break;
+ case 0x00E4: ch = 0x84; break;
+ case 0x00E5: ch = 0x86; break;
+ case 0x00E6: ch = 0x91; break;
+ case 0x00E7: ch = 0x87; break;
+ case 0x00E8: ch = 0x8A; break;
+ case 0x00E9: ch = 0x82; break;
+ case 0x00EA: ch = 0x88; break;
+ case 0x00EB: ch = 0x89; break;
+ case 0x00EC: ch = 0x8D; break;
+ case 0x00ED: ch = 0xA1; break;
+ case 0x00EE: ch = 0x8C; break;
+ case 0x00EF: ch = 0x8B; break;
+ case 0x00F0: ch = 0xD0; break;
+ case 0x00F1: ch = 0xA4; break;
+ case 0x00F2: ch = 0x95; break;
+ case 0x00F3: ch = 0xA2; break;
+ case 0x00F4: ch = 0x93; break;
+ case 0x00F5: ch = 0xE4; break;
+ case 0x00F6: ch = 0x94; break;
+ case 0x00F7: ch = 0xF6; break;
+ case 0x00F8: ch = 0x9B; break;
+ case 0x00F9: ch = 0x97; break;
+ case 0x00FA: ch = 0xA3; break;
+ case 0x00FB: ch = 0x96; break;
+ case 0x00FC: ch = 0x81; break;
+ case 0x00FD: ch = 0xEC; break;
+ case 0x00FE: ch = 0xE7; break;
+ case 0x00FF: ch = 0x98; break;
+ case 0x0110: ch = 0xD1; break;
+ case 0x0131: ch = 0xD5; break;
+ case 0x0192: ch = 0x9F; break;
+ case 0x2017: ch = 0xF2; break;
+ case 0x2022: ch = 0x07; break;
+ case 0x203C: ch = 0x13; break;
+ case 0x203E: ch = 0xEE; break;
+ case 0x2190: ch = 0x1B; break;
+ case 0x2191: ch = 0x18; break;
+ case 0x2192: ch = 0x1A; break;
+ case 0x2193: ch = 0x19; break;
+ case 0x2194: ch = 0x1D; break;
+ case 0x2195: ch = 0x12; break;
+ case 0x21A8: ch = 0x17; break;
+ case 0x221F: ch = 0x1C; break;
+ case 0x2302: ch = 0x7F; break;
+ case 0x2500: ch = 0xC4; break;
+ case 0x2502: ch = 0xB3; break;
+ case 0x250C: ch = 0xDA; break;
+ case 0x2510: ch = 0xBF; break;
+ case 0x2514: ch = 0xC0; break;
+ case 0x2518: ch = 0xD9; break;
+ case 0x251C: ch = 0xC3; break;
+ case 0x2524: ch = 0xB4; break;
+ case 0x252C: ch = 0xC2; break;
+ case 0x2534: ch = 0xC1; break;
+ case 0x253C: ch = 0xC5; break;
+ case 0x2550: ch = 0xCD; break;
+ case 0x2551: ch = 0xBA; break;
+ case 0x2554: ch = 0xC9; break;
+ case 0x2557: ch = 0xBB; break;
+ case 0x255A: ch = 0xC8; break;
+ case 0x255D: ch = 0xBC; break;
+ case 0x2560: ch = 0xCC; break;
+ case 0x2563: ch = 0xB9; break;
+ case 0x2566: ch = 0xCB; break;
+ case 0x2569: ch = 0xCA; break;
+ case 0x256C: ch = 0xCE; break;
+ case 0x2580: ch = 0xDF; break;
+ case 0x2584: ch = 0xDC; break;
+ case 0x2588: ch = 0xDB; break;
+ case 0x2591: ch = 0xB0; break;
+ case 0x2592: ch = 0xB1; break;
+ case 0x2593: ch = 0xB2; break;
+ case 0x25A0: ch = 0xFE; break;
+ case 0x25AC: ch = 0x16; break;
+ case 0x25B2: ch = 0x1E; break;
+ case 0x25BA: ch = 0x10; break;
+ case 0x25BC: ch = 0x1F; break;
+ case 0x25C4: ch = 0x11; break;
+ case 0x25CB: ch = 0x09; break;
+ case 0x25D8: ch = 0x08; break;
+ case 0x25D9: ch = 0x0A; break;
+ case 0x263A: ch = 0x01; break;
+ case 0x263B: ch = 0x02; break;
+ case 0x263C: ch = 0x0F; break;
+ case 0x2640: ch = 0x0C; break;
+ case 0x2642: ch = 0x0B; break;
+ case 0x2660: ch = 0x06; break;
+ case 0x2663: ch = 0x05; break;
+ case 0x2665: ch = 0x03; break;
+ case 0x2666: ch = 0x04; break;
+ case 0x266A: ch = 0x0D; break;
+ case 0x266C: ch = 0x0E; break;
+ case 0xFFE8: ch = 0xB3; break;
+ case 0xFFE9: ch = 0x1B; break;
+ case 0xFFEA: ch = 0x18; break;
+ case 0xFFEB: ch = 0x1A; break;
+ case 0xFFEC: ch = 0x19; break;
+ case 0xFFED: ch = 0xFE; break;
+ case 0xFFEE: ch = 0x09; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP850
+
+public class ENCibm850 : CP850
+{
+ public ENCibm850() : base() {}
+
+}; // class ENCibm850
+
+}; // namespace I18N.West
diff --git a/mcs/class/I18N/West/CP860.cs b/mcs/class/I18N/West/CP860.cs
new file mode 100644
index 00000000000..ebb0b569de8
--- /dev/null
+++ b/mcs/class/I18N/West/CP860.cs
@@ -0,0 +1,681 @@
+/*
+ * CP860.cs - Portuguese (DOS) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-860.ucm".
+
+namespace I18N.West
+{
+
+using System;
+using I18N.Common;
+
+public class CP860 : ByteEncoding
+{
+ public CP860()
+ : base(860, ToChars, "Portuguese (DOS)",
+ "ibm860", "ibm860", "ibm860",
+ false, false, false, false, 1252)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
+ '\u0006', '\u0007', '\u0008', '\u0009', '\u000A', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
+ '\u0018', '\u0019', '\u001C', '\u001B', '\u007F', '\u001D',
+ '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
+ '\u0024', '\u0025', '\u0026', '\u0027', '\u0028', '\u0029',
+ '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
+ '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
+ '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
+ '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
+ '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
+ '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
+ '\u005A', '\u005B', '\u005C', '\u005D', '\u005E', '\u005F',
+ '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
+ '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
+ '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
+ '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
+ '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
+ '\u007E', '\u001A', '\u00C7', '\u00FC', '\u00E9', '\u00E2',
+ '\u00E3', '\u00E0', '\u00C1', '\u00E7', '\u00EA', '\u00CA',
+ '\u00E8', '\u00CD', '\u00D4', '\u00EC', '\u00C3', '\u00C2',
+ '\u00C9', '\u00C0', '\u00C8', '\u00F4', '\u00F5', '\u00F2',
+ '\u00DA', '\u00F9', '\u00CC', '\u00D5', '\u00DC', '\u00A2',
+ '\u00A3', '\u00D9', '\u20A7', '\u00D3', '\u00E1', '\u00ED',
+ '\u00F3', '\u00FA', '\u00F1', '\u00D1', '\u00AA', '\u00BA',
+ '\u00BF', '\u00D2', '\u00AC', '\u00BD', '\u00BC', '\u00A1',
+ '\u00AB', '\u00BB', '\u2591', '\u2592', '\u2593', '\u2502',
+ '\u2524', '\u2561', '\u2562', '\u2556', '\u2555', '\u2563',
+ '\u2551', '\u2557', '\u255D', '\u255C', '\u255B', '\u2510',
+ '\u2514', '\u2534', '\u252C', '\u251C', '\u2500', '\u253C',
+ '\u255E', '\u255F', '\u255A', '\u2554', '\u2569', '\u2566',
+ '\u2560', '\u2550', '\u256C', '\u2567', '\u2568', '\u2564',
+ '\u2565', '\u2559', '\u2558', '\u2552', '\u2553', '\u256B',
+ '\u256A', '\u2518', '\u250C', '\u2588', '\u2584', '\u258C',
+ '\u2590', '\u2580', '\u03B1', '\u00DF', '\u0393', '\u03C0',
+ '\u03A3', '\u03C3', '\u03BC', '\u03C4', '\u03A6', '\u0398',
+ '\u03A9', '\u03B4', '\u221E', '\u03C6', '\u03B5', '\u2229',
+ '\u2261', '\u00B1', '\u2265', '\u2264', '\u2320', '\u2321',
+ '\u00F7', '\u2248', '\u00B0', '\u2219', '\u00B7', '\u221A',
+ '\u207F', '\u00B2', '\u25A0', '\u00A0',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 26) switch(ch)
+ {
+ case 0x001B:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x0020:
+ case 0x0021:
+ case 0x0022:
+ case 0x0023:
+ case 0x0024:
+ case 0x0025:
+ case 0x0026:
+ case 0x0027:
+ case 0x0028:
+ case 0x0029:
+ case 0x002A:
+ case 0x002B:
+ case 0x002C:
+ case 0x002D:
+ case 0x002E:
+ case 0x002F:
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ case 0x003A:
+ case 0x003B:
+ case 0x003C:
+ case 0x003D:
+ case 0x003E:
+ case 0x003F:
+ case 0x0040:
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ case 0x005B:
+ case 0x005C:
+ case 0x005D:
+ case 0x005E:
+ case 0x005F:
+ case 0x0060:
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ case 0x007B:
+ case 0x007C:
+ case 0x007D:
+ case 0x007E:
+ break;
+ case 0x001A: ch = 0x7F; break;
+ case 0x001C: ch = 0x1A; break;
+ case 0x007F: ch = 0x1C; break;
+ case 0x00A0: ch = 0xFF; break;
+ case 0x00A1: ch = 0xAD; break;
+ case 0x00A2: ch = 0x9B; break;
+ case 0x00A3: ch = 0x9C; break;
+ case 0x00A7: ch = 0x15; break;
+ case 0x00AA: ch = 0xA6; break;
+ case 0x00AB: ch = 0xAE; break;
+ case 0x00AC: ch = 0xAA; break;
+ case 0x00B0: ch = 0xF8; break;
+ case 0x00B1: ch = 0xF1; break;
+ case 0x00B2: ch = 0xFD; break;
+ case 0x00B6: ch = 0x14; break;
+ case 0x00B7: ch = 0xFA; break;
+ case 0x00BA: ch = 0xA7; break;
+ case 0x00BB: ch = 0xAF; break;
+ case 0x00BC: ch = 0xAC; break;
+ case 0x00BD: ch = 0xAB; break;
+ case 0x00BF: ch = 0xA8; break;
+ case 0x00C0: ch = 0x91; break;
+ case 0x00C1: ch = 0x86; break;
+ case 0x00C2: ch = 0x8F; break;
+ case 0x00C3: ch = 0x8E; break;
+ case 0x00C7: ch = 0x80; break;
+ case 0x00C8: ch = 0x92; break;
+ case 0x00C9: ch = 0x90; break;
+ case 0x00CA: ch = 0x89; break;
+ case 0x00CC: ch = 0x98; break;
+ case 0x00CD: ch = 0x8B; break;
+ case 0x00D1: ch = 0xA5; break;
+ case 0x00D2: ch = 0xA9; break;
+ case 0x00D3: ch = 0x9F; break;
+ case 0x00D4: ch = 0x8C; break;
+ case 0x00D5: ch = 0x99; break;
+ case 0x00D9: ch = 0x9D; break;
+ case 0x00DA: ch = 0x96; break;
+ case 0x00DC: ch = 0x9A; break;
+ case 0x00DF: ch = 0xE1; break;
+ case 0x00E0: ch = 0x85; break;
+ case 0x00E1: ch = 0xA0; break;
+ case 0x00E2: ch = 0x83; break;
+ case 0x00E3: ch = 0x84; break;
+ case 0x00E7: ch = 0x87; break;
+ case 0x00E8: ch = 0x8A; break;
+ case 0x00E9: ch = 0x82; break;
+ case 0x00EA: ch = 0x88; break;
+ case 0x00EC: ch = 0x8D; break;
+ case 0x00ED: ch = 0xA1; break;
+ case 0x00F1: ch = 0xA4; break;
+ case 0x00F2: ch = 0x95; break;
+ case 0x00F3: ch = 0xA2; break;
+ case 0x00F4: ch = 0x93; break;
+ case 0x00F5: ch = 0x94; break;
+ case 0x00F7: ch = 0xF6; break;
+ case 0x00F9: ch = 0x97; break;
+ case 0x00FA: ch = 0xA3; break;
+ case 0x00FC: ch = 0x81; break;
+ case 0x0393: ch = 0xE2; break;
+ case 0x0398: ch = 0xE9; break;
+ case 0x03A3: ch = 0xE4; break;
+ case 0x03A6: ch = 0xE8; break;
+ case 0x03A9: ch = 0xEA; break;
+ case 0x03B1: ch = 0xE0; break;
+ case 0x03B4: ch = 0xEB; break;
+ case 0x03B5: ch = 0xEE; break;
+ case 0x03BC: ch = 0xE6; break;
+ case 0x03C0: ch = 0xE3; break;
+ case 0x03C3: ch = 0xE5; break;
+ case 0x03C4: ch = 0xE7; break;
+ case 0x03C6: ch = 0xED; break;
+ case 0x2022: ch = 0x07; break;
+ case 0x203C: ch = 0x13; break;
+ case 0x207F: ch = 0xFC; break;
+ case 0x20A7: ch = 0x9E; break;
+ case 0x2190: ch = 0x1B; break;
+ case 0x2191: ch = 0x18; break;
+ case 0x2192: ch = 0x1A; break;
+ case 0x2193: ch = 0x19; break;
+ case 0x2194: ch = 0x1D; break;
+ case 0x2195: ch = 0x12; break;
+ case 0x21A8: ch = 0x17; break;
+ case 0x2219: ch = 0xF9; break;
+ case 0x221A: ch = 0xFB; break;
+ case 0x221E: ch = 0xEC; break;
+ case 0x221F: ch = 0x1C; break;
+ case 0x2229: ch = 0xEF; break;
+ case 0x2248: ch = 0xF7; break;
+ case 0x2261: ch = 0xF0; break;
+ case 0x2264: ch = 0xF3; break;
+ case 0x2265: ch = 0xF2; break;
+ case 0x2302: ch = 0x7F; break;
+ case 0x2320: ch = 0xF4; break;
+ case 0x2321: ch = 0xF5; break;
+ case 0x2500: ch = 0xC4; break;
+ case 0x2502: ch = 0xB3; break;
+ case 0x250C: ch = 0xDA; break;
+ case 0x2510: ch = 0xBF; break;
+ case 0x2514: ch = 0xC0; break;
+ case 0x2518: ch = 0xD9; break;
+ case 0x251C: ch = 0xC3; break;
+ case 0x2524: ch = 0xB4; break;
+ case 0x252C: ch = 0xC2; break;
+ case 0x2534: ch = 0xC1; break;
+ case 0x253C: ch = 0xC5; break;
+ case 0x2550: ch = 0xCD; break;
+ case 0x2551: ch = 0xBA; break;
+ case 0x2552: ch = 0xD5; break;
+ case 0x2553: ch = 0xD6; break;
+ case 0x2554: ch = 0xC9; break;
+ case 0x2555: ch = 0xB8; break;
+ case 0x2556: ch = 0xB7; break;
+ case 0x2557: ch = 0xBB; break;
+ case 0x2558: ch = 0xD4; break;
+ case 0x2559: ch = 0xD3; break;
+ case 0x255A: ch = 0xC8; break;
+ case 0x255B: ch = 0xBE; break;
+ case 0x255C: ch = 0xBD; break;
+ case 0x255D: ch = 0xBC; break;
+ case 0x255E: ch = 0xC6; break;
+ case 0x255F: ch = 0xC7; break;
+ case 0x2560: ch = 0xCC; break;
+ case 0x2561: ch = 0xB5; break;
+ case 0x2562: ch = 0xB6; break;
+ case 0x2563: ch = 0xB9; break;
+ case 0x2564: ch = 0xD1; break;
+ case 0x2565: ch = 0xD2; break;
+ case 0x2566: ch = 0xCB; break;
+ case 0x2567: ch = 0xCF; break;
+ case 0x2568: ch = 0xD0; break;
+ case 0x2569: ch = 0xCA; break;
+ case 0x256A: ch = 0xD8; break;
+ case 0x256B: ch = 0xD7; break;
+ case 0x256C: ch = 0xCE; break;
+ case 0x2580: ch = 0xDF; break;
+ case 0x2584: ch = 0xDC; break;
+ case 0x2588: ch = 0xDB; break;
+ case 0x258C: ch = 0xDD; break;
+ case 0x2590: ch = 0xDE; break;
+ case 0x2591: ch = 0xB0; break;
+ case 0x2592: ch = 0xB1; break;
+ case 0x2593: ch = 0xB2; break;
+ case 0x25A0: ch = 0xFE; break;
+ case 0x25AC: ch = 0x16; break;
+ case 0x25B2: ch = 0x1E; break;
+ case 0x25BA: ch = 0x10; break;
+ case 0x25BC: ch = 0x1F; break;
+ case 0x25C4: ch = 0x11; break;
+ case 0x25CB: ch = 0x09; break;
+ case 0x25D8: ch = 0x08; break;
+ case 0x25D9: ch = 0x0A; break;
+ case 0x263A: ch = 0x01; break;
+ case 0x263B: ch = 0x02; break;
+ case 0x263C: ch = 0x0F; break;
+ case 0x2640: ch = 0x0C; break;
+ case 0x2642: ch = 0x0B; break;
+ case 0x2660: ch = 0x06; break;
+ case 0x2663: ch = 0x05; break;
+ case 0x2665: ch = 0x03; break;
+ case 0x2666: ch = 0x04; break;
+ case 0x266A: ch = 0x0D; break;
+ case 0x266B: ch = 0x0E; break;
+ case 0xFFE8: ch = 0xB3; break;
+ case 0xFFE9: ch = 0x1B; break;
+ case 0xFFEA: ch = 0x18; break;
+ case 0xFFEB: ch = 0x1A; break;
+ case 0xFFEC: ch = 0x19; break;
+ case 0xFFED: ch = 0xFE; break;
+ case 0xFFEE: ch = 0x09; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 26) switch(ch)
+ {
+ case 0x001B:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x0020:
+ case 0x0021:
+ case 0x0022:
+ case 0x0023:
+ case 0x0024:
+ case 0x0025:
+ case 0x0026:
+ case 0x0027:
+ case 0x0028:
+ case 0x0029:
+ case 0x002A:
+ case 0x002B:
+ case 0x002C:
+ case 0x002D:
+ case 0x002E:
+ case 0x002F:
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ case 0x003A:
+ case 0x003B:
+ case 0x003C:
+ case 0x003D:
+ case 0x003E:
+ case 0x003F:
+ case 0x0040:
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ case 0x005B:
+ case 0x005C:
+ case 0x005D:
+ case 0x005E:
+ case 0x005F:
+ case 0x0060:
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ case 0x007B:
+ case 0x007C:
+ case 0x007D:
+ case 0x007E:
+ break;
+ case 0x001A: ch = 0x7F; break;
+ case 0x001C: ch = 0x1A; break;
+ case 0x007F: ch = 0x1C; break;
+ case 0x00A0: ch = 0xFF; break;
+ case 0x00A1: ch = 0xAD; break;
+ case 0x00A2: ch = 0x9B; break;
+ case 0x00A3: ch = 0x9C; break;
+ case 0x00A7: ch = 0x15; break;
+ case 0x00AA: ch = 0xA6; break;
+ case 0x00AB: ch = 0xAE; break;
+ case 0x00AC: ch = 0xAA; break;
+ case 0x00B0: ch = 0xF8; break;
+ case 0x00B1: ch = 0xF1; break;
+ case 0x00B2: ch = 0xFD; break;
+ case 0x00B6: ch = 0x14; break;
+ case 0x00B7: ch = 0xFA; break;
+ case 0x00BA: ch = 0xA7; break;
+ case 0x00BB: ch = 0xAF; break;
+ case 0x00BC: ch = 0xAC; break;
+ case 0x00BD: ch = 0xAB; break;
+ case 0x00BF: ch = 0xA8; break;
+ case 0x00C0: ch = 0x91; break;
+ case 0x00C1: ch = 0x86; break;
+ case 0x00C2: ch = 0x8F; break;
+ case 0x00C3: ch = 0x8E; break;
+ case 0x00C7: ch = 0x80; break;
+ case 0x00C8: ch = 0x92; break;
+ case 0x00C9: ch = 0x90; break;
+ case 0x00CA: ch = 0x89; break;
+ case 0x00CC: ch = 0x98; break;
+ case 0x00CD: ch = 0x8B; break;
+ case 0x00D1: ch = 0xA5; break;
+ case 0x00D2: ch = 0xA9; break;
+ case 0x00D3: ch = 0x9F; break;
+ case 0x00D4: ch = 0x8C; break;
+ case 0x00D5: ch = 0x99; break;
+ case 0x00D9: ch = 0x9D; break;
+ case 0x00DA: ch = 0x96; break;
+ case 0x00DC: ch = 0x9A; break;
+ case 0x00DF: ch = 0xE1; break;
+ case 0x00E0: ch = 0x85; break;
+ case 0x00E1: ch = 0xA0; break;
+ case 0x00E2: ch = 0x83; break;
+ case 0x00E3: ch = 0x84; break;
+ case 0x00E7: ch = 0x87; break;
+ case 0x00E8: ch = 0x8A; break;
+ case 0x00E9: ch = 0x82; break;
+ case 0x00EA: ch = 0x88; break;
+ case 0x00EC: ch = 0x8D; break;
+ case 0x00ED: ch = 0xA1; break;
+ case 0x00F1: ch = 0xA4; break;
+ case 0x00F2: ch = 0x95; break;
+ case 0x00F3: ch = 0xA2; break;
+ case 0x00F4: ch = 0x93; break;
+ case 0x00F5: ch = 0x94; break;
+ case 0x00F7: ch = 0xF6; break;
+ case 0x00F9: ch = 0x97; break;
+ case 0x00FA: ch = 0xA3; break;
+ case 0x00FC: ch = 0x81; break;
+ case 0x0393: ch = 0xE2; break;
+ case 0x0398: ch = 0xE9; break;
+ case 0x03A3: ch = 0xE4; break;
+ case 0x03A6: ch = 0xE8; break;
+ case 0x03A9: ch = 0xEA; break;
+ case 0x03B1: ch = 0xE0; break;
+ case 0x03B4: ch = 0xEB; break;
+ case 0x03B5: ch = 0xEE; break;
+ case 0x03BC: ch = 0xE6; break;
+ case 0x03C0: ch = 0xE3; break;
+ case 0x03C3: ch = 0xE5; break;
+ case 0x03C4: ch = 0xE7; break;
+ case 0x03C6: ch = 0xED; break;
+ case 0x2022: ch = 0x07; break;
+ case 0x203C: ch = 0x13; break;
+ case 0x207F: ch = 0xFC; break;
+ case 0x20A7: ch = 0x9E; break;
+ case 0x2190: ch = 0x1B; break;
+ case 0x2191: ch = 0x18; break;
+ case 0x2192: ch = 0x1A; break;
+ case 0x2193: ch = 0x19; break;
+ case 0x2194: ch = 0x1D; break;
+ case 0x2195: ch = 0x12; break;
+ case 0x21A8: ch = 0x17; break;
+ case 0x2219: ch = 0xF9; break;
+ case 0x221A: ch = 0xFB; break;
+ case 0x221E: ch = 0xEC; break;
+ case 0x221F: ch = 0x1C; break;
+ case 0x2229: ch = 0xEF; break;
+ case 0x2248: ch = 0xF7; break;
+ case 0x2261: ch = 0xF0; break;
+ case 0x2264: ch = 0xF3; break;
+ case 0x2265: ch = 0xF2; break;
+ case 0x2302: ch = 0x7F; break;
+ case 0x2320: ch = 0xF4; break;
+ case 0x2321: ch = 0xF5; break;
+ case 0x2500: ch = 0xC4; break;
+ case 0x2502: ch = 0xB3; break;
+ case 0x250C: ch = 0xDA; break;
+ case 0x2510: ch = 0xBF; break;
+ case 0x2514: ch = 0xC0; break;
+ case 0x2518: ch = 0xD9; break;
+ case 0x251C: ch = 0xC3; break;
+ case 0x2524: ch = 0xB4; break;
+ case 0x252C: ch = 0xC2; break;
+ case 0x2534: ch = 0xC1; break;
+ case 0x253C: ch = 0xC5; break;
+ case 0x2550: ch = 0xCD; break;
+ case 0x2551: ch = 0xBA; break;
+ case 0x2552: ch = 0xD5; break;
+ case 0x2553: ch = 0xD6; break;
+ case 0x2554: ch = 0xC9; break;
+ case 0x2555: ch = 0xB8; break;
+ case 0x2556: ch = 0xB7; break;
+ case 0x2557: ch = 0xBB; break;
+ case 0x2558: ch = 0xD4; break;
+ case 0x2559: ch = 0xD3; break;
+ case 0x255A: ch = 0xC8; break;
+ case 0x255B: ch = 0xBE; break;
+ case 0x255C: ch = 0xBD; break;
+ case 0x255D: ch = 0xBC; break;
+ case 0x255E: ch = 0xC6; break;
+ case 0x255F: ch = 0xC7; break;
+ case 0x2560: ch = 0xCC; break;
+ case 0x2561: ch = 0xB5; break;
+ case 0x2562: ch = 0xB6; break;
+ case 0x2563: ch = 0xB9; break;
+ case 0x2564: ch = 0xD1; break;
+ case 0x2565: ch = 0xD2; break;
+ case 0x2566: ch = 0xCB; break;
+ case 0x2567: ch = 0xCF; break;
+ case 0x2568: ch = 0xD0; break;
+ case 0x2569: ch = 0xCA; break;
+ case 0x256A: ch = 0xD8; break;
+ case 0x256B: ch = 0xD7; break;
+ case 0x256C: ch = 0xCE; break;
+ case 0x2580: ch = 0xDF; break;
+ case 0x2584: ch = 0xDC; break;
+ case 0x2588: ch = 0xDB; break;
+ case 0x258C: ch = 0xDD; break;
+ case 0x2590: ch = 0xDE; break;
+ case 0x2591: ch = 0xB0; break;
+ case 0x2592: ch = 0xB1; break;
+ case 0x2593: ch = 0xB2; break;
+ case 0x25A0: ch = 0xFE; break;
+ case 0x25AC: ch = 0x16; break;
+ case 0x25B2: ch = 0x1E; break;
+ case 0x25BA: ch = 0x10; break;
+ case 0x25BC: ch = 0x1F; break;
+ case 0x25C4: ch = 0x11; break;
+ case 0x25CB: ch = 0x09; break;
+ case 0x25D8: ch = 0x08; break;
+ case 0x25D9: ch = 0x0A; break;
+ case 0x263A: ch = 0x01; break;
+ case 0x263B: ch = 0x02; break;
+ case 0x263C: ch = 0x0F; break;
+ case 0x2640: ch = 0x0C; break;
+ case 0x2642: ch = 0x0B; break;
+ case 0x2660: ch = 0x06; break;
+ case 0x2663: ch = 0x05; break;
+ case 0x2665: ch = 0x03; break;
+ case 0x2666: ch = 0x04; break;
+ case 0x266A: ch = 0x0D; break;
+ case 0x266B: ch = 0x0E; break;
+ case 0xFFE8: ch = 0xB3; break;
+ case 0xFFE9: ch = 0x1B; break;
+ case 0xFFEA: ch = 0x18; break;
+ case 0xFFEB: ch = 0x1A; break;
+ case 0xFFEC: ch = 0x19; break;
+ case 0xFFED: ch = 0xFE; break;
+ case 0xFFEE: ch = 0x09; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP860
+
+public class ENCibm860 : CP860
+{
+ public ENCibm860() : base() {}
+
+}; // class ENCibm860
+
+}; // namespace I18N.West
diff --git a/mcs/class/I18N/West/CP861.cs b/mcs/class/I18N/West/CP861.cs
new file mode 100644
index 00000000000..cfb6073c6d6
--- /dev/null
+++ b/mcs/class/I18N/West/CP861.cs
@@ -0,0 +1,681 @@
+/*
+ * CP861.cs - Icelandic (DOS) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-861.ucm".
+
+namespace I18N.West
+{
+
+using System;
+using I18N.Common;
+
+public class CP861 : ByteEncoding
+{
+ public CP861()
+ : base(861, ToChars, "Icelandic (DOS)",
+ "ibm861", "ibm861", "ibm861",
+ false, false, false, false, 1252)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
+ '\u0006', '\u0007', '\u0008', '\u0009', '\u000A', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
+ '\u0018', '\u0019', '\u001C', '\u001B', '\u007F', '\u001D',
+ '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
+ '\u0024', '\u0025', '\u0026', '\u0027', '\u0028', '\u0029',
+ '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
+ '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
+ '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
+ '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
+ '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
+ '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
+ '\u005A', '\u005B', '\u005C', '\u005D', '\u005E', '\u005F',
+ '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
+ '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
+ '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
+ '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
+ '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
+ '\u007E', '\u001A', '\u00C7', '\u00FC', '\u00E9', '\u00E2',
+ '\u00E4', '\u00E0', '\u00E5', '\u00E7', '\u00EA', '\u00EB',
+ '\u00E8', '\u00D0', '\u00F0', '\u00DE', '\u00C4', '\u00C5',
+ '\u00C9', '\u00E6', '\u00C6', '\u00F4', '\u00F6', '\u00FE',
+ '\u00FB', '\u00DD', '\u00FD', '\u00D6', '\u00DC', '\u00F8',
+ '\u00A3', '\u00D8', '\u20A7', '\u0192', '\u00E1', '\u00ED',
+ '\u00F3', '\u00FA', '\u00C1', '\u00CD', '\u00D3', '\u00DA',
+ '\u00BF', '\u2310', '\u00AC', '\u00BD', '\u00BC', '\u00A1',
+ '\u00AB', '\u00BB', '\u2591', '\u2592', '\u2593', '\u2502',
+ '\u2524', '\u2561', '\u2562', '\u2556', '\u2555', '\u2563',
+ '\u2551', '\u2557', '\u255D', '\u255C', '\u255B', '\u2510',
+ '\u2514', '\u2534', '\u252C', '\u251C', '\u2500', '\u253C',
+ '\u255E', '\u255F', '\u255A', '\u2554', '\u2569', '\u2566',
+ '\u2560', '\u2550', '\u256C', '\u2567', '\u2568', '\u2564',
+ '\u2565', '\u2559', '\u2558', '\u2552', '\u2553', '\u256B',
+ '\u256A', '\u2518', '\u250C', '\u2588', '\u2584', '\u258C',
+ '\u2590', '\u2580', '\u03B1', '\u00DF', '\u0393', '\u03C0',
+ '\u03A3', '\u03C3', '\u03BC', '\u03C4', '\u03A6', '\u0398',
+ '\u03A9', '\u03B4', '\u221E', '\u03C6', '\u03B5', '\u2229',
+ '\u2261', '\u00B1', '\u2265', '\u2264', '\u2320', '\u2321',
+ '\u00F7', '\u2248', '\u00B0', '\u2219', '\u00B7', '\u221A',
+ '\u207F', '\u00B2', '\u25A0', '\u00A0',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 26) switch(ch)
+ {
+ case 0x001B:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x0020:
+ case 0x0021:
+ case 0x0022:
+ case 0x0023:
+ case 0x0024:
+ case 0x0025:
+ case 0x0026:
+ case 0x0027:
+ case 0x0028:
+ case 0x0029:
+ case 0x002A:
+ case 0x002B:
+ case 0x002C:
+ case 0x002D:
+ case 0x002E:
+ case 0x002F:
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ case 0x003A:
+ case 0x003B:
+ case 0x003C:
+ case 0x003D:
+ case 0x003E:
+ case 0x003F:
+ case 0x0040:
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ case 0x005B:
+ case 0x005C:
+ case 0x005D:
+ case 0x005E:
+ case 0x005F:
+ case 0x0060:
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ case 0x007B:
+ case 0x007C:
+ case 0x007D:
+ case 0x007E:
+ break;
+ case 0x001A: ch = 0x7F; break;
+ case 0x001C: ch = 0x1A; break;
+ case 0x007F: ch = 0x1C; break;
+ case 0x00A0: ch = 0xFF; break;
+ case 0x00A1: ch = 0xAD; break;
+ case 0x00A3: ch = 0x9C; break;
+ case 0x00A7: ch = 0x15; break;
+ case 0x00AB: ch = 0xAE; break;
+ case 0x00AC: ch = 0xAA; break;
+ case 0x00B0: ch = 0xF8; break;
+ case 0x00B1: ch = 0xF1; break;
+ case 0x00B2: ch = 0xFD; break;
+ case 0x00B6: ch = 0x14; break;
+ case 0x00B7: ch = 0xFA; break;
+ case 0x00BB: ch = 0xAF; break;
+ case 0x00BC: ch = 0xAC; break;
+ case 0x00BD: ch = 0xAB; break;
+ case 0x00BF: ch = 0xA8; break;
+ case 0x00C1: ch = 0xA4; break;
+ case 0x00C4: ch = 0x8E; break;
+ case 0x00C5: ch = 0x8F; break;
+ case 0x00C6: ch = 0x92; break;
+ case 0x00C7: ch = 0x80; break;
+ case 0x00C9: ch = 0x90; break;
+ case 0x00CD: ch = 0xA5; break;
+ case 0x00D0: ch = 0x8B; break;
+ case 0x00D3: ch = 0xA6; break;
+ case 0x00D6: ch = 0x99; break;
+ case 0x00D8: ch = 0x9D; break;
+ case 0x00DA: ch = 0xA7; break;
+ case 0x00DC: ch = 0x9A; break;
+ case 0x00DD: ch = 0x97; break;
+ case 0x00DE: ch = 0x8D; break;
+ case 0x00DF: ch = 0xE1; break;
+ case 0x00E0: ch = 0x85; break;
+ case 0x00E1: ch = 0xA0; break;
+ case 0x00E2: ch = 0x83; break;
+ case 0x00E4: ch = 0x84; break;
+ case 0x00E5: ch = 0x86; break;
+ case 0x00E6: ch = 0x91; break;
+ case 0x00E7: ch = 0x87; break;
+ case 0x00E8: ch = 0x8A; break;
+ case 0x00E9: ch = 0x82; break;
+ case 0x00EA: ch = 0x88; break;
+ case 0x00EB: ch = 0x89; break;
+ case 0x00ED: ch = 0xA1; break;
+ case 0x00F0: ch = 0x8C; break;
+ case 0x00F3: ch = 0xA2; break;
+ case 0x00F4: ch = 0x93; break;
+ case 0x00F6: ch = 0x94; break;
+ case 0x00F7: ch = 0xF6; break;
+ case 0x00F8: ch = 0x9B; break;
+ case 0x00FA: ch = 0xA3; break;
+ case 0x00FB: ch = 0x96; break;
+ case 0x00FC: ch = 0x81; break;
+ case 0x00FD: ch = 0x98; break;
+ case 0x00FE: ch = 0x95; break;
+ case 0x0192: ch = 0x9F; break;
+ case 0x0393: ch = 0xE2; break;
+ case 0x0398: ch = 0xE9; break;
+ case 0x03A3: ch = 0xE4; break;
+ case 0x03A6: ch = 0xE8; break;
+ case 0x03A9: ch = 0xEA; break;
+ case 0x03B1: ch = 0xE0; break;
+ case 0x03B4: ch = 0xEB; break;
+ case 0x03B5: ch = 0xEE; break;
+ case 0x03BC: ch = 0xE6; break;
+ case 0x03C0: ch = 0xE3; break;
+ case 0x03C3: ch = 0xE5; break;
+ case 0x03C4: ch = 0xE7; break;
+ case 0x03C6: ch = 0xED; break;
+ case 0x2022: ch = 0x07; break;
+ case 0x203C: ch = 0x13; break;
+ case 0x207F: ch = 0xFC; break;
+ case 0x20A7: ch = 0x9E; break;
+ case 0x2190: ch = 0x1B; break;
+ case 0x2191: ch = 0x18; break;
+ case 0x2192: ch = 0x1A; break;
+ case 0x2193: ch = 0x19; break;
+ case 0x2194: ch = 0x1D; break;
+ case 0x2195: ch = 0x12; break;
+ case 0x21A8: ch = 0x17; break;
+ case 0x2219: ch = 0xF9; break;
+ case 0x221A: ch = 0xFB; break;
+ case 0x221E: ch = 0xEC; break;
+ case 0x221F: ch = 0x1C; break;
+ case 0x2229: ch = 0xEF; break;
+ case 0x2248: ch = 0xF7; break;
+ case 0x2261: ch = 0xF0; break;
+ case 0x2264: ch = 0xF3; break;
+ case 0x2265: ch = 0xF2; break;
+ case 0x2302: ch = 0x7F; break;
+ case 0x2310: ch = 0xA9; break;
+ case 0x2320: ch = 0xF4; break;
+ case 0x2321: ch = 0xF5; break;
+ case 0x2500: ch = 0xC4; break;
+ case 0x2502: ch = 0xB3; break;
+ case 0x250C: ch = 0xDA; break;
+ case 0x2510: ch = 0xBF; break;
+ case 0x2514: ch = 0xC0; break;
+ case 0x2518: ch = 0xD9; break;
+ case 0x251C: ch = 0xC3; break;
+ case 0x2524: ch = 0xB4; break;
+ case 0x252C: ch = 0xC2; break;
+ case 0x2534: ch = 0xC1; break;
+ case 0x253C: ch = 0xC5; break;
+ case 0x2550: ch = 0xCD; break;
+ case 0x2551: ch = 0xBA; break;
+ case 0x2552: ch = 0xD5; break;
+ case 0x2553: ch = 0xD6; break;
+ case 0x2554: ch = 0xC9; break;
+ case 0x2555: ch = 0xB8; break;
+ case 0x2556: ch = 0xB7; break;
+ case 0x2557: ch = 0xBB; break;
+ case 0x2558: ch = 0xD4; break;
+ case 0x2559: ch = 0xD3; break;
+ case 0x255A: ch = 0xC8; break;
+ case 0x255B: ch = 0xBE; break;
+ case 0x255C: ch = 0xBD; break;
+ case 0x255D: ch = 0xBC; break;
+ case 0x255E: ch = 0xC6; break;
+ case 0x255F: ch = 0xC7; break;
+ case 0x2560: ch = 0xCC; break;
+ case 0x2561: ch = 0xB5; break;
+ case 0x2562: ch = 0xB6; break;
+ case 0x2563: ch = 0xB9; break;
+ case 0x2564: ch = 0xD1; break;
+ case 0x2565: ch = 0xD2; break;
+ case 0x2566: ch = 0xCB; break;
+ case 0x2567: ch = 0xCF; break;
+ case 0x2568: ch = 0xD0; break;
+ case 0x2569: ch = 0xCA; break;
+ case 0x256A: ch = 0xD8; break;
+ case 0x256B: ch = 0xD7; break;
+ case 0x256C: ch = 0xCE; break;
+ case 0x2580: ch = 0xDF; break;
+ case 0x2584: ch = 0xDC; break;
+ case 0x2588: ch = 0xDB; break;
+ case 0x258C: ch = 0xDD; break;
+ case 0x2590: ch = 0xDE; break;
+ case 0x2591: ch = 0xB0; break;
+ case 0x2592: ch = 0xB1; break;
+ case 0x2593: ch = 0xB2; break;
+ case 0x25A0: ch = 0xFE; break;
+ case 0x25AC: ch = 0x16; break;
+ case 0x25B2: ch = 0x1E; break;
+ case 0x25BA: ch = 0x10; break;
+ case 0x25BC: ch = 0x1F; break;
+ case 0x25C4: ch = 0x11; break;
+ case 0x25CB: ch = 0x09; break;
+ case 0x25D8: ch = 0x08; break;
+ case 0x25D9: ch = 0x0A; break;
+ case 0x263A: ch = 0x01; break;
+ case 0x263B: ch = 0x02; break;
+ case 0x263C: ch = 0x0F; break;
+ case 0x2640: ch = 0x0C; break;
+ case 0x2642: ch = 0x0B; break;
+ case 0x2660: ch = 0x06; break;
+ case 0x2663: ch = 0x05; break;
+ case 0x2665: ch = 0x03; break;
+ case 0x2666: ch = 0x04; break;
+ case 0x266A: ch = 0x0D; break;
+ case 0x266B: ch = 0x0E; break;
+ case 0xFFE8: ch = 0xB3; break;
+ case 0xFFE9: ch = 0x1B; break;
+ case 0xFFEA: ch = 0x18; break;
+ case 0xFFEB: ch = 0x1A; break;
+ case 0xFFEC: ch = 0x19; break;
+ case 0xFFED: ch = 0xFE; break;
+ case 0xFFEE: ch = 0x09; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 26) switch(ch)
+ {
+ case 0x001B:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x0020:
+ case 0x0021:
+ case 0x0022:
+ case 0x0023:
+ case 0x0024:
+ case 0x0025:
+ case 0x0026:
+ case 0x0027:
+ case 0x0028:
+ case 0x0029:
+ case 0x002A:
+ case 0x002B:
+ case 0x002C:
+ case 0x002D:
+ case 0x002E:
+ case 0x002F:
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ case 0x003A:
+ case 0x003B:
+ case 0x003C:
+ case 0x003D:
+ case 0x003E:
+ case 0x003F:
+ case 0x0040:
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ case 0x005B:
+ case 0x005C:
+ case 0x005D:
+ case 0x005E:
+ case 0x005F:
+ case 0x0060:
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ case 0x007B:
+ case 0x007C:
+ case 0x007D:
+ case 0x007E:
+ break;
+ case 0x001A: ch = 0x7F; break;
+ case 0x001C: ch = 0x1A; break;
+ case 0x007F: ch = 0x1C; break;
+ case 0x00A0: ch = 0xFF; break;
+ case 0x00A1: ch = 0xAD; break;
+ case 0x00A3: ch = 0x9C; break;
+ case 0x00A7: ch = 0x15; break;
+ case 0x00AB: ch = 0xAE; break;
+ case 0x00AC: ch = 0xAA; break;
+ case 0x00B0: ch = 0xF8; break;
+ case 0x00B1: ch = 0xF1; break;
+ case 0x00B2: ch = 0xFD; break;
+ case 0x00B6: ch = 0x14; break;
+ case 0x00B7: ch = 0xFA; break;
+ case 0x00BB: ch = 0xAF; break;
+ case 0x00BC: ch = 0xAC; break;
+ case 0x00BD: ch = 0xAB; break;
+ case 0x00BF: ch = 0xA8; break;
+ case 0x00C1: ch = 0xA4; break;
+ case 0x00C4: ch = 0x8E; break;
+ case 0x00C5: ch = 0x8F; break;
+ case 0x00C6: ch = 0x92; break;
+ case 0x00C7: ch = 0x80; break;
+ case 0x00C9: ch = 0x90; break;
+ case 0x00CD: ch = 0xA5; break;
+ case 0x00D0: ch = 0x8B; break;
+ case 0x00D3: ch = 0xA6; break;
+ case 0x00D6: ch = 0x99; break;
+ case 0x00D8: ch = 0x9D; break;
+ case 0x00DA: ch = 0xA7; break;
+ case 0x00DC: ch = 0x9A; break;
+ case 0x00DD: ch = 0x97; break;
+ case 0x00DE: ch = 0x8D; break;
+ case 0x00DF: ch = 0xE1; break;
+ case 0x00E0: ch = 0x85; break;
+ case 0x00E1: ch = 0xA0; break;
+ case 0x00E2: ch = 0x83; break;
+ case 0x00E4: ch = 0x84; break;
+ case 0x00E5: ch = 0x86; break;
+ case 0x00E6: ch = 0x91; break;
+ case 0x00E7: ch = 0x87; break;
+ case 0x00E8: ch = 0x8A; break;
+ case 0x00E9: ch = 0x82; break;
+ case 0x00EA: ch = 0x88; break;
+ case 0x00EB: ch = 0x89; break;
+ case 0x00ED: ch = 0xA1; break;
+ case 0x00F0: ch = 0x8C; break;
+ case 0x00F3: ch = 0xA2; break;
+ case 0x00F4: ch = 0x93; break;
+ case 0x00F6: ch = 0x94; break;
+ case 0x00F7: ch = 0xF6; break;
+ case 0x00F8: ch = 0x9B; break;
+ case 0x00FA: ch = 0xA3; break;
+ case 0x00FB: ch = 0x96; break;
+ case 0x00FC: ch = 0x81; break;
+ case 0x00FD: ch = 0x98; break;
+ case 0x00FE: ch = 0x95; break;
+ case 0x0192: ch = 0x9F; break;
+ case 0x0393: ch = 0xE2; break;
+ case 0x0398: ch = 0xE9; break;
+ case 0x03A3: ch = 0xE4; break;
+ case 0x03A6: ch = 0xE8; break;
+ case 0x03A9: ch = 0xEA; break;
+ case 0x03B1: ch = 0xE0; break;
+ case 0x03B4: ch = 0xEB; break;
+ case 0x03B5: ch = 0xEE; break;
+ case 0x03BC: ch = 0xE6; break;
+ case 0x03C0: ch = 0xE3; break;
+ case 0x03C3: ch = 0xE5; break;
+ case 0x03C4: ch = 0xE7; break;
+ case 0x03C6: ch = 0xED; break;
+ case 0x2022: ch = 0x07; break;
+ case 0x203C: ch = 0x13; break;
+ case 0x207F: ch = 0xFC; break;
+ case 0x20A7: ch = 0x9E; break;
+ case 0x2190: ch = 0x1B; break;
+ case 0x2191: ch = 0x18; break;
+ case 0x2192: ch = 0x1A; break;
+ case 0x2193: ch = 0x19; break;
+ case 0x2194: ch = 0x1D; break;
+ case 0x2195: ch = 0x12; break;
+ case 0x21A8: ch = 0x17; break;
+ case 0x2219: ch = 0xF9; break;
+ case 0x221A: ch = 0xFB; break;
+ case 0x221E: ch = 0xEC; break;
+ case 0x221F: ch = 0x1C; break;
+ case 0x2229: ch = 0xEF; break;
+ case 0x2248: ch = 0xF7; break;
+ case 0x2261: ch = 0xF0; break;
+ case 0x2264: ch = 0xF3; break;
+ case 0x2265: ch = 0xF2; break;
+ case 0x2302: ch = 0x7F; break;
+ case 0x2310: ch = 0xA9; break;
+ case 0x2320: ch = 0xF4; break;
+ case 0x2321: ch = 0xF5; break;
+ case 0x2500: ch = 0xC4; break;
+ case 0x2502: ch = 0xB3; break;
+ case 0x250C: ch = 0xDA; break;
+ case 0x2510: ch = 0xBF; break;
+ case 0x2514: ch = 0xC0; break;
+ case 0x2518: ch = 0xD9; break;
+ case 0x251C: ch = 0xC3; break;
+ case 0x2524: ch = 0xB4; break;
+ case 0x252C: ch = 0xC2; break;
+ case 0x2534: ch = 0xC1; break;
+ case 0x253C: ch = 0xC5; break;
+ case 0x2550: ch = 0xCD; break;
+ case 0x2551: ch = 0xBA; break;
+ case 0x2552: ch = 0xD5; break;
+ case 0x2553: ch = 0xD6; break;
+ case 0x2554: ch = 0xC9; break;
+ case 0x2555: ch = 0xB8; break;
+ case 0x2556: ch = 0xB7; break;
+ case 0x2557: ch = 0xBB; break;
+ case 0x2558: ch = 0xD4; break;
+ case 0x2559: ch = 0xD3; break;
+ case 0x255A: ch = 0xC8; break;
+ case 0x255B: ch = 0xBE; break;
+ case 0x255C: ch = 0xBD; break;
+ case 0x255D: ch = 0xBC; break;
+ case 0x255E: ch = 0xC6; break;
+ case 0x255F: ch = 0xC7; break;
+ case 0x2560: ch = 0xCC; break;
+ case 0x2561: ch = 0xB5; break;
+ case 0x2562: ch = 0xB6; break;
+ case 0x2563: ch = 0xB9; break;
+ case 0x2564: ch = 0xD1; break;
+ case 0x2565: ch = 0xD2; break;
+ case 0x2566: ch = 0xCB; break;
+ case 0x2567: ch = 0xCF; break;
+ case 0x2568: ch = 0xD0; break;
+ case 0x2569: ch = 0xCA; break;
+ case 0x256A: ch = 0xD8; break;
+ case 0x256B: ch = 0xD7; break;
+ case 0x256C: ch = 0xCE; break;
+ case 0x2580: ch = 0xDF; break;
+ case 0x2584: ch = 0xDC; break;
+ case 0x2588: ch = 0xDB; break;
+ case 0x258C: ch = 0xDD; break;
+ case 0x2590: ch = 0xDE; break;
+ case 0x2591: ch = 0xB0; break;
+ case 0x2592: ch = 0xB1; break;
+ case 0x2593: ch = 0xB2; break;
+ case 0x25A0: ch = 0xFE; break;
+ case 0x25AC: ch = 0x16; break;
+ case 0x25B2: ch = 0x1E; break;
+ case 0x25BA: ch = 0x10; break;
+ case 0x25BC: ch = 0x1F; break;
+ case 0x25C4: ch = 0x11; break;
+ case 0x25CB: ch = 0x09; break;
+ case 0x25D8: ch = 0x08; break;
+ case 0x25D9: ch = 0x0A; break;
+ case 0x263A: ch = 0x01; break;
+ case 0x263B: ch = 0x02; break;
+ case 0x263C: ch = 0x0F; break;
+ case 0x2640: ch = 0x0C; break;
+ case 0x2642: ch = 0x0B; break;
+ case 0x2660: ch = 0x06; break;
+ case 0x2663: ch = 0x05; break;
+ case 0x2665: ch = 0x03; break;
+ case 0x2666: ch = 0x04; break;
+ case 0x266A: ch = 0x0D; break;
+ case 0x266B: ch = 0x0E; break;
+ case 0xFFE8: ch = 0xB3; break;
+ case 0xFFE9: ch = 0x1B; break;
+ case 0xFFEA: ch = 0x18; break;
+ case 0xFFEB: ch = 0x1A; break;
+ case 0xFFEC: ch = 0x19; break;
+ case 0xFFED: ch = 0xFE; break;
+ case 0xFFEE: ch = 0x09; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP861
+
+public class ENCibm861 : CP861
+{
+ public ENCibm861() : base() {}
+
+}; // class ENCibm861
+
+}; // namespace I18N.West
diff --git a/mcs/class/I18N/West/CP863.cs b/mcs/class/I18N/West/CP863.cs
new file mode 100644
index 00000000000..250dbb50975
--- /dev/null
+++ b/mcs/class/I18N/West/CP863.cs
@@ -0,0 +1,679 @@
+/*
+ * CP863.cs - French Canadian (DOS) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-863.ucm".
+
+namespace I18N.West
+{
+
+using System;
+using I18N.Common;
+
+public class CP863 : ByteEncoding
+{
+ public CP863()
+ : base(863, ToChars, "French Canadian (DOS)",
+ "IBM863", "IBM863", "IBM863",
+ false, false, false, false, 1252)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
+ '\u0006', '\u0007', '\u0008', '\u0009', '\u000A', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
+ '\u0018', '\u0019', '\u001C', '\u001B', '\u007F', '\u001D',
+ '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
+ '\u0024', '\u0025', '\u0026', '\u0027', '\u0028', '\u0029',
+ '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
+ '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
+ '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
+ '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
+ '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
+ '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
+ '\u005A', '\u005B', '\u005C', '\u005D', '\u005E', '\u005F',
+ '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
+ '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
+ '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
+ '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
+ '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
+ '\u007E', '\u001A', '\u00C7', '\u00FC', '\u00E9', '\u00E2',
+ '\u00C2', '\u00E0', '\u00B6', '\u00E7', '\u00EA', '\u00EB',
+ '\u00E8', '\u00EF', '\u00EE', '\u2017', '\u00C0', '\u00A7',
+ '\u00C9', '\u00C8', '\u00CA', '\u00F4', '\u00CB', '\u00CF',
+ '\u00FB', '\u00F9', '\u00A4', '\u00D4', '\u00DC', '\u00A2',
+ '\u00A3', '\u00D9', '\u00DB', '\u0192', '\u00A6', '\u00B4',
+ '\u00F3', '\u00FA', '\u00A8', '\u00B8', '\u00B3', '\u00AF',
+ '\u00CE', '\u2310', '\u00AC', '\u00BD', '\u00BC', '\u00BE',
+ '\u00AB', '\u00BB', '\u2591', '\u2592', '\u2593', '\u2502',
+ '\u2524', '\u2561', '\u2562', '\u2556', '\u2555', '\u2563',
+ '\u2551', '\u2557', '\u255D', '\u255C', '\u255B', '\u2510',
+ '\u2514', '\u2534', '\u252C', '\u251C', '\u2500', '\u253C',
+ '\u255E', '\u255F', '\u255A', '\u2554', '\u2569', '\u2566',
+ '\u2560', '\u2550', '\u256C', '\u2567', '\u2568', '\u2564',
+ '\u2565', '\u2559', '\u2558', '\u2552', '\u2553', '\u256B',
+ '\u256A', '\u2518', '\u250C', '\u2588', '\u2584', '\u258C',
+ '\u2590', '\u2580', '\u03B1', '\u00DF', '\u0393', '\u03C0',
+ '\u03A3', '\u03C3', '\u03BC', '\u03C4', '\u03A6', '\u0398',
+ '\u03A9', '\u03B4', '\u221E', '\u03C6', '\u03B5', '\u2229',
+ '\u2261', '\u00B1', '\u2265', '\u2264', '\u2320', '\u2321',
+ '\u00F7', '\u2248', '\u00B0', '\u2219', '\u00B7', '\u221A',
+ '\u207F', '\u00B2', '\u25A0', '\u00A0',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 26) switch(ch)
+ {
+ case 0x001B:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x0020:
+ case 0x0021:
+ case 0x0022:
+ case 0x0023:
+ case 0x0024:
+ case 0x0025:
+ case 0x0026:
+ case 0x0027:
+ case 0x0028:
+ case 0x0029:
+ case 0x002A:
+ case 0x002B:
+ case 0x002C:
+ case 0x002D:
+ case 0x002E:
+ case 0x002F:
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ case 0x003A:
+ case 0x003B:
+ case 0x003C:
+ case 0x003D:
+ case 0x003E:
+ case 0x003F:
+ case 0x0040:
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ case 0x005B:
+ case 0x005C:
+ case 0x005D:
+ case 0x005E:
+ case 0x005F:
+ case 0x0060:
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ case 0x007B:
+ case 0x007C:
+ case 0x007D:
+ case 0x007E:
+ break;
+ case 0x001A: ch = 0x7F; break;
+ case 0x001C: ch = 0x1A; break;
+ case 0x007F: ch = 0x1C; break;
+ case 0x00A0: ch = 0xFF; break;
+ case 0x00A2: ch = 0x9B; break;
+ case 0x00A3: ch = 0x9C; break;
+ case 0x00A4: ch = 0x98; break;
+ case 0x00A6: ch = 0xA0; break;
+ case 0x00A7: ch = 0x8F; break;
+ case 0x00A8: ch = 0xA4; break;
+ case 0x00AB: ch = 0xAE; break;
+ case 0x00AC: ch = 0xAA; break;
+ case 0x00AF: ch = 0xA7; break;
+ case 0x00B0: ch = 0xF8; break;
+ case 0x00B1: ch = 0xF1; break;
+ case 0x00B2: ch = 0xFD; break;
+ case 0x00B3: ch = 0xA6; break;
+ case 0x00B4: ch = 0xA1; break;
+ case 0x00B6: ch = 0x86; break;
+ case 0x00B7: ch = 0xFA; break;
+ case 0x00B8: ch = 0xA5; break;
+ case 0x00BB: ch = 0xAF; break;
+ case 0x00BC: ch = 0xAC; break;
+ case 0x00BD: ch = 0xAB; break;
+ case 0x00BE: ch = 0xAD; break;
+ case 0x00C0: ch = 0x8E; break;
+ case 0x00C2: ch = 0x84; break;
+ case 0x00C7: ch = 0x80; break;
+ case 0x00C8: ch = 0x91; break;
+ case 0x00C9: ch = 0x90; break;
+ case 0x00CA: ch = 0x92; break;
+ case 0x00CB: ch = 0x94; break;
+ case 0x00CE: ch = 0xA8; break;
+ case 0x00CF: ch = 0x95; break;
+ case 0x00D4: ch = 0x99; break;
+ case 0x00D9: ch = 0x9D; break;
+ case 0x00DB: ch = 0x9E; break;
+ case 0x00DC: ch = 0x9A; break;
+ case 0x00DF: ch = 0xE1; break;
+ case 0x00E0: ch = 0x85; break;
+ case 0x00E2: ch = 0x83; break;
+ case 0x00E7: ch = 0x87; break;
+ case 0x00E8: ch = 0x8A; break;
+ case 0x00E9: ch = 0x82; break;
+ case 0x00EA: ch = 0x88; break;
+ case 0x00EB: ch = 0x89; break;
+ case 0x00EE: ch = 0x8C; break;
+ case 0x00EF: ch = 0x8B; break;
+ case 0x00F3: ch = 0xA2; break;
+ case 0x00F4: ch = 0x93; break;
+ case 0x00F7: ch = 0xF6; break;
+ case 0x00F9: ch = 0x97; break;
+ case 0x00FA: ch = 0xA3; break;
+ case 0x00FB: ch = 0x96; break;
+ case 0x00FC: ch = 0x81; break;
+ case 0x0192: ch = 0x9F; break;
+ case 0x0393: ch = 0xE2; break;
+ case 0x0398: ch = 0xE9; break;
+ case 0x03A3: ch = 0xE4; break;
+ case 0x03A6: ch = 0xE8; break;
+ case 0x03A9: ch = 0xEA; break;
+ case 0x03B1: ch = 0xE0; break;
+ case 0x03B4: ch = 0xEB; break;
+ case 0x03B5: ch = 0xEE; break;
+ case 0x03BC: ch = 0xE6; break;
+ case 0x03C0: ch = 0xE3; break;
+ case 0x03C3: ch = 0xE5; break;
+ case 0x03C4: ch = 0xE7; break;
+ case 0x03C6: ch = 0xED; break;
+ case 0x2017: ch = 0x8D; break;
+ case 0x2022: ch = 0x07; break;
+ case 0x203C: ch = 0x13; break;
+ case 0x203E: ch = 0xA7; break;
+ case 0x207F: ch = 0xFC; break;
+ case 0x2190: ch = 0x1B; break;
+ case 0x2191: ch = 0x18; break;
+ case 0x2192: ch = 0x1A; break;
+ case 0x2193: ch = 0x19; break;
+ case 0x2194: ch = 0x1D; break;
+ case 0x2195: ch = 0x12; break;
+ case 0x21A8: ch = 0x17; break;
+ case 0x2219: ch = 0xF9; break;
+ case 0x221A: ch = 0xFB; break;
+ case 0x221E: ch = 0xEC; break;
+ case 0x221F: ch = 0x1C; break;
+ case 0x2229: ch = 0xEF; break;
+ case 0x2248: ch = 0xF7; break;
+ case 0x2261: ch = 0xF0; break;
+ case 0x2264: ch = 0xF3; break;
+ case 0x2265: ch = 0xF2; break;
+ case 0x2302: ch = 0x7F; break;
+ case 0x2310: ch = 0xA9; break;
+ case 0x2320: ch = 0xF4; break;
+ case 0x2321: ch = 0xF5; break;
+ case 0x2500: ch = 0xC4; break;
+ case 0x2502: ch = 0xB3; break;
+ case 0x250C: ch = 0xDA; break;
+ case 0x2510: ch = 0xBF; break;
+ case 0x2514: ch = 0xC0; break;
+ case 0x2518: ch = 0xD9; break;
+ case 0x251C: ch = 0xC3; break;
+ case 0x2524: ch = 0xB4; break;
+ case 0x252C: ch = 0xC2; break;
+ case 0x2534: ch = 0xC1; break;
+ case 0x253C: ch = 0xC5; break;
+ case 0x2550: ch = 0xCD; break;
+ case 0x2551: ch = 0xBA; break;
+ case 0x2552: ch = 0xD5; break;
+ case 0x2553: ch = 0xD6; break;
+ case 0x2554: ch = 0xC9; break;
+ case 0x2555: ch = 0xB8; break;
+ case 0x2556: ch = 0xB7; break;
+ case 0x2557: ch = 0xBB; break;
+ case 0x2558: ch = 0xD4; break;
+ case 0x2559: ch = 0xD3; break;
+ case 0x255A: ch = 0xC8; break;
+ case 0x255B: ch = 0xBE; break;
+ case 0x255C: ch = 0xBD; break;
+ case 0x255D: ch = 0xBC; break;
+ case 0x255E: ch = 0xC6; break;
+ case 0x255F: ch = 0xC7; break;
+ case 0x2560: ch = 0xCC; break;
+ case 0x2561: ch = 0xB5; break;
+ case 0x2562: ch = 0xB6; break;
+ case 0x2563: ch = 0xB9; break;
+ case 0x2564: ch = 0xD1; break;
+ case 0x2565: ch = 0xD2; break;
+ case 0x2566: ch = 0xCB; break;
+ case 0x2567: ch = 0xCF; break;
+ case 0x2568: ch = 0xD0; break;
+ case 0x2569: ch = 0xCA; break;
+ case 0x256A: ch = 0xD8; break;
+ case 0x256B: ch = 0xD7; break;
+ case 0x256C: ch = 0xCE; break;
+ case 0x2580: ch = 0xDF; break;
+ case 0x2584: ch = 0xDC; break;
+ case 0x2588: ch = 0xDB; break;
+ case 0x258C: ch = 0xDD; break;
+ case 0x2590: ch = 0xDE; break;
+ case 0x2591: ch = 0xB0; break;
+ case 0x2592: ch = 0xB1; break;
+ case 0x2593: ch = 0xB2; break;
+ case 0x25A0: ch = 0xFE; break;
+ case 0x25AC: ch = 0x16; break;
+ case 0x25B2: ch = 0x1E; break;
+ case 0x25BA: ch = 0x10; break;
+ case 0x25BC: ch = 0x1F; break;
+ case 0x25C4: ch = 0x11; break;
+ case 0x25CB: ch = 0x09; break;
+ case 0x25D8: ch = 0x08; break;
+ case 0x25D9: ch = 0x0A; break;
+ case 0x263A: ch = 0x01; break;
+ case 0x263B: ch = 0x02; break;
+ case 0x263C: ch = 0x0F; break;
+ case 0x2640: ch = 0x0C; break;
+ case 0x2642: ch = 0x0B; break;
+ case 0x2660: ch = 0x06; break;
+ case 0x2663: ch = 0x05; break;
+ case 0x2665: ch = 0x03; break;
+ case 0x2666: ch = 0x04; break;
+ case 0x266A: ch = 0x0D; break;
+ case 0x266B: ch = 0x0E; break;
+ case 0xFFE8: ch = 0xB3; break;
+ case 0xFFE9: ch = 0x1B; break;
+ case 0xFFEA: ch = 0x18; break;
+ case 0xFFEB: ch = 0x1A; break;
+ case 0xFFEC: ch = 0x19; break;
+ case 0xFFED: ch = 0xFE; break;
+ case 0xFFEE: ch = 0x09; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 26) switch(ch)
+ {
+ case 0x001B:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x0020:
+ case 0x0021:
+ case 0x0022:
+ case 0x0023:
+ case 0x0024:
+ case 0x0025:
+ case 0x0026:
+ case 0x0027:
+ case 0x0028:
+ case 0x0029:
+ case 0x002A:
+ case 0x002B:
+ case 0x002C:
+ case 0x002D:
+ case 0x002E:
+ case 0x002F:
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ case 0x003A:
+ case 0x003B:
+ case 0x003C:
+ case 0x003D:
+ case 0x003E:
+ case 0x003F:
+ case 0x0040:
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ case 0x005B:
+ case 0x005C:
+ case 0x005D:
+ case 0x005E:
+ case 0x005F:
+ case 0x0060:
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ case 0x007B:
+ case 0x007C:
+ case 0x007D:
+ case 0x007E:
+ break;
+ case 0x001A: ch = 0x7F; break;
+ case 0x001C: ch = 0x1A; break;
+ case 0x007F: ch = 0x1C; break;
+ case 0x00A0: ch = 0xFF; break;
+ case 0x00A2: ch = 0x9B; break;
+ case 0x00A3: ch = 0x9C; break;
+ case 0x00A4: ch = 0x98; break;
+ case 0x00A6: ch = 0xA0; break;
+ case 0x00A7: ch = 0x8F; break;
+ case 0x00A8: ch = 0xA4; break;
+ case 0x00AB: ch = 0xAE; break;
+ case 0x00AC: ch = 0xAA; break;
+ case 0x00AF: ch = 0xA7; break;
+ case 0x00B0: ch = 0xF8; break;
+ case 0x00B1: ch = 0xF1; break;
+ case 0x00B2: ch = 0xFD; break;
+ case 0x00B3: ch = 0xA6; break;
+ case 0x00B4: ch = 0xA1; break;
+ case 0x00B6: ch = 0x86; break;
+ case 0x00B7: ch = 0xFA; break;
+ case 0x00B8: ch = 0xA5; break;
+ case 0x00BB: ch = 0xAF; break;
+ case 0x00BC: ch = 0xAC; break;
+ case 0x00BD: ch = 0xAB; break;
+ case 0x00BE: ch = 0xAD; break;
+ case 0x00C0: ch = 0x8E; break;
+ case 0x00C2: ch = 0x84; break;
+ case 0x00C7: ch = 0x80; break;
+ case 0x00C8: ch = 0x91; break;
+ case 0x00C9: ch = 0x90; break;
+ case 0x00CA: ch = 0x92; break;
+ case 0x00CB: ch = 0x94; break;
+ case 0x00CE: ch = 0xA8; break;
+ case 0x00CF: ch = 0x95; break;
+ case 0x00D4: ch = 0x99; break;
+ case 0x00D9: ch = 0x9D; break;
+ case 0x00DB: ch = 0x9E; break;
+ case 0x00DC: ch = 0x9A; break;
+ case 0x00DF: ch = 0xE1; break;
+ case 0x00E0: ch = 0x85; break;
+ case 0x00E2: ch = 0x83; break;
+ case 0x00E7: ch = 0x87; break;
+ case 0x00E8: ch = 0x8A; break;
+ case 0x00E9: ch = 0x82; break;
+ case 0x00EA: ch = 0x88; break;
+ case 0x00EB: ch = 0x89; break;
+ case 0x00EE: ch = 0x8C; break;
+ case 0x00EF: ch = 0x8B; break;
+ case 0x00F3: ch = 0xA2; break;
+ case 0x00F4: ch = 0x93; break;
+ case 0x00F7: ch = 0xF6; break;
+ case 0x00F9: ch = 0x97; break;
+ case 0x00FA: ch = 0xA3; break;
+ case 0x00FB: ch = 0x96; break;
+ case 0x00FC: ch = 0x81; break;
+ case 0x0192: ch = 0x9F; break;
+ case 0x0393: ch = 0xE2; break;
+ case 0x0398: ch = 0xE9; break;
+ case 0x03A3: ch = 0xE4; break;
+ case 0x03A6: ch = 0xE8; break;
+ case 0x03A9: ch = 0xEA; break;
+ case 0x03B1: ch = 0xE0; break;
+ case 0x03B4: ch = 0xEB; break;
+ case 0x03B5: ch = 0xEE; break;
+ case 0x03BC: ch = 0xE6; break;
+ case 0x03C0: ch = 0xE3; break;
+ case 0x03C3: ch = 0xE5; break;
+ case 0x03C4: ch = 0xE7; break;
+ case 0x03C6: ch = 0xED; break;
+ case 0x2017: ch = 0x8D; break;
+ case 0x2022: ch = 0x07; break;
+ case 0x203C: ch = 0x13; break;
+ case 0x203E: ch = 0xA7; break;
+ case 0x207F: ch = 0xFC; break;
+ case 0x2190: ch = 0x1B; break;
+ case 0x2191: ch = 0x18; break;
+ case 0x2192: ch = 0x1A; break;
+ case 0x2193: ch = 0x19; break;
+ case 0x2194: ch = 0x1D; break;
+ case 0x2195: ch = 0x12; break;
+ case 0x21A8: ch = 0x17; break;
+ case 0x2219: ch = 0xF9; break;
+ case 0x221A: ch = 0xFB; break;
+ case 0x221E: ch = 0xEC; break;
+ case 0x221F: ch = 0x1C; break;
+ case 0x2229: ch = 0xEF; break;
+ case 0x2248: ch = 0xF7; break;
+ case 0x2261: ch = 0xF0; break;
+ case 0x2264: ch = 0xF3; break;
+ case 0x2265: ch = 0xF2; break;
+ case 0x2302: ch = 0x7F; break;
+ case 0x2310: ch = 0xA9; break;
+ case 0x2320: ch = 0xF4; break;
+ case 0x2321: ch = 0xF5; break;
+ case 0x2500: ch = 0xC4; break;
+ case 0x2502: ch = 0xB3; break;
+ case 0x250C: ch = 0xDA; break;
+ case 0x2510: ch = 0xBF; break;
+ case 0x2514: ch = 0xC0; break;
+ case 0x2518: ch = 0xD9; break;
+ case 0x251C: ch = 0xC3; break;
+ case 0x2524: ch = 0xB4; break;
+ case 0x252C: ch = 0xC2; break;
+ case 0x2534: ch = 0xC1; break;
+ case 0x253C: ch = 0xC5; break;
+ case 0x2550: ch = 0xCD; break;
+ case 0x2551: ch = 0xBA; break;
+ case 0x2552: ch = 0xD5; break;
+ case 0x2553: ch = 0xD6; break;
+ case 0x2554: ch = 0xC9; break;
+ case 0x2555: ch = 0xB8; break;
+ case 0x2556: ch = 0xB7; break;
+ case 0x2557: ch = 0xBB; break;
+ case 0x2558: ch = 0xD4; break;
+ case 0x2559: ch = 0xD3; break;
+ case 0x255A: ch = 0xC8; break;
+ case 0x255B: ch = 0xBE; break;
+ case 0x255C: ch = 0xBD; break;
+ case 0x255D: ch = 0xBC; break;
+ case 0x255E: ch = 0xC6; break;
+ case 0x255F: ch = 0xC7; break;
+ case 0x2560: ch = 0xCC; break;
+ case 0x2561: ch = 0xB5; break;
+ case 0x2562: ch = 0xB6; break;
+ case 0x2563: ch = 0xB9; break;
+ case 0x2564: ch = 0xD1; break;
+ case 0x2565: ch = 0xD2; break;
+ case 0x2566: ch = 0xCB; break;
+ case 0x2567: ch = 0xCF; break;
+ case 0x2568: ch = 0xD0; break;
+ case 0x2569: ch = 0xCA; break;
+ case 0x256A: ch = 0xD8; break;
+ case 0x256B: ch = 0xD7; break;
+ case 0x256C: ch = 0xCE; break;
+ case 0x2580: ch = 0xDF; break;
+ case 0x2584: ch = 0xDC; break;
+ case 0x2588: ch = 0xDB; break;
+ case 0x258C: ch = 0xDD; break;
+ case 0x2590: ch = 0xDE; break;
+ case 0x2591: ch = 0xB0; break;
+ case 0x2592: ch = 0xB1; break;
+ case 0x2593: ch = 0xB2; break;
+ case 0x25A0: ch = 0xFE; break;
+ case 0x25AC: ch = 0x16; break;
+ case 0x25B2: ch = 0x1E; break;
+ case 0x25BA: ch = 0x10; break;
+ case 0x25BC: ch = 0x1F; break;
+ case 0x25C4: ch = 0x11; break;
+ case 0x25CB: ch = 0x09; break;
+ case 0x25D8: ch = 0x08; break;
+ case 0x25D9: ch = 0x0A; break;
+ case 0x263A: ch = 0x01; break;
+ case 0x263B: ch = 0x02; break;
+ case 0x263C: ch = 0x0F; break;
+ case 0x2640: ch = 0x0C; break;
+ case 0x2642: ch = 0x0B; break;
+ case 0x2660: ch = 0x06; break;
+ case 0x2663: ch = 0x05; break;
+ case 0x2665: ch = 0x03; break;
+ case 0x2666: ch = 0x04; break;
+ case 0x266A: ch = 0x0D; break;
+ case 0x266B: ch = 0x0E; break;
+ case 0xFFE8: ch = 0xB3; break;
+ case 0xFFE9: ch = 0x1B; break;
+ case 0xFFEA: ch = 0x18; break;
+ case 0xFFEB: ch = 0x1A; break;
+ case 0xFFEC: ch = 0x19; break;
+ case 0xFFED: ch = 0xFE; break;
+ case 0xFFEE: ch = 0x09; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP863
+
+public class ENCibm863 : CP863
+{
+ public ENCibm863() : base() {}
+
+}; // class ENCibm863
+
+}; // namespace I18N.West
diff --git a/mcs/class/I18N/West/CP865.cs b/mcs/class/I18N/West/CP865.cs
new file mode 100644
index 00000000000..011d4f164bd
--- /dev/null
+++ b/mcs/class/I18N/West/CP865.cs
@@ -0,0 +1,681 @@
+/*
+ * CP865.cs - Nordic (DOS) code page.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+// Generated from "ibm-865.ucm".
+
+namespace I18N.West
+{
+
+using System;
+using I18N.Common;
+
+public class CP865 : ByteEncoding
+{
+ public CP865()
+ : base(865, ToChars, "Nordic (DOS)",
+ "IBM863", "IBM865", "IBM865",
+ false, false, false, false, 1252)
+ {}
+
+ private static readonly char[] ToChars = {
+ '\u0000', '\u0001', '\u0002', '\u0003', '\u0004', '\u0005',
+ '\u0006', '\u0007', '\u0008', '\u0009', '\u000A', '\u000B',
+ '\u000C', '\u000D', '\u000E', '\u000F', '\u0010', '\u0011',
+ '\u0012', '\u0013', '\u0014', '\u0015', '\u0016', '\u0017',
+ '\u0018', '\u0019', '\u001C', '\u001B', '\u007F', '\u001D',
+ '\u001E', '\u001F', '\u0020', '\u0021', '\u0022', '\u0023',
+ '\u0024', '\u0025', '\u0026', '\u0027', '\u0028', '\u0029',
+ '\u002A', '\u002B', '\u002C', '\u002D', '\u002E', '\u002F',
+ '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035',
+ '\u0036', '\u0037', '\u0038', '\u0039', '\u003A', '\u003B',
+ '\u003C', '\u003D', '\u003E', '\u003F', '\u0040', '\u0041',
+ '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047',
+ '\u0048', '\u0049', '\u004A', '\u004B', '\u004C', '\u004D',
+ '\u004E', '\u004F', '\u0050', '\u0051', '\u0052', '\u0053',
+ '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059',
+ '\u005A', '\u005B', '\u005C', '\u005D', '\u005E', '\u005F',
+ '\u0060', '\u0061', '\u0062', '\u0063', '\u0064', '\u0065',
+ '\u0066', '\u0067', '\u0068', '\u0069', '\u006A', '\u006B',
+ '\u006C', '\u006D', '\u006E', '\u006F', '\u0070', '\u0071',
+ '\u0072', '\u0073', '\u0074', '\u0075', '\u0076', '\u0077',
+ '\u0078', '\u0079', '\u007A', '\u007B', '\u007C', '\u007D',
+ '\u007E', '\u001A', '\u00C7', '\u00FC', '\u00E9', '\u00E2',
+ '\u00E4', '\u00E0', '\u00E5', '\u00E7', '\u00EA', '\u00EB',
+ '\u00E8', '\u00EF', '\u00EE', '\u00EC', '\u00C4', '\u00C5',
+ '\u00C9', '\u00E6', '\u00C6', '\u00F4', '\u00F6', '\u00F2',
+ '\u00FB', '\u00F9', '\u00FF', '\u00D6', '\u00DC', '\u00F8',
+ '\u00A3', '\u00D8', '\u20A7', '\u0192', '\u00E1', '\u00ED',
+ '\u00F3', '\u00FA', '\u00F1', '\u00D1', '\u00AA', '\u00BA',
+ '\u00BF', '\u2310', '\u00AC', '\u00BD', '\u00BC', '\u00A1',
+ '\u00AB', '\u00A4', '\u2591', '\u2592', '\u2593', '\u2502',
+ '\u2524', '\u2561', '\u2562', '\u2556', '\u2555', '\u2563',
+ '\u2551', '\u2557', '\u255D', '\u255C', '\u255B', '\u2510',
+ '\u2514', '\u2534', '\u252C', '\u251C', '\u2500', '\u253C',
+ '\u255E', '\u255F', '\u255A', '\u2554', '\u2569', '\u2566',
+ '\u2560', '\u2550', '\u256C', '\u2567', '\u2568', '\u2564',
+ '\u2565', '\u2559', '\u2558', '\u2552', '\u2553', '\u256B',
+ '\u256A', '\u2518', '\u250C', '\u2588', '\u2584', '\u258C',
+ '\u2590', '\u2580', '\u03B1', '\u00DF', '\u0393', '\u03C0',
+ '\u03A3', '\u03C3', '\u03BC', '\u03C4', '\u03A6', '\u0398',
+ '\u03A9', '\u03B4', '\u221E', '\u03C6', '\u03B5', '\u2229',
+ '\u2261', '\u00B1', '\u2265', '\u2264', '\u2320', '\u2321',
+ '\u00F7', '\u2248', '\u00B0', '\u2219', '\u00B7', '\u221A',
+ '\u207F', '\u00B2', '\u25A0', '\u00A0',
+ };
+
+ protected override void ToBytes(char[] chars, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(chars[charIndex++]);
+ if(ch >= 26) switch(ch)
+ {
+ case 0x001B:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x0020:
+ case 0x0021:
+ case 0x0022:
+ case 0x0023:
+ case 0x0024:
+ case 0x0025:
+ case 0x0026:
+ case 0x0027:
+ case 0x0028:
+ case 0x0029:
+ case 0x002A:
+ case 0x002B:
+ case 0x002C:
+ case 0x002D:
+ case 0x002E:
+ case 0x002F:
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ case 0x003A:
+ case 0x003B:
+ case 0x003C:
+ case 0x003D:
+ case 0x003E:
+ case 0x003F:
+ case 0x0040:
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ case 0x005B:
+ case 0x005C:
+ case 0x005D:
+ case 0x005E:
+ case 0x005F:
+ case 0x0060:
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ case 0x007B:
+ case 0x007C:
+ case 0x007D:
+ case 0x007E:
+ break;
+ case 0x001A: ch = 0x7F; break;
+ case 0x001C: ch = 0x1A; break;
+ case 0x007F: ch = 0x1C; break;
+ case 0x00A0: ch = 0xFF; break;
+ case 0x00A1: ch = 0xAD; break;
+ case 0x00A3: ch = 0x9C; break;
+ case 0x00A4: ch = 0xAF; break;
+ case 0x00A7: ch = 0x15; break;
+ case 0x00AA: ch = 0xA6; break;
+ case 0x00AB: ch = 0xAE; break;
+ case 0x00AC: ch = 0xAA; break;
+ case 0x00B0: ch = 0xF8; break;
+ case 0x00B1: ch = 0xF1; break;
+ case 0x00B2: ch = 0xFD; break;
+ case 0x00B6: ch = 0x14; break;
+ case 0x00B7: ch = 0xFA; break;
+ case 0x00BA: ch = 0xA7; break;
+ case 0x00BC: ch = 0xAC; break;
+ case 0x00BD: ch = 0xAB; break;
+ case 0x00BF: ch = 0xA8; break;
+ case 0x00C4: ch = 0x8E; break;
+ case 0x00C5: ch = 0x8F; break;
+ case 0x00C6: ch = 0x92; break;
+ case 0x00C7: ch = 0x80; break;
+ case 0x00C9: ch = 0x90; break;
+ case 0x00D1: ch = 0xA5; break;
+ case 0x00D6: ch = 0x99; break;
+ case 0x00D8: ch = 0x9D; break;
+ case 0x00DC: ch = 0x9A; break;
+ case 0x00DF: ch = 0xE1; break;
+ case 0x00E0: ch = 0x85; break;
+ case 0x00E1: ch = 0xA0; break;
+ case 0x00E2: ch = 0x83; break;
+ case 0x00E4: ch = 0x84; break;
+ case 0x00E5: ch = 0x86; break;
+ case 0x00E6: ch = 0x91; break;
+ case 0x00E7: ch = 0x87; break;
+ case 0x00E8: ch = 0x8A; break;
+ case 0x00E9: ch = 0x82; break;
+ case 0x00EA: ch = 0x88; break;
+ case 0x00EB: ch = 0x89; break;
+ case 0x00EC: ch = 0x8D; break;
+ case 0x00ED: ch = 0xA1; break;
+ case 0x00EE: ch = 0x8C; break;
+ case 0x00EF: ch = 0x8B; break;
+ case 0x00F1: ch = 0xA4; break;
+ case 0x00F2: ch = 0x95; break;
+ case 0x00F3: ch = 0xA2; break;
+ case 0x00F4: ch = 0x93; break;
+ case 0x00F6: ch = 0x94; break;
+ case 0x00F7: ch = 0xF6; break;
+ case 0x00F8: ch = 0x9B; break;
+ case 0x00F9: ch = 0x97; break;
+ case 0x00FA: ch = 0xA3; break;
+ case 0x00FB: ch = 0x96; break;
+ case 0x00FC: ch = 0x81; break;
+ case 0x00FF: ch = 0x98; break;
+ case 0x0192: ch = 0x9F; break;
+ case 0x0393: ch = 0xE2; break;
+ case 0x0398: ch = 0xE9; break;
+ case 0x03A3: ch = 0xE4; break;
+ case 0x03A6: ch = 0xE8; break;
+ case 0x03A9: ch = 0xEA; break;
+ case 0x03B1: ch = 0xE0; break;
+ case 0x03B4: ch = 0xEB; break;
+ case 0x03B5: ch = 0xEE; break;
+ case 0x03BC: ch = 0xE6; break;
+ case 0x03C0: ch = 0xE3; break;
+ case 0x03C3: ch = 0xE5; break;
+ case 0x03C4: ch = 0xE7; break;
+ case 0x03C6: ch = 0xED; break;
+ case 0x2022: ch = 0x07; break;
+ case 0x203C: ch = 0x13; break;
+ case 0x207F: ch = 0xFC; break;
+ case 0x20A7: ch = 0x9E; break;
+ case 0x2190: ch = 0x1B; break;
+ case 0x2191: ch = 0x18; break;
+ case 0x2192: ch = 0x1A; break;
+ case 0x2193: ch = 0x19; break;
+ case 0x2194: ch = 0x1D; break;
+ case 0x2195: ch = 0x12; break;
+ case 0x21A8: ch = 0x17; break;
+ case 0x2219: ch = 0xF9; break;
+ case 0x221A: ch = 0xFB; break;
+ case 0x221E: ch = 0xEC; break;
+ case 0x221F: ch = 0x1C; break;
+ case 0x2229: ch = 0xEF; break;
+ case 0x2248: ch = 0xF7; break;
+ case 0x2261: ch = 0xF0; break;
+ case 0x2264: ch = 0xF3; break;
+ case 0x2265: ch = 0xF2; break;
+ case 0x2302: ch = 0x7F; break;
+ case 0x2310: ch = 0xA9; break;
+ case 0x2320: ch = 0xF4; break;
+ case 0x2321: ch = 0xF5; break;
+ case 0x2500: ch = 0xC4; break;
+ case 0x2502: ch = 0xB3; break;
+ case 0x250C: ch = 0xDA; break;
+ case 0x2510: ch = 0xBF; break;
+ case 0x2514: ch = 0xC0; break;
+ case 0x2518: ch = 0xD9; break;
+ case 0x251C: ch = 0xC3; break;
+ case 0x2524: ch = 0xB4; break;
+ case 0x252C: ch = 0xC2; break;
+ case 0x2534: ch = 0xC1; break;
+ case 0x253C: ch = 0xC5; break;
+ case 0x2550: ch = 0xCD; break;
+ case 0x2551: ch = 0xBA; break;
+ case 0x2552: ch = 0xD5; break;
+ case 0x2553: ch = 0xD6; break;
+ case 0x2554: ch = 0xC9; break;
+ case 0x2555: ch = 0xB8; break;
+ case 0x2556: ch = 0xB7; break;
+ case 0x2557: ch = 0xBB; break;
+ case 0x2558: ch = 0xD4; break;
+ case 0x2559: ch = 0xD3; break;
+ case 0x255A: ch = 0xC8; break;
+ case 0x255B: ch = 0xBE; break;
+ case 0x255C: ch = 0xBD; break;
+ case 0x255D: ch = 0xBC; break;
+ case 0x255E: ch = 0xC6; break;
+ case 0x255F: ch = 0xC7; break;
+ case 0x2560: ch = 0xCC; break;
+ case 0x2561: ch = 0xB5; break;
+ case 0x2562: ch = 0xB6; break;
+ case 0x2563: ch = 0xB9; break;
+ case 0x2564: ch = 0xD1; break;
+ case 0x2565: ch = 0xD2; break;
+ case 0x2566: ch = 0xCB; break;
+ case 0x2567: ch = 0xCF; break;
+ case 0x2568: ch = 0xD0; break;
+ case 0x2569: ch = 0xCA; break;
+ case 0x256A: ch = 0xD8; break;
+ case 0x256B: ch = 0xD7; break;
+ case 0x256C: ch = 0xCE; break;
+ case 0x2580: ch = 0xDF; break;
+ case 0x2584: ch = 0xDC; break;
+ case 0x2588: ch = 0xDB; break;
+ case 0x258C: ch = 0xDD; break;
+ case 0x2590: ch = 0xDE; break;
+ case 0x2591: ch = 0xB0; break;
+ case 0x2592: ch = 0xB1; break;
+ case 0x2593: ch = 0xB2; break;
+ case 0x25A0: ch = 0xFE; break;
+ case 0x25AC: ch = 0x16; break;
+ case 0x25B2: ch = 0x1E; break;
+ case 0x25BA: ch = 0x10; break;
+ case 0x25BC: ch = 0x1F; break;
+ case 0x25C4: ch = 0x11; break;
+ case 0x25CB: ch = 0x09; break;
+ case 0x25D8: ch = 0x08; break;
+ case 0x25D9: ch = 0x0A; break;
+ case 0x263A: ch = 0x01; break;
+ case 0x263B: ch = 0x02; break;
+ case 0x263C: ch = 0x0F; break;
+ case 0x2640: ch = 0x0C; break;
+ case 0x2642: ch = 0x0B; break;
+ case 0x2660: ch = 0x06; break;
+ case 0x2663: ch = 0x05; break;
+ case 0x2665: ch = 0x03; break;
+ case 0x2666: ch = 0x04; break;
+ case 0x266A: ch = 0x0D; break;
+ case 0x266B: ch = 0x0E; break;
+ case 0xFFE8: ch = 0xB3; break;
+ case 0xFFE9: ch = 0x1B; break;
+ case 0xFFEA: ch = 0x18; break;
+ case 0xFFEB: ch = 0x1A; break;
+ case 0xFFEC: ch = 0x19; break;
+ case 0xFFED: ch = 0xFE; break;
+ case 0xFFEE: ch = 0x09; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+ protected override void ToBytes(String s, int charIndex, int charCount,
+ byte[] bytes, int byteIndex)
+ {
+ int ch;
+ while(charCount > 0)
+ {
+ ch = (int)(s[charIndex++]);
+ if(ch >= 26) switch(ch)
+ {
+ case 0x001B:
+ case 0x001D:
+ case 0x001E:
+ case 0x001F:
+ case 0x0020:
+ case 0x0021:
+ case 0x0022:
+ case 0x0023:
+ case 0x0024:
+ case 0x0025:
+ case 0x0026:
+ case 0x0027:
+ case 0x0028:
+ case 0x0029:
+ case 0x002A:
+ case 0x002B:
+ case 0x002C:
+ case 0x002D:
+ case 0x002E:
+ case 0x002F:
+ case 0x0030:
+ case 0x0031:
+ case 0x0032:
+ case 0x0033:
+ case 0x0034:
+ case 0x0035:
+ case 0x0036:
+ case 0x0037:
+ case 0x0038:
+ case 0x0039:
+ case 0x003A:
+ case 0x003B:
+ case 0x003C:
+ case 0x003D:
+ case 0x003E:
+ case 0x003F:
+ case 0x0040:
+ case 0x0041:
+ case 0x0042:
+ case 0x0043:
+ case 0x0044:
+ case 0x0045:
+ case 0x0046:
+ case 0x0047:
+ case 0x0048:
+ case 0x0049:
+ case 0x004A:
+ case 0x004B:
+ case 0x004C:
+ case 0x004D:
+ case 0x004E:
+ case 0x004F:
+ case 0x0050:
+ case 0x0051:
+ case 0x0052:
+ case 0x0053:
+ case 0x0054:
+ case 0x0055:
+ case 0x0056:
+ case 0x0057:
+ case 0x0058:
+ case 0x0059:
+ case 0x005A:
+ case 0x005B:
+ case 0x005C:
+ case 0x005D:
+ case 0x005E:
+ case 0x005F:
+ case 0x0060:
+ case 0x0061:
+ case 0x0062:
+ case 0x0063:
+ case 0x0064:
+ case 0x0065:
+ case 0x0066:
+ case 0x0067:
+ case 0x0068:
+ case 0x0069:
+ case 0x006A:
+ case 0x006B:
+ case 0x006C:
+ case 0x006D:
+ case 0x006E:
+ case 0x006F:
+ case 0x0070:
+ case 0x0071:
+ case 0x0072:
+ case 0x0073:
+ case 0x0074:
+ case 0x0075:
+ case 0x0076:
+ case 0x0077:
+ case 0x0078:
+ case 0x0079:
+ case 0x007A:
+ case 0x007B:
+ case 0x007C:
+ case 0x007D:
+ case 0x007E:
+ break;
+ case 0x001A: ch = 0x7F; break;
+ case 0x001C: ch = 0x1A; break;
+ case 0x007F: ch = 0x1C; break;
+ case 0x00A0: ch = 0xFF; break;
+ case 0x00A1: ch = 0xAD; break;
+ case 0x00A3: ch = 0x9C; break;
+ case 0x00A4: ch = 0xAF; break;
+ case 0x00A7: ch = 0x15; break;
+ case 0x00AA: ch = 0xA6; break;
+ case 0x00AB: ch = 0xAE; break;
+ case 0x00AC: ch = 0xAA; break;
+ case 0x00B0: ch = 0xF8; break;
+ case 0x00B1: ch = 0xF1; break;
+ case 0x00B2: ch = 0xFD; break;
+ case 0x00B6: ch = 0x14; break;
+ case 0x00B7: ch = 0xFA; break;
+ case 0x00BA: ch = 0xA7; break;
+ case 0x00BC: ch = 0xAC; break;
+ case 0x00BD: ch = 0xAB; break;
+ case 0x00BF: ch = 0xA8; break;
+ case 0x00C4: ch = 0x8E; break;
+ case 0x00C5: ch = 0x8F; break;
+ case 0x00C6: ch = 0x92; break;
+ case 0x00C7: ch = 0x80; break;
+ case 0x00C9: ch = 0x90; break;
+ case 0x00D1: ch = 0xA5; break;
+ case 0x00D6: ch = 0x99; break;
+ case 0x00D8: ch = 0x9D; break;
+ case 0x00DC: ch = 0x9A; break;
+ case 0x00DF: ch = 0xE1; break;
+ case 0x00E0: ch = 0x85; break;
+ case 0x00E1: ch = 0xA0; break;
+ case 0x00E2: ch = 0x83; break;
+ case 0x00E4: ch = 0x84; break;
+ case 0x00E5: ch = 0x86; break;
+ case 0x00E6: ch = 0x91; break;
+ case 0x00E7: ch = 0x87; break;
+ case 0x00E8: ch = 0x8A; break;
+ case 0x00E9: ch = 0x82; break;
+ case 0x00EA: ch = 0x88; break;
+ case 0x00EB: ch = 0x89; break;
+ case 0x00EC: ch = 0x8D; break;
+ case 0x00ED: ch = 0xA1; break;
+ case 0x00EE: ch = 0x8C; break;
+ case 0x00EF: ch = 0x8B; break;
+ case 0x00F1: ch = 0xA4; break;
+ case 0x00F2: ch = 0x95; break;
+ case 0x00F3: ch = 0xA2; break;
+ case 0x00F4: ch = 0x93; break;
+ case 0x00F6: ch = 0x94; break;
+ case 0x00F7: ch = 0xF6; break;
+ case 0x00F8: ch = 0x9B; break;
+ case 0x00F9: ch = 0x97; break;
+ case 0x00FA: ch = 0xA3; break;
+ case 0x00FB: ch = 0x96; break;
+ case 0x00FC: ch = 0x81; break;
+ case 0x00FF: ch = 0x98; break;
+ case 0x0192: ch = 0x9F; break;
+ case 0x0393: ch = 0xE2; break;
+ case 0x0398: ch = 0xE9; break;
+ case 0x03A3: ch = 0xE4; break;
+ case 0x03A6: ch = 0xE8; break;
+ case 0x03A9: ch = 0xEA; break;
+ case 0x03B1: ch = 0xE0; break;
+ case 0x03B4: ch = 0xEB; break;
+ case 0x03B5: ch = 0xEE; break;
+ case 0x03BC: ch = 0xE6; break;
+ case 0x03C0: ch = 0xE3; break;
+ case 0x03C3: ch = 0xE5; break;
+ case 0x03C4: ch = 0xE7; break;
+ case 0x03C6: ch = 0xED; break;
+ case 0x2022: ch = 0x07; break;
+ case 0x203C: ch = 0x13; break;
+ case 0x207F: ch = 0xFC; break;
+ case 0x20A7: ch = 0x9E; break;
+ case 0x2190: ch = 0x1B; break;
+ case 0x2191: ch = 0x18; break;
+ case 0x2192: ch = 0x1A; break;
+ case 0x2193: ch = 0x19; break;
+ case 0x2194: ch = 0x1D; break;
+ case 0x2195: ch = 0x12; break;
+ case 0x21A8: ch = 0x17; break;
+ case 0x2219: ch = 0xF9; break;
+ case 0x221A: ch = 0xFB; break;
+ case 0x221E: ch = 0xEC; break;
+ case 0x221F: ch = 0x1C; break;
+ case 0x2229: ch = 0xEF; break;
+ case 0x2248: ch = 0xF7; break;
+ case 0x2261: ch = 0xF0; break;
+ case 0x2264: ch = 0xF3; break;
+ case 0x2265: ch = 0xF2; break;
+ case 0x2302: ch = 0x7F; break;
+ case 0x2310: ch = 0xA9; break;
+ case 0x2320: ch = 0xF4; break;
+ case 0x2321: ch = 0xF5; break;
+ case 0x2500: ch = 0xC4; break;
+ case 0x2502: ch = 0xB3; break;
+ case 0x250C: ch = 0xDA; break;
+ case 0x2510: ch = 0xBF; break;
+ case 0x2514: ch = 0xC0; break;
+ case 0x2518: ch = 0xD9; break;
+ case 0x251C: ch = 0xC3; break;
+ case 0x2524: ch = 0xB4; break;
+ case 0x252C: ch = 0xC2; break;
+ case 0x2534: ch = 0xC1; break;
+ case 0x253C: ch = 0xC5; break;
+ case 0x2550: ch = 0xCD; break;
+ case 0x2551: ch = 0xBA; break;
+ case 0x2552: ch = 0xD5; break;
+ case 0x2553: ch = 0xD6; break;
+ case 0x2554: ch = 0xC9; break;
+ case 0x2555: ch = 0xB8; break;
+ case 0x2556: ch = 0xB7; break;
+ case 0x2557: ch = 0xBB; break;
+ case 0x2558: ch = 0xD4; break;
+ case 0x2559: ch = 0xD3; break;
+ case 0x255A: ch = 0xC8; break;
+ case 0x255B: ch = 0xBE; break;
+ case 0x255C: ch = 0xBD; break;
+ case 0x255D: ch = 0xBC; break;
+ case 0x255E: ch = 0xC6; break;
+ case 0x255F: ch = 0xC7; break;
+ case 0x2560: ch = 0xCC; break;
+ case 0x2561: ch = 0xB5; break;
+ case 0x2562: ch = 0xB6; break;
+ case 0x2563: ch = 0xB9; break;
+ case 0x2564: ch = 0xD1; break;
+ case 0x2565: ch = 0xD2; break;
+ case 0x2566: ch = 0xCB; break;
+ case 0x2567: ch = 0xCF; break;
+ case 0x2568: ch = 0xD0; break;
+ case 0x2569: ch = 0xCA; break;
+ case 0x256A: ch = 0xD8; break;
+ case 0x256B: ch = 0xD7; break;
+ case 0x256C: ch = 0xCE; break;
+ case 0x2580: ch = 0xDF; break;
+ case 0x2584: ch = 0xDC; break;
+ case 0x2588: ch = 0xDB; break;
+ case 0x258C: ch = 0xDD; break;
+ case 0x2590: ch = 0xDE; break;
+ case 0x2591: ch = 0xB0; break;
+ case 0x2592: ch = 0xB1; break;
+ case 0x2593: ch = 0xB2; break;
+ case 0x25A0: ch = 0xFE; break;
+ case 0x25AC: ch = 0x16; break;
+ case 0x25B2: ch = 0x1E; break;
+ case 0x25BA: ch = 0x10; break;
+ case 0x25BC: ch = 0x1F; break;
+ case 0x25C4: ch = 0x11; break;
+ case 0x25CB: ch = 0x09; break;
+ case 0x25D8: ch = 0x08; break;
+ case 0x25D9: ch = 0x0A; break;
+ case 0x263A: ch = 0x01; break;
+ case 0x263B: ch = 0x02; break;
+ case 0x263C: ch = 0x0F; break;
+ case 0x2640: ch = 0x0C; break;
+ case 0x2642: ch = 0x0B; break;
+ case 0x2660: ch = 0x06; break;
+ case 0x2663: ch = 0x05; break;
+ case 0x2665: ch = 0x03; break;
+ case 0x2666: ch = 0x04; break;
+ case 0x266A: ch = 0x0D; break;
+ case 0x266B: ch = 0x0E; break;
+ case 0xFFE8: ch = 0xB3; break;
+ case 0xFFE9: ch = 0x1B; break;
+ case 0xFFEA: ch = 0x18; break;
+ case 0xFFEB: ch = 0x1A; break;
+ case 0xFFEC: ch = 0x19; break;
+ case 0xFFED: ch = 0xFE; break;
+ case 0xFFEE: ch = 0x09; break;
+ default:
+ {
+ if(ch >= 0xFF01 && ch <= 0xFF5E)
+ ch -= 0xFEE0;
+ else
+ ch = 0x3F;
+ }
+ break;
+ }
+ bytes[byteIndex++] = (byte)ch;
+ --charCount;
+ }
+ }
+
+}; // class CP865
+
+public class ENCibm865 : CP865
+{
+ public ENCibm865() : base() {}
+
+}; // class ENCibm865
+
+}; // namespace I18N.West
diff --git a/mcs/class/I18N/West/ibm-1275.ucm b/mcs/class/I18N/West/ibm-1275.ucm
new file mode 100644
index 00000000000..c6e6d6ec3d3
--- /dev/null
+++ b/mcs/class/I18N/West/ibm-1275.ucm
@@ -0,0 +1,380 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1995-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Mon Nov 13 08:50:43 2000
+#
+# File created by dtcocm version 3.00
+# from source files 34B004FB.RPMAP100 and 04FB34B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-1275"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x1A
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-1275
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x1A |0
+<U001B> \x1B |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x7F |0
+<U00A0> \xCA |0
+<U00A1> \xC1 |0
+<U00A2> \xA2 |0
+<U00A3> \xA3 |0
+<U00A4> \xDB |0
+<U00A5> \xB4 |0
+<U00A7> \xA4 |0
+<U00A8> \xAC |0
+<U00A9> \xA9 |0
+<U00AA> \xBB |0
+<U00AB> \xC7 |0
+<U00AC> \xC2 |0
+<U00AE> \xA8 |0
+<U00AF> \xF8 |0
+<U00B0> \xA1 |0
+<U00B1> \xB1 |0
+<U00B4> \xAB |0
+<U00B5> \xB5 |0
+<U00B6> \xA6 |0
+<U00B7> \xE1 |0
+<U00B8> \xFC |0
+<U00BA> \xBC |0
+<U00BB> \xC8 |0
+<U00BF> \xC0 |0
+<U00C0> \xCB |0
+<U00C1> \xE7 |0
+<U00C2> \xE5 |0
+<U00C3> \xCC |0
+<U00C4> \x80 |0
+<U00C5> \x81 |0
+<U00C6> \xAE |0
+<U00C7> \x82 |0
+<U00C8> \xE9 |0
+<U00C9> \x83 |0
+<U00CA> \xE6 |0
+<U00CB> \xE8 |0
+<U00CC> \xED |0
+<U00CD> \xEA |0
+<U00CE> \xEB |0
+<U00CF> \xEC |0
+<U00D1> \x84 |0
+<U00D2> \xF1 |0
+<U00D3> \xEE |0
+<U00D4> \xEF |0
+<U00D5> \xCD |0
+<U00D6> \x85 |0
+<U00D8> \xAF |0
+<U00D9> \xF4 |0
+<U00DA> \xF2 |0
+<U00DB> \xF3 |0
+<U00DC> \x86 |0
+<U00DF> \xA7 |0
+<U00E0> \x88 |0
+<U00E1> \x87 |0
+<U00E2> \x89 |0
+<U00E3> \x8B |0
+<U00E4> \x8A |0
+<U00E5> \x8C |0
+<U00E6> \xBE |0
+<U00E7> \x8D |0
+<U00E8> \x8F |0
+<U00E9> \x8E |0
+<U00EA> \x90 |0
+<U00EB> \x91 |0
+<U00EC> \x93 |0
+<U00ED> \x92 |0
+<U00EE> \x94 |0
+<U00EF> \x95 |0
+<U00F1> \x96 |0
+<U00F2> \x98 |0
+<U00F3> \x97 |0
+<U00F4> \x99 |0
+<U00F5> \x9B |0
+<U00F6> \x9A |0
+<U00F7> \xD6 |0
+<U00F8> \xBF |0
+<U00F9> \x9D |0
+<U00FA> \x9C |0
+<U00FB> \x9E |0
+<U00FC> \x9F |0
+<U00FF> \xD8 |0
+<U0131> \xF5 |0
+<U0152> \xCE |0
+<U0153> \xCF |0
+<U0178> \xD9 |0
+<U0192> \xC4 |0
+<U02C6> \xF6 |0
+<U02C7> \xFF |0
+<U02D8> \xF9 |0
+<U02D9> \xFA |0
+<U02DA> \xFB |0
+<U02DB> \xFE |0
+<U02DC> \xF7 |0
+<U02DD> \xFD |0
+<U03C0> \xB9 |0
+<U2013> \xD0 |0
+<U2014> \xD1 |0
+<U2018> \xD4 |0
+<U2019> \xD5 |0
+<U201A> \xE2 |0
+<U201C> \xD2 |0
+<U201D> \xD3 |0
+<U201E> \xE3 |0
+<U2020> \xA0 |0
+<U2021> \xE0 |0
+<U2022> \xA5 |0
+<U2026> \xC9 |0
+<U2030> \xE4 |0
+<U2039> \xDC |0
+<U203A> \xDD |0
+<U2044> \xDA |0
+<U2122> \xAA |0
+<U2126> \xBD |0
+<U2202> \xB6 |0
+<U2206> \xC6 |0
+<U220F> \xB8 |0
+<U2211> \xB7 |0
+<U221A> \xC3 |0
+<U221E> \xB0 |0
+<U222B> \xBA |0
+<U2248> \xC5 |0
+<U2260> \xAD |0
+<U2264> \xB2 |0
+<U2265> \xB3 |0
+<U2318> \x11 |1
+<U25CA> \xD7 |0
+<U2666> \x13 |1
+<U2713> \x12 |1
+<UF8FF> \xF0 |0
+<UFB01> \xDE |0
+<UFB02> \xDF |0
+<UFF01> \x21 |1
+<UFF02> \x22 |1
+<UFF03> \x23 |1
+<UFF04> \x24 |1
+<UFF05> \x25 |1
+<UFF06> \x26 |1
+<UFF07> \x27 |1
+<UFF08> \x28 |1
+<UFF09> \x29 |1
+<UFF0A> \x2A |1
+<UFF0B> \x2B |1
+<UFF0C> \x2C |1
+<UFF0D> \x2D |1
+<UFF0E> \x2E |1
+<UFF0F> \x2F |1
+<UFF10> \x30 |1
+<UFF11> \x31 |1
+<UFF12> \x32 |1
+<UFF13> \x33 |1
+<UFF14> \x34 |1
+<UFF15> \x35 |1
+<UFF16> \x36 |1
+<UFF17> \x37 |1
+<UFF18> \x38 |1
+<UFF19> \x39 |1
+<UFF1A> \x3A |1
+<UFF1B> \x3B |1
+<UFF1C> \x3C |1
+<UFF1D> \x3D |1
+<UFF1E> \x3E |1
+<UFF1F> \x3F |1
+<UFF20> \x40 |1
+<UFF21> \x41 |1
+<UFF22> \x42 |1
+<UFF23> \x43 |1
+<UFF24> \x44 |1
+<UFF25> \x45 |1
+<UFF26> \x46 |1
+<UFF27> \x47 |1
+<UFF28> \x48 |1
+<UFF29> \x49 |1
+<UFF2A> \x4A |1
+<UFF2B> \x4B |1
+<UFF2C> \x4C |1
+<UFF2D> \x4D |1
+<UFF2E> \x4E |1
+<UFF2F> \x4F |1
+<UFF30> \x50 |1
+<UFF31> \x51 |1
+<UFF32> \x52 |1
+<UFF33> \x53 |1
+<UFF34> \x54 |1
+<UFF35> \x55 |1
+<UFF36> \x56 |1
+<UFF37> \x57 |1
+<UFF38> \x58 |1
+<UFF39> \x59 |1
+<UFF3A> \x5A |1
+<UFF3B> \x5B |1
+<UFF3C> \x5C |1
+<UFF3D> \x5D |1
+<UFF3E> \x5E |1
+<UFF3F> \x5F |1
+<UFF40> \x60 |1
+<UFF41> \x61 |1
+<UFF42> \x62 |1
+<UFF43> \x63 |1
+<UFF44> \x64 |1
+<UFF45> \x65 |1
+<UFF46> \x66 |1
+<UFF47> \x67 |1
+<UFF48> \x68 |1
+<UFF49> \x69 |1
+<UFF4A> \x6A |1
+<UFF4B> \x6B |1
+<UFF4C> \x6C |1
+<UFF4D> \x6D |1
+<UFF4E> \x6E |1
+<UFF4F> \x6F |1
+<UFF50> \x70 |1
+<UFF51> \x71 |1
+<UFF52> \x72 |1
+<UFF53> \x73 |1
+<UFF54> \x74 |1
+<UFF55> \x75 |1
+<UFF56> \x76 |1
+<UFF57> \x77 |1
+<UFF58> \x78 |1
+<UFF59> \x79 |1
+<UFF5A> \x7A |1
+<UFF5B> \x7B |1
+<UFF5C> \x7C |1
+<UFF5D> \x7D |1
+<UFF5E> \x7E |1
+END CHARMAP
diff --git a/mcs/class/I18N/West/ibm-437.ucm b/mcs/class/I18N/West/ibm-437.ucm
new file mode 100644
index 00000000000..5d9a2ad5cdd
--- /dev/null
+++ b/mcs/class/I18N/West/ibm-437.ucm
@@ -0,0 +1,416 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1995-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Mon Nov 13 08:50:42 2000
+#
+# File created by dtcocm version 3.00
+# from source files 34B001B5.RPMAP100 and 01B534B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-437"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x7F
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-437
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x7F |0
+<U001B> \x1B |0
+<U001C> \x1A |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x1C |0
+<U00A0> \xFF |0
+<U00A1> \xAD |0
+<U00A2> \x9B |0
+<U00A3> \x9C |0
+<U00A5> \x9D |0
+<U00A7> \x15 |1
+<U00AA> \xA6 |0
+<U00AB> \xAE |0
+<U00AC> \xAA |0
+<U00B0> \xF8 |0
+<U00B1> \xF1 |0
+<U00B2> \xFD |0
+<U00B6> \x14 |1
+<U00B7> \xFA |0
+<U00BA> \xA7 |0
+<U00BB> \xAF |0
+<U00BC> \xAC |0
+<U00BD> \xAB |0
+<U00BF> \xA8 |0
+<U00C4> \x8E |0
+<U00C5> \x8F |0
+<U00C6> \x92 |0
+<U00C7> \x80 |0
+<U00C9> \x90 |0
+<U00D1> \xA5 |0
+<U00D6> \x99 |0
+<U00DC> \x9A |0
+<U00DF> \xE1 |0
+<U00E0> \x85 |0
+<U00E1> \xA0 |0
+<U00E2> \x83 |0
+<U00E4> \x84 |0
+<U00E5> \x86 |0
+<U00E6> \x91 |0
+<U00E7> \x87 |0
+<U00E8> \x8A |0
+<U00E9> \x82 |0
+<U00EA> \x88 |0
+<U00EB> \x89 |0
+<U00EC> \x8D |0
+<U00ED> \xA1 |0
+<U00EE> \x8C |0
+<U00EF> \x8B |0
+<U00F1> \xA4 |0
+<U00F2> \x95 |0
+<U00F3> \xA2 |0
+<U00F4> \x93 |0
+<U00F6> \x94 |0
+<U00F7> \xF6 |0
+<U00F9> \x97 |0
+<U00FA> \xA3 |0
+<U00FB> \x96 |0
+<U00FC> \x81 |0
+<U00FF> \x98 |0
+<U0192> \x9F |0
+<U0393> \xE2 |0
+<U0398> \xE9 |0
+<U03A3> \xE4 |0
+<U03A6> \xE8 |0
+<U03A9> \xEA |0
+<U03B1> \xE0 |0
+<U03B4> \xEB |0
+<U03B5> \xEE |0
+<U03BC> \xE6 |0
+<U03C0> \xE3 |0
+<U03C3> \xE5 |0
+<U03C4> \xE7 |0
+<U03C6> \xED |0
+<U2022> \x07 |1
+<U203C> \x13 |1
+<U207F> \xFC |0
+<U20A7> \x9E |0
+<U2190> \x1B |1
+<U2191> \x18 |1
+<U2192> \x1A |1
+<U2193> \x19 |1
+<U2194> \x1D |1
+<U2195> \x12 |1
+<U21A8> \x17 |1
+<U2219> \xF9 |0
+<U221A> \xFB |0
+<U221E> \xEC |0
+<U221F> \x1C |1
+<U2229> \xEF |0
+<U2248> \xF7 |0
+<U2261> \xF0 |0
+<U2264> \xF3 |0
+<U2265> \xF2 |0
+<U2302> \x7F |2
+<U2310> \xA9 |0
+<U2320> \xF4 |0
+<U2321> \xF5 |0
+<U2500> \xC4 |0
+<U2502> \xB3 |0
+<U250C> \xDA |0
+<U2510> \xBF |0
+<U2514> \xC0 |0
+<U2518> \xD9 |0
+<U251C> \xC3 |0
+<U2524> \xB4 |0
+<U252C> \xC2 |0
+<U2534> \xC1 |0
+<U253C> \xC5 |0
+<U2550> \xCD |0
+<U2551> \xBA |0
+<U2552> \xD5 |0
+<U2553> \xD6 |0
+<U2554> \xC9 |0
+<U2555> \xB8 |0
+<U2556> \xB7 |0
+<U2557> \xBB |0
+<U2558> \xD4 |0
+<U2559> \xD3 |0
+<U255A> \xC8 |0
+<U255B> \xBE |0
+<U255C> \xBD |0
+<U255D> \xBC |0
+<U255E> \xC6 |0
+<U255F> \xC7 |0
+<U2560> \xCC |0
+<U2561> \xB5 |0
+<U2562> \xB6 |0
+<U2563> \xB9 |0
+<U2564> \xD1 |0
+<U2565> \xD2 |0
+<U2566> \xCB |0
+<U2567> \xCF |0
+<U2568> \xD0 |0
+<U2569> \xCA |0
+<U256A> \xD8 |0
+<U256B> \xD7 |0
+<U256C> \xCE |0
+<U2580> \xDF |0
+<U2584> \xDC |0
+<U2588> \xDB |0
+<U258C> \xDD |0
+<U2590> \xDE |0
+<U2591> \xB0 |0
+<U2592> \xB1 |0
+<U2593> \xB2 |0
+<U25A0> \xFE |0
+<U25AC> \x16 |1
+<U25B2> \x1E |1
+<U25BA> \x10 |1
+<U25BC> \x1F |1
+<U25C4> \x11 |1
+<U25CB> \x09 |1
+<U25D8> \x08 |1
+<U25D9> \x0A |1
+<U263A> \x01 |1
+<U263B> \x02 |1
+<U263C> \x0F |1
+<U2640> \x0C |1
+<U2642> \x0B |1
+<U2660> \x06 |1
+<U2663> \x05 |1
+<U2665> \x03 |1
+<U2666> \x04 |1
+<U266A> \x0D |1
+<U266B> \x0E |1
+<UFF01> \x21 |1
+<UFF02> \x22 |1
+<UFF03> \x23 |1
+<UFF04> \x24 |1
+<UFF05> \x25 |1
+<UFF06> \x26 |1
+<UFF07> \x27 |1
+<UFF08> \x28 |1
+<UFF09> \x29 |1
+<UFF0A> \x2A |1
+<UFF0B> \x2B |1
+<UFF0C> \x2C |1
+<UFF0D> \x2D |1
+<UFF0E> \x2E |1
+<UFF0F> \x2F |1
+<UFF10> \x30 |1
+<UFF11> \x31 |1
+<UFF12> \x32 |1
+<UFF13> \x33 |1
+<UFF14> \x34 |1
+<UFF15> \x35 |1
+<UFF16> \x36 |1
+<UFF17> \x37 |1
+<UFF18> \x38 |1
+<UFF19> \x39 |1
+<UFF1A> \x3A |1
+<UFF1B> \x3B |1
+<UFF1C> \x3C |1
+<UFF1D> \x3D |1
+<UFF1E> \x3E |1
+<UFF1F> \x3F |1
+<UFF20> \x40 |1
+<UFF21> \x41 |1
+<UFF22> \x42 |1
+<UFF23> \x43 |1
+<UFF24> \x44 |1
+<UFF25> \x45 |1
+<UFF26> \x46 |1
+<UFF27> \x47 |1
+<UFF28> \x48 |1
+<UFF29> \x49 |1
+<UFF2A> \x4A |1
+<UFF2B> \x4B |1
+<UFF2C> \x4C |1
+<UFF2D> \x4D |1
+<UFF2E> \x4E |1
+<UFF2F> \x4F |1
+<UFF30> \x50 |1
+<UFF31> \x51 |1
+<UFF32> \x52 |1
+<UFF33> \x53 |1
+<UFF34> \x54 |1
+<UFF35> \x55 |1
+<UFF36> \x56 |1
+<UFF37> \x57 |1
+<UFF38> \x58 |1
+<UFF39> \x59 |1
+<UFF3A> \x5A |1
+<UFF3B> \x5B |1
+<UFF3C> \x5C |1
+<UFF3D> \x5D |1
+<UFF3E> \x5E |1
+<UFF3F> \x5F |1
+<UFF40> \x60 |1
+<UFF41> \x61 |1
+<UFF42> \x62 |1
+<UFF43> \x63 |1
+<UFF44> \x64 |1
+<UFF45> \x65 |1
+<UFF46> \x66 |1
+<UFF47> \x67 |1
+<UFF48> \x68 |1
+<UFF49> \x69 |1
+<UFF4A> \x6A |1
+<UFF4B> \x6B |1
+<UFF4C> \x6C |1
+<UFF4D> \x6D |1
+<UFF4E> \x6E |1
+<UFF4F> \x6F |1
+<UFF50> \x70 |1
+<UFF51> \x71 |1
+<UFF52> \x72 |1
+<UFF53> \x73 |1
+<UFF54> \x74 |1
+<UFF55> \x75 |1
+<UFF56> \x76 |1
+<UFF57> \x77 |1
+<UFF58> \x78 |1
+<UFF59> \x79 |1
+<UFF5A> \x7A |1
+<UFF5B> \x7B |1
+<UFF5C> \x7C |1
+<UFF5D> \x7D |1
+<UFF5E> \x7E |1
+<UFFE8> \xB3 |1
+<UFFE9> \x1B |1
+<UFFEA> \x18 |1
+<UFFEB> \x1A |1
+<UFFEC> \x19 |1
+<UFFED> \xFE |1
+<UFFEE> \x09 |1
+END CHARMAP
diff --git a/mcs/class/I18N/West/ibm-4909.ucm b/mcs/class/I18N/West/ibm-4909.ucm
new file mode 100644
index 00000000000..b1d893ecccc
--- /dev/null
+++ b/mcs/class/I18N/West/ibm-4909.ucm
@@ -0,0 +1,374 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1999-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Mon Nov 13 08:50:44 2000
+#
+# File created by dtcocm version 3.00
+# from source files 44B0132D.RPMAP100 and 132D44B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-4909"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x1A
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-4909
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x1A |0
+<U001B> \x1B |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x7F |0
+<U0080> \x80 |0
+<U0081> \x81 |0
+<U0082> \x82 |0
+<U0083> \x83 |0
+<U0084> \x84 |0
+<U0085> \x85 |0
+<U0086> \x86 |0
+<U0087> \x87 |0
+<U0088> \x88 |0
+<U0089> \x89 |0
+<U008A> \x8A |0
+<U008B> \x8B |0
+<U008C> \x8C |0
+<U008D> \x8D |0
+<U008E> \x8E |0
+<U008F> \x8F |0
+<U0090> \x90 |0
+<U0091> \x91 |0
+<U0092> \x92 |0
+<U0093> \x93 |0
+<U0094> \x94 |0
+<U0095> \x95 |0
+<U0096> \x96 |0
+<U0097> \x97 |0
+<U0098> \x98 |0
+<U0099> \x99 |0
+<U009A> \x9A |0
+<U009B> \x9B |0
+<U009C> \x9C |0
+<U009D> \x9D |0
+<U009E> \x9E |0
+<U009F> \x9F |0
+<U00A0> \xA0 |0
+<U00A3> \xA3 |0
+<U00A6> \xA6 |0
+<U00A7> \xA7 |0
+<U00A8> \xA8 |0
+<U00A9> \xA9 |0
+<U00AB> \xAB |0
+<U00AC> \xAC |0
+<U00AD> \xAD |0
+<U00B0> \xB0 |0
+<U00B1> \xB1 |0
+<U00B2> \xB2 |0
+<U00B3> \xB3 |0
+<U00B4> \xB4 |0
+<U00B7> \xB7 |1
+<U00BB> \xBB |0
+<U00BD> \xBD |0
+<U0385> \xB5 |0
+<U0386> \xB6 |0
+<U0387> \xB7 |0
+<U0388> \xB8 |0
+<U0389> \xB9 |0
+<U038A> \xBA |0
+<U038C> \xBC |0
+<U038E> \xBE |0
+<U038F> \xBF |0
+<U0390> \xC0 |0
+<U0391> \xC1 |0
+<U0392> \xC2 |0
+<U0393> \xC3 |0
+<U0394> \xC4 |0
+<U0395> \xC5 |0
+<U0396> \xC6 |0
+<U0397> \xC7 |0
+<U0398> \xC8 |0
+<U0399> \xC9 |0
+<U039A> \xCA |0
+<U039B> \xCB |0
+<U039C> \xCC |0
+<U039D> \xCD |0
+<U039E> \xCE |0
+<U039F> \xCF |0
+<U03A0> \xD0 |0
+<U03A1> \xD1 |0
+<U03A3> \xD3 |0
+<U03A4> \xD4 |0
+<U03A5> \xD5 |0
+<U03A6> \xD6 |0
+<U03A7> \xD7 |0
+<U03A8> \xD8 |0
+<U03A9> \xD9 |0
+<U03AA> \xDA |0
+<U03AB> \xDB |0
+<U03AC> \xDC |0
+<U03AD> \xDD |0
+<U03AE> \xDE |0
+<U03AF> \xDF |0
+<U03B0> \xE0 |0
+<U03B1> \xE1 |0
+<U03B2> \xE2 |0
+<U03B3> \xE3 |0
+<U03B4> \xE4 |0
+<U03B5> \xE5 |0
+<U03B6> \xE6 |0
+<U03B7> \xE7 |0
+<U03B8> \xE8 |0
+<U03B9> \xE9 |0
+<U03BA> \xEA |0
+<U03BB> \xEB |0
+<U03BC> \xEC |0
+<U03BD> \xED |0
+<U03BE> \xEE |0
+<U03BF> \xEF |0
+<U03C0> \xF0 |0
+<U03C1> \xF1 |0
+<U03C2> \xF2 |0
+<U03C3> \xF3 |0
+<U03C4> \xF4 |0
+<U03C5> \xF5 |0
+<U03C6> \xF6 |0
+<U03C7> \xF7 |0
+<U03C8> \xF8 |0
+<U03C9> \xF9 |0
+<U03CA> \xFA |0
+<U03CB> \xFB |0
+<U03CC> \xFC |0
+<U03CD> \xFD |0
+<U03CE> \xFE |0
+<U03D5> \xF6 |1
+<U2015> \xAF |0
+<U2018> \xA1 |0
+<U2019> \xA2 |0
+<U20AC> \xA4 |0
+<UFF01> \x21 |1
+<UFF02> \x22 |1
+<UFF03> \x23 |1
+<UFF04> \x24 |1
+<UFF05> \x25 |1
+<UFF06> \x26 |1
+<UFF07> \x27 |1
+<UFF08> \x28 |1
+<UFF09> \x29 |1
+<UFF0A> \x2A |1
+<UFF0B> \x2B |1
+<UFF0C> \x2C |1
+<UFF0D> \x2D |1
+<UFF0E> \x2E |1
+<UFF0F> \x2F |1
+<UFF10> \x30 |1
+<UFF11> \x31 |1
+<UFF12> \x32 |1
+<UFF13> \x33 |1
+<UFF14> \x34 |1
+<UFF15> \x35 |1
+<UFF16> \x36 |1
+<UFF17> \x37 |1
+<UFF18> \x38 |1
+<UFF19> \x39 |1
+<UFF1A> \x3A |1
+<UFF1B> \x3B |1
+<UFF1C> \x3C |1
+<UFF1D> \x3D |1
+<UFF1E> \x3E |1
+<UFF1F> \x3F |1
+<UFF20> \x40 |1
+<UFF21> \x41 |1
+<UFF22> \x42 |1
+<UFF23> \x43 |1
+<UFF24> \x44 |1
+<UFF25> \x45 |1
+<UFF26> \x46 |1
+<UFF27> \x47 |1
+<UFF28> \x48 |1
+<UFF29> \x49 |1
+<UFF2A> \x4A |1
+<UFF2B> \x4B |1
+<UFF2C> \x4C |1
+<UFF2D> \x4D |1
+<UFF2E> \x4E |1
+<UFF2F> \x4F |1
+<UFF30> \x50 |1
+<UFF31> \x51 |1
+<UFF32> \x52 |1
+<UFF33> \x53 |1
+<UFF34> \x54 |1
+<UFF35> \x55 |1
+<UFF36> \x56 |1
+<UFF37> \x57 |1
+<UFF38> \x58 |1
+<UFF39> \x59 |1
+<UFF3A> \x5A |1
+<UFF3B> \x5B |1
+<UFF3C> \x5C |1
+<UFF3D> \x5D |1
+<UFF3E> \x5E |1
+<UFF3F> \x5F |1
+<UFF40> \x60 |1
+<UFF41> \x61 |1
+<UFF42> \x62 |1
+<UFF43> \x63 |1
+<UFF44> \x64 |1
+<UFF45> \x65 |1
+<UFF46> \x66 |1
+<UFF47> \x67 |1
+<UFF48> \x68 |1
+<UFF49> \x69 |1
+<UFF4A> \x6A |1
+<UFF4B> \x6B |1
+<UFF4C> \x6C |1
+<UFF4D> \x6D |1
+<UFF4E> \x6E |1
+<UFF4F> \x6F |1
+<UFF50> \x70 |1
+<UFF51> \x71 |1
+<UFF52> \x72 |1
+<UFF53> \x73 |1
+<UFF54> \x74 |1
+<UFF55> \x75 |1
+<UFF56> \x76 |1
+<UFF57> \x77 |1
+<UFF58> \x78 |1
+<UFF59> \x79 |1
+<UFF5A> \x7A |1
+<UFF5B> \x7B |1
+<UFF5C> \x7C |1
+<UFF5D> \x7D |1
+<UFF5E> \x7E |1
+END CHARMAP
diff --git a/mcs/class/I18N/West/ibm-5346.ucm b/mcs/class/I18N/West/ibm-5346.ucm
new file mode 100644
index 00000000000..d0c0fb6aa55
--- /dev/null
+++ b/mcs/class/I18N/West/ibm-5346.ucm
@@ -0,0 +1,377 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1998-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Mon Nov 13 08:50:44 2000
+#
+# File created by dtcocm version 3.00
+# from source files 44B014E2.RPMAP100 and 14E244B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-5346"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x1A
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-5346
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x1A |0
+<U001B> \x1B |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x7F |0
+<U0081> \x81 |0
+<U0083> \x83 |0
+<U0088> \x88 |0
+<U0090> \x90 |0
+<U0098> \x98 |0
+<U00A0> \xA0 |0
+<U00A4> \xA4 |0
+<U00A6> \xA6 |0
+<U00A7> \xA7 |0
+<U00A8> \xA8 |0
+<U00A9> \xA9 |0
+<U00AB> \xAB |0
+<U00AC> \xAC |0
+<U00AD> \xAD |0
+<U00AE> \xAE |0
+<U00B0> \xB0 |0
+<U00B1> \xB1 |0
+<U00B4> \xB4 |0
+<U00B5> \xB5 |0
+<U00B6> \xB6 |0
+<U00B7> \xB7 |0
+<U00B8> \xB8 |0
+<U00BB> \xBB |0
+<U00C1> \xC1 |0
+<U00C2> \xC2 |0
+<U00C4> \xC4 |0
+<U00C7> \xC7 |0
+<U00C9> \xC9 |0
+<U00CB> \xCB |0
+<U00CD> \xCD |0
+<U00CE> \xCE |0
+<U00D3> \xD3 |0
+<U00D4> \xD4 |0
+<U00D6> \xD6 |0
+<U00D7> \xD7 |0
+<U00DA> \xDA |0
+<U00DC> \xDC |0
+<U00DD> \xDD |0
+<U00DF> \xDF |0
+<U00E1> \xE1 |0
+<U00E2> \xE2 |0
+<U00E4> \xE4 |0
+<U00E7> \xE7 |0
+<U00E9> \xE9 |0
+<U00EB> \xEB |0
+<U00ED> \xED |0
+<U00EE> \xEE |0
+<U00F3> \xF3 |0
+<U00F4> \xF4 |0
+<U00F6> \xF6 |0
+<U00F7> \xF7 |0
+<U00FA> \xFA |0
+<U00FC> \xFC |0
+<U00FD> \xFD |0
+<U0102> \xC3 |0
+<U0103> \xE3 |0
+<U0104> \xA5 |0
+<U0105> \xB9 |0
+<U0106> \xC6 |0
+<U0107> \xE6 |0
+<U010C> \xC8 |0
+<U010D> \xE8 |0
+<U010E> \xCF |0
+<U010F> \xEF |0
+<U0110> \xD0 |0
+<U0111> \xF0 |0
+<U0118> \xCA |0
+<U0119> \xEA |0
+<U011A> \xCC |0
+<U011B> \xEC |0
+<U0139> \xC5 |0
+<U013A> \xE5 |0
+<U013D> \xBC |0
+<U013E> \xBE |0
+<U0141> \xA3 |0
+<U0142> \xB3 |0
+<U0143> \xD1 |0
+<U0144> \xF1 |0
+<U0147> \xD2 |0
+<U0148> \xF2 |0
+<U0150> \xD5 |0
+<U0151> \xF5 |0
+<U0154> \xC0 |0
+<U0155> \xE0 |0
+<U0158> \xD8 |0
+<U0159> \xF8 |0
+<U015A> \x8C |0
+<U015B> \x9C |0
+<U015E> \xAA |0
+<U015F> \xBA |0
+<U0160> \x8A |0
+<U0161> \x9A |0
+<U0162> \xDE |0
+<U0163> \xFE |0
+<U0164> \x8D |0
+<U0165> \x9D |0
+<U016E> \xD9 |0
+<U016F> \xF9 |0
+<U0170> \xDB |0
+<U0171> \xFB |0
+<U0179> \x8F |0
+<U017A> \x9F |0
+<U017B> \xAF |0
+<U017C> \xBF |0
+<U017D> \x8E |0
+<U017E> \x9E |0
+<U02C7> \xA1 |0
+<U02D8> \xA2 |0
+<U02D9> \xFF |0
+<U02DB> \xB2 |0
+<U02DD> \xBD |0
+<U2013> \x96 |0
+<U2014> \x97 |0
+<U2018> \x91 |0
+<U2019> \x92 |0
+<U201A> \x82 |0
+<U201C> \x93 |0
+<U201D> \x94 |0
+<U201E> \x84 |0
+<U2020> \x86 |0
+<U2021> \x87 |0
+<U2022> \x95 |0
+<U2026> \x85 |0
+<U2030> \x89 |0
+<U2039> \x8B |0
+<U203A> \x9B |0
+<U20AC> \x80 |0
+<U2122> \x99 |0
+<UFF01> \x21 |1
+<UFF02> \x22 |1
+<UFF03> \x23 |1
+<UFF04> \x24 |1
+<UFF05> \x25 |1
+<UFF06> \x26 |1
+<UFF07> \x27 |1
+<UFF08> \x28 |1
+<UFF09> \x29 |1
+<UFF0A> \x2A |1
+<UFF0B> \x2B |1
+<UFF0C> \x2C |1
+<UFF0D> \x2D |1
+<UFF0E> \x2E |1
+<UFF0F> \x2F |1
+<UFF10> \x30 |1
+<UFF11> \x31 |1
+<UFF12> \x32 |1
+<UFF13> \x33 |1
+<UFF14> \x34 |1
+<UFF15> \x35 |1
+<UFF16> \x36 |1
+<UFF17> \x37 |1
+<UFF18> \x38 |1
+<UFF19> \x39 |1
+<UFF1A> \x3A |1
+<UFF1B> \x3B |1
+<UFF1C> \x3C |1
+<UFF1D> \x3D |1
+<UFF1E> \x3E |1
+<UFF1F> \x3F |1
+<UFF20> \x40 |1
+<UFF21> \x41 |1
+<UFF22> \x42 |1
+<UFF23> \x43 |1
+<UFF24> \x44 |1
+<UFF25> \x45 |1
+<UFF26> \x46 |1
+<UFF27> \x47 |1
+<UFF28> \x48 |1
+<UFF29> \x49 |1
+<UFF2A> \x4A |1
+<UFF2B> \x4B |1
+<UFF2C> \x4C |1
+<UFF2D> \x4D |1
+<UFF2E> \x4E |1
+<UFF2F> \x4F |1
+<UFF30> \x50 |1
+<UFF31> \x51 |1
+<UFF32> \x52 |1
+<UFF33> \x53 |1
+<UFF34> \x54 |1
+<UFF35> \x55 |1
+<UFF36> \x56 |1
+<UFF37> \x57 |1
+<UFF38> \x58 |1
+<UFF39> \x59 |1
+<UFF3A> \x5A |1
+<UFF3B> \x5B |1
+<UFF3C> \x5C |1
+<UFF3D> \x5D |1
+<UFF3E> \x5E |1
+<UFF3F> \x5F |1
+<UFF40> \x60 |1
+<UFF41> \x61 |1
+<UFF42> \x62 |1
+<UFF43> \x63 |1
+<UFF44> \x64 |1
+<UFF45> \x65 |1
+<UFF46> \x66 |1
+<UFF47> \x67 |1
+<UFF48> \x68 |1
+<UFF49> \x69 |1
+<UFF4A> \x6A |1
+<UFF4B> \x6B |1
+<UFF4C> \x6C |1
+<UFF4D> \x6D |1
+<UFF4E> \x6E |1
+<UFF4F> \x6F |1
+<UFF50> \x70 |1
+<UFF51> \x71 |1
+<UFF52> \x72 |1
+<UFF53> \x73 |1
+<UFF54> \x74 |1
+<UFF55> \x75 |1
+<UFF56> \x76 |1
+<UFF57> \x77 |1
+<UFF58> \x78 |1
+<UFF59> \x79 |1
+<UFF5A> \x7A |1
+<UFF5B> \x7B |1
+<UFF5C> \x7C |1
+<UFF5D> \x7D |1
+<UFF5E> \x7E |1
+END CHARMAP
diff --git a/mcs/class/I18N/West/ibm-5348.ucm b/mcs/class/I18N/West/ibm-5348.ucm
new file mode 100644
index 00000000000..6e5f9521527
--- /dev/null
+++ b/mcs/class/I18N/West/ibm-5348.ucm
@@ -0,0 +1,377 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1998-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Mon Nov 13 09:51:37 2000
+#
+# File created by dtcocm version 3.00
+# from source files 44B014E4.RPMAP100 and 14E444B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-5348"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x1A
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-5348
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x1A |0
+<U001B> \x1B |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x7F |0
+<U0081> \x81 |0
+<U008D> \x8D |0
+<U008F> \x8F |0
+<U0090> \x90 |0
+<U009D> \x9D |0
+<U00A0> \xA0 |0
+<U00A1> \xA1 |0
+<U00A2> \xA2 |0
+<U00A3> \xA3 |0
+<U00A4> \xA4 |0
+<U00A5> \xA5 |0
+<U00A6> \xA6 |0
+<U00A7> \xA7 |0
+<U00A8> \xA8 |0
+<U00A9> \xA9 |0
+<U00AA> \xAA |0
+<U00AB> \xAB |0
+<U00AC> \xAC |0
+<U00AD> \xAD |0
+<U00AE> \xAE |0
+<U00AF> \xAF |0
+<U00B0> \xB0 |0
+<U00B1> \xB1 |0
+<U00B2> \xB2 |0
+<U00B3> \xB3 |0
+<U00B4> \xB4 |0
+<U00B5> \xB5 |0
+<U00B6> \xB6 |0
+<U00B7> \xB7 |0
+<U00B8> \xB8 |0
+<U00B9> \xB9 |0
+<U00BA> \xBA |0
+<U00BB> \xBB |0
+<U00BC> \xBC |0
+<U00BD> \xBD |0
+<U00BE> \xBE |0
+<U00BF> \xBF |0
+<U00C0> \xC0 |0
+<U00C1> \xC1 |0
+<U00C2> \xC2 |0
+<U00C3> \xC3 |0
+<U00C4> \xC4 |0
+<U00C5> \xC5 |0
+<U00C6> \xC6 |0
+<U00C7> \xC7 |0
+<U00C8> \xC8 |0
+<U00C9> \xC9 |0
+<U00CA> \xCA |0
+<U00CB> \xCB |0
+<U00CC> \xCC |0
+<U00CD> \xCD |0
+<U00CE> \xCE |0
+<U00CF> \xCF |0
+<U00D0> \xD0 |0
+<U00D1> \xD1 |0
+<U00D2> \xD2 |0
+<U00D3> \xD3 |0
+<U00D4> \xD4 |0
+<U00D5> \xD5 |0
+<U00D6> \xD6 |0
+<U00D7> \xD7 |0
+<U00D8> \xD8 |0
+<U00D9> \xD9 |0
+<U00DA> \xDA |0
+<U00DB> \xDB |0
+<U00DC> \xDC |0
+<U00DD> \xDD |0
+<U00DE> \xDE |0
+<U00DF> \xDF |0
+<U00E0> \xE0 |0
+<U00E1> \xE1 |0
+<U00E2> \xE2 |0
+<U00E3> \xE3 |0
+<U00E4> \xE4 |0
+<U00E5> \xE5 |0
+<U00E6> \xE6 |0
+<U00E7> \xE7 |0
+<U00E8> \xE8 |0
+<U00E9> \xE9 |0
+<U00EA> \xEA |0
+<U00EB> \xEB |0
+<U00EC> \xEC |0
+<U00ED> \xED |0
+<U00EE> \xEE |0
+<U00EF> \xEF |0
+<U00F0> \xF0 |0
+<U00F1> \xF1 |0
+<U00F2> \xF2 |0
+<U00F3> \xF3 |0
+<U00F4> \xF4 |0
+<U00F5> \xF5 |0
+<U00F6> \xF6 |0
+<U00F7> \xF7 |0
+<U00F8> \xF8 |0
+<U00F9> \xF9 |0
+<U00FA> \xFA |0
+<U00FB> \xFB |0
+<U00FC> \xFC |0
+<U00FD> \xFD |0
+<U00FE> \xFE |0
+<U00FF> \xFF |0
+<U0152> \x8C |0
+<U0153> \x9C |0
+<U0160> \x8A |0
+<U0161> \x9A |0
+<U0178> \x9F |0
+<U017D> \x8E |0
+<U017E> \x9E |0
+<U0192> \x83 |0
+<U02C6> \x88 |0
+<U02DC> \x98 |0
+<U2013> \x96 |0
+<U2014> \x97 |0
+<U2018> \x91 |0
+<U2019> \x92 |0
+<U201A> \x82 |0
+<U201C> \x93 |0
+<U201D> \x94 |0
+<U201E> \x84 |0
+<U2020> \x86 |0
+<U2021> \x87 |0
+<U2022> \x95 |0
+<U2026> \x85 |0
+<U2030> \x89 |0
+<U2039> \x8B |0
+<U203A> \x9B |0
+<U20AC> \x80 |0
+<U2122> \x99 |0
+<UFF01> \x21 |1
+<UFF02> \x22 |1
+<UFF03> \x23 |1
+<UFF04> \x24 |1
+<UFF05> \x25 |1
+<UFF06> \x26 |1
+<UFF07> \x27 |1
+<UFF08> \x28 |1
+<UFF09> \x29 |1
+<UFF0A> \x2A |1
+<UFF0B> \x2B |1
+<UFF0C> \x2C |1
+<UFF0D> \x2D |1
+<UFF0E> \x2E |1
+<UFF0F> \x2F |1
+<UFF10> \x30 |1
+<UFF11> \x31 |1
+<UFF12> \x32 |1
+<UFF13> \x33 |1
+<UFF14> \x34 |1
+<UFF15> \x35 |1
+<UFF16> \x36 |1
+<UFF17> \x37 |1
+<UFF18> \x38 |1
+<UFF19> \x39 |1
+<UFF1A> \x3A |1
+<UFF1B> \x3B |1
+<UFF1C> \x3C |1
+<UFF1D> \x3D |1
+<UFF1E> \x3E |1
+<UFF1F> \x3F |1
+<UFF20> \x40 |1
+<UFF21> \x41 |1
+<UFF22> \x42 |1
+<UFF23> \x43 |1
+<UFF24> \x44 |1
+<UFF25> \x45 |1
+<UFF26> \x46 |1
+<UFF27> \x47 |1
+<UFF28> \x48 |1
+<UFF29> \x49 |1
+<UFF2A> \x4A |1
+<UFF2B> \x4B |1
+<UFF2C> \x4C |1
+<UFF2D> \x4D |1
+<UFF2E> \x4E |1
+<UFF2F> \x4F |1
+<UFF30> \x50 |1
+<UFF31> \x51 |1
+<UFF32> \x52 |1
+<UFF33> \x53 |1
+<UFF34> \x54 |1
+<UFF35> \x55 |1
+<UFF36> \x56 |1
+<UFF37> \x57 |1
+<UFF38> \x58 |1
+<UFF39> \x59 |1
+<UFF3A> \x5A |1
+<UFF3B> \x5B |1
+<UFF3C> \x5C |1
+<UFF3D> \x5D |1
+<UFF3E> \x5E |1
+<UFF3F> \x5F |1
+<UFF40> \x60 |1
+<UFF41> \x61 |1
+<UFF42> \x62 |1
+<UFF43> \x63 |1
+<UFF44> \x64 |1
+<UFF45> \x65 |1
+<UFF46> \x66 |1
+<UFF47> \x67 |1
+<UFF48> \x68 |1
+<UFF49> \x69 |1
+<UFF4A> \x6A |1
+<UFF4B> \x6B |1
+<UFF4C> \x6C |1
+<UFF4D> \x6D |1
+<UFF4E> \x6E |1
+<UFF4F> \x6F |1
+<UFF50> \x70 |1
+<UFF51> \x71 |1
+<UFF52> \x72 |1
+<UFF53> \x73 |1
+<UFF54> \x74 |1
+<UFF55> \x75 |1
+<UFF56> \x76 |1
+<UFF57> \x77 |1
+<UFF58> \x78 |1
+<UFF59> \x79 |1
+<UFF5A> \x7A |1
+<UFF5B> \x7B |1
+<UFF5C> \x7C |1
+<UFF5D> \x7D |1
+<UFF5E> \x7E |1
+END CHARMAP
diff --git a/mcs/class/I18N/West/ibm-5349.ucm b/mcs/class/I18N/West/ibm-5349.ucm
new file mode 100644
index 00000000000..900c9984fdb
--- /dev/null
+++ b/mcs/class/I18N/West/ibm-5349.ucm
@@ -0,0 +1,376 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1998-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Mon Nov 13 08:50:44 2000
+#
+# File created by dtcocm version 3.00
+# from source files 44B014E5.RPMAP100 and 14E544B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-5349"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x1A
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-5349
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x1A |0
+<U001B> \x1B |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x7F |0
+<U0081> \x81 |0
+<U0088> \x88 |0
+<U008A> \x8A |0
+<U008C> \x8C |0
+<U008D> \x8D |0
+<U008E> \x8E |0
+<U008F> \x8F |0
+<U0090> \x90 |0
+<U0098> \x98 |0
+<U009A> \x9A |0
+<U009C> \x9C |0
+<U009D> \x9D |0
+<U009E> \x9E |0
+<U009F> \x9F |0
+<U00A0> \xA0 |0
+<U00A3> \xA3 |0
+<U00A4> \xA4 |0
+<U00A5> \xA5 |0
+<U00A6> \xA6 |0
+<U00A7> \xA7 |0
+<U00A8> \xA8 |0
+<U00A9> \xA9 |0
+<U00AA> \xAA |0
+<U00AB> \xAB |0
+<U00AC> \xAC |0
+<U00AD> \xAD |0
+<U00AE> \xAE |0
+<U00B0> \xB0 |0
+<U00B1> \xB1 |0
+<U00B2> \xB2 |0
+<U00B3> \xB3 |0
+<U00B5> \xB5 |0
+<U00B6> \xB6 |0
+<U00B7> \xB7 |0
+<U00BB> \xBB |0
+<U00BD> \xBD |0
+<U0192> \x83 |0
+<U0384> \xB4 |0
+<U0385> \xA1 |0
+<U0386> \xA2 |0
+<U0388> \xB8 |0
+<U0389> \xB9 |0
+<U038A> \xBA |0
+<U038C> \xBC |0
+<U038E> \xBE |0
+<U038F> \xBF |0
+<U0390> \xC0 |0
+<U0391> \xC1 |0
+<U0392> \xC2 |0
+<U0393> \xC3 |0
+<U0394> \xC4 |0
+<U0395> \xC5 |0
+<U0396> \xC6 |0
+<U0397> \xC7 |0
+<U0398> \xC8 |0
+<U0399> \xC9 |0
+<U039A> \xCA |0
+<U039B> \xCB |0
+<U039C> \xCC |0
+<U039D> \xCD |0
+<U039E> \xCE |0
+<U039F> \xCF |0
+<U03A0> \xD0 |0
+<U03A1> \xD1 |0
+<U03A3> \xD3 |0
+<U03A4> \xD4 |0
+<U03A5> \xD5 |0
+<U03A6> \xD6 |0
+<U03A7> \xD7 |0
+<U03A8> \xD8 |0
+<U03A9> \xD9 |0
+<U03AA> \xDA |0
+<U03AB> \xDB |0
+<U03AC> \xDC |0
+<U03AD> \xDD |0
+<U03AE> \xDE |0
+<U03AF> \xDF |0
+<U03B0> \xE0 |0
+<U03B1> \xE1 |0
+<U03B2> \xE2 |0
+<U03B3> \xE3 |0
+<U03B4> \xE4 |0
+<U03B5> \xE5 |0
+<U03B6> \xE6 |0
+<U03B7> \xE7 |0
+<U03B8> \xE8 |0
+<U03B9> \xE9 |0
+<U03BA> \xEA |0
+<U03BB> \xEB |0
+<U03BC> \xEC |0
+<U03BD> \xED |0
+<U03BE> \xEE |0
+<U03BF> \xEF |0
+<U03C0> \xF0 |0
+<U03C1> \xF1 |0
+<U03C2> \xF2 |0
+<U03C3> \xF3 |0
+<U03C4> \xF4 |0
+<U03C5> \xF5 |0
+<U03C6> \xF6 |0
+<U03C7> \xF7 |0
+<U03C8> \xF8 |0
+<U03C9> \xF9 |0
+<U03CA> \xFA |0
+<U03CB> \xFB |0
+<U03CC> \xFC |0
+<U03CD> \xFD |0
+<U03CE> \xFE |0
+<U03D5> \xF6 |1
+<U2013> \x96 |0
+<U2014> \x97 |0
+<U2015> \xAF |0
+<U2018> \x91 |0
+<U2019> \x92 |0
+<U201A> \x82 |0
+<U201C> \x93 |0
+<U201D> \x94 |0
+<U201E> \x84 |0
+<U2020> \x86 |0
+<U2021> \x87 |0
+<U2022> \x95 |0
+<U2026> \x85 |0
+<U2030> \x89 |0
+<U2039> \x8B |0
+<U203A> \x9B |0
+<U20AC> \x80 |0
+<U2122> \x99 |0
+<UFF01> \x21 |1
+<UFF02> \x22 |1
+<UFF03> \x23 |1
+<UFF04> \x24 |1
+<UFF05> \x25 |1
+<UFF06> \x26 |1
+<UFF07> \x27 |1
+<UFF08> \x28 |1
+<UFF09> \x29 |1
+<UFF0A> \x2A |1
+<UFF0B> \x2B |1
+<UFF0C> \x2C |1
+<UFF0D> \x2D |1
+<UFF0E> \x2E |1
+<UFF0F> \x2F |1
+<UFF10> \x30 |1
+<UFF11> \x31 |1
+<UFF12> \x32 |1
+<UFF13> \x33 |1
+<UFF14> \x34 |1
+<UFF15> \x35 |1
+<UFF16> \x36 |1
+<UFF17> \x37 |1
+<UFF18> \x38 |1
+<UFF19> \x39 |1
+<UFF1A> \x3A |1
+<UFF1B> \x3B |1
+<UFF1C> \x3C |1
+<UFF1D> \x3D |1
+<UFF1E> \x3E |1
+<UFF1F> \x3F |1
+<UFF20> \x40 |1
+<UFF21> \x41 |1
+<UFF22> \x42 |1
+<UFF23> \x43 |1
+<UFF24> \x44 |1
+<UFF25> \x45 |1
+<UFF26> \x46 |1
+<UFF27> \x47 |1
+<UFF28> \x48 |1
+<UFF29> \x49 |1
+<UFF2A> \x4A |1
+<UFF2B> \x4B |1
+<UFF2C> \x4C |1
+<UFF2D> \x4D |1
+<UFF2E> \x4E |1
+<UFF2F> \x4F |1
+<UFF30> \x50 |1
+<UFF31> \x51 |1
+<UFF32> \x52 |1
+<UFF33> \x53 |1
+<UFF34> \x54 |1
+<UFF35> \x55 |1
+<UFF36> \x56 |1
+<UFF37> \x57 |1
+<UFF38> \x58 |1
+<UFF39> \x59 |1
+<UFF3A> \x5A |1
+<UFF3B> \x5B |1
+<UFF3C> \x5C |1
+<UFF3D> \x5D |1
+<UFF3E> \x5E |1
+<UFF3F> \x5F |1
+<UFF40> \x60 |1
+<UFF41> \x61 |1
+<UFF42> \x62 |1
+<UFF43> \x63 |1
+<UFF44> \x64 |1
+<UFF45> \x65 |1
+<UFF46> \x66 |1
+<UFF47> \x67 |1
+<UFF48> \x68 |1
+<UFF49> \x69 |1
+<UFF4A> \x6A |1
+<UFF4B> \x6B |1
+<UFF4C> \x6C |1
+<UFF4D> \x6D |1
+<UFF4E> \x6E |1
+<UFF4F> \x6F |1
+<UFF50> \x70 |1
+<UFF51> \x71 |1
+<UFF52> \x72 |1
+<UFF53> \x73 |1
+<UFF54> \x74 |1
+<UFF55> \x75 |1
+<UFF56> \x76 |1
+<UFF57> \x77 |1
+<UFF58> \x78 |1
+<UFF59> \x79 |1
+<UFF5A> \x7A |1
+<UFF5B> \x7B |1
+<UFF5C> \x7C |1
+<UFF5D> \x7D |1
+<UFF5E> \x7E |1
+END CHARMAP
diff --git a/mcs/class/I18N/West/ibm-850.ucm b/mcs/class/I18N/West/ibm-850.ucm
new file mode 100644
index 00000000000..7502e8dca2b
--- /dev/null
+++ b/mcs/class/I18N/West/ibm-850.ucm
@@ -0,0 +1,416 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1995-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Mon Nov 13 08:50:42 2000
+#
+# File created by dtcocm version 3.00
+# from source files 34B00352.RPMAP100 and 035234B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-850"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x7F
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-850
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x7F |0
+<U001B> \x1B |0
+<U001C> \x1A |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x1C |0
+<U00A0> \xFF |0
+<U00A1> \xAD |0
+<U00A2> \xBD |0
+<U00A3> \x9C |0
+<U00A4> \xCF |0
+<U00A5> \xBE |0
+<U00A6> \xDD |0
+<U00A7> \xF5 |0
+<U00A8> \xF9 |0
+<U00A9> \xB8 |0
+<U00AA> \xA6 |0
+<U00AB> \xAE |0
+<U00AC> \xAA |0
+<U00AD> \xF0 |0
+<U00AE> \xA9 |0
+<U00AF> \xEE |0
+<U00B0> \xF8 |0
+<U00B1> \xF1 |0
+<U00B2> \xFD |0
+<U00B3> \xFC |0
+<U00B4> \xEF |0
+<U00B5> \xE6 |0
+<U00B6> \xF4 |0
+<U00B7> \xFA |0
+<U00B8> \xF7 |0
+<U00B9> \xFB |0
+<U00BA> \xA7 |0
+<U00BB> \xAF |0
+<U00BC> \xAC |0
+<U00BD> \xAB |0
+<U00BE> \xF3 |0
+<U00BF> \xA8 |0
+<U00C0> \xB7 |0
+<U00C1> \xB5 |0
+<U00C2> \xB6 |0
+<U00C3> \xC7 |0
+<U00C4> \x8E |0
+<U00C5> \x8F |0
+<U00C6> \x92 |0
+<U00C7> \x80 |0
+<U00C8> \xD4 |0
+<U00C9> \x90 |0
+<U00CA> \xD2 |0
+<U00CB> \xD3 |0
+<U00CC> \xDE |0
+<U00CD> \xD6 |0
+<U00CE> \xD7 |0
+<U00CF> \xD8 |0
+<U00D0> \xD1 |0
+<U00D1> \xA5 |0
+<U00D2> \xE3 |0
+<U00D3> \xE0 |0
+<U00D4> \xE2 |0
+<U00D5> \xE5 |0
+<U00D6> \x99 |0
+<U00D7> \x9E |0
+<U00D8> \x9D |0
+<U00D9> \xEB |0
+<U00DA> \xE9 |0
+<U00DB> \xEA |0
+<U00DC> \x9A |0
+<U00DD> \xED |0
+<U00DE> \xE8 |0
+<U00DF> \xE1 |0
+<U00E0> \x85 |0
+<U00E1> \xA0 |0
+<U00E2> \x83 |0
+<U00E3> \xC6 |0
+<U00E4> \x84 |0
+<U00E5> \x86 |0
+<U00E6> \x91 |0
+<U00E7> \x87 |0
+<U00E8> \x8A |0
+<U00E9> \x82 |0
+<U00EA> \x88 |0
+<U00EB> \x89 |0
+<U00EC> \x8D |0
+<U00ED> \xA1 |0
+<U00EE> \x8C |0
+<U00EF> \x8B |0
+<U00F0> \xD0 |0
+<U00F1> \xA4 |0
+<U00F2> \x95 |0
+<U00F3> \xA2 |0
+<U00F4> \x93 |0
+<U00F5> \xE4 |0
+<U00F6> \x94 |0
+<U00F7> \xF6 |0
+<U00F8> \x9B |0
+<U00F9> \x97 |0
+<U00FA> \xA3 |0
+<U00FB> \x96 |0
+<U00FC> \x81 |0
+<U00FD> \xEC |0
+<U00FE> \xE7 |0
+<U00FF> \x98 |0
+<U0110> \xD1 |1
+<U0131> \xD5 |0
+<U0192> \x9F |0
+<U2017> \xF2 |0
+<U2022> \x07 |1
+<U203C> \x13 |1
+<U203E> \xEE |1
+<U2190> \x1B |1
+<U2191> \x18 |1
+<U2192> \x1A |1
+<U2193> \x19 |1
+<U2194> \x1D |1
+<U2195> \x12 |1
+<U21A8> \x17 |1
+<U221F> \x1C |1
+<U2302> \x7F |2
+<U2500> \xC4 |0
+<U2502> \xB3 |0
+<U250C> \xDA |0
+<U2510> \xBF |0
+<U2514> \xC0 |0
+<U2518> \xD9 |0
+<U251C> \xC3 |0
+<U2524> \xB4 |0
+<U252C> \xC2 |0
+<U2534> \xC1 |0
+<U253C> \xC5 |0
+<U2550> \xCD |0
+<U2551> \xBA |0
+<U2554> \xC9 |0
+<U2557> \xBB |0
+<U255A> \xC8 |0
+<U255D> \xBC |0
+<U2560> \xCC |0
+<U2563> \xB9 |0
+<U2566> \xCB |0
+<U2569> \xCA |0
+<U256C> \xCE |0
+<U2580> \xDF |0
+<U2584> \xDC |0
+<U2588> \xDB |0
+<U2591> \xB0 |0
+<U2592> \xB1 |0
+<U2593> \xB2 |0
+<U25A0> \xFE |0
+<U25AC> \x16 |1
+<U25B2> \x1E |1
+<U25BA> \x10 |1
+<U25BC> \x1F |1
+<U25C4> \x11 |1
+<U25CB> \x09 |1
+<U25D8> \x08 |1
+<U25D9> \x0A |1
+<U263A> \x01 |1
+<U263B> \x02 |1
+<U263C> \x0F |1
+<U2640> \x0C |1
+<U2642> \x0B |1
+<U2660> \x06 |1
+<U2663> \x05 |1
+<U2665> \x03 |1
+<U2666> \x04 |1
+<U266A> \x0D |1
+<U266C> \x0E |1
+<UFF01> \x21 |1
+<UFF02> \x22 |1
+<UFF03> \x23 |1
+<UFF04> \x24 |1
+<UFF05> \x25 |1
+<UFF06> \x26 |1
+<UFF07> \x27 |1
+<UFF08> \x28 |1
+<UFF09> \x29 |1
+<UFF0A> \x2A |1
+<UFF0B> \x2B |1
+<UFF0C> \x2C |1
+<UFF0D> \x2D |1
+<UFF0E> \x2E |1
+<UFF0F> \x2F |1
+<UFF10> \x30 |1
+<UFF11> \x31 |1
+<UFF12> \x32 |1
+<UFF13> \x33 |1
+<UFF14> \x34 |1
+<UFF15> \x35 |1
+<UFF16> \x36 |1
+<UFF17> \x37 |1
+<UFF18> \x38 |1
+<UFF19> \x39 |1
+<UFF1A> \x3A |1
+<UFF1B> \x3B |1
+<UFF1C> \x3C |1
+<UFF1D> \x3D |1
+<UFF1E> \x3E |1
+<UFF1F> \x3F |1
+<UFF20> \x40 |1
+<UFF21> \x41 |1
+<UFF22> \x42 |1
+<UFF23> \x43 |1
+<UFF24> \x44 |1
+<UFF25> \x45 |1
+<UFF26> \x46 |1
+<UFF27> \x47 |1
+<UFF28> \x48 |1
+<UFF29> \x49 |1
+<UFF2A> \x4A |1
+<UFF2B> \x4B |1
+<UFF2C> \x4C |1
+<UFF2D> \x4D |1
+<UFF2E> \x4E |1
+<UFF2F> \x4F |1
+<UFF30> \x50 |1
+<UFF31> \x51 |1
+<UFF32> \x52 |1
+<UFF33> \x53 |1
+<UFF34> \x54 |1
+<UFF35> \x55 |1
+<UFF36> \x56 |1
+<UFF37> \x57 |1
+<UFF38> \x58 |1
+<UFF39> \x59 |1
+<UFF3A> \x5A |1
+<UFF3B> \x5B |1
+<UFF3C> \x5C |1
+<UFF3D> \x5D |1
+<UFF3E> \x5E |1
+<UFF3F> \x5F |1
+<UFF40> \x60 |1
+<UFF41> \x61 |1
+<UFF42> \x62 |1
+<UFF43> \x63 |1
+<UFF44> \x64 |1
+<UFF45> \x65 |1
+<UFF46> \x66 |1
+<UFF47> \x67 |1
+<UFF48> \x68 |1
+<UFF49> \x69 |1
+<UFF4A> \x6A |1
+<UFF4B> \x6B |1
+<UFF4C> \x6C |1
+<UFF4D> \x6D |1
+<UFF4E> \x6E |1
+<UFF4F> \x6F |1
+<UFF50> \x70 |1
+<UFF51> \x71 |1
+<UFF52> \x72 |1
+<UFF53> \x73 |1
+<UFF54> \x74 |1
+<UFF55> \x75 |1
+<UFF56> \x76 |1
+<UFF57> \x77 |1
+<UFF58> \x78 |1
+<UFF59> \x79 |1
+<UFF5A> \x7A |1
+<UFF5B> \x7B |1
+<UFF5C> \x7C |1
+<UFF5D> \x7D |1
+<UFF5E> \x7E |1
+<UFFE8> \xB3 |1
+<UFFE9> \x1B |1
+<UFFEA> \x18 |1
+<UFFEB> \x1A |1
+<UFFEC> \x19 |1
+<UFFED> \xFE |1
+<UFFEE> \x09 |1
+END CHARMAP
diff --git a/mcs/class/I18N/West/ibm-860.ucm b/mcs/class/I18N/West/ibm-860.ucm
new file mode 100644
index 00000000000..05a02cba81f
--- /dev/null
+++ b/mcs/class/I18N/West/ibm-860.ucm
@@ -0,0 +1,416 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1995-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Mon Nov 13 08:50:43 2000
+#
+# File created by dtcocm version 3.00
+# from source files 34B0035C.RPMAP100 and 035C34B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-860"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x7F
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-860
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x7F |0
+<U001B> \x1B |0
+<U001C> \x1A |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x1C |0
+<U00A0> \xFF |0
+<U00A1> \xAD |0
+<U00A2> \x9B |0
+<U00A3> \x9C |0
+<U00A7> \x15 |1
+<U00AA> \xA6 |0
+<U00AB> \xAE |0
+<U00AC> \xAA |0
+<U00B0> \xF8 |0
+<U00B1> \xF1 |0
+<U00B2> \xFD |0
+<U00B6> \x14 |1
+<U00B7> \xFA |0
+<U00BA> \xA7 |0
+<U00BB> \xAF |0
+<U00BC> \xAC |0
+<U00BD> \xAB |0
+<U00BF> \xA8 |0
+<U00C0> \x91 |0
+<U00C1> \x86 |0
+<U00C2> \x8F |0
+<U00C3> \x8E |0
+<U00C7> \x80 |0
+<U00C8> \x92 |0
+<U00C9> \x90 |0
+<U00CA> \x89 |0
+<U00CC> \x98 |0
+<U00CD> \x8B |0
+<U00D1> \xA5 |0
+<U00D2> \xA9 |0
+<U00D3> \x9F |0
+<U00D4> \x8C |0
+<U00D5> \x99 |0
+<U00D9> \x9D |0
+<U00DA> \x96 |0
+<U00DC> \x9A |0
+<U00DF> \xE1 |0
+<U00E0> \x85 |0
+<U00E1> \xA0 |0
+<U00E2> \x83 |0
+<U00E3> \x84 |0
+<U00E7> \x87 |0
+<U00E8> \x8A |0
+<U00E9> \x82 |0
+<U00EA> \x88 |0
+<U00EC> \x8D |0
+<U00ED> \xA1 |0
+<U00F1> \xA4 |0
+<U00F2> \x95 |0
+<U00F3> \xA2 |0
+<U00F4> \x93 |0
+<U00F5> \x94 |0
+<U00F7> \xF6 |0
+<U00F9> \x97 |0
+<U00FA> \xA3 |0
+<U00FC> \x81 |0
+<U0393> \xE2 |0
+<U0398> \xE9 |0
+<U03A3> \xE4 |0
+<U03A6> \xE8 |0
+<U03A9> \xEA |0
+<U03B1> \xE0 |0
+<U03B4> \xEB |0
+<U03B5> \xEE |0
+<U03BC> \xE6 |0
+<U03C0> \xE3 |0
+<U03C3> \xE5 |0
+<U03C4> \xE7 |0
+<U03C6> \xED |0
+<U2022> \x07 |1
+<U203C> \x13 |1
+<U207F> \xFC |0
+<U20A7> \x9E |0
+<U2190> \x1B |1
+<U2191> \x18 |1
+<U2192> \x1A |1
+<U2193> \x19 |1
+<U2194> \x1D |1
+<U2195> \x12 |1
+<U21A8> \x17 |1
+<U2219> \xF9 |0
+<U221A> \xFB |0
+<U221E> \xEC |0
+<U221F> \x1C |1
+<U2229> \xEF |0
+<U2248> \xF7 |0
+<U2261> \xF0 |0
+<U2264> \xF3 |0
+<U2265> \xF2 |0
+<U2302> \x7F |2
+<U2320> \xF4 |0
+<U2321> \xF5 |0
+<U2500> \xC4 |0
+<U2502> \xB3 |0
+<U250C> \xDA |0
+<U2510> \xBF |0
+<U2514> \xC0 |0
+<U2518> \xD9 |0
+<U251C> \xC3 |0
+<U2524> \xB4 |0
+<U252C> \xC2 |0
+<U2534> \xC1 |0
+<U253C> \xC5 |0
+<U2550> \xCD |0
+<U2551> \xBA |0
+<U2552> \xD5 |0
+<U2553> \xD6 |0
+<U2554> \xC9 |0
+<U2555> \xB8 |0
+<U2556> \xB7 |0
+<U2557> \xBB |0
+<U2558> \xD4 |0
+<U2559> \xD3 |0
+<U255A> \xC8 |0
+<U255B> \xBE |0
+<U255C> \xBD |0
+<U255D> \xBC |0
+<U255E> \xC6 |0
+<U255F> \xC7 |0
+<U2560> \xCC |0
+<U2561> \xB5 |0
+<U2562> \xB6 |0
+<U2563> \xB9 |0
+<U2564> \xD1 |0
+<U2565> \xD2 |0
+<U2566> \xCB |0
+<U2567> \xCF |0
+<U2568> \xD0 |0
+<U2569> \xCA |0
+<U256A> \xD8 |0
+<U256B> \xD7 |0
+<U256C> \xCE |0
+<U2580> \xDF |0
+<U2584> \xDC |0
+<U2588> \xDB |0
+<U258C> \xDD |0
+<U2590> \xDE |0
+<U2591> \xB0 |0
+<U2592> \xB1 |0
+<U2593> \xB2 |0
+<U25A0> \xFE |0
+<U25AC> \x16 |1
+<U25B2> \x1E |1
+<U25BA> \x10 |1
+<U25BC> \x1F |1
+<U25C4> \x11 |1
+<U25CB> \x09 |1
+<U25D8> \x08 |1
+<U25D9> \x0A |1
+<U263A> \x01 |1
+<U263B> \x02 |1
+<U263C> \x0F |1
+<U2640> \x0C |1
+<U2642> \x0B |1
+<U2660> \x06 |1
+<U2663> \x05 |1
+<U2665> \x03 |1
+<U2666> \x04 |1
+<U266A> \x0D |1
+<U266B> \x0E |1
+<UFF01> \x21 |1
+<UFF02> \x22 |1
+<UFF03> \x23 |1
+<UFF04> \x24 |1
+<UFF05> \x25 |1
+<UFF06> \x26 |1
+<UFF07> \x27 |1
+<UFF08> \x28 |1
+<UFF09> \x29 |1
+<UFF0A> \x2A |1
+<UFF0B> \x2B |1
+<UFF0C> \x2C |1
+<UFF0D> \x2D |1
+<UFF0E> \x2E |1
+<UFF0F> \x2F |1
+<UFF10> \x30 |1
+<UFF11> \x31 |1
+<UFF12> \x32 |1
+<UFF13> \x33 |1
+<UFF14> \x34 |1
+<UFF15> \x35 |1
+<UFF16> \x36 |1
+<UFF17> \x37 |1
+<UFF18> \x38 |1
+<UFF19> \x39 |1
+<UFF1A> \x3A |1
+<UFF1B> \x3B |1
+<UFF1C> \x3C |1
+<UFF1D> \x3D |1
+<UFF1E> \x3E |1
+<UFF1F> \x3F |1
+<UFF20> \x40 |1
+<UFF21> \x41 |1
+<UFF22> \x42 |1
+<UFF23> \x43 |1
+<UFF24> \x44 |1
+<UFF25> \x45 |1
+<UFF26> \x46 |1
+<UFF27> \x47 |1
+<UFF28> \x48 |1
+<UFF29> \x49 |1
+<UFF2A> \x4A |1
+<UFF2B> \x4B |1
+<UFF2C> \x4C |1
+<UFF2D> \x4D |1
+<UFF2E> \x4E |1
+<UFF2F> \x4F |1
+<UFF30> \x50 |1
+<UFF31> \x51 |1
+<UFF32> \x52 |1
+<UFF33> \x53 |1
+<UFF34> \x54 |1
+<UFF35> \x55 |1
+<UFF36> \x56 |1
+<UFF37> \x57 |1
+<UFF38> \x58 |1
+<UFF39> \x59 |1
+<UFF3A> \x5A |1
+<UFF3B> \x5B |1
+<UFF3C> \x5C |1
+<UFF3D> \x5D |1
+<UFF3E> \x5E |1
+<UFF3F> \x5F |1
+<UFF40> \x60 |1
+<UFF41> \x61 |1
+<UFF42> \x62 |1
+<UFF43> \x63 |1
+<UFF44> \x64 |1
+<UFF45> \x65 |1
+<UFF46> \x66 |1
+<UFF47> \x67 |1
+<UFF48> \x68 |1
+<UFF49> \x69 |1
+<UFF4A> \x6A |1
+<UFF4B> \x6B |1
+<UFF4C> \x6C |1
+<UFF4D> \x6D |1
+<UFF4E> \x6E |1
+<UFF4F> \x6F |1
+<UFF50> \x70 |1
+<UFF51> \x71 |1
+<UFF52> \x72 |1
+<UFF53> \x73 |1
+<UFF54> \x74 |1
+<UFF55> \x75 |1
+<UFF56> \x76 |1
+<UFF57> \x77 |1
+<UFF58> \x78 |1
+<UFF59> \x79 |1
+<UFF5A> \x7A |1
+<UFF5B> \x7B |1
+<UFF5C> \x7C |1
+<UFF5D> \x7D |1
+<UFF5E> \x7E |1
+<UFFE8> \xB3 |1
+<UFFE9> \x1B |1
+<UFFEA> \x18 |1
+<UFFEB> \x1A |1
+<UFFEC> \x19 |1
+<UFFED> \xFE |1
+<UFFEE> \x09 |1
+END CHARMAP
diff --git a/mcs/class/I18N/West/ibm-861.ucm b/mcs/class/I18N/West/ibm-861.ucm
new file mode 100644
index 00000000000..c93f5074542
--- /dev/null
+++ b/mcs/class/I18N/West/ibm-861.ucm
@@ -0,0 +1,416 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1995-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Mon Nov 13 08:50:43 2000
+#
+# File created by dtcocm version 3.00
+# from source files 34B0035D.RPMAP100 and 035D34B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-861"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x7F
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-861
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x7F |0
+<U001B> \x1B |0
+<U001C> \x1A |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x1C |0
+<U00A0> \xFF |0
+<U00A1> \xAD |0
+<U00A3> \x9C |0
+<U00A7> \x15 |1
+<U00AB> \xAE |0
+<U00AC> \xAA |0
+<U00B0> \xF8 |0
+<U00B1> \xF1 |0
+<U00B2> \xFD |0
+<U00B6> \x14 |1
+<U00B7> \xFA |0
+<U00BB> \xAF |0
+<U00BC> \xAC |0
+<U00BD> \xAB |0
+<U00BF> \xA8 |0
+<U00C1> \xA4 |0
+<U00C4> \x8E |0
+<U00C5> \x8F |0
+<U00C6> \x92 |0
+<U00C7> \x80 |0
+<U00C9> \x90 |0
+<U00CD> \xA5 |0
+<U00D0> \x8B |0
+<U00D3> \xA6 |0
+<U00D6> \x99 |0
+<U00D8> \x9D |0
+<U00DA> \xA7 |0
+<U00DC> \x9A |0
+<U00DD> \x97 |0
+<U00DE> \x8D |0
+<U00DF> \xE1 |0
+<U00E0> \x85 |0
+<U00E1> \xA0 |0
+<U00E2> \x83 |0
+<U00E4> \x84 |0
+<U00E5> \x86 |0
+<U00E6> \x91 |0
+<U00E7> \x87 |0
+<U00E8> \x8A |0
+<U00E9> \x82 |0
+<U00EA> \x88 |0
+<U00EB> \x89 |0
+<U00ED> \xA1 |0
+<U00F0> \x8C |0
+<U00F3> \xA2 |0
+<U00F4> \x93 |0
+<U00F6> \x94 |0
+<U00F7> \xF6 |0
+<U00F8> \x9B |0
+<U00FA> \xA3 |0
+<U00FB> \x96 |0
+<U00FC> \x81 |0
+<U00FD> \x98 |0
+<U00FE> \x95 |0
+<U0192> \x9F |0
+<U0393> \xE2 |0
+<U0398> \xE9 |0
+<U03A3> \xE4 |0
+<U03A6> \xE8 |0
+<U03A9> \xEA |0
+<U03B1> \xE0 |0
+<U03B4> \xEB |0
+<U03B5> \xEE |0
+<U03BC> \xE6 |0
+<U03C0> \xE3 |0
+<U03C3> \xE5 |0
+<U03C4> \xE7 |0
+<U03C6> \xED |0
+<U2022> \x07 |1
+<U203C> \x13 |1
+<U207F> \xFC |0
+<U20A7> \x9E |0
+<U2190> \x1B |1
+<U2191> \x18 |1
+<U2192> \x1A |1
+<U2193> \x19 |1
+<U2194> \x1D |1
+<U2195> \x12 |1
+<U21A8> \x17 |1
+<U2219> \xF9 |0
+<U221A> \xFB |0
+<U221E> \xEC |0
+<U221F> \x1C |1
+<U2229> \xEF |0
+<U2248> \xF7 |0
+<U2261> \xF0 |0
+<U2264> \xF3 |0
+<U2265> \xF2 |0
+<U2302> \x7F |2
+<U2310> \xA9 |0
+<U2320> \xF4 |0
+<U2321> \xF5 |0
+<U2500> \xC4 |0
+<U2502> \xB3 |0
+<U250C> \xDA |0
+<U2510> \xBF |0
+<U2514> \xC0 |0
+<U2518> \xD9 |0
+<U251C> \xC3 |0
+<U2524> \xB4 |0
+<U252C> \xC2 |0
+<U2534> \xC1 |0
+<U253C> \xC5 |0
+<U2550> \xCD |0
+<U2551> \xBA |0
+<U2552> \xD5 |0
+<U2553> \xD6 |0
+<U2554> \xC9 |0
+<U2555> \xB8 |0
+<U2556> \xB7 |0
+<U2557> \xBB |0
+<U2558> \xD4 |0
+<U2559> \xD3 |0
+<U255A> \xC8 |0
+<U255B> \xBE |0
+<U255C> \xBD |0
+<U255D> \xBC |0
+<U255E> \xC6 |0
+<U255F> \xC7 |0
+<U2560> \xCC |0
+<U2561> \xB5 |0
+<U2562> \xB6 |0
+<U2563> \xB9 |0
+<U2564> \xD1 |0
+<U2565> \xD2 |0
+<U2566> \xCB |0
+<U2567> \xCF |0
+<U2568> \xD0 |0
+<U2569> \xCA |0
+<U256A> \xD8 |0
+<U256B> \xD7 |0
+<U256C> \xCE |0
+<U2580> \xDF |0
+<U2584> \xDC |0
+<U2588> \xDB |0
+<U258C> \xDD |0
+<U2590> \xDE |0
+<U2591> \xB0 |0
+<U2592> \xB1 |0
+<U2593> \xB2 |0
+<U25A0> \xFE |0
+<U25AC> \x16 |1
+<U25B2> \x1E |1
+<U25BA> \x10 |1
+<U25BC> \x1F |1
+<U25C4> \x11 |1
+<U25CB> \x09 |1
+<U25D8> \x08 |1
+<U25D9> \x0A |1
+<U263A> \x01 |1
+<U263B> \x02 |1
+<U263C> \x0F |1
+<U2640> \x0C |1
+<U2642> \x0B |1
+<U2660> \x06 |1
+<U2663> \x05 |1
+<U2665> \x03 |1
+<U2666> \x04 |1
+<U266A> \x0D |1
+<U266B> \x0E |1
+<UFF01> \x21 |1
+<UFF02> \x22 |1
+<UFF03> \x23 |1
+<UFF04> \x24 |1
+<UFF05> \x25 |1
+<UFF06> \x26 |1
+<UFF07> \x27 |1
+<UFF08> \x28 |1
+<UFF09> \x29 |1
+<UFF0A> \x2A |1
+<UFF0B> \x2B |1
+<UFF0C> \x2C |1
+<UFF0D> \x2D |1
+<UFF0E> \x2E |1
+<UFF0F> \x2F |1
+<UFF10> \x30 |1
+<UFF11> \x31 |1
+<UFF12> \x32 |1
+<UFF13> \x33 |1
+<UFF14> \x34 |1
+<UFF15> \x35 |1
+<UFF16> \x36 |1
+<UFF17> \x37 |1
+<UFF18> \x38 |1
+<UFF19> \x39 |1
+<UFF1A> \x3A |1
+<UFF1B> \x3B |1
+<UFF1C> \x3C |1
+<UFF1D> \x3D |1
+<UFF1E> \x3E |1
+<UFF1F> \x3F |1
+<UFF20> \x40 |1
+<UFF21> \x41 |1
+<UFF22> \x42 |1
+<UFF23> \x43 |1
+<UFF24> \x44 |1
+<UFF25> \x45 |1
+<UFF26> \x46 |1
+<UFF27> \x47 |1
+<UFF28> \x48 |1
+<UFF29> \x49 |1
+<UFF2A> \x4A |1
+<UFF2B> \x4B |1
+<UFF2C> \x4C |1
+<UFF2D> \x4D |1
+<UFF2E> \x4E |1
+<UFF2F> \x4F |1
+<UFF30> \x50 |1
+<UFF31> \x51 |1
+<UFF32> \x52 |1
+<UFF33> \x53 |1
+<UFF34> \x54 |1
+<UFF35> \x55 |1
+<UFF36> \x56 |1
+<UFF37> \x57 |1
+<UFF38> \x58 |1
+<UFF39> \x59 |1
+<UFF3A> \x5A |1
+<UFF3B> \x5B |1
+<UFF3C> \x5C |1
+<UFF3D> \x5D |1
+<UFF3E> \x5E |1
+<UFF3F> \x5F |1
+<UFF40> \x60 |1
+<UFF41> \x61 |1
+<UFF42> \x62 |1
+<UFF43> \x63 |1
+<UFF44> \x64 |1
+<UFF45> \x65 |1
+<UFF46> \x66 |1
+<UFF47> \x67 |1
+<UFF48> \x68 |1
+<UFF49> \x69 |1
+<UFF4A> \x6A |1
+<UFF4B> \x6B |1
+<UFF4C> \x6C |1
+<UFF4D> \x6D |1
+<UFF4E> \x6E |1
+<UFF4F> \x6F |1
+<UFF50> \x70 |1
+<UFF51> \x71 |1
+<UFF52> \x72 |1
+<UFF53> \x73 |1
+<UFF54> \x74 |1
+<UFF55> \x75 |1
+<UFF56> \x76 |1
+<UFF57> \x77 |1
+<UFF58> \x78 |1
+<UFF59> \x79 |1
+<UFF5A> \x7A |1
+<UFF5B> \x7B |1
+<UFF5C> \x7C |1
+<UFF5D> \x7D |1
+<UFF5E> \x7E |1
+<UFFE8> \xB3 |1
+<UFFE9> \x1B |1
+<UFFEA> \x18 |1
+<UFFEB> \x1A |1
+<UFFEC> \x19 |1
+<UFFED> \xFE |1
+<UFFEE> \x09 |1
+END CHARMAP
diff --git a/mcs/class/I18N/West/ibm-863.ucm b/mcs/class/I18N/West/ibm-863.ucm
new file mode 100644
index 00000000000..1effe317097
--- /dev/null
+++ b/mcs/class/I18N/West/ibm-863.ucm
@@ -0,0 +1,415 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1995-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Mon Nov 13 08:50:43 2000
+#
+# File created by dtcocm version 3.00
+# from source files 34B0035F.RPMAP100 and 035F34B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-863"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x7F
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-863
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x7F |0
+<U001B> \x1B |0
+<U001C> \x1A |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x1C |0
+<U00A0> \xFF |0
+<U00A2> \x9B |0
+<U00A3> \x9C |0
+<U00A4> \x98 |0
+<U00A6> \xA0 |0
+<U00A7> \x8F |0
+<U00A8> \xA4 |0
+<U00AB> \xAE |0
+<U00AC> \xAA |0
+<U00AF> \xA7 |0
+<U00B0> \xF8 |0
+<U00B1> \xF1 |0
+<U00B2> \xFD |0
+<U00B3> \xA6 |0
+<U00B4> \xA1 |0
+<U00B6> \x86 |0
+<U00B7> \xFA |0
+<U00B8> \xA5 |0
+<U00BB> \xAF |0
+<U00BC> \xAC |0
+<U00BD> \xAB |0
+<U00BE> \xAD |0
+<U00C0> \x8E |0
+<U00C2> \x84 |0
+<U00C7> \x80 |0
+<U00C8> \x91 |0
+<U00C9> \x90 |0
+<U00CA> \x92 |0
+<U00CB> \x94 |0
+<U00CE> \xA8 |0
+<U00CF> \x95 |0
+<U00D4> \x99 |0
+<U00D9> \x9D |0
+<U00DB> \x9E |0
+<U00DC> \x9A |0
+<U00DF> \xE1 |0
+<U00E0> \x85 |0
+<U00E2> \x83 |0
+<U00E7> \x87 |0
+<U00E8> \x8A |0
+<U00E9> \x82 |0
+<U00EA> \x88 |0
+<U00EB> \x89 |0
+<U00EE> \x8C |0
+<U00EF> \x8B |0
+<U00F3> \xA2 |0
+<U00F4> \x93 |0
+<U00F7> \xF6 |0
+<U00F9> \x97 |0
+<U00FA> \xA3 |0
+<U00FB> \x96 |0
+<U00FC> \x81 |0
+<U0192> \x9F |0
+<U0393> \xE2 |0
+<U0398> \xE9 |0
+<U03A3> \xE4 |0
+<U03A6> \xE8 |0
+<U03A9> \xEA |0
+<U03B1> \xE0 |0
+<U03B4> \xEB |0
+<U03B5> \xEE |0
+<U03BC> \xE6 |0
+<U03C0> \xE3 |0
+<U03C3> \xE5 |0
+<U03C4> \xE7 |0
+<U03C6> \xED |0
+<U2017> \x8D |0
+<U2022> \x07 |1
+<U203C> \x13 |1
+<U203E> \xA7 |1
+<U207F> \xFC |0
+<U2190> \x1B |1
+<U2191> \x18 |1
+<U2192> \x1A |1
+<U2193> \x19 |1
+<U2194> \x1D |1
+<U2195> \x12 |1
+<U21A8> \x17 |1
+<U2219> \xF9 |0
+<U221A> \xFB |0
+<U221E> \xEC |0
+<U221F> \x1C |1
+<U2229> \xEF |0
+<U2248> \xF7 |0
+<U2261> \xF0 |0
+<U2264> \xF3 |0
+<U2265> \xF2 |0
+<U2302> \x7F |2
+<U2310> \xA9 |0
+<U2320> \xF4 |0
+<U2321> \xF5 |0
+<U2500> \xC4 |0
+<U2502> \xB3 |0
+<U250C> \xDA |0
+<U2510> \xBF |0
+<U2514> \xC0 |0
+<U2518> \xD9 |0
+<U251C> \xC3 |0
+<U2524> \xB4 |0
+<U252C> \xC2 |0
+<U2534> \xC1 |0
+<U253C> \xC5 |0
+<U2550> \xCD |0
+<U2551> \xBA |0
+<U2552> \xD5 |0
+<U2553> \xD6 |0
+<U2554> \xC9 |0
+<U2555> \xB8 |0
+<U2556> \xB7 |0
+<U2557> \xBB |0
+<U2558> \xD4 |0
+<U2559> \xD3 |0
+<U255A> \xC8 |0
+<U255B> \xBE |0
+<U255C> \xBD |0
+<U255D> \xBC |0
+<U255E> \xC6 |0
+<U255F> \xC7 |0
+<U2560> \xCC |0
+<U2561> \xB5 |0
+<U2562> \xB6 |0
+<U2563> \xB9 |0
+<U2564> \xD1 |0
+<U2565> \xD2 |0
+<U2566> \xCB |0
+<U2567> \xCF |0
+<U2568> \xD0 |0
+<U2569> \xCA |0
+<U256A> \xD8 |0
+<U256B> \xD7 |0
+<U256C> \xCE |0
+<U2580> \xDF |0
+<U2584> \xDC |0
+<U2588> \xDB |0
+<U258C> \xDD |0
+<U2590> \xDE |0
+<U2591> \xB0 |0
+<U2592> \xB1 |0
+<U2593> \xB2 |0
+<U25A0> \xFE |0
+<U25AC> \x16 |1
+<U25B2> \x1E |1
+<U25BA> \x10 |1
+<U25BC> \x1F |1
+<U25C4> \x11 |1
+<U25CB> \x09 |1
+<U25D8> \x08 |1
+<U25D9> \x0A |1
+<U263A> \x01 |1
+<U263B> \x02 |1
+<U263C> \x0F |1
+<U2640> \x0C |1
+<U2642> \x0B |1
+<U2660> \x06 |1
+<U2663> \x05 |1
+<U2665> \x03 |1
+<U2666> \x04 |1
+<U266A> \x0D |1
+<U266B> \x0E |1
+<UFF01> \x21 |1
+<UFF02> \x22 |1
+<UFF03> \x23 |1
+<UFF04> \x24 |1
+<UFF05> \x25 |1
+<UFF06> \x26 |1
+<UFF07> \x27 |1
+<UFF08> \x28 |1
+<UFF09> \x29 |1
+<UFF0A> \x2A |1
+<UFF0B> \x2B |1
+<UFF0C> \x2C |1
+<UFF0D> \x2D |1
+<UFF0E> \x2E |1
+<UFF0F> \x2F |1
+<UFF10> \x30 |1
+<UFF11> \x31 |1
+<UFF12> \x32 |1
+<UFF13> \x33 |1
+<UFF14> \x34 |1
+<UFF15> \x35 |1
+<UFF16> \x36 |1
+<UFF17> \x37 |1
+<UFF18> \x38 |1
+<UFF19> \x39 |1
+<UFF1A> \x3A |1
+<UFF1B> \x3B |1
+<UFF1C> \x3C |1
+<UFF1D> \x3D |1
+<UFF1E> \x3E |1
+<UFF1F> \x3F |1
+<UFF20> \x40 |1
+<UFF21> \x41 |1
+<UFF22> \x42 |1
+<UFF23> \x43 |1
+<UFF24> \x44 |1
+<UFF25> \x45 |1
+<UFF26> \x46 |1
+<UFF27> \x47 |1
+<UFF28> \x48 |1
+<UFF29> \x49 |1
+<UFF2A> \x4A |1
+<UFF2B> \x4B |1
+<UFF2C> \x4C |1
+<UFF2D> \x4D |1
+<UFF2E> \x4E |1
+<UFF2F> \x4F |1
+<UFF30> \x50 |1
+<UFF31> \x51 |1
+<UFF32> \x52 |1
+<UFF33> \x53 |1
+<UFF34> \x54 |1
+<UFF35> \x55 |1
+<UFF36> \x56 |1
+<UFF37> \x57 |1
+<UFF38> \x58 |1
+<UFF39> \x59 |1
+<UFF3A> \x5A |1
+<UFF3B> \x5B |1
+<UFF3C> \x5C |1
+<UFF3D> \x5D |1
+<UFF3E> \x5E |1
+<UFF3F> \x5F |1
+<UFF40> \x60 |1
+<UFF41> \x61 |1
+<UFF42> \x62 |1
+<UFF43> \x63 |1
+<UFF44> \x64 |1
+<UFF45> \x65 |1
+<UFF46> \x66 |1
+<UFF47> \x67 |1
+<UFF48> \x68 |1
+<UFF49> \x69 |1
+<UFF4A> \x6A |1
+<UFF4B> \x6B |1
+<UFF4C> \x6C |1
+<UFF4D> \x6D |1
+<UFF4E> \x6E |1
+<UFF4F> \x6F |1
+<UFF50> \x70 |1
+<UFF51> \x71 |1
+<UFF52> \x72 |1
+<UFF53> \x73 |1
+<UFF54> \x74 |1
+<UFF55> \x75 |1
+<UFF56> \x76 |1
+<UFF57> \x77 |1
+<UFF58> \x78 |1
+<UFF59> \x79 |1
+<UFF5A> \x7A |1
+<UFF5B> \x7B |1
+<UFF5C> \x7C |1
+<UFF5D> \x7D |1
+<UFF5E> \x7E |1
+<UFFE8> \xB3 |1
+<UFFE9> \x1B |1
+<UFFEA> \x18 |1
+<UFFEB> \x1A |1
+<UFFEC> \x19 |1
+<UFFED> \xFE |1
+<UFFEE> \x09 |1
+END CHARMAP
diff --git a/mcs/class/I18N/West/ibm-865.ucm b/mcs/class/I18N/West/ibm-865.ucm
new file mode 100644
index 00000000000..f1362fbb2bb
--- /dev/null
+++ b/mcs/class/I18N/West/ibm-865.ucm
@@ -0,0 +1,416 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1995-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Mon Nov 13 08:50:43 2000
+#
+# File created by dtcocm version 3.00
+# from source files 34B00361.RPMAP100 and 036134B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-865"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x7F
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-865
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x7F |0
+<U001B> \x1B |0
+<U001C> \x1A |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x1C |0
+<U00A0> \xFF |0
+<U00A1> \xAD |0
+<U00A3> \x9C |0
+<U00A4> \xAF |0
+<U00A7> \x15 |1
+<U00AA> \xA6 |0
+<U00AB> \xAE |0
+<U00AC> \xAA |0
+<U00B0> \xF8 |0
+<U00B1> \xF1 |0
+<U00B2> \xFD |0
+<U00B6> \x14 |1
+<U00B7> \xFA |0
+<U00BA> \xA7 |0
+<U00BC> \xAC |0
+<U00BD> \xAB |0
+<U00BF> \xA8 |0
+<U00C4> \x8E |0
+<U00C5> \x8F |0
+<U00C6> \x92 |0
+<U00C7> \x80 |0
+<U00C9> \x90 |0
+<U00D1> \xA5 |0
+<U00D6> \x99 |0
+<U00D8> \x9D |0
+<U00DC> \x9A |0
+<U00DF> \xE1 |0
+<U00E0> \x85 |0
+<U00E1> \xA0 |0
+<U00E2> \x83 |0
+<U00E4> \x84 |0
+<U00E5> \x86 |0
+<U00E6> \x91 |0
+<U00E7> \x87 |0
+<U00E8> \x8A |0
+<U00E9> \x82 |0
+<U00EA> \x88 |0
+<U00EB> \x89 |0
+<U00EC> \x8D |0
+<U00ED> \xA1 |0
+<U00EE> \x8C |0
+<U00EF> \x8B |0
+<U00F1> \xA4 |0
+<U00F2> \x95 |0
+<U00F3> \xA2 |0
+<U00F4> \x93 |0
+<U00F6> \x94 |0
+<U00F7> \xF6 |0
+<U00F8> \x9B |0
+<U00F9> \x97 |0
+<U00FA> \xA3 |0
+<U00FB> \x96 |0
+<U00FC> \x81 |0
+<U00FF> \x98 |0
+<U0192> \x9F |0
+<U0393> \xE2 |0
+<U0398> \xE9 |0
+<U03A3> \xE4 |0
+<U03A6> \xE8 |0
+<U03A9> \xEA |0
+<U03B1> \xE0 |0
+<U03B4> \xEB |0
+<U03B5> \xEE |0
+<U03BC> \xE6 |0
+<U03C0> \xE3 |0
+<U03C3> \xE5 |0
+<U03C4> \xE7 |0
+<U03C6> \xED |0
+<U2022> \x07 |1
+<U203C> \x13 |1
+<U207F> \xFC |0
+<U20A7> \x9E |0
+<U2190> \x1B |1
+<U2191> \x18 |1
+<U2192> \x1A |1
+<U2193> \x19 |1
+<U2194> \x1D |1
+<U2195> \x12 |1
+<U21A8> \x17 |1
+<U2219> \xF9 |0
+<U221A> \xFB |0
+<U221E> \xEC |0
+<U221F> \x1C |1
+<U2229> \xEF |0
+<U2248> \xF7 |0
+<U2261> \xF0 |0
+<U2264> \xF3 |0
+<U2265> \xF2 |0
+<U2302> \x7F |2
+<U2310> \xA9 |0
+<U2320> \xF4 |0
+<U2321> \xF5 |0
+<U2500> \xC4 |0
+<U2502> \xB3 |0
+<U250C> \xDA |0
+<U2510> \xBF |0
+<U2514> \xC0 |0
+<U2518> \xD9 |0
+<U251C> \xC3 |0
+<U2524> \xB4 |0
+<U252C> \xC2 |0
+<U2534> \xC1 |0
+<U253C> \xC5 |0
+<U2550> \xCD |0
+<U2551> \xBA |0
+<U2552> \xD5 |0
+<U2553> \xD6 |0
+<U2554> \xC9 |0
+<U2555> \xB8 |0
+<U2556> \xB7 |0
+<U2557> \xBB |0
+<U2558> \xD4 |0
+<U2559> \xD3 |0
+<U255A> \xC8 |0
+<U255B> \xBE |0
+<U255C> \xBD |0
+<U255D> \xBC |0
+<U255E> \xC6 |0
+<U255F> \xC7 |0
+<U2560> \xCC |0
+<U2561> \xB5 |0
+<U2562> \xB6 |0
+<U2563> \xB9 |0
+<U2564> \xD1 |0
+<U2565> \xD2 |0
+<U2566> \xCB |0
+<U2567> \xCF |0
+<U2568> \xD0 |0
+<U2569> \xCA |0
+<U256A> \xD8 |0
+<U256B> \xD7 |0
+<U256C> \xCE |0
+<U2580> \xDF |0
+<U2584> \xDC |0
+<U2588> \xDB |0
+<U258C> \xDD |0
+<U2590> \xDE |0
+<U2591> \xB0 |0
+<U2592> \xB1 |0
+<U2593> \xB2 |0
+<U25A0> \xFE |0
+<U25AC> \x16 |1
+<U25B2> \x1E |1
+<U25BA> \x10 |1
+<U25BC> \x1F |1
+<U25C4> \x11 |1
+<U25CB> \x09 |1
+<U25D8> \x08 |1
+<U25D9> \x0A |1
+<U263A> \x01 |1
+<U263B> \x02 |1
+<U263C> \x0F |1
+<U2640> \x0C |1
+<U2642> \x0B |1
+<U2660> \x06 |1
+<U2663> \x05 |1
+<U2665> \x03 |1
+<U2666> \x04 |1
+<U266A> \x0D |1
+<U266B> \x0E |1
+<UFF01> \x21 |1
+<UFF02> \x22 |1
+<UFF03> \x23 |1
+<UFF04> \x24 |1
+<UFF05> \x25 |1
+<UFF06> \x26 |1
+<UFF07> \x27 |1
+<UFF08> \x28 |1
+<UFF09> \x29 |1
+<UFF0A> \x2A |1
+<UFF0B> \x2B |1
+<UFF0C> \x2C |1
+<UFF0D> \x2D |1
+<UFF0E> \x2E |1
+<UFF0F> \x2F |1
+<UFF10> \x30 |1
+<UFF11> \x31 |1
+<UFF12> \x32 |1
+<UFF13> \x33 |1
+<UFF14> \x34 |1
+<UFF15> \x35 |1
+<UFF16> \x36 |1
+<UFF17> \x37 |1
+<UFF18> \x38 |1
+<UFF19> \x39 |1
+<UFF1A> \x3A |1
+<UFF1B> \x3B |1
+<UFF1C> \x3C |1
+<UFF1D> \x3D |1
+<UFF1E> \x3E |1
+<UFF1F> \x3F |1
+<UFF20> \x40 |1
+<UFF21> \x41 |1
+<UFF22> \x42 |1
+<UFF23> \x43 |1
+<UFF24> \x44 |1
+<UFF25> \x45 |1
+<UFF26> \x46 |1
+<UFF27> \x47 |1
+<UFF28> \x48 |1
+<UFF29> \x49 |1
+<UFF2A> \x4A |1
+<UFF2B> \x4B |1
+<UFF2C> \x4C |1
+<UFF2D> \x4D |1
+<UFF2E> \x4E |1
+<UFF2F> \x4F |1
+<UFF30> \x50 |1
+<UFF31> \x51 |1
+<UFF32> \x52 |1
+<UFF33> \x53 |1
+<UFF34> \x54 |1
+<UFF35> \x55 |1
+<UFF36> \x56 |1
+<UFF37> \x57 |1
+<UFF38> \x58 |1
+<UFF39> \x59 |1
+<UFF3A> \x5A |1
+<UFF3B> \x5B |1
+<UFF3C> \x5C |1
+<UFF3D> \x5D |1
+<UFF3E> \x5E |1
+<UFF3F> \x5F |1
+<UFF40> \x60 |1
+<UFF41> \x61 |1
+<UFF42> \x62 |1
+<UFF43> \x63 |1
+<UFF44> \x64 |1
+<UFF45> \x65 |1
+<UFF46> \x66 |1
+<UFF47> \x67 |1
+<UFF48> \x68 |1
+<UFF49> \x69 |1
+<UFF4A> \x6A |1
+<UFF4B> \x6B |1
+<UFF4C> \x6C |1
+<UFF4D> \x6D |1
+<UFF4E> \x6E |1
+<UFF4F> \x6F |1
+<UFF50> \x70 |1
+<UFF51> \x71 |1
+<UFF52> \x72 |1
+<UFF53> \x73 |1
+<UFF54> \x74 |1
+<UFF55> \x75 |1
+<UFF56> \x76 |1
+<UFF57> \x77 |1
+<UFF58> \x78 |1
+<UFF59> \x79 |1
+<UFF5A> \x7A |1
+<UFF5B> \x7B |1
+<UFF5C> \x7C |1
+<UFF5D> \x7D |1
+<UFF5E> \x7E |1
+<UFFE8> \xB3 |1
+<UFFE9> \x1B |1
+<UFFEA> \x18 |1
+<UFFEB> \x1A |1
+<UFFEC> \x19 |1
+<UFFED> \xFE |1
+<UFFEE> \x09 |1
+END CHARMAP
diff --git a/mcs/class/I18N/West/ibm-912.ucm b/mcs/class/I18N/West/ibm-912.ucm
new file mode 100644
index 00000000000..bcd31fa1477
--- /dev/null
+++ b/mcs/class/I18N/West/ibm-912.ucm
@@ -0,0 +1,446 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1995-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Mon Nov 13 09:28:04 2000
+#
+# File created by dtcocm version 3.00
+# from source files 34B00390.RPMAP100 and 039034B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-912"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x1A
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-912
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x1A |0
+<U001B> \x1B |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x7F |0
+<U0080> \x80 |0
+<U0081> \x81 |0
+<U0082> \x82 |0
+<U0083> \x83 |0
+<U0084> \x84 |0
+<U0085> \x85 |0
+<U0086> \x86 |0
+<U0087> \x87 |0
+<U0088> \x88 |0
+<U0089> \x89 |0
+<U008A> \x8A |0
+<U008B> \x8B |0
+<U008C> \x8C |0
+<U008D> \x8D |0
+<U008E> \x8E |0
+<U008F> \x8F |0
+<U0090> \x90 |0
+<U0091> \x91 |0
+<U0092> \x92 |0
+<U0093> \x93 |0
+<U0094> \x94 |0
+<U0095> \x95 |0
+<U0096> \x96 |0
+<U0097> \x97 |0
+<U0098> \x98 |0
+<U0099> \x99 |0
+<U009A> \x9A |0
+<U009B> \x9B |0
+<U009C> \x9C |0
+<U009D> \x9D |0
+<U009E> \x9E |0
+<U009F> \x9F |0
+<U00A0> \xA0 |0
+<U00A2> \x8D |1
+<U00A4> \xA4 |0
+<U00A5> \x8E |1
+<U00A7> \xA7 |0
+<U00A8> \xA8 |0
+<U00A9> \x88 |1
+<U00AD> \xAD |0
+<U00AE> \x9F |1
+<U00B0> \xB0 |0
+<U00B4> \xB4 |0
+<U00B6> \x14 |1
+<U00B8> \xB8 |0
+<U00C1> \xC1 |0
+<U00C2> \xC2 |0
+<U00C4> \xC4 |0
+<U00C7> \xC7 |0
+<U00C9> \xC9 |0
+<U00CB> \xCB |0
+<U00CD> \xCD |0
+<U00CE> \xCE |0
+<U00D0> \xD0 |1
+<U00D3> \xD3 |0
+<U00D4> \xD4 |0
+<U00D6> \xD6 |0
+<U00D7> \xD7 |0
+<U00DA> \xDA |0
+<U00DC> \xDC |0
+<U00DD> \xDD |0
+<U00DF> \xDF |0
+<U00E1> \xE1 |0
+<U00E2> \xE2 |0
+<U00E4> \xE4 |0
+<U00E7> \xE7 |0
+<U00E9> \xE9 |0
+<U00EB> \xEB |0
+<U00ED> \xED |0
+<U00EE> \xEE |0
+<U00F3> \xF3 |0
+<U00F4> \xF4 |0
+<U00F6> \xF6 |0
+<U00F7> \xF7 |0
+<U00FA> \xFA |0
+<U00FC> \xFC |0
+<U00FD> \xFD |0
+<U0102> \xC3 |0
+<U0103> \xE3 |0
+<U0104> \xA1 |0
+<U0105> \xB1 |0
+<U0106> \xC6 |0
+<U0107> \xE6 |0
+<U010C> \xC8 |0
+<U010D> \xE8 |0
+<U010E> \xCF |0
+<U010F> \xEF |0
+<U0110> \xD0 |0
+<U0111> \xF0 |0
+<U0118> \xCA |0
+<U0119> \xEA |0
+<U011A> \xCC |0
+<U011B> \xEC |0
+<U0139> \xC5 |0
+<U013A> \xE5 |0
+<U013D> \xA5 |0
+<U013E> \xB5 |0
+<U0141> \xA3 |0
+<U0142> \xB3 |0
+<U0143> \xD1 |0
+<U0144> \xF1 |0
+<U0147> \xD2 |0
+<U0148> \xF2 |0
+<U0150> \xD5 |0
+<U0151> \xF5 |0
+<U0154> \xC0 |0
+<U0155> \xE0 |0
+<U0158> \xD8 |0
+<U0159> \xF8 |0
+<U015A> \xA6 |0
+<U015B> \xB6 |0
+<U015E> \xAA |0
+<U015F> \xBA |0
+<U0160> \xA9 |0
+<U0161> \xB9 |0
+<U0162> \xDE |0
+<U0163> \xFE |0
+<U0164> \xAB |0
+<U0165> \xBB |0
+<U016E> \xD9 |0
+<U016F> \xF9 |0
+<U0170> \xDB |0
+<U0171> \xFB |0
+<U0179> \xAC |0
+<U017A> \xBC |0
+<U017B> \xAF |0
+<U017C> \xBF |0
+<U017D> \xAE |0
+<U017E> \xBE |0
+<U02C7> \xB7 |0
+<U02D8> \xA2 |0
+<U02D9> \xFF |0
+<U02DB> \xB2 |0
+<U02DD> \xBD |0
+<U2022> \x07 |1
+<U203C> \x13 |1
+<U2190> \x1B |1
+<U2191> \x18 |1
+<U2192> \x1A |2
+<U2193> \x19 |1
+<U2194> \x1D |1
+<U2195> \x12 |1
+<U21A8> \x17 |1
+<U221F> \x1C |1
+<U2500> \x94 |1
+<U2502> \x83 |1
+<U250C> \x86 |1
+<U2510> \x8F |1
+<U2514> \x90 |1
+<U2518> \x85 |1
+<U251C> \x93 |1
+<U2524> \x84 |1
+<U252C> \x92 |1
+<U2534> \x91 |1
+<U253C> \x95 |1
+<U2550> \x9D |1
+<U2551> \x8A |1
+<U2554> \x99 |1
+<U2557> \x8B |1
+<U255A> \x98 |1
+<U255D> \x8C |1
+<U2560> \x9C |1
+<U2563> \x89 |1
+<U2566> \x9B |1
+<U2569> \x9A |1
+<U256C> \x9E |1
+<U2580> \x97 |1
+<U2584> \x96 |1
+<U2588> \x87 |1
+<U2591> \x80 |1
+<U2592> \x81 |1
+<U2593> \x82 |1
+<U25AC> \x16 |1
+<U25B2> \x1E |1
+<U25BA> \x10 |1
+<U25BC> \x1F |1
+<U25C4> \x11 |1
+<U25CB> \x09 |1
+<U25D8> \x08 |1
+<U25D9> \x0A |1
+<U263A> \x01 |1
+<U263B> \x02 |1
+<U263C> \x0F |1
+<U2640> \x0C |1
+<U2642> \x0B |1
+<U2660> \x06 |1
+<U2663> \x05 |1
+<U2665> \x03 |1
+<U2666> \x04 |1
+<U266A> \x0D |1
+<U266C> \x0E |1
+<UFF01> \x21 |1
+<UFF02> \x22 |1
+<UFF03> \x23 |1
+<UFF04> \x24 |1
+<UFF05> \x25 |1
+<UFF06> \x26 |1
+<UFF07> \x27 |1
+<UFF08> \x28 |1
+<UFF09> \x29 |1
+<UFF0A> \x2A |1
+<UFF0B> \x2B |1
+<UFF0C> \x2C |1
+<UFF0D> \x2D |1
+<UFF0E> \x2E |1
+<UFF0F> \x2F |1
+<UFF10> \x30 |1
+<UFF11> \x31 |1
+<UFF12> \x32 |1
+<UFF13> \x33 |1
+<UFF14> \x34 |1
+<UFF15> \x35 |1
+<UFF16> \x36 |1
+<UFF17> \x37 |1
+<UFF18> \x38 |1
+<UFF19> \x39 |1
+<UFF1A> \x3A |1
+<UFF1B> \x3B |1
+<UFF1C> \x3C |1
+<UFF1D> \x3D |1
+<UFF1E> \x3E |1
+<UFF1F> \x3F |1
+<UFF20> \x40 |1
+<UFF21> \x41 |1
+<UFF22> \x42 |1
+<UFF23> \x43 |1
+<UFF24> \x44 |1
+<UFF25> \x45 |1
+<UFF26> \x46 |1
+<UFF27> \x47 |1
+<UFF28> \x48 |1
+<UFF29> \x49 |1
+<UFF2A> \x4A |1
+<UFF2B> \x4B |1
+<UFF2C> \x4C |1
+<UFF2D> \x4D |1
+<UFF2E> \x4E |1
+<UFF2F> \x4F |1
+<UFF30> \x50 |1
+<UFF31> \x51 |1
+<UFF32> \x52 |1
+<UFF33> \x53 |1
+<UFF34> \x54 |1
+<UFF35> \x55 |1
+<UFF36> \x56 |1
+<UFF37> \x57 |1
+<UFF38> \x58 |1
+<UFF39> \x59 |1
+<UFF3A> \x5A |1
+<UFF3B> \x5B |1
+<UFF3C> \x5C |1
+<UFF3D> \x5D |1
+<UFF3E> \x5E |1
+<UFF3F> \x5F |1
+<UFF40> \x60 |1
+<UFF41> \x61 |1
+<UFF42> \x62 |1
+<UFF43> \x63 |1
+<UFF44> \x64 |1
+<UFF45> \x65 |1
+<UFF46> \x66 |1
+<UFF47> \x67 |1
+<UFF48> \x68 |1
+<UFF49> \x69 |1
+<UFF4A> \x6A |1
+<UFF4B> \x6B |1
+<UFF4C> \x6C |1
+<UFF4D> \x6D |1
+<UFF4E> \x6E |1
+<UFF4F> \x6F |1
+<UFF50> \x70 |1
+<UFF51> \x71 |1
+<UFF52> \x72 |1
+<UFF53> \x73 |1
+<UFF54> \x74 |1
+<UFF55> \x75 |1
+<UFF56> \x76 |1
+<UFF57> \x77 |1
+<UFF58> \x78 |1
+<UFF59> \x79 |1
+<UFF5A> \x7A |1
+<UFF5B> \x7B |1
+<UFF5C> \x7C |1
+<UFF5D> \x7D |1
+<UFF5E> \x7E |1
+<UFFE8> \x83 |1
+<UFFE9> \x1B |1
+<UFFEA> \x18 |1
+<UFFEB> \x1A |2
+<UFFEC> \x19 |1
+<UFFEE> \x09 |1
+END CHARMAP
diff --git a/mcs/class/I18N/West/ibm-913.ucm b/mcs/class/I18N/West/ibm-913.ucm
new file mode 100644
index 00000000000..213fbd6c7f8
--- /dev/null
+++ b/mcs/class/I18N/West/ibm-913.ucm
@@ -0,0 +1,370 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1995-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Mon Nov 13 09:28:04 2000
+#
+# File created by dtcocm version 3.00
+# from source files 34B00391.RPMAP100 and 039134B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-913"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x1A
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-913
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x1A |0
+<U001B> \x1B |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x7F |0
+<U0080> \x80 |0
+<U0081> \x81 |0
+<U0082> \x82 |0
+<U0083> \x83 |0
+<U0084> \x84 |0
+<U0085> \x85 |0
+<U0086> \x86 |0
+<U0087> \x87 |0
+<U0088> \x88 |0
+<U0089> \x89 |0
+<U008A> \x8A |0
+<U008B> \x8B |0
+<U008C> \x8C |0
+<U008D> \x8D |0
+<U008E> \x8E |0
+<U008F> \x8F |0
+<U0090> \x90 |0
+<U0091> \x91 |0
+<U0092> \x92 |0
+<U0093> \x93 |0
+<U0094> \x94 |0
+<U0095> \x95 |0
+<U0096> \x96 |0
+<U0097> \x97 |0
+<U0098> \x98 |0
+<U0099> \x99 |0
+<U009A> \x9A |0
+<U009B> \x9B |0
+<U009C> \x9C |0
+<U009D> \x9D |0
+<U009E> \x9E |0
+<U009F> \x9F |0
+<U00A0> \xA0 |0
+<U00A3> \xA3 |0
+<U00A4> \xA4 |0
+<U00A7> \xA7 |0
+<U00A8> \xA8 |0
+<U00AD> \xAD |0
+<U00B0> \xB0 |0
+<U00B2> \xB2 |0
+<U00B3> \xB3 |0
+<U00B4> \xB4 |0
+<U00B5> \xB5 |0
+<U00B7> \xB7 |0
+<U00B8> \xB8 |0
+<U00BD> \xBD |0
+<U00C0> \xC0 |0
+<U00C1> \xC1 |0
+<U00C2> \xC2 |0
+<U00C4> \xC4 |0
+<U00C7> \xC7 |0
+<U00C8> \xC8 |0
+<U00C9> \xC9 |0
+<U00CA> \xCA |0
+<U00CB> \xCB |0
+<U00CC> \xCC |0
+<U00CD> \xCD |0
+<U00CE> \xCE |0
+<U00CF> \xCF |0
+<U00D1> \xD1 |0
+<U00D2> \xD2 |0
+<U00D3> \xD3 |0
+<U00D4> \xD4 |0
+<U00D6> \xD6 |0
+<U00D7> \xD7 |0
+<U00D9> \xD9 |0
+<U00DA> \xDA |0
+<U00DB> \xDB |0
+<U00DC> \xDC |0
+<U00DF> \xDF |0
+<U00E0> \xE0 |0
+<U00E1> \xE1 |0
+<U00E2> \xE2 |0
+<U00E4> \xE4 |0
+<U00E7> \xE7 |0
+<U00E8> \xE8 |0
+<U00E9> \xE9 |0
+<U00EA> \xEA |0
+<U00EB> \xEB |0
+<U00EC> \xEC |0
+<U00ED> \xED |0
+<U00EE> \xEE |0
+<U00EF> \xEF |0
+<U00F1> \xF1 |0
+<U00F2> \xF2 |0
+<U00F3> \xF3 |0
+<U00F4> \xF4 |0
+<U00F6> \xF6 |0
+<U00F7> \xF7 |0
+<U00F9> \xF9 |0
+<U00FA> \xFA |0
+<U00FB> \xFB |0
+<U00FC> \xFC |0
+<U0108> \xC6 |0
+<U0109> \xE6 |0
+<U010A> \xC5 |0
+<U010B> \xE5 |0
+<U011C> \xD8 |0
+<U011D> \xF8 |0
+<U011E> \xAB |0
+<U011F> \xBB |0
+<U0120> \xD5 |0
+<U0121> \xF5 |0
+<U0124> \xA6 |0
+<U0125> \xB6 |0
+<U0126> \xA1 |0
+<U0127> \xB1 |0
+<U0130> \xA9 |0
+<U0131> \xB9 |0
+<U0134> \xAC |0
+<U0135> \xBC |0
+<U015C> \xDE |0
+<U015D> \xFE |0
+<U015E> \xAA |0
+<U015F> \xBA |0
+<U016C> \xDD |0
+<U016D> \xFD |0
+<U017B> \xAF |0
+<U017C> \xBF |0
+<U02D8> \xA2 |0
+<U02D9> \xFF |0
+<UFF01> \x21 |1
+<UFF02> \x22 |1
+<UFF03> \x23 |1
+<UFF04> \x24 |1
+<UFF05> \x25 |1
+<UFF06> \x26 |1
+<UFF07> \x27 |1
+<UFF08> \x28 |1
+<UFF09> \x29 |1
+<UFF0A> \x2A |1
+<UFF0B> \x2B |1
+<UFF0C> \x2C |1
+<UFF0D> \x2D |1
+<UFF0E> \x2E |1
+<UFF0F> \x2F |1
+<UFF10> \x30 |1
+<UFF11> \x31 |1
+<UFF12> \x32 |1
+<UFF13> \x33 |1
+<UFF14> \x34 |1
+<UFF15> \x35 |1
+<UFF16> \x36 |1
+<UFF17> \x37 |1
+<UFF18> \x38 |1
+<UFF19> \x39 |1
+<UFF1A> \x3A |1
+<UFF1B> \x3B |1
+<UFF1C> \x3C |1
+<UFF1D> \x3D |1
+<UFF1E> \x3E |1
+<UFF1F> \x3F |1
+<UFF20> \x40 |1
+<UFF21> \x41 |1
+<UFF22> \x42 |1
+<UFF23> \x43 |1
+<UFF24> \x44 |1
+<UFF25> \x45 |1
+<UFF26> \x46 |1
+<UFF27> \x47 |1
+<UFF28> \x48 |1
+<UFF29> \x49 |1
+<UFF2A> \x4A |1
+<UFF2B> \x4B |1
+<UFF2C> \x4C |1
+<UFF2D> \x4D |1
+<UFF2E> \x4E |1
+<UFF2F> \x4F |1
+<UFF30> \x50 |1
+<UFF31> \x51 |1
+<UFF32> \x52 |1
+<UFF33> \x53 |1
+<UFF34> \x54 |1
+<UFF35> \x55 |1
+<UFF36> \x56 |1
+<UFF37> \x57 |1
+<UFF38> \x58 |1
+<UFF39> \x59 |1
+<UFF3A> \x5A |1
+<UFF3B> \x5B |1
+<UFF3C> \x5C |1
+<UFF3D> \x5D |1
+<UFF3E> \x5E |1
+<UFF3F> \x5F |1
+<UFF40> \x60 |1
+<UFF41> \x61 |1
+<UFF42> \x62 |1
+<UFF43> \x63 |1
+<UFF44> \x64 |1
+<UFF45> \x65 |1
+<UFF46> \x66 |1
+<UFF47> \x67 |1
+<UFF48> \x68 |1
+<UFF49> \x69 |1
+<UFF4A> \x6A |1
+<UFF4B> \x6B |1
+<UFF4C> \x6C |1
+<UFF4D> \x6D |1
+<UFF4E> \x6E |1
+<UFF4F> \x6F |1
+<UFF50> \x70 |1
+<UFF51> \x71 |1
+<UFF52> \x72 |1
+<UFF53> \x73 |1
+<UFF54> \x74 |1
+<UFF55> \x75 |1
+<UFF56> \x76 |1
+<UFF57> \x77 |1
+<UFF58> \x78 |1
+<UFF59> \x79 |1
+<UFF5A> \x7A |1
+<UFF5B> \x7B |1
+<UFF5C> \x7C |1
+<UFF5D> \x7D |1
+<UFF5E> \x7E |1
+END CHARMAP
diff --git a/mcs/class/I18N/West/ibm-923.ucm b/mcs/class/I18N/West/ibm-923.ucm
new file mode 100644
index 00000000000..78cc496293d
--- /dev/null
+++ b/mcs/class/I18N/West/ibm-923.ucm
@@ -0,0 +1,377 @@
+# *******************************************************************************
+# *
+# * Copyright (C) 1998-2000, International Business Machines
+# * Corporation and others. All Rights Reserved.
+# *
+# *******************************************************************************
+#
+# File created on Mon Nov 13 09:28:04 2000
+#
+# File created by dtcocm version 3.00
+# from source files 44B0039B.RPMAP100 and 039B44B0.TPMAP100
+#
+# Table Version : 1.01
+#
+<code_set_name> "IBM-923"
+<char_name_mask> "AXXXX"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x1A
+#
+CHARMAP
+#
+#
+#ISO 10646 IBM-923
+#_________ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x1A |0
+<U001B> \x1B |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x7F |0
+<U0080> \x80 |0
+<U0081> \x81 |0
+<U0082> \x82 |0
+<U0083> \x83 |0
+<U0084> \x84 |0
+<U0085> \x85 |0
+<U0086> \x86 |0
+<U0087> \x87 |0
+<U0088> \x88 |0
+<U0089> \x89 |0
+<U008A> \x8A |0
+<U008B> \x8B |0
+<U008C> \x8C |0
+<U008D> \x8D |0
+<U008E> \x8E |0
+<U008F> \x8F |0
+<U0090> \x90 |0
+<U0091> \x91 |0
+<U0092> \x92 |0
+<U0093> \x93 |0
+<U0094> \x94 |0
+<U0095> \x95 |0
+<U0096> \x96 |0
+<U0097> \x97 |0
+<U0098> \x98 |0
+<U0099> \x99 |0
+<U009A> \x9A |0
+<U009B> \x9B |0
+<U009C> \x9C |0
+<U009D> \x9D |0
+<U009E> \x9E |0
+<U009F> \x9F |0
+<U00A0> \xA0 |0
+<U00A1> \xA1 |0
+<U00A2> \xA2 |0
+<U00A3> \xA3 |0
+<U00A5> \xA5 |0
+<U00A7> \xA7 |0
+<U00A9> \xA9 |0
+<U00AA> \xAA |0
+<U00AB> \xAB |0
+<U00AC> \xAC |0
+<U00AD> \xAD |0
+<U00AE> \xAE |0
+<U00AF> \xAF |0
+<U00B0> \xB0 |0
+<U00B1> \xB1 |0
+<U00B2> \xB2 |0
+<U00B3> \xB3 |0
+<U00B5> \xB5 |0
+<U00B6> \xB6 |0
+<U00B7> \xB7 |0
+<U00B9> \xB9 |0
+<U00BA> \xBA |0
+<U00BB> \xBB |0
+<U00BF> \xBF |0
+<U00C0> \xC0 |0
+<U00C1> \xC1 |0
+<U00C2> \xC2 |0
+<U00C3> \xC3 |0
+<U00C4> \xC4 |0
+<U00C5> \xC5 |0
+<U00C6> \xC6 |0
+<U00C7> \xC7 |0
+<U00C8> \xC8 |0
+<U00C9> \xC9 |0
+<U00CA> \xCA |0
+<U00CB> \xCB |0
+<U00CC> \xCC |0
+<U00CD> \xCD |0
+<U00CE> \xCE |0
+<U00CF> \xCF |0
+<U00D0> \xD0 |0
+<U00D1> \xD1 |0
+<U00D2> \xD2 |0
+<U00D3> \xD3 |0
+<U00D4> \xD4 |0
+<U00D5> \xD5 |0
+<U00D6> \xD6 |0
+<U00D7> \xD7 |0
+<U00D8> \xD8 |0
+<U00D9> \xD9 |0
+<U00DA> \xDA |0
+<U00DB> \xDB |0
+<U00DC> \xDC |0
+<U00DD> \xDD |0
+<U00DE> \xDE |0
+<U00DF> \xDF |0
+<U00E0> \xE0 |0
+<U00E1> \xE1 |0
+<U00E2> \xE2 |0
+<U00E3> \xE3 |0
+<U00E4> \xE4 |0
+<U00E5> \xE5 |0
+<U00E6> \xE6 |0
+<U00E7> \xE7 |0
+<U00E8> \xE8 |0
+<U00E9> \xE9 |0
+<U00EA> \xEA |0
+<U00EB> \xEB |0
+<U00EC> \xEC |0
+<U00ED> \xED |0
+<U00EE> \xEE |0
+<U00EF> \xEF |0
+<U00F0> \xF0 |0
+<U00F1> \xF1 |0
+<U00F2> \xF2 |0
+<U00F3> \xF3 |0
+<U00F4> \xF4 |0
+<U00F5> \xF5 |0
+<U00F6> \xF6 |0
+<U00F7> \xF7 |0
+<U00F8> \xF8 |0
+<U00F9> \xF9 |0
+<U00FA> \xFA |0
+<U00FB> \xFB |0
+<U00FC> \xFC |0
+<U00FD> \xFD |0
+<U00FE> \xFE |0
+<U00FF> \xFF |0
+<U0152> \xBC |0
+<U0153> \xBD |0
+<U0160> \xA6 |0
+<U0161> \xA8 |0
+<U0178> \xBE |0
+<U017D> \xB4 |0
+<U017E> \xB8 |0
+<U20AC> \xA4 |0
+<UFF01> \x21 |1
+<UFF02> \x22 |1
+<UFF03> \x23 |1
+<UFF04> \x24 |1
+<UFF05> \x25 |1
+<UFF06> \x26 |1
+<UFF07> \x27 |1
+<UFF08> \x28 |1
+<UFF09> \x29 |1
+<UFF0A> \x2A |1
+<UFF0B> \x2B |1
+<UFF0C> \x2C |1
+<UFF0D> \x2D |1
+<UFF0E> \x2E |1
+<UFF0F> \x2F |1
+<UFF10> \x30 |1
+<UFF11> \x31 |1
+<UFF12> \x32 |1
+<UFF13> \x33 |1
+<UFF14> \x34 |1
+<UFF15> \x35 |1
+<UFF16> \x36 |1
+<UFF17> \x37 |1
+<UFF18> \x38 |1
+<UFF19> \x39 |1
+<UFF1A> \x3A |1
+<UFF1B> \x3B |1
+<UFF1C> \x3C |1
+<UFF1D> \x3D |1
+<UFF1E> \x3E |1
+<UFF1F> \x3F |1
+<UFF20> \x40 |1
+<UFF21> \x41 |1
+<UFF22> \x42 |1
+<UFF23> \x43 |1
+<UFF24> \x44 |1
+<UFF25> \x45 |1
+<UFF26> \x46 |1
+<UFF27> \x47 |1
+<UFF28> \x48 |1
+<UFF29> \x49 |1
+<UFF2A> \x4A |1
+<UFF2B> \x4B |1
+<UFF2C> \x4C |1
+<UFF2D> \x4D |1
+<UFF2E> \x4E |1
+<UFF2F> \x4F |1
+<UFF30> \x50 |1
+<UFF31> \x51 |1
+<UFF32> \x52 |1
+<UFF33> \x53 |1
+<UFF34> \x54 |1
+<UFF35> \x55 |1
+<UFF36> \x56 |1
+<UFF37> \x57 |1
+<UFF38> \x58 |1
+<UFF39> \x59 |1
+<UFF3A> \x5A |1
+<UFF3B> \x5B |1
+<UFF3C> \x5C |1
+<UFF3D> \x5D |1
+<UFF3E> \x5E |1
+<UFF3F> \x5F |1
+<UFF40> \x60 |1
+<UFF41> \x61 |1
+<UFF42> \x62 |1
+<UFF43> \x63 |1
+<UFF44> \x64 |1
+<UFF45> \x65 |1
+<UFF46> \x66 |1
+<UFF47> \x67 |1
+<UFF48> \x68 |1
+<UFF49> \x69 |1
+<UFF4A> \x6A |1
+<UFF4B> \x6B |1
+<UFF4C> \x6C |1
+<UFF4D> \x6D |1
+<UFF4E> \x6E |1
+<UFF4F> \x6F |1
+<UFF50> \x70 |1
+<UFF51> \x71 |1
+<UFF52> \x72 |1
+<UFF53> \x73 |1
+<UFF54> \x74 |1
+<UFF55> \x75 |1
+<UFF56> \x76 |1
+<UFF57> \x77 |1
+<UFF58> \x78 |1
+<UFF59> \x79 |1
+<UFF5A> \x7A |1
+<UFF5B> \x7B |1
+<UFF5C> \x7C |1
+<UFF5D> \x7D |1
+<UFF5E> \x7E |1
+END CHARMAP
diff --git a/mcs/class/I18N/West/list.unix b/mcs/class/I18N/West/list.unix
new file mode 100755
index 00000000000..892d20df39f
--- /dev/null
+++ b/mcs/class/I18N/West/list.unix
@@ -0,0 +1,15 @@
+CP10000.cs
+CP10079.cs
+CP1250.cs
+CP1252.cs
+CP1253.cs
+CP28592.cs
+CP28593.cs
+CP28597.cs
+CP28605.cs
+CP437.cs
+CP850.cs
+CP860.cs
+CP861.cs
+CP863.cs
+CP865.cs
diff --git a/mcs/class/I18N/West/mac-is.ucm b/mcs/class/I18N/West/mac-is.ucm
new file mode 100644
index 00000000000..08d5694066f
--- /dev/null
+++ b/mcs/class/I18N/West/mac-is.ucm
@@ -0,0 +1,290 @@
+#________________________________________________________________________
+#
+# (C) COPYRIGHT International Business Machines Corp. 2001
+# All Rights Reserved
+#
+#________________________________________________________________________
+#
+# File created on Thu Apr 05 09:38:46 PDT 2001
+#
+# File created by CharConv tool.
+# Platform: Linux redhat2 2.2.12-20 #1 Mon Sep 27 10:40:35 EDT 1999 i686 unkglibc-
+#
+# Table Version : 1.0
+# The 1st column is the Unicode scalar value.
+# The 2nd column is the codepage byte sequence.
+# The 3rd column is the fallback indicator.
+# The fallback indicator can have one of the following values:
+# |0 for exact 1-1 roundtrip mapping
+# |1 for the best fallback codepage byte sequence.
+# |2 for the substitution character
+# |3 for the best reverse fallback Unicode scaler value
+#
+<code_set_name> "MAC_IS"
+<mb_cur_max> 1
+<mb_cur_min> 1
+<uconv_class> "SBCS"
+<subchar> \x1A
+#
+CHARMAP
+#
+#
+#UNICODE MAC_IS
+#_______ _________
+<U0000> \x00 |0
+<U0001> \x01 |0
+<U0002> \x02 |0
+<U0003> \x03 |0
+<U0004> \x04 |0
+<U0005> \x05 |0
+<U0006> \x06 |0
+<U0007> \x07 |0
+<U0008> \x08 |0
+<U0009> \x09 |0
+<U000A> \x0A |0
+<U000B> \x0B |0
+<U000C> \x0C |0
+<U000D> \x0D |0
+<U000E> \x0E |0
+<U000F> \x0F |0
+<U0010> \x10 |0
+<U0011> \x11 |0
+<U0012> \x12 |0
+<U0013> \x13 |0
+<U0014> \x14 |0
+<U0015> \x15 |0
+<U0016> \x16 |0
+<U0017> \x17 |0
+<U0018> \x18 |0
+<U0019> \x19 |0
+<U001A> \x1A |0
+<U001B> \x1B |0
+<U001C> \x1C |0
+<U001D> \x1D |0
+<U001E> \x1E |0
+<U001F> \x1F |0
+<U0020> \x20 |0
+<U0021> \x21 |0
+<U0022> \x22 |0
+<U0023> \x23 |0
+<U0024> \x24 |0
+<U0025> \x25 |0
+<U0026> \x26 |0
+<U0027> \x27 |0
+<U0028> \x28 |0
+<U0029> \x29 |0
+<U002A> \x2A |0
+<U002B> \x2B |0
+<U002C> \x2C |0
+<U002D> \x2D |0
+<U002E> \x2E |0
+<U002F> \x2F |0
+<U0030> \x30 |0
+<U0031> \x31 |0
+<U0032> \x32 |0
+<U0033> \x33 |0
+<U0034> \x34 |0
+<U0035> \x35 |0
+<U0036> \x36 |0
+<U0037> \x37 |0
+<U0038> \x38 |0
+<U0039> \x39 |0
+<U003A> \x3A |0
+<U003B> \x3B |0
+<U003C> \x3C |0
+<U003D> \x3D |0
+<U003E> \x3E |0
+<U003F> \x3F |0
+<U0040> \x40 |0
+<U0041> \x41 |0
+<U0042> \x42 |0
+<U0043> \x43 |0
+<U0044> \x44 |0
+<U0045> \x45 |0
+<U0046> \x46 |0
+<U0047> \x47 |0
+<U0048> \x48 |0
+<U0049> \x49 |0
+<U004A> \x4A |0
+<U004B> \x4B |0
+<U004C> \x4C |0
+<U004D> \x4D |0
+<U004E> \x4E |0
+<U004F> \x4F |0
+<U0050> \x50 |0
+<U0051> \x51 |0
+<U0052> \x52 |0
+<U0053> \x53 |0
+<U0054> \x54 |0
+<U0055> \x55 |0
+<U0056> \x56 |0
+<U0057> \x57 |0
+<U0058> \x58 |0
+<U0059> \x59 |0
+<U005A> \x5A |0
+<U005B> \x5B |0
+<U005C> \x5C |0
+<U005D> \x5D |0
+<U005E> \x5E |0
+<U005F> \x5F |0
+<U0060> \x60 |0
+<U0061> \x61 |0
+<U0062> \x62 |0
+<U0063> \x63 |0
+<U0064> \x64 |0
+<U0065> \x65 |0
+<U0066> \x66 |0
+<U0067> \x67 |0
+<U0068> \x68 |0
+<U0069> \x69 |0
+<U006A> \x6A |0
+<U006B> \x6B |0
+<U006C> \x6C |0
+<U006D> \x6D |0
+<U006E> \x6E |0
+<U006F> \x6F |0
+<U0070> \x70 |0
+<U0071> \x71 |0
+<U0072> \x72 |0
+<U0073> \x73 |0
+<U0074> \x74 |0
+<U0075> \x75 |0
+<U0076> \x76 |0
+<U0077> \x77 |0
+<U0078> \x78 |0
+<U0079> \x79 |0
+<U007A> \x7A |0
+<U007B> \x7B |0
+<U007C> \x7C |0
+<U007D> \x7D |0
+<U007E> \x7E |0
+<U007F> \x7F |0
+<U00A0> \xCA |0
+<U00A1> \xC1 |0
+<U00A2> \xA2 |0
+<U00A3> \xA3 |0
+<U00A4> \xDB |0
+<U00A5> \xB4 |0
+<U00A7> \xA4 |0
+<U00A8> \xAC |0
+<U00A9> \xA9 |0
+<U00AA> \xBB |0
+<U00AB> \xC7 |0
+<U00AC> \xC2 |0
+<U00AE> \xA8 |0
+<U00AF> \xF8 |0
+<U00B0> \xA1 |0
+<U00B1> \xB1 |0
+<U00B4> \xAB |0
+<U00B5> \xB5 |0
+<U00B6> \xA6 |0
+<U00B7> \xE1 |0
+<U00B8> \xFC |0
+<U00BA> \xBC |0
+<U00BB> \xC8 |0
+<U00BF> \xC0 |0
+<U00C0> \xCB |0
+<U00C1> \xE7 |0
+<U00C2> \xE5 |0
+<U00C3> \xCC |0
+<U00C4> \x80 |0
+<U00C5> \x81 |0
+<U00C6> \xAE |0
+<U00C7> \x82 |0
+<U00C8> \xE9 |0
+<U00C9> \x83 |0
+<U00CA> \xE6 |0
+<U00CB> \xE8 |0
+<U00CC> \xED |0
+<U00CD> \xEA |0
+<U00CE> \xEB |0
+<U00CF> \xEC |0
+<U00D1> \x84 |0
+<U00D2> \xF1 |0
+<U00D3> \xEE |0
+<U00D4> \xEF |0
+<U00D5> \xCD |0
+<U00D6> \x85 |0
+<U00D8> \xAF |0
+<U00D9> \xF4 |0
+<U00DA> \xF2 |0
+<U00DB> \xF3 |0
+<U00DC> \x86 |0
+<U00DE> \xDE |0
+<U00DF> \xA7 |0
+<U00E0> \x88 |0
+<U00E1> \x87 |0
+<U00E2> \x89 |0
+<U00E3> \x8B |0
+<U00E4> \x8A |0
+<U00E5> \x8C |0
+<U00E6> \xBE |0
+<U00E7> \x8D |0
+<U00E8> \x8F |0
+<U00E9> \x8E |0
+<U00EA> \x90 |0
+<U00EB> \x91 |0
+<U00EC> \x93 |0
+<U00ED> \x92 |0
+<U00EE> \x94 |0
+<U00EF> \x95 |0
+<U00F1> \x96 |0
+<U00F2> \x98 |0
+<U00F3> \x97 |0
+<U00F4> \x99 |0
+<U00F5> \x9B |0
+<U00F6> \x9A |0
+<U00F7> \xD6 |0
+<U00F8> \xBF |0
+<U00F9> \x9D |0
+<U00FA> \x9C |0
+<U00FB> \x9E |0
+<U00FC> \x9F |0
+<U00FE> \xDF |0
+<U00FF> \xD8 |0
+<U0110> \xDC |0
+<U0111> \xDD |0
+<U0131> \xF5 |0
+<U0152> \xCE |0
+<U0153> \xCF |0
+<U0178> \xD9 |0
+<U0192> \xC4 |0
+<U02C7> \xFF |0
+<U02D8> \xF9 |0
+<U02D9> \xFA |0
+<U02DA> \xFB |0
+<U02DB> \xFE |0
+<U02DD> \xFD |0
+<U0394> \xC6 |0
+<U03A9> \xBD |0
+<U03C0> \xB9 |0
+<U2013> \xD1 |0
+<U2014> \xD0 |0
+<U2018> \xD4 |0
+<U2019> \xD5 |0
+<U201A> \xE2 |0
+<U201C> \xD2 |0
+<U201D> \xD3 |0
+<U201E> \xE3 |0
+<U2020> \xA0 |0
+<U2021> \xE0 |0
+<U2022> \xA5 |0
+<U2026> \xC9 |0
+<U2030> \xE4 |0
+<U2044> \xDA |0
+<U2122> \xAA |0
+<U2202> \xB6 |0
+<U220F> \xB8 |0
+<U2211> \xB7 |0
+<U221A> \xC3 |0
+<U221E> \xB0 |0
+<U222B> \xBA |0
+<U2248> \xC5 |0
+<U2260> \xAD |0
+<U2264> \xB2 |0
+<U2265> \xB3 |0
+<U25C6> \xD7 |0
+<UE01E> \xF0 |0
+#
+END CHARMAP
+#
diff --git a/mcs/class/I18N/West/makefile.gnu b/mcs/class/I18N/West/makefile.gnu
new file mode 100755
index 00000000000..d4d99fc6f9c
--- /dev/null
+++ b/mcs/class/I18N/West/makefile.gnu
@@ -0,0 +1,13 @@
+topdir = ../../..
+
+LIBRARY = $(topdir)/class/lib/I18N.West.dll
+
+LIB_LIST = list.unix
+LIB_FLAGS = -r corlib -r mscorlib -r I18N
+
+SOURCES_INCLUDE=*.cs
+SOURCES_EXCLUDE=
+
+export MONO_PATH_PREFIX = $(topdir)/class/lib:
+
+include $(topdir)/class/library.make
diff --git a/mcs/class/I18N/makefile.gnu b/mcs/class/I18N/makefile.gnu
new file mode 100755
index 00000000000..a7876bc24cb
--- /dev/null
+++ b/mcs/class/I18N/makefile.gnu
@@ -0,0 +1,14 @@
+INSTALL = /usr/bin/install
+prefix = /usr
+
+DIRS = Common West MidEast CJK Other Rare
+
+default: all
+
+all clean test:
+ @for i in $(DIRS) ; do \
+ if [ -d "$$i" ] && [ -f "$$i/makefile.gnu" ] ; then \
+ (cd $$i && $(MAKE) -f makefile.gnu $@) || exit 1; \
+ fi \
+ done
+
diff --git a/mcs/class/I18N/mklist.sh b/mcs/class/I18N/mklist.sh
new file mode 100755
index 00000000000..a3b462bd283
--- /dev/null
+++ b/mcs/class/I18N/mklist.sh
@@ -0,0 +1,40 @@
+#! /bin/sh
+#
+# mklist.sh - Make the I18N handler list file "I18N-handlers.def".
+#
+# Copyright (C) 2002 Southern Storm Software, Pty Ltd.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Process the command-line options.
+ILFIND="$1"
+OUTFILE="$2"
+if test "x$ILFIND" = "x" ; then
+ echo "$0: missing ilfind argument" 1>&2
+ exit 1
+fi
+if test "x$OUTFILE" = "x" ; then
+ echo "$0: missing output file argument" 1>&2
+ exit 1
+fi
+shift
+shift
+
+# Search all region assemblies for interesting classes and
+# write them to the specified output file.
+exec "${ILFIND}" --public-only --sub-string I18N $* | \
+ grep 'class ' | \
+ sed -e '1,$s/^.*: class //g' - | \
+ sed -e '1,$s/^class //g' - >"${OUTFILE}"
diff --git a/mcs/class/I18N/tools/.cvsignore b/mcs/class/I18N/tools/.cvsignore
new file mode 100644
index 00000000000..aaa5d839385
--- /dev/null
+++ b/mcs/class/I18N/tools/.cvsignore
@@ -0,0 +1,2 @@
+ucm2cp
+uni2tab
diff --git a/mcs/class/I18N/tools/cvt.sh b/mcs/class/I18N/tools/cvt.sh
new file mode 100755
index 00000000000..caa71f3d79f
--- /dev/null
+++ b/mcs/class/I18N/tools/cvt.sh
@@ -0,0 +1,547 @@
+#!/bin/sh
+#
+# This script can be used to regenerate the CPnnnn.cs files
+# from the ".ucm" files. The list of unsupported code pages
+# is at the end of this file.
+#
+# Copyright (C) 2002 Southern Storm Software, Pty Ltd.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+# Make sure that we are in the correct directory to start.
+if test -d ../Rare ; then
+ cd ..
+fi
+
+#if test "x$1" = "x--include-rare" ; then
+ RARE=""
+#else
+# RARE="--rare"
+#fi
+
+# Compile the "ucm2cp" tool.
+if gcc -o tools/ucm2cp tools/ucm2cp.c ; then
+ :
+else
+ exit 1
+fi
+UCM2CP=tools/ucm2cp
+
+${UCM2CP} --region Rare --page 37 --wpage 1252 \
+ --name 'IBM EBCDIC (US-Canada)' \
+ --webname IBM037 --bodyname IBM037 \
+ --headername IBM037 --no-browser-display \
+ --no-browser-save --no-mailnews-display \
+ --no-mailnews-save Rare/ibm-37.ucm >Rare/CP37.cs
+
+${UCM2CP} --region West --page 437 --wpage 1252 \
+ --name 'OEM United States' \
+ --webname IBM437 --bodyname IBM437 \
+ --headername IBM437 --no-browser-display \
+ --no-browser-save --no-mailnews-display \
+ --no-mailnews-save West/ibm-437.ucm >West/CP437.cs
+
+${UCM2CP} --region Rare --page 500 --wpage 1252 \
+ --name 'IBM EBCDIC (International)' \
+ --webname IBM500 --bodyname IBM500 \
+ --headername IBM500 --no-browser-display \
+ --no-browser-save --no-mailnews-display \
+ --no-mailnews-save Rare/ibm-500.ucm >Rare/CP500.cs
+
+${UCM2CP} --region Rare --page 708 --wpage 1256 \
+ --name 'Arabic (ASMO 708)' \
+ --webname asmo-708 --bodyname iso-8859-6 \
+ --headername asmo-708 --no-browser-display \
+ --no-browser-save --no-mailnews-display \
+ --no-mailnews-save Rare/ibm-1089.ucm >Rare/CP708.cs
+
+${UCM2CP} --region West --page 850 --wpage 1252 \
+ --name 'Western European (DOS)' \
+ --webname ibm850 --bodyname ibm850 \
+ --headername ibm850 --no-browser-display \
+ --no-browser-save --no-mailnews-display \
+ --no-mailnews-save West/ibm-850.ucm >West/CP850.cs
+
+${UCM2CP} --region Rare --page 852 --wpage 1250 \
+ --name 'Central European (DOS)' \
+ --webname ibm852 --bodyname ibm852 \
+ --headername ibm852 --no-browser-display \
+ --no-browser-save --no-mailnews-display \
+ --no-mailnews-save Rare/ibm-852.ucm >Rare/CP852.cs
+
+${UCM2CP} --region Rare --page 855 --wpage 1251 \
+ --name 'Cyrillic (DOS)' \
+ --webname ibm855 --bodyname ibm855 \
+ --headername ibm855 --no-browser-display \
+ --no-browser-save --no-mailnews-display \
+ --no-mailnews-save Rare/ibm-855.ucm >Rare/CP855.cs
+
+${UCM2CP} --region Rare --page 857 --wpage 1254 \
+ --name 'Turkish (DOS)' \
+ --webname ibm857 --bodyname ibm857 \
+ --headername ibm857 --no-browser-display \
+ --no-browser-save --no-mailnews-display \
+ --no-mailnews-save Rare/ibm-857.ucm >Rare/CP857.cs
+
+${UCM2CP} --region Rare --page 858 --wpage 1252 \
+ --name 'Western European (DOS with Euro)' \
+ --webname IBM00858 --bodyname IBM00858 \
+ --headername IBM00858 --no-browser-display \
+ --no-browser-save --no-mailnews-display \
+ --no-mailnews-save Rare/ibm-858.ucm >Rare/CP858.cs
+
+${UCM2CP} --region West --page 860 --wpage 1252 \
+ --name 'Portuguese (DOS)' \
+ --webname ibm860 --bodyname ibm860 \
+ --headername ibm860 --no-browser-display \
+ --no-browser-save --no-mailnews-display \
+ --no-mailnews-save West/ibm-860.ucm >West/CP860.cs
+
+${UCM2CP} --region West --page 861 --wpage 1252 \
+ --name 'Icelandic (DOS)' \
+ --webname ibm861 --bodyname ibm861 \
+ --headername ibm861 --no-browser-display \
+ --no-browser-save --no-mailnews-display \
+ --no-mailnews-save West/ibm-861.ucm >West/CP861.cs
+
+${UCM2CP} --region Rare --page 862 --wpage 1255 \
+ --name 'Hebrew (DOS)' \
+ --webname ibm862 --bodyname ibm862 \
+ --headername ibm861 --no-browser-display \
+ --no-browser-save --no-mailnews-display \
+ --no-mailnews-save Rare/ibm-862.ucm >Rare/CP862.cs
+
+${UCM2CP} --region West --page 863 --wpage 1252 \
+ --name 'French Canadian (DOS)' \
+ --webname IBM863 --bodyname IBM863 \
+ --headername IBM863 --no-browser-display \
+ --no-browser-save --no-mailnews-display \
+ --no-mailnews-save West/ibm-863.ucm >West/CP863.cs
+
+${UCM2CP} --region Rare --page 864 --wpage 1256 \
+ --name 'Arabic (DOS)' \
+ --webname ibm864 --bodyname ibm864 \
+ --headername ibm864 --no-browser-display \
+ --no-browser-save --no-mailnews-display \
+ --no-mailnews-save Rare/ibm-864.ucm >Rare/CP864.cs
+
+${UCM2CP} --region West --page 865 --wpage 1252 \
+ --name 'Nordic (DOS)' \
+ --webname IBM865 --bodyname IBM863 \
+ --headername IBM865 --no-browser-display \
+ --no-browser-save --no-mailnews-display \
+ --no-mailnews-save West/ibm-865.ucm >West/CP865.cs
+
+${UCM2CP} --region Rare --page 866 --wpage 1251 \
+ --name 'Russian (DOS)' \
+ --webname ibm866 --bodyname ibm866 \
+ --headername ibm866 --no-browser-display \
+ --no-browser-save --no-mailnews-display \
+ --no-mailnews-save Rare/ibm-866.ucm >Rare/CP866.cs
+
+${UCM2CP} --region Rare --page 869 --wpage 1253 \
+ --name 'Greek (DOS)' \
+ --webname ibm869 --bodyname ibm869 \
+ --headername ibm869 --no-browser-display \
+ --no-browser-save --no-mailnews-display \
+ --no-mailnews-save Rare/ibm-869.ucm >Rare/CP869.cs
+
+${UCM2CP} --region Rare --page 870 --wpage 1250 \
+ --name 'IBM EBCDIC (Latin 2)' \
+ --webname ibm870 --bodyname ibm870 \
+ --headername ibm870 --no-browser-display \
+ --no-browser-save --no-mailnews-display \
+ --no-mailnews-save Rare/ibm-870.ucm >Rare/CP870.cs
+
+${UCM2CP} --region Other --page 874 --wpage 874 \
+ --name 'Thai (Windows)' \
+ --webname windows-874 --bodyname windows-874 \
+ --headername windows-874 Other/ibm-874.ucm >Other/CP874.cs
+
+${UCM2CP} --region Rare --page 875 --wpage 1253 \
+ --name 'IBM EBCDIC (Greek)' \
+ --webname ibm875 --bodyname ibm875 \
+ --headername ibm875 --no-browser-display \
+ --no-browser-save --no-mailnews-display \
+ --no-mailnews-save Rare/ibm-875.ucm >Rare/CP875.cs
+
+${UCM2CP} --region Rare --page 1026 --wpage 1254 \
+ --name 'IBM EBCDIC (Turkish)' \
+ --webname ibm1026 --bodyname ibm1026 \
+ --headername ibm1026 --no-browser-display \
+ --no-browser-save --no-mailnews-display \
+ --no-mailnews-save Rare/ibm-1026.ucm >Rare/CP1026.cs
+
+${UCM2CP} --region Rare --page 1047 --wpage 1252 \
+ --name 'IBM EBCDIC (Open Systems Latin 1)' \
+ --webname ibm1047 --bodyname ibm1047 \
+ --headername ibm1047 --no-browser-display \
+ --no-browser-save --no-mailnews-display \
+ --no-mailnews-save Rare/ibm-1047.ucm >Rare/CP1047.cs
+
+${UCM2CP} --region Rare --page 1140 --wpage 1252 \
+ --name 'IBM EBCDIC (US-Canada with Euro)' \
+ --webname IBM01140 --bodyname IBM01140 \
+ --headername IBM01140 --no-browser-display \
+ --no-browser-save --no-mailnews-display \
+ --no-mailnews-save Rare/ibm-1140.ucm >Rare/CP1140.cs
+
+${UCM2CP} --region Rare --page 1141 --wpage 1252 \
+ --name 'IBM EBCDIC (Germany with Euro)' \
+ --webname IBM01141 --bodyname IBM01141 \
+ --headername IBM01141 --no-browser-display \
+ --no-browser-save --no-mailnews-display \
+ --no-mailnews-save Rare/ibm-1141.ucm >Rare/CP1141.cs
+
+${UCM2CP} --region Rare --page 1142 --wpage 1252 \
+ --name 'IBM EBCDIC (Denmark/Norway with Euro)' \
+ --webname IBM01142 --bodyname IBM01142 \
+ --headername IBM01142 --no-browser-display \
+ --no-browser-save --no-mailnews-display \
+ --no-mailnews-save Rare/ibm-1142.ucm >Rare/CP1142.cs
+
+${UCM2CP} --region Rare --page 1143 --wpage 1252 \
+ --name 'IBM EBCDIC (Finland/Sweden with Euro)' \
+ --webname IBM01143 --bodyname IBM01143 \
+ --headername IBM01143 --no-browser-display \
+ --no-browser-save --no-mailnews-display \
+ --no-mailnews-save Rare/ibm-1143.ucm >Rare/CP1143.cs
+
+${UCM2CP} --region Rare --page 1144 --wpage 1252 \
+ --name 'IBM EBCDIC (Italy with Euro)' \
+ --webname ibm1144 --bodyname ibm1144 \
+ --headername ibm1144 --no-browser-display \
+ --no-browser-save --no-mailnews-display \
+ --no-mailnews-save Rare/ibm-1144.ucm >Rare/CP1144.cs
+
+${UCM2CP} --region Rare --page 1145 --wpage 1252 \
+ --name 'IBM EBCDIC (Latin America/Spain with Euro)' \
+ --webname ibm1145 --bodyname ibm1145 \
+ --headername ibm1145 --no-browser-display \
+ --no-browser-save --no-mailnews-display \
+ --no-mailnews-save Rare/ibm-1145.ucm >Rare/CP1145.cs
+
+${UCM2CP} --region Rare --page 1146 --wpage 1252 \
+ --name 'IBM EBCDIC (United Kingdom with Euro)' \
+ --webname ibm1146 --bodyname ibm1146 \
+ --headername ibm1146 --no-browser-display \
+ --no-browser-save --no-mailnews-display \
+ --no-mailnews-save Rare/ibm-1146.ucm >Rare/CP1146.cs
+
+${UCM2CP} --region Rare --page 1147 --wpage 1252 \
+ --name 'IBM EBCDIC (France with Euro)' \
+ --webname ibm1147 --bodyname ibm1147 \
+ --headername ibm1147 --no-browser-display \
+ --no-browser-save --no-mailnews-display \
+ --no-mailnews-save Rare/ibm-1147.ucm >Rare/CP1147.cs
+
+${UCM2CP} --region Rare --page 1148 --wpage 1252 \
+ --name 'IBM EBCDIC (International with Euro)' \
+ --webname ibm1148 --bodyname ibm1148 \
+ --headername ibm1148 --no-browser-display \
+ --no-browser-save --no-mailnews-display \
+ --no-mailnews-save Rare/ibm-1148.ucm >Rare/CP1148.cs
+
+${UCM2CP} --region Rare --page 1149 --wpage 1252 \
+ --name 'IBM EBCDIC (Icelandic with Euro)' \
+ --webname ibm1149 --bodyname ibm1149 \
+ --headername ibm1149 --no-browser-display \
+ --no-browser-save --no-mailnews-display \
+ --no-mailnews-save Rare/ibm-1149.ucm >Rare/CP1149.cs
+
+${UCM2CP} --region West --page 1250 --wpage 1250 \
+ --name 'Central European (Windows)' \
+ --webname windows-1250 --bodyname iso-8859-2 \
+ --headername windows-1250 West/ibm-5346.ucm >West/CP1250.cs
+
+${UCM2CP} --region Other --page 1251 --wpage 1251 \
+ --name 'Cyrillic (Windows)' \
+ --webname windows-1251 --bodyname koi8-r \
+ --headername windows-1251 Other/ibm-5347.ucm >Other/CP1251.cs
+
+${UCM2CP} --region West --page 1252 --wpage 1252 \
+ --name 'Western European (Windows)' \
+ --webname Windows-1252 --bodyname iso-8859-1 \
+ --headername Windows-1252 West/ibm-5348.ucm >West/CP1252.cs
+
+${UCM2CP} --region West --page 1253 --wpage 1253 \
+ --name 'Greek (Windows)' \
+ --webname windows-1253 --bodyname iso-8859-7 \
+ --headername windows-1253 West/ibm-5349.ucm >West/CP1253.cs
+
+${UCM2CP} --region MidEast --page 1254 --wpage 1254 \
+ --name 'Turkish (Windows)' \
+ --webname windows-1254 --bodyname iso-8859-9 \
+ --headername windows-1254 MidEast/ibm-5350.ucm >MidEast/CP1254.cs
+
+${UCM2CP} --region MidEast --page 1255 --wpage 1255 \
+ --name 'Hebrew (Windows)' \
+ --webname windows-1255 --bodyname windows-1255 \
+ --headername windows-1255 MidEast/ibm-5351.ucm >MidEast/CP1255.cs
+
+${UCM2CP} --region MidEast --page 1256 --wpage 1256 \
+ --name 'Arabic (Windows)' \
+ --webname windows-1256 --bodyname windows-1256 \
+ --headername windows-1256 MidEast/ibm-5352.ucm >MidEast/CP1256.cs
+
+${UCM2CP} --region Other --page 1257 --wpage 1257 \
+ --name 'Baltic (Windows)' \
+ --webname windows-1257 --bodyname iso-8859-4 \
+ --headername windows-1257 Other/ibm-5353.ucm >Other/CP1257.cs
+
+${UCM2CP} --region Other --page 1258 --wpage 1258 \
+ --name 'Vietnamese (Windows)' \
+ --webname windows-1258 --bodyname windows-1258 \
+ --headername windows-1258 Other/ibm-5354.ucm >Other/CP1258.cs
+
+${UCM2CP} --region West --page 10000 --wpage 1252 \
+ --name 'Western European (Mac)' \
+ --webname macintosh --bodyname macintosh \
+ --headername macintosh --no-browser-display \
+ --no-browser-save --no-mailnews-display \
+ --no-mailnews-save West/ibm-1275.ucm >West/CP10000.cs
+
+${UCM2CP} --region West --page 10079 --wpage 1252 \
+ --name 'Icelandic (Mac)' \
+ --webname x-mac-icelandic --bodyname x-mac-icelandic \
+ --headername x-mac-icelandic --no-browser-display \
+ --no-browser-save --no-mailnews-display \
+ --no-mailnews-save West/mac-is.ucm >West/CP10079.cs
+
+${UCM2CP} --region Rare --page 20273 --wpage 1252 \
+ --name 'IBM EBCDIC (Germany)' \
+ --webname IBM273 --bodyname IBM273 \
+ --headername IBM273 --no-browser-display \
+ --no-browser-save --no-mailnews-display \
+ --no-mailnews-save Rare/ibm-273.ucm >Rare/CP20273.cs
+
+${UCM2CP} --region Rare --page 20277 --wpage 1252 \
+ --name 'IBM EBCDIC (Denmark/Norway)' \
+ --webname IBM277 --bodyname IBM277 \
+ --headername IBM277 --no-browser-display \
+ --no-browser-save --no-mailnews-display \
+ --no-mailnews-save Rare/ibm-277.ucm >Rare/CP20277.cs
+
+${UCM2CP} --region Rare --page 20278 --wpage 1252 \
+ --name 'IBM EBCDIC (Finland/Sweden)' \
+ --webname IBM278 --bodyname IBM278 \
+ --headername IBM278 --no-browser-display \
+ --no-browser-save --no-mailnews-display \
+ --no-mailnews-save Rare/ibm-278.ucm >Rare/CP20278.cs
+
+${UCM2CP} --region Rare --page 20280 --wpage 1252 \
+ --name 'IBM EBCDIC (Italy)' \
+ --webname IBM280 --bodyname IBM280 \
+ --headername IBM280 --no-browser-display \
+ --no-browser-save --no-mailnews-display \
+ --no-mailnews-save Rare/ibm-280.ucm >Rare/CP20280.cs
+
+${UCM2CP} --region Rare --page 20284 --wpage 1252 \
+ --name 'IBM EBCDIC (Latin America/Spain)' \
+ --webname IBM284 --bodyname IBM284 \
+ --headername IBM284 --no-browser-display \
+ --no-browser-save --no-mailnews-display \
+ --no-mailnews-save Rare/ibm-284.ucm >Rare/CP20284.cs
+
+${UCM2CP} --region Rare --page 20285 --wpage 1252 \
+ --name 'IBM EBCDIC (United Kingdom)' \
+ --webname IBM285 --bodyname IBM285 \
+ --headername IBM285 --no-browser-display \
+ --no-browser-save --no-mailnews-display \
+ --no-mailnews-save Rare/ibm-285.ucm >Rare/CP20285.cs
+
+${UCM2CP} --region Rare --page 20290 --wpage 932 \
+ --name 'IBM EBCDIC (Japanese Katakana Extended)' \
+ --webname IBM290 --bodyname IBM290 \
+ --headername IBM290 --no-browser-display \
+ --no-browser-save --no-mailnews-display \
+ --no-mailnews-save Rare/ibm-290.ucm >Rare/CP20290.cs
+
+${UCM2CP} --region Rare --page 20297 --wpage 1252 \
+ --name 'IBM EBCDIC (France)' \
+ --webname IBM297 --bodyname IBM297 \
+ --headername IBM297 --no-browser-display \
+ --no-browser-save --no-mailnews-display \
+ --no-mailnews-save Rare/ibm-297.ucm >Rare/CP20297.cs
+
+${UCM2CP} --region Rare --page 20420 --wpage 1256 \
+ --name 'IBM EBCDIC (Arabic)' \
+ --webname IBM420 --bodyname IBM420 \
+ --headername IBM420 --no-browser-display \
+ --no-browser-save --no-mailnews-display \
+ --no-mailnews-save Rare/ibm-420.ucm >Rare/CP20420.cs
+
+${UCM2CP} --region Rare --page 20424 --wpage 1255 \
+ --name 'IBM EBCDIC (Hebrew)' \
+ --webname IBM424 --bodyname IBM424 \
+ --headername IBM424 --no-browser-display \
+ --no-browser-save --no-mailnews-display \
+ --no-mailnews-save Rare/ibm-424.ucm >Rare/CP20424.cs
+
+${UCM2CP} --region Other --page 20866 --wpage 1251 \
+ --name 'Cyrillic (KOI8-R)' \
+ --webname koi8-r --bodyname koi8-r \
+ --headername koi8-r Other/ibm-878.ucm >Other/CP20866.cs
+
+${UCM2CP} --region Rare --page 20871 --wpage 1252 \
+ --name 'IBM EBCDIC (Icelandic)' \
+ --webname IBM871 --bodyname IBM871 \
+ --headername IBM871 --no-browser-display \
+ --no-browser-save --no-mailnews-display \
+ --no-mailnews-save Rare/ibm-871.ucm >Rare/CP20871.cs
+
+${UCM2CP} --region Rare --page 21025 --wpage 1257 \
+ --name 'IBM EBCDIC (Cyrillic - Serbian, Bulgarian)' \
+ --webname IBM1025 --bodyname IBM1025 \
+ --headername IBM1025 --no-browser-display \
+ --no-browser-save --no-mailnews-display \
+ --no-mailnews-save Rare/ibm-1025.ucm >Rare/CP21025.cs
+
+${UCM2CP} --region Other --page 21866 --wpage 1251 \
+ --name 'Ukrainian (KOI8-U)' \
+ --webname koi8-u --bodyname koi8-u \
+ --headername koi8-u Other/koi8-u.ucm >Other/CP21866.cs
+
+${UCM2CP} --region West --page 28592 --wpage 1250 \
+ --name 'Central European (ISO)' \
+ --webname iso-8859-2 --bodyname iso-8859-2 \
+ --headername iso-8859-2 West/ibm-912.ucm >West/CP28592.cs
+
+${UCM2CP} --region West --page 28593 --wpage 28593 \
+ --name 'Latin 3 (ISO)' \
+ --webname iso-8859-3 --bodyname iso-8859-3 \
+ --headername iso-8859-3 West/ibm-913.ucm >West/CP28593.cs
+
+${UCM2CP} --region Other --page 28594 --wpage 1257 \
+ --name 'Baltic (ISO)' \
+ --webname iso-8859-4 --bodyname iso-8859-4 \
+ --headername iso-8859-4 Other/ibm-914.ucm >Other/CP28594.cs
+
+${UCM2CP} --region Other --page 28595 --wpage 1251 \
+ --name 'Cyrillic (ISO)' \
+ --webname iso-8859-5 --bodyname iso-8859-5 \
+ --headername iso-8859-5 Other/ibm-915.ucm >Other/CP28595.cs
+
+${UCM2CP} --region MidEast --page 28596 --wpage 1256 \
+ --name 'Arabic (ISO)' \
+ --webname iso-8859-6 --bodyname iso-8859-6 \
+ --headername iso-8859-6 MidEast/ibm-1089.ucm >MidEast/CP28596.cs
+
+${UCM2CP} --region West --page 28597 --wpage 1253 \
+ --name 'Greek (ISO)' \
+ --webname iso-8859-7 --bodyname iso-8859-7 \
+ --headername iso-8859-7 West/ibm-4909.ucm >West/CP28597.cs
+
+${UCM2CP} --region MidEast --page 28598 --wpage 1255 \
+ --name 'Hebrew (ISO)' \
+ --webname iso-8859-8 --bodyname iso-8859-8 \
+ --headername iso-8859-8 MidEast/ibm-916.ucm >MidEast/CP28598.cs
+
+${UCM2CP} --region MidEast --page 28599 --wpage 1254 \
+ --name 'Latin 5 (ISO)' \
+ --webname iso-8859-9 --bodyname iso-8859-9 \
+ --headername iso-8859-9 MidEast/ibm-920.ucm >MidEast/CP28599.cs
+
+${UCM2CP} --region West --page 28605 --wpage 1252 \
+ --name 'Latin 9 (ISO)' \
+ --webname iso-8859-15 --bodyname iso-8859-15 \
+ --headername iso-8859-15 --no-browser-display \
+ West/ibm-923.ucm >West/CP28605.cs
+
+${UCM2CP} --region MidEast --page 38598 --wpage 1255 \
+ --name 'Hebrew (ISO Alternative)' \
+ --webname windows-38598 --bodyname iso-8859-8 \
+ --headername windows-38598 MidEast/ibm-916.ucm >MidEast/CP38598.cs
+
+exit 0
+
+# Windows code pages that are handled internally by "Encoding":
+#
+# 1200 Unicode
+# 1201 Unicode (Big-Endian)
+# 20127 US-ASCII
+# 28591 Western European (ISO)
+# 65000 Unicode (UTF-7)
+# 65001 Unicode (UTF-8)
+#
+# Other Windows code pages that aren't done yet:
+#
+# 709 Arabic - ASMO 449+, BCON V4
+# 710 Arabic - Transparent Arabic
+# 720 Arabic - Transparent ASMO
+# 737 OEM - Greek (formerly 437G)
+# 775 OEM - Baltic
+# 936 Chinese Simplified (GB2312)
+# 949 Korean
+# 950 Chinese Traditional (Big5)
+# 1361 Korean (Johab)
+# 10001 MAC - Japanese
+# 10002 MAC - Traditional Chinese (Big5)
+# 10003 MAC - Korean
+# 10004 MAC - Arabic
+# 10005 MAC - Hebrew
+# 10006 MAC - Greek I
+# 10007 MAC - Cyrillic
+# 10008 MAC - Simplified Chinese (GB 2312)
+# 10010 MAC - Romania
+# 10017 MAC - Ukraine
+# 10021 MAC - Thai
+# 10029 MAC - Latin II
+# 10081 MAC - Turkish
+# 10082 MAC - Croatia
+# 12000 Unicode UCS-4 Little-Endian
+# 12001 Unicode UCS-4 Big-Endian
+# 20000 CNS - Taiwan
+# 20001 TCA - Taiwan
+# 20002 Eten - Taiwan
+# 20003 IBM5550 - Taiwan
+# 20004 TeleText - Taiwan
+# 20005 Wang - Taiwan
+# 20105 IA5 IRV International Alphabet No. 5 (7-bit)
+# 20106 IA5 German (7-bit)
+# 20107 IA5 Swedish (7-bit)
+# 20108 IA5 Norwegian (7-bit)
+# 20261 T.61
+# 20269 ISO 6937 Non-Spacing Accent
+# 20423 IBM EBCDIC - Greek
+# 20833 IBM EBCDIC - Korean Extended
+# 20838 IBM EBCDIC - Thai
+# 20880 IBM EBCDIC - Cyrillic (Russian)
+# 20905 IBM EBCDIC - Turkish
+# 20924 IBM EBCDIC - Latin-1/Open System (1047 + Euro symbol)
+# 20932 JIX X 0208-1990 & 0212-1990
+# 20936 Simplified Chinese (GB2312)
+# 21027 Extended Alpha Lowercase
+# 21866 Ukrainian (KOI8-U)
+# 29001 Europa 3
+# 50220 Japanese (JIS)
+# 50221 Japanese (JIS-Allow 1 byte Kana)
+# 50222 Japanese (JIS-Allow 1 byte Kana - SO/SI)
+# 50225 Korean (ISO)
+# 50227 ISO-2022 Simplified Chinese
+# 50229 ISO-2022 Traditional Chinese
+# 50930 Japanese (Katakana) Extended
+# 50931 US/Canada and Japanese
+# 50933 Korean Extended and Korean
+# 50935 Simplified Chinese Extended and Simplified Chinese
+# 50936 Simplified Chinese
+# 50937 US/Canada and Traditional Chinese
+# 50939 Japanese (Latin) Extended and Japanese
+# 51932 Japanese (EUC)
+# 51936 Chinese Simplified (EUC)
+# 51949 Korean (EUC)
+# 51950 Traditional Chinese (EUC)
+# 52936 Chinese Simplified (HZ)
+# 54936 GB 18030-2000 Simplified Chinese
diff --git a/mcs/class/I18N/tools/ucm2cp.c b/mcs/class/I18N/tools/ucm2cp.c
new file mode 100644
index 00000000000..fa43452b078
--- /dev/null
+++ b/mcs/class/I18N/tools/ucm2cp.c
@@ -0,0 +1,599 @@
+/*
+ * ucm2cp.c - Convert IBM ".ucm" files into code page handling classes.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/*
+
+Usage: ucm2cp [options] file
+
+ --region name I18N region name
+ --page num Code page number
+ --wpage num Windows code page number (optional)
+ --name str Human-readable encoding name
+ --webname str Web name of the encoding
+ --headername str Header name of the encoding (optional)
+ --bodyname str Body name of the encoding (optional)
+ --no-browser-display Set browser display value to false (optional)
+ --no-browser-save Set browser save value to false (optional)
+ --no-mailnews-display Set mail/news display value to false (optional)
+ --no-mailnews-save Set mail/news save value to false (optional)
+
+*/
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+/*
+ * Option values.
+ */
+static char *region = 0;
+static int codePage = 0;
+static int windowsCodePage = 0;
+static char *name = 0;
+static char *webName = 0;
+static char *headerName = 0;
+static char *bodyName = 0;
+static int isBrowserDisplay = 1;
+static int isBrowserSave = 1;
+static int isMailNewsDisplay = 1;
+static int isMailNewsSave = 1;
+static const char *filename = 0;
+
+/*
+ * Forward declarations.
+ */
+static void usage(char *progname);
+static void loadCharMaps(FILE *file);
+static void printHeader(void);
+static void printFooter(void);
+static void printByteToChar(void);
+static void printCharToByte(void);
+
+int main(int argc, char *argv[])
+{
+ char *progname = argv[0];
+ FILE *file;
+ int len;
+
+ /* Process the command-line options */
+ while(argc > 1 && argv[1][0] == '-')
+ {
+ if(!strcmp(argv[1], "--page") && argc > 2)
+ {
+ codePage = atoi(argv[2]);
+ ++argv;
+ --argc;
+ }
+ else if(!strcmp(argv[1], "--wpage") && argc > 2)
+ {
+ windowsCodePage = atoi(argv[2]);
+ ++argv;
+ --argc;
+ }
+ else if(!strcmp(argv[1], "--region") && argc > 2)
+ {
+ region = argv[2];
+ ++argv;
+ --argc;
+ }
+ else if(!strcmp(argv[1], "--name") && argc > 2)
+ {
+ name = argv[2];
+ ++argv;
+ --argc;
+ }
+ else if(!strcmp(argv[1], "--webname") && argc > 2)
+ {
+ webName = argv[2];
+ ++argv;
+ --argc;
+ }
+ else if(!strcmp(argv[1], "--headername") && argc > 2)
+ {
+ headerName = argv[2];
+ ++argv;
+ --argc;
+ }
+ else if(!strcmp(argv[1], "--bodyname") && argc > 2)
+ {
+ bodyName = argv[2];
+ ++argv;
+ --argc;
+ }
+ else if(!strcmp(argv[1], "--no-browser-display"))
+ {
+ isBrowserDisplay = 0;
+ }
+ else if(!strcmp(argv[1], "--no-browser-save"))
+ {
+ isBrowserSave = 0;
+ }
+ else if(!strcmp(argv[1], "--no-mailnews-display"))
+ {
+ isMailNewsDisplay = 0;
+ }
+ else if(!strcmp(argv[1], "--no-mailnews-save"))
+ {
+ isMailNewsSave = 0;
+ }
+ ++argv;
+ --argc;
+ }
+
+ /* Make sure that we have sufficient options */
+ if(!region || !codePage || !name || !webName || argc != 2)
+ {
+ usage(progname);
+ return 1;
+ }
+
+ /* Set defaults for unspecified options */
+ if(!headerName)
+ {
+ headerName = webName;
+ }
+ if(!bodyName)
+ {
+ bodyName = webName;
+ }
+ if(!windowsCodePage)
+ {
+ windowsCodePage = codePage;
+ }
+
+ /* Open the UCM file */
+ file = fopen(argv[1], "r");
+ if(!file)
+ {
+ perror(argv[1]);
+ return 1;
+ }
+ filename = argv[1];
+ len = strlen(filename);
+ while(len > 0 && filename[len - 1] != '/' && filename[len - 1] != '\\')
+ {
+ --len;
+ }
+ filename += len;
+
+ /* Load the character maps from the input file */
+ loadCharMaps(file);
+
+ /* Print the output header */
+ printHeader();
+
+ /* Print the byte->char conversion table */
+ printByteToChar();
+
+ /* Output the char->byte conversion methods */
+ printCharToByte();
+
+ /* Print the output footer */
+ printFooter();
+
+ /* Clean up and exit */
+ fclose(file);
+ return 0;
+}
+
+static void usage(char *progname)
+{
+ fprintf(stderr, "Usage: %s [options] file\n\n", progname);
+ fprintf(stderr, " --region name I18N region name\n");
+ fprintf(stderr, " --page num Code page number\n");
+ fprintf(stderr, " --wpage num Windows code page number (optional)\n");
+ fprintf(stderr, " --name str Human-readable encoding name\n");
+ fprintf(stderr, " --webname str Web name of the encoding\n");
+ fprintf(stderr, " --headername str Header name of the encoding (optional)\n");
+ fprintf(stderr, " --bodyname str Body name of the encoding (optional)\n");
+ fprintf(stderr, " --no-browser-display Set browser display value to false (optional)\n");
+ fprintf(stderr, " --no-browser-save Set browser save value to false (optional)\n");
+ fprintf(stderr, " --no-mailnews-display Set mail/news display value to false (optional)\n");
+ fprintf(stderr, " --no-mailnews-save Set mail/news save value to false (optional)\n");
+}
+
+/*
+ * Map bytes to characters. The level value is used to determine
+ * which char mapping is the most likely if there is more than one.
+ */
+static unsigned byteToChar[256];
+static int byteToCharLevel[256];
+
+/*
+ * Map characters to bytes.
+ */
+static int charToByte[65536];
+
+/*
+ * Parse a hexadecimal value. Returns the length
+ * of the value that was parsed.
+ */
+static int parseHex(const char *buf, unsigned long *value)
+{
+ int len = 0;
+ char ch;
+ *value = 0;
+ while((ch = buf[len]) != '\0')
+ {
+ if(ch >= '0' && ch <= '9')
+ {
+ *value = *value * 16 + (unsigned long)(ch - '0');
+ }
+ else if(ch >= 'A' && ch <= 'F')
+ {
+ *value = *value * 16 + (unsigned long)(ch - 'A' + 10);
+ }
+ else if(ch >= 'a' && ch <= 'f')
+ {
+ *value = *value * 16 + (unsigned long)(ch - 'a' + 10);
+ }
+ else
+ {
+ break;
+ }
+ ++len;
+ }
+ return len;
+}
+
+/*
+ * Load the character mapping information from a UCM file.
+ */
+static void loadCharMaps(FILE *file)
+{
+ unsigned long posn;
+ unsigned long byteValue;
+ int level;
+ char buffer[BUFSIZ];
+ const char *buf;
+
+ /* Initialize the mapping tables */
+ for(posn = 0; posn < 256; ++posn)
+ {
+ byteToChar[posn] = (unsigned)'?';
+ byteToCharLevel[posn] = 100;
+ }
+ for(posn = 0; posn < 65536; ++posn)
+ {
+ charToByte[posn] = -1;
+ }
+
+ /* Read the contents of the file */
+ while(fgets(buffer, BUFSIZ, file))
+ {
+ /* Lines of interest begin with "<U" */
+ if(buffer[0] != '<' || buffer[1] != 'U')
+ {
+ continue;
+ }
+
+ /* Parse the fields on the line */
+ buf = buffer + 2;
+ buf += parseHex(buf, &posn);
+ if(posn >= 65536)
+ {
+ continue;
+ }
+ while(*buf != '\0' && *buf != '\\')
+ {
+ ++buf;
+ }
+ if(*buf != '\\' || buf[1] != 'x')
+ {
+ continue;
+ }
+ buf += 2;
+ buf += parseHex(buf, &byteValue);
+ if(byteValue >= 256)
+ {
+ continue;
+ }
+ while(*buf != '\0' && *buf != '|')
+ {
+ ++buf;
+ }
+ if(*buf != '|')
+ {
+ continue;
+ }
+ level = (int)(buf[1] - '0');
+
+ /* Update the byte->char mapping table */
+ if(level < byteToCharLevel[byteValue])
+ {
+ byteToCharLevel[byteValue] = level;
+ byteToChar[byteValue] = (unsigned)posn;
+ }
+
+ /* Update the char->byte mapping table */
+ charToByte[posn] = (int)byteValue;
+ }
+}
+
+#define COPYRIGHT_MSG \
+" *\n" \
+" * Copyright (c) 2002 Southern Storm Software, Pty Ltd\n" \
+" *\n" \
+" * Permission is hereby granted, free of charge, to any person obtaining\n" \
+" * a copy of this software and associated documentation files (the \"Software\"),\n" \
+" * to deal in the Software without restriction, including without limitation\n" \
+" * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n" \
+" * and/or sell copies of the Software, and to permit persons to whom the\n" \
+" * Software is furnished to do so, subject to the following conditions:\n" \
+" *\n" \
+" * The above copyright notice and this permission notice shall be included\n" \
+" * in all copies or substantial portions of the Software.\n" \
+" *\n" \
+" * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n" \
+" * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n" \
+" * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\n" \
+" * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR\n" \
+" * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,\n" \
+" * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n" \
+" * OTHER DEALINGS IN THE SOFTWARE.\n" \
+" */\n\n"
+
+/*
+ * Print the header for the current code page definition.
+ */
+static void printHeader(void)
+{
+ printf("/*\n * CP%d.cs - %s code page.\n", codePage, name);
+ fputs(COPYRIGHT_MSG, stdout);
+ printf("// Generated from \"%s\".\n\n", filename);
+ printf("namespace I18N.%s\n{\n\n", region);
+ printf("using System;\n");
+ printf("using I18N.Common;\n\n");
+ printf("public class CP%d : ByteEncoding\n{\n", codePage);
+ printf("\tpublic CP%d()\n", codePage);
+ printf("\t\t: base(%d, ToChars, \"%s\",\n", codePage, name);
+ printf("\t\t \"%s\", \"%s\", \"%s\",\n",
+ bodyName, headerName, webName);
+ printf("\t\t %s, %s, %s, %s, %d)\n",
+ (isBrowserDisplay ? "true" : "false"),
+ (isBrowserSave ? "true" : "false"),
+ (isMailNewsDisplay ? "true" : "false"),
+ (isMailNewsSave ? "true" : "false"),
+ windowsCodePage);
+ printf("\t{}\n\n");
+}
+
+/*
+ * Print an encoding name, adjusted to look like a type name.
+ */
+static void printEncodingName(const char *name)
+{
+ while(*name != '\0')
+ {
+ if(*name >= 'A' && *name <= 'Z')
+ {
+ putc(*name - 'A' + 'a', stdout);
+ }
+ else if(*name == '-')
+ {
+ putc('_', stdout);
+ }
+ else
+ {
+ putc(*name, stdout);
+ }
+ ++name;
+ }
+}
+
+/*
+ * Print the footer for the current code page definition.
+ */
+static void printFooter(void)
+{
+ printf("}; // class CP%d\n\n", codePage);
+ printf("public class ENC");
+ printEncodingName(webName);
+ printf(" : CP%d\n{\n", codePage);
+ printf("\tpublic ENC");
+ printEncodingName(webName);
+ printf("() : base() {}\n\n");
+ printf("}; // class ENC");
+ printEncodingName(webName);
+ printf("\n\n}; // namespace I18N.%s\n", region);
+}
+
+/*
+ * Print the byte->char conversion table.
+ */
+static void printByteToChar(void)
+{
+ int posn;
+ printf("\tprivate static readonly char[] ToChars = {");
+ for(posn = 0; posn < 256; ++posn)
+ {
+ if((posn % 6) == 0)
+ {
+ printf("\n\t\t");
+ }
+ printf("'\\u%04X', ", byteToChar[posn]);
+ }
+ printf("\n\t};\n\n");
+}
+
+/*
+ * Print a "switch" statement that converts "ch" from
+ * a character value into a byte value.
+ */
+static void printConvertSwitch(void)
+{
+ unsigned long directLimit;
+ unsigned long posn;
+ unsigned long posn2;
+ unsigned long rangeSize;
+ int haveDirect;
+ int haveFullWidth;
+
+ /* Find the limit of direct byte mappings */
+ directLimit = 0;
+ while(directLimit < 256 && charToByte[directLimit] == (int)directLimit)
+ {
+ ++directLimit;
+ }
+
+ /* Determine if we have the full-width Latin1 mappings, which
+ we can optimise in the default case of the switch */
+ haveFullWidth = 1;
+ for(posn = 0xFF01; posn <= 0xFF5E; ++posn)
+ {
+ if((charToByte[posn] - 0x21) != (int)(posn - 0xFF01))
+ {
+ haveFullWidth = 0;
+ }
+ }
+
+ /* Print the switch header. The "if" is an optimisation
+ to ignore the common case of direct ASCII mappings */
+ printf("\t\t\tif(ch >= %lu) switch(ch)\n", directLimit);
+ printf("\t\t\t{\n");
+
+ /* Handle all direct byte mappings above the direct limit */
+ haveDirect = 0;
+ for(posn = directLimit; posn < 256; ++posn)
+ {
+ if(charToByte[posn] == (int)posn)
+ {
+ haveDirect = 1;
+ printf("\t\t\t\tcase 0x%04lX:\n", posn);
+ }
+ }
+ if(haveDirect)
+ {
+ printf("\t\t\t\t\tbreak;\n");
+ }
+
+ /* Handle the indirect mappings */
+ for(posn = 0; posn < 65536; ++posn)
+ {
+ if(haveFullWidth && posn >= 0xFF01 && posn <= 0xFF5E)
+ {
+ /* Handle full-width Latin1 conversions later */
+ continue;
+ }
+ if(charToByte[posn] != (int)posn &&
+ charToByte[posn] != -1)
+ {
+ /* See if we have a run of 4 or more characters that
+ can be mapped algorithmically to some other range */
+ rangeSize = 1;
+ for(posn2 = posn + 1; posn2 < 65536; ++posn2)
+ {
+ if(charToByte[posn2] == (int)posn2 ||
+ charToByte[posn2] == -1)
+ {
+ break;
+ }
+ if((charToByte[posn2] - charToByte[posn]) !=
+ (int)(posn2 - posn))
+ {
+ break;
+ }
+ ++rangeSize;
+ }
+ if(rangeSize >= 4)
+ {
+ /* Output a range mapping for the characters */
+ for(posn2 = posn; posn2 < (posn + rangeSize); ++posn2)
+ {
+ printf("\t\t\t\tcase 0x%04lX:\n", posn2);
+ }
+ posn += rangeSize - 1;
+ if(((long)posn) >= (long)(charToByte[posn]))
+ {
+ printf("\t\t\t\t\tch -= 0x%04lX;\n",
+ (long)(posn - charToByte[posn]));
+ }
+ else
+ {
+ printf("\t\t\t\t\tch += 0x%04lX;\n",
+ (long)(charToByte[posn] - posn));
+ }
+ printf("\t\t\t\t\tbreak;\n");
+ }
+ else
+ {
+ /* Use a simple non-algorithmic mapping */
+ printf("\t\t\t\tcase 0x%04lX: ch = 0x%02X; break;\n",
+ posn, (unsigned)(charToByte[posn]));
+ }
+ }
+ }
+
+ /* Print the switch footer */
+ if(!haveFullWidth)
+ {
+ printf("\t\t\t\tdefault: ch = 0x3F; break;\n");
+ }
+ else
+ {
+ printf("\t\t\t\tdefault:\n");
+ printf("\t\t\t\t{\n");
+ printf("\t\t\t\t\tif(ch >= 0xFF01 && ch <= 0xFF5E)\n");
+ printf("\t\t\t\t\t\tch -= 0xFEE0;\n");
+ printf("\t\t\t\t\telse\n");
+ printf("\t\t\t\t\t\tch = 0x3F;\n");
+ printf("\t\t\t\t}\n");
+ printf("\t\t\t\tbreak;\n");
+ }
+ printf("\t\t\t}\n");
+}
+
+/*
+ * Print the char->byte conversion methods.
+ */
+static void printCharToByte(void)
+{
+ /* Print the conversion method for character buffers */
+ printf("\tprotected override void ToBytes(char[] chars, int charIndex, int charCount,\n");
+ printf("\t byte[] bytes, int byteIndex)\n");
+ printf("\t{\n");
+ printf("\t\tint ch;\n");
+ printf("\t\twhile(charCount > 0)\n");
+ printf("\t\t{\n");
+ printf("\t\t\tch = (int)(chars[charIndex++]);\n");
+ printConvertSwitch();
+ printf("\t\t\tbytes[byteIndex++] = (byte)ch;\n");
+ printf("\t\t\t--charCount;\n");
+ printf("\t\t}\n");
+ printf("\t}\n\n");
+
+ /* Print the conversion method for string buffers */
+ printf("\tprotected override void ToBytes(String s, int charIndex, int charCount,\n");
+ printf("\t byte[] bytes, int byteIndex)\n");
+ printf("\t{\n");
+ printf("\t\tint ch;\n");
+ printf("\t\twhile(charCount > 0)\n");
+ printf("\t\t{\n");
+ printf("\t\t\tch = (int)(s[charIndex++]);\n");
+ printConvertSwitch();
+ printf("\t\t\tbytes[byteIndex++] = (byte)ch;\n");
+ printf("\t\t\t--charCount;\n");
+ printf("\t\t}\n");
+ printf("\t}\n\n");
+}
diff --git a/mcs/class/I18N/tools/uni2tab.c b/mcs/class/I18N/tools/uni2tab.c
new file mode 100644
index 00000000000..5a6e1134b19
--- /dev/null
+++ b/mcs/class/I18N/tools/uni2tab.c
@@ -0,0 +1,411 @@
+/*
+ * uni2tab.c - Convert Unicode data files into CJK conversion tables.
+ *
+ * Copyright (c) 2002 Southern Storm Software, Pty Ltd
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/*
+
+Usage: uni2tab
+
+Required files from ftp.unicode.org: Unihan.txt, shiftjis.txt
+
+*/
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+/*
+ * Forward declarations.
+ */
+static void convertLine(char *buf);
+static void convertSJISLine(char *buf);
+static int createTables(void);
+
+int main(int argc, char *argv[])
+{
+ FILE *file;
+ char buffer[BUFSIZ];
+ int error;
+
+ /* Load the relevant contents from the Unihan.txt file */
+ if((file = fopen("Unihan.txt", "r")) == NULL)
+ {
+ perror("Unihan.txt");
+ return 1;
+ }
+ while(fgets(buffer, sizeof(buffer), file))
+ {
+ if(buffer[0] == 'U' && buffer[1] == '+')
+ {
+ convertLine(buffer + 2);
+ }
+ }
+ fclose(file);
+
+ /* Load the relevant contents from the shiftjis.txt file,
+ to get mappings for non-CJK characters */
+ if((file = fopen("shiftjis.txt", "r")) == NULL)
+ {
+ perror("shiftjis.txt");
+ return 1;
+ }
+ while(fgets(buffer, sizeof(buffer), file))
+ {
+ if(buffer[0] == '0' && buffer[1] == 'x')
+ {
+ convertSJISLine(buffer + 2);
+ }
+ }
+ fclose(file);
+
+ /* Create the output tables */
+ error = createTables();
+
+ /* Clean up and exit */
+ return error;
+}
+
+/*
+ * Parse a hexadecimal value. Returns the length
+ * of the value that was parsed.
+ */
+static int parseHex(const char *buf, unsigned long *value)
+{
+ int len = 0;
+ char ch;
+ *value = 0;
+ while((ch = buf[len]) != '\0')
+ {
+ if(ch >= '0' && ch <= '9')
+ {
+ *value = *value * 16 + (unsigned long)(ch - '0');
+ }
+ else if(ch >= 'A' && ch <= 'F')
+ {
+ *value = *value * 16 + (unsigned long)(ch - 'A' + 10);
+ }
+ else if(ch >= 'a' && ch <= 'f')
+ {
+ *value = *value * 16 + (unsigned long)(ch - 'a' + 10);
+ }
+ else
+ {
+ break;
+ }
+ ++len;
+ }
+ return len;
+}
+
+/*
+ * Parse "ku" and "ten" values from a buffer.
+ */
+static void parseKuTen(const char *buf, int *ku, int *ten)
+{
+ int value = 0;
+ while(*buf >= '0' && *buf <= '9')
+ {
+ value = value * 10 + (*buf++ - '0');
+ }
+ *ku = value / 100;
+ *ten = value % 100;
+}
+
+/*
+ * Tables.
+ */
+static unsigned short jisx0208ToUnicode[94*94];
+static unsigned short jisx0212ToUnicode[94*94];
+static unsigned short unicodeToJis[65536];
+static unsigned short greekToJis[0x451 - 0x0391 + 1];
+static unsigned short extraToJis[0xFFEF - 0xFF01 + 1];
+static unsigned long lowJis = 0xFFFF;
+static unsigned long highJis = 0x0000;
+
+/*
+ * Process a JIS X 0208 sequence by ku and ten values.
+ */
+static void processJis0208(unsigned long code, int ku, int ten)
+{
+ int offset = (ku - 1) * 94 + (ten - 1);
+ jisx0208ToUnicode[offset] = (unsigned short)code;
+ unicodeToJis[code] = (unsigned short)(offset + 0x0100);
+ if(code < lowJis)
+ {
+ lowJis = code;
+ }
+ if(code > highJis)
+ {
+ highJis = code;
+ }
+}
+
+/*
+ * Process a JIS X 0212 sequence by ku and ten values.
+ */
+static void processJis0212(unsigned long code, int ku, int ten)
+{
+ int offset = (ku - 1) * 94 + (ten - 1);
+ jisx0212ToUnicode[offset] = (unsigned short)code;
+ unicodeToJis[code] = (unsigned short)(offset + 0x8000);
+ if(code < lowJis)
+ {
+ lowJis = code;
+ }
+ if(code > highJis)
+ {
+ highJis = code;
+ }
+}
+
+/*
+ * Convert an input line into table entries.
+ */
+static void convertLine(char *buf)
+{
+ unsigned long code;
+ const char *key;
+ int ku, ten;
+
+ /* Parse the hex name of the Unicode character */
+ buf += parseHex(buf, &code);
+ if(code >= 0x10000)
+ {
+ /* Cannot handle surrogate-based CJK characters yet */
+ return;
+ }
+
+ /* Skip to the key name */
+ while(*buf != '\0' && *buf != 'k')
+ {
+ ++buf;
+ }
+ if(*buf == '\0')
+ {
+ return;
+ }
+
+ /* Extract the key name from the buffer */
+ key = buf;
+ while(*buf != '\0' && *buf != ' ' && *buf != '\t')
+ {
+ ++buf;
+ }
+ if(*buf == '\0')
+ {
+ return;
+ }
+ *buf++ = '\0';
+
+ /* Skip to the value field */
+ while(*buf != '\0' && (*buf == ' ' || *buf == '\t' ||
+ *buf == '\r' || *buf == '\n'))
+ {
+ ++buf;
+ }
+ if(*buf == '\0')
+ {
+ return;
+ }
+
+ /* Determine what to do based on the key */
+ if(!strcmp(key, "kJis0"))
+ {
+ parseKuTen(buf, &ku, &ten);
+ processJis0208(code, ku, ten);
+ }
+ else if(!strcmp(key, "kJis1"))
+ {
+ parseKuTen(buf, &ku, &ten);
+ processJis0212(code, ku, ten);
+ }
+}
+
+/*
+ * Convert a line from the "shiftjis.txt" file.
+ */
+static void convertSJISLine(char *buf)
+{
+ unsigned long sjis;
+ unsigned long code;
+ int ch1, ch2;
+ int offset;
+
+ /* Read the Shift-JIS code point */
+ buf += parseHex(buf, &sjis);
+ if(sjis < 0x8000)
+ {
+ return;
+ }
+ while(*buf != '\0' && (*buf == ' ' || *buf == '\t' ||
+ *buf == '\r' || *buf == '\n'))
+ {
+ ++buf;
+ }
+ if(*buf != '0' || buf[1] != 'x')
+ {
+ return;
+ }
+ buf += 2;
+
+ /* Read the Unicode code point */
+ buf += parseHex(buf, &code);
+
+ /* Convert the Shift-JIS code point into a JIS kuten value */
+ ch1 = (int)(sjis >> 8);
+ ch2 = (int)(sjis & 0xFF);
+ if(ch1 >= 0x81 && ch1 <= 0x9F)
+ {
+ offset = (ch1 - 0x81) * 0xBC;
+ }
+ else if(ch1 >= 0xE0 && ch1 <= 0xEF)
+ {
+ offset = (ch1 - 0xE0 + (0xA0 - 0x81)) * 0xBC;
+ }
+ else
+ {
+ /* Invalid first byte */
+ return;
+ }
+ if(ch2 >= 0x40 && ch2 <= 0x7E)
+ {
+ offset += (ch2 - 0x40);
+ }
+ else if(ch2 >= 0x80 && ch2 <= 0xFC)
+ {
+ offset += (ch2 - 0x80 + 0x3F);
+ }
+ else
+ {
+ /* Invalid second byte */
+ return;
+ }
+
+ /* Process the kuten value */
+ if(code >= 0x0391 && code <= 0x0451)
+ {
+ /* Greek subset */
+ greekToJis[code - 0x0391] = (unsigned short)(offset + 0x0100);
+ }
+ else if(code >= 0xFF01 && code <= 0xFFEF)
+ {
+ /* Extra subset */
+ extraToJis[code - 0xFF01] = (unsigned short)(offset + 0x0100);
+ }
+ else if(code >= 0x0100 && code < 0x4E00)
+ {
+ /* Non-CJK characters within JIS */
+ processJis0208(code, (offset / 94) + 1, (offset % 94) + 1);
+ }
+}
+
+/*
+ * Write a section header.
+ */
+static void writeSection(FILE *file, unsigned long num, unsigned long size)
+{
+ putc((int)(num & 0xFF), file);
+ putc((int)((num >> 8) & 0xFF), file);
+ putc((int)((num >> 16) & 0xFF), file);
+ putc((int)((num >> 24) & 0xFF), file);
+ putc((int)(size & 0xFF), file);
+ putc((int)((size >> 8) & 0xFF), file);
+ putc((int)((size >> 16) & 0xFF), file);
+ putc((int)((size >> 24) & 0xFF), file);
+}
+
+/*
+ * Write an array of 16-bit data values.
+ */
+static void writeData(FILE *file, unsigned short *data, unsigned long size)
+{
+ while(size > 0)
+ {
+ putc((int)(*data & 0xFF), file);
+ putc((int)((*data >> 8) & 0xFF), file);
+ ++data;
+ --size;
+ }
+}
+
+/*
+ * Section numbers for the JIS table.
+ */
+#define JISX0208_To_Unicode 1
+#define JISX0212_To_Unicode 2
+#define CJK_To_JIS 3
+#define Greek_To_JIS 4
+#define Extra_To_JIS 5
+
+/*
+ * Write the JIS table file.
+ */
+static void writeJis(FILE *file)
+{
+ unsigned long size;
+
+ /* Write the JIS X 0208 to Unicode conversion table */
+ writeSection(file, JISX0208_To_Unicode, 94 * 94 * 2);
+ writeData(file, jisx0208ToUnicode, 94 * 94);
+
+ /* Write the JIS X 0212 to Unicode conversion table */
+ writeSection(file, JISX0212_To_Unicode, 94 * 94 * 2);
+ writeData(file, jisx0212ToUnicode, 94 * 94);
+
+ /* Write the Unicode to JIS conversion table */
+ size = highJis - lowJis + 1;
+ writeSection(file, CJK_To_JIS, size * 2);
+ writeData(file, unicodeToJis + lowJis, size);
+ printf("JIS: U+%04lX to U+%04lX\n", lowJis, highJis);
+
+ /* Write the Greek to JIS conversion table */
+ writeSection(file, Greek_To_JIS, sizeof(greekToJis));
+ writeData(file, greekToJis, sizeof(greekToJis) / 2);
+
+ /* Write the Extra to JIS conversion table */
+ writeSection(file, Extra_To_JIS, sizeof(extraToJis));
+ writeData(file, extraToJis, sizeof(extraToJis) / 2);
+}
+
+/*
+ * Create all of the tables that we need based on the Unihan.txt file.
+ */
+static int createTables(void)
+{
+ FILE *file;
+
+ /* Create the JIS conversion table */
+ if((file = fopen("jis.table", "wb")) == NULL)
+ {
+ if((file = fopen("jis.table", "wb")) == NULL)
+ {
+ perror("jis.table");
+ return 1;
+ }
+ }
+ writeJis(file);
+ fclose(file);
+
+ /* Done */
+ return 0;
+}