Add support for the Kazakh RK1048 encoding.
diff --git a/ChangeLog b/ChangeLog
index b219968..0fa83c8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2007-05-25  Bruno Haible  <bruno@clisp.org>
+
+	* tools/Makefile (ALL): Add rk1048.h.
+	(rk1048.h): New rule.
+	* lib/encodings.def: Add RK1048.
+	* lib/rk1048.h: New file.
+	* lib/converters.h: Include it.
+	* README, man/iconv_open.3: Add RK1048.
+	* NOTES: Mention RK1048.
+	* tests/RK1048.TXT: New file.
+	* tests/Makefile.in (check): Also test RK1048.
+	Suggested by Timur Birsh <team9@host.kz>.
+
 2007-04-24  Bruno Haible  <bruno@clisp.org>
 
 	* man/iconv_open.3: Tweak explanation of TRANSLIT.
diff --git a/NEWS b/NEWS
index 808e5fe..e3c55bb 100644
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,5 @@
 New in 1.12:
+* Added RK1048 converter.
 * On AIX, an libiconv no longer causes setlocale() to fail.
 * Upgraded EUC-KR, JOHAB to include the Korean postal code sign.
 
diff --git a/NOTES b/NOTES
index d2382ba..02022af 100644
--- a/NOTES
+++ b/NOTES
@@ -164,6 +164,8 @@
      * PT154
        We implement this because it is the locale encoding in glibc's Kazakh
        locale.
+     * RK1048
+       We implement this because it's a standard in Kazakhstan.
      * CP{1250,1251,1252,1253,1254,1255,1256,1257}
        We implement these because they are the predominant Windows encodings
        in Europe.
diff --git a/README b/README
index d29dd4a..11b4530 100644
--- a/README
+++ b/README
@@ -28,7 +28,7 @@
     Tajik
         KOI8-T
     Kazakh
-        PT154
+        PT154, RK1048
     Thai
         ISO-8859-11, TIS-620, CP874, MacThai
     Laotian
diff --git a/lib/converters.h b/lib/converters.h
index 896a5bc..7bc032b 100644
--- a/lib/converters.h
+++ b/lib/converters.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 1999-2002, 2004-2006 Free Software Foundation, Inc.
+ * Copyright (C) 1999-2002, 2004-2007 Free Software Foundation, Inc.
  * This file is part of the GNU LIBICONV Library.
  *
  * The GNU LIBICONV Library is free software; you can redistribute it
@@ -182,6 +182,7 @@
 #include "georgian_ps.h"
 #include "koi8_t.h"
 #include "pt154.h"
+#include "rk1048.h"
 #include "mulelao.h"
 #include "cp1133.h"
 #include "tis620.h"
diff --git a/lib/encodings.def b/lib/encodings.def
index 55fbe37..7a5cdbb 100644
--- a/lib/encodings.def
+++ b/lib/encodings.def
@@ -1,4 +1,4 @@
-/* Copyright (C) 1999-2006 Free Software Foundation, Inc.
+/* Copyright (C) 1999-2007 Free Software Foundation, Inc.
    This file is part of the GNU LIBICONV Library.
 
    The GNU LIBICONV Library is free software; you can redistribute it
@@ -599,6 +599,14 @@
             pt154,
             { pt154_mbtowc, NULL },       { pt154_wctomb, NULL })
 
+DEFENCODING(( "RK1048",                 /* IANA, glibc */
+              "STRK1048-2002",          /* IANA */
+              "KZ-1048",                /* IANA */
+              "csKZ1048",               /* IANA */
+            ),
+            rk1048,
+            { rk1048_mbtowc, NULL },      { rk1048_wctomb, NULL })
+
 DEFENCODING(( "MULELAO-1",
             ),
             mulelao,
diff --git a/lib/rk1048.h b/lib/rk1048.h
new file mode 100644
index 0000000..0e1fde8
--- /dev/null
+++ b/lib/rk1048.h
@@ -0,0 +1,145 @@
+/*
+ * Copyright (C) 1999-2007 Free Software Foundation, Inc.
+ * This file is part of the GNU LIBICONV Library.
+ *
+ * The GNU LIBICONV Library is free software; you can redistribute it
+ * and/or modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * The GNU LIBICONV Library is distributed in the hope that it will be
+ * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with the GNU LIBICONV Library; see the file COPYING.LIB.
+ * If not, write to the Free Software Foundation, Inc., 51 Franklin Street,
+ * Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/*
+ * RK1048
+ */
+
+static const unsigned short rk1048_2uni[128] = {
+  /* 0x80 */
+  0x0402, 0x0403, 0x201a, 0x0453, 0x201e, 0x2026, 0x2020, 0x2021,
+  0x20ac, 0x2030, 0x0409, 0x2039, 0x040a, 0x049a, 0x04ba, 0x040f,
+  /* 0x90 */
+  0x0452, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014,
+  0xfffd, 0x2122, 0x0459, 0x203a, 0x045a, 0x049b, 0x04bb, 0x045f,
+  /* 0xa0 */
+  0x00a0, 0x04b0, 0x04b1, 0x04d8, 0x00a4, 0x04e8, 0x00a6, 0x00a7,
+  0x0401, 0x00a9, 0x0492, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x04ae,
+  /* 0xb0 */
+  0x00b0, 0x00b1, 0x0406, 0x0456, 0x04e9, 0x00b5, 0x00b6, 0x00b7,
+  0x0451, 0x2116, 0x0493, 0x00bb, 0x04d9, 0x04a2, 0x04a3, 0x04af,
+  /* 0xc0 */
+  0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
+  0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f,
+  /* 0xd0 */
+  0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
+  0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f,
+  /* 0xe0 */
+  0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
+  0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f,
+  /* 0xf0 */
+  0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
+  0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f,
+};
+
+static int
+rk1048_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)
+{
+  unsigned char c = *s;
+  if (c < 0x80) {
+    *pwc = (ucs4_t) c;
+    return 1;
+  }
+  else {
+    unsigned short wc = rk1048_2uni[c-0x80];
+    if (wc != 0xfffd) {
+      *pwc = (ucs4_t) wc;
+      return 1;
+    }
+  }
+  return RET_ILSEQ;
+}
+
+static const unsigned char rk1048_page00[32] = {
+  0xa0, 0x00, 0x00, 0x00, 0xa4, 0x00, 0xa6, 0xa7, /* 0xa0-0xa7 */
+  0x00, 0xa9, 0x00, 0xab, 0xac, 0xad, 0xae, 0x00, /* 0xa8-0xaf */
+  0xb0, 0xb1, 0x00, 0x00, 0x00, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */
+  0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */
+};
+static const unsigned char rk1048_page04[240] = {
+  0x00, 0xa8, 0x80, 0x81, 0x00, 0x00, 0xb2, 0x00, /* 0x00-0x07 */
+  0x00, 0x8a, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x8f, /* 0x08-0x0f */
+  0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x10-0x17 */
+  0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x18-0x1f */
+  0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0x20-0x27 */
+  0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0x28-0x2f */
+  0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x30-0x37 */
+  0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x38-0x3f */
+  0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x40-0x47 */
+  0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0x48-0x4f */
+  0x00, 0xb8, 0x90, 0x83, 0x00, 0x00, 0xb3, 0x00, /* 0x50-0x57 */
+  0x00, 0x9a, 0x9c, 0x00, 0x00, 0x00, 0x00, 0x9f, /* 0x58-0x5f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */
+  0x00, 0x00, 0xaa, 0xba, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */
+  0x00, 0x00, 0x8d, 0x9d, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */
+  0x00, 0x00, 0xbd, 0xbe, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaf, 0xbf, /* 0xa8-0xaf */
+  0xa1, 0xa2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */
+  0x00, 0x00, 0x8e, 0x9e, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */
+  0xa3, 0xbc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */
+  0xa5, 0xb4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */
+};
+static const unsigned char rk1048_page20[48] = {
+  0x00, 0x00, 0x00, 0x96, 0x97, 0x00, 0x00, 0x00, /* 0x10-0x17 */
+  0x91, 0x92, 0x82, 0x00, 0x93, 0x94, 0x84, 0x00, /* 0x18-0x1f */
+  0x86, 0x87, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00, /* 0x20-0x27 */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */
+  0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */
+  0x00, 0x8b, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */
+};
+static const unsigned char rk1048_page21[24] = {
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb9, 0x00, /* 0x10-0x17 */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */
+  0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */
+};
+
+static int
+rk1048_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)
+{
+  unsigned char c = 0;
+  if (wc < 0x0080) {
+    *r = wc;
+    return 1;
+  }
+  else if (wc >= 0x00a0 && wc < 0x00c0)
+    c = rk1048_page00[wc-0x00a0];
+  else if (wc >= 0x0400 && wc < 0x04f0)
+    c = rk1048_page04[wc-0x0400];
+  else if (wc >= 0x2010 && wc < 0x2040)
+    c = rk1048_page20[wc-0x2010];
+  else if (wc == 0x20ac)
+    c = 0x88;
+  else if (wc >= 0x2110 && wc < 0x2128)
+    c = rk1048_page21[wc-0x2110];
+  if (c != 0) {
+    *r = c;
+    return 1;
+  }
+  return RET_ILUNI;
+}
diff --git a/man/iconv_open.3 b/man/iconv_open.3
index 8c0f570..1165a88 100644
--- a/man/iconv_open.3
+++ b/man/iconv_open.3
@@ -9,7 +9,7 @@
 .\"   GNU glibc-2 source code and manual
 .\"   OpenGroup's Single Unix specification http://www.UNIX-systems.org/online.html
 .\"
