11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
263f83c9fcf40ab61b75edf5d2f2c1ae6bf876482Dave Kleikamp *   Copyright (C) International Business Machines Corp., 2000-2002
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *   This program is free software;  you can redistribute it and/or modify
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *   it under the terms of the GNU General Public License as published by
663f83c9fcf40ab61b75edf5d2f2c1ae6bf876482Dave Kleikamp *   the Free Software Foundation; either version 2 of the License, or
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *   (at your option) any later version.
863f83c9fcf40ab61b75edf5d2f2c1ae6bf876482Dave Kleikamp *
91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *   This program is distributed in the hope that it will be useful,
101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *   but WITHOUT ANY WARRANTY;  without even the implied warranty of
111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *   the GNU General Public License for more details.
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *   You should have received a copy of the GNU General Public License
1563f83c9fcf40ab61b75edf5d2f2c1ae6bf876482Dave Kleikamp *   along with this program;  if not, write to the Free Software
161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/fs.h>
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include "jfs_unicode.h"
211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Latin upper case
241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldssigned char UniUpperTable[512] = {
261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, /* 000-00f */
271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, /* 010-01f */
281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, /* 020-02f */
291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, /* 030-03f */
301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, /* 040-04f */
311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, /* 050-05f */
321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0,-32,-32,-32,-32,-32,-32,-32,-32,-32,-32,-32,-32,-32,-32,-32, /* 060-06f */
331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds -32,-32,-32,-32,-32,-32,-32,-32,-32,-32,-32,  0,  0,  0,  0,  0, /* 070-07f */
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, /* 080-08f */
351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, /* 090-09f */
361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, /* 0a0-0af */
371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, /* 0b0-0bf */
381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, /* 0c0-0cf */
391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, /* 0d0-0df */
401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds -32,-32,-32,-32,-32,-32,-32,-32,-32,-32,-32,-32,-32,-32,-32,-32, /* 0e0-0ef */
411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds -32,-32,-32,-32,-32,-32,-32,  0,-32,-32,-32,-32,-32,-32,-32,121, /* 0f0-0ff */
421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1, /* 100-10f */
431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1, /* 110-11f */
441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1, /* 120-12f */
451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0,  0,  0, -1,  0, -1,  0, -1,  0,  0, -1,  0, -1,  0, -1,  0, /* 130-13f */
461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  -1,  0, -1,  0, -1,  0, -1,  0, -1,  0,  0, -1,  0, -1,  0, -1, /* 140-14f */
471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1, /* 150-15f */
481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1, /* 160-16f */
491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0, -1,  0, -1,  0, -1,  0, -1,  0,  0, -1,  0, -1,  0, -1,  0, /* 170-17f */
501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0,  0,  0, -1,  0, -1,  0,  0, -1,  0,  0,  0, -1,  0,  0,  0, /* 180-18f */
511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0,  0, -1,  0,  0,  0,  0,  0,  0, -1,  0,  0,  0,  0,  0,  0, /* 190-19f */
521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0, -1,  0, -1,  0, -1,  0,  0, -1,  0,  0,  0,  0, -1,  0,  0, /* 1a0-1af */
531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  -1,  0,  0,  0, -1,  0, -1,  0,  0, -1,  0,  0,  0, -1,  0,  0, /* 1b0-1bf */
541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0,  0,  0,  0,  0, -1, -2,  0, -1, -2,  0, -1, -2,  0, -1,  0, /* 1c0-1cf */
551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,-79,  0, -1, /* 1d0-1df */
561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1, /* 1e0-1ef */
571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0,  0, -1, -2,  0, -1,  0,  0,  0, -1,  0, -1,  0, -1,  0, -1, /* 1f0-1ff */
581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Upper case range - Greek */
611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic signed char UniCaseRangeU03a0[47] = {
621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,-38,-37,-37,-37, /* 3a0-3af */
631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0,-32,-32,-32,-32,-32,-32,-32,-32,-32,-32,-32,-32,-32,-32,-32, /* 3b0-3bf */
641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds -32,-32,-31,-32,-32,-32,-32,-32,-32,-32,-32,-32,-64,-63,-63,
651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Upper case range - Cyrillic */
681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic signed char UniCaseRangeU0430[48] = {
691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds -32,-32,-32,-32,-32,-32,-32,-32,-32,-32,-32,-32,-32,-32,-32,-32, /* 430-43f */
701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds -32,-32,-32,-32,-32,-32,-32,-32,-32,-32,-32,-32,-32,-32,-32,-32, /* 440-44f */
711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0,-80,-80,-80,-80,-80,-80,-80,-80,-80,-80,-80,-80,  0,-80,-80, /* 450-45f */
721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Upper case range - Extended cyrillic */
751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic signed char UniCaseRangeU0490[61] = {
761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1, /* 490-49f */
771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1, /* 4a0-4af */
781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1, /* 4b0-4bf */
791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0,  0, -1,  0, -1,  0,  0,  0, -1,  0,  0,  0, -1,
801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Upper case range - Extended latin and greek */
831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic signed char UniCaseRangeU1e00[509] = {
841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1, /* 1e00-1e0f */
851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1, /* 1e10-1e1f */
861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1, /* 1e20-1e2f */
871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1, /* 1e30-1e3f */
881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1, /* 1e40-1e4f */
891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1, /* 1e50-1e5f */
901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1, /* 1e60-1e6f */
911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1, /* 1e70-1e7f */
921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1, /* 1e80-1e8f */
931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0, -1,  0, -1,  0, -1,  0,  0,  0,  0,  0,-59,  0, -1,  0, -1, /* 1e90-1e9f */
941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1, /* 1ea0-1eaf */
951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1, /* 1eb0-1ebf */
961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1, /* 1ec0-1ecf */
971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1, /* 1ed0-1edf */
981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0, -1, /* 1ee0-1eef */
991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0, -1,  0, -1,  0, -1,  0, -1,  0, -1,  0,  0,  0,  0,  0,  0, /* 1ef0-1eff */
1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   8,  8,  8,  8,  8,  8,  8,  8,  0,  0,  0,  0,  0,  0,  0,  0, /* 1f00-1f0f */
1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   8,  8,  8,  8,  8,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, /* 1f10-1f1f */
1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   8,  8,  8,  8,  8,  8,  8,  8,  0,  0,  0,  0,  0,  0,  0,  0, /* 1f20-1f2f */
1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   8,  8,  8,  8,  8,  8,  8,  8,  0,  0,  0,  0,  0,  0,  0,  0, /* 1f30-1f3f */
1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   8,  8,  8,  8,  8,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, /* 1f40-1f4f */
1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0,  8,  0,  8,  0,  8,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0, /* 1f50-1f5f */
1061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   8,  8,  8,  8,  8,  8,  8,  8,  0,  0,  0,  0,  0,  0,  0,  0, /* 1f60-1f6f */
1071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds  74, 74, 86, 86, 86, 86,100,100,  0,  0,112,112,126,126,  0,  0, /* 1f70-1f7f */
1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   8,  8,  8,  8,  8,  8,  8,  8,  0,  0,  0,  0,  0,  0,  0,  0, /* 1f80-1f8f */
1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   8,  8,  8,  8,  8,  8,  8,  8,  0,  0,  0,  0,  0,  0,  0,  0, /* 1f90-1f9f */
1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   8,  8,  8,  8,  8,  8,  8,  8,  0,  0,  0,  0,  0,  0,  0,  0, /* 1fa0-1faf */
1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   8,  8,  0,  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, /* 1fb0-1fbf */
1121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0,  0,  0,  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, /* 1fc0-1fcf */
1131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   8,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, /* 1fd0-1fdf */
1141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   8,  8,  0,  0,  0,  7,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, /* 1fe0-1fef */
1151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0,  0,  0,  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,
1161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Upper case range - Wide latin */
1191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic signed char UniCaseRangeUff40[27] = {
1201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   0,-32,-32,-32,-32,-32,-32,-32,-32,-32,-32,-32,-32,-32,-32,-32, /* ff40-ff4f */
1211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds -32,-32,-32,-32,-32,-32,-32,-32,-32,-32,-32,
1221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
1251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Upper Case Range
1261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
1271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsUNICASERANGE UniUpperRange[] = {
1281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    { 0x03a0,  0x03ce,  UniCaseRangeU03a0 },
1291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    { 0x0430,  0x045f,  UniCaseRangeU0430 },
1301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    { 0x0490,  0x04cc,  UniCaseRangeU0490 },
1311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    { 0x1e00,  0x1ffc,  UniCaseRangeU1e00 },
1321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    { 0xff40,  0xff5a,  UniCaseRangeUff40 },
1331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    { 0 }
1341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
135