forked from len0rd/rockbox
Forgot to add the new files
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@1668 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
71f71ef837
commit
dd7d695153
14 changed files with 31994 additions and 0 deletions
101
firmware/unicode.c
Normal file
101
firmware/unicode.c
Normal file
|
@ -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;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue