Below is the list of changes that have just been committed into a local
5.1 repository of bar. When bar does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html
ChangeSet
1.2012 05/12/31 09:01:26 bar@stripped +42 -0
WL#1324 table name to file name encoding
- Encoding itself, implemented as a charset
"filename". Originally planned to use '.'
as an escape character, but now changed to '@'
for two reasons: "ls" does not return
file names starting with '.' considering them
as a kind of hidden files; some platforms
do not allow several dots in a file name.
- replacing many calls of my_snprintf() and
strnxmov() to the new build_table_filename().
- Adding MY_APPEND_EXT mysys flag, to append
an extention rather that replace it.
- Replacing all numeric constants in fn_format
flag arguments to their mysys definitions, e.g.
MY_UNPACK_FILENAME,
- Predictability in several function/methods:
when a table name can appear with or withot .frm
extension. Some functions/methods were changed
so accept names strictly with .frm, other - strictly
without .frm extensions. Several DBUG_ASSERTs were
added to check whether an extension is passed.
Many files:
table name to file name encoding
mysql_priv.h:
Prototypes for new table name encoding tools.
ctype-utf8.c:
Implementing "filename" charset for
table name to file name encoding.
row0mysql.c:
Fixing table name prefix.
mf_format.c:
Adding MY_APPEND_EXT processing.
Many files:
Fixing tests.
my_sys.h:
Adding new flag to append rather than replace an extension.
m_ctype.h:
Adding "filename" charset definition.
storage/myisammrg/myrg_open.c
1.32 05/12/31 08:58:47 bar@stripped +2 -1
table name to file name encoding
storage/myisammrg/myrg_create.c
1.13 05/12/31 08:58:19 bar@stripped +2 -1
table name to file name encoding
sql/mysql_priv.h
1.361 05/12/31 08:57:36 bar@stripped +18 -0
Prototypes for new table name encoding tools.
strings/ctype-utf8.c
1.98 05/12/31 08:56:53 bar@stripped +1287 -0
Implementing "filename" charset for
table name to file name encoding.
storage/myisam/mi_rename.c
1.10 05/12/31 08:55:57 bar@stripped +4 -4
table name to file name encoding
storage/myisam/mi_open.c
1.99 05/12/31 08:55:55 bar@stripped +5 -2
table name to file name encoding
storage/myisam/mi_delete_table.c
1.11 05/12/31 08:55:53 bar@stripped +2 -2
table name to file name encoding
storage/myisam/mi_create.c
1.56 05/12/31 08:55:49 bar@stripped +27 -10
table name to file name encoding
storage/innobase/row/row0mysql.c
1.118 05/12/31 08:55:25 bar@stripped +2 -1
Fixing table name prefix.
,
sql/unireg.cc
1.72 05/12/31 08:54:50 bar@stripped +10 -8
table name to file name encoding
sql/table.cc
1.197 05/12/31 08:54:48 bar@stripped +40 -10
table name to file name encoding
sql/strfunc.cc
1.10 05/12/31 08:54:46 bar@stripped +76 -0
table name to file name encoding
sql/sql_view.cc
1.83 05/12/31 08:54:44 bar@stripped +13 -12
table name to file name encoding
sql/sql_trigger.cc
1.41 05/12/31 08:54:42 bar@stripped +25 -36
table name to file name encoding
sql/sql_table.cc
1.289 05/12/31 08:54:40 bar@stripped +96 -65
table name to file name encoding
sql/sql_show.cc
1.293 05/12/31 08:54:38 bar@stripped +26 -13
table name to file name encoding
sql/sql_rename.cc
1.34 05/12/31 08:54:36 bar@stripped +4 -7
table name to file name encoding
sql/sql_delete.cc
1.166 05/12/31 08:54:34 bar@stripped +5 -4
table name to file name encoding
sql/sql_db.cc
1.123 05/12/31 08:54:32 bar@stripped +14 -11
table name to file name encoding
sql/sql_base.cc
1.292 05/12/31 08:54:30 bar@stripped +2 -3
table name to file name encoding
sql/sql_acl.cc
1.169 05/12/31 08:54:28 bar@stripped +4 -3
table name to file name encoding
sql/parse_file.cc
1.19 05/12/31 08:54:25 bar@stripped +14 -2
table name to file name encoding
sql/mysqld.cc
1.510 05/12/31 08:54:03 bar@stripped +2 -2
table name to file name encoding
sql/init.cc
1.17 05/12/31 08:53:59 bar@stripped +1 -0
table name to file name encoding
sql/handler.cc
1.201 05/12/31 08:53:56 bar@stripped +1 -1
table name to file name encoding.
sql/ha_partition.cc
1.18 05/12/31 08:53:54 bar@stripped +4 -3
table name to file name encoding
sql/ha_ndbcluster.cc
1.228 05/12/31 08:53:52 bar@stripped +2 -1
table name to file name encoding
sql/ha_myisammrg.cc
1.76 05/12/31 08:53:50 bar@stripped +8 -5
table name to file name encoding
sql/ha_myisam.cc
1.166 05/12/31 08:53:48 bar@stripped +5 -5
table name to file name encoding
sql/ha_innodb.cc
1.247 05/12/31 08:53:45 bar@stripped +1 -1
table name to file name encoding
sql/ha_berkeley.cc
1.166 05/12/31 08:53:40 bar@stripped +16 -9
table name to file name encoding
sql/discover.cc
1.4 05/12/31 08:53:07 bar@stripped +4 -2
table name to file name encoding
mysys/mf_format.c
1.22 05/12/31 08:52:11 bar@stripped +2 -1
Adding MY_APPEND_EXT processing.
mysql-test/r/show_check.result
1.87 05/12/31 08:51:24 bar@stripped +36 -2
mysql-test/r/mysqldump.result
1.88 05/12/31 08:51:20 bar@stripped +1 -1
Fixing tests.
mysql-test/r/create.result
1.111 05/12/31 08:51:16 bar@stripped +8 -3
Fixing tests.
mysql-test/r/alter_table.result
1.58 05/12/31 08:51:12 bar@stripped +4 -4
Fixing tests.
mysql-test/t/show_check.test
1.60 05/12/31 08:49:53 bar@stripped +22 -30
Fixing tests.
mysql-test/t/create.test
1.73 05/12/31 08:49:49 bar@stripped +4 -3
Fixing tests.
mysql-test/t/alter_table.test
1.45 05/12/31 08:49:41 bar@stripped +2 -2
Fixing tests.
include/my_sys.h
1.183 05/12/31 08:48:11 bar@stripped +2 -0
Adding new flag to append rather than replace an extension.
include/m_ctype.h
1.116 05/12/31 08:47:39 bar@stripped +1 -0
Adding "filename" charset definition.
# This is a BitKeeper patch. What follows are the unified diffs for the
# set of deltas contained in the patch. The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User: bar
# Host: bar.intranet.mysql.r18.ru
# Root: /usr/home/bar/mysql-5.1-new.fscs3
--- 1.115/include/m_ctype.h 2005-11-05 15:20:31 +04:00
+++ 1.116/include/m_ctype.h 2005-12-31 08:47:39 +04:00
@@ -269,6 +269,7 @@
extern CHARSET_INFO my_charset_utf8_general_ci;
extern CHARSET_INFO my_charset_utf8_bin;
extern CHARSET_INFO my_charset_cp1250_czech_ci;
+extern CHARSET_INFO my_charset_filename;
/* declarations for simple charsets */
extern int my_strnxfrm_simple(CHARSET_INFO *, uchar *, uint, const uchar *,
--- 1.182/include/my_sys.h 2005-12-20 02:23:28 +04:00
+++ 1.183/include/my_sys.h 2005-12-31 08:48:11 +04:00
@@ -98,6 +98,8 @@
#define MY_RETURN_REAL_PATH 32 /* return full path for file */
#define MY_SAFE_PATH 64 /* Return NULL if too long path */
#define MY_RELATIVE_PATH 128 /* name is relative to 'dir' */
+#define MY_APPEND_EXT 256 /* add 'ext' as additional extension*/
+
/* My seek flags */
#define MY_SEEK_SET 0
--- 1.55/storage/myisam/mi_create.c 2005-12-28 16:05:20 +04:00
+++ 1.56/storage/myisam/mi_create.c 2005-12-31 08:55:49 +04:00
@@ -547,8 +547,13 @@
if (ci->index_file_name)
{
- fn_format(filename, ci->index_file_name,"",MI_NAME_IEXT,4);
- fn_format(linkname,name, "",MI_NAME_IEXT,4);
+ char *iext= strrchr(ci->index_file_name, '.');
+ int have_iext= iext && !strcmp(iext, MI_NAME_IEXT);
+
+ fn_format(filename, ci->index_file_name, "", MI_NAME_IEXT,
+ MY_UNPACK_FILENAME| (have_iext ? MY_REPLACE_EXT :MY_APPEND_EXT));
+ fn_format(linkname, name, "", MI_NAME_IEXT,
+ MY_UNPACK_FILENAME|MY_APPEND_EXT);
linkname_ptr=linkname;
/*
Don't create the table if the link or file exists to ensure that one
@@ -558,8 +563,10 @@
}
else
{
- fn_format(filename,name,"",MI_NAME_IEXT,(4+ (flags & HA_DONT_TOUCH_DATA) ?
- 32 : 0));
+ fn_format(filename, name, "", MI_NAME_IEXT,
+ (MY_UNPACK_FILENAME |
+ (flags & HA_DONT_TOUCH_DATA) ? MY_RETURN_REAL_PATH : 0) |
+ MY_APPEND_EXT);
linkname_ptr=0;
/* Replace the current file */
create_flag=MY_DELETE_OLD;
@@ -590,7 +597,8 @@
#ifdef USE_RAID
if (share.base.raid_type)
{
- (void) fn_format(filename,name,"",MI_NAME_DEXT,2+4);
+ (void) fn_format(filename, name, "", MI_NAME_DEXT,
+ MY_UNPACK_FILENAME | MY_APPEND_EXT);
if ((dfile=my_raid_create(filename, 0, create_mode,
share.base.raid_type,
share.base.raid_chunks,
@@ -603,14 +611,21 @@
{
if (ci->data_file_name)
{
- fn_format(filename, ci->data_file_name,"",MI_NAME_DEXT,4);
- fn_format(linkname, name, "",MI_NAME_DEXT,4);
+ char *dext= strrchr(ci->data_file_name, '.');
+ int have_dext= dext && !strcmp(dext, MI_NAME_DEXT);
+
+ fn_format(filename, ci->data_file_name, "", MI_NAME_DEXT,
+ MY_UNPACK_FILENAME |
+ (have_dext ? MY_REPLACE_EXT : MY_APPEND_EXT));
+ fn_format(linkname, name, "",MI_NAME_DEXT,
+ MY_UNPACK_FILENAME | MY_APPEND_EXT);
linkname_ptr=linkname;
create_flag=0;
}
else
{
- fn_format(filename,name,"",MI_NAME_DEXT,4);
+ fn_format(filename,name,"", MI_NAME_DEXT,
+ MY_UNPACK_FILENAME | MY_APPEND_EXT);
linkname_ptr=0;
create_flag=MY_DELETE_OLD;
}
@@ -759,13 +774,15 @@
case 2:
if (! (flags & HA_DONT_TOUCH_DATA))
- my_delete_with_symlink(fn_format(filename,name,"",MI_NAME_DEXT,2+4),
+ my_delete_with_symlink(fn_format(filename,name,"",MI_NAME_DEXT,
+ MY_UNPACK_FILENAME | MY_APPEND_EXT),
MYF(0));
/* fall through */
case 1:
VOID(my_close(file,MYF(0)));
if (! (flags & HA_DONT_TOUCH_DATA))
- my_delete_with_symlink(fn_format(filename,name,"",MI_NAME_IEXT,2+4),
+ my_delete_with_symlink(fn_format(filename,name,"",MI_NAME_IEXT,
+ MY_UNPACK_FILENAME | MY_APPEND_EXT),
MYF(0));
}
my_free((char*) rec_per_key_part, MYF(0));
--- 1.10/storage/myisam/mi_delete_table.c 2005-04-08 03:54:34 +05:00
+++ 1.11/storage/myisam/mi_delete_table.c 2005-12-31 08:55:53 +04:00
@@ -46,10 +46,10 @@
#endif
#endif /* USE_RAID */
- fn_format(from,name,"",MI_NAME_IEXT,4);
+ fn_format(from,name,"",MI_NAME_IEXT,MY_UNPACK_FILENAME|MY_APPEND_EXT);
if (my_delete_with_symlink(from, MYF(MY_WME)))
DBUG_RETURN(my_errno);
- fn_format(from,name,"",MI_NAME_DEXT,4);
+ fn_format(from,name,"",MI_NAME_DEXT,MY_UNPACK_FILENAME|MY_APPEND_EXT);
#ifdef USE_RAID
if (raid_type)
DBUG_RETURN(my_raid_delete(from, raid_chunks, MYF(MY_WME)) ? my_errno : 0);
--- 1.98/storage/myisam/mi_open.c 2005-12-28 16:05:20 +04:00
+++ 1.99/storage/myisam/mi_open.c 2005-12-31 08:55:55 +04:00
@@ -95,7 +95,8 @@
head_length=sizeof(share_buff.state.header);
bzero((byte*) &info,sizeof(info));
- my_realpath(name_buff, fn_format(org_name,name,"",MI_NAME_IEXT,4),MYF(0));
+ my_realpath(name_buff, fn_format(org_name,name,"",MI_NAME_IEXT,
+ MY_UNPACK_FILENAME|MY_APPEND_EXT),MYF(0));
pthread_mutex_lock(&THR_LOCK_myisam);
if (!(old_info=test_if_reopen(name_buff)))
{
@@ -159,7 +160,9 @@
if (!strcmp(name_buff, org_name) ||
my_readlink(index_name, org_name, MYF(0)) == -1)
(void) strmov(index_name, org_name);
- (void) fn_format(data_name,org_name,"",MI_NAME_DEXT,2+4+16);
+ *strrchr(org_name, '.')= '\0';
+ (void) fn_format(data_name,org_name,"",MI_NAME_DEXT,
+ MY_APPEND_EXT|MY_UNPACK_FILENAME|MY_RESOLVE_SYMLINKS);
info_length=mi_uint2korr(share->state.header.header_length);
base_pos=mi_uint2korr(share->state.header.base_pos);
--- 1.9/storage/myisam/mi_rename.c 2005-04-08 03:54:34 +05:00
+++ 1.10/storage/myisam/mi_rename.c 2005-12-31 08:55:57 +04:00
@@ -46,12 +46,12 @@
#endif
#endif /* USE_RAID */
- fn_format(from,old_name,"",MI_NAME_IEXT,4);
- fn_format(to,new_name,"",MI_NAME_IEXT,4);
+ fn_format(from,old_name,"",MI_NAME_IEXT,MY_UNPACK_FILENAME|MY_APPEND_EXT);
+ fn_format(to,new_name,"",MI_NAME_IEXT,MY_UNPACK_FILENAME|MY_APPEND_EXT);
if (my_rename_with_symlink(from, to, MYF(MY_WME)))
DBUG_RETURN(my_errno);
- fn_format(from,old_name,"",MI_NAME_DEXT,4);
- fn_format(to,new_name,"",MI_NAME_DEXT,4);
+ fn_format(from,old_name,"",MI_NAME_DEXT,MY_UNPACK_FILENAME|MY_APPEND_EXT);
+ fn_format(to,new_name,"",MI_NAME_DEXT,MY_UNPACK_FILENAME|MY_APPEND_EXT);
#ifdef USE_RAID
if (raid_type)
DBUG_RETURN(my_raid_rename(from, to, raid_chunks, MYF(MY_WME)) ? my_errno :
--- 1.12/storage/myisammrg/myrg_create.c 2005-04-27 07:07:09 +05:00
+++ 1.13/storage/myisammrg/myrg_create.c 2005-12-31 08:58:19 +04:00
@@ -33,7 +33,8 @@
DBUG_ENTER("myrg_create");
errpos=0;
- if ((file = my_create(fn_format(buff,name,"",MYRG_NAME_EXT,4),0,
+ if ((file = my_create(fn_format(buff,name,"",MYRG_NAME_EXT,
+ MY_UNPACK_FILENAME|MY_APPEND_EXT),0,
O_RDWR | O_EXCL | O_NOFOLLOW,MYF(MY_WME))) < 0)
goto err;
errpos=1;
--- 1.31/storage/myisammrg/myrg_open.c 2005-06-02 03:50:21 +05:00
+++ 1.32/storage/myisammrg/myrg_open.c 2005-12-31 08:58:47 +04:00
@@ -46,7 +46,8 @@
LINT_INIT(key_parts);
bzero((char*) &file,sizeof(file));
- if ((fd=my_open(fn_format(name_buff,name,"",MYRG_NAME_EXT,4),
+ if ((fd=my_open(fn_format(name_buff,name,"",MYRG_NAME_EXT,
+ MY_UNPACK_FILENAME|MY_APPEND_EXT),
O_RDONLY | O_SHARE,MYF(0))) < 0)
goto err;
errpos=1;
--- 1.21/mysys/mf_format.c 2005-10-06 19:54:24 +05:00
+++ 1.22/mysys/mf_format.c 2005-12-31 08:52:11 +04:00
@@ -54,7 +54,8 @@
if (flag & MY_UNPACK_FILENAME)
(void) unpack_dirname(dev,dev); /* Replace ~/.. with dir */
- if ((pos= (char*) strchr(name,FN_EXTCHAR)) != NullS)
+ if (!(flag & MY_APPEND_EXT) &&
+ (pos= (char*) strchr(name,FN_EXTCHAR)) != NullS)
{
if ((flag & MY_REPLACE_EXT) == 0) /* If we should keep old ext */
{
--- 1.165/sql/ha_berkeley.cc 2005-12-21 22:24:56 +04:00
+++ 1.166/sql/ha_berkeley.cc 2005-12-31 08:53:40 +04:00
@@ -699,7 +699,7 @@
if ((error= db_env->txn_begin(db_env, NULL, (DB_TXN**) &transaction, 0)) ||
(error= (file->open(file, transaction,
fn_format(name_buff, name, "", ha_berkeley_ext,
- 2 | 4),
+ MY_UNPACK_FILENAME|MY_APPEND_EXT),
"main", DB_BTREE, open_mode, 0))) ||
(error= transaction->commit(transaction, 0)))
{
@@ -2093,7 +2093,8 @@
int error;
DBUG_ENTER("ha_berkeley::create");
- fn_format(name_buff,name,"", ha_berkeley_ext,2 | 4);
+ fn_format(name_buff,name,"", ha_berkeley_ext,
+ MY_UNPACK_FILENAME|MY_APPEND_EXT);
/* Create the main table that will hold the real rows */
if ((error= create_sub_table(name_buff,"main",DB_BTREE,0)))
@@ -2142,8 +2143,9 @@
if ((error=db_create(&file, db_env, 0)))
my_errno=error; /* purecov: inspected */
else
- error=file->remove(file,fn_format(name_buff,name,"",ha_berkeley_ext,2 | 4),
- NULL,0);
+ error=file->remove(file,fn_format(name_buff,name,"",ha_berkeley_ext,
+ MY_UNPACK_FILENAME|MY_APPEND_EXT),
+ NULL,0);
file=0; // Safety
DBUG_RETURN(error);
}
@@ -2161,9 +2163,11 @@
{
/* On should not do a file->close() after rename returns */
error= file->rename(file,
- fn_format(from_buff, from, "", ha_berkeley_ext, 2 | 4),
+ fn_format(from_buff, from, "",
+ ha_berkeley_ext,
+ MY_UNPACK_FILENAME|MY_APPEND_EXT),
NULL, fn_format(to_buff, to, "", ha_berkeley_ext,
- 2 | 4), 0);
+ MY_UNPACK_FILENAME|MY_APPEND_EXT), 0);
}
return error;
}
@@ -2413,7 +2417,8 @@
(hidden_primary_key ? berkeley_cmp_hidden_key :
berkeley_cmp_packed_key));
tmp_file->app_private= (void*) (table->key_info+table->primary_key);
- fn_format(name_buff,share->table_name.str,"", ha_berkeley_ext, 2 | 4);
+ fn_format(name_buff,share->table_name.str,"", ha_berkeley_ext,
+ MY_UNPACK_FILENAME|MY_APPEND_EXT);
if ((error=tmp_file->verify(tmp_file, name_buff, NullS, (FILE*) 0,
hidden_primary_key ? 0 : DB_NOORDERCHK)))
{
@@ -2559,7 +2564,8 @@
char name_buff[FN_REFLEN];
uint open_mode= (((table->db_stat & HA_READ_ONLY) ? DB_RDONLY : 0)
| DB_THREAD);
- fn_format(name_buff, share->table_name, "", ha_berkeley_ext, 2 | 4);
+ fn_format(name_buff, share->table_name, "", ha_berkeley_ext,
+ MY_UNPACK_FILENAME|MY_APPEND_EXT);
if (!db_create(&share->status_block, db_env, 0))
{
if (share->status_block->open(share->status_block, NULL, name_buff,
@@ -2641,7 +2647,8 @@
share->status_block->set_flags(share->status_block,0); /* purecov: inspected */
if (share->status_block->open(share->status_block, NULL,
fn_format(name_buff,share->table_name,
- "", ha_berkeley_ext,2 | 4),
+ "", ha_berkeley_ext,
+ MY_UNPACK_FILENAME|MY_APPEND_EXT),
"status", DB_BTREE,
DB_THREAD | DB_CREATE, my_umask)) /* purecov: inspected */
goto end; /* purecov: inspected */
--- 1.165/sql/ha_myisam.cc 2005-12-28 16:05:20 +04:00
+++ 1.166/sql/ha_myisam.cc 2005-12-31 08:53:48 +04:00
@@ -539,8 +539,8 @@
}
/* Change extension */
- if (!fn_format(dst_path, dst_path, "", MI_NAME_DEXT,
- MY_REPLACE_EXT | MY_UNPACK_FILENAME | MY_SAFE_PATH))
+ if (fn_format_relative_to_data_home(dst_path, table_name, backup_dir,
+ MI_NAME_DEXT))
{
errmsg = "Failed in fn_format() for .MYD file (errno: %d)";
error = HA_ADMIN_INVALID;
@@ -1361,10 +1361,10 @@
if table is symlinked (Ie; Real name is not same as generated name)
*/
data_file_name= index_file_name= 0;
- fn_format(name_buff, file->filename, "", MI_NAME_DEXT, 2);
+ fn_format(name_buff, file->filename, "", MI_NAME_DEXT, MY_APPEND_EXT);
if (strcmp(name_buff, info.data_file_name))
data_file_name=info.data_file_name;
- strmov(fn_ext(name_buff),MI_NAME_IEXT);
+ fn_format(name_buff, file->filename, "", MI_NAME_IEXT, MY_APPEND_EXT);
if (strcmp(name_buff, info.index_file_name))
index_file_name=info.index_file_name;
}
@@ -1647,7 +1647,7 @@
create_flags|= HA_CREATE_DELAY_KEY_WRITE;
/* TODO: Check that the following fn_format is really needed */
- error=mi_create(fn_format(buff,name,"","",2+4),
+ error=mi_create(fn_format(buff,name,"","",MY_UNPACK_FILENAME|MY_APPEND_EXT),
share->keys,keydef,
(uint) (recinfo_pos-recinfo), recinfo,
0, (MI_UNIQUEDEF*) 0,
--- 1.75/sql/ha_myisammrg.cc 2005-12-21 22:18:27 +04:00
+++ 1.76/sql/ha_myisammrg.cc 2005-12-31 08:53:50 +04:00
@@ -105,8 +105,9 @@
char name_buff[FN_REFLEN];
DBUG_PRINT("info", ("ha_myisammrg::open"));
- if (!(file=myrg_open(fn_format(name_buff,name,"","",2 | 4), mode,
- test_if_locked)))
+ if (!(file=myrg_open(fn_format(name_buff,name,"","",
+ MY_UNPACK_FILENAME|MY_APPEND_EXT),
+ mode, test_if_locked)))
{
DBUG_PRINT("info", ("ha_myisammrg::open exit %d", my_errno));
return (my_errno ? my_errno : -1);
@@ -469,8 +470,8 @@
This means that it might not be possible to move the DATADIR of
an embedded server without changing the paths in the .MRG file.
*/
- uint length= my_snprintf(buff, FN_REFLEN, "%s/%s/%s", mysql_data_home,
- tables->db, tables->table_name);
+ uint length= build_table_filename(buff, sizeof(buff),
+ tables->db, tables->table_name, "");
/*
If a MyISAM table is in the same directory as the MERGE table,
we use the table name without a path. This means that the
@@ -488,7 +489,9 @@
*pos++= table_name;
}
*pos=0;
- DBUG_RETURN(myrg_create(fn_format(buff,name,"","",2+4+16),
+ DBUG_RETURN(myrg_create(fn_format(buff,name,"","",
+ MY_RESOLVE_SYMLINKS|
+ MY_UNPACK_FILENAME|MY_APPEND_EXT),
table_names,
create_info->merge_insert_method,
(my_bool) 0));
--- 1.200/sql/handler.cc 2005-12-28 06:55:55 +04:00
+++ 1.201/sql/handler.cc 2005-12-31 08:53:56 +04:00
@@ -2023,7 +2023,7 @@
for (const char **ext=bas_ext(); *ext ; ext++)
{
- fn_format(buff, name, "", *ext, 2 | 4);
+ fn_format(buff, name, "", *ext, MY_UNPACK_FILENAME|MY_APPEND_EXT);
if (my_delete_with_symlink(buff, MYF(0)))
{
if ((error= my_errno) != ENOENT)
--- 1.16/sql/init.cc 2005-08-12 15:54:35 +05:00
+++ 1.17/sql/init.cc 2005-12-31 08:53:59 +04:00
@@ -39,6 +39,7 @@
#endif
VOID(strmov(reg_ext,".frm"));
+ reg_ext_length= 4;
specialflag=SPECIAL_SAME_DB_NAME | options; /* Set options from argv */
/* Make a tab of powers of 10 */
for (i=0,nr=1.0; i < array_elements(log_10) ; i++)
--- 1.360/sql/mysql_priv.h 2005-12-28 20:47:54 +04:00
+++ 1.361/sql/mysql_priv.h 2005-12-31 08:57:36 +04:00
@@ -1174,6 +1174,7 @@
extern Ge_creator ge_creator;
extern Le_creator le_creator;
extern char language[FN_REFLEN], reg_ext[FN_EXTLEN];
+extern uint reg_ext_length;
extern char glob_hostname[FN_REFLEN], mysql_home[FN_REFLEN];
extern char pidfile_name[FN_REFLEN], system_time_zone[30], *opt_init_file;
extern char log_error_file[FN_REFLEN], *opt_tc_log_file;
@@ -1499,6 +1500,23 @@
char *get_field(MEM_ROOT *mem, Field *field);
bool get_field(MEM_ROOT *mem, Field *field, class String *res);
int wild_case_compare(CHARSET_INFO *cs, const char *str,const char *wildstr);
+char *fn_rext(char *name);
+
+/* Conversion functions */
+uint strconvert(CHARSET_INFO *from_cs, const char *from,
+ CHARSET_INFO *to_cs, char *to, uint to_length);
+uint build_table_filename(char *buff, size_t bufflen, const char *db,
+ const char *table, const char *ext);
+inline uint filename_to_tablename(const char *from, char *to, uint to_length)
+{
+ return strconvert(&my_charset_filename, from,
+ system_charset_info, to, to_length);
+}
+inline uint tablename_to_filename(const char *from, char *to, uint to_length)
+{
+ return strconvert(system_charset_info, from,
+ &my_charset_filename, to, to_length);
+}
/* from hostname.cc */
struct in_addr;
--- 1.509/sql/mysqld.cc 2005-12-29 14:02:03 +04:00
+++ 1.510/sql/mysqld.cc 2005-12-31 08:54:03 +04:00
@@ -511,7 +511,7 @@
language[FN_REFLEN], reg_ext[FN_EXTLEN], mysql_charsets_dir[FN_REFLEN],
*opt_init_file, *opt_tc_log_file,
def_ft_boolean_syntax[sizeof(ft_boolean_syntax)];
-
+uint reg_ext_length;
const key_map key_map_empty(0);
key_map key_map_full(0); // Will be initialized later
@@ -7455,7 +7455,7 @@
dir=tmp_path;
}
return !fn_format(to, name, dir, extension,
- MY_REPLACE_EXT | MY_UNPACK_FILENAME | MY_SAFE_PATH);
+ MY_APPEND_EXT | MY_UNPACK_FILENAME | MY_SAFE_PATH);
}
--- 1.168/sql/sql_acl.cc 2005-12-28 17:45:54 +04:00
+++ 1.169/sql/sql_acl.cc 2005-12-31 08:54:28 +04:00
@@ -2796,9 +2796,10 @@
if (!(rights & CREATE_ACL))
{
char buf[FN_REFLEN];
- sprintf(buf,"%s/%s/%s.frm",mysql_data_home, table_list->db,
- table_list->table_name);
- fn_format(buf,buf,"","",4+16+32);
+ build_table_filename(buf, sizeof(buf), table_list->db,
+ table_list->table_name, reg_ext);
+ fn_format(buf, buf, "", "", MY_UNPACK_FILENAME | MY_RESOLVE_SYMLINKS |
+ MY_RETURN_REAL_PATH | MY_APPEND_EXT);
if (access(buf,F_OK))
{
my_error(ER_NO_SUCH_TABLE, MYF(0), table_list->db, table_list->alias);
--- 1.291/sql/sql_base.cc 2005-12-28 20:47:55 +04:00
+++ 1.292/sql/sql_base.cc 2005-12-31 08:54:30 +04:00
@@ -1819,9 +1819,8 @@
{
char path[FN_REFLEN];
enum legacy_db_type not_used;
- strxnmov(path, FN_REFLEN-1, mysql_data_home, "/", table_list->db, "/",
- table_list->table_name, reg_ext, NullS);
- (void) unpack_filename(path, path);
+ build_table_filename(path, sizeof(path) - 1,
+ table_list->db, table_list->table_name, reg_ext);
if (mysql_frm_type(thd, path, ¬_used) == FRMTYPE_VIEW)
{
/*
--- 1.122/sql/sql_db.cc 2005-12-12 23:55:13 +04:00
+++ 1.123/sql/sql_db.cc 2005-12-31 08:54:32 +04:00
@@ -425,8 +425,7 @@
}
/* Check directory */
- strxmov(path, mysql_data_home, "/", db, NullS);
- path_len= unpack_dirname(path,path); // Convert if not unix
+ path_len= build_table_filename(path, sizeof(path), db, "", "");
path[path_len-1]= 0; // Remove last '/' from path
if (my_stat(path,&stat_info,MYF(0)))
@@ -549,9 +548,12 @@
if ((error=wait_if_global_read_lock(thd,0,1)))
goto exit2;
- /* Check directory */
- strxmov(path, mysql_data_home, "/", db, "/", MY_DB_OPT_FILE, NullS);
- fn_format(path, path, "", "", MYF(MY_UNPACK_FILENAME));
+ /*
+ Recreate db options file: /dbpath/.db.opt
+ We pass MY_DB_OPT_FILE as "extension" to avoid
+ "table name to file name" encoding.
+ */
+ build_table_filename(path, sizeof(path), db, "", MY_DB_OPT_FILE);
if ((error=write_db_opt(thd, path, create_info)))
goto exit;
@@ -629,8 +631,7 @@
goto exit2;
}
- (void) sprintf(path,"%s/%s",mysql_data_home,db);
- length= unpack_dirname(path,path); // Convert if not unix
+ length= build_table_filename(path, sizeof(path), db, "", "");
strmov(path+length, MY_DB_OPT_FILE); // Append db option file name
del_dbopt(path); // Remove dboption hash entry
path[length]= '\0'; // Remove file name
@@ -852,7 +853,8 @@
found_other_files++;
continue;
}
- extension= fn_ext(file->name);
+ if (!(extension= strrchr(file->name, '.')))
+ extension= strend(file->name);
if (find_type(extension, &deletable_extentions,1+2) <= 0)
{
if (find_type(extension, ha_known_exts(),1+2) <= 0)
@@ -870,7 +872,9 @@
if (!table_list)
goto err;
table_list->db= (char*) (table_list+1);
- strmov(table_list->table_name= strmov(table_list->db,db)+1, file->name);
+ table_list->table_name= strmov(table_list->db, db) + 1;
+ VOID(filename_to_tablename(file->name, table_list->table_name,
+ strlen(file->name) + 1));
table_list->alias= table_list->table_name; // If lower_case_table_names=2
/* Link into list */
(*tot_list_next)= table_list;
@@ -1151,8 +1155,7 @@
}
}
#endif
- (void) sprintf(path,"%s/%s",mysql_data_home,dbname);
- length=unpack_dirname(path,path); // Convert if not unix
+ length= build_table_filename(path, sizeof(path), dbname, "", "");
if (length && path[length-1] == FN_LIBCHAR)
path[length-1]=0; // remove ending '\'
if (my_access(path,F_OK))
--- 1.165/sql/sql_delete.cc 2005-12-28 20:47:55 +04:00
+++ 1.166/sql/sql_delete.cc 2005-12-31 08:54:34 +04:00
@@ -837,6 +837,7 @@
char path[FN_REFLEN];
TABLE *table;
bool error;
+ uint path_length;
DBUG_ENTER("mysql_truncate");
bzero((char*) &create_info,sizeof(create_info));
@@ -867,9 +868,8 @@
goto end;
}
- (void) sprintf(path,"%s/%s/%s%s",mysql_data_home,table_list->db,
- table_list->table_name,reg_ext);
- fn_format(path, path, "", "", MY_UNPACK_FILENAME);
+ path_length= build_table_filename(path, sizeof(path), table_list->db,
+ table_list->table_name, reg_ext);
if (!dont_send_ok)
{
@@ -889,7 +889,8 @@
DBUG_RETURN(TRUE);
}
- *fn_ext(path)=0; // Remove the .frm extension
+ // Remove the .frm extension
+ *(path + path_length - reg_ext_length)= '\0';
error= ha_create_table(thd, path, table_list->db, table_list->table_name,
&create_info, 1);
query_cache_invalidate3(thd, table_list, 0);
--- 1.292/sql/sql_show.cc 2005-12-30 00:24:07 +04:00
+++ 1.293/sql/sql_show.cc 2005-12-31 08:54:38 +04:00
@@ -413,9 +413,14 @@
for (i=0 ; i < (uint) dirp->number_off_files ; i++)
{
+ char uname[NAME_LEN*3+1]; /* Unencoded name */
file=dirp->dir_entry+i;
if (dir)
{ /* Return databases */
+ if ((file->name[0] == '.' &&
+ ((file->name[1] == '.' && file->name[2] == '\0') ||
+ file->name[1] == '\0')))
+ continue; /* . or .. */
#ifdef USE_SYMDIR
char *ext;
char buff[FN_REFLEN];
@@ -432,17 +437,21 @@
continue;
}
#endif
- if (file->name[0] == '.' || !MY_S_ISDIR(file->mystat->st_mode) ||
- (wild && wild_compare(file->name,wild,0)))
- continue;
+ VOID(filename_to_tablename(file->name, uname, sizeof(uname)));
+ if (!MY_S_ISDIR(file->mystat->st_mode) ||
+ (wild && wild_compare(uname, wild, 0)))
+ continue;
+ file->name= uname;
}
else
{
// Return only .frm files which aren't temp files.
- if (my_strcasecmp(system_charset_info, ext=fn_ext(file->name),reg_ext) ||
+ if (my_strcasecmp(system_charset_info, ext=fn_rext(file->name),reg_ext) ||
is_prefix(file->name,tmp_file_prefix))
continue;
*ext=0;
+ VOID(filename_to_tablename(file->name, uname, sizeof(uname)));
+ file->name= uname;
if (wild)
{
if (lower_case_table_names)
@@ -604,8 +613,7 @@
}
else
{
- (void) sprintf(path,"%s/%s",mysql_data_home, dbname);
- length=unpack_dirname(path,path); // Convert if not unix
+ length= build_table_filename(path, sizeof(path), dbname, "", "");
found_libchar= 0;
if (length && path[length-1] == FN_LIBCHAR)
{
@@ -883,7 +891,7 @@
HA_CREATE_INFO *create_info_arg)
{
List<Item> field_list;
- char tmp[MAX_FIELD_WIDTH], *for_str, buff[128], *end;
+ char tmp[MAX_FIELD_WIDTH], *for_str, buff[128], *end, uname[NAME_LEN*3+1];
const char *alias;
String type(tmp, sizeof(tmp), system_charset_info);
Field **ptr,*field;
@@ -914,8 +922,14 @@
if (table_list->schema_table)
alias= table_list->schema_table->table_name;
else
- alias= (lower_case_table_names == 2 ? table->alias :
- share->table_name.str);
+ {
+ if (lower_case_table_names == 2)
+ alias= table->alias;
+ else
+ {
+ alias= share->table_name.str;
+ }
+ }
append_identifier(thd, packet, alias, strlen(alias));
packet->append(STRING_WITH_LEN(" (\n"));
@@ -2312,8 +2326,8 @@
}
else
{
- strxmov(path, mysql_data_home, "/", base_name, NullS);
- end= path + (len= unpack_dirname(path,path));
+ len= build_table_filename(path, sizeof(path), base_name, "", "");
+ end= path + len;
len= FN_LEN - len;
if (mysql_find_files(thd, &files, base_name,
path, idx_field_vals.table_value, 0))
@@ -2460,8 +2474,7 @@
(grant_option && !check_grant_db(thd, file_name)))
#endif
{
- strxmov(path, mysql_data_home, "/", file_name, NullS);
- length=unpack_dirname(path,path); // Convert if not unix
+ length= build_table_filename(path, sizeof(path), file_name, "", "");
found_libchar= 0;
if (length && path[length-1] == FN_LIBCHAR)
{
--- 1.288/sql/sql_table.cc 2005-12-28 16:05:20 +04:00
+++ 1.289/sql/sql_table.cc 2005-12-31 08:54:40 +04:00
@@ -103,28 +103,53 @@
}
/*
- Build the path to a file for a table (or the base path that can
- then have various extensions stuck on to it).
+ Creates path to a file: mysql_data_dir/db/table.ext
SYNOPSIS
- build_table_path()
- buff Buffer to build the path into
- bufflen sizeof(buff)
- db Name of database
- table Name of table
- ext Filename extension
+ build_table_filename()
+ buff where to write result
+ bufflen buff size
+ db database name, in system_charset_info
+ table table name, in system_charset_info
+ ext file extension
+
+ NOTES
+
+ Uses database and table name, and extension to create
+ a file name in mysql_data_dir. Database and table
+ names are converted from system_charset_info into "fscs".
+ 'ext' is not converted.
RETURN
- 0 Error
- # Size of path
- */
-static uint build_table_path(char *buff, size_t bufflen, const char *db,
+*/
+
+
+uint build_table_filename(char *buff, size_t bufflen, const char *db,
+ const char *table, const char *ext)
+{
+ uint length;
+ char dbbuff[FN_REFLEN];
+ char tbbuff[FN_REFLEN];
+ VOID(tablename_to_filename(table, tbbuff, sizeof(tbbuff)));
+ VOID(tablename_to_filename(db, dbbuff, sizeof(dbbuff)));
+ strxnmov(buff, bufflen,
+ mysql_data_home, "/", dbbuff, "/", tbbuff, ext, NullS);
+ length= unpack_filename(buff, buff);
+ return length;
+}
+
+
+uint build_tmptable_filename(char *buff, size_t bufflen,
+ const char *tmpdir,
const char *table, const char *ext)
{
- strxnmov(buff, bufflen-1, mysql_data_home, "/", db, "/", table, ext,
- NullS);
- return unpack_filename(buff,buff);
+ uint length;
+ char tbbuff[FN_REFLEN];
+ VOID(tablename_to_filename(table, tbbuff, sizeof(tbbuff)));
+ strxnmov(buff, bufflen, tmpdir, "/", tbbuff, ext, NullS);
+ length= unpack_filename(buff, buff);
+ return length;
}
@@ -276,7 +301,8 @@
bool dont_log_query)
{
TABLE_LIST *table;
- char path[FN_REFLEN], *alias;
+ char path[FN_REFLEN], *alias;
+ uint path_length;
String wrong_tables;
int error;
int non_temp_tables_count= 0;
@@ -365,7 +391,8 @@
}
alias= (lower_case_table_names == 2) ? table->alias : table->table_name;
/* remove .frm file and engine files */
- build_table_path(path, sizeof(path), db, alias, reg_ext);
+ path_length= build_table_filename(path, sizeof(path),
+ db, alias, reg_ext);
}
if (table_type == NULL &&
(drop_temporary ||
@@ -390,7 +417,8 @@
mysql_frm_type(thd, path, &frm_db_type);
table_type= ha_resolve_by_legacy_type(thd, frm_db_type);
}
- *(end=fn_ext(path))=0; // Remove extension for delete
+ // Remove extension for delete
+ *(end= path + path_length - reg_ext_length)= '\0';
error= ha_delete_table(thd, table_type, path, db, table->table_name,
!dont_log_query);
if ((error == ENOENT || error == HA_ERR_NO_SUCH_TABLE) &&
@@ -495,10 +523,11 @@
bool error= 0;
DBUG_ENTER("quick_rm_table");
- build_table_path(path, sizeof(path), db, table_name, reg_ext);
+ uint path_length= build_table_filename(path, sizeof(path),
+ db, table_name, reg_ext);
if (my_delete(path,MYF(0)))
error= 1; /* purecov: inspected */
- *fn_ext(path)= 0; // Remove reg_ext
+ path[path_length - reg_ext_length]= '\0'; // Remove reg_ext
DBUG_RETURN(ha_delete_table(current_thd, base, path, db, table_name, 0) ||
error);
}
@@ -1562,8 +1591,8 @@
{
HA_CREATE_INFO db_info;
char path[FN_REFLEN];
- /* Abuse build_table_path() to build the path to the db.opt file */
- build_table_path(path, sizeof(path), db, MY_DB_OPT_FILE, "");
+ /* Abuse build_table_filename() to build the path to the db.opt file */
+ build_table_filename(path, sizeof(path), db, "", MY_DB_OPT_FILE);
load_db_opt(thd, path, &db_info);
create_info->default_table_charset= db_info.default_table_charset;
}
@@ -1707,6 +1736,7 @@
uint select_field_count)
{
char path[FN_REFLEN];
+ uint path_length;
const char *alias;
uint db_options, key_count;
KEY *key_info_buffer;
@@ -1822,15 +1852,18 @@
/* Check if table exists */
if (create_info->options & HA_LEX_CREATE_TMP_TABLE)
{
- my_snprintf(path, sizeof(path), "%s%s%lx_%lx_%x%s",
- mysql_tmpdir, tmp_file_prefix, current_pid, thd->thread_id,
- thd->tmp_table++, reg_ext);
+ char tmp_table_name[tmp_file_prefix_length+22+22+22+3];
+ my_snprintf(tmp_table_name, sizeof(tmp_table_name), "%s%lx_%lx_%x",
+ tmp_file_prefix, current_pid, thd->thread_id,
+ thd->tmp_table++);
+ path_length= build_tmptable_filename(path, sizeof(path), mysql_tmpdir,
+ tmp_table_name, reg_ext);
if (lower_case_table_names)
my_casedn_str(files_charset_info, path);
create_info->table_options|=HA_CREATE_DELAY_KEY_WRITE;
}
else
- build_table_path(path, sizeof(path), db, alias, reg_ext);
+ path_length= build_table_filename(path, sizeof(path), db, alias, reg_ext);
/* Check if table already exists */
if ((create_info->options & HA_LEX_CREATE_TMP_TABLE) &&
@@ -1894,6 +1927,7 @@
create_info->data_file_name= create_info->index_file_name= 0;
create_info->table_options=db_options;
+ path[path_length - reg_ext_length]= '\0'; // Remove .frm extension
if (rea_create_table(thd, path, db, table_name, create_info, fields,
key_count, key_info_buffer, file))
goto unlock_and_end;
@@ -1901,7 +1935,6 @@
if (create_info->options & HA_LEX_CREATE_TMP_TABLE)
{
/* Open table and put in temporary table list */
- *fn_ext(path)= 0;
if (!(open_temporary_table(thd, path, db, table_name, 1)))
{
(void) rm_temporary_table(create_info->db_type, path);
@@ -2105,8 +2138,8 @@
file= (base == NULL ? 0 :
get_new_handler((TABLE_SHARE*) 0, thd->mem_root, base));
- build_table_path(from, sizeof(from), old_db, old_name, "");
- build_table_path(to, sizeof(to), new_db, new_name, "");
+ build_table_filename(from, sizeof(from), old_db, old_name, "");
+ build_table_filename(to, sizeof(to), new_db, new_name, "");
/*
If lower_case_table_names == 2 (case-preserving but case-insensitive
@@ -2118,12 +2151,12 @@
{
strmov(tmp_name, old_name);
my_casedn_str(files_charset_info, tmp_name);
- build_table_path(lc_from, sizeof(lc_from), old_db, tmp_name, "");
+ build_table_filename(lc_from, sizeof(lc_from), old_db, tmp_name, "");
from_base= lc_from;
strmov(tmp_name, new_name);
my_casedn_str(files_charset_info, tmp_name);
- build_table_path(lc_to, sizeof(lc_to), new_db, tmp_name, "");
+ build_table_filename(lc_to, sizeof(lc_to), new_db, tmp_name, "");
to_base= lc_to;
}
@@ -2248,23 +2281,21 @@
else
{
char* backup_dir= thd->lex->backup_dir;
- char src_path[FN_REFLEN], dst_path[FN_REFLEN];
+ char src_path[FN_REFLEN], dst_path[FN_REFLEN], uname[FN_REFLEN];
char* table_name= table->table_name;
char* db= table->db;
- if (fn_format_relative_to_data_home(src_path, table_name, backup_dir,
- reg_ext))
+ VOID(tablename_to_filename(table->table_name, uname, sizeof(uname)));
+
+ if (fn_format_relative_to_data_home(src_path, uname, backup_dir, reg_ext))
DBUG_RETURN(-1); // protect buffer overflow
- my_snprintf(dst_path, sizeof(dst_path), "%s%s/%s",
- mysql_real_data_home, db, table_name);
+ build_table_filename(dst_path, sizeof(dst_path), db, table_name, reg_ext);
if (lock_and_wait_for_table_name(thd,table))
DBUG_RETURN(-1);
- if (my_copy(src_path,
- fn_format(dst_path, dst_path,"", reg_ext, 4),
- MYF(MY_WME)))
+ if (my_copy(src_path, dst_path, MYF(MY_WME)))
{
pthread_mutex_lock(&LOCK_open);
unlock_table_name(thd, table);
@@ -2937,6 +2968,7 @@
{
TABLE *tmp_table;
char src_path[FN_REFLEN], dst_path[FN_REFLEN];
+ uint dst_path_length;
char *db= table->db;
char *table_name= table->table_name;
char *src_db;
@@ -2976,8 +3008,8 @@
strxmov(src_path, tmp_table->s->path.str, reg_ext, NullS);
else
{
- strxmov(src_path, mysql_data_home, "/", src_db, "/", src_table,
- reg_ext, NullS);
+ build_table_filename(src_path, sizeof(src_path),
+ src_db, src_table, reg_ext);
/* Resolve symlinks (for windows) */
unpack_filename(src_path, src_path);
if (lower_case_table_names)
@@ -3008,18 +3040,18 @@
{
if (find_temporary_table(thd, db, table_name))
goto table_exists;
- my_snprintf(dst_path, sizeof(dst_path), "%s%s%lx_%lx_%x%s",
- mysql_tmpdir, tmp_file_prefix, current_pid,
- thd->thread_id, thd->tmp_table++, reg_ext);
+ dst_path_length= my_snprintf(dst_path, sizeof(dst_path),
+ "%s%s%lx_%lx_%x%s",
+ mysql_tmpdir, tmp_file_prefix, current_pid,
+ thd->thread_id, thd->tmp_table++, reg_ext);
if (lower_case_table_names)
my_casedn_str(files_charset_info, dst_path);
create_info->table_options|= HA_CREATE_DELAY_KEY_WRITE;
}
else
{
- strxmov(dst_path, mysql_data_home, "/", db, "/", table_name,
- reg_ext, NullS);
- unpack_filename(dst_path, dst_path);
+ dst_path_length= build_table_filename(dst_path, sizeof(dst_path),
+ db, table_name, reg_ext);
if (!access(dst_path, F_OK))
goto table_exists;
}
@@ -3041,7 +3073,7 @@
creation, instead create the table directly (for both normal
and temporary tables).
*/
- *fn_ext(dst_path)= 0; // Remove .frm
+ dst_path[dst_path_length - reg_ext_length]= '\0'; // Remove .frm
err= ha_create_table(thd, dst_path, db, table_name, create_info, 1);
if (create_info->options & HA_LEX_CREATE_TMP_TABLE)
@@ -3324,10 +3356,10 @@
else
{
if (table->file->add_index(table, key_info_buffer, key_count)||
- build_table_path(path, sizeof(path), table_list->db,
- (lower_case_table_names == 2) ?
- table_list->alias : table_list->table_name,
- reg_ext) == 0 ||
+ build_table_filename(path, sizeof(path), table_list->db,
+ (lower_case_table_names == 2) ?
+ table_list->alias : table_list->table_name,
+ reg_ext) == 0 ||
mysql_create_frm(thd, path, &create_info,
fields, key_count, key_info_buffer, table->file))
/* don't need to free((gptr) key_info_buffer);*/
@@ -3425,10 +3457,10 @@
&keys, /*tmp_table*/ 0, &db_options, table->file,
&key_info_buffer, key_count,
/*select_field_count*/ 0)||
- build_table_path(path, sizeof(path), table_list->db,
- (lower_case_table_names == 2) ?
- table_list->alias : table_list->table_name,
- reg_ext) == 0 ||
+ build_table_filename(path, sizeof(path), table_list->db,
+ (lower_case_table_names == 2) ?
+ table_list->alias : table_list->table_name,
+ reg_ext) == 0 ||
mysql_create_frm(thd, path, &create_info,
fields, key_count, key_info_buffer, table->file))
/*don't need to free((gptr) key_numbers);*/
@@ -4532,7 +4564,7 @@
*/
uint old_lock_type;
partition_info *part_info= table->part_info;
- char path[FN_REFLEN+1];
+ char path[FN_REFLEN+1], noext_path[FN_REFLEN+1];
uint db_options= 0, key_count, syntax_len;
KEY *key_info_buffer;
char *part_syntax_buf;
@@ -4555,7 +4587,7 @@
}
part_info->part_info_string= part_syntax_buf;
part_info->part_info_len= syntax_len;
- build_table_path(path, sizeof(path), db, table_name, reg_ext);
+ build_table_filename(path, sizeof(path), db, table_name, reg_ext);
if (mysql_create_frm(thd, path, db, table_name, create_info,
create_list, key_count, key_info_buffer,
table->file))
@@ -4563,7 +4595,7 @@
DBUG_RETURN(TRUE);
}
thd->lex->part_info= part_info;
- build_table_path(path, sizeof(path), db, table_name, "");
+ build_table_filename(path, sizeof(path), db, table_name, "");
if (table->file->drop_partitions(path))
{
DBUG_RETURN(TRUE);
@@ -4591,11 +4623,12 @@
}
part_info->part_info_string= part_syntax_buf;
part_info->part_info_len= syntax_len;
- build_table_path(path, sizeof(path), db, table_name, reg_ext);
+ build_table_filename(path, sizeof(path), db, table_name, reg_ext);
+ build_table_filename(noext_path, sizeof(noext_path), db, table_name, "");
if (mysql_create_frm(thd, path, db, table_name, create_info,
create_list, key_count, key_info_buffer,
table->file) ||
- table->file->create_handler_files(path))
+ table->file->create_handler_files(noext_path))
{
DBUG_RETURN(TRUE);
}
@@ -4688,9 +4721,7 @@
{
char path[FN_REFLEN];
/* table is a normal table: Create temporary table in same directory */
- strxnmov(path, sizeof(path)-1, mysql_data_home, "/",new_db, "/",
- tmp_name, NullS);
- unpack_filename(path, path);
+ build_table_filename(path, sizeof(path), new_db, tmp_name, "");
new_table=open_temporary_table(thd, path, new_db, tmp_name,0);
}
if (!new_table)
@@ -4906,7 +4937,7 @@
shutdown.
*/
char path[FN_REFLEN];
- build_table_path(path, sizeof(path), new_db, table_name, "");
+ build_table_filename(path, sizeof(path), new_db, table_name, "");
table=open_temporary_table(thd, path, new_db, tmp_name,0);
if (table)
{
--- 1.196/sql/table.cc 2005-12-22 08:10:56 +04:00
+++ 1.197/sql/table.cc 2005-12-31 08:54:48 +04:00
@@ -43,6 +43,37 @@
}
+
+/*
+ Returns pointer to '.frm' extension of the file name.
+
+ SYNOPSIS
+ fn_rext()
+ name file name
+
+ DESCRIPTION
+ Checks file name part starting with the rightmost '.' character,
+ and returns it if it is equal to '.frm'.
+
+ TODO
+ It is a good idea to get rid of this function modifying the code
+ to garantee that the functions presently calling fn_rext() always
+ get arguments in the same format: either with '.frm' or without '.frm'.
+
+ RETURN VALUES
+ Pointer to the '.frm' extension. If there is no extension,
+ or extension is not '.frm', pointer at the end of file name.
+*/
+
+char *fn_rext(char *name)
+{
+ char *res= strrchr(name, '.');
+ if (res && !strcmp(res, ".frm"))
+ return res;
+ return name + strlen(name);
+}
+
+
/*
Allocate a setup TABLE_SHARE structure
@@ -65,9 +96,13 @@
char path[FN_REFLEN], normalized_path[FN_REFLEN];
uint path_length, normalized_length;
- path_length= (uint) (strxmov(path, mysql_data_home, "/", table_list->db,
- "/", table_list->table_name, NullS) - path);
- normalized_length= unpack_filename(normalized_path, path);
+ path_length= build_table_filename(path, sizeof(path) - 1,
+ table_list->db,
+ table_list->table_name, "");
+ normalized_length= build_table_filename(normalized_path,
+ sizeof(normalized_path) - 1,
+ table_list->db,
+ table_list->table_name, "");
init_sql_alloc(&mem_root, TABLE_ALLOC_BLOCK_SIZE, 0);
if ((share= (TABLE_SHARE*) alloc_root(&mem_root,
@@ -1883,6 +1918,7 @@
res->append('\'');
}
+
/* Create a .frm file */
File create_frm(THD *thd, const char *name, const char *db,
@@ -2103,9 +2139,6 @@
#else
last_char_is_space= *name==' ';
#endif
- if (*name == '/' || *name == '\\' || *name == FN_LIBCHAR ||
- *name == FN_EXTCHAR)
- return 1;
name++;
}
return last_char_is_space || (uint) (name - start) > NAME_LEN;
@@ -2114,8 +2147,7 @@
/*
Allow anything as a table name, as long as it doesn't contain an
- a '/', or a '.' character
- or ' ' at the end
+ ' ' at the end
returns 1 on error
*/
@@ -2146,8 +2178,6 @@
}
}
#endif
- if (*name == '/' || *name == '\\' || *name == FN_EXTCHAR)
- return 1;
name++;
}
#if defined(USE_MB) && defined(USE_MB_IDENT)
--- 1.71/sql/unireg.cc 2005-12-21 22:18:30 +04:00
+++ 1.72/sql/unireg.cc 2005-12-31 08:54:50 +04:00
@@ -93,6 +93,7 @@
thd->lex->part_info= NULL;
#endif
+ DBUG_ASSERT(*fn_rext((char*)file_name)); // Check .frm extension
formnames.type_names=0;
if (!(screen_buff=pack_screens(create_fields,&info_length,&screens,0)))
DBUG_RETURN(1);
@@ -289,7 +290,7 @@
SYNOPSIS
rea_create_table()
thd Thread handler
- path Name of file (including database and .frm)
+ path Name of file (including database, without .frm)
db Data base name
table_name Table name
create_info create info parameters
@@ -309,25 +310,26 @@
List<create_field> &create_fields,
uint keys, KEY *key_info, handler *file)
{
- char *ext;
DBUG_ENTER("rea_create_table");
- if (mysql_create_frm(thd, path, db, table_name, create_info,
+ char frm_name[FN_REFLEN];
+ strxmov(frm_name, path, reg_ext, NullS);
+ if (mysql_create_frm(thd, frm_name, db, table_name, create_info,
create_fields, keys, key_info, file))
+
DBUG_RETURN(1);
+
+ // Make sure mysql_create_frm din't remove extension
+ DBUG_ASSERT(*fn_rext(frm_name));
if (file->create_handler_files(path))
goto err_handler;
- *(ext= fn_ext(path))= 0; // Remove .frm
if (!create_info->frm_only && ha_create_table(thd, path, db, table_name,
create_info,0))
- {
- *ext= FN_EXTCHAR; // Add extension back
goto err_handler;
- }
DBUG_RETURN(0);
err_handler:
- my_delete(path, MYF(0));
+ my_delete(frm_name, MYF(0));
DBUG_RETURN(1);
} /* rea_create_table */
--- 1.97/strings/ctype-utf8.c 2005-10-13 19:10:14 +05:00
+++ 1.98/strings/ctype-utf8.c 2005-12-31 08:56:53 +04:00
@@ -2791,6 +2791,1293 @@
#endif /* Cybozu Hack */
+/*
+ File system encoding components:
+
+Code range Pattern Number Used Unused Blocks
+-----------------------------------------------------------------------------
+00C0..017F [.][0..4][g..z] 5*20= 100 97 3 Latin1 Supplement + Ext A
+0370..03FF [.][5..9][g..z] 5*20= 100 88 12 Greek + Coptic
+0400..052F [.][g..z][0..6] 20*7= 140 140 137 Cyrillic
+0530..058F [.][g..z][7..8] 20*2= 40 38 2 Armenian
+2160..217F [.][g..z][9] 20*1= 20 16 4 Number Forms
+0180..02AF [.][g..z][a..k] 28*11=220 203 17 Latin Ext B + IPA
+1E00..0EFF [.][g..z][l..r] 20*7= 140 136 4 Latin Additional Extended
+1F00..1FFF [.][g..z][s..z] 20*8= 160 144 16 Greek Extended
+.... .... [.][a..f][g..z] 6*20= 120 0 120 RESERVED
+24B6..24E9 [.][@][a..z] 26 26 0 Enclosed Alphanumerics
+FF21..FF5A [.][a..z][@] 26 26 0 Full Width forms
+
+All other characters are encoded using five bytes:
+
+[.][0..9a..z][0..9a..z][0..9a..z][0..9a..z]
+
+*/
+
+
+static uint16 touni[5994]=
+{
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x00C0,
+ 0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7,0x00C8,
+ 0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF,0x00D0,
+ 0x00D1,0x00D2,0x00D3,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x00E0,
+ 0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x00E7,0x00E8,
+ 0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF,0x00F0,
+ 0x00F1,0x00F2,0x00F3,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x00D4,
+ 0x00D5,0x00D6,0x0000,0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,
+ 0x00DD,0x00DE,0x0178,0x0100,0x0102,0x0104,0x0106,0x0108,
+ 0x010A,0x010C,0x010E,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x00F4,
+ 0x00F5,0x00F6,0x00DF,0x00F8,0x00F9,0x00FA,0x00FB,0x00FC,
+ 0x00FD,0x00FE,0x00FF,0x0101,0x0103,0x0105,0x0107,0x0109,
+ 0x010B,0x010D,0x010F,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0110,
+ 0x0112,0x0114,0x0116,0x0118,0x011A,0x011C,0x011E,0x0120,
+ 0x0122,0x0124,0x0126,0x0128,0x012A,0x012C,0x012E,0x0000,
+ 0x0132,0x0134,0x0136,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0111,
+ 0x0113,0x0115,0x0117,0x0119,0x011B,0x011D,0x011F,0x0121,
+ 0x0123,0x0125,0x0127,0x0129,0x012B,0x012D,0x012F,0x0131,
+ 0x0133,0x0135,0x0137,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0139,0x013B,0x013D,0x013F,0x0141,0x0143,0x0145,0x0147,
+ 0x0000,0x014A,0x014C,0x014E,0x0150,0x0152,0x0154,0x0156,
+ 0x0158,0x015A,0x015C,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0138,
+ 0x013A,0x013C,0x013E,0x0140,0x0142,0x0144,0x0146,0x0148,
+ 0x0149,0x014B,0x014D,0x014F,0x0151,0x0153,0x0155,0x0157,
+ 0x0159,0x015B,0x015D,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x015E,
+ 0x0160,0x0162,0x0164,0x0166,0x0168,0x016A,0x016C,0x016E,
+ 0x0170,0x0172,0x0174,0x0176,0x0179,0x017B,0x017D,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x015F,
+ 0x0161,0x0163,0x0165,0x0167,0x0169,0x016B,0x016D,0x016F,
+ 0x0171,0x0173,0x0175,0x0177,0x017A,0x017C,0x017E,0x017F,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0390,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0386,
+ 0x0388,0x0389,0x038A,0x0000,0x0391,0x0000,0x0393,0x0394,
+ 0x0395,0x0396,0x0397,0x0000,0x0399,0x0000,0x039B,0x039C,
+ 0x039D,0x039E,0x039F,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03AC,
+ 0x03AD,0x03AE,0x03AF,0x03B0,0x03B1,0x03B2,0x03B3,0x03B4,
+ 0x03B5,0x03B6,0x03B7,0x03B8,0x03B9,0x03BA,0x03BB,0x03BC,
+ 0x03BD,0x03BE,0x03BF,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x03A1,0x0000,0x0000,0x03A4,0x03A5,0x0000,0x03A7,0x03A8,
+ 0x03A9,0x03AA,0x03AB,0x038C,0x038E,0x038F,0x0000,0x0392,
+ 0x0398,0x03D2,0x03D3,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03C0,
+ 0x03C1,0x03C2,0x03C3,0x03C4,0x03C5,0x03C6,0x03C7,0x03C8,
+ 0x03C9,0x03CA,0x03CB,0x03CC,0x03CD,0x03CE,0x0000,0x03D0,
+ 0x03D1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03D4,
+ 0x03A6,0x03A0,0x0000,0x0000,0x03DA,0x03DC,0x03DE,0x03E0,
+ 0x03E2,0x03E4,0x03E6,0x03E8,0x03EA,0x03EC,0x03EE,0x039A,
+ 0x0000,0x03A3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x03D5,0x03D6,0x03D7,0x03D9,0x03DB,0x03DD,0x03DF,0x03E1,
+ 0x03E3,0x03E5,0x03E7,0x03E9,0x03EB,0x03ED,0x03EF,0x03F0,
+ 0x03F1,0x03F2,0x03F3,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x03FD,0x03FE,0x03FF,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03F5,
+ 0x03F6,0x03F8,0x03FB,0x03FC,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x24B6,0x24B7,0x24B8,0x24B9,0x24BA,0x24BB,0x24BC,
+ 0x24BD,0x24BE,0x24BF,0x24C0,0x24C1,0x24C2,0x24C3,0x24C4,
+ 0x24C5,0x24C6,0x24C7,0x24C8,0x24C9,0x24CA,0x24CB,0x24CC,
+ 0x24CD,0x24CE,0x24CF,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x24D0,0x24D1,0x24D2,0x24D3,0x24D4,0x24D5,0x24D6,
+ 0x24D7,0x24D8,0x24D9,0x24DA,0x24DB,0x24DC,0x24DD,0x24DE,
+ 0x24DF,0x24E0,0x24E1,0x24E2,0x24E3,0x24E4,0x24E5,0x24E6,
+ 0x24E7,0x24E8,0x24E9,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF21,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF22,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF23,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF24,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF25,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF26,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0410,0x0424,0x0408,0x0478,0x04A6,0x04CD,0x04F4,0x0000,
+ 0x0544,0x2160,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF27,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x01B3,0x01DE,0x0208,0x0230,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x1E00,0x1E28,0x1E50,0x1E78,
+ 0x1E60,0x1EBE,0x1EE6,0x1F08,0x1F2A,0x0000,0x1F6C,0x1F88,
+ 0x1FAC,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0411,0x0425,0x0409,0x047A,0x04A8,0x0000,0x04F6,0x0531,
+ 0x0545,0x2161,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF28,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0182,0x01B5,0x01E0,0x020A,0x0232,0x0000,0x0000,
+ 0x019D,0x0000,0x0000,0x0000,0x1E02,0x1E2A,0x1E52,0x1E7A,
+ 0x0000,0x1EC0,0x1EE8,0x1F09,0x1F2B,0x0000,0x1F6D,0x1F89,
+ 0x1FAD,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0412,0x0426,0x040A,0x047C,0x04AA,0x04D0,0x04F8,0x0532,
+ 0x0546,0x2162,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF29,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0184,0x01B8,0x01E2,0x020C,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x1E04,0x1E2C,0x1E54,0x1E7C,
+ 0x0000,0x1EC2,0x1EEA,0x1F0A,0x1F2C,0x0000,0x1F6E,0x1F8A,
+ 0x1FAE,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0413,0x0427,0x040B,0x047E,0x04AC,0x04D2,0x0000,0x0533,
+ 0x0547,0x2163,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF2A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0187,0x0000,0x01E4,0x020E,0x0000,0x0000,0x0193,
+ 0x0000,0x01AE,0x0000,0x0000,0x1E06,0x1E2E,0x1E56,0x1E7E,
+ 0x0000,0x1EC4,0x1EEC,0x1F0B,0x1F2D,0x0000,0x1F6F,0x1F8B,
+ 0x1FAF,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0414,0x0428,0x040C,0x0480,0x04AE,0x04D4,0x0000,0x0534,
+ 0x0548,0x2164,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF2B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x018B,0x0000,0x01E6,0x0210,0x0000,0x0000,0x0000,
+ 0x019F,0x0000,0x0000,0x0000,0x1E08,0x1E30,0x1E58,0x1E80,
+ 0x0000,0x1EC6,0x1EEE,0x1F0C,0x1F2E,0x0000,0x1FBA,0x1F8C,
+ 0x1FB8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0415,0x0429,0x040D,0x0000,0x04B0,0x04D6,0x0000,0x0535,
+ 0x0549,0x2165,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF2C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x01E8,0x0212,0x0000,0x0000,0x0000,
+ 0x0000,0x01B1,0x0000,0x0000,0x1E0A,0x1E32,0x1E5A,0x1E82,
+ 0x1EA0,0x1EC8,0x1EF0,0x1F0D,0x1F2F,0x1F59,0x1FBB,0x1F8D,
+ 0x1FB9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0416,0x042A,0x040E,0x048A,0x04B2,0x04D8,0x0000,0x0536,
+ 0x054A,0x2166,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF2D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0191,0x0000,0x01EA,0x0214,0x0000,0x0000,0x0194,
+ 0x0000,0x01B2,0x0000,0x0000,0x1E0C,0x1E34,0x1E5C,0x1E84,
+ 0x1EA2,0x1ECA,0x1EF2,0x1F0E,0x1F38,0x0000,0x1FC8,0x1F8E,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0417,0x042B,0x040F,0x048C,0x04B4,0x04DA,0x0000,0x0537,
+ 0x054B,0x2167,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF2E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x01F6,0x01BC,0x01EC,0x0216,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x1E0E,0x1E36,0x1E5E,0x1E86,
+ 0x1EA4,0x1ECC,0x1EF4,0x1F0F,0x1F39,0x1F5B,0x1FC9,0x1F8F,
+ 0x1FBC,0x1FE8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0418,0x042C,0x0460,0x048E,0x04B6,0x04DC,0x0000,0x0538,
+ 0x054C,0x2168,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF2F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0198,0x01C4,0x01EE,0x0218,0x023A,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x1E10,0x1E38,0x0000,0x1E88,
+ 0x1EA6,0x1ECE,0x1EF6,0x1F18,0x1F3A,0x0000,0x1FCA,0x1F98,
+ 0x0000,0x1FE9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0419,0x042D,0x0462,0x0490,0x04B8,0x04DE,0x0500,0x0539,
+ 0x054D,0x2169,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF30,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x023D,0x01C7,0x0000,0x021A,0x023B,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x1E12,0x1E3A,0x1E62,0x1E8A,
+ 0x1EA8,0x1ED0,0x1EF8,0x1F19,0x1F3B,0x1F5D,0x1FCB,0x1F99,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x041A,0x042E,0x0464,0x0492,0x04BA,0x04E0,0x0502,0x053A,
+ 0x054E,0x216A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF31,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x01CA,0x01F1,0x021C,0x023E,0x0181,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x1E14,0x1E3C,0x1E64,0x1E8C,
+ 0x1EAA,0x1ED2,0x0000,0x1F1A,0x1F3C,0x0000,0x1FDA,0x1F9A,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x041B,0x042F,0x0466,0x0494,0x04BC,0x04E2,0x0504,0x053B,
+ 0x054F,0x216B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF32,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0220,0x01CD,0x01F4,0x021E,0x0000,0x0186,0x0197,
+ 0x0000,0x0000,0x0000,0x0000,0x1E16,0x1E3E,0x1E66,0x1E8E,
+ 0x1EAC,0x1ED4,0x0000,0x1F1B,0x1F3D,0x1F5F,0x1FDB,0x1F9B,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x041C,0x0400,0x0468,0x0496,0x04BE,0x04E4,0x0506,0x053C,
+ 0x0550,0x216C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF33,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x01A0,0x01CF,0x01F8,0x0000,0x0000,0x0000,0x0196,
+ 0x0000,0x0000,0x0000,0x0000,0x1E18,0x1E40,0x1E68,0x1E90,
+ 0x1EAE,0x1ED6,0x0000,0x1F1C,0x1F3E,0x0000,0x1FF8,0x1F9C,
+ 0x0000,0x1FEC,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x041D,0x0401,0x046A,0x0498,0x04C0,0x04E6,0x0508,0x053D,
+ 0x0551,0x216D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF34,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x01A2,0x01D1,0x01FA,0x0222,0x0000,0x0189,0x0000,
+ 0x0000,0x01B7,0x0000,0x0000,0x1E1A,0x1E42,0x1E6A,0x1E92,
+ 0x1EB0,0x1ED8,0x0000,0x1F1D,0x1F3F,0x0000,0x1FF9,0x1F9D,
+ 0x1FCC,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x041E,0x0402,0x046C,0x049A,0x04C1,0x04E8,0x050A,0x053E,
+ 0x0552,0x216E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF35,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x01A4,0x01D3,0x01FC,0x0224,0x0000,0x018A,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x1E1C,0x1E44,0x1E6C,0x1E94,
+ 0x1EB2,0x1EDA,0x0000,0x0000,0x1F48,0x0000,0x1FEA,0x1F9E,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x041F,0x0403,0x046E,0x049C,0x04C3,0x04EA,0x050C,0x053F,
+ 0x0553,0x216F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF36,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x01A7,0x01D5,0x01FE,0x0226,0x0000,0x0000,0x0000,
+ 0x01A6,0x0241,0x0000,0x0000,0x1E1E,0x1E46,0x1E6E,0x0000,
+ 0x1EB4,0x1EDC,0x0000,0x0000,0x1F49,0x0000,0x1FEB,0x1F9F,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0420,0x0404,0x0470,0x049E,0x04C5,0x04EC,0x050E,0x0540,
+ 0x0554,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF37,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x01D7,0x0200,0x0228,0x0000,0x018F,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x1E20,0x1E48,0x1E70,0x0000,
+ 0x1EB6,0x1EDE,0x0000,0x0000,0x1F4A,0x1F68,0x1FFA,0x1FA8,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0421,0x0405,0x0472,0x04A0,0x04C7,0x04EE,0x0000,0x0541,
+ 0x0555,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF38,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x01D9,0x0202,0x022A,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x1E22,0x1E4A,0x1E72,0x0000,
+ 0x1EB8,0x1EE0,0x0000,0x0000,0x1F4B,0x1F69,0x1FFB,0x1FA9,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0422,0x0406,0x0474,0x04A2,0x04C9,0x04F0,0x0000,0x0542,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF39,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x01AC,0x01DB,0x0204,0x022C,0x0000,0x0190,0x019C,
+ 0x01A9,0x0000,0x0000,0x0000,0x1E24,0x1E4C,0x1E74,0x0000,
+ 0x1EBA,0x1EE2,0x0000,0x1F28,0x1F4C,0x1F6A,0x0000,0x1FAA,
+ 0x1FD8,0x1FFC,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0423,0x0407,0x0476,0x04A4,0x04CB,0x04F2,0x0000,0x0543,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF3A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x01AF,0x018E,0x0206,0x022E,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x1E26,0x1E4E,0x1E76,0x0000,
+ 0x1EBC,0x1EE4,0x0000,0x1F29,0x1F4D,0x1F6B,0x0000,0x1FAB,
+ 0x1FD9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF41,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF42,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF43,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF44,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF45,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF46,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0430,0x0444,0x0458,0x0479,0x04A7,0x04CE,0x04F5,0x0000,
+ 0x0574,0x2170,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF47,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0180,0x01B4,0x01DF,0x0209,0x0231,0x0000,0x025D,
+ 0x0271,0x0285,0x0299,0x02AD,0x1E01,0x1E29,0x1E51,0x1E79,
+ 0x1E9B,0x1EBF,0x1EE7,0x1F00,0x1F22,0x0000,0x1F64,0x1F80,
+ 0x1FA4,0x1FD2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0431,0x0445,0x0459,0x047B,0x04A9,0x0000,0x04F7,0x0561,
+ 0x0575,0x2171,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF48,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0183,0x01B6,0x01E1,0x020B,0x0233,0x0000,0x025E,
+ 0x0272,0x0286,0x029A,0x02AE,0x1E03,0x1E2B,0x1E53,0x1E7B,
+ 0x0000,0x1EC1,0x1EE9,0x1F01,0x1F23,0x0000,0x1F65,0x1F81,
+ 0x1FA5,0x1FD3,0x1FF6,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0432,0x0446,0x045A,0x047D,0x04AB,0x04D1,0x04F9,0x0562,
+ 0x0576,0x2172,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF49,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0185,0x01B9,0x01E3,0x020D,0x0234,0x0000,0x025F,
+ 0x0273,0x0287,0x029B,0x02AF,0x1E05,0x1E2D,0x1E55,0x1E7D,
+ 0x0000,0x1EC3,0x1EEB,0x1F02,0x1F24,0x0000,0x1F66,0x1F82,
+ 0x1FA6,0x0000,0x1FF7,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0433,0x0447,0x045B,0x047F,0x04AD,0x04D3,0x0000,0x0563,
+ 0x0577,0x2173,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF4A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0188,0x01BA,0x01E5,0x020F,0x0235,0x0000,0x0260,
+ 0x0274,0x0288,0x029C,0x0000,0x1E07,0x1E2F,0x1E57,0x1E7F,
+ 0x0000,0x1EC5,0x1EED,0x1F03,0x1F25,0x0000,0x1F67,0x1F83,
+ 0x1FA7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0434,0x0448,0x045C,0x0481,0x04AF,0x04D5,0x0000,0x0564,
+ 0x0578,0x2174,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF4B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x018C,0x01BB,0x01E7,0x0211,0x0236,0x0000,0x0261,
+ 0x0275,0x0289,0x029D,0x0000,0x1E09,0x1E31,0x1E59,0x1E81,
+ 0x0000,0x1EC7,0x1EEF,0x1F04,0x1F26,0x1F50,0x1F70,0x1F84,
+ 0x1FB0,0x1FD6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0435,0x0449,0x045D,0x0000,0x04B1,0x04D7,0x0000,0x0565,
+ 0x0579,0x2175,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF4C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x018D,0x0000,0x01E9,0x0213,0x0237,0x0000,0x0262,
+ 0x0276,0x028A,0x029E,0x0000,0x1E0B,0x1E33,0x1E5B,0x1E83,
+ 0x1EA1,0x1EC9,0x1EF1,0x1F05,0x1F27,0x1F51,0x1F71,0x1F85,
+ 0x1FB1,0x1FD7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0436,0x044A,0x045E,0x048B,0x04B3,0x04D9,0x0000,0x0566,
+ 0x057A,0x2176,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF4D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0192,0x01BE,0x01EB,0x0215,0x0238,0x0000,0x0263,
+ 0x0277,0x028B,0x029F,0x0000,0x1E0D,0x1E35,0x1E5D,0x1E85,
+ 0x1EA3,0x1ECB,0x1EF3,0x1F06,0x1F30,0x1F52,0x1F72,0x1F86,
+ 0x1FB2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0437,0x044B,0x045F,0x048D,0x04B5,0x04DB,0x0000,0x0567,
+ 0x057B,0x2177,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF4E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0195,0x01BD,0x01ED,0x0217,0x0239,0x0250,0x0264,
+ 0x0278,0x028C,0x02A0,0x0000,0x1E0F,0x1E37,0x1E5F,0x1E87,
+ 0x1EA5,0x1ECD,0x1EF5,0x1F07,0x1F31,0x1F53,0x1F73,0x1F87,
+ 0x1FB3,0x1FE0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0438,0x044C,0x0461,0x048F,0x04B7,0x04DD,0x0000,0x0568,
+ 0x057C,0x2178,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF4F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0199,0x01C6,0x01EF,0x0219,0x0000,0x0251,0x0265,
+ 0x0279,0x028D,0x02A1,0x0000,0x1E11,0x1E39,0x1E61,0x1E89,
+ 0x1EA7,0x1ECF,0x1EF7,0x1F10,0x1F32,0x1F54,0x1F74,0x1F90,
+ 0x1FB4,0x1FE1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0439,0x044D,0x0463,0x0491,0x04B9,0x04DF,0x0501,0x0569,
+ 0x057D,0x2179,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF50,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x019A,0x01C9,0x01F0,0x021B,0x023C,0x0252,0x0266,
+ 0x027A,0x028E,0x02A2,0x0000,0x1E13,0x1E3B,0x1E63,0x1E8B,
+ 0x1EA9,0x1ED1,0x1EF9,0x1F11,0x1F33,0x1F55,0x1F75,0x1F91,
+ 0x0000,0x1FE2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x043A,0x044E,0x0465,0x0493,0x04BB,0x04E1,0x0503,0x056A,
+ 0x057E,0x217A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x019B,0x01CC,0x01F3,0x021D,0x0000,0x0253,0x0267,
+ 0x027B,0x028F,0x02A3,0x0000,0x1E15,0x1E3D,0x1E65,0x1E8D,
+ 0x1EAB,0x1ED3,0x0000,0x1F12,0x1F34,0x1F56,0x1F76,0x1F92,
+ 0x1FB6,0x1FE3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x043B,0x044F,0x0467,0x0495,0x04BD,0x04E3,0x0505,0x056B,
+ 0x057F,0x217B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF52,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x019E,0x01CE,0x01F5,0x021F,0x023F,0x0254,0x0268,
+ 0x027C,0x0290,0x02A4,0x0000,0x1E17,0x1E3F,0x1E67,0x1E8F,
+ 0x1EAD,0x1ED5,0x0000,0x1F13,0x1F35,0x1F57,0x1F77,0x1F93,
+ 0x1FB7,0x1FE4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x043C,0x0450,0x0469,0x0497,0x04BF,0x04E5,0x0507,0x056C,
+ 0x0580,0x217C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF53,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x01A1,0x01D0,0x01F9,0x0221,0x0240,0x0255,0x0269,
+ 0x027D,0x0291,0x02A5,0x0000,0x1E19,0x1E41,0x1E69,0x1E91,
+ 0x1EAF,0x1ED7,0x0000,0x1F14,0x1F36,0x0000,0x1F78,0x1F94,
+ 0x1FC2,0x1FE5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x043D,0x0451,0x046B,0x0499,0x0000,0x04E7,0x0509,0x056D,
+ 0x0581,0x217D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF54,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x01A3,0x01D2,0x01FB,0x0223,0x0000,0x0256,0x026A,
+ 0x027E,0x0292,0x02A6,0x0000,0x1E1B,0x1E43,0x1E6B,0x1E93,
+ 0x1EB1,0x1ED9,0x0000,0x1F15,0x1F37,0x0000,0x1F79,0x1F95,
+ 0x1FC3,0x1FE6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x043E,0x0452,0x046D,0x049B,0x04C2,0x04E9,0x050B,0x056E,
+ 0x0582,0x217E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF55,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x01A5,0x01D4,0x01FD,0x0225,0x0000,0x0257,0x026B,
+ 0x027F,0x0293,0x02A7,0x0000,0x1E1D,0x1E45,0x1E6D,0x1E95,
+ 0x1EB3,0x1EDB,0x0000,0x0000,0x1F40,0x0000,0x1F7A,0x1F96,
+ 0x1FC4,0x1FE7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x043F,0x0453,0x046F,0x049D,0x04C4,0x04EB,0x050D,0x056F,
+ 0x0583,0x217F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF56,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x01A8,0x01D6,0x01FF,0x0227,0x0000,0x0258,0x026C,
+ 0x0280,0x0294,0x02A8,0x0000,0x1E1F,0x1E47,0x1E6F,0x1E96,
+ 0x1EB5,0x1EDD,0x0000,0x0000,0x1F41,0x0000,0x1F7B,0x1F97,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0440,0x0454,0x0471,0x049F,0x04C6,0x04ED,0x050F,0x0570,
+ 0x0584,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF57,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x01AA,0x01D8,0x0201,0x0229,0x0000,0x0259,0x026D,
+ 0x0281,0x0295,0x02A9,0x0000,0x1E21,0x1E49,0x1E71,0x1E97,
+ 0x1EB7,0x1EDF,0x0000,0x0000,0x1F42,0x1F60,0x1F7C,0x1FA0,
+ 0x1FC6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0441,0x0455,0x0473,0x04A1,0x04C8,0x04EF,0x0000,0x0571,
+ 0x0585,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF58,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x01AB,0x01DA,0x0203,0x022B,0x0000,0x025A,0x026E,
+ 0x0282,0x0296,0x02AA,0x0000,0x1E23,0x1E4B,0x1E73,0x1E98,
+ 0x1EB9,0x1EE1,0x0000,0x0000,0x1F43,0x1F61,0x1F7D,0x1FA1,
+ 0x1FC7,0x1FF2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0442,0x0456,0x0475,0x04A3,0x04CA,0x04F1,0x0000,0x0572,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF59,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x01AD,0x01DC,0x0205,0x022D,0x0000,0x025B,0x026F,
+ 0x0283,0x0297,0x02AB,0x0000,0x1E25,0x1E4D,0x1E75,0x1E99,
+ 0x1EBB,0x1EE3,0x0000,0x1F20,0x1F44,0x1F62,0x0000,0x1FA2,
+ 0x1FD0,0x1FF3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0443,0x0457,0x0477,0x04A5,0x04CC,0x04F3,0x0000,0x0573,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0xFF5A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x01B0,0x01DD,0x0207,0x022F,0x0000,0x025C,0x0270,
+ 0x0284,0x0298,0x02AC,0x0000,0x1E27,0x1E4F,0x1E77,0x1E9A,
+ 0x1EBD,0x1EE5,0x0000,0x1F21,0x1F45,0x1F63,0x0000,0x1FA3,
+ 0x1FD1,0x1FF4
+};
+
+
+/* 00C0-05FF */
+static uint16 uni_0C00_05FF[1344]=
+{
+ 0x0017,0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,
+ 0x001F,0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,
+ 0x0027,0x0028,0x0029,0x002A,0x0067,0x0068,0x0069,0x0000,
+ 0x006B,0x006C,0x006D,0x006E,0x006F,0x0070,0x0071,0x008A,
+ 0x0037,0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,
+ 0x003F,0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,
+ 0x0047,0x0048,0x0049,0x004A,0x0087,0x0088,0x0089,0x0000,
+ 0x008B,0x008C,0x008D,0x008E,0x008F,0x0090,0x0091,0x0092,
+ 0x0073,0x0093,0x0074,0x0094,0x0075,0x0095,0x0076,0x0096,
+ 0x0077,0x0097,0x0078,0x0098,0x0079,0x0099,0x007A,0x009A,
+ 0x00B7,0x00D7,0x00B8,0x00D8,0x00B9,0x00D9,0x00BA,0x00DA,
+ 0x00BB,0x00DB,0x00BC,0x00DC,0x00BD,0x00DD,0x00BE,0x00DE,
+ 0x00BF,0x00DF,0x00C0,0x00E0,0x00C1,0x00E1,0x00C2,0x00E2,
+ 0x00C3,0x00E3,0x00C4,0x00E4,0x00C5,0x00E5,0x00C6,0x00E6,
+ 0x0000,0x00E7,0x00C8,0x00E8,0x00C9,0x00E9,0x00CA,0x00EA,
+ 0x0127,0x0108,0x0128,0x0109,0x0129,0x010A,0x012A,0x010B,
+ 0x012B,0x010C,0x012C,0x010D,0x012D,0x010E,0x012E,0x010F,
+ 0x012F,0x0130,0x0111,0x0131,0x0112,0x0132,0x0113,0x0133,
+ 0x0114,0x0134,0x0115,0x0135,0x0116,0x0136,0x0117,0x0137,
+ 0x0118,0x0138,0x0119,0x0139,0x011A,0x013A,0x0157,0x0177,
+ 0x0158,0x0178,0x0159,0x0179,0x015A,0x017A,0x015B,0x017B,
+ 0x015C,0x017C,0x015D,0x017D,0x015E,0x017E,0x015F,0x017F,
+ 0x0160,0x0180,0x0161,0x0181,0x0162,0x0182,0x0163,0x0183,
+ 0x0072,0x0164,0x0184,0x0165,0x0185,0x0166,0x0186,0x0187,
+ 0x1161,0x0A86,0x07B1,0x11B1,0x0801,0x1201,0x0AD6,0x0851,
+ 0x1251,0x0B76,0x0BC6,0x08A1,0x12A1,0x12F1,0x0D52,0x0C66,
+ 0x0D06,0x0941,0x1341,0x0857,0x0947,0x1391,0x0B27,0x0AD7,
+ 0x09E1,0x13E1,0x1431,0x1481,0x0D07,0x07B8,0x14D1,0x08A8,
+ 0x0B21,0x1521,0x0B71,0x1571,0x0BC1,0x15C1,0x0C18,0x0C11,
+ 0x1611,0x0D08,0x1661,0x16B1,0x0D01,0x1701,0x0859,0x0D51,
+ 0x1751,0x08F9,0x0949,0x0762,0x1162,0x07B2,0x11B2,0x0B79,
+ 0x0802,0x1202,0x1252,0x12A2,0x0992,0x1392,0x1342,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x09E2,0x0000,0x13E2,0x0A32,
+ 0x0000,0x1432,0x0A82,0x0000,0x1482,0x0AD2,0x14D2,0x0B22,
+ 0x1522,0x0B72,0x1572,0x0BC2,0x15C2,0x0C12,0x1612,0x0C62,
+ 0x1662,0x0CB2,0x16B2,0x0D02,0x1702,0x1752,0x0763,0x1163,
+ 0x07B3,0x11B3,0x0803,0x1203,0x0853,0x1253,0x08A3,0x12A3,
+ 0x08F3,0x12F3,0x0943,0x1343,0x0993,0x1393,0x09E3,0x13E3,
+ 0x1433,0x0A83,0x0000,0x1483,0x0AD3,0x14D3,0x0991,0x0000,
+ 0x0B23,0x1523,0x0B73,0x1573,0x0BC3,0x15C3,0x0C13,0x1613,
+ 0x0C63,0x1663,0x0CB3,0x16B3,0x0D03,0x1703,0x0D53,0x1753,
+ 0x0764,0x1164,0x07B4,0x11B4,0x0804,0x1204,0x0854,0x1254,
+ 0x08A4,0x12A4,0x08F4,0x12F4,0x0944,0x1344,0x0994,0x1394,
+ 0x09E4,0x13E4,0x0A34,0x1434,0x0A84,0x1484,0x0AD4,0x14D4,
+ 0x0AD1,0x1524,0x0B74,0x1574,0x0BC4,0x15C4,0x0C14,0x1614,
+ 0x0C64,0x1664,0x0CB4,0x16B4,0x0D04,0x1704,0x0D54,0x1754,
+ 0x0765,0x1165,0x07B5,0x11B5,0x1205,0x1255,0x12A5,0x12F5,
+ 0x1345,0x1395,0x09E5,0x0A35,0x1435,0x0A31,0x0A85,0x14D5,
+ 0x1525,0x0C19,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x1396,0x13E6,0x1436,0x1486,0x14D6,0x1526,0x1576,0x15C6,
+ 0x1616,0x1666,0x16B6,0x1706,0x1756,0x1167,0x11B7,0x1207,
+ 0x1257,0x12A7,0x12F7,0x1347,0x1397,0x13E7,0x1437,0x1487,
+ 0x14D7,0x1527,0x1577,0x15C7,0x1617,0x1667,0x16B7,0x1707,
+ 0x1757,0x1168,0x11B8,0x1208,0x1258,0x12A8,0x12F8,0x1348,
+ 0x1398,0x13E8,0x1438,0x1488,0x14D8,0x1528,0x1578,0x15C8,
+ 0x1618,0x1668,0x16B8,0x1708,0x1758,0x1169,0x11B9,0x1209,
+ 0x1259,0x12A9,0x12F9,0x1349,0x1399,0x13E9,0x1439,0x1489,
+ 0x14D9,0x1529,0x1579,0x15C9,0x1619,0x1669,0x16B9,0x1709,
+ 0x1759,0x116A,0x11BA,0x120A,0x125A,0x12AA,0x12FA,0x134A,
+ 0x139A,0x13EA,0x143A,0x148A,0x14DA,0x152A,0x157A,0x15CA,
+ 0x161A,0x166A,0x16BA,0x170A,0x175A,0x116B,0x11BB,0x120B,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x01F7,0x0000,
+ 0x01F8,0x01F9,0x01FA,0x0000,0x0253,0x0000,0x0254,0x0255,
+ 0x01D9,0x01FC,0x0257,0x01FE,0x01FF,0x0200,0x0201,0x0202,
+ 0x0258,0x0204,0x02A7,0x0206,0x0207,0x0208,0x0209,0x020A,
+ 0x0299,0x0248,0x0000,0x02A9,0x024B,0x024C,0x0298,0x024E,
+ 0x024F,0x0250,0x0251,0x0252,0x0217,0x0218,0x0219,0x021A,
+ 0x021B,0x021C,0x021D,0x021E,0x021F,0x0220,0x0221,0x0222,
+ 0x0223,0x0224,0x0225,0x0226,0x0227,0x0228,0x0229,0x022A,
+ 0x0267,0x0268,0x0269,0x026A,0x026B,0x026C,0x026D,0x026E,
+ 0x026F,0x0270,0x0271,0x0272,0x0273,0x0274,0x0275,0x0000,
+ 0x0277,0x0278,0x0259,0x025A,0x0297,0x02B8,0x02B9,0x02BA,
+ 0x0000,0x02BB,0x029C,0x02BC,0x029D,0x02BD,0x029E,0x02BE,
+ 0x029F,0x02BF,0x02A0,0x02C0,0x02A1,0x02C1,0x02A2,0x02C2,
+ 0x02A3,0x02C3,0x02A4,0x02C4,0x02A5,0x02C5,0x02A6,0x02C6,
+ 0x02C7,0x02C8,0x02C9,0x02CA,0x0000,0x0307,0x0308,0x0000,
+ 0x0309,0x0000,0x0000,0x030A,0x030B,0x02EC,0x02ED,0x02EE,
+ 0x0AF1,0x0B41,0x0B91,0x0BE1,0x0C31,0x0C81,0x0CD1,0x0D21,
+ 0x0732,0x0782,0x07D2,0x0822,0x0872,0x08C2,0x0912,0x0962,
+ 0x0730,0x0780,0x07D0,0x0820,0x0870,0x08C0,0x0910,0x0960,
+ 0x09B0,0x0A00,0x0A50,0x0AA0,0x0AF0,0x0B40,0x0B90,0x0BE0,
+ 0x0C30,0x0C80,0x0CD0,0x0D20,0x0731,0x0781,0x07D1,0x0821,
+ 0x0871,0x08C1,0x0911,0x0961,0x09B1,0x0A01,0x0A51,0x0AA1,
+ 0x1130,0x1180,0x11D0,0x1220,0x1270,0x12C0,0x1310,0x1360,
+ 0x13B0,0x1400,0x1450,0x14A0,0x14F0,0x1540,0x1590,0x15E0,
+ 0x1630,0x1680,0x16D0,0x1720,0x1131,0x1181,0x11D1,0x1221,
+ 0x1271,0x12C1,0x1311,0x1361,0x13B1,0x1401,0x1451,0x14A1,
+ 0x14F1,0x1541,0x1591,0x15E1,0x1631,0x1681,0x16D1,0x1721,
+ 0x1132,0x1182,0x11D2,0x1222,0x1272,0x12C2,0x1312,0x1362,
+ 0x09B2,0x13B2,0x0A02,0x1402,0x0A52,0x1452,0x0AA2,0x14A2,
+ 0x0AF2,0x14F2,0x0B42,0x1542,0x0B92,0x1592,0x0BE2,0x15E2,
+ 0x0C32,0x1632,0x0C82,0x1682,0x0CD2,0x16D2,0x0D22,0x1722,
+ 0x0733,0x1133,0x0783,0x1183,0x07D3,0x11D3,0x0823,0x1223,
+ 0x0873,0x1273,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0913,0x1313,0x0963,0x1363,0x09B3,0x13B3,
+ 0x0A03,0x1403,0x0A53,0x1453,0x0AA3,0x14A3,0x0AF3,0x14F3,
+ 0x0B43,0x1543,0x0B93,0x1593,0x0BE3,0x15E3,0x0C33,0x1633,
+ 0x0C83,0x1683,0x0CD3,0x16D3,0x0D23,0x1723,0x0734,0x1134,
+ 0x0784,0x1184,0x07D4,0x11D4,0x0824,0x1224,0x0874,0x1274,
+ 0x08C4,0x12C4,0x0914,0x1314,0x0964,0x1364,0x09B4,0x13B4,
+ 0x0A04,0x1404,0x0A54,0x1454,0x0AA4,0x14A4,0x0AF4,0x14F4,
+ 0x0B44,0x0B94,0x1594,0x0BE4,0x15E4,0x0C34,0x1634,0x0C84,
+ 0x1684,0x0CD4,0x16D4,0x0D24,0x1724,0x0735,0x1135,0x0000,
+ 0x07D5,0x11D5,0x0825,0x1225,0x0875,0x1275,0x08C5,0x12C5,
+ 0x0915,0x1315,0x0965,0x1365,0x09B5,0x13B5,0x0A05,0x1405,
+ 0x0A55,0x1455,0x0AA5,0x14A5,0x0AF5,0x14F5,0x0B45,0x1545,
+ 0x0B95,0x1595,0x0BE5,0x15E5,0x0C35,0x1635,0x0C85,0x1685,
+ 0x0CD5,0x16D5,0x0D25,0x1725,0x0736,0x1136,0x0786,0x1186,
+ 0x07D6,0x11D6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0A06,0x1406,0x0A56,0x1456,0x0AA6,0x14A6,0x0AF6,0x14F6,
+ 0x0B46,0x1546,0x0B96,0x1596,0x0BE6,0x15E6,0x0C36,0x1636,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0787,0x07D7,0x0827,0x0877,0x08C7,0x0917,0x0967,
+ 0x09B7,0x0A07,0x0A57,0x0AA7,0x0AF7,0x0B47,0x0B97,0x0BE7,
+ 0x0C37,0x0C87,0x0CD7,0x0D27,0x0738,0x0788,0x07D8,0x0828,
+ 0x0878,0x08C8,0x0918,0x0968,0x09B8,0x0A08,0x0A58,0x0AA8,
+ 0x0AF8,0x0B48,0x0B98,0x0BE8,0x0C38,0x0C88,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x1187,0x11D7,0x1227,0x1277,0x12C7,0x1317,0x1367,
+ 0x13B7,0x1407,0x1457,0x14A7,0x14F7,0x1547,0x1597,0x15E7,
+ 0x1637,0x1687,0x16D7,0x1727,0x1138,0x1188,0x11D8,0x1228,
+ 0x1278,0x12C8,0x1318,0x1368,0x13B8,0x1408,0x1458,0x14A8,
+ 0x14F8,0x1548,0x1598,0x15E8,0x1638,0x1688,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
+};
+
+
+/* 1E00-1FFF */
+static uint16 uni_1E00_1FFF[512]=
+{
+ 0x076C,0x116C,0x07BC,0x11BC,0x080C,0x120C,0x085C,0x125C,
+ 0x08AC,0x12AC,0x08FC,0x12FC,0x094C,0x134C,0x099C,0x139C,
+ 0x09EC,0x13EC,0x0A3C,0x143C,0x0A8C,0x148C,0x0ADC,0x14DC,
+ 0x0B2C,0x152C,0x0B7C,0x157C,0x0BCC,0x15CC,0x0C1C,0x161C,
+ 0x0C6C,0x166C,0x0CBC,0x16BC,0x0D0C,0x170C,0x0D5C,0x175C,
+ 0x076D,0x116D,0x07BD,0x11BD,0x080D,0x120D,0x085D,0x125D,
+ 0x08AD,0x12AD,0x08FD,0x12FD,0x094D,0x134D,0x099D,0x139D,
+ 0x09ED,0x13ED,0x0A3D,0x143D,0x0A8D,0x148D,0x0ADD,0x14DD,
+ 0x0B2D,0x152D,0x0B7D,0x157D,0x0BCD,0x15CD,0x0C1D,0x161D,
+ 0x0C6D,0x166D,0x0CBD,0x16BD,0x0D0D,0x170D,0x0D5D,0x175D,
+ 0x076E,0x116E,0x07BE,0x11BE,0x080E,0x120E,0x085E,0x125E,
+ 0x08AE,0x12AE,0x08FE,0x12FE,0x094E,0x134E,0x099E,0x139E,
+ 0x0770,0x13EE,0x0A3E,0x143E,0x0A8E,0x148E,0x0ADE,0x14DE,
+ 0x0B2E,0x152E,0x0B7E,0x157E,0x0BCE,0x15CE,0x0C1E,0x161E,
+ 0x0C6E,0x166E,0x0CBE,0x16BE,0x0D0E,0x170E,0x0D5E,0x175E,
+ 0x076F,0x116F,0x07BF,0x11BF,0x080F,0x120F,0x085F,0x125F,
+ 0x08AF,0x12AF,0x08FF,0x12FF,0x094F,0x134F,0x099F,0x139F,
+ 0x09EF,0x13EF,0x0A3F,0x143F,0x0A8F,0x148F,0x0ADF,0x14DF,
+ 0x0B2F,0x152F,0x0B7F,0x157F,0x0BCF,0x15CF,0x161F,0x166F,
+ 0x16BF,0x170F,0x175F,0x1170,0x0000,0x0000,0x0000,0x0000,
+ 0x0900,0x1300,0x0950,0x1350,0x09A0,0x13A0,0x09F0,0x13F0,
+ 0x0A40,0x1440,0x0A90,0x1490,0x0AE0,0x14E0,0x0B30,0x1530,
+ 0x0B80,0x1580,0x0BD0,0x15D0,0x0C20,0x1620,0x0C70,0x1670,
+ 0x0CC0,0x16C0,0x0D10,0x1710,0x0D60,0x1760,0x0771,0x1171,
+ 0x07C1,0x11C1,0x0811,0x1211,0x0861,0x1261,0x08B1,0x12B1,
+ 0x0901,0x1301,0x0951,0x1351,0x09A1,0x13A1,0x09F1,0x13F1,
+ 0x0A41,0x1441,0x0A91,0x1491,0x0AE1,0x14E1,0x0B31,0x1531,
+ 0x0B81,0x1581,0x0BD1,0x15D1,0x0C21,0x1621,0x0C71,0x1671,
+ 0x0CC1,0x16C1,0x0D11,0x1711,0x0D61,0x1761,0x0772,0x1172,
+ 0x07C2,0x11C2,0x0812,0x1212,0x0862,0x1262,0x08B2,0x12B2,
+ 0x0902,0x1302,0x0952,0x1352,0x09A2,0x13A2,0x09F2,0x13F2,
+ 0x0A42,0x1442,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x1173,0x11C3,0x1213,0x1263,0x12B3,0x1303,0x1353,0x13A3,
+ 0x0773,0x07C3,0x0813,0x0863,0x08B3,0x0903,0x0953,0x09A3,
+ 0x13F3,0x1443,0x1493,0x14E3,0x1533,0x1583,0x0000,0x0000,
+ 0x09F3,0x0A43,0x0A93,0x0AE3,0x0B33,0x0B83,0x0000,0x0000,
+ 0x1713,0x1763,0x1174,0x11C4,0x1214,0x1264,0x12B4,0x1304,
+ 0x0D13,0x0D63,0x0774,0x07C4,0x0814,0x0864,0x08B4,0x0904,
+ 0x1354,0x13A4,0x13F4,0x1444,0x1494,0x14E4,0x1534,0x1584,
+ 0x0954,0x09A4,0x09F4,0x0A44,0x0A94,0x0AE4,0x0B34,0x0B84,
+ 0x15D4,0x1624,0x1674,0x16C4,0x1714,0x1764,0x0000,0x0000,
+ 0x0BD4,0x0C24,0x0C74,0x0CC4,0x0D14,0x0D64,0x0000,0x0000,
+ 0x12B5,0x1305,0x1355,0x13A5,0x13F5,0x1445,0x1495,0x14E5,
+ 0x0000,0x0905,0x0000,0x09A5,0x0000,0x0A45,0x0000,0x0AE5,
+ 0x1675,0x16C5,0x1715,0x1765,0x1176,0x11C6,0x1216,0x1266,
+ 0x0C75,0x0CC5,0x0D15,0x0D65,0x0776,0x07C6,0x0816,0x0866,
+ 0x12B6,0x1306,0x1356,0x13A6,0x13F6,0x1446,0x1496,0x14E6,
+ 0x1536,0x1586,0x15D6,0x1626,0x1676,0x16C6,0x0000,0x0000,
+ 0x1177,0x11C7,0x1217,0x1267,0x12B7,0x1307,0x1357,0x13A7,
+ 0x0777,0x07C7,0x0817,0x0867,0x08B7,0x0907,0x0957,0x09A7,
+ 0x13F7,0x1447,0x1497,0x14E7,0x1537,0x1587,0x15D7,0x1627,
+ 0x09F7,0x0A47,0x0A97,0x0AE7,0x0B37,0x0B87,0x0BD7,0x0C27,
+ 0x1677,0x16C7,0x1717,0x1767,0x1178,0x11C8,0x1218,0x1268,
+ 0x0C77,0x0CC7,0x0D17,0x0D67,0x0778,0x07C8,0x0818,0x0868,
+ 0x12B8,0x1308,0x1358,0x13A8,0x13F8,0x0000,0x1498,0x14E8,
+ 0x08B8,0x0908,0x08B6,0x0906,0x09A8,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x1538,0x1588,0x15D8,0x0000,0x1678,0x16C8,
+ 0x0956,0x09A6,0x09F6,0x0A46,0x0B88,0x0000,0x0000,0x0000,
+ 0x1718,0x1768,0x1179,0x11C9,0x0000,0x0000,0x12B9,0x1309,
+ 0x0D18,0x0D68,0x0A96,0x0AE6,0x0000,0x0000,0x0000,0x0000,
+ 0x13A9,0x13F9,0x1449,0x1499,0x14E9,0x1539,0x1589,0x15D9,
+ 0x09A9,0x09F9,0x0BD6,0x0C26,0x0B39,0x0000,0x0000,0x0000,
+ 0x0000,0x0000,0x16C9,0x1719,0x0000,0x0000,0x11CA,0x121A,
+ 0x0B36,0x0B86,0x0C76,0x0CC6,0x0D19,0x0000,0x0000,0x0000
+};
+
+
+/* 2160-217F */
+static uint16 uni_2160_217F[32]=
+{
+ 0x0739,0x0789,0x07D9,0x0829,0x0879,0x08C9,0x0919,0x0969,
+ 0x09B9,0x0A09,0x0A59,0x0AA9,0x0AF9,0x0B49,0x0B99,0x0BE9,
+ 0x1139,0x1189,0x11D9,0x1229,0x1279,0x12C9,0x1319,0x1369,
+ 0x13B9,0x1409,0x1459,0x14A9,0x14F9,0x1549,0x1599,0x15E9
+};
+
+
+/* 24B0-24EF */
+static uint16 uni_24B0_24EF[64]=
+{
+ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0511,0x0512,
+ 0x0513,0x0514,0x0515,0x0516,0x0517,0x0518,0x0519,0x051A,
+ 0x051B,0x051C,0x051D,0x051E,0x051F,0x0520,0x0521,0x0522,
+ 0x0523,0x0524,0x0525,0x0526,0x0527,0x0528,0x0529,0x052A,
+ 0x0531,0x0532,0x0533,0x0534,0x0535,0x0536,0x0537,0x0538,
+ 0x0539,0x053A,0x053B,0x053C,0x053D,0x053E,0x053F,0x0540,
+ 0x0541,0x0542,0x0543,0x0544,0x0545,0x0546,0x0547,0x0548,
+ 0x0549,0x054A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
+};
+
+
+/* FF20-FF5F */
+static uint16 uni_FF20_FF5F[64]=
+{
+ 0x0000,0x0560,0x05B0,0x0600,0x0650,0x06A0,0x06F0,0x0740,
+ 0x0790,0x07E0,0x0830,0x0880,0x08D0,0x0920,0x0970,0x09C0,
+ 0x0A10,0x0A60,0x0AB0,0x0B00,0x0B50,0x0BA0,0x0BF0,0x0C40,
+ 0x0C90,0x0CE0,0x0D30,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 0x0000,0x0F60,0x0FB0,0x1000,0x1050,0x10A0,0x10F0,0x1140,
+ 0x1190,0x11E0,0x1230,0x1280,0x12D0,0x1320,0x1370,0x13C0,
+ 0x1410,0x1460,0x14B0,0x1500,0x1550,0x15A0,0x15F0,0x1640,
+ 0x1690,0x16E0,0x1730,0x0000,0x0000,0x0000,0x0000,0x0000
+};
+
+
+
+
+
+/*
+ Returns
+ a number 0..15, if a valid HEX digit in lower case,
+ -1 otherwise.
+*/
+
+static int hexlo(int x)
+{
+ static char hex_lo_digit[256]=
+ {
+ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */
+ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */
+ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* !"#$%&'()*+,-./ */
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,-1,-1,-1,-1,-1,-1, /* 0123456789:;<=>? */
+ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* @ABCDEFGHIJKLMNO */
+ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* PQRSTUVWXYZ[\]^_ */
+ -1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* `abcdefghijklmno */
+ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* pqrstuvwxyz{|}~. */
+ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */
+ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */
+ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */
+ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */
+ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */
+ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */
+ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */
+ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* ................ */
+ };
+ return hex_lo_digit[(unsigned int) x];
+}
+
+
+/*
+ Safe characters:
+ '\0' NULL
+ A..Z capital letters,
+ a..z small letters
+ 0..9 digits
+ _ underscore
+*/
+static char filename_safe_char[128]=
+{
+ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* ................ */
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* ................ */
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* !"#$%&'()*+,-./ */
+ 1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0, /* 0123456789:;<=>? */
+ 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* @ABCDEFGHIJKLMNO */
+ 1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1, /* PQRSTUVWXYZ[\]^_ */
+ 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* `abcdefghijklmno */
+ 1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0, /* pqrstuvwxyz{|}~. */
+};
+
+#define MY_FILENAME_ESCAPE '@'
+
+static int
+my_mb_wc_filename(CHARSET_INFO *cs __attribute__((unused)),
+ my_wc_t *pwc, const uchar *s, const uchar *e)
+{
+ int byte1, byte2;
+ if (s >= e)
+ return MY_CS_TOOFEW(0);
+
+ if (*s < 128 && filename_safe_char[*s])
+ {
+ *pwc= *s;
+ return 1;
+ }
+
+ if (*s != MY_FILENAME_ESCAPE)
+ return MY_CS_ILSEQ;
+
+ if (s + 3 > e)
+ return MY_CS_TOOFEW(0);
+
+ byte1= s[1];
+ byte2= s[2];
+
+ if (byte1 >= 0x30 && byte1 <= 0x7F &&
+ byte2 >= 0x30 && byte2 <= 0x7F)
+ {
+ int code= (byte1 - 0x30) * 80 + byte2 - 0x30;
+ if (code < 5994 && touni[code])
+ {
+ *pwc= touni[code];
+ return 3;
+ }
+ }
+
+ if (s + 4 > e)
+ return MY_CS_TOOFEW(0);
+
+ if ((byte1= hexlo(byte1)) >= 0 &&
+ (byte2= hexlo(byte2)) >= 0)
+ {
+ int byte3= hexlo(s[3]);
+ int byte4= hexlo(s[4]);
+ if (byte3 >=0 && byte4 >=0)
+ {
+ *pwc= (byte1 << 12) + (byte2 << 8) + (byte3 << 4) + byte4;
+ return 5;
+ }
+ }
+
+ return MY_CS_ILSEQ;
+}
+
+
+static int
+my_wc_mb_filename(CHARSET_INFO *cs __attribute__((unused)),
+ my_wc_t wc, unsigned char *s, unsigned char *e)
+{
+ int code;
+ char hex[]= "0123456789abcdef";
+ if (wc < 128 && filename_safe_char[wc])
+ {
+ *s= wc;
+ return 1;
+ }
+
+ if (s + 3 > e)
+ return MY_CS_TOOSMALL;
+
+ *s++= MY_FILENAME_ESCAPE;
+ if ((wc >= 0x00C0 && wc <= 0x05FF && (code= uni_0C00_05FF[wc - 0x00C0])) ||
+ (wc >= 0x1E00 && wc <= 0x1FFF && (code= uni_1E00_1FFF[wc - 0x1E00])) ||
+ (wc >= 0x2160 && wc <= 0x217F && (code= uni_2160_217F[wc - 0x2160])) ||
+ (wc >= 0x24B0 && wc <= 0x24EF && (code= uni_24B0_24EF[wc - 0x24B0])) ||
+ (wc >= 0xFF20 && wc <= 0xFF5F && (code= uni_FF20_FF5F[wc - 0xFF20])))
+ {
+ *s++= (code / 80) + 0x30;
+ *s++= (code % 80) + 0x30;
+ return 3;
+ }
+
+ /* Non letter */
+ if (s + 5 > e)
+ return MY_CS_TOOSMALL;
+
+ *s++= hex[(wc >> 12) & 15];
+ *s++= hex[(wc >> 8) & 15];
+ *s++= hex[(wc >> 4) & 15];
+ *s++= hex[(wc) & 15];
+ return 5;
+}
+
+
+static MY_COLLATION_HANDLER my_collation_filename_handler =
+{
+ NULL, /* init */
+ my_strnncoll_utf8,
+ my_strnncollsp_utf8,
+ my_strnxfrm_utf8,
+ my_strnxfrmlen_utf8,
+ my_like_range_mb,
+ my_wildcmp_utf8,
+ my_strcasecmp_utf8,
+ my_instr_mb,
+ my_hash_sort_utf8,
+ my_propagate_complex
+};
+
+static MY_CHARSET_HANDLER my_charset_filename_handler=
+{
+ NULL, /* init */
+ my_ismbchar_utf8,
+ my_mbcharlen_utf8,
+ my_numchars_mb,
+ my_charpos_mb,
+ my_well_formed_len_mb,
+ my_lengthsp_8bit,
+ my_numcells_mb,
+ my_mb_wc_filename,
+ my_wc_mb_filename,
+ my_caseup_str_utf8,
+ my_casedn_str_utf8,
+ my_caseup_utf8,
+ my_casedn_utf8,
+ my_snprintf_8bit,
+ my_long10_to_str_8bit,
+ my_longlong10_to_str_8bit,
+ my_fill_8bit,
+ my_strntol_8bit,
+ my_strntoul_8bit,
+ my_strntoll_8bit,
+ my_strntoull_8bit,
+ my_strntod_8bit,
+ my_strtoll10_8bit,
+ my_scan_8bit
+};
+
+
+
+CHARSET_INFO my_charset_filename=
+{
+ 33,0,0, /* number */
+ MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM|MY_CS_UNICODE, /* state */
+ "filename", /* cs name */
+ "filename", /* name */
+ "", /* comment */
+ NULL, /* tailoring */
+ ctype_utf8, /* ctype */
+ to_lower_utf8, /* to_lower */
+ to_upper_utf8, /* to_upper */
+ to_upper_utf8, /* sort_order */
+ NULL, /* contractions */
+ NULL, /* sort_order_big*/
+ NULL, /* tab_to_uni */
+ NULL, /* tab_from_uni */
+ my_unicase_default, /* caseinfo */
+ NULL, /* state_map */
+ NULL, /* ident_map */
+ 1, /* strxfrm_multiply */
+ 1, /* caseup_multiply */
+ 1, /* casedn_multiply */
+ 1, /* mbminlen */
+ 5, /* mbmaxlen */
+ 0, /* min_sort_char */
+ 0xFFFF, /* max_sort_char */
+ ' ', /* pad char */
+ 0, /* escape_with_backslash_is_dangerous */
+ &my_charset_filename_handler,
+ &my_collation_filename_handler
+};
+
#ifdef MY_TEST_UTF8
#include <stdio.h>
--- 1.18/sql/parse_file.cc 2005-11-24 00:47:27 +04:00
+++ 1.19/sql/parse_file.cc 2005-12-31 08:54:25 +04:00
@@ -226,8 +226,20 @@
DBUG_PRINT("enter", ("Dir: %s, file: %s, base 0x%lx",
dir->str, file_name->str, (ulong) base));
- fn_format(path, file_name->str, dir->str, 0, MY_UNPACK_FILENAME);
- path_end= strlen(path);
+ if (dir)
+ {
+ fn_format(path, file_name->str, dir->str, 0, MY_UNPACK_FILENAME);
+ path_end= strlen(path);
+ }
+ else
+ {
+ /*
+ if not dir is passed, it means file_name is a full path,
+ including dir name, file name itself, and an extension,
+ and with unpack_filename() executed over it.
+ */
+ path_end= strxnmov(path, FN_REFLEN, file_name->str, NullS) - path;
+ }
// temporary file name
path[path_end]='~';
--- 1.82/sql/sql_view.cc 2005-12-21 22:24:59 +04:00
+++ 1.83/sql/sql_view.cc 2005-12-31 08:54:44 +04:00
@@ -568,8 +568,8 @@
String str(buff,(uint32) sizeof(buff), system_charset_info);
char md5[MD5_BUFF_LENGTH];
bool can_be_merged;
- char dir_buff[FN_REFLEN], file_buff[FN_REFLEN];
- LEX_STRING dir, file;
+ char dir_buff[FN_REFLEN], file_buff[FN_REFLEN], path_buff[FN_REFLEN];
+ LEX_STRING dir, file, path;
DBUG_ENTER("mysql_register_view");
/* print query */
@@ -584,15 +584,17 @@
DBUG_PRINT("info", ("View: %s", str.ptr()));
/* print file name */
- (void) my_snprintf(dir_buff, FN_REFLEN, "%s/%s/",
- mysql_data_home, view->db);
- unpack_filename(dir_buff, dir_buff);
+ dir.length= build_table_filename(dir_buff, sizeof(dir_buff),
+ view->db, "", "");
dir.str= dir_buff;
- dir.length= strlen(dir_buff);
- file.str= file_buff;
- file.length= (strxnmov(file_buff, FN_REFLEN-1, view->table_name, reg_ext,
- NullS) - file_buff);
+ path.length= build_table_filename(path_buff, sizeof(path_buff),
+ view->db, view->table_name, reg_ext);
+ path.str= path_buff;
+
+ file.str= path.str + dir.length;
+ file.length= path.length - dir.length;
+
/* init timestamp */
if (!view->timestamp.str)
view->timestamp.str= view->timestamp_buffer;
@@ -1184,9 +1186,8 @@
{
TABLE_SHARE *share;
bool type= 0;
- strxnmov(path, FN_REFLEN-1, mysql_data_home, "/", view->db, "/",
- view->table_name, reg_ext, NullS);
- (void) unpack_filename(path, path);
+ build_table_filename(path, sizeof(path),
+ view->db, view->table_name, reg_ext);
VOID(pthread_mutex_lock(&LOCK_open));
if (access(path, F_OK) ||
(type= (mysql_frm_type(thd, path, ¬_used) != FRMTYPE_VIEW)))
--- 1.40/sql/sql_trigger.cc 2005-12-28 06:43:33 +04:00
+++ 1.41/sql/sql_trigger.cc 2005-12-31 08:54:42 +04:00
@@ -305,9 +305,9 @@
{
LEX *lex= thd->lex;
TABLE *table= tables->table;
- char dir_buff[FN_REFLEN], file_buff[FN_REFLEN], trigname_buff[FN_REFLEN],
+ char file_buff[FN_REFLEN], trigname_buff[FN_REFLEN],
trigname_path[FN_REFLEN];
- LEX_STRING dir, file, trigname_file;
+ LEX_STRING file, trigname_file;
LEX_STRING *trg_def, *name;
ulonglong *trg_sql_mode;
char trg_definer_holder[HOSTNAME_LENGTH + USERNAME_LENGTH + 2];
@@ -386,20 +386,18 @@
sql_create_definition_file() files handles renaming and backup of older
versions
*/
- strxnmov(dir_buff, FN_REFLEN-1, mysql_data_home, "/", tables->db, "/", NullS);
- dir.length= unpack_filename(dir_buff, dir_buff);
- dir.str= dir_buff;
- file.length= strxnmov(file_buff, FN_REFLEN-1, tables->table_name,
- triggers_file_ext, NullS) - file_buff;
+ file.length= build_table_filename(file_buff, FN_REFLEN-1,
+ tables->db, tables->table_name,
+ triggers_file_ext);
file.str= file_buff;
- trigname_file.length= strxnmov(trigname_buff, FN_REFLEN-1,
- lex->spname->m_name.str,
- trigname_file_ext, NullS) - trigname_buff;
+ trigname_file.length= build_table_filename(trigname_buff, FN_REFLEN-1,
+ tables->db,
+ lex->spname->m_name.str,
+ trigname_file_ext);
trigname_file.str= trigname_buff;
- strxnmov(trigname_path, FN_REFLEN-1, dir_buff, trigname_buff, NullS);
/* Use the filesystem to enforce trigger namespace constraints. */
- if (!access(trigname_path, F_OK))
+ if (!access(trigname_buff, F_OK))
{
my_error(ER_TRG_ALREADY_EXISTS, MYF(0));
return 1;
@@ -408,7 +406,7 @@
trigname.trigger_table.str= tables->table_name;
trigname.trigger_table.length= tables->table_name_length;
- if (sql_create_definition_file(&dir, &trigname_file, &trigname_file_type,
+ if (sql_create_definition_file(NULL, &trigname_file, &trigname_file_type,
(gptr)&trigname, trigname_file_parameters, 0))
return 1;
@@ -455,7 +453,7 @@
trg_definer->length= strxmov(trg_definer->str, definer_user->str, "@",
definer_host->str, NullS) - trg_definer->str;
- if (!sql_create_definition_file(&dir, &file, &triggers_file_type,
+ if (!sql_create_definition_file(NULL, &file, &triggers_file_type,
(gptr)this, triggers_file_parameters,
TRG_MAX_VERSIONS))
return 0;
@@ -483,9 +481,7 @@
static bool rm_trigger_file(char *path, char *db, char *table_name)
{
- strxnmov(path, FN_REFLEN-1, mysql_data_home, "/", db, "/", table_name,
- triggers_file_ext, NullS);
- unpack_filename(path, path);
+ build_table_filename(path, FN_REFLEN-1, db, table_name, triggers_file_ext);
return my_delete(path, MYF(MY_WME));
}
@@ -507,9 +503,7 @@
static bool rm_trigname_file(char *path, char *db, char *trigger_name)
{
- strxnmov(path, FN_REFLEN-1, mysql_data_home, "/", db, "/", trigger_name,
- trigname_file_ext, NullS);
- unpack_filename(path, path);
+ build_table_filename(path, FN_REFLEN-1, db, trigger_name, trigname_file_ext);
return my_delete(path, MYF(MY_WME));
}
@@ -567,18 +561,14 @@
}
else
{
- char dir_buff[FN_REFLEN], file_buff[FN_REFLEN];
- LEX_STRING dir, file;
+ char file_buff[FN_REFLEN];
+ LEX_STRING file;
- strxnmov(dir_buff, FN_REFLEN-1, mysql_data_home, "/", tables->db,
- "/", NullS);
- dir.length= unpack_filename(dir_buff, dir_buff);
- dir.str= dir_buff;
- file.length= strxnmov(file_buff, FN_REFLEN-1, tables->table_name,
- triggers_file_ext, NullS) - file_buff;
+ file.length= build_table_filename(file_buff, FN_REFLEN-1,
+ tables->db, tables->table_name,
+ triggers_file_ext);
file.str= file_buff;
-
- if (sql_create_definition_file(&dir, &file, &triggers_file_type,
+ if (sql_create_definition_file(NULL, &file, &triggers_file_type,
(gptr)this, triggers_file_parameters,
TRG_MAX_VERSIONS))
return 1;
@@ -692,9 +682,8 @@
DBUG_ENTER("Table_triggers_list::check_n_load");
- strxnmov(path_buff, FN_REFLEN-1, mysql_data_home, "/", db, "/", table_name,
- triggers_file_ext, NullS);
- path.length= unpack_filename(path_buff, path_buff);
+ path.length= build_table_filename(path_buff, FN_REFLEN-1,
+ db, table_name, triggers_file_ext);
path.str= path_buff;
// QQ: should we analyze errno somehow ?
@@ -1026,9 +1015,9 @@
struct st_trigname trigname;
DBUG_ENTER("add_table_for_trigger");
- strxnmov(path_buff, FN_REFLEN-1, mysql_data_home, "/", trig->m_db.str, "/",
- trig->m_name.str, trigname_file_ext, NullS);
- path.length= unpack_filename(path_buff, path_buff);
+ path.length= build_table_filename(path_buff, FN_REFLEN-1,
+ trig->m_db.str, trig->m_name.str,
+ trigname_file_ext);
path.str= path_buff;
if (access(path_buff, F_OK))
--- 1.3/sql/discover.cc 2004-09-13 17:46:36 +05:00
+++ 1.4/sql/discover.cc 2005-12-31 08:53:07 +04:00
@@ -55,7 +55,8 @@
*frmdata= NULL; // In case of errors
*len= 0;
error= 1;
- if ((file=my_open(fn_format(index_file,name,"",reg_ext,4),
+ if ((file=my_open(fn_format(index_file,name,"",reg_ext,
+ MY_UNPACK_FILENAME|MY_APPEND_EXT),
O_RDONLY | O_SHARE,
MYF(0))) < 0)
goto err_end;
@@ -112,7 +113,8 @@
//DBUG_DUMP("frmdata", (char*)frmdata, len);
error= 0;
- if ((file=my_create(fn_format(index_file,name,"",reg_ext,4),
+ if ((file=my_create(fn_format(index_file,name,"",reg_ext,
+ MY_UNPACK_FILENAME|MY_APPEND_EXT),
CREATE_MODE,O_RDWR | O_TRUNC,MYF(MY_WME))) >= 0)
{
if (my_write(file,(byte*)frmdata,len,MYF(MY_WME | MY_NABP)))
--- 1.227/sql/ha_ndbcluster.cc 2005-12-26 15:53:39 +04:00
+++ 1.228/sql/ha_ndbcluster.cc 2005-12-31 08:53:52 +04:00
@@ -3961,7 +3961,8 @@
DBUG_ENTER("ha_ndbcluster::create");
DBUG_PRINT("enter", ("name: %s", name));
- fn_format(name2, name, "", "",2); // Remove the .frm extension
+ strcpy(name2, name);
+ DBUG_ASSERT(*fn_rext((char*)name2) == 0);
set_dbname(name2);
set_tabname(name2);
--- 1.117/storage/innobase/row/row0mysql.c 2005-12-22 08:10:54 +04:00
+++ 1.118/storage/innobase/row/row0mysql.c 2005-12-31 08:55:25 +04:00
@@ -3484,7 +3484,8 @@
const char* name) /* in: table name in the form
'database/tablename' */
{
- return(strstr(name, "/#sql") != NULL);
+ //return(strstr(name, "/#sql") != NULL);
+ return(strstr(name, "/@0023sql") != NULL);
}
/*************************************************************************
--- 1.57/mysql-test/r/alter_table.result 2005-12-01 01:41:36 +04:00
+++ 1.58/mysql-test/r/alter_table.result 2005-12-31 08:51:12 +04:00
@@ -373,10 +373,10 @@
t1 1 Host 1 Host A NULL NULL NULL BTREE disabled
DROP TABLE t1;
create table t1 (a int);
-alter table t1 rename to `t1\\`;
-ERROR 42000: Incorrect table name 't1\\'
-rename table t1 to `t1\\`;
-ERROR 42000: Incorrect table name 't1\\'
+alter table t1 rename to ``;
+ERROR 42000: Incorrect table name ''
+rename table t1 to ``;
+ERROR 42000: Incorrect table name ''
drop table t1;
drop table if exists t1, t2;
Warnings:
--- 1.110/mysql-test/r/create.result 2005-12-26 13:50:35 +04:00
+++ 1.111/mysql-test/r/create.result 2005-12-31 08:51:16 +04:00
@@ -41,7 +41,14 @@
create table not_existing_database.test (a int);
ERROR 42000: Unknown database 'not_existing_database'
create table `a/a` (a int);
-ERROR 42000: Incorrect table name 'a/a'
+show create table `a/a`;
+Table Create Table
+a/a CREATE TABLE `a/a` (
+ `a` int(11) default NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+create table t1 like `a/a`;
+drop table `a/a`;
+drop table `t1`;
create table `aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa` (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa int);
ERROR 42000: Incorrect table name 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
create table a (`aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa` int);
@@ -360,8 +367,6 @@
ERROR 42S02: Unknown table 'non_existing_table'
create temporary table t3 like t1;
ERROR 42S01: Table 't3' already exists
-create table t3 like `a/a`;
-ERROR 42000: Incorrect table name 'a/a'
drop table t1, t2, t3;
drop table t3;
drop database mysqltest;
--- 1.86/mysql-test/r/show_check.result 2005-12-09 15:39:38 +04:00
+++ 1.87/mysql-test/r/show_check.result 2005-12-31 08:51:24 +04:00
@@ -274,8 +274,42 @@
drop table t1;
SET @old_sql_mode= @@sql_mode, sql_mode= '';
SET @old_sql_quote_show_create= @@sql_quote_show_create, sql_quote_show_create= OFF;
-CREATE TABLE `a/b` (i INT);
-ERROR 42000: Incorrect table name 'a/b'
+CREATE TABLE ```ab``cd``` (i INT);
+SHOW CREATE TABLE ```ab``cd```;
+Table Create Table
+`ab`cd` CREATE TABLE ```ab``cd``` (
+ i int(11) default NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+DROP TABLE ```ab``cd```;
+CREATE TABLE ```ab````cd``` (i INT);
+SHOW CREATE TABLE ```ab````cd```;
+Table Create Table
+`ab``cd` CREATE TABLE ```ab````cd``` (
+ i int(11) default NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+DROP TABLE ```ab````cd```;
+CREATE TABLE ```a` (i INT);
+SHOW CREATE TABLE ```a`;
+Table Create Table
+`a CREATE TABLE ```a` (
+ i int(11) default NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+DROP TABLE ```a`;
+CREATE TABLE `a.1` (i INT);
+SHOW CREATE TABLE `a.1`;
+Table Create Table
+a.1 CREATE TABLE `a.1` (
+ i int(11) default NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+DROP TABLE `a.1`;
+SET sql_mode= 'ANSI_QUOTES';
+CREATE TABLE """a" (i INT);
+SHOW CREATE TABLE """a";
+Table Create Table
+"a CREATE TABLE """a" (
+ i int(11) default NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+DROP TABLE """a";
SET sql_mode= '';
SET sql_quote_show_create= OFF;
CREATE TABLE t1 (i INT);
--- 1.44/mysql-test/t/alter_table.test 2005-12-05 21:59:57 +04:00
+++ 1.45/mysql-test/t/alter_table.test 2005-12-31 08:49:41 +04:00
@@ -232,9 +232,9 @@
#
create table t1 (a int);
--error 1103
-alter table t1 rename to `t1\\`;
+alter table t1 rename to ``;
--error 1103
-rename table t1 to `t1\\`;
+rename table t1 to ``;
drop table t1;
#
--- 1.72/mysql-test/t/create.test 2005-12-26 13:48:53 +04:00
+++ 1.73/mysql-test/t/create.test 2005-12-31 08:49:49 +04:00
@@ -41,8 +41,11 @@
-- error 1049
create table not_existing_database.test (a int);
---error 1103
create table `a/a` (a int);
+show create table `a/a`;
+create table t1 like `a/a`;
+drop table `a/a`;
+drop table `t1`;
--error 1103
create table `aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa` (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa int);
--error 1059
@@ -304,8 +307,6 @@
create table t3 like non_existing_table;
--error 1050
create temporary table t3 like t1;
---error 1103
-create table t3 like `a/a`;
drop table t1, t2, t3;
drop table t3;
drop database mysqltest;
--- 1.59/mysql-test/t/show_check.test 2005-12-09 15:39:39 +04:00
+++ 1.60/mysql-test/t/show_check.test 2005-12-31 08:49:53 +04:00
@@ -162,33 +162,28 @@
SET @old_sql_mode= @@sql_mode, sql_mode= '';
SET @old_sql_quote_show_create= @@sql_quote_show_create, sql_quote_show_create= OFF;
-######### hook for WL#1324 #
---error 1103
-CREATE TABLE `a/b` (i INT);
-# the above test should WORK when WL#1324 is done,
-# it should be removed and
-# the following part should be uncommented then
-#########################################################
-# begin of part that must be uncommented when WL#1324 is done
-#########################################################
-#CREATE TABLE ```ab``cd``` (i INT);
-#SHOW CREATE TABLE ```ab``cd```;
-#DROP TABLE ```ab``cd```;
-
-#CREATE TABLE ```ab````cd``` (i INT);
-#SHOW CREATE TABLE ```ab````cd```;
-#DROP TABLE ```ab````cd```;
-#
-#CREATE TABLE ```a` (i INT);
-#SHOW CREATE TABLE ```a`;
-#DROP TABLE ```a`;
-#
-#SET sql_mode= 'ANSI_QUOTES';
-#
-#CREATE TABLE """a" (i INT);
-#SHOW CREATE TABLE """a";
-#DROP TABLE """a";
-#
+CREATE TABLE ```ab``cd``` (i INT);
+SHOW CREATE TABLE ```ab``cd```;
+DROP TABLE ```ab``cd```;
+
+CREATE TABLE ```ab````cd``` (i INT);
+SHOW CREATE TABLE ```ab````cd```;
+DROP TABLE ```ab````cd```;
+
+CREATE TABLE ```a` (i INT);
+SHOW CREATE TABLE ```a`;
+DROP TABLE ```a`;
+
+CREATE TABLE `a.1` (i INT);
+SHOW CREATE TABLE `a.1`;
+DROP TABLE `a.1`;
+
+SET sql_mode= 'ANSI_QUOTES';
+
+CREATE TABLE """a" (i INT);
+SHOW CREATE TABLE """a";
+DROP TABLE """a";
+
#Bug #4374 SHOW TABLE STATUS FROM ignores collation_connection
#set names latin1;
@@ -196,9 +191,6 @@
#--replace_column 7 # 8 # 9 #
-#########################################################
-# end of part that must be uncommented when WL#1324 is done
-#########################################################
# to test quotes around keywords.. :
--- 1.246/sql/ha_innodb.cc 2005-12-29 22:11:33 +04:00
+++ 1.247/sql/ha_innodb.cc 2005-12-31 08:53:45 +04:00
@@ -4857,7 +4857,7 @@
srv_lower_case_table_names = FALSE;
}
- fn_format(name2, name, "", "", 2); // Remove the .frm extension
+ strcpy(name2, name);
normalize_table_name(norm_name, name2);
--- 1.33/sql/sql_rename.cc 2005-12-22 08:10:57 +04:00
+++ 1.34/sql/sql_rename.cc 2005-12-31 08:54:36 +04:00
@@ -155,18 +155,15 @@
old_alias= ren_table->table_name;
new_alias= new_table->table_name;
}
- sprintf(name,"%s/%s/%s%s",mysql_data_home,
- new_table->db, new_alias, reg_ext);
- unpack_filename(name, name);
+ build_table_filename(name, sizeof(name),
+ new_table->db, new_alias, reg_ext);
if (!access(name,F_OK))
{
my_error(ER_TABLE_EXISTS_ERROR, MYF(0), new_alias);
DBUG_RETURN(ren_table); // This can't be skipped
}
- sprintf(name,"%s/%s/%s%s",mysql_data_home,
- ren_table->db, old_alias,
- reg_ext);
- unpack_filename(name, name);
+ build_table_filename(name, sizeof(name),
+ ren_table->db, old_alias, reg_ext);
frm_type= mysql_frm_type(thd, name, &table_type);
switch (frm_type)
--- 1.9/sql/strfunc.cc 2005-02-25 18:53:16 +04:00
+++ 1.10/sql/strfunc.cc 2005-12-31 08:54:46 +04:00
@@ -235,3 +235,79 @@
*end_of_word= ptr;
return res;
}
+
+
+/*
+ Converts a string between character sets
+
+ SYNOPSIS
+ strconvert()
+ from_cs source character set
+ from source, a null terminated string
+ to destination buffer
+ to_length destination buffer length
+
+ NOTES
+ 'to' is always terminated with a '\0' character.
+ If there is no enough space to convert whole string,
+ only prefix is converted, and terminated with '\0'.
+
+ RETURN VALUES
+ result string length
+*/
+
+
+uint strconvert(CHARSET_INFO *from_cs, const char *from,
+ CHARSET_INFO *to_cs, char *to, uint to_length)
+{
+ int cnvres;
+ my_wc_t wc;
+ char *to_start= to;
+ uchar *to_end= (uchar*) to + to_length - 1;
+ int (*mb_wc)(struct charset_info_st *, my_wc_t *, const uchar *,
+ const uchar *)= from_cs->cset->mb_wc;
+ int (*wc_mb)(struct charset_info_st *, my_wc_t, uchar *s, uchar *e)=
+ to_cs->cset->wc_mb;
+ uint error_count= 0;
+
+ while (1)
+ {
+ /*
+ Using 'from + 10' is safe:
+ - it is enough to scan a single character in any character set.
+ - if remaining string is shorter than 10, then mb_wc will return
+ with error because of unexpected '\0' character.
+ */
+ if ((cnvres= (*mb_wc)(from_cs, &wc,
+ (uchar*) from, (uchar*) from + 10)) > 0)
+ {
+ if (!wc)
+ break;
+ from+= cnvres;
+ }
+ else if (cnvres == MY_CS_ILSEQ)
+ {
+ error_count++;
+ from++;
+ wc= '?';
+ }
+ else
+ break; // Impossible char.
+
+outp:
+
+ if ((cnvres= (*wc_mb)(to_cs, wc, (uchar*) to, to_end)) > 0)
+ to+= cnvres;
+ else if (cnvres == MY_CS_ILUNI && wc != '?')
+ {
+ error_count++;
+ wc= '?';
+ goto outp;
+ }
+ else
+ break;
+ }
+ *to= '\0';
+ return (uint32) (to - to_start);
+
+}
--- 1.17/sql/ha_partition.cc 2005-12-26 15:53:40 +04:00
+++ 1.18/sql/ha_partition.cc 2005-12-31 08:53:54 +04:00
@@ -399,7 +399,8 @@
DBUG_ENTER("ha_partition::create");
strmov(t_name, name);
- *fn_ext(t_name)= 0;
+// *fn_ext(t_name)= 0;
+ DBUG_ASSERT(*fn_rext((char*)name) == '\0');
if (del_ren_cre_table(t_name, NULL, table_arg, create_info))
{
handler::delete_table(t_name);
@@ -677,7 +678,7 @@
Create and write and close file
to be used at open, delete_table and rename_table
*/
- fn_format(file_name, name, "", ".par", MYF(MY_REPLACE_EXT));
+ fn_format(file_name, name, "", ".par", MY_APPEND_EXT);
if ((file= my_create(file_name, CREATE_MODE, O_RDWR | O_TRUNC,
MYF(MY_WME))) >= 0)
{
@@ -802,7 +803,7 @@
if (m_file_buffer)
DBUG_RETURN(FALSE);
- fn_format(buff, name, "", ha_par_ext, MYF(0));
+ fn_format(buff, name, "", ha_par_ext, MY_APPEND_EXT);
/* Following could be done with my_stat to read in whole file */
if ((file= my_open(buff, O_RDONLY | O_SHARE, MYF(0))) < 0)
--- 1.87/mysql-test/r/mysqldump.result 2005-12-02 15:01:36 +04:00
+++ 1.88/mysql-test/r/mysqldump.result 2005-12-31 08:51:20 +04:00
@@ -1627,7 +1627,7 @@
test_sequence
------ Testing with illegal database names ------
mysqldump: Got error: 1049: Unknown database 'mysqldump_test_d' when selecting the database
-mysqldump: Got error: 1102: Incorrect database name 'mysqld\ump_test_db' when selecting the database
+mysqldump: Got error: 1049: Unknown database 'mysqld\ump_test_db' when selecting the database
drop table t1, t2, t3;
drop database mysqldump_test_db;
use test;
| Thread |
|---|
| • bk commit into 5.1 tree (bar:1.2012) | bar | 31 Dec |