summaryrefslogtreecommitdiff
path: root/firmware/unicode.c
diff options
context:
space:
mode:
authorBjörn Stenberg <bjorn@haxx.se>2002-08-11 09:22:40 +0000
committerBjörn Stenberg <bjorn@haxx.se>2002-08-11 09:22:40 +0000
commitdd7d69515391322e37215fad385ff2c59f80a68b (patch)
tree6ad8c1696c585164e8671cc29b2cb8fe33f64db0 /firmware/unicode.c
parent71f71ef8370c90b818318cf0d04749bb8e15a82c (diff)
Forgot to add the new files
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@1668 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/unicode.c')
-rw-r--r--firmware/unicode.c101
1 files changed, 101 insertions, 0 deletions
diff --git a/firmware/unicode.c b/firmware/unicode.c
new file mode 100644
index 0000000000..150dd5171e
--- /dev/null
+++ b/firmware/unicode.c
@@ -0,0 +1,101 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2002 by Alex Gitelman
+ *
+ * All files in this archive are subject to the GNU General Public License.
+ * See the file COPYING in the source tree root for full license agreement.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+#include "unicode.h"
+#include "string.h"
+
+#define MAX_TYPE 3
+
+unsigned char *conversion_table[255];
+unsigned char *reverse_conversion_table[255];
+
+static unsigned char page_04[] = {
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
+ 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF,
+ 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF,
+ 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
+ 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
+};
+
+void install_unicode_tables(void)
+{
+ install_conversion_table(0x04, page_04);
+}
+
+void unicode_init(void)
+{
+ memset(conversion_table, 0, sizeof(conversion_table));
+ memset(reverse_conversion_table, 0, sizeof(reverse_conversion_table));
+ install_unicode_tables();
+}
+
+/**
+Convertion table defines how chars in ing given page map to ascii
+*/
+void install_conversion_table(unsigned char page, unsigned char* conv_table)
+{
+ if (conv_table!=0)
+ conversion_table[page] = conv_table;
+ else
+ conversion_table[page] = 0;
+}
+
+void install_reverse_conversion_table(unsigned char page,
+ unsigned char* rev_conv_table)
+{
+ if (rev_conv_table!=0)
+ reverse_conversion_table[page] = rev_conv_table;
+ else
+ reverse_conversion_table[page] = 0;
+}
+
+
+unsigned char from_unicode(const unsigned char *uni_char)
+{
+ /*
+ Here we should get proper code page conversions.
+ For now hack for Cyrrilic->Unicode
+ */
+ unsigned char *table = conversion_table[uni_char[0]];
+ if (table!=0)
+ return table[uni_char[1]];
+ /* If page is not present -> no conversion */
+ return uni_char[1];
+
+}
+
+void to_unicode(unsigned char c, unsigned char page, unsigned char *uni_char)
+{
+ unsigned char *table = reverse_conversion_table[page];
+ if (table!=0)
+ uni_char[1] = table[c];
+ else
+ uni_char[1] = c;
+ uni_char[0] = page;
+}