-.TH ICONV_OPEN 3  "April 24, 2007" "GNU" "Linux Programmer's Manual"
+.TH ICONV_OPEN 3  "May 25, 2007" "GNU" "Linux Programmer's Manual"
 .SH NAME
 iconv_open \- allocate descriptor for character set conversion
 .SH SYNOPSIS
@@ -76,7 +76,7 @@
 Kazakh
 .nf
 .fi
-PT154
+PT154, RK1048
 .TP
 Thai
 .nf
diff --git a/tests/Makefile.in b/tests/Makefile.in
index e721c94..60c6749 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -98,6 +98,7 @@
 	$(srcdir)/check-stateless $(srcdir) Georgian-PS
 	$(srcdir)/check-stateless $(srcdir) KOI8-T
 	$(srcdir)/check-stateless $(srcdir) PT154
+	$(srcdir)/check-stateless $(srcdir) RK1048
 	$(srcdir)/check-stateless $(srcdir) MuleLao-1
 	$(srcdir)/check-stateless $(srcdir) CP1133
 	$(srcdir)/check-stateless $(srcdir) TIS-620
diff --git a/tests/RK1048.TXT b/tests/RK1048.TXT
new file mode 100644
index 0000000..06f185a
--- /dev/null
+++ b/tests/RK1048.TXT
@@ -0,0 +1,255 @@
+0x00	0x0000
+0x01	0x0001
+0x02	0x0002
+0x03	0x0003
+0x04	0x0004
+0x05	0x0005
+0x06	0x0006
+0x07	0x0007
+0x08	0x0008
+0x09	0x0009
+0x0A	0x000A
+0x0B	0x000B
+0x0C	0x000C
+0x0D	0x000D
+0x0E	0x000E
+0x0F	0x000F
+0x10	0x0010
+0x11	0x0011
+0x12	0x0012
+0x13	0x0013
+0x14	0x0014
+0x15	0x0015
+0x16	0x0016
+0x17	0x0017
+0x18	0x0018
+0x19	0x0019
+0x1A	0x001A
+0x1B	0x001B
+0x1C	0x001C
+0x1D	0x001D
+0x1E	0x001E
+0x1F	0x001F
+0x20	0x0020
+0x21	0x0021
+0x22	0x0022
+0x23	0x0023
+0x24	0x0024
+0x25	0x0025
+0x26	0x0026
+0x27	0x0027
+0x28	0x0028
+0x29	0x0029
+0x2A	0x002A
+0x2B	0x002B
+0x2C	0x002C
+0x2D	0x002D
+0x2E	0x002E
+0x2F	0x002F
+0x30	0x0030
+0x31	0x0031
+0x32	0x0032
+0x33	0x0033
+0x34	0x0034
+0x35	0x0035
+0x36	0x0036
+0x37	0x0037
+0x38	0x0038
+0x39	0x0039
+0x3A	0x003A
+0x3B	0x003B
+0x3C	0x003C
+0x3D	0x003D
+0x3E	0x003E
+0x3F	0x003F
+0x40	0x0040
+0x41	0x0041
+0x42	0x0042
+0x43	0x0043
+0x44	0x0044
+0x45	0x0045
+0x46	0x0046
+0x47	0x0047
+0x48	0x0048
+0x49	0x0049
+0x4A	0x004A
+0x4B	0x004B
+0x4C	0x004C
+0x4D	0x004D
+0x4E	0x004E
+0x4F	0x004F
+0x50	0x0050
+0x51	0x0051
+0x52	0x0052
+0x53	0x0053
+0x54	0x0054
+0x55	0x0055
+0x56	0x0056
+0x57	0x0057
+0x58	0x0058
+0x59	0x0059
+0x5A	0x005A
+0x5B	0x005B
+0x5C	0x005C
+0x5D	0x005D
+0x5E	0x005E
+0x5F	0x005F
+0x60	0x0060
+0x61	0x0061
+0x62	0x0062
+0x63	0x0063
+0x64	0x0064
+0x65	0x0065
+0x66	0x0066
+0x67	0x0067
+0x68	0x0068
+0x69	0x0069
+0x6A	0x006A
+0x6B	0x006B
+0x6C	0x006C
+0x6D	0x006D
+0x6E	0x006E
+0x6F	0x006F
+0x70	0x0070
+0x71	0x0071
+0x72	0x0072
+0x73	0x0073
+0x74	0x0074
+0x75	0x0075
+0x76	0x0076
+0x77	0x0077
+0x78	0x0078
+0x79	0x0079
+0x7A	0x007A
+0x7B	0x007B
+0x7C	0x007C
+0x7D	0x007D
+0x7E	0x007E
+0x7F	0x007F
+0x80	0x0402
+0x81	0x0403
+0x82	0x201A
+0x83	0x0453
+0x84	0x201E
+0x85	0x2026
+0x86	0x2020
+0x87	0x2021
+0x88	0x20AC
+0x89	0x2030
+0x8A	0x0409
+0x8B	0x2039
+0x8C	0x040A
+0x8D	0x049A
+0x8E	0x04BA
+0x8F	0x040F
+0x90	0x0452
+0x91	0x2018
+0x92	0x2019
+0x93	0x201C
+0x94	0x201D
+0x95	0x2022
+0x96	0x2013
+0x97	0x2014
+0x99	0x2122
+0x9A	0x0459
+0x9B	0x203A
+0x9C	0x045A
+0x9D	0x049B
+0x9E	0x04BB
+0x9F	0x045F
+0xA0	0x00A0
+0xA1	0x04B0
+0xA2	0x04B1
+0xA3	0x04D8
+0xA4	0x00A4
+0xA5	0x04E8
+0xA6	0x00A6
+0xA7	0x00A7
+0xA8	0x0401
+0xA9	0x00A9
+0xAA	0x0492
+0xAB	0x00AB
+0xAC	0x00AC
+0xAD	0x00AD
+0xAE	0x00AE
+0xAF	0x04AE
+0xB0	0x00B0
+0xB1	0x00B1
+0xB2	0x0406
+0xB3	0x0456
+0xB4	0x04E9
+0xB5	0x00B5
+0xB6	0x00B6
+0xB7	0x00B7
+0xB8	0x0451
+0xB9	0x2116
+0xBA	0x0493
+0xBB	0x00BB
+0xBC	0x04D9
+0xBD	0x04A2
+0xBE	0x04A3
+0xBF	0x04AF
+0xC0	0x0410
+0xC1	0x0411
+0xC2	0x0412
+0xC3	0x0413
+0xC4	0x0414
+0xC5	0x0415
+0xC6	0x0416
+0xC7	0x0417
+0xC8	0x0418
+0xC9	0x0419
+0xCA	0x041A
+0xCB	0x041B
+0xCC	0x041C
+0xCD	0x041D
+0xCE	0x041E
+0xCF	0x041F
+0xD0	0x0420
+0xD1	0x0421
+0xD2	0x0422
+0xD3	0x0423
+0xD4	0x0424
+0xD5	0x0425
+0xD6	0x0426
+0xD7	0x0427
+0xD8	0x0428
+0xD9	0x0429
+0xDA	0x042A
+0xDB	0x042B
+0xDC	0x042C
+0xDD	0x042D
+0xDE	0x042E
+0xDF	0x042F
+0xE0	0x0430
+0xE1	0x0431
+0xE2	0x0432
+0xE3	0x0433
+0xE4	0x0434
+0xE5	0x0435
+0xE6	0x0436
+0xE7	0x0437
+0xE8	0x0438
+0xE9	0x0439
+0xEA	0x043A
+0xEB	0x043B
+0xEC	0x043C
+0xED	0x043D
+0xEE	0x043E
+0xEF	0x043F
+0xF0	0x0440
+0xF1	0x0441
+0xF2	0x0442
+0xF3	0x0443
+0xF4	0x0444
+0xF5	0x0445
+0xF6	0x0446
+0xF7	0x0447
+0xF8	0x0448
+0xF9	0x0449
+0xFA	0x044A
+0xFB	0x044B
+0xFC	0x044C
+0xFD	0x044D
+0xFE	0x044E
+0xFF	0x044F
diff --git a/tools/Makefile b/tools/Makefile
index 27159a6..b0bdfad 100644
--- a/tools/Makefile
+++ b/tools/Makefile
@@ -54,6 +54,7 @@
  georgian_ps.h \
  koi8_t.h \
  pt154.h \
+ rk1048.h \
  mulelao.h \
  cp1133.h \
  tis620.h \
@@ -273,6 +274,9 @@
 pt154.h : $(TABLESDIR)/IANA/PTCP154.TXT
 	./8bit_tab_to_h PT154 pt154 < $<
 
+rk1048.h : $(TABLESDIR)/IANA/KZ-1048.TXT
+	(echo '#' ; cat $<) | ./8bit_tab_to_h RK1048 rk1048
+
 mulelao.h : $(TABLESDIR)/csets-new/MULELAO1.TXT 8bit_tab_to_h
 	./8bit_tab_to_h MULELAO-1 mulelao < $<